@filip.mazev/blocks 1.4.9 → 1.4.11
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 +15 -3
- package/core/styles/_index.scss +8 -0
- package/core/styles/_overlay.scss +4 -0
- package/core/styles/_palettes.scss +56 -0
- package/core/styles/_theme-engine.scss +180 -149
- package/core/styles/themes/_azure-coral-theme.scss +4 -0
- package/core/styles/themes/_blue-theme.scss +5 -0
- package/core/styles/themes/_cyberpunk-theme.scss +3 -2
- package/core/styles/themes/_graphite-sky-blue-theme.scss +19 -0
- package/core/styles/themes/_green-theme.scss +4 -3
- package/core/styles/themes/_high-contrast-theme.scss +25 -6
- package/core/styles/themes/_lime-violet-theme.scss +4 -0
- package/core/styles/themes/_orange-theme.scss +4 -3
- package/core/styles/themes/_purple-theme.scss +4 -3
- package/core/styles/themes/_red-theme.scss +4 -3
- package/core/styles/themes/_scarlet-cyan-theme.scss +4 -0
- package/core/styles/themes/_tangerine-indigo-theme.scss +4 -0
- package/core/styles/themes/_violet-teal-theme.scss +4 -0
- package/core/styles/themes/_white-theme.scss +4 -27
- package/fesm2022/filip.mazev-blocks-core.mjs +142 -32
- package/fesm2022/filip.mazev-blocks-core.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-effects-runtime.mjs +1 -1
- package/fesm2022/filip.mazev-blocks-effects-runtime.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-forms.mjs +25 -39
- package/fesm2022/filip.mazev-blocks-forms.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-primitives.mjs +1246 -650
- package/fesm2022/filip.mazev-blocks-primitives.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 +10 -1
- package/schematics/ng-add/index.js +15 -4
- package/schematics/ng-add/schema.json +26 -15
- package/types/filip.mazev-blocks-core.d.ts +20 -7
- package/types/filip.mazev-blocks-forms.d.ts +2 -3
- package/types/filip.mazev-blocks-primitives.d.ts +142 -9
- package/types/filip.mazev-blocks.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filip.mazev-blocks-primitives.mjs","names":[],"sources":["../../../projects/blocks/primitives/components/tooltip/tooltip.ts","../../../projects/blocks/primitives/components/tooltip/tooltip.html","../../../projects/blocks/primitives/components/menu/menu.ts","../../../projects/blocks/primitives/components/menu/menu.html","../../../projects/blocks/primitives/components/menu-item/menu-item.ts","../../../projects/blocks/primitives/components/menu-item/menu-item.html","../../../projects/blocks/primitives/directives/tooltip.directive.ts","../../../projects/blocks/primitives/directives/overlay-context.token.ts","../../../projects/blocks/primitives/directives/dropdown.directive.ts","../../../projects/blocks/primitives/directives/context-menu.directive.ts","../../../projects/blocks/primitives/directives/overlay-context.directive.ts"],"sourcesContent":["import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, input, ChangeDetectionStrategy } from '@angular/core';\nimport { BX_I18N, BxA11yService, isTextWithKey, ResolvableText } from '@filip.mazev/blocks/core';\n\n@Component({\n selector: 'bx-tooltip',\n imports: [BxSurfaceDirective],\n templateUrl: './tooltip.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './tooltip.scss'\n})\nexport class Tooltip {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n\n protected readonly resolvedText = computed(() => {\n this.i18n?.version?.();\n\n const textData = this.text();\n if (!textData) return undefined;\n\n if (isTextWithKey(textData)) {\n return this.i18n?.translate(textData.key) ?? textData.key;\n }\n\n return textData;\n });\n\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n public readonly text = input.required<ResolvableText>();\n}\n","<div class=\"bx-tooltip-surface\" bxSurface [class.bx-tooltip-animated]=\"isAnimated()\">\n @if (resolvedText()) {\n {{ resolvedText() }}\n }\n</div>","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { BxA11yService } from '@filip.mazev/blocks/core';\n\n@Component({\n selector: 'bx-menu',\n imports: [BxSurfaceDirective],\n templateUrl: './menu.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './menu.scss'\n})\nexport class Menu {\n private readonly a11y = inject(BxA11yService);\n\n public readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n}\n","<div bxSurface role=\"menu\" class=\"bx-menu-wrapper\" [class.bx-menu-animated]=\"isAnimated()\">\n <ng-content></ng-content>\n</div>\n","import { BX_I18N, BxA11yService, BxShortcutService, isTextWithKey, ResolvableShortcut, ResolvableText } from '@filip.mazev/blocks/core';\nimport { Component, computed, inject, input, output, ChangeDetectionStrategy } from '@angular/core';\nimport { Icon, IconName } from '@filip.mazev/blocks/icons';\nimport { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\n\n@Component({\n selector: 'bx-menu-item',\n imports: [Icon, BxSurfaceDirective],\n templateUrl: './menu-item.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './menu-item.scss'\n})\nexport class MenuItem {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n private readonly bxShortcutService = inject(BxShortcutService);\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n\n const label = this.label();\n if (!label) return undefined;\n\n if (isTextWithKey(label)) {\n return this.i18n?.translate(label.key) ?? label.key;\n }\n return label;\n });\n\n protected readonly resolvedShortcut = computed(() => {\n return this.bxShortcutService.resolve(this.shortcut());\n });\n\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n\n public readonly icon = input<IconName | undefined>(undefined);\n public readonly endIcon = input<IconName | undefined>(undefined);\n public readonly label = input<ResolvableText | undefined>(undefined);\n public readonly wrapLabel = input(false);\n public readonly disabled = input(false);\n public readonly danger = input(false);\n\n public readonly shortcut = input<ResolvableShortcut | undefined>(undefined);\n\n public readonly action = output<MouseEvent>();\n\n protected onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.action.emit(event);\n }\n}\n","<button bxSurface [bxSurfaceEmission]=\"danger() ? 'var(--bx-text-danger)' : 'var(--bx-primary)'\" type=\"button\" role=\"menuitem\" [disabled]=\"disabled()\" class=\"bx-menu-item-btn\" [class.is-disabled]=\"disabled()\" [class.is-danger]=\"danger()\"\n [class.bx-menu-item-animated]=\"isAnimated()\" (click)=\"onClick($event)\">\n\n @if (icon()) {\n <bx-icon class=\"bx-icon-pos-start\" [name]=\"icon()!\" size=\"20\" />\n }\n\n <span class=\"bx-menu-item-content\" [class.bx-menu-item-content-wrapped]=\"wrapLabel()\">\n @if (resolvedLabel()) {\n {{ resolvedLabel() }}\n } @else {\n <ng-content></ng-content>\n }\n </span>\n\n @if (resolvedShortcut()) {\n <span class=\"bx-menu-item-shortcut\">\n @for (key of resolvedShortcut(); track $index) {\n <kbd>{{ key }}</kbd>\n }\n </span>\n }\n\n @if (endIcon()) {\n <bx-icon class=\"bx-icon-pos-end\" [name]=\"endIcon()!\" size=\"20\" />\n }\n</button>\n","import { DestroyRef, Directive, ElementRef, HostListener, inject, input, NgZone } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { BxA11yService, BxPlacement, BxOverlayPositionService, inheritOverlayTheme, ResolvableText, uuidv4 } from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { Tooltip } from '../components/tooltip/tooltip';\n\n@Directive({ selector: '[bxTooltip]' })\nexport class TooltipDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly id = `bx-tooltip-${uuidv4()}`;\n public readonly bxTooltip = input.required<ResolvableText>();\n public readonly placement = input<BxPlacement>('bottom');\n private overlayRef: OverlayRef | null = null;\n private transition?: ReturnType<typeof createGlassTransition>;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n private positionSubscription?: { unsubscribe(): void };\n private keyboardSubscription?: { unsubscribe(): void };\n private revision = 0;\n private hovered = false;\n private focused = false;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.dispose());\n }\n\n public show(): void {\n if (!this.bxTooltip()) return;\n const revision = ++this.revision;\n if (!this.overlayRef) {\n const strategy = this.positionBuilder.getElementStrategy(this.elementRef.nativeElement, this.placement()).withFlexibleDimensions(false);\n this.overlayRef = this.overlay.create({\n positionStrategy: strategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: false,\n panelClass: 'bx-tooltip-pane'\n });\n\n const pane = this.overlayRef.overlayElement;\n pane.id = this.id;\n pane.setAttribute('role', 'tooltip');\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(this.elementRef.nativeElement, pane));\n this.disconnectLighting = inheritGlassLighting(pane, this.elementRef.nativeElement);\n\n const component = this.overlayRef.attach(new ComponentPortal(Tooltip));\n // CDK enables pane pointer events during attach. Reset afterwards so the\n // emerging tooltip cannot steal hover from small or nested triggers.\n pane.style.pointerEvents = 'none';\n this.keyboardSubscription = this.overlayRef.keydownEvents().subscribe((event) => this.onEscape(event));\n component.setInput('text', this.bxTooltip());\n component.changeDetectorRef.detectChanges();\n const positionArrow = () => {\n const trigger = this.elementRef.nativeElement.getBoundingClientRect();\n const bounds = pane.getBoundingClientRect();\n pane.style.setProperty('--bx-tooltip-arrow-x', `${trigger.left + trigger.width / 2 - bounds.left}px`);\n pane.style.setProperty('--bx-tooltip-arrow-y', `${trigger.top + trigger.height / 2 - bounds.top}px`);\n this.transition?.refresh();\n };\n this.positionSubscription = strategy.positionChanges.subscribe(positionArrow);\n this.overlayRef.updatePosition();\n positionArrow();\n\n if (!this.a11y.isReducedMotion()) {\n this.transition = this.zone.runOutsideAngular(() => createGlassTransition(this.elementRef.nativeElement, pane));\n }\n }\n\n const source = this.elementRef.nativeElement;\n const ids = new Set((source.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean));\n\n ids.add(this.id);\n source.setAttribute('aria-describedby', [...ids].join(' '));\n\n void Promise.resolve(this.zone.runOutsideAngular(() => this.transition?.enter())).catch(() => {\n if (revision === this.revision) {\n this.transition?.destroy();\n this.transition = undefined;\n }\n });\n }\n\n public hide(): void {\n const revision = ++this.revision;\n this.removeDescription();\n if (!this.overlayRef) return;\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.revision) this.dispose();\n })\n .catch(() => {\n if (revision === this.revision) this.dispose();\n });\n } else this.dispose();\n }\n\n @HostListener('mouseenter')\n protected onEnter(): void {\n this.hovered = true;\n this.show();\n }\n\n @HostListener('mouseleave')\n protected onLeave(): void {\n this.hovered = false;\n if (!this.focused) this.hide();\n }\n\n @HostListener('focusin')\n protected onFocus(): void {\n this.focused = true;\n this.show();\n }\n\n @HostListener('focusout', ['$event'])\n protected onBlur(event: FocusEvent): void {\n if (event.relatedTarget instanceof Node && this.elementRef.nativeElement.contains(event.relatedTarget)) return;\n this.focused = false;\n if (!this.hovered) this.hide();\n }\n\n protected onEscape(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.overlayRef) {\n event.stopPropagation();\n this.hovered = false;\n this.focused = false;\n this.hide();\n }\n }\n\n private removeDescription(): void {\n const source = this.elementRef.nativeElement;\n const ids = (source.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter((id) => id && id !== this.id);\n if (ids.length) source.setAttribute('aria-describedby', ids.join(' '));\n else source.removeAttribute('aria-describedby');\n }\n\n private dispose(): void {\n this.removeDescription();\n this.keyboardSubscription?.unsubscribe();\n this.keyboardSubscription = undefined;\n this.positionSubscription?.unsubscribe();\n this.positionSubscription = undefined;\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = undefined;\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface IBxOverlayContext {\n useTopLayer?: boolean;\n}\n\nexport const BX_OVERLAY_CONTEXT = new InjectionToken<IBxOverlayContext>('BX_OVERLAY_CONTEXT');\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n HostListener,\n NgZone,\n PLATFORM_ID,\n effect,\n inject,\n input,\n signal,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport { FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { BxA11yService, BxPlacement, BxOverlayPositionService, inheritOverlayTheme } from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { BX_OVERLAY_CONTEXT } from './overlay-context.token';\nimport { Subscription } from 'rxjs';\n\nexport type DropdownTransition = 'none' | 'fade' | 'emerge';\nexport type DropdownState = 'closed' | 'opening' | 'open' | 'closing';\n\n@Directive({\n selector: '[bxDropdown]',\n exportAs: 'bxDropdown',\n standalone: true,\n host: {\n '[attr.aria-expanded]': 'isOpen()',\n '[attr.aria-haspopup]': '\"menu\"',\n '[attr.aria-controls]': 'overlayId()'\n }\n})\nexport class DropdownDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly vcr = inject(ViewContainerRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private readonly _isOpen = signal(false);\n protected readonly overlayId = signal<string | null>(null);\n public readonly isOpen = this._isOpen.asReadonly();\n private readonly _state = signal<DropdownState>('closed');\n public readonly state = this._state.asReadonly();\n\n public readonly bxDropdown = input.required<TemplateRef<unknown>>();\n public readonly placement = input<BxPlacement>('bottom');\n public readonly bxTransition = input<DropdownTransition>('fade');\n\n private overlayRef: OverlayRef | null = null;\n private transition: ReturnType<typeof createGlassTransition> | null = null;\n private subscriptions = new Subscription();\n private revision = 0;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n ++this.revision;\n this.dispose();\n });\n\n effect(() => {\n if (this.a11y.isReducedMotion() && this.transition) {\n ++this.revision;\n this.transition.destroy();\n this.transition = null;\n if (this.isOpen()) this._state.set('open');\n else this.dispose();\n }\n });\n }\n\n @HostListener('click', ['$event'])\n public toggle(event?: MouseEvent): void {\n if (this.isDisabled()) return;\n event?.stopPropagation();\n if (this.isOpen()) this.close();\n else this.open();\n }\n\n @HostListener('keydown', ['$event'])\n public onTriggerKeydown(event: KeyboardEvent): void {\n if (this.bxTransition() === 'none' || this.isDisabled() || this.isEditing(event.target)) return;\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n event.preventDefault();\n event.stopPropagation();\n this.open();\n const items = this.menuItems();\n const item = event.key === 'ArrowUp' ? items[items.length - 1] : items[0];\n item?.focus({ preventScroll: true });\n }\n\n public open(): void {\n if (!this.isBrowser || this.isOpen() || this.isDisabled()) return;\n const revision = ++this.revision;\n this._isOpen.set(true);\n this._state.set('opening');\n\n if (!this.overlayRef) this.attachOverlay();\n const overlay = this.overlayRef;\n if (!overlay) return;\n overlay.overlayElement.inert = false;\n overlay.overlayElement.style.removeProperty('pointer-events');\n\n if (this.bxTransition() !== 'none' && !this.a11y.isReducedMotion()) {\n const transition = (this.transition ??= this.zone.runOutsideAngular(() => createGlassTransition(this.elementRef.nativeElement, overlay.overlayElement)));\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .then(() => {\n if (revision === this.revision && this.isOpen()) this.zone.run(() => this._state.set('open'));\n })\n .catch(() => {\n if (revision === this.revision && this.isOpen()) {\n this.transition?.destroy();\n this.transition = null;\n this._state.set('open');\n }\n });\n } else {\n this._state.set('open');\n }\n }\n\n public close(restoreFocus = false): void {\n if (!this.overlayRef || !this.isOpen()) return;\n const revision = ++this.revision;\n const overlay = this.overlayRef;\n this._isOpen.set(false);\n this._state.set('closing');\n\n const source = this.elementRef.nativeElement;\n if (restoreFocus || overlay.overlayElement.contains(source.ownerDocument.activeElement)) {\n source.focus({ preventScroll: true });\n }\n overlay.overlayElement.inert = true;\n overlay.overlayElement.style.pointerEvents = 'none';\n\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.revision && !this.isOpen()) this.zone.run(() => this.dispose());\n })\n .catch(() => {\n if (revision === this.revision && !this.isOpen()) this.dispose();\n });\n } else {\n this.dispose();\n }\n }\n\n @HostListener('document:click', ['$event'])\n public onDocumentClick(event: MouseEvent): void {\n if (!this.overlayRef?.hasAttached() || !this.isOpen()) return;\n const target = event.target as Node | null;\n if (!target || this.elementRef.nativeElement.contains(target)) return;\n const inside = this.overlayRef.overlayElement.contains(target);\n // Preserve existing menu item click-to-close behavior; embedded inputs can stay open.\n if (!inside || this.bxTransition() === 'none' || (target instanceof Element && target.closest('button, a, [role=\"menuitem\"]'))) {\n this.close();\n }\n }\n\n private attachOverlay(): void {\n const positionStrategy = this.positionBuilder.getElementStrategy(this.elementRef.nativeElement, this.placement(), 4);\n const overlay = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n usePopover:\n !!this.overlayContext?.useTopLayer ||\n !!this.elementRef.nativeElement.closest('dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]'),\n // A fading surface keeps its trigger reachable while it opens/closes.\n hasBackdrop: this.bxTransition() === 'none',\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n this.overlayRef = overlay;\n this.overlayId.set(overlay.overlayElement.id || null);\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(this.elementRef.nativeElement, overlay.overlayElement));\n this.disconnectLighting = inheritGlassLighting(overlay.overlayElement, this.elementRef.nativeElement);\n this.subscriptions = new Subscription();\n this.trackScroll(overlay, positionStrategy);\n this.subscriptions.add(overlay.backdropClick().subscribe(() => this.close()));\n this.subscriptions.add(\n overlay.outsidePointerEvents().subscribe((event) => {\n if (!this.elementRef.nativeElement.contains(event.target as Node)) this.close();\n })\n );\n this.subscriptions.add(\n overlay.keydownEvents().subscribe((event) => {\n if (event.key === 'Escape' && this.isOpen()) {\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n } else if (!event.defaultPrevented && this.bxTransition() !== 'none' && this.isOpen()) {\n this.navigateMenu(event);\n }\n })\n );\n this.subscriptions.add(\n positionStrategy.positionChanges.subscribe(() => {\n this.zone.runOutsideAngular(() => this.transition?.refresh());\n })\n );\n const view = overlay.attach(new TemplatePortal(this.bxDropdown(), this.vcr));\n view.detectChanges();\n overlay.updatePosition();\n }\n\n private trackScroll(overlay: OverlayRef, positionStrategy: FlexibleConnectedPositionStrategy): void {\n const source = this.elementRef.nativeElement;\n const view = source.ownerDocument.defaultView;\n if (!view) return;\n this.zone.runOutsideAngular(() => {\n const reposition = (event: Event) => {\n const target = event.target;\n if (overlay.hasAttached() && (target === view || (target instanceof Node && target.contains(source)))) positionStrategy.reapplyLastPosition();\n };\n view.addEventListener('scroll', reposition, { capture: true, passive: true });\n this.subscriptions.add(() => view.removeEventListener('scroll', reposition, true));\n });\n }\n\n private isDisabled(): boolean {\n const element = this.elementRef.nativeElement;\n return element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';\n }\n\n private menuItems(): HTMLElement[] {\n const pane = this.overlayRef?.overlayElement;\n if (!pane) return [];\n return Array.from(pane.querySelectorAll<HTMLElement>('button, a[href], [role=\"menuitem\"]')).filter((item) => {\n if (item.matches(':disabled, [disabled], [aria-disabled=\"true\"]') || item.closest('[aria-disabled=\"true\"]')) return false;\n if (item.closest('[hidden], [inert], [aria-hidden=\"true\"]')) return false;\n if (item.tabIndex < 0 && !item.hasAttribute('tabindex')) return false;\n const style = item.ownerDocument.defaultView?.getComputedStyle(item);\n return !!style && style.display !== 'none' && style.visibility !== 'hidden' && item.getClientRects().length > 0;\n });\n }\n\n private navigateMenu(event: KeyboardEvent): void {\n if (this.isEditing(event.target) || !(event.target instanceof Node) || !this.overlayRef?.overlayElement.contains(event.target)) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.menuItems();\n if (!items.length) return;\n const current = items.indexOf(this.elementRef.nativeElement.ownerDocument.activeElement as HTMLElement);\n let index: number;\n if (event.key === 'Home') index = 0;\n else if (event.key === 'End') index = items.length - 1;\n else if (event.key === 'ArrowDown') index = current < 0 ? 0 : (current + 1) % items.length;\n else index = current < 0 ? items.length - 1 : (current - 1 + items.length) % items.length;\n event.preventDefault();\n event.stopPropagation();\n items[index].focus({ preventScroll: true });\n }\n\n private isEditing(target: EventTarget | null): boolean {\n return target instanceof Element && !!target.closest('input, textarea, select, [contenteditable]:not([contenteditable=\"false\"]), [role=\"textbox\"]');\n }\n\n private dispose(): void {\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = null;\n this.subscriptions.unsubscribe();\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n this.overlayId.set(null);\n this._isOpen.set(false);\n this._state.set('closed');\n }\n}\n","import { booleanAttribute, DestroyRef, Directive, ElementRef, HostListener, inject, input, NgZone, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { BxA11yService, BxOverlayPositionService, inheritOverlayTheme } from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { BX_OVERLAY_CONTEXT } from './overlay-context.token';\nimport { Subscription } from 'rxjs';\n\ninterface TouchPress {\n pointerId: number;\n x: number;\n y: number;\n timer: number;\n opened: boolean;\n events: AbortController;\n}\n\n@Directive({ selector: '[bxContextMenu]' })\nexport class ContextMenuDirective {\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly vcr = inject(ViewContainerRef);\n public readonly bxContextMenu = input.required<TemplateRef<unknown>>();\n public readonly bxContextMenuLongPress = input(true, { transform: booleanAttribute });\n private readonly onPointerDown = (event: PointerEvent): void => {\n this.lastPointerType = event.pointerType;\n this.cancelTouchPress();\n if (event.isPrimary) this.clearTouchGuard();\n if (event.pointerType !== 'touch' || !event.isPrimary || event.button !== 0 || !this.bxContextMenuLongPress() || this.hasNativeTouchAction(event)) return;\n const source = this.elementRef.nativeElement;\n const doc = source.ownerDocument;\n const win = doc.defaultView;\n if (!win || this.hasTextSelection()) return;\n const press: TouchPress = { pointerId: event.pointerId, x: event.clientX, y: event.clientY, timer: 0, opened: false, events: new AbortController() };\n this.touchPress = press;\n const options = { capture: true, passive: true, signal: press.events.signal };\n const finish = () => this.cancelTouchPress();\n doc.addEventListener(\n 'pointermove',\n (move) => {\n if (move.pointerId === press.pointerId && !press.opened && Math.hypot(move.clientX - press.x, move.clientY - press.y) > 10) finish();\n },\n options\n );\n for (const type of ['pointerup', 'pointercancel'] as const) {\n doc.addEventListener(\n type,\n (end) => {\n if (end.pointerId === press.pointerId) finish();\n },\n options\n );\n }\n doc.addEventListener(\n 'pointerdown',\n (next) => {\n if (next.pointerId !== press.pointerId) finish();\n },\n options\n );\n doc.addEventListener('scroll', finish, options);\n doc.addEventListener(\n 'visibilitychange',\n () => {\n if (doc.hidden) finish();\n },\n options\n );\n win.addEventListener('blur', finish, { signal: press.events.signal });\n press.timer = win.setTimeout(() => this.zone.run(() => this.openTouchMenu(press)), 500);\n };\n\n private overlayRef: OverlayRef | null = null;\n private transition?: ReturnType<typeof createGlassTransition>;\n private point?: HTMLElement;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n private subscriptions = new Subscription();\n private revision = 0;\n private touchPress?: TouchPress;\n private touchGuard?: AbortController;\n private touchGuardTimer?: number;\n private lastPointerType = '';\n\n constructor() {\n const source = this.elementRef.nativeElement;\n if (source.ownerDocument.defaultView) {\n this.zone.runOutsideAngular(() => source.addEventListener('pointerdown', this.onPointerDown, { passive: true }));\n }\n inject(DestroyRef).onDestroy(() => {\n ++this.revision;\n source.removeEventListener('pointerdown', this.onPointerDown);\n this.cancelTouchPress();\n this.clearTouchGuard();\n this.dispose();\n });\n }\n\n @HostListener('contextmenu', ['$event'])\n public open(event: MouseEvent): void {\n if (event.type === 'contextmenu' && this.lastPointerType === 'touch') {\n const press = this.touchPress;\n if (!press) return;\n if (!this.bxContextMenuLongPress() || this.hasNativeTouchAction(event) || this.hasTextSelection()) {\n this.cancelTouchPress();\n return;\n }\n event.preventDefault();\n this.openTouchMenu(press);\n return;\n }\n event.preventDefault();\n this.cancelTouchPress();\n this.clearTouchGuard();\n this.openAt(event.clientX, event.clientY);\n }\n\n public close(restoreFocus = false): void {\n if (!this.overlayRef) return;\n const revision = ++this.revision;\n if (restoreFocus || this.overlayRef.overlayElement.contains(this.elementRef.nativeElement.ownerDocument.activeElement)) {\n this.elementRef.nativeElement.focus({ preventScroll: true });\n }\n this.overlayRef.overlayElement.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.revision) this.dispose();\n })\n .catch(() => {\n if (revision === this.revision) this.dispose();\n });\n } else this.dispose();\n }\n\n @HostListener('keydown', ['$event'])\n protected onKey(event: KeyboardEvent): void {\n if (event.key !== 'ContextMenu' && !(event.shiftKey && event.key === 'F10')) return;\n event.preventDefault();\n this.lastPointerType = '';\n this.cancelTouchPress();\n this.clearTouchGuard();\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n this.openAt(rect.left + Math.min(24, rect.width / 2), rect.bottom);\n this.items()[0]?.focus();\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement | null;\n if (target && this.overlayRef?.overlayElement.contains(target) && target.closest('button, a, [role=\"menuitem\"]')) this.close();\n }\n\n private hasNativeTouchAction(event: Event): boolean {\n const source = this.elementRef.nativeElement;\n for (const node of event.composedPath()) {\n if (node instanceof HTMLElement) {\n if (node.isContentEditable || node.matches('input, textarea, select, :disabled, [aria-disabled=\"true\"], [inert]')) return true;\n if (node === source) break;\n }\n }\n return !!source.closest(':disabled, [aria-disabled=\"true\"], [inert]');\n }\n\n private hasTextSelection(): boolean {\n const source = this.elementRef.nativeElement;\n const selection = source.ownerDocument.getSelection();\n return !!selection && !selection.isCollapsed && (source.contains(selection.anchorNode) || source.contains(selection.focusNode));\n }\n\n private openTouchMenu(press: TouchPress): void {\n if (this.touchPress !== press || press.opened) return;\n const source = this.elementRef.nativeElement;\n if (\n !this.bxContextMenuLongPress() ||\n !source.isConnected ||\n source.isContentEditable ||\n source.closest(':disabled, [aria-disabled=\"true\"], [inert]') ||\n this.hasTextSelection()\n ) {\n this.cancelTouchPress();\n return;\n }\n press.opened = true;\n this.elementRef.nativeElement.ownerDocument.defaultView?.clearTimeout(press.timer);\n this.guardTouchRelease();\n this.openAt(press.x, press.y + 12);\n }\n\n private cancelTouchPress(): void {\n const press = this.touchPress;\n if (!press) return;\n this.touchPress = undefined;\n const win = this.elementRef.nativeElement.ownerDocument.defaultView;\n win?.clearTimeout(press.timer);\n press.events.abort();\n if (press.opened && win) this.touchGuardTimer = win.setTimeout(() => this.clearTouchGuard(), 800);\n }\n\n private guardTouchRelease(): void {\n this.clearTouchGuard();\n const doc = this.elementRef.nativeElement.ownerDocument;\n const guard = new AbortController();\n this.touchGuard = guard;\n const options = { capture: true, signal: guard.signal };\n // Consume only the hold's compatibility click; a fresh press can select or dismiss normally.\n doc.addEventListener(\n 'click',\n (event) => {\n if (event.detail === 0) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n this.clearTouchGuard();\n },\n options\n );\n doc.addEventListener(\n 'contextmenu',\n (event) => {\n event.preventDefault();\n event.stopImmediatePropagation();\n },\n options\n );\n doc.addEventListener(\n 'pointerdown',\n (event) => {\n if (event.isPrimary) this.clearTouchGuard();\n },\n { ...options, passive: true }\n );\n doc.addEventListener('keydown', () => this.clearTouchGuard(), options);\n }\n\n private clearTouchGuard(): void {\n this.touchGuard?.abort();\n this.touchGuard = undefined;\n this.elementRef.nativeElement.ownerDocument.defaultView?.clearTimeout(this.touchGuardTimer);\n this.touchGuardTimer = undefined;\n }\n\n private openAt(x: number, y: number): void {\n this.dispose();\n ++this.revision;\n const source = this.elementRef.nativeElement;\n this.overlayRef = this.overlay.create({\n positionStrategy: this.positionBuilder.getCoordinateStrategy(x, y),\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n usePopover: !!this.overlayContext?.useTopLayer || !!source.closest('dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]'),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n this.subscriptions = new Subscription();\n const win = source.ownerDocument.defaultView;\n if (win) {\n this.zone.runOutsideAngular(() => {\n const closeOnScroll = (event: Event) => {\n const target = event.target;\n if (this.overlayRef?.overlayElement.inert) return;\n if (target === win || (target instanceof Node && target.contains(source))) this.zone.run(() => this.close());\n };\n win.addEventListener('scroll', closeOnScroll, { capture: true, passive: true });\n this.subscriptions.add(() => win.removeEventListener('scroll', closeOnScroll, true));\n });\n }\n this.subscriptions.add(this.overlayRef.backdropClick().subscribe(() => this.close()));\n this.subscriptions.add(this.overlayRef.detachments().subscribe(() => this.dispose()));\n this.subscriptions.add(this.overlayRef.keydownEvents().subscribe((event) => this.onMenuKey(event)));\n const pane = this.overlayRef.overlayElement;\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(source, pane));\n this.disconnectLighting = inheritGlassLighting(pane, source);\n const view = this.overlayRef.attach(new TemplatePortal(this.bxContextMenu(), this.vcr));\n view.detectChanges();\n this.overlayRef.updatePosition();\n if (!this.a11y.isReducedMotion()) {\n const point = source.ownerDocument.createElement('span');\n point.setAttribute('aria-hidden', 'true');\n Object.assign(point.style, { position: 'fixed', left: `${x}px`, top: `${y}px`, width: '1px', height: '1px', pointerEvents: 'none' });\n source.ownerDocument.body.append(point);\n this.point = point;\n const transition = this.zone.runOutsideAngular(() => createGlassTransition(point, pane));\n this.transition = transition;\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .catch(() => {\n this.transition?.destroy();\n this.transition = undefined;\n });\n }\n }\n\n private items(): HTMLElement[] {\n return Array.from(this.overlayRef?.overlayElement.querySelectorAll<HTMLElement>('button:not(:disabled), a[href], [role=\"menuitem\"]') ?? []).filter(\n (item) => !item.matches('[disabled], [aria-disabled=\"true\"]') && !item.closest('[hidden], [inert]')\n );\n }\n\n private onMenuKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n return;\n }\n if ((event.target as HTMLElement)?.closest('input,textarea,[contenteditable=\"true\"]')) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.items();\n if (!items.length) return;\n event.preventDefault();\n const current = items.indexOf(this.elementRef.nativeElement.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 items[next].focus();\n }\n\n private dispose(): void {\n this.subscriptions.unsubscribe();\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = undefined;\n this.point?.remove();\n this.point = undefined;\n const overlay = this.overlayRef;\n this.overlayRef = null;\n overlay?.dispose();\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n }\n}\n","import { Directive, forwardRef, input } from '@angular/core';\nimport { BX_OVERLAY_CONTEXT, IBxOverlayContext } from './overlay-context.token';\n\n@Directive({\n selector: '[bxOverlayContext]',\n standalone: true,\n providers: [{ provide: BX_OVERLAY_CONTEXT, useExisting: forwardRef(() => BxOverlayContextDirective) }]\n})\nexport class BxOverlayContextDirective implements IBxOverlayContext {\n public readonly bxOverlayContext = input<IBxOverlayContext>({});\n\n public get useTopLayer(): boolean | undefined {\n return this.bxOverlayContext().useTopLayer;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filip.mazev-blocks-primitives.mjs","names":[],"sources":["../../../projects/blocks/primitives/components/tooltip/tooltip.ts","../../../projects/blocks/primitives/components/tooltip/tooltip.html","../../../projects/blocks/primitives/components/menu/menu.ts","../../../projects/blocks/primitives/components/menu/menu.html","../../../projects/blocks/primitives/components/menu-item/menu-item.ts","../../../projects/blocks/primitives/components/menu-item/menu-item.html","../../../projects/blocks/primitives/constants/tabs.constants.ts","../../../projects/blocks/primitives/helpers/tabs.helpers.ts","../../../projects/blocks/primitives/directives/tab-content.directive.ts","../../../projects/blocks/primitives/components/tab/tab.ts","../../../projects/blocks/primitives/components/tab/tab.html","../../../projects/blocks/primitives/components/tabs/tabs.ts","../../../projects/blocks/primitives/components/tabs/tabs.html","../../../projects/blocks/primitives/directives/overlay-context.token.ts","../../../projects/blocks/primitives/directives/context-menu.directive.ts","../../../projects/blocks/primitives/directives/tooltip.directive.ts","../../../projects/blocks/primitives/directives/dropdown.directive.ts","../../../projects/blocks/primitives/directives/overlay-context.directive.ts"],"sourcesContent":["import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, input, ChangeDetectionStrategy } from '@angular/core';\nimport { BX_I18N, BxA11yService, isTextWithKey, ResolvableText } from '@filip.mazev/blocks/core';\n\n@Component({\n selector: 'bx-tooltip',\n imports: [BxSurfaceDirective],\n templateUrl: './tooltip.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './tooltip.scss'\n})\nexport class Tooltip {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n\n protected readonly resolvedText = computed(() => {\n this.i18n?.version?.();\n\n const textData = this.text();\n if (!textData) return undefined;\n\n if (isTextWithKey(textData)) {\n return this.i18n?.translate(textData.key) ?? textData.key;\n }\n\n return textData;\n });\n\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n public readonly text = input.required<ResolvableText>();\n}\n","<div class=\"bx-tooltip-surface\" bxSurface [class.bx-tooltip-animated]=\"isAnimated()\">\n @if (resolvedText()) {\n {{ resolvedText() }}\n }\n</div>","import { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { BxA11yService } from '@filip.mazev/blocks/core';\n\n@Component({\n selector: 'bx-menu',\n templateUrl: './menu.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './menu.scss'\n})\nexport class Menu {\n private readonly a11y = inject(BxA11yService);\n\n public readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n}\n","<div data-bx-surface=\"solid\" role=\"menu\" class=\"bx-menu-wrapper\" [class.bx-menu-animated]=\"isAnimated()\">\n <ng-content></ng-content>\n</div>\n","import { BX_I18N, BxA11yService, BxShortcutService, isTextWithKey, ResolvableShortcut, ResolvableText } from '@filip.mazev/blocks/core';\nimport { Component, computed, inject, input, output, ChangeDetectionStrategy } from '@angular/core';\nimport { Icon, IconName } from '@filip.mazev/blocks/icons';\nimport { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\n\n@Component({\n selector: 'bx-menu-item',\n imports: [Icon, BxSurfaceDirective],\n templateUrl: './menu-item.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './menu-item.scss'\n})\nexport class MenuItem {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n private readonly bxShortcutService = inject(BxShortcutService);\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n\n const label = this.label();\n if (!label) return undefined;\n\n if (isTextWithKey(label)) {\n return this.i18n?.translate(label.key) ?? label.key;\n }\n return label;\n });\n\n protected readonly resolvedShortcut = computed(() => {\n return this.bxShortcutService.resolve(this.shortcut());\n });\n\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n\n public readonly icon = input<IconName | undefined>(undefined);\n public readonly endIcon = input<IconName | undefined>(undefined);\n public readonly label = input<ResolvableText | undefined>(undefined);\n public readonly wrapLabel = input(false);\n public readonly disabled = input(false);\n public readonly danger = input(false);\n\n public readonly shortcut = input<ResolvableShortcut | undefined>(undefined);\n\n public readonly action = output<MouseEvent>();\n\n protected onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.action.emit(event);\n }\n}\n","<button bxSurface [bxSurfaceEmission]=\"danger() ? 'var(--bx-text-danger)' : 'var(--bx-primary)'\" type=\"button\" role=\"menuitem\" [disabled]=\"disabled()\" class=\"bx-menu-item-btn\" [class.is-disabled]=\"disabled()\" [class.is-danger]=\"danger()\"\n [class.bx-menu-item-animated]=\"isAnimated()\" (click)=\"onClick($event)\">\n\n @if (icon()) {\n <bx-icon class=\"bx-icon-pos-start\" [name]=\"icon()!\" size=\"20\" />\n }\n\n <span class=\"bx-menu-item-content\" [class.bx-menu-item-content-wrapped]=\"wrapLabel()\">\n @if (resolvedLabel()) {\n {{ resolvedLabel() }}\n } @else {\n <ng-content></ng-content>\n }\n </span>\n\n @if (resolvedShortcut()) {\n <span class=\"bx-menu-item-shortcut\">\n @for (key of resolvedShortcut(); track $index) {\n <kbd>{{ key }}</kbd>\n }\n </span>\n }\n\n @if (endIcon()) {\n <bx-icon class=\"bx-icon-pos-end\" [name]=\"endIcon()!\" size=\"20\" />\n }\n</button>\n","import { Color } from '@filip.mazev/blocks/core';\nimport { TabColor, TabsVariant } from '../types/tabs.types';\n\nexport const DEFAULT_TABS_VARIANT: TabsVariant = 'segmented';\nexport const DEFAULT_TABS_LABEL = 'Tabs';\nexport const TAB_NAVIGATION_KEYS = new Set(['ArrowLeft', 'ArrowRight', 'Home', 'End']);\nexport const DEFAULT_TAB_COLOR: TabColor = 'primary';\nexport const TAB_EMISSION_OPACITY = 0.15;\nexport const TAB_COLOR_TOKENS: Readonly<Record<TabColor, Color>> = {\n primary: 'primary',\n accent: 'accent',\n success: 'text-success',\n danger: 'text-danger',\n info: 'text-info',\n warn: 'text-warn',\n grayscale: 'text-primary'\n};\n","import { Color, IBxI18nAdapter, isTextWithKey, ResolvableText, resolveTokenToCssVar } from '@filip.mazev/blocks/core';\n\nexport function resolveTabText(text: ResolvableText, adapter: IBxI18nAdapter | null): string {\n adapter?.version?.();\n return isTextWithKey(text) ? (adapter?.translate(text.key) ?? text.key) : text;\n}\n\nexport function resolveTabColor(color: Color | undefined): string | null {\n return color ? resolveTokenToCssVar(color) : null;\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/** Instantiate panel content only while its tab is selected. */\n@Directive({ selector: 'ng-template[bxTabContent]', standalone: true })\nexport class TabContentDirective {\n public readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, contentChild, inject, input, TemplateRef, viewChild } from '@angular/core';\nimport { BX_I18N, Color, ResolvableText, uuidv4 } from '@filip.mazev/blocks/core';\nimport { IconName } from '@filip.mazev/blocks/icons';\nimport { DEFAULT_TAB_COLOR, TAB_COLOR_TOKENS, TAB_EMISSION_OPACITY } from '../../constants/tabs.constants';\nimport { TabContentDirective } from '../../directives/tab-content.directive';\nimport { resolveTabColor, resolveTabText } from '../../helpers/tabs.helpers';\nimport { TabColor } from '../../types/tabs.types';\n\n@Component({\n selector: 'bx-tab',\n standalone: true,\n templateUrl: './tab.html',\n styleUrl: './tab.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class Tab {\n private readonly id = uuidv4();\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly projectedContent = viewChild<TemplateRef<unknown>>('content');\n private readonly lazyContent = contentChild(TabContentDirective);\n\n public readonly label = input.required<ResolvableText>();\n public readonly value = input(this.id);\n public readonly disabled = input(false, { transform: booleanAttribute });\n public readonly color = input<TabColor>(DEFAULT_TAB_COLOR);\n public readonly textColor = input<Color>();\n public readonly highlightColor = input<Color>();\n public readonly contentColor = input<Color>();\n public readonly icon = input<IconName>();\n public readonly endIcon = input<IconName>();\n public readonly triggerId = `bx-tab-${this.id}`;\n public readonly panelId = `bx-tab-panel-${this.id}`;\n public readonly resolvedLabel = computed(() => resolveTabText(this.label(), this.i18n));\n public readonly resolvedHighlight = computed(() => resolveTabColor(this.highlightColor() ?? TAB_COLOR_TOKENS[this.color()]));\n public readonly resolvedEmission = computed(() => `color-mix(in srgb, ${this.resolvedHighlight()} ${TAB_EMISSION_OPACITY * 100}%, transparent)`);\n public readonly resolvedTextColor = computed(() => resolveTabColor(this.textColor()));\n public readonly resolvedSelectedText = computed(\n () =>\n this.resolvedTextColor() ??\n resolveTabColor(this.color() === 'primary' ? 'text-brand' : this.color() === 'accent' ? 'text-accent' : TAB_COLOR_TOKENS[this.color()])\n );\n\n public readonly resolvedContentColor = computed(() => resolveTabColor(this.contentColor()));\n public readonly template = computed(() => this.lazyContent()?.template ?? this.projectedContent());\n}\n","<ng-template #content><ng-content></ng-content></ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterRenderEffect,\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n ElementRef,\n inject,\n input,\n model,\n signal,\n viewChildren\n} from '@angular/core';\nimport { BX_I18N, BxA11yService, ResolvableText } from '@filip.mazev/blocks/core';\nimport { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Icon } from '@filip.mazev/blocks/icons';\nimport { DEFAULT_TABS_LABEL, DEFAULT_TABS_VARIANT, TAB_NAVIGATION_KEYS } from '../../constants/tabs.constants';\nimport { resolveTabText } from '../../helpers/tabs.helpers';\nimport { TabsVariant } from '../../types/tabs.types';\nimport { Tab } from '../tab/tab';\n\n@Component({\n selector: 'bx-tabs',\n standalone: true,\n imports: [NgTemplateOutlet, BxSurfaceDirective, Icon],\n templateUrl: './tabs.html',\n styleUrl: './tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.bx-tabs-underline]': 'variant() === \"underline\"',\n '[class.bx-tabs-animated]': 'hasRendered() && !a11y.isReducedMotion()'\n }\n})\nexport class Tabs {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly triggers = viewChildren<ElementRef<HTMLButtonElement>>('trigger');\n protected readonly a11y = inject(BxA11yService);\n protected readonly hasRendered = signal(false);\n protected readonly tabs = contentChildren(Tab);\n protected readonly activeTab = computed(() => {\n const enabled = this.tabs().filter((tab) => !tab.disabled());\n return enabled.find((tab) => tab.value() === this.selectedValue()) ?? enabled[0];\n });\n\n protected readonly resolvedLabel = computed(() => resolveTabText(this.ariaLabel(), this.i18n));\n\n public readonly variant = input<TabsVariant>(DEFAULT_TABS_VARIANT);\n public readonly ariaLabel = input<ResolvableText>(DEFAULT_TABS_LABEL);\n public readonly selectedValue = model<string | null>(null);\n\n constructor() {\n afterNextRender(() => this.hasRendered.set(true));\n afterRenderEffect(() => {\n const value = this.activeTab()?.value() ?? null;\n if (this.selectedValue() !== value) this.selectedValue.set(value);\n });\n }\n\n public select(value: string): void {\n const tab = this.tabs().find((item) => item.value() === value && !item.disabled());\n if (tab) this.selectedValue.set(value);\n }\n\n protected onTabKey(event: KeyboardEvent, tab: Tab): void {\n if (event.altKey || event.ctrlKey || event.metaKey || !TAB_NAVIGATION_KEYS.has(event.key)) return;\n const enabled = this.tabs().filter((item) => !item.disabled());\n const current = enabled.indexOf(tab);\n if (current < 0) return;\n event.preventDefault();\n event.stopPropagation();\n const button = event.currentTarget as HTMLButtonElement;\n const rtl = button.ownerDocument.defaultView?.getComputedStyle(button).direction === 'rtl';\n const direction = (event.key === 'ArrowRight' ? 1 : -1) * (rtl ? -1 : 1);\n const index = event.key === 'Home' ? 0 : event.key === 'End' ? enabled.length - 1 : (current + direction + enabled.length) % enabled.length;\n const next = enabled[index];\n this.select(next.value());\n const trigger = this.triggers().find((item) => item.nativeElement.id === next.triggerId)?.nativeElement;\n trigger?.focus({ preventScroll: true });\n trigger?.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n}\n","<ng-content select=\"bx-tab\"></ng-content>\n\n<div bxSurface data-bx-surface=\"glass\" class=\"bx-tab-header\" role=\"tablist\" [attr.aria-label]=\"resolvedLabel()\" aria-orientation=\"horizontal\">\n<div class=\"bx-tab-list\">\n @for (tab of tabs(); track tab) {\n <button #trigger bxSurface data-bx-surface=\"glass\" class=\"bx-tab-trigger\" type=\"button\" role=\"tab\"\n [bxSurfaceEmission]=\"tab.resolvedEmission()\"\n [style.--bx-tab-highlight]=\"tab.resolvedHighlight()\" [style.--bx-tab-text]=\"tab.resolvedTextColor()\"\n [style.--bx-tab-selected-text]=\"tab.resolvedSelectedText()\"\n [id]=\"tab.triggerId\" [attr.aria-controls]=\"tab.panelId\" [attr.aria-selected]=\"tab === activeTab()\"\n [attr.tabindex]=\"tab === activeTab() ? 0 : -1\" [disabled]=\"tab.disabled()\"\n [class.is-selected]=\"tab === activeTab()\" (click)=\"select(tab.value())\" (keydown)=\"onTabKey($event, tab)\">\n @if (tab.icon()) { <bx-icon [name]=\"tab.icon()!\" size=\"16\" /> }\n <span>{{ tab.resolvedLabel() }}</span>\n @if (tab.endIcon()) { <bx-icon [name]=\"tab.endIcon()!\" size=\"16\" /> }\n </button>\n }\n</div>\n</div>\n\n<div class=\"bx-tab-panels\">\n @for (tab of tabs(); track tab) {\n <div class=\"bx-tab-panel\" role=\"tabpanel\" tabindex=\"0\" [id]=\"tab.panelId\"\n [style.color]=\"tab.resolvedContentColor()\"\n [attr.aria-labelledby]=\"tab.triggerId\" [hidden]=\"tab !== activeTab()\">\n @if (tab === activeTab()) {\n <ng-container [ngTemplateOutlet]=\"tab.template()\"></ng-container>\n }\n </div>\n }\n</div>\n","import { InjectionToken } from '@angular/core';\n\nexport interface IBxOverlayContext {\n useTopLayer?: boolean;\n}\n\nexport const BX_OVERLAY_CONTEXT = new InjectionToken<IBxOverlayContext>('BX_OVERLAY_CONTEXT');\n","import { booleanAttribute, DestroyRef, Directive, ElementRef, HostListener, inject, input, NgZone, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { BxA11yService, BxOverlayPositionService, inheritOverlayTheme } from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { BX_OVERLAY_CONTEXT } from './overlay-context.token';\nimport { Subscription } from 'rxjs';\n\ninterface TouchPress {\n pointerId: number;\n x: number;\n y: number;\n timer: number;\n opened: boolean;\n events: AbortController;\n}\n\n@Directive({ selector: '[bxContextMenu]' })\nexport class ContextMenuDirective {\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly vcr = inject(ViewContainerRef);\n public readonly bxContextMenu = input.required<TemplateRef<unknown>>();\n public readonly bxContextMenuLongPress = input(true, { transform: booleanAttribute });\n private readonly onPointerDown = (event: PointerEvent): void => {\n this.lastPointerType = event.pointerType;\n this.cancelTouchPress();\n if (event.isPrimary) this.clearTouchGuard();\n if (event.pointerType !== 'touch' || !event.isPrimary || event.button !== 0 || !this.bxContextMenuLongPress() || this.hasNativeTouchAction(event)) return;\n const source = this.elementRef.nativeElement;\n const doc = source.ownerDocument;\n const win = doc.defaultView;\n if (!win || this.hasTextSelection()) return;\n const press: TouchPress = { pointerId: event.pointerId, x: event.clientX, y: event.clientY, timer: 0, opened: false, events: new AbortController() };\n this.touchPress = press;\n const options = { capture: true, passive: true, signal: press.events.signal };\n const finish = () => this.cancelTouchPress();\n doc.addEventListener(\n 'pointermove',\n (move) => {\n if (move.pointerId === press.pointerId && !press.opened && Math.hypot(move.clientX - press.x, move.clientY - press.y) > 10) finish();\n },\n options\n );\n for (const type of ['pointerup', 'pointercancel'] as const) {\n doc.addEventListener(\n type,\n (end) => {\n if (end.pointerId === press.pointerId) finish();\n },\n options\n );\n }\n doc.addEventListener(\n 'pointerdown',\n (next) => {\n if (next.pointerId !== press.pointerId) finish();\n },\n options\n );\n doc.addEventListener('scroll', finish, options);\n doc.addEventListener(\n 'visibilitychange',\n () => {\n if (doc.hidden) finish();\n },\n options\n );\n win.addEventListener('blur', finish, { signal: press.events.signal });\n press.timer = win.setTimeout(() => this.zone.run(() => this.openTouchMenu(press)), 500);\n };\n\n private overlayRef: OverlayRef | null = null;\n private transition?: ReturnType<typeof createGlassTransition>;\n private point?: HTMLElement;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n private subscriptions = new Subscription();\n private revision = 0;\n private touchPress?: TouchPress;\n private touchGuard?: AbortController;\n private touchGuardTimer?: number;\n private lastPointerType = '';\n\n constructor() {\n const source = this.elementRef.nativeElement;\n if (source.ownerDocument.defaultView) {\n this.zone.runOutsideAngular(() => source.addEventListener('pointerdown', this.onPointerDown, { passive: true }));\n }\n inject(DestroyRef).onDestroy(() => {\n ++this.revision;\n source.removeEventListener('pointerdown', this.onPointerDown);\n this.cancelTouchPress();\n this.clearTouchGuard();\n this.dispose();\n });\n }\n\n @HostListener('contextmenu', ['$event'])\n public open(event: MouseEvent): void {\n if (event.type === 'contextmenu' && this.lastPointerType === 'touch') {\n const press = this.touchPress;\n if (!press) return;\n if (!this.bxContextMenuLongPress() || this.hasNativeTouchAction(event) || this.hasTextSelection()) {\n this.cancelTouchPress();\n return;\n }\n event.preventDefault();\n this.openTouchMenu(press);\n return;\n }\n event.preventDefault();\n this.cancelTouchPress();\n this.clearTouchGuard();\n this.openAt(event.clientX, event.clientY);\n }\n\n public close(restoreFocus = false): void {\n if (!this.overlayRef) return;\n const revision = ++this.revision;\n if (restoreFocus || this.overlayRef.overlayElement.contains(this.elementRef.nativeElement.ownerDocument.activeElement)) {\n this.elementRef.nativeElement.focus({ preventScroll: true });\n }\n this.overlayRef.overlayElement.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.revision) this.dispose();\n })\n .catch(() => {\n if (revision === this.revision) this.dispose();\n });\n } else this.dispose();\n }\n\n @HostListener('keydown', ['$event'])\n protected onKey(event: KeyboardEvent): void {\n if (event.key !== 'ContextMenu' && !(event.shiftKey && event.key === 'F10')) return;\n event.preventDefault();\n this.lastPointerType = '';\n this.cancelTouchPress();\n this.clearTouchGuard();\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n this.openAt(rect.left + Math.min(24, rect.width / 2), rect.bottom);\n this.items()[0]?.focus();\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement | null;\n if (target && this.overlayRef?.overlayElement.contains(target) && target.closest('button, a, [role=\"menuitem\"]')) this.close();\n }\n\n private hasNativeTouchAction(event: Event): boolean {\n const source = this.elementRef.nativeElement;\n for (const node of event.composedPath()) {\n if (node instanceof HTMLElement) {\n if (node.isContentEditable || node.matches('input, textarea, select, :disabled, [aria-disabled=\"true\"], [inert]')) return true;\n if (node === source) break;\n }\n }\n return !!source.closest(':disabled, [aria-disabled=\"true\"], [inert]');\n }\n\n private hasTextSelection(): boolean {\n const source = this.elementRef.nativeElement;\n const selection = source.ownerDocument.getSelection();\n return !!selection && !selection.isCollapsed && (source.contains(selection.anchorNode) || source.contains(selection.focusNode));\n }\n\n private openTouchMenu(press: TouchPress): void {\n if (this.touchPress !== press || press.opened) return;\n const source = this.elementRef.nativeElement;\n if (\n !this.bxContextMenuLongPress() ||\n !source.isConnected ||\n source.isContentEditable ||\n source.closest(':disabled, [aria-disabled=\"true\"], [inert]') ||\n this.hasTextSelection()\n ) {\n this.cancelTouchPress();\n return;\n }\n press.opened = true;\n this.elementRef.nativeElement.ownerDocument.defaultView?.clearTimeout(press.timer);\n this.guardTouchRelease();\n this.openAt(press.x, press.y + 12);\n }\n\n private cancelTouchPress(): void {\n const press = this.touchPress;\n if (!press) return;\n this.touchPress = undefined;\n const win = this.elementRef.nativeElement.ownerDocument.defaultView;\n win?.clearTimeout(press.timer);\n press.events.abort();\n if (press.opened && win) this.touchGuardTimer = win.setTimeout(() => this.clearTouchGuard(), 800);\n }\n\n private guardTouchRelease(): void {\n this.clearTouchGuard();\n const doc = this.elementRef.nativeElement.ownerDocument;\n const guard = new AbortController();\n this.touchGuard = guard;\n const options = { capture: true, signal: guard.signal };\n // Consume only the hold's compatibility click; a fresh press can select or dismiss normally.\n doc.addEventListener(\n 'click',\n (event) => {\n if (event.detail === 0) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n this.clearTouchGuard();\n },\n options\n );\n doc.addEventListener(\n 'contextmenu',\n (event) => {\n event.preventDefault();\n event.stopImmediatePropagation();\n },\n options\n );\n doc.addEventListener(\n 'pointerdown',\n (event) => {\n if (event.isPrimary) this.clearTouchGuard();\n },\n { ...options, passive: true }\n );\n doc.addEventListener('keydown', () => this.clearTouchGuard(), options);\n }\n\n private clearTouchGuard(): void {\n this.touchGuard?.abort();\n this.touchGuard = undefined;\n this.elementRef.nativeElement.ownerDocument.defaultView?.clearTimeout(this.touchGuardTimer);\n this.touchGuardTimer = undefined;\n }\n\n private openAt(x: number, y: number): void {\n this.dispose();\n ++this.revision;\n const source = this.elementRef.nativeElement;\n this.overlayRef = this.overlay.create({\n positionStrategy: this.positionBuilder.getCoordinateStrategy(x, y),\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n usePopover: !!this.overlayContext?.useTopLayer || !!source.closest('dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]'),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n this.subscriptions = new Subscription();\n const win = source.ownerDocument.defaultView;\n if (win) {\n this.zone.runOutsideAngular(() => {\n const closeOnScroll = (event: Event) => {\n const target = event.target;\n if (this.overlayRef?.overlayElement.inert) return;\n if (target === win || (target instanceof Node && target.contains(source))) this.zone.run(() => this.close());\n };\n win.addEventListener('scroll', closeOnScroll, { capture: true, passive: true });\n this.subscriptions.add(() => win.removeEventListener('scroll', closeOnScroll, true));\n });\n }\n this.subscriptions.add(this.overlayRef.backdropClick().subscribe(() => this.close()));\n this.subscriptions.add(this.overlayRef.detachments().subscribe(() => this.dispose()));\n this.subscriptions.add(this.overlayRef.keydownEvents().subscribe((event) => this.onMenuKey(event)));\n const pane = this.overlayRef.overlayElement;\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(source, pane));\n this.disconnectLighting = inheritGlassLighting(pane, source);\n const view = this.overlayRef.attach(new TemplatePortal(this.bxContextMenu(), this.vcr));\n view.detectChanges();\n this.overlayRef.updatePosition();\n if (!this.a11y.isReducedMotion()) {\n const point = source.ownerDocument.createElement('span');\n point.setAttribute('aria-hidden', 'true');\n Object.assign(point.style, { position: 'fixed', left: `${x}px`, top: `${y}px`, width: '1px', height: '1px', pointerEvents: 'none' });\n source.ownerDocument.body.append(point);\n this.point = point;\n const transition = this.zone.runOutsideAngular(() => createGlassTransition(point, pane));\n this.transition = transition;\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .catch(() => {\n this.transition?.destroy();\n this.transition = undefined;\n });\n }\n }\n\n private items(): HTMLElement[] {\n return Array.from(this.overlayRef?.overlayElement.querySelectorAll<HTMLElement>('button:not(:disabled), a[href], [role=\"menuitem\"]') ?? []).filter(\n (item) => !item.matches('[disabled], [aria-disabled=\"true\"]') && !item.closest('[hidden], [inert]')\n );\n }\n\n private onMenuKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n return;\n }\n if ((event.target as HTMLElement)?.closest('input,textarea,[contenteditable=\"true\"]')) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.items();\n if (!items.length) return;\n event.preventDefault();\n const current = items.indexOf(this.elementRef.nativeElement.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 items[next].focus();\n }\n\n private dispose(): void {\n this.subscriptions.unsubscribe();\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = undefined;\n this.point?.remove();\n this.point = undefined;\n const overlay = this.overlayRef;\n this.overlayRef = null;\n overlay?.dispose();\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n }\n}\n","import { DestroyRef, Directive, effect, ElementRef, HostListener, inject, input, NgZone } from '@angular/core';\nimport { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n BX_I18N,\n BxA11yService,\n BxPlacement,\n BxOverlayPositionService,\n inheritOverlayTheme,\n isTextWithKey,\n ResolvableText,\n uuidv4\n} from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { Tooltip } from '../components/tooltip/tooltip';\nimport { ContextMenuDirective } from './context-menu.directive';\n\n@Directive({ selector: '[bxTooltip]' })\nexport class TooltipDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly describer = inject(AriaDescriber);\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly contextMenu = inject(ContextMenuDirective, { optional: true });\n private readonly id = `bx-tooltip-${uuidv4()}`;\n public readonly bxTooltip = input.required<ResolvableText>();\n public readonly placement = input<BxPlacement>('bottom');\n public readonly bxTooltipTouch = input<'none' | 'longpress' | 'tap'>('none');\n private overlayRef: OverlayRef | null = null;\n private transition?: ReturnType<typeof createGlassTransition>;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n private positionSubscription?: { unsubscribe(): void };\n private keyboardSubscription?: { unsubscribe(): void };\n private revision = 0;\n private hovered = false;\n private focused = false;\n private lastPointerType = '';\n private touchEvents?: AbortController;\n private holdTimer?: number;\n private touchHideTimer?: number;\n private touchVisible = false;\n private closeTouchTap = false;\n\n constructor() {\n const source = this.elementRef.nativeElement;\n const focus = source.ownerDocument.defaultView\n ? this.focusMonitor.monitor(source, true).subscribe((origin) =>\n this.zone.run(() => {\n this.focused = origin === 'keyboard';\n if (this.focused) {\n this.clearTouchInteraction();\n this.show();\n } else if (!this.hovered && !this.touchEvents) this.hide();\n })\n )\n : undefined;\n effect((onCleanup) => {\n this.i18n?.version?.();\n const text = this.bxTooltip();\n const description = isTextWithKey(text) ? (this.i18n?.translate(text.key) ?? text.key) : text;\n if (!description) return;\n this.describer.describe(source, description, 'tooltip');\n onCleanup(() => this.describer.removeDescription(source, description, 'tooltip'));\n });\n inject(DestroyRef).onDestroy(() => {\n ++this.revision;\n focus?.unsubscribe();\n if (focus) this.focusMonitor.stopMonitoring(source);\n this.clearTouchInteraction();\n this.dispose();\n });\n }\n\n public show(): void {\n if (!this.bxTooltip()) return;\n const revision = ++this.revision;\n if (!this.overlayRef) {\n const strategy = this.positionBuilder.getElementStrategy(this.elementRef.nativeElement, this.placement()).withFlexibleDimensions(false);\n this.overlayRef = this.overlay.create({\n positionStrategy: strategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: false,\n panelClass: 'bx-tooltip-pane'\n });\n\n const pane = this.overlayRef.overlayElement;\n pane.id = this.id;\n pane.setAttribute('role', 'tooltip');\n // AriaDescriber supplies the description even when the visual tooltip is hidden.\n pane.setAttribute('aria-hidden', 'true');\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(this.elementRef.nativeElement, pane));\n this.disconnectLighting = inheritGlassLighting(pane, this.elementRef.nativeElement);\n\n const component = this.overlayRef.attach(new ComponentPortal(Tooltip));\n // CDK enables pane pointer events during attach. Reset afterwards so the\n // emerging tooltip cannot steal hover from small or nested triggers.\n pane.style.pointerEvents = 'none';\n this.keyboardSubscription = this.overlayRef.keydownEvents().subscribe((event) => this.onEscape(event));\n component.setInput('text', this.bxTooltip());\n component.changeDetectorRef.detectChanges();\n const positionArrow = () => {\n const trigger = this.elementRef.nativeElement.getBoundingClientRect();\n const bounds = pane.getBoundingClientRect();\n pane.style.setProperty('--bx-tooltip-arrow-x', `${trigger.left + trigger.width / 2 - bounds.left}px`);\n pane.style.setProperty('--bx-tooltip-arrow-y', `${trigger.top + trigger.height / 2 - bounds.top}px`);\n this.transition?.refresh();\n };\n this.positionSubscription = strategy.positionChanges.subscribe(positionArrow);\n this.overlayRef.updatePosition();\n positionArrow();\n\n if (!this.a11y.isReducedMotion()) {\n this.transition = this.zone.runOutsideAngular(() => createGlassTransition(this.elementRef.nativeElement, pane));\n }\n }\n\n void Promise.resolve(this.zone.runOutsideAngular(() => this.transition?.enter())).catch(() => {\n if (revision === this.revision) {\n this.transition?.destroy();\n this.transition = undefined;\n }\n });\n }\n\n public hide(): void {\n this.clearTouchInteraction();\n const revision = ++this.revision;\n if (!this.overlayRef) return;\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.revision) this.dispose();\n })\n .catch(() => {\n if (revision === this.revision) this.dispose();\n });\n } else this.dispose();\n }\n\n @HostListener('pointerenter', ['$event'])\n protected onEnter(event: PointerEvent): void {\n if (event.pointerType !== 'mouse') return;\n this.clearTouchInteraction();\n this.hovered = true;\n this.show();\n }\n\n @HostListener('pointerleave', ['$event'])\n protected onLeave(event: PointerEvent): void {\n if (event.pointerType !== 'mouse') return;\n this.hovered = false;\n if (!this.focused) this.hide();\n }\n\n @HostListener('pointerdown', ['$event'])\n protected onPointerDown(event: PointerEvent): void {\n this.lastPointerType = event.pointerType;\n if (event.pointerType !== 'touch') return;\n this.closeTouchTap = this.touchVisible && this.bxTooltipTouch() === 'tap';\n this.hovered = false;\n this.focused = false;\n this.hide();\n if (this.bxTooltipTouch() !== 'longpress' || !event.isPrimary || event.button !== 0 || !this.canUseTouch(event)) return;\n this.zone.runOutsideAngular(() => this.startTouchInteraction(event));\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n if (event.detail === 0 || this.lastPointerType !== 'touch' || this.bxTooltipTouch() !== 'tap' || !this.canUseTouch(event)) return;\n if (this.closeTouchTap) {\n this.closeTouchTap = false;\n return;\n }\n this.zone.runOutsideAngular(() => this.startTouchInteraction());\n }\n\n @HostListener('document:keydown', ['$event'])\n protected onEscape(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.overlayRef) {\n event.stopPropagation();\n this.hovered = false;\n this.focused = false;\n this.hide();\n }\n }\n\n private canUseTouch(event: Event): boolean {\n if (this.contextMenu && this.bxTooltipTouch() === 'longpress') return false;\n const source = this.elementRef.nativeElement;\n if (source.closest(':disabled, [aria-disabled=\"true\"], [inert]')) return false;\n return !event.composedPath().some((node) => node instanceof HTMLElement && (node.isContentEditable || node.matches('input, textarea, select')));\n }\n\n private hasTextSelection(): boolean {\n const source = this.elementRef.nativeElement;\n const selection = source.ownerDocument.getSelection();\n return !!selection && !selection.isCollapsed && (source.contains(selection.anchorNode) || source.contains(selection.focusNode));\n }\n\n private startTouchInteraction(press?: PointerEvent): void {\n const source = this.elementRef.nativeElement;\n const doc = source.ownerDocument;\n const win = doc.defaultView;\n if (!win || this.hasTextSelection()) return;\n this.clearTouchInteraction();\n const events = new AbortController();\n this.touchEvents = events;\n const options = { capture: true, passive: true, signal: events.signal };\n const dismiss = () => this.zone.run(() => this.hide());\n let suppressReleaseClick = false;\n doc.addEventListener(\n 'pointerdown',\n (event) => {\n if (!press && event.target instanceof Node && source.contains(event.target)) return;\n dismiss();\n },\n options\n );\n doc.addEventListener('scroll', dismiss, options);\n doc.addEventListener(\n 'visibilitychange',\n () => {\n if (doc.hidden) dismiss();\n },\n options\n );\n win.addEventListener('blur', dismiss, { signal: events.signal });\n if (!press) {\n this.touchVisible = true;\n this.zone.run(() => this.show());\n return;\n }\n doc.addEventListener(\n 'pointermove',\n (event) => {\n if (event.pointerId === press.pointerId && !this.touchVisible && Math.hypot(event.clientX - press.clientX, event.clientY - press.clientY) > 10)\n dismiss();\n },\n options\n );\n doc.addEventListener(\n 'pointerup',\n (event) => {\n if (event.pointerId !== press.pointerId) return;\n if (!this.touchVisible) dismiss();\n else this.touchHideTimer = win.setTimeout(dismiss, 1500);\n },\n options\n );\n doc.addEventListener(\n 'pointercancel',\n (event) => {\n if (event.pointerId === press.pointerId) dismiss();\n },\n options\n );\n doc.addEventListener(\n 'click',\n (event) => {\n if (!suppressReleaseClick || event.detail === 0) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n suppressReleaseClick = false;\n },\n { ...options, passive: false }\n );\n doc.addEventListener(\n 'contextmenu',\n (event) => {\n if (event.target instanceof Node && source.contains(event.target) && !this.hasTextSelection()) event.preventDefault();\n },\n { ...options, passive: false }\n );\n this.holdTimer = win.setTimeout(() => {\n if (\n this.bxTooltipTouch() !== 'longpress' ||\n !source.isConnected ||\n source.closest(':disabled, [aria-disabled=\"true\"], [inert]') ||\n this.hasTextSelection()\n ) {\n dismiss();\n return;\n }\n this.touchVisible = true;\n suppressReleaseClick = true;\n this.zone.run(() => this.show());\n }, 500);\n }\n\n private clearTouchInteraction(): void {\n this.touchEvents?.abort();\n this.touchEvents = undefined;\n const win = this.elementRef.nativeElement.ownerDocument.defaultView;\n win?.clearTimeout(this.holdTimer);\n win?.clearTimeout(this.touchHideTimer);\n this.holdTimer = undefined;\n this.touchHideTimer = undefined;\n this.touchVisible = false;\n }\n\n private dispose(): void {\n this.keyboardSubscription?.unsubscribe();\n this.keyboardSubscription = undefined;\n this.positionSubscription?.unsubscribe();\n this.positionSubscription = undefined;\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = undefined;\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n HostListener,\n NgZone,\n PLATFORM_ID,\n effect,\n inject,\n input,\n signal,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { BxA11yService, BxPlacement, BxOverlayPositionService, inheritOverlayTheme, trackOverlayOrigin } from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { BX_OVERLAY_CONTEXT } from './overlay-context.token';\nimport { Subscription } from 'rxjs';\n\nexport type DropdownTransition = 'none' | 'fade' | 'emerge';\nexport type DropdownState = 'closed' | 'opening' | 'open' | 'closing';\n\n@Directive({\n selector: '[bxDropdown]',\n exportAs: 'bxDropdown',\n standalone: true,\n host: {\n '[attr.aria-expanded]': 'isOpen()',\n '[attr.aria-haspopup]': '\"menu\"',\n '[attr.aria-controls]': 'overlayId()'\n }\n})\nexport class DropdownDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly vcr = inject(ViewContainerRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private readonly _isOpen = signal(false);\n protected readonly overlayId = signal<string | null>(null);\n public readonly isOpen = this._isOpen.asReadonly();\n private readonly _state = signal<DropdownState>('closed');\n public readonly state = this._state.asReadonly();\n\n public readonly bxDropdown = input.required<TemplateRef<unknown>>();\n public readonly placement = input<BxPlacement>('bottom');\n public readonly bxTransition = input<DropdownTransition>('fade');\n\n private overlayRef: OverlayRef | null = null;\n private transition: ReturnType<typeof createGlassTransition> | null = null;\n private subscriptions = new Subscription();\n private revision = 0;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n ++this.revision;\n this.dispose();\n });\n\n effect(() => {\n if (this.a11y.isReducedMotion() && this.transition) {\n ++this.revision;\n this.transition.destroy();\n this.transition = null;\n if (this.isOpen()) this._state.set('open');\n else this.dispose();\n }\n });\n }\n\n @HostListener('click', ['$event'])\n public toggle(event?: MouseEvent): void {\n if (this.isDisabled()) return;\n event?.stopPropagation();\n if (this.isOpen()) this.close();\n else this.open();\n }\n\n @HostListener('keydown', ['$event'])\n public onTriggerKeydown(event: KeyboardEvent): void {\n if (this.bxTransition() === 'none' || this.isDisabled() || this.isEditing(event.target)) return;\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n event.preventDefault();\n event.stopPropagation();\n this.open();\n const items = this.menuItems();\n const item = event.key === 'ArrowUp' ? items[items.length - 1] : items[0];\n item?.focus({ preventScroll: true });\n }\n\n public open(): void {\n if (!this.isBrowser || this.isOpen() || this.isDisabled()) return;\n const revision = ++this.revision;\n this._isOpen.set(true);\n this._state.set('opening');\n\n if (!this.overlayRef) this.attachOverlay();\n const overlay = this.overlayRef;\n if (!overlay) return;\n overlay.overlayElement.inert = false;\n overlay.overlayElement.style.removeProperty('pointer-events');\n\n if (this.bxTransition() !== 'none' && !this.a11y.isReducedMotion()) {\n const transition = (this.transition ??= this.zone.runOutsideAngular(() => createGlassTransition(this.elementRef.nativeElement, overlay.overlayElement)));\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .then(() => {\n if (revision === this.revision && this.isOpen()) this.zone.run(() => this._state.set('open'));\n })\n .catch(() => {\n if (revision === this.revision && this.isOpen()) {\n this.transition?.destroy();\n this.transition = null;\n this._state.set('open');\n }\n });\n } else {\n this._state.set('open');\n }\n }\n\n public close(restoreFocus = false): void {\n if (!this.overlayRef || !this.isOpen()) return;\n const revision = ++this.revision;\n const overlay = this.overlayRef;\n this._isOpen.set(false);\n this._state.set('closing');\n\n const source = this.elementRef.nativeElement;\n if (restoreFocus || overlay.overlayElement.contains(source.ownerDocument.activeElement)) {\n source.focus({ preventScroll: true });\n }\n overlay.overlayElement.inert = true;\n overlay.overlayElement.style.pointerEvents = 'none';\n\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.revision && !this.isOpen()) this.zone.run(() => this.dispose());\n })\n .catch(() => {\n if (revision === this.revision && !this.isOpen()) this.dispose();\n });\n } else {\n this.dispose();\n }\n }\n\n @HostListener('document:click', ['$event'])\n public onDocumentClick(event: MouseEvent): void {\n if (!this.overlayRef?.hasAttached() || !this.isOpen()) return;\n const target = event.target as Node | null;\n if (!target || this.elementRef.nativeElement.contains(target)) return;\n const inside = this.overlayRef.overlayElement.contains(target);\n // Preserve existing menu item click-to-close behavior; embedded inputs can stay open.\n if (!inside || this.bxTransition() === 'none' || (target instanceof Element && target.closest('button, a, [role=\"menuitem\"]'))) {\n this.close();\n }\n }\n\n private attachOverlay(): void {\n const positionStrategy = this.positionBuilder.getElementStrategy(this.elementRef.nativeElement, this.placement(), 4);\n const overlay = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n usePopover:\n !!this.overlayContext?.useTopLayer ||\n !!this.elementRef.nativeElement.closest('dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]'),\n // A fading surface keeps its trigger reachable while it opens/closes.\n hasBackdrop: this.bxTransition() === 'none',\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n this.overlayRef = overlay;\n this.overlayId.set(overlay.overlayElement.id || null);\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(this.elementRef.nativeElement, overlay.overlayElement));\n this.disconnectLighting = inheritGlassLighting(overlay.overlayElement, this.elementRef.nativeElement);\n this.subscriptions = new Subscription();\n this.subscriptions.add(this.zone.runOutsideAngular(() => trackOverlayOrigin(overlay, this.elementRef.nativeElement)));\n this.subscriptions.add(overlay.backdropClick().subscribe(() => this.close()));\n this.subscriptions.add(\n overlay.outsidePointerEvents().subscribe((event) => {\n if (!this.elementRef.nativeElement.contains(event.target as Node)) this.close();\n })\n );\n this.subscriptions.add(\n overlay.keydownEvents().subscribe((event) => {\n if (event.key === 'Escape' && this.isOpen()) {\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n } else if (!event.defaultPrevented && this.bxTransition() !== 'none' && this.isOpen()) {\n this.navigateMenu(event);\n }\n })\n );\n this.subscriptions.add(\n positionStrategy.positionChanges.subscribe(() => {\n this.zone.runOutsideAngular(() => this.transition?.refresh());\n })\n );\n const view = overlay.attach(new TemplatePortal(this.bxDropdown(), this.vcr));\n view.detectChanges();\n overlay.updatePosition();\n }\n\n private isDisabled(): boolean {\n const element = this.elementRef.nativeElement;\n return element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';\n }\n\n private menuItems(): HTMLElement[] {\n const pane = this.overlayRef?.overlayElement;\n if (!pane) return [];\n return Array.from(pane.querySelectorAll<HTMLElement>('button, a[href], [role=\"menuitem\"]')).filter((item) => {\n if (item.matches(':disabled, [disabled], [aria-disabled=\"true\"]') || item.closest('[aria-disabled=\"true\"]')) return false;\n if (item.closest('[hidden], [inert], [aria-hidden=\"true\"]')) return false;\n if (item.tabIndex < 0 && !item.hasAttribute('tabindex')) return false;\n const style = item.ownerDocument.defaultView?.getComputedStyle(item);\n return !!style && style.display !== 'none' && style.visibility !== 'hidden' && item.getClientRects().length > 0;\n });\n }\n\n private navigateMenu(event: KeyboardEvent): void {\n if (this.isEditing(event.target) || !(event.target instanceof Node) || !this.overlayRef?.overlayElement.contains(event.target)) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.menuItems();\n if (!items.length) return;\n const current = items.indexOf(this.elementRef.nativeElement.ownerDocument.activeElement as HTMLElement);\n let index: number;\n if (event.key === 'Home') index = 0;\n else if (event.key === 'End') index = items.length - 1;\n else if (event.key === 'ArrowDown') index = current < 0 ? 0 : (current + 1) % items.length;\n else index = current < 0 ? items.length - 1 : (current - 1 + items.length) % items.length;\n event.preventDefault();\n event.stopPropagation();\n items[index].focus({ preventScroll: true });\n }\n\n private isEditing(target: EventTarget | null): boolean {\n return target instanceof Element && !!target.closest('input, textarea, select, [contenteditable]:not([contenteditable=\"false\"]), [role=\"textbox\"]');\n }\n\n private dispose(): void {\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = null;\n this.subscriptions.unsubscribe();\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n this.overlayId.set(null);\n this._isOpen.set(false);\n this._state.set('closed');\n }\n}\n","import { Directive, forwardRef, input } from '@angular/core';\nimport { BX_OVERLAY_CONTEXT, IBxOverlayContext } from './overlay-context.token';\n\n@Directive({\n selector: '[bxOverlayContext]',\n standalone: true,\n providers: [{ provide: BX_OVERLAY_CONTEXT, useExisting: forwardRef(() => BxOverlayContextDirective) }]\n})\nexport class BxOverlayContextDirective implements IBxOverlayContext {\n public readonly bxOverlayContext = input<IBxOverlayContext>({});\n\n public get useTopLayer(): boolean | undefined {\n return this.bxOverlayContext().useTopLayer;\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.11';\n"],"mappings":"AAIA,MAAa,iBAAiB"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
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
|
+
};
|
|
2
10
|
export interface NgAddOptions {
|
|
3
|
-
theme?: '
|
|
11
|
+
theme?: 'graphite-sky-blue' | 'azure-coral' | 'violet-teal' | 'tangerine-indigo' | 'scarlet-cyan' | 'lime-violet' | 'cyberpunk' | keyof typeof LEGACY_PALETTES;
|
|
4
12
|
}
|
|
5
13
|
export declare function ngAdd(options: NgAddOptions): Rule;
|
|
14
|
+
export {};
|
|
@@ -1,9 +1,20 @@
|
|
|
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
|
+
};
|
|
4
12
|
function ngAdd(options) {
|
|
5
13
|
return (tree, context) => {
|
|
6
|
-
|
|
14
|
+
var _a;
|
|
15
|
+
const selected = (_a = options.theme) !== null && _a !== void 0 ? _a : 'graphite-sky-blue';
|
|
16
|
+
const theme = Object.prototype.hasOwnProperty.call(LEGACY_PALETTES, selected) ? LEGACY_PALETTES[selected] : selected;
|
|
17
|
+
injectStyles(tree, context, { theme });
|
|
7
18
|
return tree;
|
|
8
19
|
};
|
|
9
20
|
}
|
|
@@ -59,8 +70,8 @@ function injectStyles(tree, context, options) {
|
|
|
59
70
|
context.logger.info('Blocks SCSS configuration already exists. Skipping style injection.');
|
|
60
71
|
return;
|
|
61
72
|
}
|
|
62
|
-
const lightThemeVar = `$${(_f = options.theme) !== null && _f !== void 0 ? _f : '
|
|
63
|
-
const darkThemeVar = `$${(_g = options.theme) !== null && _g !== void 0 ? _g : '
|
|
73
|
+
const lightThemeVar = `$${(_f = options.theme) !== null && _f !== void 0 ? _f : 'graphite-sky-blue'}-light-theme`;
|
|
74
|
+
const darkThemeVar = `$${(_g = options.theme) !== null && _g !== void 0 ? _g : 'graphite-sky-blue'}-dark-theme`;
|
|
64
75
|
const blocksThemeSnippet = `
|
|
65
76
|
@use '@filip.mazev/blocks' as *;
|
|
66
77
|
|
|
@@ -75,5 +86,5 @@ function injectStyles(tree, context, options) {
|
|
|
75
86
|
}
|
|
76
87
|
`;
|
|
77
88
|
tree.overwrite(targetStylePath, blocksThemeSnippet + '\n' + content);
|
|
78
|
-
context.logger.info(`Successfully injected the ${(_h = options.theme) !== null && _h !== void 0 ? _h : '
|
|
89
|
+
context.logger.info(`Successfully injected the ${(_h = options.theme) !== null && _h !== void 0 ? _h : 'graphite-sky-blue'} Blocks theme configuration into ${targetStylePath}.`);
|
|
79
90
|
}
|
|
@@ -6,38 +6,49 @@
|
|
|
6
6
|
"properties": {
|
|
7
7
|
"theme": {
|
|
8
8
|
"type": "string",
|
|
9
|
-
"description": "Select
|
|
9
|
+
"description": "Select a Blocks palette for your UI.",
|
|
10
10
|
"enum": [
|
|
11
|
+
"graphite-sky-blue",
|
|
12
|
+
"azure-coral",
|
|
13
|
+
"violet-teal",
|
|
14
|
+
"tangerine-indigo",
|
|
15
|
+
"scarlet-cyan",
|
|
16
|
+
"lime-violet",
|
|
17
|
+
"cyberpunk",
|
|
11
18
|
"white",
|
|
19
|
+
"blue",
|
|
12
20
|
"purple",
|
|
13
21
|
"orange",
|
|
14
22
|
"red",
|
|
15
|
-
"green"
|
|
16
|
-
"cyberpunk"
|
|
23
|
+
"green"
|
|
17
24
|
],
|
|
18
25
|
"x-prompt": {
|
|
19
|
-
"message": "Which
|
|
26
|
+
"message": "Which palette would you like to use?",
|
|
20
27
|
"type": "list",
|
|
21
28
|
"items": [
|
|
22
29
|
{
|
|
23
|
-
"value": "
|
|
24
|
-
"label": "
|
|
30
|
+
"value": "graphite-sky-blue",
|
|
31
|
+
"label": "Graphite / Sky Blue"
|
|
25
32
|
},
|
|
26
33
|
{
|
|
27
|
-
"value": "
|
|
28
|
-
"label": "
|
|
34
|
+
"value": "azure-coral",
|
|
35
|
+
"label": "Azure / Coral"
|
|
29
36
|
},
|
|
30
37
|
{
|
|
31
|
-
"value": "
|
|
32
|
-
"label": "
|
|
38
|
+
"value": "violet-teal",
|
|
39
|
+
"label": "Violet / Teal"
|
|
33
40
|
},
|
|
34
41
|
{
|
|
35
|
-
"value": "
|
|
36
|
-
"label": "
|
|
42
|
+
"value": "tangerine-indigo",
|
|
43
|
+
"label": "Tangerine / Indigo"
|
|
37
44
|
},
|
|
38
45
|
{
|
|
39
|
-
"value": "
|
|
40
|
-
"label": "
|
|
46
|
+
"value": "scarlet-cyan",
|
|
47
|
+
"label": "Scarlet / Cyan"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"value": "lime-violet",
|
|
51
|
+
"label": "Lime / Violet"
|
|
41
52
|
},
|
|
42
53
|
{
|
|
43
54
|
"value": "cyberpunk",
|
|
@@ -45,7 +56,7 @@
|
|
|
45
56
|
}
|
|
46
57
|
]
|
|
47
58
|
},
|
|
48
|
-
"default": "
|
|
59
|
+
"default": "graphite-sky-blue"
|
|
49
60
|
}
|
|
50
61
|
}
|
|
51
62
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
import { InjectionToken, NgZone, OnDestroy, OnInit, Signal } from "@angular/core";
|
|
3
|
-
import { FlexibleConnectedPositionStrategy } from "@angular/cdk/overlay";
|
|
3
|
+
import { FlexibleConnectedPositionStrategy, OverlayRef } from "@angular/cdk/overlay";
|
|
4
4
|
import { ControlValueAccessor, NgControl } from "@angular/forms";
|
|
5
5
|
export declare enum DesktopOS {
|
|
6
6
|
Linux = "linux",
|
|
@@ -136,11 +136,21 @@ export interface BxAppearanceConfig {
|
|
|
136
136
|
reducedTransparency: boolean;
|
|
137
137
|
}
|
|
138
138
|
export declare const DEFAULT_APPEARANCE_CONFIG: Readonly<BxAppearanceConfig>;
|
|
139
|
-
export type BxThemeId = '
|
|
139
|
+
export type BxThemeId = 'graphite-sky-blue' | 'azure-coral' | 'violet-teal' | 'tangerine-indigo' | 'scarlet-cyan' | 'lime-violet' | 'cyberpunk';
|
|
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;
|
|
140
149
|
export declare const THEME_PALETTES: ReadonlyArray<{
|
|
141
150
|
id: BxThemeId;
|
|
142
151
|
label: string;
|
|
143
152
|
className: string;
|
|
153
|
+
colors: readonly [string, string];
|
|
144
154
|
}>;
|
|
145
155
|
export declare class ThemingService implements OnDestroy {
|
|
146
156
|
private readonly document;
|
|
@@ -151,6 +161,7 @@ export declare class ThemingService implements OnDestroy {
|
|
|
151
161
|
id: BxThemeId;
|
|
152
162
|
label: string;
|
|
153
163
|
className: string;
|
|
164
|
+
colors: readonly [string, string];
|
|
154
165
|
}[];
|
|
155
166
|
private readonly _palette;
|
|
156
167
|
readonly palette: import("@angular/core").Signal<BxThemeId>;
|
|
@@ -172,7 +183,7 @@ export declare class ThemingService implements OnDestroy {
|
|
|
172
183
|
constructor();
|
|
173
184
|
ngOnDestroy(): void;
|
|
174
185
|
setApplicationTheme(theme: DeviceTheme): void;
|
|
175
|
-
setPalette(palette: BxThemeId): void;
|
|
186
|
+
setPalette(palette: BxThemeId | LegacyBxThemeId): void;
|
|
176
187
|
setHighContrast(enabled: boolean): void;
|
|
177
188
|
setAppearance(settings: Partial<BxAppearanceConfig>): void;
|
|
178
189
|
resetAppearance(): void;
|
|
@@ -294,8 +305,8 @@ export interface IBxI18nAdapter {
|
|
|
294
305
|
}
|
|
295
306
|
export declare const DEFAULT_DEBOUNCE_TIME = 300;
|
|
296
307
|
export declare const SCROLL_LOCK_INSTANCE_IDENTIFIER = "scroll_lock_instance_";
|
|
297
|
-
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' | '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';
|
|
298
|
-
export declare const PALETTE_NAMES: readonly ["orange", "purple", "red", "green", "danger", "success", "information", "neutral"];
|
|
308
|
+
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", "graphite", "sky-blue", "azure", "coral", "violet", "teal", "tangerine", "indigo", "scarlet", "cyan", "lime", "cool-violet", "cyber-yellow", "cyber-slate", "blue", "orange", "purple", "red", "green", "danger", "warn", "success", "information", "neutral"];
|
|
299
310
|
export declare const SHADE_NUMBERS: readonly [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000];
|
|
300
311
|
export declare const TOKEN_PREFIX = "bx";
|
|
301
312
|
export declare const TOKEN_DELIMITER = "-";
|
|
@@ -347,6 +358,8 @@ export declare function getComplementaryToken(token: Color): Color;
|
|
|
347
358
|
* Provides the inverted value of a given token color
|
|
348
359
|
*/
|
|
349
360
|
export declare function invertPaletteToken(token: Color): Color;
|
|
361
|
+
/** Resolve persisted and pre-rename palette IDs without resetting a user's selection. */
|
|
362
|
+
export declare function resolveThemeId(value: string | null | undefined): BxThemeId | undefined;
|
|
350
363
|
export declare function uuidv4(): string;
|
|
351
|
-
|
|
352
|
-
export declare function
|
|
364
|
+
export declare function inheritOverlayTheme(source: HTMLElement, pane: HTMLElement): () => void;
|
|
365
|
+
export declare function trackOverlayOrigin(overlay: OverlayRef, origin: HTMLElement): () => void;
|