@filip.mazev/blocks 1.4.13 → 1.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/core/styles/_a11y.scss +1 -1
- package/core/styles/_index.scss +3 -9
- package/core/styles/_palettes.scss +54 -10
- package/core/styles/themes/_azure-ember-theme.scss +4 -0
- package/core/styles/themes/_brick-rose-cyan-theme.scss +4 -0
- package/core/styles/themes/_carbon-cobalt-theme.scss +4 -0
- package/effects/effects.css +120 -8
- package/fesm2022/filip.mazev-blocks-core.mjs +20 -31
- package/fesm2022/filip.mazev-blocks-core.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-effects-runtime.mjs +167 -46
- package/fesm2022/filip.mazev-blocks-effects-runtime.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-forms.mjs +12 -12
- package/fesm2022/filip.mazev-blocks-forms.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks.mjs +1 -1
- package/fesm2022/filip.mazev-blocks.mjs.map +1 -1
- package/package.json +1 -1
- package/schematics/ng-add/index.d.ts +1 -10
- package/schematics/ng-add/index.js +4 -13
- package/schematics/ng-add/schema.json +11 -17
- package/types/filip.mazev-blocks-core.d.ts +4 -13
- package/types/filip.mazev-blocks-effects-runtime.d.ts +2 -0
- package/types/filip.mazev-blocks.d.ts +1 -1
- package/core/styles/themes/_azure-coral-theme.scss +0 -4
- package/core/styles/themes/_blue-theme.scss +0 -5
- package/core/styles/themes/_graphite-sky-blue-theme.scss +0 -19
- package/core/styles/themes/_green-theme.scss +0 -5
- package/core/styles/themes/_orange-theme.scss +0 -5
- package/core/styles/themes/_purple-theme.scss +0 -5
- package/core/styles/themes/_red-theme.scss +0 -5
- package/core/styles/themes/_scarlet-cyan-theme.scss +0 -4
- package/core/styles/themes/_white-theme.scss +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filip.mazev-blocks-forms.mjs","names":[],"sources":["../../../projects/blocks/forms/components/button/button.ts","../../../projects/blocks/forms/components/button/button.html","../../../projects/blocks/forms/directives/bx-error.directive.ts","../../../projects/blocks/forms/components/form-field/form-field.ts","../../../projects/blocks/forms/components/form-field/form-field.html","../../../projects/blocks/forms/components/checkbox/checkbox.ts","../../../projects/blocks/forms/components/checkbox/checkbox.html","../../../projects/blocks/forms/components/input-field/input-field.ts","../../../projects/blocks/forms/components/input-field/input-field.html","../../../projects/blocks/forms/components/radio-button/radio-button.ts","../../../projects/blocks/forms/components/radio-button/radio-button.html","../../../projects/blocks/forms/components/search-input/search-input.ts","../../../projects/blocks/forms/components/search-input/search-input.html","../../../projects/blocks/forms/components/select/select.ts","../../../projects/blocks/forms/components/select/select.html","../../../projects/blocks/forms/components/slide-toggle/slide-toggle.ts","../../../projects/blocks/forms/components/slide-toggle/slide-toggle.html","../../../projects/blocks/forms/directives/slider.directive.ts"],"sourcesContent":["import { injectComponentSurface } from '@filip.mazev/blocks/effects';\nimport { Component, input, booleanAttribute, HostListener, inject, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { BxA11yService } from '@filip.mazev/blocks/core';\nimport { ButtonColor, ButtonVariant } from '../../types/form.types';\n\n@Component({\n selector: 'bx-button, button[bx-button], a[bx-button]',\n standalone: true,\n templateUrl: './button.html',\n styleUrl: './button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '\"bx-btn bx-btn-\" + variant() + \" bx-btn-color-\" + color()',\n '[class.bx-btn-is-outlined]': 'outlined()',\n '[class.bx-btn-is-elevated]': 'elevated()',\n '[class.bx-btn-animated]': 'isAnimated()',\n '[class.bx-btn-non-interactive]': '!interactive()',\n '[attr.disabled]': 'disabled() ? true : null',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.tabindex]': 'disabled() ? \"-1\" : null'\n }\n})\nexport class Button {\n private readonly appearance = injectComponentSurface(() => ({\n interactive: this.variant() === 'text' || !this.interactive() || this.disabled() ? false : undefined,\n emission:\n this.variant() !== 'text' && this.interactive() && !this.disabled()\n ? this.color() === 'primary' || this.color() === 'grayscale'\n ? 'var(--bx-primary)'\n : this.color() === 'accent'\n ? 'var(--bx-accent)'\n : `var(--bx-text-${this.color()})`\n : undefined\n }));\n\n private readonly a11y = inject(BxA11yService);\n\n public readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n\n public readonly variant = input<ButtonVariant>('text');\n public readonly color = input<ButtonColor>('primary');\n public readonly outlined = input<boolean>(false);\n public readonly elevated = input<boolean>(false);\n public readonly disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n public readonly interactive = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n @HostListener('click', ['$event'])\n protected onClick(event: Event) {\n if (this.disabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n}\n","<span class=\"bx-btn-content-wrapper\">\n <ng-content></ng-content>\n</span>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'bx-error',\n standalone: true,\n template: '<ng-content />'\n})\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class -- The component provides the projection selector and has no behavior.\nexport class BxError {}\n","import { afterRenderEffect, Component, computed, contentChild, ElementRef, inject, input, viewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, isTextWithKey, ResolvableText, BxA11yService } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { BxGlassLightingService } from '@filip.mazev/blocks/effects';\nimport { BxError } from '../../directives/bx-error.directive';\nimport { TooltipDirective } from '@filip.mazev/blocks/primitives';\n\n@Component({\n selector: 'bx-form-field',\n standalone: true,\n imports: [CommonModule, Icon, TooltipDirective],\n templateUrl: './form-field.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './form-field.scss'\n})\nexport class FormField {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly lighting = inject(BxGlassLightingService);\n protected readonly projectedError = contentChild(BxError, { read: ElementRef<HTMLElement> });\n private readonly errorElement = viewChild<ElementRef<HTMLElement>>('errorText');\n\n protected readonly resolvedLabel = computed(() => this.resolveText(this.label()));\n protected readonly resolvedError = computed(() => this.resolveText(this.error()));\n public readonly inline = input(false);\n public readonly label = input<ResolvableText | undefined>(undefined);\n public readonly tooltip = input<ResolvableText | undefined>(undefined);\n public readonly error = input<ResolvableText | undefined>(undefined);\n public readonly required = input<boolean>(false);\n public readonly loading = input<boolean>(false);\n public readonly forId = input<string>('');\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n constructor() {\n afterRenderEffect((onCleanup) => {\n const projected = this.projectedError()?.nativeElement;\n const error = this.resolvedError() ? this.errorElement()?.nativeElement : projected;\n if (!error) return;\n const parent = this.element.parentElement;\n const root = this.element.closest<HTMLElement>('form, fieldset') ?? (parent?.tagName.startsWith('BX-') ? parent.parentElement : parent);\n if (!root) return;\n const control = this.element.querySelector<HTMLElement>('.bx-field-control > [data-bx-surface]');\n const light = this.lighting.register(root, {\n // Anchor the lower-edge glow to the control, independently of floating\n // labels, error icons and the length of the validation message.\n element: control ?? error,\n edge: control ? 'bottom' : undefined,\n offsetX: 0.5,\n offsetY: control ? 1 : 0,\n z: 32,\n color: 'var(--bx-text-danger)',\n intensity: 0.9,\n radius: 240\n });\n onCleanup(() => light.destroy());\n });\n }\n\n private resolveText(textObj: ResolvableText | undefined): string | undefined {\n this.i18n?.version?.();\n if (!textObj) return undefined;\n if (isTextWithKey(textObj)) {\n return this.i18n?.translate(textObj.key) ?? textObj.key;\n }\n return textObj;\n }\n}\n","<div class=\"bx-field-wrapper\" [class.is-invalid]=\"!!resolvedError() || !!projectedError()\" [attr.data-bx-field-invalid]=\"!!resolvedError() || !!projectedError()\">\n\n @if (resolvedLabel() || (tooltip() && !inline())) {\n <div class=\"bx-field-header\">\n <label class=\"bx-field-label\" [attr.for]=\"forId()\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-field-required\">*</span> }\n </label>\n\n @if (tooltip()) {\n <button type=\"button\" class=\"bx-field-tooltip-trigger\" [bxTooltip]=\"tooltip()!\" bxTooltipTouch=\"tap\" placement=\"top\" aria-label=\"More information\">\n <bx-icon name=\"help-circle\" size=\"16\"></bx-icon>\n </button>\n }\n\n @if (loading()) {\n <bx-icon name=\"loader\" class=\"bx-spin\" size=\"16\"></bx-icon>\n }\n </div>\n }\n\n <div class=\"bx-field-control\" [class.bx-field-control-inline]=\"inline()\">\n <ng-content></ng-content>\n @if (inline() && tooltip()) {\n <button type=\"button\" class=\"bx-field-tooltip-trigger\" [bxTooltip]=\"tooltip()!\" bxTooltipTouch=\"tap\" placement=\"top\" [attr.aria-label]=\"'More information'\">\n <bx-icon name=\"help-circle\" size=\"16\"></bx-icon>\n </button>\n }\n </div>\n\n <div class=\"bx-field-error-projected\">\n <ng-content select=\"bx-error\"></ng-content>\n </div>\n\n @if (resolvedError()) {\n <div class=\"bx-field-error\" [class.bx-animated]=\"isAnimated()\">\n <bx-icon name=\"alert-circle\" size=\"16\"></bx-icon>\n <span #errorText class=\"bx-field-error-text\">{{ resolvedError() }}</span>\n </div>\n }\n</div>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-checkbox',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './checkbox.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './checkbox.scss'\n})\nexport class Checkbox extends BxBaseControl<boolean> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-checkbox-${uuidv4()}`);\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected showTooltip = false;\n\n protected onToggle(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.checked);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"checkbox\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\" [checked]=\"internalValue() === true\"\n (change)=\"onToggle($event)\" (blur)=\"onBlur()\">\n\n <div class=\"bx-checkbox-box\" bxSurface [bxSurfaceEmission]=\"errorMessage ? 'var(--bx-text-danger)' : 'var(--bx-accent)'\" [class.is-checked]=\"internalValue() === true\" [class.is-invalid]=\"!!errorMessage\">\n @if (internalValue() === true) {\n <bx-icon name=\"check\" size=\"16\"></bx-icon>\n }\n </div>\n\n @if (resolvedLabel()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n </label>\n</bx-form-field>","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, DestroyRef, inject, input, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\nimport { InputFieldTypes } from '../../types/form.types';\nimport { Icon } from '@filip.mazev/blocks/icons';\n\n@Component({\n selector: 'bx-input-field',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './input-field.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './input-field.scss'\n})\nexport class InputField extends BxBaseControl<string | number | null> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly inputId = computed(() => `bx-input-${uuidv4()}`);\n protected readonly isFocused = signal<boolean>(false);\n protected readonly isSpinDownDisabled = computed(() => {\n const min = this.min();\n return this.isDisabled() || (min !== undefined && (Number(this.internalValue()) || 0) <= min);\n });\n\n protected readonly isSpinUpDisabled = computed(() => {\n const max = this.max();\n return this.isDisabled() || (max !== undefined && (Number(this.internalValue()) || 0) >= max);\n });\n\n protected readonly isFloating = computed(() => {\n const val = this.internalValue();\n const hasValue = val !== null && val !== undefined && val !== '';\n const isDateType = ['date', 'time', 'datetime-local'].includes(this.type());\n\n return this.isFocused() || hasValue || isDateType;\n });\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return '';\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n public readonly type = input<InputFieldTypes>('text');\n public readonly min = input<number | undefined>(undefined);\n public readonly max = input<number | undefined>(undefined);\n public readonly step = input<number>(1);\n private spinTimeout?: ReturnType<typeof setTimeout>;\n private spinInterval?: ReturnType<typeof setInterval>;\n\n constructor() {\n super();\n inject(DestroyRef).onDestroy(() => this.stopSpin());\n }\n\n public startSpin(direction: number, event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n if (this.isDisabled()) return;\n\n this.applyStep(direction);\n\n this.spinTimeout = setTimeout(() => {\n this.spinInterval = setInterval(() => {\n this.applyStep(direction);\n }, 50);\n }, 400);\n }\n\n public stopSpin(): void {\n clearTimeout(this.spinTimeout);\n clearInterval(this.spinInterval);\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n\n const value = this.type() === 'number' ? (target.value === '' ? null : Number(target.value)) : target.value;\n\n this.updateValue(value);\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n this.markAsTouched();\n }\n\n private applyStep(direction: number): void {\n const current = Number(this.internalValue()) || 0;\n let next = current + direction * this.step();\n const min = this.min();\n const max = this.max();\n\n if (min !== undefined && next < min) next = min;\n if (max !== undefined && next > max) next = max;\n\n this.updateValue(next);\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <div class=\"bx-input-wrapper\" bxSurface [class.is-invalid]=\"!!errorMessage\" [class.is-disabled]=\"isDisabled()\"\n [class.has-spinners]=\"type() === 'number'\" [class.is-floating]=\"isFloating()\">\n\n <div class=\"bx-input-container\">\n @if (label()) {\n <label class=\"bx-floating-label\" [attr.for]=\"inputId()\">\n {{ resolvedLabel() }}\n @if (isFieldRequired()) { <span class=\"bx-field-required\">*</span> }\n </label>\n }\n\n <input class=\"bx-native-input\" [attr.id]=\"inputId()\" [attr.type]=\"type()\"\n [attr.placeholder]=\"isFloating() ? resolvedPlaceholder() : ''\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [attr.min]=\"min()\" [attr.max]=\"max()\" [attr.step]=\"step()\"\n [disabled]=\"isDisabled()\" [value]=\"internalValue() ?? ''\" (input)=\"onInput($event)\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\">\n </div>\n\n @if (type() === 'number') {\n <div class=\"bx-spinners-group\">\n <button type=\"button\" class=\"bx-spin-btn\" tabindex=\"-1\"\n [disabled]=\"isSpinDownDisabled()\"\n (mousedown)=\"startSpin(-1, $event)\" (touchstart)=\"startSpin(-1, $event)\" (mouseup)=\"stopSpin()\"\n (mouseleave)=\"stopSpin()\" (touchend)=\"stopSpin()\">\n <bx-icon name=\"minus\" size=\"16\"></bx-icon>\n </button>\n\n <button type=\"button\" class=\"bx-spin-btn\" tabindex=\"-1\"\n [disabled]=\"isSpinUpDisabled()\"\n (mousedown)=\"startSpin(1, $event)\" (touchstart)=\"startSpin(1, $event)\" (mouseup)=\"stopSpin()\"\n (mouseleave)=\"stopSpin()\" (touchend)=\"stopSpin()\">\n <bx-icon name=\"plus\" size=\"16\"></bx-icon>\n </button>\n </div>\n }\n\n </div>\n</bx-form-field>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, DestroyRef, ElementRef, inject, Injectable, input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\n\n@Injectable({ providedIn: 'root' })\nclass RadioRegistry {\n public readonly radios = new Set<Radio>();\n public select(radio: Radio): void {\n for (const peer of this.radios) {\n if (peer !== radio && peer.sharesGroup(radio)) peer.writeValue(radio.value());\n }\n }\n}\n\n@Component({\n selector: 'bx-radio',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField],\n templateUrl: './radio-button.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './radio-button.scss'\n})\nexport class Radio extends BxBaseControl<unknown> {\n private readonly registry = inject(RadioRegistry);\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly inputId = computed(() => `bx-radio-${uuidv4()}`);\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n public readonly value = input.required<unknown>();\n public readonly name = input<string>('');\n protected showTooltip = false;\n constructor() {\n super();\n this.registry.radios.add(this);\n inject(DestroyRef).onDestroy(() => this.registry.radios.delete(this));\n }\n\n /** Match native form/name groups and radios bound to one reactive control. */\n public sharesGroup(other: Radio): boolean {\n const control = this.ngControl?.control;\n if (control && control === other.ngControl?.control) return true;\n return (\n !!this.name() &&\n this.name() === other.name() &&\n this.element.closest('form') === other.element.closest('form') &&\n control?.parent === other.ngControl?.control?.parent\n );\n }\n\n protected onSelect(): void {\n if (!this.isDisabled()) {\n this.updateValue(this.value());\n this.registry.select(this);\n }\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"radio\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.name]=\"name() || null\"\n [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\"\n [checked]=\"internalValue() === value()\" (change)=\"onSelect()\" (blur)=\"onBlur()\">\n\n <div class=\"bx-radio-circle\" bxSurface [bxSurfaceEmission]=\"errorMessage ? 'var(--bx-text-danger)' : 'var(--bx-accent)'\" [class.is-checked]=\"internalValue() === value()\"\n [class.is-invalid]=\"!!errorMessage\">\n <div class=\"bx-radio-inner\"></div>\n </div>\n\n @if (resolvedLabel()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n </label>\n</bx-form-field>","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, output, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-search-input',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './search-input.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './search-input.scss'\n})\nexport class SearchInput extends BxBaseControl<string> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-search-${Math.random().toString(36).substr(2, 9)}`);\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n // eslint-disable-next-line @angular-eslint/no-output-native -- Keep the established public search event.\n public readonly search = output<string>();\n\n @ViewChild('inputElement') private inputElement?: ElementRef<HTMLInputElement>;\n\n public clear(): void {\n if (this.isDisabled()) return;\n this.updateValue('');\n this.search.emit('');\n this.focus();\n }\n\n public focus(): void {\n this.inputElement?.nativeElement.focus();\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.value);\n this.search.emit(target.value);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [label]=\"label()\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\"\n [required]=\"required()\" [forId]=\"inputId()\">\n\n <div class=\"bx-search-input-wrapper\" bxSurface [class.is-invalid]=\"!!errorMessage\" [class.is-disabled]=\"isDisabled()\">\n <bx-icon class=\"bx-search-icon-left\" name=\"search\" size=\"16\"></bx-icon>\n\n <input #inputElement class=\"bx-native-search-input\" type=\"text\" [attr.id]=\"inputId()\"\n [attr.placeholder]=\"resolvedPlaceholder()\" [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel()\"\n [disabled]=\"isDisabled()\" [value]=\"internalValue() || ''\" (input)=\"onInput($event)\" (blur)=\"onBlur()\">\n\n @if (internalValue()) {\n <button type=\"button\" class=\"bx-search-clear-btn\" aria-label=\"Clear search\" [disabled]=\"isDisabled()\" (click)=\"clear()\">\n <bx-icon name=\"x\" size=\"16\"></bx-icon>\n </button>\n }\n </div>\n\n</bx-form-field>","import { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, input, output, signal, ViewChild, OnInit, OnDestroy, ElementRef, NgZone, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Overlay, OverlayModule, ConnectionPositionPair, CdkConnectedOverlay } from '@angular/cdk/overlay';\nimport {\n BX_I18N,\n BxBaseControl,\n BxA11yService,\n inheritOverlayTheme,\n trackOverlayOrigin,\n DEFAULT_DEBOUNCE_TIME,\n isTextWithKey,\n ResolvableText,\n uuidv4\n} from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { BX_OVERLAY_CONTEXT } from '@filip.mazev/blocks/primitives';\nimport { BxSelectOption } from '../../interfaces/ibx-select-option.interface';\nimport { SearchInput } from '../search-input/search-input';\n\n@Component({\n selector: 'bx-select',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, OverlayModule, FormField, Icon, SearchInput],\n templateUrl: './select.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './select.scss'\n})\nexport class Select<T> extends BxBaseControl<T> implements OnInit, OnDestroy {\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly overlay = inject(Overlay);\n private readonly overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });\n protected readonly panelScrollStrategy = this.overlay.scrollStrategies.noop();\n protected readonly isPanelAttached = signal(false);\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly searchTerm = signal<string>('');\n protected readonly inputId = computed(() => `bx-select-${uuidv4()}`);\n protected readonly overlayPositions: ConnectionPositionPair[] = [\n new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, 0, 4),\n new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }, 0, -4)\n ];\n\n protected readonly isFloating = computed(() => {\n const val = this.internalValue();\n const hasValue = val !== null && val !== undefined && val !== '';\n return this.isOpen() || hasValue;\n });\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return '';\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n protected readonly resolvedOptions = computed(() => {\n this.i18n?.version?.();\n return this.options().map((opt) => ({\n ...opt,\n resolvedStr: this.resolveText(opt.label)\n }));\n });\n\n protected readonly filteredOptions = computed(() => {\n const term = this.searchTerm().trim();\n const opts = this.resolvedOptions();\n\n if (this.externalFiltering() || !term) return opts;\n\n // Literal subsequence matching accepts punctuation and never constructs user regex.\n const query = term.toLocaleLowerCase();\n return opts.filter((opt) => {\n let index = 0;\n for (const character of opt.resolvedStr.toLocaleLowerCase()) {\n if (character === query[index]) index++;\n if (index === query.length) return true;\n }\n return false;\n });\n });\n\n protected readonly selectedOptionLabel = computed(() => {\n const currentVal = this.internalValue();\n const selected = this.resolvedOptions().find((o) => o.value === currentVal);\n return selected ? selected.resolvedStr : '';\n });\n\n protected readonly resolvedSearchPlaceholder = computed(() => this.resolveText(this.searchPlaceholder()));\n protected readonly resolvedEmptyMessage = computed(() => this.resolveText(this.emptyMessage()));\n public readonly options = input.required<BxSelectOption<T>[]>();\n\n public readonly isSearchable = input<boolean>(false);\n\n public readonly externalFiltering = input<boolean>(false);\n public readonly searchPlaceholder = input<ResolvableText>('Search...');\n public readonly emptyMessage = input<ResolvableText>('No results found.');\n // eslint-disable-next-line @angular-eslint/no-output-native -- Keep the established public search event.\n public readonly search = output<string>();\n public readonly isOpen = signal<boolean>(false);\n private transition?: ReturnType<typeof createGlassTransition>;\n\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n private disconnectOrigin?: () => void;\n\n private transitionRevision = 0;\n\n private focusOnOpen: 'first' | 'last' | null = null;\n\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n\n @ViewChild('searchInput') private searchInputRef?: SearchInput;\n\n @ViewChild('origin', { read: ElementRef }) private originRef?: ElementRef<HTMLElement>;\n\n private searchSubject = new Subject<string>();\n\n private sub?: Subscription;\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n this.sub = this.searchSubject.pipe(debounceTime(DEFAULT_DEBOUNCE_TIME), distinctUntilChanged()).subscribe((term) => {\n this.searchTerm.set(term);\n if (this.externalFiltering()) {\n this.search.emit(term);\n }\n });\n }\n\n public ngOnDestroy(): void {\n ++this.transitionRevision;\n this.onPanelDetach();\n this.sub?.unsubscribe();\n }\n\n public toggleOpen(): void {\n if (this.isDisabled() || this.loading()) return;\n if (this.isOpen()) this.close();\n else this.open();\n }\n\n public open(): void {\n if (this.isDisabled() || this.loading()) return;\n ++this.transitionRevision;\n this.isOpen.set(true);\n this.isPanelAttached.set(true);\n const pane = this.connectedOverlay?.overlayRef?.overlayElement;\n if (pane) pane.inert = false;\n const transition = this.transition;\n if (transition) void this.zone.runOutsideAngular(() => transition.enter());\n }\n\n public close(): void {\n this.isOpen.set(false);\n this.markAsTouched();\n const revision = ++this.transitionRevision;\n const pane = this.connectedOverlay?.overlayRef?.overlayElement;\n if (pane?.contains(pane.ownerDocument.activeElement)) this.originRef?.nativeElement.focus({ preventScroll: true });\n if (pane) pane.inert = true;\n const transition = this.transition;\n if (transition && !this.a11y.isReducedMotion()) {\n void this.zone\n .runOutsideAngular(() => transition.exit())\n .then(() => {\n if (revision === this.transitionRevision && !this.isOpen()) this.isPanelAttached.set(false);\n })\n .catch(() => {\n if (revision === this.transitionRevision) this.isPanelAttached.set(false);\n });\n } else this.isPanelAttached.set(false);\n }\n\n protected onPanelAttach(): void {\n const revision = this.transitionRevision;\n const origin = this.originRef?.nativeElement;\n const overlay = this.connectedOverlay?.overlayRef;\n if (origin && overlay?.hasAttached()) {\n this.disconnectLighting?.();\n this.disconnectLighting = inheritGlassLighting(overlay.overlayElement, origin);\n this.disconnectOrigin?.();\n this.disconnectOrigin = this.zone.runOutsideAngular(() => trackOverlayOrigin(overlay, origin));\n }\n // Wait for the attached view's synchronous surface directives to finish mounting.\n queueMicrotask(() => {\n const attachedOverlay = this.connectedOverlay?.overlayRef;\n const attachedOrigin = this.originRef?.nativeElement;\n if (!attachedOverlay?.hasAttached() || !attachedOrigin || !this.isOpen() || revision !== this.transitionRevision) return;\n this.disconnectTheme?.();\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(attachedOrigin, attachedOverlay.overlayElement));\n attachedOverlay.updatePosition();\n if (!this.a11y.isReducedMotion()) {\n this.transition?.destroy();\n this.transition = this.zone.runOutsideAngular(() => createGlassTransition(attachedOrigin, attachedOverlay.overlayElement));\n const transition = this.transition;\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .catch(() => {\n if (revision === this.transitionRevision) {\n this.transition?.destroy();\n this.transition = undefined;\n }\n });\n }\n if (this.isSearchable()) this.searchInputRef?.focus();\n else if (this.focusOnOpen) {\n const items = this.panelItems();\n (this.focusOnOpen === 'last' ? items[items.length - 1] : items[0])?.focus();\n }\n this.focusOnOpen = null;\n });\n }\n\n protected onPanelDetach(): void {\n this.transition?.destroy();\n this.transition = undefined;\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n this.disconnectOrigin?.();\n this.disconnectOrigin = undefined;\n }\n\n protected overlayPopoverLocation(origin: HTMLElement): CdkConnectedOverlay['usePopover'] {\n const useTopLayer =\n !!this.overlayContext?.useTopLayer || !!origin.closest('dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]');\n // A null location disables the CDK popover; explicit contexts and native\n // top-layer containers opt back into the global popover.\n return useTopLayer ? 'global' : null;\n }\n\n protected refreshPanel(): void {\n this.transition?.refresh();\n }\n\n protected onTriggerKey(event: KeyboardEvent): void {\n if (!['ArrowDown', 'ArrowUp', 'Escape'].includes(event.key)) return;\n event.preventDefault();\n if (event.key === 'Escape') {\n this.close();\n return;\n }\n this.focusOnOpen = event.key === 'ArrowUp' ? 'last' : 'first';\n if (this.isOpen()) {\n const items = this.panelItems();\n (this.focusOnOpen === 'last' ? items[items.length - 1] : items[0])?.focus();\n this.focusOnOpen = null;\n } else this.open();\n }\n\n protected onPanelKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n return;\n }\n if (event.key === 'Tab') {\n this.close();\n return;\n }\n if ((event.target as HTMLElement)?.matches('input,textarea')) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.panelItems();\n if (!items.length) return;\n const current = items.indexOf(items[0].ownerDocument.activeElement as HTMLElement);\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : event.key === 'ArrowDown'\n ? (current + 1) % items.length\n : current < 0\n ? items.length - 1\n : (current - 1 + items.length) % items.length;\n event.preventDefault();\n items[next].focus();\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n const clickTarget = event.target as Node;\n if (this.originRef?.nativeElement.contains(clickTarget)) {\n return;\n }\n this.close();\n }\n\n protected selectOption(option: BxSelectOption<T>): void {\n if (option.disabled) return;\n this.updateValue(option.value);\n this.close();\n }\n\n protected onSearchChange(value: string): void {\n this.searchSubject.next(value);\n }\n\n private panelItems(): HTMLElement[] {\n return Array.from(this.connectedOverlay?.overlayRef?.overlayElement.querySelectorAll<HTMLElement>('.bx-select-menu-container button:not(:disabled)') ?? []);\n }\n\n private resolveText(textObj: ResolvableText | undefined): string {\n if (!textObj) return '';\n return isTextWithKey(textObj) ? (this.i18n?.translate(textObj.key) ?? textObj.key) : textObj;\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <button type=\"button\" role=\"combobox\" aria-haspopup=\"listbox\" cdkOverlayOrigin bxSurface #origin=\"cdkOverlayOrigin\" class=\"bx-select-trigger\"\n [class.is-invalid]=\"!!errorMessage\" [class.is-open]=\"isOpen()\" [class.is-floating]=\"isFloating()\"\n [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel() || resolvedLabel()\"\n [disabled]=\"isDisabled() || loading()\" (click)=\"toggleOpen()\" (keydown)=\"onTriggerKey($event)\"\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-controls]=\"isPanelAttached() ? inputId() + '-options' : null\">\n\n <div class=\"bx-select-container\">\n @if (label()) {\n <span class=\"bx-floating-label\">\n {{ resolvedLabel() }}\n @if (isFieldRequired()) { <span class=\"bx-field-required\">*</span> }\n </span>\n }\n\n <span class=\"bx-select-value\" [attr.title]=\"selectedOptionLabel() || resolvedPlaceholder()\" [class.is-placeholder]=\"internalValue() === null\">\n @if (internalValue() === null && isFloating()) {\n {{ resolvedPlaceholder() }}\n } @else {\n {{ selectedOptionLabel() }}\n }\n </span>\n </div>\n\n <bx-icon class=\"bx-select-caret\" name=\"chevron-down\" size=\"16\"></bx-icon>\n </button>\n\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"origin\" [cdkConnectedOverlayOpen]=\"isPanelAttached()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\" [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayScrollStrategy]=\"panelScrollStrategy\"\n [cdkConnectedOverlayUsePopover]=\"overlayPopoverLocation(origin.elementRef.nativeElement)\"\n [cdkConnectedOverlayWidth]=\"origin.elementRef.nativeElement.offsetWidth\"\n (overlayOutsideClick)=\"onOutsideClick($event)\" (attach)=\"onPanelAttach()\" (detach)=\"onPanelDetach()\" (positionChange)=\"refreshPanel()\">\n\n <div class=\"bx-select-panel\" data-bx-surface=\"solid\" role=\"listbox\" tabindex=\"0\" [attr.aria-label]=\"resolvedLabel()\" [id]=\"inputId() + '-options'\" (keydown)=\"onPanelKey($event)\">\n\n @if (isSearchable()) {\n <div class=\"bx-select-search-container\">\n <bx-search-input #searchInput [placeholder]=\"resolvedSearchPlaceholder()\"\n (search)=\"onSearchChange($event)\" (keydown.enter)=\"$event.preventDefault()\">\n </bx-search-input>\n </div>\n }\n\n <div class=\"bx-select-menu-container\">\n @for (option of filteredOptions(); track option.value) {\n\n <button type=\"button\" class=\"bx-select-option\" role=\"option\" [attr.aria-selected]=\"internalValue() === option.value\" [disabled]=\"option.disabled ?? false\" (click)=\"selectOption(option)\">\n <div class=\"bx-select-item-inner\">\n <div class=\"bx-select-check-placeholder\">\n @if (internalValue() === option.value) {\n <bx-icon name=\"check\" size=\"16\"></bx-icon>\n }\n </div>\n <span [title]=\"option.resolvedStr\">{{ option.resolvedStr }}</span>\n </div>\n </button>\n\n } @empty {\n <div class=\"bx-select-empty\">\n <span class=\"bx-empty-text\">{{ resolvedEmptyMessage() }}</span>\n </div>\n }\n </div>\n\n </div>\n </ng-template>\n\n</bx-form-field>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-slide-toggle',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField],\n templateUrl: './slide-toggle.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './slide-toggle.scss'\n})\nexport class SlideToggle extends BxBaseControl<boolean> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-slide-toggle-${uuidv4()}`);\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected onToggle(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.checked);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"checkbox\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\" [checked]=\"internalValue() === true\"\n (change)=\"onToggle($event)\" (blur)=\"onBlur()\">\n\n <div class=\"bx-slide-toggle-track\" bxSurface [bxSurfaceEmission]=\"errorMessage ? 'var(--bx-text-danger)' : 'var(--bx-accent)'\" [class.is-checked]=\"internalValue() === true\" [class.is-invalid]=\"!!errorMessage\">\n <div class=\"bx-slide-toggle-thumb\"></div>\n </div>\n\n @if (resolvedLabel() || tooltip()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n\n\n </label>\n\n</bx-form-field>","import { afterEveryRender, afterNextRender, DestroyRef, Directive, ElementRef, HostListener, inject, NgZone } from '@angular/core';\nimport { observeGlassLighting, refreshGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { ThemingService } from '@filip.mazev/blocks/core';\n\n/** Glass styling for a native range, including reactive forms and programmatic values. */\n@Directive({ selector: 'input[type=range][bxSlider]', host: { class: 'bx-slider' } })\nexport class SliderDirective {\n private readonly element = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly theme = inject(ThemingService);\n private shell?: HTMLSpanElement;\n private thumb?: HTMLSpanElement;\n\n constructor() {\n afterEveryRender(() => this.sync());\n const zone = inject(NgZone);\n const destroy = inject(DestroyRef);\n afterNextRender(() => {\n const input = this.element.nativeElement;\n const shell = input.ownerDocument.createElement('span');\n shell.className = 'bx-slider-shell';\n const thumb = input.ownerDocument.createElement('span');\n thumb.className = 'bx-slider-thumb';\n thumb.setAttribute('aria-hidden', 'true');\n input.before(shell);\n shell.append(input, thumb);\n this.shell = shell;\n this.thumb = thumb;\n this.sync();\n const place = () => {\n shell.style.setProperty('--bx-slider-center-y', `${input.offsetTop + input.offsetHeight / 2}px`);\n shell.style.setProperty('--bx-slider-track-start', `${input.offsetLeft}px`);\n shell.style.setProperty('--bx-slider-track-width', `${input.offsetWidth}px`);\n refreshGlassLighting(thumb);\n };\n const resize = new ResizeObserver(place);\n zone.runOutsideAngular(() => {\n resize.observe(input);\n resize.observe(shell);\n place();\n });\n const stop = zone.runOutsideAngular(() =>\n observeGlassLighting(\n thumb,\n (light) => {\n const reflected = light.reflectionStrength > light.strength;\n const strength = reflected ? light.reflectionStrength : light.strength;\n if (strength <= 0.04) {\n thumb.style.removeProperty('--bx-slider-light-color');\n thumb.style.removeProperty('--bx-slider-light-strength');\n } else {\n thumb.style.setProperty('--bx-slider-light-color', reflected ? light.reflection : light.color);\n thumb.style.setProperty('--bx-slider-light-strength', String(strength));\n }\n thumb.style.setProperty('--bx-slider-light-x', `${reflected ? light.reflectionX : light.x}%`);\n thumb.style.setProperty('--bx-slider-light-y', `${reflected ? light.reflectionY : light.y}%`);\n },\n input\n )\n );\n destroy.onDestroy(() => {\n resize.disconnect();\n stop();\n shell.replaceWith(input);\n this.shell = this.thumb = undefined;\n });\n });\n }\n\n @HostListener('input')\n protected sync(): void {\n const input = this.element.nativeElement;\n const min = input.min === '' ? 0 : Number(input.min);\n const max = input.max === '' ? 100 : Number(input.max);\n const progress = max > min ? Math.max(0, Math.min(100, ((input.valueAsNumber - min) / (max - min)) * 100)) : 0;\n const value = `${Number.isFinite(progress) ? progress : 0}%`;\n if (input.style.getPropertyValue('--bx-slider-progress') !== value) input.style.setProperty('--bx-slider-progress', value);\n if (this.shell) {\n const position = String((input.matches(':dir(rtl)') ? 100 - (Number.isFinite(progress) ? progress : 0) : Number.isFinite(progress) ? progress : 0) / 100);\n if (this.shell.style.getPropertyValue('--bx-slider-position') !== position) {\n this.shell.style.setProperty('--bx-slider-position', position);\n if (this.thumb) refreshGlassLighting(this.thumb);\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filip.mazev-blocks-forms.mjs","names":[],"sources":["../../../projects/blocks/forms/components/button/button.ts","../../../projects/blocks/forms/components/button/button.html","../../../projects/blocks/forms/directives/bx-error.directive.ts","../../../projects/blocks/forms/components/form-field/form-field.ts","../../../projects/blocks/forms/components/form-field/form-field.html","../../../projects/blocks/forms/components/checkbox/checkbox.ts","../../../projects/blocks/forms/components/checkbox/checkbox.html","../../../projects/blocks/forms/components/input-field/input-field.ts","../../../projects/blocks/forms/components/input-field/input-field.html","../../../projects/blocks/forms/components/radio-button/radio-button.ts","../../../projects/blocks/forms/components/radio-button/radio-button.html","../../../projects/blocks/forms/components/search-input/search-input.ts","../../../projects/blocks/forms/components/search-input/search-input.html","../../../projects/blocks/forms/components/select/select.ts","../../../projects/blocks/forms/components/select/select.html","../../../projects/blocks/forms/components/slide-toggle/slide-toggle.ts","../../../projects/blocks/forms/components/slide-toggle/slide-toggle.html","../../../projects/blocks/forms/directives/slider.directive.ts"],"sourcesContent":["import { injectComponentSurface } from '@filip.mazev/blocks/effects';\nimport { Component, input, booleanAttribute, HostListener, inject, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { BxA11yService } from '@filip.mazev/blocks/core';\nimport { ButtonColor, ButtonVariant } from '../../types/form.types';\n\n@Component({\n selector: 'bx-button, button[bx-button], a[bx-button]',\n standalone: true,\n templateUrl: './button.html',\n styleUrl: './button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '\"bx-btn bx-btn-\" + variant() + \" bx-btn-color-\" + color()',\n '[class.bx-btn-is-outlined]': 'outlined()',\n '[class.bx-btn-is-elevated]': 'elevated()',\n '[class.bx-btn-animated]': 'isAnimated()',\n '[class.bx-btn-non-interactive]': '!interactive()',\n '[attr.disabled]': 'disabled() ? true : null',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.tabindex]': 'disabled() ? \"-1\" : null'\n }\n})\nexport class Button {\n private readonly appearance = injectComponentSurface(() => ({\n interactive: this.variant() === 'text' || !this.interactive() || this.disabled() ? false : undefined,\n emission:\n this.variant() !== 'text' && this.interactive() && !this.disabled()\n ? this.color() === 'primary' || this.color() === 'grayscale'\n ? 'var(--bx-primary)'\n : this.color() === 'accent'\n ? 'var(--bx-accent)'\n : `var(--bx-text-${this.color()})`\n : undefined\n }));\n\n private readonly a11y = inject(BxA11yService);\n\n public readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n\n public readonly variant = input<ButtonVariant>('text');\n public readonly color = input<ButtonColor>('primary');\n public readonly outlined = input<boolean>(false);\n public readonly elevated = input<boolean>(false);\n public readonly disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n public readonly interactive = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n @HostListener('click', ['$event'])\n protected onClick(event: Event) {\n if (this.disabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n}\n","<span class=\"bx-btn-content-wrapper\">\n <ng-content></ng-content>\n</span>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'bx-error',\n standalone: true,\n template: '<ng-content />'\n})\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class -- The component provides the projection selector and has no behavior.\nexport class BxError {}\n","import { afterRenderEffect, Component, computed, contentChild, ElementRef, inject, input, viewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, isTextWithKey, ResolvableText, BxA11yService } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { BxGlassLightingService } from '@filip.mazev/blocks/effects';\nimport { BxError } from '../../directives/bx-error.directive';\nimport { TooltipDirective } from '@filip.mazev/blocks/primitives';\n\n@Component({\n selector: 'bx-form-field',\n standalone: true,\n imports: [CommonModule, Icon, TooltipDirective],\n templateUrl: './form-field.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './form-field.scss'\n})\nexport class FormField {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly lighting = inject(BxGlassLightingService);\n protected readonly projectedError = contentChild(BxError, { read: ElementRef<HTMLElement> });\n private readonly errorElement = viewChild<ElementRef<HTMLElement>>('errorText');\n\n protected readonly resolvedLabel = computed(() => this.resolveText(this.label()));\n protected readonly resolvedError = computed(() => this.resolveText(this.error()));\n public readonly inline = input(false);\n public readonly label = input<ResolvableText | undefined>(undefined);\n public readonly tooltip = input<ResolvableText | undefined>(undefined);\n public readonly error = input<ResolvableText | undefined>(undefined);\n public readonly required = input<boolean>(false);\n public readonly loading = input<boolean>(false);\n public readonly forId = input<string>('');\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n constructor() {\n afterRenderEffect((onCleanup) => {\n const projected = this.projectedError()?.nativeElement;\n const error = this.resolvedError() ? this.errorElement()?.nativeElement : projected;\n if (!error) return;\n const parent = this.element.parentElement;\n const root = this.element.closest<HTMLElement>('form, fieldset') ?? (parent?.tagName.startsWith('BX-') ? parent.parentElement : parent);\n if (!root) return;\n const control = this.element.querySelector<HTMLElement>('.bx-field-control > [data-bx-surface]');\n const light = this.lighting.register(root, {\n // Anchor the lower-edge glow to the control, independently of floating\n // labels, error icons and the length of the validation message.\n element: control ?? error,\n edge: control ? 'bottom' : undefined,\n offsetX: 0.5,\n offsetY: control ? 1 : 0,\n z: 32,\n color: 'var(--bx-text-danger)',\n intensity: 0.9,\n radius: 240\n });\n onCleanup(() => light.destroy());\n });\n }\n\n private resolveText(textObj: ResolvableText | undefined): string | undefined {\n this.i18n?.version?.();\n if (!textObj) return undefined;\n if (isTextWithKey(textObj)) {\n return this.i18n?.translate(textObj.key) ?? textObj.key;\n }\n return textObj;\n }\n}\n","<div class=\"bx-field-wrapper\" [class.is-invalid]=\"!!resolvedError() || !!projectedError()\" [attr.data-bx-field-invalid]=\"!!resolvedError() || !!projectedError()\">\n\n @if (resolvedLabel() || (tooltip() && !inline())) {\n <div class=\"bx-field-header\">\n <label class=\"bx-field-label\" [attr.for]=\"forId()\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-field-required\">*</span> }\n </label>\n\n @if (tooltip()) {\n <button type=\"button\" class=\"bx-field-tooltip-trigger\" [bxTooltip]=\"tooltip()!\" bxTooltipTouch=\"tap\" placement=\"top\" aria-label=\"More information\">\n <bx-icon name=\"help-circle\" size=\"16\"></bx-icon>\n </button>\n }\n\n @if (loading()) {\n <bx-icon name=\"loader\" class=\"bx-spin\" size=\"16\"></bx-icon>\n }\n </div>\n }\n\n <div class=\"bx-field-control\" [class.bx-field-control-inline]=\"inline()\">\n <ng-content></ng-content>\n @if (inline() && tooltip()) {\n <button type=\"button\" class=\"bx-field-tooltip-trigger\" [bxTooltip]=\"tooltip()!\" bxTooltipTouch=\"tap\" placement=\"top\" [attr.aria-label]=\"'More information'\">\n <bx-icon name=\"help-circle\" size=\"16\"></bx-icon>\n </button>\n }\n </div>\n\n <div class=\"bx-field-error-projected\">\n <ng-content select=\"bx-error\"></ng-content>\n </div>\n\n @if (resolvedError()) {\n <div class=\"bx-field-error\" [class.bx-animated]=\"isAnimated()\">\n <bx-icon name=\"alert-circle\" size=\"16\"></bx-icon>\n <span #errorText class=\"bx-field-error-text\">{{ resolvedError() }}</span>\n </div>\n }\n</div>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-checkbox',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './checkbox.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './checkbox.scss'\n})\nexport class Checkbox extends BxBaseControl<boolean> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-checkbox-${uuidv4()}`);\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected showTooltip = false;\n\n protected onToggle(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.checked);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"checkbox\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\" [checked]=\"internalValue() === true\"\n (change)=\"onToggle($event)\" (blur)=\"onBlur()\">\n\n <div class=\"bx-checkbox-box\" bxSurface [bxSurfaceEmission]=\"errorMessage ? 'var(--bx-text-danger)' : 'var(--bx-accent)'\" [class.is-checked]=\"internalValue() === true\" [class.is-invalid]=\"!!errorMessage\">\n @if (internalValue() === true) {\n <bx-icon name=\"check\" size=\"16\"></bx-icon>\n }\n </div>\n\n @if (resolvedLabel()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n </label>\n</bx-form-field>","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, DestroyRef, inject, input, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\nimport { InputFieldTypes } from '../../types/form.types';\nimport { Icon } from '@filip.mazev/blocks/icons';\n\n@Component({\n selector: 'bx-input-field',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './input-field.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './input-field.scss'\n})\nexport class InputField extends BxBaseControl<string | number | null> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly inputId = computed(() => `bx-input-${uuidv4()}`);\n protected readonly isFocused = signal<boolean>(false);\n protected readonly isSpinDownDisabled = computed(() => {\n const min = this.min();\n return this.isDisabled() || (min !== undefined && (Number(this.internalValue()) || 0) <= min);\n });\n\n protected readonly isSpinUpDisabled = computed(() => {\n const max = this.max();\n return this.isDisabled() || (max !== undefined && (Number(this.internalValue()) || 0) >= max);\n });\n\n protected readonly isFloating = computed(() => {\n const val = this.internalValue();\n const hasValue = val !== null && val !== undefined && val !== '';\n const isDateType = ['date', 'time', 'datetime-local'].includes(this.type());\n\n return this.isFocused() || hasValue || isDateType;\n });\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return '';\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n public readonly type = input<InputFieldTypes>('text');\n public readonly min = input<number | undefined>(undefined);\n public readonly max = input<number | undefined>(undefined);\n public readonly step = input<number>(1);\n private spinTimeout?: ReturnType<typeof setTimeout>;\n private spinInterval?: ReturnType<typeof setInterval>;\n\n constructor() {\n super();\n inject(DestroyRef).onDestroy(() => this.stopSpin());\n }\n\n public startSpin(direction: number, event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n if (this.isDisabled()) return;\n\n this.applyStep(direction);\n\n this.spinTimeout = setTimeout(() => {\n this.spinInterval = setInterval(() => {\n this.applyStep(direction);\n }, 50);\n }, 400);\n }\n\n public stopSpin(): void {\n clearTimeout(this.spinTimeout);\n clearInterval(this.spinInterval);\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n\n const value = this.type() === 'number' ? (target.value === '' ? null : Number(target.value)) : target.value;\n\n this.updateValue(value);\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n this.markAsTouched();\n }\n\n private applyStep(direction: number): void {\n const current = Number(this.internalValue()) || 0;\n let next = current + direction * this.step();\n const min = this.min();\n const max = this.max();\n\n if (min !== undefined && next < min) next = min;\n if (max !== undefined && next > max) next = max;\n\n this.updateValue(next);\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <div class=\"bx-input-wrapper\" bxSurface [class.is-invalid]=\"!!errorMessage\" [class.is-disabled]=\"isDisabled()\"\n [class.has-spinners]=\"type() === 'number'\" [class.is-floating]=\"isFloating()\">\n\n <div class=\"bx-input-container\">\n @if (label()) {\n <label class=\"bx-floating-label\" [attr.for]=\"inputId()\">\n {{ resolvedLabel() }}\n @if (isFieldRequired()) { <span class=\"bx-field-required\">*</span> }\n </label>\n }\n\n <input class=\"bx-native-input\" [attr.id]=\"inputId()\" [attr.type]=\"type()\"\n [attr.placeholder]=\"isFloating() ? resolvedPlaceholder() : ''\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [attr.min]=\"min()\" [attr.max]=\"max()\" [attr.step]=\"step()\"\n [disabled]=\"isDisabled()\" [value]=\"internalValue() ?? ''\" (input)=\"onInput($event)\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\">\n </div>\n\n @if (type() === 'number') {\n <div class=\"bx-spinners-group\">\n <button type=\"button\" class=\"bx-spin-btn\" tabindex=\"-1\"\n [disabled]=\"isSpinDownDisabled()\"\n (mousedown)=\"startSpin(-1, $event)\" (touchstart)=\"startSpin(-1, $event)\" (mouseup)=\"stopSpin()\"\n (mouseleave)=\"stopSpin()\" (touchend)=\"stopSpin()\">\n <bx-icon name=\"minus\" size=\"16\"></bx-icon>\n </button>\n\n <button type=\"button\" class=\"bx-spin-btn\" tabindex=\"-1\"\n [disabled]=\"isSpinUpDisabled()\"\n (mousedown)=\"startSpin(1, $event)\" (touchstart)=\"startSpin(1, $event)\" (mouseup)=\"stopSpin()\"\n (mouseleave)=\"stopSpin()\" (touchend)=\"stopSpin()\">\n <bx-icon name=\"plus\" size=\"16\"></bx-icon>\n </button>\n </div>\n }\n\n </div>\n</bx-form-field>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, DestroyRef, ElementRef, inject, Injectable, input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\n\n@Injectable({ providedIn: 'root' })\nclass RadioRegistry {\n public readonly radios = new Set<Radio>();\n public select(radio: Radio): void {\n for (const peer of this.radios) {\n if (peer !== radio && peer.sharesGroup(radio)) peer.writeValue(radio.value());\n }\n }\n}\n\n@Component({\n selector: 'bx-radio',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField],\n templateUrl: './radio-button.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './radio-button.scss'\n})\nexport class Radio extends BxBaseControl<unknown> {\n private readonly registry = inject(RadioRegistry);\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly inputId = computed(() => `bx-radio-${uuidv4()}`);\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n public readonly value = input.required<unknown>();\n public readonly name = input<string>('');\n protected showTooltip = false;\n constructor() {\n super();\n this.registry.radios.add(this);\n inject(DestroyRef).onDestroy(() => this.registry.radios.delete(this));\n }\n\n /** Match native form/name groups and radios bound to one reactive control. */\n public sharesGroup(other: Radio): boolean {\n const control = this.ngControl?.control;\n if (control && control === other.ngControl?.control) return true;\n return (\n !!this.name() &&\n this.name() === other.name() &&\n this.element.closest('form') === other.element.closest('form') &&\n control?.parent === other.ngControl?.control?.parent\n );\n }\n\n protected onSelect(): void {\n if (!this.isDisabled()) {\n this.updateValue(this.value());\n this.registry.select(this);\n }\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"radio\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.name]=\"name() || null\"\n [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\"\n [checked]=\"internalValue() === value()\" (change)=\"onSelect()\" (blur)=\"onBlur()\">\n\n <div class=\"bx-radio-circle\" bxSurface [bxSurfaceEmission]=\"errorMessage ? 'var(--bx-text-danger)' : 'var(--bx-accent)'\" [class.is-checked]=\"internalValue() === value()\"\n [class.is-invalid]=\"!!errorMessage\">\n <div class=\"bx-radio-inner\"></div>\n </div>\n\n @if (resolvedLabel()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n </label>\n</bx-form-field>","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, output, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey } from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-search-input',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField, Icon],\n templateUrl: './search-input.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './search-input.scss'\n})\nexport class SearchInput extends BxBaseControl<string> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-search-${Math.random().toString(36).substr(2, 9)}`);\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n // eslint-disable-next-line @angular-eslint/no-output-native -- Keep the established public search event.\n public readonly search = output<string>();\n\n @ViewChild('inputElement') private inputElement?: ElementRef<HTMLInputElement>;\n\n public clear(): void {\n if (this.isDisabled()) return;\n this.updateValue('');\n this.search.emit('');\n this.focus();\n }\n\n public focus(): void {\n this.inputElement?.nativeElement.focus();\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.value);\n this.search.emit(target.value);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [label]=\"label()\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\"\n [required]=\"required()\" [forId]=\"inputId()\">\n\n <div class=\"bx-search-input-wrapper\" bxSurface [class.is-invalid]=\"!!errorMessage\" [class.is-disabled]=\"isDisabled()\">\n <bx-icon class=\"bx-search-icon-left\" name=\"search\" size=\"16\"></bx-icon>\n\n <input #inputElement class=\"bx-native-search-input\" type=\"text\" [attr.id]=\"inputId()\"\n [attr.placeholder]=\"resolvedPlaceholder()\" [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel()\"\n [disabled]=\"isDisabled()\" [value]=\"internalValue() || ''\" (input)=\"onInput($event)\" (blur)=\"onBlur()\">\n\n @if (internalValue()) {\n <button type=\"button\" class=\"bx-search-clear-btn\" aria-label=\"Clear search\" [disabled]=\"isDisabled()\" (click)=\"clear()\">\n <bx-icon name=\"x\" size=\"16\"></bx-icon>\n </button>\n }\n </div>\n\n</bx-form-field>","import { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, input, output, signal, ViewChild, OnInit, OnDestroy, ElementRef, NgZone, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Overlay, OverlayModule, ConnectionPositionPair, CdkConnectedOverlay } from '@angular/cdk/overlay';\nimport {\n BX_I18N,\n BxBaseControl,\n BxA11yService,\n inheritOverlayTheme,\n trackOverlayOrigin,\n DEFAULT_DEBOUNCE_TIME,\n isTextWithKey,\n ResolvableText,\n uuidv4\n} from '@filip.mazev/blocks/core';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { FormField } from '../form-field/form-field';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { BX_OVERLAY_CONTEXT } from '@filip.mazev/blocks/primitives';\nimport { BxSelectOption } from '../../interfaces/ibx-select-option.interface';\nimport { SearchInput } from '../search-input/search-input';\n\n@Component({\n selector: 'bx-select',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, OverlayModule, FormField, Icon, SearchInput],\n templateUrl: './select.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './select.scss'\n})\nexport class Select<T> extends BxBaseControl<T> implements OnInit, OnDestroy {\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly overlay = inject(Overlay);\n private readonly overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });\n protected readonly panelScrollStrategy = this.overlay.scrollStrategies.noop();\n protected readonly isPanelAttached = signal(false);\n private readonly i18n = inject(BX_I18N, { optional: true });\n protected readonly searchTerm = signal<string>('');\n protected readonly inputId = computed(() => `bx-select-${uuidv4()}`);\n protected readonly overlayPositions: ConnectionPositionPair[] = [\n new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, 0, 4),\n new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }, 0, -4)\n ];\n\n protected readonly isFloating = computed(() => {\n const val = this.internalValue();\n const hasValue = val !== null && val !== undefined && val !== '';\n return this.isOpen() || hasValue;\n });\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return '';\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected readonly resolvedPlaceholder = computed(() => {\n this.i18n?.version?.();\n const p = this.placeholder();\n if (!p) return '';\n return isTextWithKey(p) ? (this.i18n?.translate(p.key) ?? p.key) : p;\n });\n\n protected readonly resolvedOptions = computed(() => {\n this.i18n?.version?.();\n return this.options().map((opt) => ({\n ...opt,\n resolvedStr: this.resolveText(opt.label)\n }));\n });\n\n protected readonly filteredOptions = computed(() => {\n const term = this.searchTerm().trim();\n const opts = this.resolvedOptions();\n\n if (this.externalFiltering() || !term) return opts;\n\n // Literal subsequence matching accepts punctuation and never constructs user regex.\n const query = term.toLocaleLowerCase();\n return opts.filter((opt) => {\n let index = 0;\n for (const character of opt.resolvedStr.toLocaleLowerCase()) {\n if (character === query[index]) index++;\n if (index === query.length) return true;\n }\n return false;\n });\n });\n\n protected readonly selectedOptionLabel = computed(() => {\n const currentVal = this.internalValue();\n const selected = this.resolvedOptions().find((o) => o.value === currentVal);\n return selected ? selected.resolvedStr : '';\n });\n\n protected readonly resolvedSearchPlaceholder = computed(() => this.resolveText(this.searchPlaceholder()));\n protected readonly resolvedEmptyMessage = computed(() => this.resolveText(this.emptyMessage()));\n public readonly options = input.required<BxSelectOption<T>[]>();\n\n public readonly isSearchable = input<boolean>(false);\n\n public readonly externalFiltering = input<boolean>(false);\n public readonly searchPlaceholder = input<ResolvableText>('Search...');\n public readonly emptyMessage = input<ResolvableText>('No results found.');\n // eslint-disable-next-line @angular-eslint/no-output-native -- Keep the established public search event.\n public readonly search = output<string>();\n public readonly isOpen = signal<boolean>(false);\n private transition?: ReturnType<typeof createGlassTransition>;\n\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n private disconnectOrigin?: () => void;\n\n private transitionRevision = 0;\n\n private focusOnOpen: 'first' | 'last' | null = null;\n\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n\n @ViewChild('searchInput') private searchInputRef?: SearchInput;\n\n @ViewChild('origin', { read: ElementRef }) private originRef?: ElementRef<HTMLElement>;\n\n private searchSubject = new Subject<string>();\n\n private sub?: Subscription;\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n this.sub = this.searchSubject.pipe(debounceTime(DEFAULT_DEBOUNCE_TIME), distinctUntilChanged()).subscribe((term) => {\n this.searchTerm.set(term);\n if (this.externalFiltering()) {\n this.search.emit(term);\n }\n });\n }\n\n public ngOnDestroy(): void {\n ++this.transitionRevision;\n this.onPanelDetach();\n this.sub?.unsubscribe();\n }\n\n public toggleOpen(): void {\n if (this.isDisabled() || this.loading()) return;\n if (this.isOpen()) this.close();\n else this.open();\n }\n\n public open(): void {\n if (this.isDisabled() || this.loading()) return;\n ++this.transitionRevision;\n this.isOpen.set(true);\n this.isPanelAttached.set(true);\n const pane = this.connectedOverlay?.overlayRef?.overlayElement;\n if (pane) pane.inert = false;\n const transition = this.transition;\n if (transition) void this.zone.runOutsideAngular(() => transition.enter());\n }\n\n public close(): void {\n this.isOpen.set(false);\n this.markAsTouched();\n const revision = ++this.transitionRevision;\n const pane = this.connectedOverlay?.overlayRef?.overlayElement;\n if (pane?.contains(pane.ownerDocument.activeElement)) this.originRef?.nativeElement.focus({ preventScroll: true });\n if (pane) pane.inert = true;\n const transition = this.transition;\n if (transition && !this.a11y.isReducedMotion()) {\n void this.zone\n .runOutsideAngular(() => transition.exit())\n .then(() => {\n if (revision === this.transitionRevision && !this.isOpen()) this.isPanelAttached.set(false);\n })\n .catch(() => {\n if (revision === this.transitionRevision) this.isPanelAttached.set(false);\n });\n } else this.isPanelAttached.set(false);\n }\n\n protected onPanelAttach(): void {\n const revision = this.transitionRevision;\n const origin = this.originRef?.nativeElement;\n const overlay = this.connectedOverlay?.overlayRef;\n if (origin && overlay?.hasAttached()) {\n this.disconnectLighting?.();\n this.disconnectLighting = inheritGlassLighting(overlay.overlayElement, origin);\n this.disconnectOrigin?.();\n this.disconnectOrigin = this.zone.runOutsideAngular(() => trackOverlayOrigin(overlay, origin));\n }\n // Wait for the attached view's synchronous surface directives to finish mounting.\n queueMicrotask(() => {\n const attachedOverlay = this.connectedOverlay?.overlayRef;\n const attachedOrigin = this.originRef?.nativeElement;\n if (!attachedOverlay?.hasAttached() || !attachedOrigin || !this.isOpen() || revision !== this.transitionRevision) return;\n this.disconnectTheme?.();\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(attachedOrigin, attachedOverlay.overlayElement));\n attachedOverlay.updatePosition();\n if (!this.a11y.isReducedMotion()) {\n this.transition?.destroy();\n this.transition = this.zone.runOutsideAngular(() => createGlassTransition(attachedOrigin, attachedOverlay.overlayElement));\n const transition = this.transition;\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .catch(() => {\n if (revision === this.transitionRevision) {\n this.transition?.destroy();\n this.transition = undefined;\n }\n });\n }\n if (this.isSearchable()) this.searchInputRef?.focus();\n else if (this.focusOnOpen) {\n const items = this.panelItems();\n (this.focusOnOpen === 'last' ? items[items.length - 1] : items[0])?.focus();\n }\n this.focusOnOpen = null;\n });\n }\n\n protected onPanelDetach(): void {\n this.transition?.destroy();\n this.transition = undefined;\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n this.disconnectOrigin?.();\n this.disconnectOrigin = undefined;\n }\n\n protected overlayPopoverLocation(origin: HTMLElement): CdkConnectedOverlay['usePopover'] {\n const useTopLayer =\n !!this.overlayContext?.useTopLayer || !!origin.closest('dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]');\n // A null location disables the CDK popover; explicit contexts and native\n // top-layer containers opt back into the global popover.\n return useTopLayer ? 'global' : null;\n }\n\n protected refreshPanel(): void {\n this.transition?.refresh();\n }\n\n protected onTriggerKey(event: KeyboardEvent): void {\n if (!['ArrowDown', 'ArrowUp', 'Escape'].includes(event.key)) return;\n event.preventDefault();\n if (event.key === 'Escape') {\n this.close();\n return;\n }\n this.focusOnOpen = event.key === 'ArrowUp' ? 'last' : 'first';\n if (this.isOpen()) {\n const items = this.panelItems();\n (this.focusOnOpen === 'last' ? items[items.length - 1] : items[0])?.focus();\n this.focusOnOpen = null;\n } else this.open();\n }\n\n protected onPanelKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n return;\n }\n if (event.key === 'Tab') {\n this.close();\n return;\n }\n if ((event.target as HTMLElement)?.matches('input,textarea')) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.panelItems();\n if (!items.length) return;\n const current = items.indexOf(items[0].ownerDocument.activeElement as HTMLElement);\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : event.key === 'ArrowDown'\n ? (current + 1) % items.length\n : current < 0\n ? items.length - 1\n : (current - 1 + items.length) % items.length;\n event.preventDefault();\n items[next].focus();\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n const clickTarget = event.target as Node;\n if (this.originRef?.nativeElement.contains(clickTarget)) {\n return;\n }\n this.close();\n }\n\n protected selectOption(option: BxSelectOption<T>): void {\n if (option.disabled) return;\n this.updateValue(option.value);\n this.close();\n }\n\n protected onSearchChange(value: string): void {\n this.searchSubject.next(value);\n }\n\n private panelItems(): HTMLElement[] {\n return Array.from(this.connectedOverlay?.overlayRef?.overlayElement.querySelectorAll<HTMLElement>('.bx-select-menu-container button:not(:disabled)') ?? []);\n }\n\n private resolveText(textObj: ResolvableText | undefined): string {\n if (!textObj) return '';\n return isTextWithKey(textObj) ? (this.i18n?.translate(textObj.key) ?? textObj.key) : textObj;\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <button type=\"button\" role=\"combobox\" aria-haspopup=\"listbox\" cdkOverlayOrigin bxSurface #origin=\"cdkOverlayOrigin\" class=\"bx-select-trigger\"\n [class.is-invalid]=\"!!errorMessage\" [class.is-open]=\"isOpen()\" [class.is-floating]=\"isFloating()\"\n [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\" [attr.aria-label]=\"ariaLabel() || resolvedLabel()\"\n [disabled]=\"isDisabled() || loading()\" (click)=\"toggleOpen()\" (keydown)=\"onTriggerKey($event)\"\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-controls]=\"isPanelAttached() ? inputId() + '-options' : null\">\n\n <div class=\"bx-select-container\">\n @if (label()) {\n <span class=\"bx-floating-label\">\n {{ resolvedLabel() }}\n @if (isFieldRequired()) { <span class=\"bx-field-required\">*</span> }\n </span>\n }\n\n <span class=\"bx-select-value\" [attr.title]=\"selectedOptionLabel() || resolvedPlaceholder()\" [class.is-placeholder]=\"internalValue() === null\">\n @if (internalValue() === null && isFloating()) {\n {{ resolvedPlaceholder() }}\n } @else {\n {{ selectedOptionLabel() }}\n }\n </span>\n </div>\n\n <bx-icon class=\"bx-select-caret\" name=\"chevron-down\" size=\"16\"></bx-icon>\n </button>\n\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"origin\" [cdkConnectedOverlayOpen]=\"isPanelAttached()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\" [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayScrollStrategy]=\"panelScrollStrategy\"\n [cdkConnectedOverlayUsePopover]=\"overlayPopoverLocation(origin.elementRef.nativeElement)\"\n [cdkConnectedOverlayWidth]=\"origin.elementRef.nativeElement.offsetWidth\"\n (overlayOutsideClick)=\"onOutsideClick($event)\" (attach)=\"onPanelAttach()\" (detach)=\"onPanelDetach()\" (positionChange)=\"refreshPanel()\">\n\n <div class=\"bx-select-panel\" data-bx-surface=\"solid\" role=\"listbox\" tabindex=\"0\" [attr.aria-label]=\"resolvedLabel()\" [id]=\"inputId() + '-options'\" (keydown)=\"onPanelKey($event)\">\n\n @if (isSearchable()) {\n <div class=\"bx-select-search-container\">\n <bx-search-input #searchInput [placeholder]=\"resolvedSearchPlaceholder()\"\n (search)=\"onSearchChange($event)\" (keydown.enter)=\"$event.preventDefault()\">\n </bx-search-input>\n </div>\n }\n\n <div class=\"bx-select-menu-container\">\n @for (option of filteredOptions(); track option.value) {\n\n <button type=\"button\" class=\"bx-select-option\" role=\"option\" [attr.aria-selected]=\"internalValue() === option.value\" [disabled]=\"option.disabled ?? false\" (click)=\"selectOption(option)\">\n <div class=\"bx-select-item-inner\">\n <div class=\"bx-select-check-placeholder\">\n @if (internalValue() === option.value) {\n <bx-icon name=\"check\" size=\"16\"></bx-icon>\n }\n </div>\n <span [title]=\"option.resolvedStr\">{{ option.resolvedStr }}</span>\n </div>\n </button>\n\n } @empty {\n <div class=\"bx-select-empty\">\n <span class=\"bx-empty-text\">{{ resolvedEmptyMessage() }}</span>\n </div>\n }\n </div>\n\n </div>\n </ng-template>\n\n</bx-form-field>\n","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BX_I18N, BxBaseControl, isTextWithKey, uuidv4 } from '@filip.mazev/blocks/core';\nimport { FormField } from '../form-field/form-field';\n\n@Component({\n selector: 'bx-slide-toggle',\n standalone: true,\n imports: [BxSurfaceDirective, CommonModule, FormField],\n templateUrl: './slide-toggle.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './slide-toggle.scss'\n})\nexport class SlideToggle extends BxBaseControl<boolean> {\n private readonly i18n = inject(BX_I18N, { optional: true });\n\n protected readonly inputId = computed(() => `bx-slide-toggle-${uuidv4()}`);\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n const l = this.label();\n if (!l) return undefined;\n return isTextWithKey(l) ? (this.i18n?.translate(l.key) ?? l.key) : l;\n });\n\n protected onToggle(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.updateValue(target.checked);\n }\n\n protected onBlur(): void {\n this.markAsTouched();\n }\n}\n","<bx-form-field [inline]=\"true\" [tooltip]=\"tooltip()\" [error]=\"errorMessage\" [loading]=\"loading()\" [forId]=\"inputId()\">\n\n <label class=\"bx-inline-wrapper\" [class.is-disabled]=\"isDisabled()\">\n <input type=\"checkbox\" class=\"bx-visually-hidden\" [attr.id]=\"inputId()\" [attr.data-testid]=\"dataTestId()\"\n [attr.aria-label]=\"ariaLabel()\" [disabled]=\"isDisabled()\" [checked]=\"internalValue() === true\"\n (change)=\"onToggle($event)\" (blur)=\"onBlur()\">\n\n <div class=\"bx-slide-toggle-track\" bxSurface [bxSurfaceEmission]=\"errorMessage ? 'var(--bx-text-danger)' : 'var(--bx-accent)'\" [class.is-checked]=\"internalValue() === true\" [class.is-invalid]=\"!!errorMessage\">\n <div class=\"bx-slide-toggle-thumb\"></div>\n </div>\n\n @if (resolvedLabel() || tooltip()) {\n <span class=\"bx-inline-label\">\n {{ resolvedLabel() }}\n @if (required()) { <span class=\"bx-inline-required\">*</span> }\n </span>\n }\n\n\n </label>\n\n</bx-form-field>","import { afterEveryRender, afterNextRender, DestroyRef, Directive, ElementRef, HostListener, inject, NgZone } from '@angular/core';\nimport { observeGlassLighting, refreshGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { ThemingService } from '@filip.mazev/blocks/core';\n\n/** Glass styling for a native range, including reactive forms and programmatic values. */\n@Directive({ selector: 'input[type=range][bxSlider]', host: { class: 'bx-slider' } })\nexport class SliderDirective {\n private readonly element = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly theme = inject(ThemingService);\n private shell?: HTMLSpanElement;\n private thumb?: HTMLSpanElement;\n\n constructor() {\n afterEveryRender(() => this.sync());\n const zone = inject(NgZone);\n const destroy = inject(DestroyRef);\n afterNextRender(() => {\n const input = this.element.nativeElement;\n const shell = input.ownerDocument.createElement('span');\n shell.className = 'bx-slider-shell';\n const thumb = input.ownerDocument.createElement('span');\n thumb.className = 'bx-slider-thumb';\n thumb.setAttribute('aria-hidden', 'true');\n input.before(shell);\n shell.append(input, thumb);\n this.shell = shell;\n this.thumb = thumb;\n this.sync();\n const place = () => {\n shell.style.setProperty('--bx-slider-center-y', `${input.offsetTop + input.offsetHeight / 2}px`);\n shell.style.setProperty('--bx-slider-track-start', `${input.offsetLeft}px`);\n shell.style.setProperty('--bx-slider-track-width', `${input.offsetWidth}px`);\n refreshGlassLighting(thumb);\n };\n const resize = new ResizeObserver(place);\n zone.runOutsideAngular(() => {\n resize.observe(input);\n resize.observe(shell);\n place();\n });\n const stop = zone.runOutsideAngular(() =>\n observeGlassLighting(\n thumb,\n (light) => {\n const reflected = light.reflectionStrength > light.strength;\n const strength = reflected ? light.reflectionStrength : light.strength;\n if (strength <= 0.04) {\n thumb.style.removeProperty('--bx-slider-light-color');\n thumb.style.removeProperty('--bx-slider-light-strength');\n } else {\n thumb.style.setProperty('--bx-slider-light-color', reflected ? light.reflection : light.color);\n thumb.style.setProperty('--bx-slider-light-strength', String(strength));\n }\n thumb.style.setProperty('--bx-slider-light-x', `${reflected ? light.reflectionX : light.x}%`);\n thumb.style.setProperty('--bx-slider-light-y', `${reflected ? light.reflectionY : light.y}%`);\n },\n input\n )\n );\n destroy.onDestroy(() => {\n resize.disconnect();\n stop();\n shell.replaceWith(input);\n this.shell = this.thumb = undefined;\n });\n });\n }\n\n @HostListener('input')\n protected sync(): void {\n const input = this.element.nativeElement;\n const min = input.min === '' ? 0 : Number(input.min);\n const max = input.max === '' ? 100 : Number(input.max);\n const progress = max > min ? Math.max(0, Math.min(100, ((input.valueAsNumber - min) / (max - min)) * 100)) : 0;\n const value = `${Number.isFinite(progress) ? progress : 0}%`;\n if (input.style.getPropertyValue('--bx-slider-progress') !== value) input.style.setProperty('--bx-slider-progress', value);\n if (this.shell) {\n const position = String((input.matches(':dir(rtl)') ? 100 - (Number.isFinite(progress) ? progress : 0) : Number.isFinite(progress) ? progress : 0) / 100);\n if (this.shell.style.getPropertyValue('--bx-slider-position') !== position) {\n this.shell.style.setProperty('--bx-slider-position', position);\n if (this.thumb) refreshGlassLighting(this.thumb);\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filip.mazev-blocks.mjs","names":[],"sources":["../../../projects/blocks/src/public-api.ts"],"sourcesContent":["/* * Public API Surface of blocks\n * This file is auto-generated. Do not edit directly.\n */\n\nexport const BLOCKS_VERSION = '1.4.
|
|
1
|
+
{"version":3,"file":"filip.mazev-blocks.mjs","names":[],"sources":["../../../projects/blocks/src/public-api.ts"],"sourcesContent":["/* * Public API Surface of blocks\n * This file is auto-generated. Do not edit directly.\n */\n\nexport const BLOCKS_VERSION = '1.4.15';\n"],"mappings":"AAIA,MAAa,iBAAiB"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
import { Rule } from '@angular-devkit/schematics';
|
|
2
|
-
declare const LEGACY_PALETTES: {
|
|
3
|
-
readonly white: "graphite-sky-blue";
|
|
4
|
-
readonly blue: "azure-coral";
|
|
5
|
-
readonly purple: "violet-teal";
|
|
6
|
-
readonly orange: "tangerine-indigo";
|
|
7
|
-
readonly red: "scarlet-cyan";
|
|
8
|
-
readonly green: "lime-violet";
|
|
9
|
-
};
|
|
10
2
|
export interface NgAddOptions {
|
|
11
|
-
theme?: '
|
|
3
|
+
theme?: 'carbon-cobalt' | 'azure-ember' | 'violet-teal' | 'tangerine-indigo' | 'brick-rose-cyan' | 'lime-violet' | 'cyberpunk';
|
|
12
4
|
}
|
|
13
5
|
export declare function ngAdd(options: NgAddOptions): Rule;
|
|
14
|
-
export {};
|
|
@@ -1,19 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ngAdd = ngAdd;
|
|
4
|
-
const LEGACY_PALETTES = {
|
|
5
|
-
white: 'graphite-sky-blue',
|
|
6
|
-
blue: 'azure-coral',
|
|
7
|
-
purple: 'violet-teal',
|
|
8
|
-
orange: 'tangerine-indigo',
|
|
9
|
-
red: 'scarlet-cyan',
|
|
10
|
-
green: 'lime-violet'
|
|
11
|
-
};
|
|
12
4
|
function ngAdd(options) {
|
|
13
5
|
return (tree, context) => {
|
|
14
6
|
var _a;
|
|
15
|
-
const
|
|
16
|
-
const theme = Object.prototype.hasOwnProperty.call(LEGACY_PALETTES, selected) ? LEGACY_PALETTES[selected] : selected;
|
|
7
|
+
const theme = (_a = options.theme) !== null && _a !== void 0 ? _a : 'carbon-cobalt';
|
|
17
8
|
injectStyles(tree, context, { theme });
|
|
18
9
|
return tree;
|
|
19
10
|
};
|
|
@@ -70,8 +61,8 @@ function injectStyles(tree, context, options) {
|
|
|
70
61
|
context.logger.info('Blocks SCSS configuration already exists. Skipping style injection.');
|
|
71
62
|
return;
|
|
72
63
|
}
|
|
73
|
-
const lightThemeVar = `$${(_f = options.theme) !== null && _f !== void 0 ? _f : '
|
|
74
|
-
const darkThemeVar = `$${(_g = options.theme) !== null && _g !== void 0 ? _g : '
|
|
64
|
+
const lightThemeVar = `$${(_f = options.theme) !== null && _f !== void 0 ? _f : 'carbon-cobalt'}-light-theme`;
|
|
65
|
+
const darkThemeVar = `$${(_g = options.theme) !== null && _g !== void 0 ? _g : 'carbon-cobalt'}-dark-theme`;
|
|
75
66
|
const blocksThemeSnippet = `
|
|
76
67
|
@use '@filip.mazev/blocks' as *;
|
|
77
68
|
|
|
@@ -86,5 +77,5 @@ function injectStyles(tree, context, options) {
|
|
|
86
77
|
}
|
|
87
78
|
`;
|
|
88
79
|
tree.overwrite(targetStylePath, blocksThemeSnippet + '\n' + content);
|
|
89
|
-
context.logger.info(`Successfully injected the ${(_h = options.theme) !== null && _h !== void 0 ? _h : '
|
|
80
|
+
context.logger.info(`Successfully injected the ${(_h = options.theme) !== null && _h !== void 0 ? _h : 'carbon-cobalt'} Blocks theme configuration into ${targetStylePath}.`);
|
|
90
81
|
}
|
|
@@ -8,31 +8,25 @@
|
|
|
8
8
|
"type": "string",
|
|
9
9
|
"description": "Select a Blocks palette for your UI.",
|
|
10
10
|
"enum": [
|
|
11
|
-
"
|
|
12
|
-
"azure-
|
|
11
|
+
"carbon-cobalt",
|
|
12
|
+
"azure-ember",
|
|
13
13
|
"violet-teal",
|
|
14
14
|
"tangerine-indigo",
|
|
15
|
-
"
|
|
15
|
+
"brick-rose-cyan",
|
|
16
16
|
"lime-violet",
|
|
17
|
-
"cyberpunk"
|
|
18
|
-
"white",
|
|
19
|
-
"blue",
|
|
20
|
-
"purple",
|
|
21
|
-
"orange",
|
|
22
|
-
"red",
|
|
23
|
-
"green"
|
|
17
|
+
"cyberpunk"
|
|
24
18
|
],
|
|
25
19
|
"x-prompt": {
|
|
26
20
|
"message": "Which palette would you like to use?",
|
|
27
21
|
"type": "list",
|
|
28
22
|
"items": [
|
|
29
23
|
{
|
|
30
|
-
"value": "
|
|
31
|
-
"label": "
|
|
24
|
+
"value": "carbon-cobalt",
|
|
25
|
+
"label": "Carbon / Cobalt"
|
|
32
26
|
},
|
|
33
27
|
{
|
|
34
|
-
"value": "azure-
|
|
35
|
-
"label": "Azure /
|
|
28
|
+
"value": "azure-ember",
|
|
29
|
+
"label": "Azure / Ember"
|
|
36
30
|
},
|
|
37
31
|
{
|
|
38
32
|
"value": "violet-teal",
|
|
@@ -43,8 +37,8 @@
|
|
|
43
37
|
"label": "Tangerine / Indigo"
|
|
44
38
|
},
|
|
45
39
|
{
|
|
46
|
-
"value": "
|
|
47
|
-
"label": "
|
|
40
|
+
"value": "brick-rose-cyan",
|
|
41
|
+
"label": "Brick Rose / Cyan"
|
|
48
42
|
},
|
|
49
43
|
{
|
|
50
44
|
"value": "lime-violet",
|
|
@@ -56,7 +50,7 @@
|
|
|
56
50
|
}
|
|
57
51
|
]
|
|
58
52
|
},
|
|
59
|
-
"default": "
|
|
53
|
+
"default": "carbon-cobalt"
|
|
60
54
|
}
|
|
61
55
|
}
|
|
62
56
|
}
|
|
@@ -136,16 +136,7 @@ export interface BxAppearanceConfig {
|
|
|
136
136
|
reducedTransparency: boolean;
|
|
137
137
|
}
|
|
138
138
|
export declare const DEFAULT_APPEARANCE_CONFIG: Readonly<BxAppearanceConfig>;
|
|
139
|
-
export type BxThemeId = '
|
|
140
|
-
export declare const LEGACY_THEME_IDS: {
|
|
141
|
-
readonly white: "graphite-sky-blue";
|
|
142
|
-
readonly blue: "azure-coral";
|
|
143
|
-
readonly purple: "violet-teal";
|
|
144
|
-
readonly orange: "tangerine-indigo";
|
|
145
|
-
readonly red: "scarlet-cyan";
|
|
146
|
-
readonly green: "lime-violet";
|
|
147
|
-
};
|
|
148
|
-
export type LegacyBxThemeId = keyof typeof LEGACY_THEME_IDS;
|
|
139
|
+
export type BxThemeId = 'carbon-cobalt' | 'azure-ember' | 'violet-teal' | 'tangerine-indigo' | 'brick-rose-cyan' | 'lime-violet' | 'cyberpunk';
|
|
149
140
|
export declare const THEME_PALETTES: ReadonlyArray<{
|
|
150
141
|
id: BxThemeId;
|
|
151
142
|
label: string;
|
|
@@ -183,7 +174,7 @@ export declare class ThemingService implements OnDestroy {
|
|
|
183
174
|
constructor();
|
|
184
175
|
ngOnDestroy(): void;
|
|
185
176
|
setApplicationTheme(theme: DeviceTheme): void;
|
|
186
|
-
setPalette(palette: BxThemeId
|
|
177
|
+
setPalette(palette: BxThemeId): void;
|
|
187
178
|
setHighContrast(enabled: boolean): void;
|
|
188
179
|
setAppearance(settings: Partial<BxAppearanceConfig>): void;
|
|
189
180
|
resetAppearance(): void;
|
|
@@ -306,7 +297,7 @@ export interface IBxI18nAdapter {
|
|
|
306
297
|
export declare const DEFAULT_DEBOUNCE_TIME = 300;
|
|
307
298
|
export declare const SCROLL_LOCK_INSTANCE_IDENTIFIER = "scroll_lock_instance_";
|
|
308
299
|
export type SemanticColorToken = 'bg-canvas' | 'bg-surface' | 'bg-surface-alt' | 'bg-element' | 'bg-element-hover' | 'bg-element-active' | 'bg-neutral' | 'bg-neutral-hover' | 'bg-neutral-active' | 'primary' | 'primary-hover' | 'primary-active' | 'primary-subtle' | 'on-primary' | 'on-primary-hover' | 'on-primary-active' | 'accent' | 'accent-hover' | 'accent-active' | 'accent-subtle' | 'on-accent' | 'on-accent-hover' | 'on-accent-active' | 'text-accent' | 'border-accent' | 'text-heading' | 'text-primary' | 'text-secondary' | 'text-brand' | 'text-inverse' | 'text-info' | 'text-warn' | 'text-success' | 'text-danger' | 'border-subtle' | 'border-default' | 'border-strong' | 'border-brand' | 'border-info' | 'border-success' | 'border-warn' | 'border-danger' | 'bg-info' | 'bg-info-hover' | 'bg-info-active' | 'bg-info-disabled' | 'bg-info-subtle' | 'bg-success' | 'bg-success-hover' | 'bg-success-active' | 'bg-success-disabled' | 'bg-success-subtle' | 'bg-warn' | 'bg-warn-hover' | 'bg-warn-active' | 'bg-warn-disabled' | 'bg-warn-subtle' | 'bg-danger' | 'bg-danger-hover' | 'bg-danger-active' | 'bg-danger-disabled' | 'bg-danger-subtle' | 'scroll-bg' | 'scroll-thumb' | 'scroll-thumb-hover' | 'meta-brand-palette' | 'meta-accent-palette';
|
|
309
|
-
export declare const PALETTE_NAMES: readonly ["primary", "accent", "
|
|
300
|
+
export declare const PALETTE_NAMES: readonly ["primary", "accent", "carbon", "cobalt", "ember", "brick-rose", "azure", "violet", "teal", "tangerine", "indigo", "cyan", "lime", "cool-violet", "cyber-yellow", "cyber-slate", "blue", "orange", "purple", "red", "green", "danger", "warn", "success", "information", "neutral"];
|
|
310
301
|
export declare const SHADE_NUMBERS: readonly [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000];
|
|
311
302
|
export declare const TOKEN_PREFIX = "bx";
|
|
312
303
|
export declare const TOKEN_DELIMITER = "-";
|
|
@@ -358,7 +349,7 @@ export declare function getComplementaryToken(token: Color): Color;
|
|
|
358
349
|
* Provides the inverted value of a given token color
|
|
359
350
|
*/
|
|
360
351
|
export declare function invertPaletteToken(token: Color): Color;
|
|
361
|
-
/**
|
|
352
|
+
/** Accept only current palette IDs when restoring a saved selection. */
|
|
362
353
|
export declare function resolveThemeId(value: string | null | undefined): BxThemeId | undefined;
|
|
363
354
|
export declare function uuidv4(): string;
|
|
364
355
|
export declare function inheritOverlayTheme(source: HTMLElement, pane: HTMLElement): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const BLOCKS_VERSION = "1.4.
|
|
1
|
+
export declare const BLOCKS_VERSION = "1.4.15";
|