@smuikit/angular 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +29 -0
- package/.turbo/turbo-test.log +13 -0
- package/dist/fesm2022/smui-angular.mjs +1054 -0
- package/dist/fesm2022/smui-angular.mjs.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/lib/components/button/button.component.d.ts +26 -0
- package/dist/lib/components/card/card.component.d.ts +30 -0
- package/dist/lib/components/input/input.component.d.ts +30 -0
- package/dist/lib/components/modal/modal.component.d.ts +30 -0
- package/dist/lib/components/typography/typography.component.d.ts +20 -0
- package/dist/lib/normalize-props.d.ts +24 -0
- package/dist/lib/smui.module.d.ts +18 -0
- package/dist/lib/theme.service.d.ts +45 -0
- package/dist/lib/use-machine.service.d.ts +21 -0
- package/dist/public-api.d.ts +9 -0
- package/jest.config.ts +24 -0
- package/ng-package.json +9 -0
- package/package.json +40 -0
- package/src/lib/components/button/button.component.ts +161 -0
- package/src/lib/components/card/card.component.ts +197 -0
- package/src/lib/components/input/input.component.ts +197 -0
- package/src/lib/components/modal/modal.component.ts +216 -0
- package/src/lib/components/typography/typography.component.ts +120 -0
- package/src/lib/normalize-props.ts +112 -0
- package/src/lib/smui.module.ts +43 -0
- package/src/lib/theme.service.ts +87 -0
- package/src/lib/use-machine.service.ts +51 -0
- package/src/public-api.ts +21 -0
- package/src/setup-jest.ts +1 -0
- package/tsconfig.json +21 -0
- package/tsconfig.lib.json +13 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smui-angular.mjs","sources":["../../src/lib/use-machine.service.ts","../../src/lib/normalize-props.ts","../../src/lib/components/button/button.component.ts","../../src/lib/components/input/input.component.ts","../../src/lib/components/modal/modal.component.ts","../../src/lib/components/typography/typography.component.ts","../../src/lib/components/card/card.component.ts","../../src/lib/smui.module.ts","../../src/lib/theme.service.ts","../../src/public-api.ts","../../src/smui-angular.ts"],"sourcesContent":["import { NgZone } from '@angular/core';\nimport type { MachineService } from '@smui/core';\n\nexport class MachineAdapter<\n TState extends string,\n TContext extends object,\n TEvent extends { type: string },\n> {\n private unsubscribe: (() => void) | null = null;\n\n snapshot: { state: TState; context: TContext };\n\n private constructor(\n private ngZone: NgZone,\n private machine: MachineService<TState, TContext, TEvent>,\n ) {\n this.snapshot = this.machine.getSnapshot();\n this.machine.start();\n this.unsubscribe = this.machine.subscribe(() => {\n this.ngZone.run(() => {\n this.snapshot = this.machine.getSnapshot();\n });\n });\n }\n\n static create<\n S extends string,\n C extends object,\n E extends { type: string },\n >(ngZone: NgZone, machine: MachineService<S, C, E>): MachineAdapter<S, C, E> {\n return new MachineAdapter(ngZone, machine);\n }\n\n get state(): TState {\n return this.snapshot.state;\n }\n\n get context(): TContext {\n return this.snapshot.context;\n }\n\n send(event: TEvent): void {\n this.machine.send(event);\n }\n\n destroy(): void {\n this.unsubscribe?.();\n this.unsubscribe = null;\n this.machine.stop();\n }\n}\n","import type { ElementProps } from '@smui/core';\n\n/**\n * Map of React-style event-handler names to their Angular attribute-binding\n * equivalents. Angular templates bind DOM events with `(eventname)`, but\n * when we spread props programmatically in `ngOnChanges` / renderers we\n * need the raw DOM event name so we can call `addEventListener` / set the\n * property on the native element.\n */\nconst EVENT_HANDLER_MAP: Record<string, string> = {\n onClick: 'click',\n onPointerDown: 'pointerdown',\n onPointerUp: 'pointerup',\n onFocus: 'focus',\n onBlur: 'blur',\n onKeyDown: 'keydown',\n onChange: 'input', // DOM `input` event is the Angular equivalent of React `onChange`\n};\n\n/** Property names that are boolean HTML attributes. */\nconst BOOLEAN_ATTRS = new Set([\n 'disabled',\n 'readOnly',\n 'required',\n 'hidden',\n]);\n\nexport interface NormalizedProps {\n /** Standard HTML attributes (strings / booleans) to set on the element. */\n attrs: Record<string, string | boolean | number | undefined>;\n /** Style object to apply via Renderer2.setStyle(). */\n styles: Record<string, string | number>;\n /** DOM event listeners keyed by lowercase event name (e.g. 'click'). */\n listeners: Record<string, (event: unknown) => void>;\n}\n\n/**\n * Takes an `ElementProps` object produced by a `connect*` function from\n * @smui/core and splits it into three buckets that Angular can consume:\n * attributes, styles, and event listeners.\n *\n * - `undefined` values are filtered out.\n * - React-style event handlers (`onClick`, `onFocus`, etc.) are mapped to\n * their DOM event names (`click`, `focus`, ...).\n */\nexport function normalizeProps(props: ElementProps | undefined): NormalizedProps {\n const attrs: Record<string, string | boolean | number | undefined> = {};\n const styles: Record<string, string | number> = {};\n const listeners: Record<string, (event: unknown) => void> = {};\n\n if (!props) {\n return { attrs, styles, listeners };\n }\n\n for (const [key, value] of Object.entries(props)) {\n // Skip undefined values\n if (value === undefined) continue;\n\n // Style object\n if (key === 'style' && typeof value === 'object' && value !== null) {\n Object.assign(styles, value);\n continue;\n }\n\n // Event handlers\n const eventName = EVENT_HANDLER_MAP[key];\n if (eventName && typeof value === 'function') {\n listeners[eventName] = value as (event: unknown) => void;\n continue;\n }\n\n // Regular attributes\n attrs[key] = value as string | boolean | number | undefined;\n }\n\n return { attrs, styles, listeners };\n}\n\n/**\n * Applies NormalizedProps to a native DOM element.\n * Returns an array of cleanup functions (for removing event listeners).\n */\nexport function applyProps(\n element: HTMLElement,\n normalized: NormalizedProps,\n): (() => void)[] {\n const cleanups: (() => void)[] = [];\n\n // Set attributes\n for (const [key, value] of Object.entries(normalized.attrs)) {\n if (value === undefined || value === false) {\n element.removeAttribute(key);\n } else if (value === true) {\n element.setAttribute(key, '');\n } else {\n element.setAttribute(key, String(value));\n }\n }\n\n // Set styles\n for (const [key, value] of Object.entries(normalized.styles)) {\n (element.style as unknown as Record<string, string>)[key] = String(value);\n }\n\n // Add event listeners\n for (const [eventName, handler] of Object.entries(normalized.listeners)) {\n element.addEventListener(eventName, handler);\n cleanups.push(() => element.removeEventListener(eventName, handler));\n }\n\n return cleanups;\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n NgZone,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ElementRef,\n ViewChild,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n createButtonMachine,\n connectButton,\n type ButtonConnectReturn,\n type ButtonState,\n type ButtonContext,\n type ButtonEvent,\n} from '@smui/core';\nimport { MachineAdapter } from '../../use-machine.service';\nimport { normalizeProps, applyProps } from '../../normalize-props';\n\n@Component({\n selector: 'smui-button',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n #buttonEl\n [class]=\"hostClass\"\n [attr.data-state]=\"api.state\"\n [attr.data-variant]=\"variant\"\n [attr.data-size]=\"size\"\n >\n <span\n *ngIf=\"api.isLoading\"\n class=\"smui-button__loader\"\n aria-hidden=\"true\"\n >\n <span class=\"smui-button__spinner\"></span>\n </span>\n <span\n class=\"smui-button__content\"\n [style.visibility]=\"api.isLoading ? 'hidden' : 'visible'\"\n >\n <ng-content></ng-content>\n </span>\n </button>\n `,\n styles: [\n `\n :host {\n display: inline-block;\n }\n .smui-button__loader {\n position: absolute;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .smui-button__content {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n `,\n ],\n})\nexport class ButtonComponent implements OnInit, OnDestroy, OnChanges {\n @Input() variant: ButtonContext['variant'] = 'primary';\n @Input() size: ButtonContext['size'] = 'md';\n @Input() disabled = false;\n @Input() loading = false;\n\n @Output() buttonClick = new EventEmitter<Event>();\n\n @ViewChild('buttonEl', { static: true }) buttonElRef!: ElementRef<HTMLButtonElement>;\n\n api!: ButtonConnectReturn;\n\n private adapter!: MachineAdapter<ButtonState, ButtonContext, ButtonEvent>;\n private listenerCleanups: (() => void)[] = [];\n\n get hostClass(): string {\n return `smui-button smui-button--${this.variant} smui-button--${this.size}`;\n }\n\n constructor(\n private ngZone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.adapter = MachineAdapter.create(\n this.ngZone,\n createButtonMachine({\n variant: this.variant,\n size: this.size,\n disabled: this.disabled,\n loading: this.loading,\n }),\n );\n this.updateApi();\n this.applyPropsToElement();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.adapter) return;\n\n if (changes['disabled']) {\n this.adapter.send({ type: 'SET_DISABLED', disabled: this.disabled });\n }\n if (changes['loading']) {\n this.adapter.send({ type: 'SET_LOADING', loading: this.loading });\n }\n\n this.updateApi();\n this.applyPropsToElement();\n }\n\n ngOnDestroy(): void {\n this.cleanupListeners();\n this.adapter?.destroy();\n }\n\n private updateApi(): void {\n this.api = connectButton({\n state: this.adapter.state,\n context: this.adapter.context,\n send: (event) => {\n this.adapter.send(event as ButtonEvent);\n this.updateApi();\n this.applyPropsToElement();\n this.cdr.markForCheck();\n },\n onClick: (event) => {\n this.buttonClick.emit(event as Event);\n },\n });\n }\n\n private applyPropsToElement(): void {\n if (!this.buttonElRef?.nativeElement) return;\n this.cleanupListeners();\n const normalized = normalizeProps(this.api.rootProps);\n this.listenerCleanups = applyProps(this.buttonElRef.nativeElement, normalized);\n }\n\n private cleanupListeners(): void {\n for (const cleanup of this.listenerCleanups) {\n cleanup();\n }\n this.listenerCleanups = [];\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n NgZone,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ElementRef,\n ViewChild,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n createInputMachine,\n connectInput,\n type InputConnectReturn,\n type InputState,\n type InputContext,\n type InputEvent,\n} from '@smui/core';\nimport { MachineAdapter } from '../../use-machine.service';\nimport { normalizeProps, applyProps } from '../../normalize-props';\n\n@Component({\n selector: 'smui-input',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"smui-input\"\n [attr.data-state]=\"api.state\"\n [attr.data-disabled]=\"disabled ? '' : null\"\n >\n <label\n *ngIf=\"label\"\n #labelEl\n class=\"smui-input__label\"\n [attr.for]=\"inputId\"\n >\n {{ label }}\n <span *ngIf=\"required\" class=\"smui-input__required\" aria-hidden=\"true\">*</span>\n </label>\n\n <input\n #inputEl\n class=\"smui-input__field\"\n [attr.id]=\"inputId\"\n [attr.placeholder]=\"placeholder\"\n [value]=\"api.value\"\n />\n\n <div\n *ngIf=\"api.hasError && error\"\n #errorEl\n class=\"smui-input__error\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ error }}\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .smui-input__label {\n display: block;\n margin-bottom: 4px;\n }\n .smui-input__required {\n color: var(--smui-color-danger, #dc2626);\n margin-left: 2px;\n }\n .smui-input__field {\n display: block;\n width: 100%;\n box-sizing: border-box;\n }\n .smui-input__error {\n color: var(--smui-color-danger, #dc2626);\n font-size: 0.875rem;\n margin-top: 4px;\n }\n `,\n ],\n})\nexport class InputComponent implements OnInit, OnDestroy, OnChanges {\n @Input() label = '';\n @Input() placeholder = '';\n @Input() disabled = false;\n @Input() error: string | null = null;\n @Input() required = false;\n @Input() value = '';\n @Input() inputId = `smui-input-${Date.now()}`;\n\n @Output() valueChange = new EventEmitter<string>();\n\n @ViewChild('inputEl', { static: true }) inputElRef!: ElementRef<HTMLInputElement>;\n @ViewChild('labelEl') labelElRef?: ElementRef<HTMLLabelElement>;\n @ViewChild('errorEl') errorElRef?: ElementRef<HTMLDivElement>;\n\n api!: InputConnectReturn;\n\n private adapter!: MachineAdapter<InputState, InputContext, InputEvent>;\n private listenerCleanups: (() => void)[] = [];\n\n constructor(\n private ngZone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.adapter = MachineAdapter.create(\n this.ngZone,\n createInputMachine({\n value: this.value,\n disabled: this.disabled,\n required: this.required,\n error: this.error,\n placeholder: this.placeholder,\n label: this.label,\n id: this.inputId,\n }),\n );\n this.updateApi();\n this.applyPropsToInput();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.adapter) return;\n\n if (changes['error']) {\n this.adapter.send({ type: 'SET_ERROR', error: this.error });\n }\n if (changes['value'] && !changes['value'].firstChange) {\n this.adapter.send({ type: 'CHANGE', value: this.value });\n }\n\n this.updateApi();\n this.applyPropsToInput();\n }\n\n ngOnDestroy(): void {\n this.cleanupListeners();\n this.adapter?.destroy();\n }\n\n private updateApi(): void {\n this.api = connectInput({\n state: this.adapter.state,\n context: this.adapter.context,\n send: (event) => {\n this.adapter.send(event as InputEvent);\n this.updateApi();\n this.applyPropsToInput();\n this.cdr.markForCheck();\n },\n onChange: (val: string) => {\n this.valueChange.emit(val);\n },\n });\n }\n\n private applyPropsToInput(): void {\n if (!this.inputElRef?.nativeElement) return;\n this.cleanupListeners();\n\n const normalized = normalizeProps(this.api.inputProps);\n this.listenerCleanups = applyProps(this.inputElRef.nativeElement, normalized);\n\n // Apply label props\n if (this.labelElRef?.nativeElement) {\n const labelNorm = normalizeProps(this.api.labelProps);\n this.listenerCleanups.push(...applyProps(this.labelElRef.nativeElement, labelNorm));\n }\n\n // Apply error props\n if (this.errorElRef?.nativeElement) {\n const errorNorm = normalizeProps(this.api.errorProps);\n this.listenerCleanups.push(...applyProps(this.errorElRef.nativeElement, errorNorm));\n }\n }\n\n private cleanupListeners(): void {\n for (const cleanup of this.listenerCleanups) {\n cleanup();\n }\n this.listenerCleanups = [];\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n NgZone,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ElementRef,\n ViewChild,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n HostListener,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n createModalMachine,\n connectModal,\n type ModalConnectReturn,\n type ModalState,\n type ModalContext,\n type ModalEvent,\n} from '@smui/core';\nimport { MachineAdapter } from '../../use-machine.service';\nimport { normalizeProps, applyProps } from '../../normalize-props';\n\n@Component({\n selector: 'smui-modal',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- Trigger slot -->\n <div #triggerEl class=\"smui-modal__trigger\" (click)=\"open()\">\n <ng-content select=\"[smuiModalTrigger]\"></ng-content>\n </div>\n\n <!-- Overlay + Content (portal-like fixed overlay) -->\n <ng-container *ngIf=\"api.isOpen\">\n <div\n #overlayEl\n class=\"smui-modal__overlay\"\n [attr.data-state]=\"api.state\"\n (click)=\"onOverlayClick($event)\"\n ></div>\n <div\n #contentEl\n class=\"smui-modal__content\"\n [attr.data-state]=\"api.state\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"titleId\"\n tabindex=\"-1\"\n >\n <div class=\"smui-modal__header\">\n <div [attr.id]=\"titleId\" class=\"smui-modal__title\">\n <ng-content select=\"[smuiModalTitle]\"></ng-content>\n </div>\n <button\n #closeEl\n class=\"smui-modal__close\"\n aria-label=\"Close\"\n (click)=\"close()\"\n type=\"button\"\n >\n ×\n </button>\n </div>\n <div class=\"smui-modal__body\">\n <ng-content></ng-content>\n </div>\n </div>\n </ng-container>\n `,\n styles: [\n `\n :host {\n display: inline-block;\n }\n .smui-modal__overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 999;\n }\n .smui-modal__content {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: var(--smui-color-surface, #ffffff);\n border-radius: 8px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n z-index: 1000;\n min-width: 320px;\n max-width: 90vw;\n max-height: 90vh;\n overflow-y: auto;\n outline: none;\n }\n .smui-modal__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-bottom: 1px solid var(--smui-color-border, #e5e7eb);\n }\n .smui-modal__title {\n font-weight: 600;\n font-size: 1.125rem;\n }\n .smui-modal__close {\n background: none;\n border: none;\n font-size: 1.5rem;\n cursor: pointer;\n padding: 4px 8px;\n line-height: 1;\n border-radius: 4px;\n }\n .smui-modal__close:hover {\n background: var(--smui-color-hover, #f3f4f6);\n }\n .smui-modal__body {\n padding: 24px;\n }\n `,\n ],\n})\nexport class ModalComponent implements OnInit, OnDestroy, OnChanges {\n @Input() closeOnOverlayClick = true;\n @Input() closeOnEscape = true;\n\n @Output() openChange = new EventEmitter<boolean>();\n\n @ViewChild('triggerEl') triggerElRef?: ElementRef<HTMLElement>;\n @ViewChild('contentEl') contentElRef?: ElementRef<HTMLElement>;\n @ViewChild('overlayEl') overlayElRef?: ElementRef<HTMLElement>;\n @ViewChild('closeEl') closeElRef?: ElementRef<HTMLButtonElement>;\n\n api!: ModalConnectReturn;\n titleId = `smui-modal-title-${Date.now()}`;\n\n private adapter!: MachineAdapter<ModalState, ModalContext, ModalEvent>;\n\n constructor(\n private ngZone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.adapter = MachineAdapter.create(\n this.ngZone,\n createModalMachine({\n closeOnOverlayClick: this.closeOnOverlayClick,\n closeOnEscape: this.closeOnEscape,\n }),\n );\n this.updateApi();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Modal machine doesn't have dynamic context updates for these,\n // but we store them for local use in event handlers.\n }\n\n ngOnDestroy(): void {\n this.adapter?.destroy();\n }\n\n /** Open the modal programmatically. */\n open(): void {\n this.adapter.send({ type: 'OPEN' });\n this.updateApi();\n this.openChange.emit(true);\n this.cdr.markForCheck();\n }\n\n /** Close the modal programmatically. */\n close(): void {\n this.adapter.send({ type: 'CLOSE' });\n this.updateApi();\n this.openChange.emit(false);\n this.cdr.markForCheck();\n }\n\n onOverlayClick(event: MouseEvent): void {\n if (this.closeOnOverlayClick) {\n this.close();\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent): void {\n if (this.closeOnEscape && event.key === 'Escape' && this.api.isOpen) {\n this.close();\n }\n }\n\n private updateApi(): void {\n this.api = connectModal({\n state: this.adapter.state,\n context: this.adapter.context,\n send: (event) => {\n this.adapter.send(event as ModalEvent);\n this.updateApi();\n this.cdr.markForCheck();\n },\n onOpenChange: (isOpen: boolean) => {\n this.openChange.emit(isOpen);\n },\n });\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n OnChanges,\n SimpleChanges,\n ElementRef,\n Renderer2,\n ViewChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n connectTypography,\n type TypographyConnectReturn,\n type TypographyConnectOptions,\n type TypographyVariant,\n} from '@smui/core';\n\n@Component({\n selector: 'smui-typography',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-container [ngSwitch]=\"element\">\n <h1 *ngSwitchCase=\"'h1'\" #textEl class=\"smui-typography\" [attr.data-variant]=\"variant\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </h1>\n <h2 *ngSwitchCase=\"'h2'\" #textEl class=\"smui-typography\" [attr.data-variant]=\"variant\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </h2>\n <h3 *ngSwitchCase=\"'h3'\" #textEl class=\"smui-typography\" [attr.data-variant]=\"variant\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </h3>\n <h4 *ngSwitchCase=\"'h4'\" #textEl class=\"smui-typography\" [attr.data-variant]=\"variant\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </h4>\n <h5 *ngSwitchCase=\"'h5'\" #textEl class=\"smui-typography\" [attr.data-variant]=\"variant\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </h5>\n <h6 *ngSwitchCase=\"'h6'\" #textEl class=\"smui-typography\" [attr.data-variant]=\"variant\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </h6>\n <span *ngSwitchCase=\"'span'\" #textEl class=\"smui-typography\" [attr.data-variant]=\"variant\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </span>\n <p *ngSwitchDefault #textEl class=\"smui-typography\" [attr.data-variant]=\"variant\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </p>\n </ng-container>\n\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TypographyComponent implements OnInit, OnChanges {\n @Input() variant: TypographyVariant = 'body1';\n @Input() align?: 'left' | 'center' | 'right';\n @Input() truncate = false;\n @Input() color?: string;\n\n element = 'p';\n\n private api!: TypographyConnectReturn;\n\n @ViewChild('textEl', { static: false })\n set textElRef(ref: ElementRef<HTMLElement> | undefined) {\n if (ref) {\n this.applyStyles(ref.nativeElement);\n }\n }\n\n constructor(private renderer: Renderer2) {}\n\n ngOnInit(): void {\n this.updateApi();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.updateApi();\n }\n\n private updateApi(): void {\n this.api = connectTypography({\n variant: this.variant,\n align: this.align,\n truncate: this.truncate,\n color: this.color,\n });\n this.element = this.api.element;\n }\n\n private applyStyles(el: HTMLElement): void {\n if (!this.api) return;\n\n const rootProps = this.api.rootProps;\n\n // Apply data attributes\n for (const [key, value] of Object.entries(rootProps)) {\n if (key === 'style' || value === undefined) continue;\n this.renderer.setAttribute(el, key, String(value));\n }\n\n // Apply styles\n if (rootProps.style && typeof rootProps.style === 'object') {\n for (const [prop, value] of Object.entries(rootProps.style)) {\n this.renderer.setStyle(el, prop, String(value));\n }\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnChanges,\n SimpleChanges,\n ElementRef,\n ViewChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n connectCard,\n type CardConnectReturn,\n type CardConnectOptions,\n} from '@smui/core';\nimport { normalizeProps, applyProps } from '../../normalize-props';\n\n// ---------------------------------------------------------------------------\n// CardHeaderComponent\n// ---------------------------------------------------------------------------\n@Component({\n selector: 'smui-card-header',\n standalone: true,\n template: `\n <div #headerEl class=\"smui-card__header\" data-part=\"header\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .smui-card__header {\n padding: var(--smui-card-header-padding, 16px 24px);\n border-bottom: 1px solid var(--smui-color-border, #e5e7eb);\n }\n `,\n ],\n})\nexport class CardHeaderComponent {}\n\n// ---------------------------------------------------------------------------\n// CardBodyComponent\n// ---------------------------------------------------------------------------\n@Component({\n selector: 'smui-card-body',\n standalone: true,\n template: `\n <div #bodyEl class=\"smui-card__body\" data-part=\"body\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .smui-card__body {\n padding: var(--smui-card-body-padding, 24px);\n }\n `,\n ],\n})\nexport class CardBodyComponent {}\n\n// ---------------------------------------------------------------------------\n// CardFooterComponent\n// ---------------------------------------------------------------------------\n@Component({\n selector: 'smui-card-footer',\n standalone: true,\n template: `\n <div #footerEl class=\"smui-card__footer\" data-part=\"footer\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .smui-card__footer {\n padding: var(--smui-card-footer-padding, 16px 24px);\n border-top: 1px solid var(--smui-color-border, #e5e7eb);\n }\n `,\n ],\n})\nexport class CardFooterComponent {}\n\n// ---------------------------------------------------------------------------\n// CardComponent\n// ---------------------------------------------------------------------------\n@Component({\n selector: 'smui-card',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n #cardEl\n class=\"smui-card\"\n [class.smui-card--interactive]=\"interactive\"\n [attr.data-variant]=\"variant\"\n [attr.data-padding]=\"padding\"\n [attr.role]=\"interactive ? 'button' : null\"\n [attr.tabindex]=\"interactive ? 0 : null\"\n (click)=\"onCardClick($event)\"\n (keydown)=\"onCardKeydown($event)\"\n >\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .smui-card {\n border-radius: var(--smui-card-radius, 8px);\n overflow: hidden;\n }\n .smui-card[data-variant='elevated'] {\n box-shadow: var(\n --smui-card-shadow,\n 0 1px 3px rgba(0, 0, 0, 0.1),\n 0 1px 2px rgba(0, 0, 0, 0.06)\n );\n }\n .smui-card[data-variant='outlined'] {\n border: 1px solid var(--smui-color-border, #e5e7eb);\n }\n .smui-card[data-variant='filled'] {\n background: var(--smui-color-surface, #f9fafb);\n }\n .smui-card--interactive {\n cursor: pointer;\n transition: box-shadow 0.2s ease;\n }\n .smui-card--interactive:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n .smui-card--interactive:focus-visible {\n outline: 2px solid var(--smui-color-primary, #6200ee);\n outline-offset: 2px;\n }\n `,\n ],\n})\nexport class CardComponent implements OnInit, OnChanges {\n @Input() variant: 'elevated' | 'outlined' | 'filled' = 'elevated';\n @Input() padding: 'none' | 'sm' | 'md' | 'lg' = 'md';\n @Input() interactive = false;\n\n @Output() cardClick = new EventEmitter<Event>();\n\n @ViewChild('cardEl', { static: true }) cardElRef!: ElementRef<HTMLElement>;\n\n private api!: CardConnectReturn;\n private listenerCleanups: (() => void)[] = [];\n\n ngOnInit(): void {\n this.updateApi();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.updateApi();\n }\n\n onCardClick(event: Event): void {\n if (this.interactive) {\n this.cardClick.emit(event);\n }\n }\n\n onCardKeydown(event: KeyboardEvent): void {\n if (this.interactive && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n this.cardClick.emit(event);\n }\n }\n\n private updateApi(): void {\n this.api = connectCard({\n variant: this.variant,\n padding: this.padding,\n interactive: this.interactive,\n onClick: (event) => {\n this.cardClick.emit(event as Event);\n },\n });\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { ButtonComponent } from './components/button/button.component';\nimport { InputComponent } from './components/input/input.component';\nimport { ModalComponent } from './components/modal/modal.component';\nimport { TypographyComponent } from './components/typography/typography.component';\nimport {\n CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent,\n} from './components/card/card.component';\n\n/**\n * SmuiModule re-exports every standalone component so consumers who prefer\n * the traditional NgModule approach can simply import this single module.\n *\n * For tree-shakeable imports, use the standalone components directly:\n * `imports: [ButtonComponent]`\n */\n@NgModule({\n imports: [\n ButtonComponent,\n InputComponent,\n ModalComponent,\n TypographyComponent,\n CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent,\n ],\n exports: [\n ButtonComponent,\n InputComponent,\n ModalComponent,\n TypographyComponent,\n CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent,\n ],\n})\nexport class SmuiModule {}\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/** Shape of a single design-token override. */\nexport interface TokenOverride {\n /** CSS custom-property name *without* the leading `--`, e.g. `smui-color-primary`. */\n name: string;\n value: string;\n}\n\n/**\n * ThemeService manages design tokens as CSS custom properties on the\n * document's root element (`<html>`). Consumers inject it and call\n * `setTokens()` or `setToken()` to apply a theme at runtime.\n *\n * It is provided in 'root' so there is a single, application-wide instance.\n */\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n private tokens = new Map<string, string>();\n private rootElement: HTMLElement | null = null;\n\n constructor(@Inject(DOCUMENT) private document: Document) {\n this.rootElement = this.document.documentElement;\n }\n\n /**\n * Bulk-set multiple design tokens.\n *\n * ```ts\n * themeService.setTokens({\n * 'smui-color-primary': '#6200ee',\n * 'smui-color-secondary': '#03dac6',\n * 'smui-spacing-md': '16px',\n * });\n * ```\n */\n setTokens(tokens: Record<string, string>): void {\n for (const [name, value] of Object.entries(tokens)) {\n this.setToken(name, value);\n }\n }\n\n /** Set a single design token. */\n setToken(name: string, value: string): void {\n this.tokens.set(name, value);\n this.applyToken(name, value);\n }\n\n /** Remove a single token override, reverting to the default value. */\n removeToken(name: string): void {\n this.tokens.delete(name);\n if (this.rootElement) {\n this.rootElement.style.removeProperty(`--${name}`);\n }\n }\n\n /** Remove all token overrides. */\n resetTokens(): void {\n for (const name of this.tokens.keys()) {\n if (this.rootElement) {\n this.rootElement.style.removeProperty(`--${name}`);\n }\n }\n this.tokens.clear();\n }\n\n /** Get the current value of a token (returns the override, not the computed). */\n getToken(name: string): string | undefined {\n return this.tokens.get(name);\n }\n\n /** Get all currently applied token overrides. */\n getAllTokens(): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [name, value] of this.tokens.entries()) {\n result[name] = value;\n }\n return result;\n }\n\n private applyToken(name: string, value: string): void {\n if (this.rootElement) {\n this.rootElement.style.setProperty(`--${name}`, value);\n }\n }\n}\n","// Module\nexport { SmuiModule } from './lib/smui.module';\n\n// Services\nexport { MachineAdapter } from './lib/use-machine.service';\nexport { ThemeService } from './lib/theme.service';\n\n// Utilities\nexport { normalizeProps, applyProps, type NormalizedProps } from './lib/normalize-props';\n\n// Components\nexport { ButtonComponent } from './lib/components/button/button.component';\nexport { InputComponent } from './lib/components/input/input.component';\nexport { ModalComponent } from './lib/components/modal/modal.component';\nexport { TypographyComponent } from './lib/components/typography/typography.component';\nexport {\n CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent,\n} from './lib/components/card/card.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { EventEmitter, NgZone, OnInit, OnDestroy, OnChanges, SimpleChanges, ElementRef, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { type ButtonConnectReturn, type ButtonContext } from '@smui/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class ButtonComponent implements OnInit, OnDestroy, OnChanges {
|
|
5
|
+
private ngZone;
|
|
6
|
+
private cdr;
|
|
7
|
+
variant: ButtonContext['variant'];
|
|
8
|
+
size: ButtonContext['size'];
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
loading: boolean;
|
|
11
|
+
buttonClick: EventEmitter<Event>;
|
|
12
|
+
buttonElRef: ElementRef<HTMLButtonElement>;
|
|
13
|
+
api: ButtonConnectReturn;
|
|
14
|
+
private adapter;
|
|
15
|
+
private listenerCleanups;
|
|
16
|
+
get hostClass(): string;
|
|
17
|
+
constructor(ngZone: NgZone, cdr: ChangeDetectorRef);
|
|
18
|
+
ngOnInit(): void;
|
|
19
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
20
|
+
ngOnDestroy(): void;
|
|
21
|
+
private updateApi;
|
|
22
|
+
private applyPropsToElement;
|
|
23
|
+
private cleanupListeners;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
|
|
25
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "smui-button", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; }, { "buttonClick": "buttonClick"; }, never, ["*"], true, never>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { EventEmitter, OnInit, OnChanges, SimpleChanges, ElementRef } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class CardHeaderComponent {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CardHeaderComponent, never>;
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CardHeaderComponent, "smui-card-header", never, {}, {}, never, ["*"], true, never>;
|
|
6
|
+
}
|
|
7
|
+
export declare class CardBodyComponent {
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CardBodyComponent, never>;
|
|
9
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CardBodyComponent, "smui-card-body", never, {}, {}, never, ["*"], true, never>;
|
|
10
|
+
}
|
|
11
|
+
export declare class CardFooterComponent {
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CardFooterComponent, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CardFooterComponent, "smui-card-footer", never, {}, {}, never, ["*"], true, never>;
|
|
14
|
+
}
|
|
15
|
+
export declare class CardComponent implements OnInit, OnChanges {
|
|
16
|
+
variant: 'elevated' | 'outlined' | 'filled';
|
|
17
|
+
padding: 'none' | 'sm' | 'md' | 'lg';
|
|
18
|
+
interactive: boolean;
|
|
19
|
+
cardClick: EventEmitter<Event>;
|
|
20
|
+
cardElRef: ElementRef<HTMLElement>;
|
|
21
|
+
private api;
|
|
22
|
+
private listenerCleanups;
|
|
23
|
+
ngOnInit(): void;
|
|
24
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
25
|
+
onCardClick(event: Event): void;
|
|
26
|
+
onCardKeydown(event: KeyboardEvent): void;
|
|
27
|
+
private updateApi;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CardComponent, never>;
|
|
29
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CardComponent, "smui-card", never, { "variant": { "alias": "variant"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "interactive": { "alias": "interactive"; "required": false; }; }, { "cardClick": "cardClick"; }, never, ["*"], true, never>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { EventEmitter, NgZone, OnInit, OnDestroy, OnChanges, SimpleChanges, ElementRef, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { type InputConnectReturn } from '@smui/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class InputComponent implements OnInit, OnDestroy, OnChanges {
|
|
5
|
+
private ngZone;
|
|
6
|
+
private cdr;
|
|
7
|
+
label: string;
|
|
8
|
+
placeholder: string;
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
error: string | null;
|
|
11
|
+
required: boolean;
|
|
12
|
+
value: string;
|
|
13
|
+
inputId: string;
|
|
14
|
+
valueChange: EventEmitter<string>;
|
|
15
|
+
inputElRef: ElementRef<HTMLInputElement>;
|
|
16
|
+
labelElRef?: ElementRef<HTMLLabelElement>;
|
|
17
|
+
errorElRef?: ElementRef<HTMLDivElement>;
|
|
18
|
+
api: InputConnectReturn;
|
|
19
|
+
private adapter;
|
|
20
|
+
private listenerCleanups;
|
|
21
|
+
constructor(ngZone: NgZone, cdr: ChangeDetectorRef);
|
|
22
|
+
ngOnInit(): void;
|
|
23
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
24
|
+
ngOnDestroy(): void;
|
|
25
|
+
private updateApi;
|
|
26
|
+
private applyPropsToInput;
|
|
27
|
+
private cleanupListeners;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<InputComponent, never>;
|
|
29
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InputComponent, "smui-input", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "error": { "alias": "error"; "required": false; }; "required": { "alias": "required"; "required": false; }; "value": { "alias": "value"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { EventEmitter, NgZone, OnInit, OnDestroy, OnChanges, SimpleChanges, ElementRef, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { type ModalConnectReturn } from '@smui/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class ModalComponent implements OnInit, OnDestroy, OnChanges {
|
|
5
|
+
private ngZone;
|
|
6
|
+
private cdr;
|
|
7
|
+
closeOnOverlayClick: boolean;
|
|
8
|
+
closeOnEscape: boolean;
|
|
9
|
+
openChange: EventEmitter<boolean>;
|
|
10
|
+
triggerElRef?: ElementRef<HTMLElement>;
|
|
11
|
+
contentElRef?: ElementRef<HTMLElement>;
|
|
12
|
+
overlayElRef?: ElementRef<HTMLElement>;
|
|
13
|
+
closeElRef?: ElementRef<HTMLButtonElement>;
|
|
14
|
+
api: ModalConnectReturn;
|
|
15
|
+
titleId: string;
|
|
16
|
+
private adapter;
|
|
17
|
+
constructor(ngZone: NgZone, cdr: ChangeDetectorRef);
|
|
18
|
+
ngOnInit(): void;
|
|
19
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
20
|
+
ngOnDestroy(): void;
|
|
21
|
+
/** Open the modal programmatically. */
|
|
22
|
+
open(): void;
|
|
23
|
+
/** Close the modal programmatically. */
|
|
24
|
+
close(): void;
|
|
25
|
+
onOverlayClick(event: MouseEvent): void;
|
|
26
|
+
handleKeydown(event: KeyboardEvent): void;
|
|
27
|
+
private updateApi;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ModalComponent, never>;
|
|
29
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ModalComponent, "smui-modal", never, { "closeOnOverlayClick": { "alias": "closeOnOverlayClick"; "required": false; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; }; }, { "openChange": "openChange"; }, never, ["[smuiModalTrigger]", "[smuiModalTitle]", "*"], true, never>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { OnInit, OnChanges, SimpleChanges, ElementRef, Renderer2 } from '@angular/core';
|
|
2
|
+
import { type TypographyVariant } from '@smui/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class TypographyComponent implements OnInit, OnChanges {
|
|
5
|
+
private renderer;
|
|
6
|
+
variant: TypographyVariant;
|
|
7
|
+
align?: 'left' | 'center' | 'right';
|
|
8
|
+
truncate: boolean;
|
|
9
|
+
color?: string;
|
|
10
|
+
element: string;
|
|
11
|
+
private api;
|
|
12
|
+
set textElRef(ref: ElementRef<HTMLElement> | undefined);
|
|
13
|
+
constructor(renderer: Renderer2);
|
|
14
|
+
ngOnInit(): void;
|
|
15
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
16
|
+
private updateApi;
|
|
17
|
+
private applyStyles;
|
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TypographyComponent, never>;
|
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TypographyComponent, "smui-typography", never, { "variant": { "alias": "variant"; "required": false; }; "align": { "alias": "align"; "required": false; }; "truncate": { "alias": "truncate"; "required": false; }; "color": { "alias": "color"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ElementProps } from '@smui/core';
|
|
2
|
+
export interface NormalizedProps {
|
|
3
|
+
/** Standard HTML attributes (strings / booleans) to set on the element. */
|
|
4
|
+
attrs: Record<string, string | boolean | number | undefined>;
|
|
5
|
+
/** Style object to apply via Renderer2.setStyle(). */
|
|
6
|
+
styles: Record<string, string | number>;
|
|
7
|
+
/** DOM event listeners keyed by lowercase event name (e.g. 'click'). */
|
|
8
|
+
listeners: Record<string, (event: unknown) => void>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Takes an `ElementProps` object produced by a `connect*` function from
|
|
12
|
+
* @smui/core and splits it into three buckets that Angular can consume:
|
|
13
|
+
* attributes, styles, and event listeners.
|
|
14
|
+
*
|
|
15
|
+
* - `undefined` values are filtered out.
|
|
16
|
+
* - React-style event handlers (`onClick`, `onFocus`, etc.) are mapped to
|
|
17
|
+
* their DOM event names (`click`, `focus`, ...).
|
|
18
|
+
*/
|
|
19
|
+
export declare function normalizeProps(props: ElementProps | undefined): NormalizedProps;
|
|
20
|
+
/**
|
|
21
|
+
* Applies NormalizedProps to a native DOM element.
|
|
22
|
+
* Returns an array of cleanup functions (for removing event listeners).
|
|
23
|
+
*/
|
|
24
|
+
export declare function applyProps(element: HTMLElement, normalized: NormalizedProps): (() => void)[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./components/button/button.component";
|
|
3
|
+
import * as i2 from "./components/input/input.component";
|
|
4
|
+
import * as i3 from "./components/modal/modal.component";
|
|
5
|
+
import * as i4 from "./components/typography/typography.component";
|
|
6
|
+
import * as i5 from "./components/card/card.component";
|
|
7
|
+
/**
|
|
8
|
+
* SmuiModule re-exports every standalone component so consumers who prefer
|
|
9
|
+
* the traditional NgModule approach can simply import this single module.
|
|
10
|
+
*
|
|
11
|
+
* For tree-shakeable imports, use the standalone components directly:
|
|
12
|
+
* `imports: [ButtonComponent]`
|
|
13
|
+
*/
|
|
14
|
+
export declare class SmuiModule {
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SmuiModule, never>;
|
|
16
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SmuiModule, never, [typeof i1.ButtonComponent, typeof i2.InputComponent, typeof i3.ModalComponent, typeof i4.TypographyComponent, typeof i5.CardComponent, typeof i5.CardHeaderComponent, typeof i5.CardBodyComponent, typeof i5.CardFooterComponent], [typeof i1.ButtonComponent, typeof i2.InputComponent, typeof i3.ModalComponent, typeof i4.TypographyComponent, typeof i5.CardComponent, typeof i5.CardHeaderComponent, typeof i5.CardBodyComponent, typeof i5.CardFooterComponent]>;
|
|
17
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<SmuiModule>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
/** Shape of a single design-token override. */
|
|
3
|
+
export interface TokenOverride {
|
|
4
|
+
/** CSS custom-property name *without* the leading `--`, e.g. `smui-color-primary`. */
|
|
5
|
+
name: string;
|
|
6
|
+
value: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* ThemeService manages design tokens as CSS custom properties on the
|
|
10
|
+
* document's root element (`<html>`). Consumers inject it and call
|
|
11
|
+
* `setTokens()` or `setToken()` to apply a theme at runtime.
|
|
12
|
+
*
|
|
13
|
+
* It is provided in 'root' so there is a single, application-wide instance.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ThemeService {
|
|
16
|
+
private document;
|
|
17
|
+
private tokens;
|
|
18
|
+
private rootElement;
|
|
19
|
+
constructor(document: Document);
|
|
20
|
+
/**
|
|
21
|
+
* Bulk-set multiple design tokens.
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* themeService.setTokens({
|
|
25
|
+
* 'smui-color-primary': '#6200ee',
|
|
26
|
+
* 'smui-color-secondary': '#03dac6',
|
|
27
|
+
* 'smui-spacing-md': '16px',
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
setTokens(tokens: Record<string, string>): void;
|
|
32
|
+
/** Set a single design token. */
|
|
33
|
+
setToken(name: string, value: string): void;
|
|
34
|
+
/** Remove a single token override, reverting to the default value. */
|
|
35
|
+
removeToken(name: string): void;
|
|
36
|
+
/** Remove all token overrides. */
|
|
37
|
+
resetTokens(): void;
|
|
38
|
+
/** Get the current value of a token (returns the override, not the computed). */
|
|
39
|
+
getToken(name: string): string | undefined;
|
|
40
|
+
/** Get all currently applied token overrides. */
|
|
41
|
+
getAllTokens(): Record<string, string>;
|
|
42
|
+
private applyToken;
|
|
43
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ThemeService, never>;
|
|
44
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ThemeService>;
|
|
45
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { NgZone } from '@angular/core';
|
|
2
|
+
import type { MachineService } from '@smui/core';
|
|
3
|
+
export declare class MachineAdapter<TState extends string, TContext extends object, TEvent extends {
|
|
4
|
+
type: string;
|
|
5
|
+
}> {
|
|
6
|
+
private ngZone;
|
|
7
|
+
private machine;
|
|
8
|
+
private unsubscribe;
|
|
9
|
+
snapshot: {
|
|
10
|
+
state: TState;
|
|
11
|
+
context: TContext;
|
|
12
|
+
};
|
|
13
|
+
private constructor();
|
|
14
|
+
static create<S extends string, C extends object, E extends {
|
|
15
|
+
type: string;
|
|
16
|
+
}>(ngZone: NgZone, machine: MachineService<S, C, E>): MachineAdapter<S, C, E>;
|
|
17
|
+
get state(): TState;
|
|
18
|
+
get context(): TContext;
|
|
19
|
+
send(event: TEvent): void;
|
|
20
|
+
destroy(): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { SmuiModule } from './lib/smui.module';
|
|
2
|
+
export { MachineAdapter } from './lib/use-machine.service';
|
|
3
|
+
export { ThemeService } from './lib/theme.service';
|
|
4
|
+
export { normalizeProps, applyProps, type NormalizedProps } from './lib/normalize-props';
|
|
5
|
+
export { ButtonComponent } from './lib/components/button/button.component';
|
|
6
|
+
export { InputComponent } from './lib/components/input/input.component';
|
|
7
|
+
export { ModalComponent } from './lib/components/modal/modal.component';
|
|
8
|
+
export { TypographyComponent } from './lib/components/typography/typography.component';
|
|
9
|
+
export { CardComponent, CardHeaderComponent, CardBodyComponent, CardFooterComponent, } from './lib/components/card/card.component';
|
package/jest.config.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Config } from 'jest';
|
|
2
|
+
|
|
3
|
+
const config: Config = {
|
|
4
|
+
preset: 'jest-preset-angular',
|
|
5
|
+
setupFilesAfterEnv: ['<rootDir>/src/setup-jest.ts'],
|
|
6
|
+
testPathIgnorePatterns: ['/node_modules/', '/dist/'],
|
|
7
|
+
moduleNameMapper: {
|
|
8
|
+
'@smuikit/core': '<rootDir>/../core/src/index.ts',
|
|
9
|
+
'@smuikit/tokens': '<rootDir>/../tokens/dist/js/tokens.js',
|
|
10
|
+
},
|
|
11
|
+
transform: {
|
|
12
|
+
'^.+\\.(ts|mjs|js|html)$': [
|
|
13
|
+
'jest-preset-angular',
|
|
14
|
+
{
|
|
15
|
+
tsconfig: '<rootDir>/tsconfig.json',
|
|
16
|
+
stringifyContentPathRegex: '\\.(html|svg)$',
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
|
|
21
|
+
moduleFileExtensions: ['ts', 'js', 'html', 'json'],
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default config;
|
package/ng-package.json
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@smuikit/angular",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Angular components for SMUI",
|
|
5
|
+
"sideEffects": false,
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "ng-packagr -p ng-package.json",
|
|
12
|
+
"test": "jest --config jest.config.ts --passWithNoTests",
|
|
13
|
+
"clean": "rm -rf dist"
|
|
14
|
+
},
|
|
15
|
+
"peerDependencies": {
|
|
16
|
+
"@angular/common": ">=17.0.0",
|
|
17
|
+
"@angular/core": ">=17.0.0",
|
|
18
|
+
"@angular/platform-browser": ">=17.0.0"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@smuikit/core": "workspace:*",
|
|
22
|
+
"@smuikit/tokens": "workspace:*",
|
|
23
|
+
"tslib": "^2.7.0"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@angular/common": "^19.0.0",
|
|
27
|
+
"@angular/compiler": "^19.0.0",
|
|
28
|
+
"@angular/compiler-cli": "^19.0.0",
|
|
29
|
+
"@angular/core": "^19.0.0",
|
|
30
|
+
"@angular/platform-browser": "^19.0.0",
|
|
31
|
+
"@angular/platform-browser-dynamic": "^19.0.0",
|
|
32
|
+
"@types/jest": "^29.5.0",
|
|
33
|
+
"jest": "^29.7.0",
|
|
34
|
+
"jest-preset-angular": "^14.0.0",
|
|
35
|
+
"ng-packagr": "^19.0.0",
|
|
36
|
+
"ts-jest": "^29.1.0",
|
|
37
|
+
"typescript": "~5.6.0",
|
|
38
|
+
"zone.js": "^0.15.0"
|
|
39
|
+
}
|
|
40
|
+
}
|