@spartan-ng/brain 0.0.1-alpha.436 → 0.0.1-alpha.438

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/calendar/index.d.ts +5 -2
  2. package/calendar/lib/brn-calendar-cell-button.directive.d.ts +2 -2
  3. package/calendar/lib/brn-calendar-grid.directive.d.ts +1 -1
  4. package/calendar/lib/brn-calendar.directive.d.ts +4 -1
  5. package/calendar/lib/brn-calendar.token.d.ts +19 -5
  6. package/calendar/lib/mode/brn-calendar-multiple.directive.d.ts +61 -0
  7. package/fesm2022/spartan-ng-brain-calendar.mjs +196 -9
  8. package/fesm2022/spartan-ng-brain-calendar.mjs.map +1 -1
  9. package/fesm2022/spartan-ng-brain-select.mjs +2 -1
  10. package/fesm2022/spartan-ng-brain-select.mjs.map +1 -1
  11. package/fesm2022/spartan-ng-brain-slider.mjs +278 -342
  12. package/fesm2022/spartan-ng-brain-slider.mjs.map +1 -1
  13. package/fesm2022/spartan-ng-brain-toggle-group.mjs +260 -0
  14. package/fesm2022/spartan-ng-brain-toggle-group.mjs.map +1 -0
  15. package/fesm2022/spartan-ng-brain-toggle.mjs +6 -197
  16. package/fesm2022/spartan-ng-brain-toggle.mjs.map +1 -1
  17. package/package.json +5 -1
  18. package/slider/index.d.ts +9 -4
  19. package/slider/lib/brn-slider-range.directive.d.ts +7 -0
  20. package/slider/lib/brn-slider-thumb.directive.d.ts +18 -11
  21. package/slider/lib/brn-slider-tick.directive.d.ts +12 -0
  22. package/slider/lib/brn-slider-track.directive.d.ts +8 -136
  23. package/slider/lib/brn-slider-track.token.d.ts +5 -0
  24. package/slider/lib/brn-slider.directive.d.ts +37 -0
  25. package/slider/lib/brn-slider.token.d.ts +4 -0
  26. package/toggle/index.d.ts +0 -7
  27. package/toggle/lib/brn-toggle.directive.d.ts +0 -2
  28. package/toggle-group/README.md +3 -0
  29. package/toggle-group/index.d.ts +15 -0
  30. package/{toggle → toggle-group}/lib/brn-toggle-group.component.d.ts +5 -5
  31. package/toggle-group/lib/brn-toggle-item.directive.d.ts +25 -0
  32. package/slider/lib/brn-slider-tick-mark.directive.d.ts +0 -15
  33. package/slider/lib/brn-slider-track-active-fill.directive.d.ts +0 -10
  34. /package/{toggle → toggle-group}/lib/brn-toggle-group.token.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"spartan-ng-brain-slider.mjs","sources":["../../../../libs/brain/slider/src/lib/brn-slider-track.directive.ts","../../../../libs/brain/slider/src/lib/brn-slider-thumb.directive.ts","../../../../libs/brain/slider/src/lib/brn-slider-tick-mark.directive.ts","../../../../libs/brain/slider/src/lib/brn-slider-track-active-fill.directive.ts","../../../../libs/brain/slider/src/index.ts","../../../../libs/brain/slider/src/spartan-ng-brain-slider.ts"],"sourcesContent":["import type { Direction } from '@angular/cdk/bidi';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n\ttype AfterViewInit,\n\tChangeDetectorRef,\n\tDirective,\n\tElementRef,\n\tInjectionToken,\n\tInjector,\n\ttype OnDestroy,\n\tPLATFORM_ID,\n\tRenderer2,\n\ttype Signal,\n\ttype WritableSignal,\n\tcomputed,\n\tcontentChild,\n\teffect,\n\tforwardRef,\n\tinject,\n\tinput,\n\tmodel,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { BrnLabelDirective } from '@spartan-ng/brain/label';\nimport { Subject, merge } from 'rxjs';\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\n\nexport const BRN_SLIDER_INPUT = new InjectionToken<BrnSliderInput>('BrnSliderInput');\n\nexport interface BrnSliderInput {\n\t/** The slider's native input element wrapper value. */\n\tvalue: Signal<number>;\n\n\t/** Flag indicating if native input element is currently focused. */\n\tisFocused: Signal<boolean>;\n}\n\nexport const BRN_SLIDER_TRACK = new InjectionToken<BrnSliderTrack>('BrnSliderTrack');\n\nexport const BRN_SLIDER = new InjectionToken<BrnSlider>('BrnSlider');\n\nexport interface BrnSlider {\n\t/** The minimun value of the slider. */\n\tmin: WritableSignal<number>;\n\n\t/** The maximun value of the slider. */\n\tmax: WritableSignal<number>;\n\n\t/** The amount that slider values can increment or decrement by. */\n\tstep: Signal<number>;\n\n\t/** Whether the slider is disabled. */\n\tdisabled: WritableSignal<boolean>;\n\n\t/** Whether the slider displays tick marks along the slider track. */\n\tshowTickMarks: Signal<boolean>;\n\n\t/** Whether the slider is ltr or rtl.\n\t * Any consumer of slider interested in getting the current\n\t * direction state, will consume this signal.\n\t */\n\tdirection: Signal<Direction>;\n\n\t/** The underlying slider's track element */\n\tbrnSliderTrack: Signal<BrnSliderTrack | undefined>;\n\n\t/** The aria-labelledby element */\n\tlabel: Signal<BrnLabelDirective | null>;\n\n\t/** The optional aria-label fallback value.\n\t * If no label is provided, this input must be provided by the user,\n\t * otherwise an error will be displayed prompting the user to either\n\t * provide a spartan-ui label or a fallback aria label text.\n\t */\n\tariaLabel: Signal<string | null>;\n}\n\n/**\n * Directive that adds slider-specific behaviors to an input element inside `<brn-slider>`.\n */\n@Directive({\n\tselector: 'input[brnSliderInput]',\n\thost: {\n\t\ttype: 'range',\n\t\trole: 'slider',\n\t\t'(change)': 'onChange()',\n\t\t'(input)': 'onInput()',\n\t\t'(focus)': 'onFocus()',\n\t\t'(blur)': 'onBlur()',\n\t\t'[attr.disabled]': 'isDisabled()',\n\t\t'[attr.aria-valuenow]': 'valueNow()',\n\t\t'[attr.aria-valuemin]': 'valueMin()',\n\t\t'[attr.aria-valuemax]': 'valueMax()',\n\t\t'[attr.aria-labelledby]': 'ariaLabelledby()',\n\t\t'[attr.aria-label]': 'ariaLabel()',\n\t\t'aria-orientation': 'horizontal',\n\t},\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: BrnSliderInputDirective,\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: BRN_SLIDER_INPUT,\n\t\t\tuseExisting: BrnSliderInputDirective,\n\t\t},\n\t],\n\tstandalone: true,\n})\nexport class BrnSliderInputDirective implements ControlValueAccessor, BrnSliderInput {\n\tprivate _onChangeFn: ((value: string | number) => void) | undefined;\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate _onTouchedFn: () => void = () => {};\n\tprotected isDisabled = computed(() => (this._slider.disabled() === true ? true : undefined));\n\tprotected valueNow = computed(() => this.value() ?? 0);\n\tprotected valueMin = computed(() => this._slider.min());\n\tprotected valueMax = computed(() => this._slider.max());\n\tprotected ariaLabelledby = computed(() => this._slider.label()?.id);\n\tprotected ariaLabel = computed(() => {\n\t\tif (!this._slider.ariaLabel() && !this.ariaLabelledby()) {\n\t\t\tthrow new Error(\n\t\t\t\t\"'ariaLabel' input must be provided as fallback accessibility aria label when no aria-labelledby element is provided.\",\n\t\t\t);\n\t\t}\n\t\treturn this._slider.ariaLabel();\n\t});\n\tpublic readonly value = signal(0);\n\tpublic readonly isFocused = signal(false);\n\n\tprivate readonly _platformId = inject(PLATFORM_ID);\n\tprivate readonly _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef<HTMLInputElement>);\n\tprivate readonly _slider = inject(BRN_SLIDER);\n\tprivate readonly _renderer2 = inject(Renderer2);\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tif (isPlatformBrowser(this._platformId)) {\n\t\t\t\tconst step = this._slider.step();\n\t\t\t\tconst min = this._slider.min();\n\t\t\t\tconst max = this._slider.max();\n\t\t\t\tconst direction = this._slider.direction();\n\t\t\t\tuntracked(() => {\n\t\t\t\t\tthis._updateHostElementStep(step);\n\t\t\t\t\tthis._updateMinValue(min);\n\t\t\t\t\tthis._updateMaxValue(max);\n\t\t\t\t\tthis._updateDirection(direction);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tonFocus(): void {\n\t\tthis.isFocused.set(true);\n\t}\n\n\tonBlur(): void {\n\t\tthis.isFocused.set(false);\n\t\tthis._onTouchedFn();\n\t}\n\n\tonInput(): void {\n\t\tthis._updateValue();\n\t}\n\n\tonChange(): void {\n\t\tthis._updateValue();\n\t}\n\n\twriteValue(obj: number): void {\n\t\tthis.value.set(obj);\n\t\tthis._updateHostElementValue(obj);\n\t}\n\n\tregisterOnChange(fn: (value: string | number) => void): void {\n\t\tthis._onChangeFn = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis._onTouchedFn = fn;\n\t}\n\n\t/**\n\t * Sets the disabled state of the slider.\n\t * @param isDisabled The new disabled state\n\t */\n\tsetDisabledState(isDisabled: boolean): void {\n\t\t/** Disable slider only when slider component\n\t\t * is not disabled and isDisabled param is explicitly set to true\n\t\t */\n\t\tif (isDisabled && !this._slider.disabled()) {\n\t\t\tthis._slider.disabled.set(isDisabled);\n\t\t}\n\t}\n\n\tprivate _updateHostElementValue(value: number | null) {\n\t\tthis._elementRef.nativeElement.value = value?.toString() ?? '0';\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\tprivate _updateValue() {\n\t\tthis.value.set(this._elementRef.nativeElement.valueAsNumber);\n\t\tthis._onChangeFn?.(this.value());\n\t}\n\n\tprivate _updateHostElementStep(step: number) {\n\t\tthis._elementRef.nativeElement.step = step.toString();\n\t\tthis._updateValue();\n\t}\n\n\tprivate _updateMinValue(value: number) {\n\t\tthis._elementRef.nativeElement.min = value.toString();\n\t\tthis._updateValue();\n\t}\n\n\tprivate _updateMaxValue(value: number) {\n\t\tthis._elementRef.nativeElement.max = value.toString();\n\t\tthis._updateValue();\n\t}\n\n\tprivate _updateDirection(direction: Direction) {\n\t\tthis._renderer2.setStyle(this._elementRef.nativeElement, 'direction', direction);\n\t}\n}\n\n@Directive({\n\tselector: '[brnSlider]',\n\tstandalone: true,\n\tproviders: [\n\t\t{\n\t\t\tprovide: BRN_SLIDER,\n\t\t\tuseExisting: BrnSliderDirective,\n\t\t},\n\t],\n\texportAs: 'brnSlider',\n})\nexport class BrnSliderDirective implements BrnSlider, AfterViewInit, OnDestroy {\n\tpublic readonly label = input<BrnLabelDirective | null>(null);\n\tpublic readonly ariaLabel = input<string | null>(null);\n\t/** Used only as an input. */\n\tpublic readonly dir = input<Direction>('ltr');\n\tpublic readonly disabled = model<boolean>(false, { alias: 'brnSliderDisabled' });\n\tpublic readonly min = model<number>(0);\n\tpublic readonly max = model<number>(100);\n\tpublic readonly step = input<number>(1);\n\tpublic readonly showTickMarks = input<boolean>(false);\n\n\tpublic readonly direction = signal<Direction>('ltr');\n\tprivate readonly _destroyed = new Subject<void>();\n\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _dir = inject(Directionality);\n\tprivate readonly _platformId = inject(PLATFORM_ID);\n\n\tpublic readonly brnSliderTrack = contentChild(BRN_SLIDER_TRACK);\n\n\tngAfterViewInit(): void {\n\t\tif (isPlatformBrowser(this._platformId)) {\n\t\t\tthis._updateDirectionality();\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroyed.next();\n\t\tthis._destroyed.complete();\n\t}\n\n\t/**\n\t * The method is responsible of setting the current direction state\n\t * based on the latest 'dir' input or bidi state change. The only\n\t * source of truth for slider direction state is the 'direction' signal\n\t * and all interested consumers of it, will consume this interface exposed signal.\n\t */\n\tprivate _updateDirectionality() {\n\t\tmerge(toObservable(this.dir, { injector: this._injector }), this._dir.change)\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this._destroyed),\n\t\t\t\ttap((dir) => this.direction.set(dir)),\n\t\t\t)\n\t\t\t.subscribe();\n\t}\n}\n\nexport interface BrnSliderTrack {\n\t/** The track's active portion. */\n\tactiveTrackPercentage: Signal<number>;\n\n\t/** The host element's bounding client rect width without padding left and right. */\n\thostElementWidth: Signal<number>;\n\n\t/** The available tick mark track width based on slider's step min and max values. */\n\ttickMarkTrackWidth: Signal<number>;\n\n\t/** The tick marks array indicating if a mark is currently active or inactive. */\n\ttickMarks: Signal<Array<boolean>>;\n\n\t/** The underlying slider's track input element */\n\tbrnSliderInput: Signal<BrnSliderInput | undefined>;\n}\n\n@Directive({\n\tselector: '[brnSliderTrack]',\n\tstandalone: true,\n\tproviders: [\n\t\t{\n\t\t\tprovide: BRN_SLIDER_TRACK,\n\t\t\tuseExisting: BrnSliderTrackDirective,\n\t\t},\n\t],\n})\nexport class BrnSliderTrackDirective implements BrnSliderTrack, AfterViewInit, OnDestroy {\n\tpublic readonly hostElementWidth = signal<number>(0);\n\tprivate readonly _destroyed = new Subject<void>();\n\n\tprivate readonly _slider = inject(BRN_SLIDER);\n\tprivate readonly _platformId = inject(PLATFORM_ID);\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\n\tprivate readonly _sharedResizeObserver = inject(SharedResizeObserver);\n\n\tpublic readonly brnSliderInput = contentChild<BrnSliderInput>(forwardRef(() => BRN_SLIDER_INPUT));\n\n\tpublic activeTrackPercentage = computed(() => {\n\t\tconst inputValue = this.brnSliderInput()?.value();\n\n\t\tif (this._slider.min() >= this._slider.max() || !inputValue || inputValue < this._slider.min()) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tif (inputValue > this._slider.max()) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn (inputValue - this._slider.min()) / (this._slider.max() - this._slider.min());\n\t});\n\n\tpublic tickMarkTrackWidth = computed(() => {\n\t\tif (!this._slider.showTickMarks()) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst sliderStep = this._slider.step();\n\t\tconst sliderMax = this._slider.max();\n\t\tconst sliderMin = this._slider.min();\n\n\t\tconst step = sliderStep && sliderStep > 0 ? sliderStep : 1;\n\t\tconst maxValue = Math.floor((sliderMax - sliderMin) / step) * step + sliderMin;\n\t\tconst percentage = (maxValue - sliderMin) / (sliderMax - sliderMin);\n\n\t\treturn this.hostElementWidth() * percentage;\n\t});\n\n\tpublic tickMarks = computed(() => {\n\t\tconst inputValue = this.brnSliderInput()?.value();\n\n\t\tif (!this._slider.showTickMarks() || inputValue === null || inputValue === undefined) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet numActive = Math.max(Math.floor((inputValue - this._slider.min()) / this._slider.step()), 0);\n\t\tlet numInactive = Math.max(Math.floor((this._slider.max() - inputValue) / this._slider.step()), 0);\n\n\t\tthis._slider.direction() === 'rtl' ? numInactive++ : numActive++;\n\n\t\treturn Array(numActive).fill(true).concat(Array(numInactive).fill(false));\n\t});\n\n\tngAfterViewInit(): void {\n\t\tif (isPlatformBrowser(this._platformId)) {\n\t\t\tthis._storeDimensions();\n\t\t\tthis._onResize();\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroyed.next();\n\t\tthis._destroyed.complete();\n\t}\n\n\tprivate _onResize() {\n\t\tthis._sharedResizeObserver\n\t\t\t.observe(this._elementRef.nativeElement)\n\t\t\t.pipe(\n\t\t\t\tdebounceTime(32),\n\t\t\t\ttakeUntil(this._destroyed),\n\t\t\t\ttap(() => this._storeDimensions()),\n\t\t\t)\n\t\t\t.subscribe();\n\t}\n\n\tprivate _storeDimensions(): void {\n\t\tconst computedStyle = getComputedStyle(this._elementRef.nativeElement);\n\n\t\tthis.hostElementWidth.set(\n\t\t\tthis._elementRef.nativeElement.offsetWidth -\n\t\t\t\tNumber.parseFloat(computedStyle.paddingLeft) -\n\t\t\t\tNumber.parseFloat(computedStyle.paddingRight),\n\t\t);\n\t}\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, ElementRef, PLATFORM_ID, type Signal, computed, effect, inject } from '@angular/core';\nimport { BRN_SLIDER } from './brn-slider-track.directive';\n\nexport interface BrnSliderThumb {\n\t/** The visual's thumb translateX portion. */\n\ttranslateX: Signal<number>;\n}\n\n@Directive({\n\tselector: '[brnSliderThumb]',\n\tstandalone: true,\n})\nexport class BrnSliderThumbDirective implements BrnSliderThumb {\n\tprivate readonly _platformId = inject(PLATFORM_ID);\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\n\tprivate readonly _slider = inject(BRN_SLIDER);\n\n\tpublic readonly translateX = computed(() => this._calcTranslateX());\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tif (isPlatformBrowser(this._platformId)) {\n\t\t\t\tthis._updateTranslateX(this.translateX());\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _calcTranslateX() {\n\t\tconst activeTrackPercentage = this._slider.brnSliderTrack()?.activeTrackPercentage();\n\t\tconst trackHostElementWidth = this._slider.brnSliderTrack()?.hostElementWidth();\n\n\t\tif (!activeTrackPercentage || !trackHostElementWidth) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tif (this._slider.direction() === 'rtl') {\n\t\t\treturn -(activeTrackPercentage * trackHostElementWidth);\n\t\t}\n\n\t\treturn activeTrackPercentage * trackHostElementWidth;\n\t}\n\n\tprivate _updateTranslateX(value: number) {\n\t\tthis._elementRef.nativeElement.style.transform = `translate(${value}px, -50%)`;\n\t}\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, ElementRef, PLATFORM_ID, effect, inject, input } from '@angular/core';\nimport { BRN_SLIDER, BRN_SLIDER_TRACK } from './brn-slider-track.directive';\n\n@Directive({\n\tselector: '[brnSliderTickMark]',\n\tstandalone: true,\n})\nexport class BrnSliderTickMarkDirective {\n\tprivate readonly _platformId = inject(PLATFORM_ID);\n\tpublic readonly data = input<{ tickMarkIndex: number; totalTickMarks: number }>();\n\n\tprivate readonly _sliderTrack = inject(BRN_SLIDER_TRACK);\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\n\tprivate readonly _slider = inject(BRN_SLIDER);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tif (isPlatformBrowser(this._platformId)) {\n\t\t\t\tthis._updateTranslateX();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _updateTranslateX() {\n\t\tconst data = this.data();\n\n\t\tif (!data) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst translateX = data.tickMarkIndex * (this._sliderTrack.tickMarkTrackWidth() / (data.totalTickMarks - 1));\n\n\t\tthis._elementRef.nativeElement.style.transform =\n\t\t\tthis._slider.direction() === 'rtl' ? `translateX(${-translateX}px)` : `translateX(${translateX}px)`;\n\t}\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, ElementRef, PLATFORM_ID, effect, inject } from '@angular/core';\nimport { BRN_SLIDER_TRACK } from './brn-slider-track.directive';\n\n@Directive({\n\tselector: '[brnSliderTrackActiveFill]',\n\tstandalone: true,\n})\nexport class BrnSliderTrackActiveFillDirective {\n\tprivate readonly _platformId = inject(PLATFORM_ID);\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\n\tprivate readonly _sliderTrack = inject(BRN_SLIDER_TRACK);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tif (isPlatformBrowser(this._platformId)) {\n\t\t\t\tthis._updateActiveTrackPercentage(this._sliderTrack.activeTrackPercentage());\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _updateActiveTrackPercentage(percentage: number) {\n\t\tthis._elementRef.nativeElement.style.transform = `scaleX(${percentage})`;\n\t}\n}\n","import { BrnSliderThumbDirective } from './lib/brn-slider-thumb.directive';\nimport { BrnSliderDirective, BrnSliderInputDirective, BrnSliderTrackDirective } from './lib/brn-slider-track.directive';\n\nexport * from './lib/brn-slider-thumb.directive';\nexport * from './lib/brn-slider-tick-mark.directive';\nexport * from './lib/brn-slider-track-active-fill.directive';\nexport * from './lib/brn-slider-track.directive';\n\nexport const BrnSliderImports = [\n\tBrnSliderDirective,\n\tBrnSliderTrackDirective,\n\tBrnSliderInputDirective,\n\tBrnSliderThumbDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spartan-ng-brain-slider.mjs","sources":["../../../../libs/brain/slider/src/lib/brn-slider.token.ts","../../../../libs/brain/slider/src/lib/brn-slider-range.directive.ts","../../../../libs/brain/slider/src/lib/brn-slider-thumb.directive.ts","../../../../libs/brain/slider/src/lib/brn-slider-tick.directive.ts","../../../../libs/brain/slider/src/lib/brn-slider-track.token.ts","../../../../libs/brain/slider/src/lib/brn-slider-track.directive.ts","../../../../libs/brain/slider/src/lib/brn-slider.directive.ts","../../../../libs/brain/slider/src/index.ts","../../../../libs/brain/slider/src/spartan-ng-brain-slider.ts"],"sourcesContent":["import { ExistingProvider, inject, InjectionToken, Type } from '@angular/core';\nimport type { BrnSliderDirective } from './brn-slider.directive';\n\nconst BrnSliderToken = new InjectionToken<BrnSliderDirective>('BrnSliderToken');\n\nexport function provideBrnSlider(slider: Type<BrnSliderDirective>): ExistingProvider {\n\treturn { provide: BrnSliderToken, useExisting: slider };\n}\n\nexport function injectBrnSlider(): BrnSliderDirective {\n\treturn inject(BrnSliderToken);\n}\n","import { Directive } from '@angular/core';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderRange]',\n\thost: {\n\t\t'[attr.data-disabled]': 'slider.disabled()',\n\t\t'[style.width.%]': 'slider.percentage()',\n\t},\n})\nexport class BrnSliderRangeDirective {\n\t/** Access the slider */\n\tprotected readonly slider = injectBrnSlider();\n}\n","import { DOCUMENT, isPlatformServer } from '@angular/common';\nimport { computed, Directive, ElementRef, HostListener, inject, PLATFORM_ID } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderThumb]',\n\thost: {\n\t\trole: 'slider',\n\t\t'[attr.aria-valuenow]': 'slider.value()',\n\t\t'[attr.aria-valuemin]': 'slider.min()',\n\t\t'[attr.aria-valuemax]': 'slider.max()',\n\t\t'[attr.tabindex]': 'slider.disabled() ? -1 : 0',\n\t\t'[attr.data-disabled]': 'slider.disabled()',\n\t\t'[style.inset-inline-start]': 'thumbOffset()',\n\t},\n})\nexport class BrnSliderThumbDirective {\n\tprotected readonly slider = injectBrnSlider();\n\tprivate readonly _document = inject<Document>(DOCUMENT);\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate readonly _platform = inject(PLATFORM_ID);\n\n\t/**\n\t * Offsets the thumb centre point while sliding to ensure it remains\n\t * within the bounds of the slider when reaching the edges.\n\t * Based on https://github.com/radix-ui/primitives/blob/main/packages/react/slider/src/slider.tsx\n\t */\n\tprotected readonly thumbOffset = computed(() => {\n\t\t// we can't compute the offset on the server\n\t\tif (isPlatformServer(this._platform)) {\n\t\t\treturn this.slider.percentage() + '%';\n\t\t}\n\n\t\tconst halfWidth = this._elementRef.nativeElement.offsetWidth / 2;\n\t\tconst offset = this.linearScale([0, 50], [0, halfWidth]);\n\t\tconst thumbInBoundsOffset = halfWidth - offset(this.slider.percentage());\n\t\tconst percent = this.slider.percentage();\n\n\t\treturn `calc(${percent}% + ${thumbInBoundsOffset}px)`;\n\t});\n\n\tconstructor() {\n\t\tconst mousedown = fromEvent<MouseEvent>(this._elementRef.nativeElement, 'pointerdown');\n\t\tconst mouseup = fromEvent<MouseEvent>(this._document, 'pointerup');\n\t\tconst mousemove = fromEvent<MouseEvent>(this._document, 'pointermove');\n\n\t\t// Listen for mousedown events on the slider thumb\n\t\tmousedown\n\t\t\t.pipe(\n\t\t\t\tswitchMap(() => mousemove.pipe(takeUntil(mouseup))),\n\t\t\t\ttakeUntilDestroyed(),\n\t\t\t)\n\t\t\t.subscribe(this.dragThumb.bind(this));\n\t}\n\n\t/** @internal */\n\tprivate dragThumb(event: MouseEvent): void {\n\t\tif (this.slider.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst rect = this.slider.track()?.elementRef.nativeElement.getBoundingClientRect();\n\n\t\tif (!rect) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst percentage = (event.clientX - rect.left) / rect.width;\n\n\t\tthis.slider.setValue(\n\t\t\tthis.slider.min() + (this.slider.max() - this.slider.min()) * Math.max(0, Math.min(1, percentage)),\n\t\t);\n\t}\n\n\t/**\n\t * Handle keyboard events.\n\t * @param event\n\t */\n\t@HostListener('keydown', ['$event'])\n\tprotected handleKeydown(event: KeyboardEvent): void {\n\t\tconst dir = getComputedStyle(this._elementRef.nativeElement).direction;\n\t\tlet multiplier = event.shiftKey ? 10 : 1;\n\t\tconst value = this.slider.value();\n\n\t\t// if the slider is RTL, flip the multiplier\n\t\tif (dir === 'rtl') {\n\t\t\tmultiplier = event.shiftKey ? -10 : -1;\n\t\t}\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tthis.slider.setValue(Math.max(value - this.slider.step() * multiplier, this.slider.min()));\n\t\t\t\tevent.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowRight':\n\t\t\t\tthis.slider.setValue(Math.min(value + this.slider.step() * multiplier, this.slider.max()));\n\t\t\t\tevent.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\tthis.slider.setValue(this.slider.min());\n\t\t\t\tevent.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\tthis.slider.setValue(this.slider.max());\n\t\t\t\tevent.preventDefault();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate linearScale(input: readonly [number, number], output: readonly [number, number]): (value: number) => number {\n\t\treturn (value: number) => {\n\t\t\tif (input[0] === input[1] || output[0] === output[1]) return output[0];\n\t\t\tconst ratio = (output[1] - output[0]) / (input[1] - input[0]);\n\t\t\treturn output[0] + ratio * (value - input[0]);\n\t\t};\n\t}\n}\n","import { Directive, effect, EmbeddedViewRef, inject, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderTick]',\n})\nexport class BrnSliderTickDirective implements OnDestroy {\n\tprivate readonly _slider = injectBrnSlider();\n\tprivate readonly _templateRef = inject<TemplateRef<BrnSliderTickContext>>(TemplateRef);\n\tprivate readonly _viewContainer = inject(ViewContainerRef);\n\tprivate _ticks: EmbeddedViewRef<BrnSliderTickContext>[] = [];\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst ticks = this._slider.ticks();\n\n\t\t\t// remove any existing ticks\n\t\t\tthis._ticks.forEach((tick) => this._viewContainer.remove(this._viewContainer.indexOf(tick)));\n\n\t\t\t// create new ticks\n\t\t\tthis._ticks = [];\n\n\t\t\tticks.forEach((tick, index) => {\n\t\t\t\tconst view = this._viewContainer.createEmbeddedView(this._templateRef, {\n\t\t\t\t\t$implicit: tick,\n\t\t\t\t\tindex,\n\t\t\t\t\tposition: (index / (ticks.length - 1)) * 100,\n\t\t\t\t});\n\t\t\t\tthis._ticks.push(view);\n\t\t\t});\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._ticks.forEach((tick) => this._viewContainer.remove(this._viewContainer.indexOf(tick)));\n\t}\n}\n\ninterface BrnSliderTickContext {\n\t$implicit: number;\n\tindex: number;\n\tposition: number;\n}\n","import { ExistingProvider, inject, InjectionToken, Type } from '@angular/core';\nimport type { BrnSliderTrackDirective } from './brn-slider-track.directive';\n\nexport const BrnSliderTrackToken = new InjectionToken<BrnSliderTrackDirective>('BrnSliderTrackToken');\n\nexport function provideBrnSliderTrack(slider: Type<BrnSliderTrackDirective>): ExistingProvider {\n\treturn { provide: BrnSliderTrackToken, useExisting: slider };\n}\n\nexport function injectBrnSliderTrack(): BrnSliderTrackDirective {\n\treturn inject(BrnSliderTrackToken);\n}\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\nimport { provideBrnSliderTrack } from './brn-slider-track.token';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderTrack]',\n\tproviders: [provideBrnSliderTrack(BrnSliderTrackDirective)],\n\thost: {\n\t\t'[attr.data-disabled]': 'slider.disabled()',\n\t},\n})\nexport class BrnSliderTrackDirective {\n\t/** Access the slider */\n\tprotected readonly slider = injectBrnSlider();\n\n\t/** @internal Access the slider track */\n\tpublic readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tconstructor() {\n\t\tthis.slider.track.set(this);\n\t}\n\n\t@HostListener('mousedown', ['$event'])\n\tprotected moveThumbToPoint(event: MouseEvent): void {\n\t\tif (this.slider.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst position = event.clientX;\n\t\tconst rect = this.elementRef.nativeElement.getBoundingClientRect();\n\t\tconst percentage = (position - rect.left) / rect.width;\n\n\t\t// update the value based on the position\n\t\tthis.slider.setValue(this.slider.min() + (this.slider.max() - this.slider.min()) * percentage);\n\t}\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tDirective,\n\tElementRef,\n\tinject,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n\tOnInit,\n\tsignal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport type { BrnSliderTrackDirective } from './brn-slider-track.directive';\nimport { provideBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSlider]',\n\texportAs: 'brnSlider',\n\tproviders: [\n\t\tprovideBrnSlider(BrnSliderDirective),\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: BrnSliderDirective,\n\t\t\tmulti: true,\n\t\t},\n\t],\n\thost: {\n\t\t'aria-orientation': 'horizontal',\n\t\t'(focusout)': '_onTouched?.()',\n\t},\n})\nexport class BrnSliderDirective implements ControlValueAccessor, OnInit {\n\tprivate readonly _changeDetectorRef = inject(ChangeDetectorRef);\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tpublic readonly value = model<number>(0);\n\n\tpublic readonly min = input<number, NumberInput>(0, {\n\t\ttransform: numberAttribute,\n\t});\n\n\tpublic readonly max = input<number, NumberInput>(100, {\n\t\ttransform: numberAttribute,\n\t});\n\n\tpublic readonly step = input<number, NumberInput>(1, {\n\t\ttransform: numberAttribute,\n\t});\n\n\tpublic readonly _disabled = input<boolean, BooleanInput>(false, {\n\t\talias: 'disabled',\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether we should show tick marks */\n\tpublic readonly showTicks = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** @internal */\n\tpublic readonly ticks = computed(() => {\n\t\tconst value = this.value();\n\n\t\tif (!this.showTicks()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet numActive = Math.max(Math.floor((value - this.min()) / this.step()), 0);\n\t\tlet numInactive = Math.max(Math.floor((this.max() - value) / this.step()), 0);\n\n\t\tconst direction = getComputedStyle(this._elementRef.nativeElement).direction;\n\n\t\tdirection === 'rtl' ? numInactive++ : numActive++;\n\n\t\treturn Array(numActive).fill(true).concat(Array(numInactive).fill(false));\n\t});\n\n\t/** @internal */\n\tpublic readonly disabled = linkedSignal(() => this._disabled());\n\n\t/** @internal */\n\tpublic readonly percentage = computed(() => ((this.value() - this.min()) / (this.max() - this.min())) * 100);\n\n\t/** @internal Store the on change callback */\n\tprotected _onChange?: ChangeFn<number>;\n\n\t/** @internal Store the on touched callback */\n\tprotected _onTouched?: TouchFn;\n\n\t/** @internal Store the track */\n\tpublic readonly track = signal<BrnSliderTrackDirective | null>(null);\n\n\tngOnInit(): void {\n\t\t// ensure the value is within the min and max range\n\t\tif (this.value() < this.min()) {\n\t\t\tthis.value.set(this.min());\n\t\t}\n\t\tif (this.value() > this.max()) {\n\t\t\tthis.value.set(this.max());\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: number) => void): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\twriteValue(value: number): void {\n\t\tconst clampedValue = clamp(value, [this.min(), this.max()]);\n\t\tthis.value.set(clampedValue);\n\n\t\tif (value !== clampedValue) {\n\t\t\tthis._onChange?.(clampedValue);\n\t\t}\n\n\t\tthis._changeDetectorRef.detectChanges();\n\t}\n\n\tsetValue(value: number): void {\n\t\tconst decimalCount = getDecimalCount(this.step());\n\t\tconst snapToStep = roundValue(\n\t\t\tMath.round((value - this.min()) / this.step()) * this.step() + this.min(),\n\t\t\tdecimalCount,\n\t\t);\n\n\t\tvalue = clamp(snapToStep, [this.min(), this.max()]);\n\n\t\tthis.value.set(value);\n\t\tthis._onChange?.(value);\n\t}\n}\n\nfunction roundValue(value: number, decimalCount: number): number {\n\tconst rounder = Math.pow(10, decimalCount);\n\treturn Math.round(value * rounder) / rounder;\n}\n\nfunction getDecimalCount(value: number): number {\n\treturn (String(value).split('.')[1] || '').length;\n}\n\nfunction clamp(value: number, [min, max]: [number, number]): number {\n\treturn Math.min(max, Math.max(min, value));\n}\n","import { BrnSliderRangeDirective } from './lib/brn-slider-range.directive';\nimport { BrnSliderThumbDirective } from './lib/brn-slider-thumb.directive';\nimport { BrnSliderTickDirective } from './lib/brn-slider-tick.directive';\nimport { BrnSliderTrackDirective } from './lib/brn-slider-track.directive';\nimport { BrnSliderDirective } from './lib/brn-slider.directive';\n\nexport * from './lib/brn-slider-range.directive';\nexport * from './lib/brn-slider-thumb.directive';\nexport * from './lib/brn-slider-tick.directive';\nexport * from './lib/brn-slider-track.directive';\nexport * from './lib/brn-slider.directive';\nexport * from './lib/brn-slider.token';\n\nexport const BrnSliderImports = [\n\tBrnSliderDirective,\n\tBrnSliderTrackDirective,\n\tBrnSliderThumbDirective,\n\tBrnSliderRangeDirective,\n\tBrnSliderTickDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,260 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, inject, forwardRef, input, booleanAttribute, model, computed, signal, output, Component, ChangeDetectorRef, Directive, NgModule } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+
5
+ const BrnToggleGroupToken = new InjectionToken('BrnToggleGroupToken');
6
+ function injectBrnToggleGroup() {
7
+ return inject(BrnToggleGroupToken, { optional: true });
8
+ }
9
+ function provideBrnToggleGroup(value) {
10
+ return { provide: BrnToggleGroupToken, useExisting: value };
11
+ }
12
+
13
+ const BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR = {
14
+ provide: NG_VALUE_ACCESSOR,
15
+ useExisting: forwardRef(() => BrnToggleGroupComponent),
16
+ multi: true,
17
+ };
18
+ class BrnButtonToggleChange {
19
+ source;
20
+ value;
21
+ constructor(source, value) {
22
+ this.source = source;
23
+ this.value = value;
24
+ }
25
+ }
26
+ class BrnToggleGroupComponent {
27
+ /**
28
+ * The method to be called in order to update ngModel.
29
+ */
30
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
31
+ _onChange = () => { };
32
+ /** onTouch function registered via registerOnTouch (ControlValueAccessor). */
33
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
34
+ onTouched = () => { };
35
+ /** Whether the button toggle group has a vertical orientation */
36
+ vertical = input(false, {
37
+ transform: booleanAttribute,
38
+ });
39
+ /** Value of the toggle group. */
40
+ value = model(undefined);
41
+ /** Whether no button toggles need to be selected. */
42
+ nullable = input(false, {
43
+ transform: booleanAttribute,
44
+ });
45
+ /** Whether multiple button toggles can be selected. */
46
+ multiple = input(false, {
47
+ transform: booleanAttribute,
48
+ });
49
+ /** Whether the button toggle group is disabled. */
50
+ disabled = input(false, {
51
+ transform: booleanAttribute,
52
+ });
53
+ /** The internal state of the component. This can be replaced with linkedSignal in the future. */
54
+ state = computed(() => ({
55
+ disabled: signal(this.disabled()),
56
+ }));
57
+ /** Emit event when the group value changes. */
58
+ change = output();
59
+ writeValue(value) {
60
+ this.value.set(value);
61
+ }
62
+ registerOnChange(fn) {
63
+ this._onChange = fn;
64
+ }
65
+ registerOnTouched(fn) {
66
+ this.onTouched = fn;
67
+ }
68
+ setDisabledState(isDisabled) {
69
+ this.state().disabled.set(isDisabled);
70
+ }
71
+ /**
72
+ * @internal
73
+ * Determines whether a value can be set on the group.
74
+ */
75
+ canDeselect(value) {
76
+ // if null values are allowed, the group can always be nullable
77
+ if (this.nullable())
78
+ return true;
79
+ const currentValue = this.value();
80
+ if (this.multiple() && Array.isArray(currentValue)) {
81
+ return !(currentValue.length === 1 && currentValue[0] === value);
82
+ }
83
+ return currentValue !== value;
84
+ }
85
+ /**
86
+ * @internal
87
+ * Selects a value.
88
+ */
89
+ select(value, source) {
90
+ if (this.state().disabled() || this.isSelected(value)) {
91
+ return;
92
+ }
93
+ const currentValue = this.value();
94
+ // emit the valueChange event here as we should only emit based on user interaction
95
+ if (this.multiple()) {
96
+ this.emitSelectionChange([...(currentValue ?? []), value], source);
97
+ }
98
+ else {
99
+ this.emitSelectionChange(value, source);
100
+ }
101
+ this._onChange(this.value());
102
+ this.change.emit(new BrnButtonToggleChange(source, this.value()));
103
+ }
104
+ /**
105
+ * @internal
106
+ * Deselects a value.
107
+ */
108
+ deselect(value, source) {
109
+ if (this.state().disabled() || !this.isSelected(value) || !this.canDeselect(value)) {
110
+ return;
111
+ }
112
+ const currentValue = this.value();
113
+ if (this.multiple()) {
114
+ this.emitSelectionChange((currentValue ?? []).filter((v) => v !== value), source);
115
+ }
116
+ else if (currentValue === value) {
117
+ this.emitSelectionChange(null, source);
118
+ }
119
+ }
120
+ /**
121
+ * @internal
122
+ * Determines whether a value is selected.
123
+ */
124
+ isSelected(value) {
125
+ const currentValue = this.value();
126
+ if (currentValue == null ||
127
+ currentValue === undefined ||
128
+ (Array.isArray(currentValue) && currentValue.length === 0)) {
129
+ return false;
130
+ }
131
+ if (this.multiple()) {
132
+ return currentValue?.includes(value);
133
+ }
134
+ return currentValue === value;
135
+ }
136
+ /** Update the value of the group */
137
+ emitSelectionChange(value, source) {
138
+ this.value.set(value);
139
+ this._onChange(value);
140
+ this.change.emit(new BrnButtonToggleChange(source, this.value()));
141
+ }
142
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
143
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.1", type: BrnToggleGroupComponent, isStandalone: true, selector: "brn-toggle-group", inputs: { vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, nullable: { classPropertyName: "nullable", publicName: "nullable", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", change: "change" }, host: { attributes: { "role": "group" }, listeners: { "focusout": "onTouched()" }, properties: { "attr.aria-disabled": "state().disabled()", "attr.data-disabled": "state().disabled()", "attr.data-vertical": "vertical()" }, classAttribute: "brn-button-toggle-group" }, providers: [provideBrnToggleGroup(BrnToggleGroupComponent), BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR], exportAs: ["brnToggleGroup"], ngImport: i0, template: `
144
+ <ng-content />
145
+ `, isInline: true });
146
+ }
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupComponent, decorators: [{
148
+ type: Component,
149
+ args: [{
150
+ selector: 'brn-toggle-group',
151
+ standalone: true,
152
+ providers: [provideBrnToggleGroup(BrnToggleGroupComponent), BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR],
153
+ host: {
154
+ role: 'group',
155
+ class: 'brn-button-toggle-group',
156
+ '[attr.aria-disabled]': 'state().disabled()',
157
+ '[attr.data-disabled]': 'state().disabled()',
158
+ '[attr.data-vertical]': 'vertical()',
159
+ '(focusout)': 'onTouched()',
160
+ },
161
+ exportAs: 'brnToggleGroup',
162
+ template: `
163
+ <ng-content />
164
+ `,
165
+ }]
166
+ }] });
167
+
168
+ class BrnToggleGroupItemDirective {
169
+ static _uniqueId = 0;
170
+ _changeDetector = inject(ChangeDetectorRef);
171
+ /** Access the toggle group if available. */
172
+ group = injectBrnToggleGroup();
173
+ /** The id of the toggle. */
174
+ id = input(`brn-toggle-group-item-${BrnToggleGroupItemDirective._uniqueId++}`);
175
+ /** The value this toggle represents. */
176
+ value = input();
177
+ /** Whether the toggle is disabled. */
178
+ disabled = input(false, {
179
+ transform: booleanAttribute,
180
+ });
181
+ /** The current state of the toggle when not used in a group. */
182
+ state = model('off');
183
+ /** Whether the toggle is responds to click events. */
184
+ disableToggleClick = input(false, {
185
+ transform: booleanAttribute,
186
+ });
187
+ /** Whether the toggle is in the on state. */
188
+ isOn = computed(() => this._state() === 'on');
189
+ /** The current state that reflects the group state or the model state. */
190
+ _state = computed(() => {
191
+ if (this.group) {
192
+ return this.group.isSelected(this.value()) ? 'on' : 'off';
193
+ }
194
+ return this.state();
195
+ });
196
+ toggle() {
197
+ if (this.disableToggleClick())
198
+ return;
199
+ if (this.group) {
200
+ if (this.isOn()) {
201
+ this.group.deselect(this.value(), this);
202
+ }
203
+ else {
204
+ this.group.select(this.value(), this);
205
+ }
206
+ }
207
+ else {
208
+ this.state.set(this.isOn() ? 'off' : 'on');
209
+ }
210
+ }
211
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
212
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.1", type: BrnToggleGroupItemDirective, isStandalone: true, selector: "button[hlmToggleGroupItem], button[brnToggleGroupItem]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, disableToggleClick: { classPropertyName: "disableToggleClick", publicName: "disableToggleClick", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { state: "stateChange" }, host: { listeners: { "click": "toggle()" }, properties: { "id": "id()", "attr.disabled": "disabled() || group?.disabled() ? true : null", "attr.data-disabled": "disabled() || group?.disabled() ? true : null", "attr.data-state": "_state()", "attr.aria-pressed": "isOn()" } }, ngImport: i0 });
213
+ }
214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupItemDirective, decorators: [{
215
+ type: Directive,
216
+ args: [{
217
+ selector: 'button[hlmToggleGroupItem], button[brnToggleGroupItem]',
218
+ standalone: true,
219
+ host: {
220
+ '[id]': 'id()',
221
+ '[attr.disabled]': 'disabled() || group?.disabled() ? true : null',
222
+ '[attr.data-disabled]': 'disabled() || group?.disabled() ? true : null',
223
+ '[attr.data-state]': '_state()',
224
+ '[attr.aria-pressed]': 'isOn()',
225
+ '(click)': 'toggle()',
226
+ },
227
+ }]
228
+ }] });
229
+
230
+ class BrnToggleGroupModule {
231
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
232
+ /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupModule, imports: [BrnToggleGroupItemDirective, BrnToggleGroupComponent], exports: [BrnToggleGroupItemDirective, BrnToggleGroupComponent] });
233
+ /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupModule });
234
+ }
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupModule, decorators: [{
236
+ type: NgModule,
237
+ args: [{
238
+ imports: [BrnToggleGroupItemDirective, BrnToggleGroupComponent],
239
+ exports: [BrnToggleGroupItemDirective, BrnToggleGroupComponent],
240
+ }]
241
+ }] });
242
+ class BrnToggleGroupItemModule {
243
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupItemModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
244
+ /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupItemModule, imports: [BrnToggleGroupItemDirective], exports: [BrnToggleGroupItemDirective] });
245
+ /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupItemModule });
246
+ }
247
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: BrnToggleGroupItemModule, decorators: [{
248
+ type: NgModule,
249
+ args: [{
250
+ imports: [BrnToggleGroupItemDirective],
251
+ exports: [BrnToggleGroupItemDirective],
252
+ }]
253
+ }] });
254
+
255
+ /**
256
+ * Generated bundle index. Do not edit.
257
+ */
258
+
259
+ export { BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR, BrnButtonToggleChange, BrnToggleGroupComponent, BrnToggleGroupItemDirective, BrnToggleGroupItemModule, BrnToggleGroupModule };
260
+ //# sourceMappingURL=spartan-ng-brain-toggle-group.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spartan-ng-brain-toggle-group.mjs","sources":["../../../../libs/brain/toggle-group/src/lib/brn-toggle-group.token.ts","../../../../libs/brain/toggle-group/src/lib/brn-toggle-group.component.ts","../../../../libs/brain/toggle-group/src/lib/brn-toggle-item.directive.ts","../../../../libs/brain/toggle-group/src/index.ts","../../../../libs/brain/toggle-group/src/spartan-ng-brain-toggle-group.ts"],"sourcesContent":["import { ExistingProvider, InjectionToken, Type, inject } from '@angular/core';\nimport type { BrnToggleGroupComponent } from './brn-toggle-group.component';\n\nconst BrnToggleGroupToken = new InjectionToken<BrnToggleGroupComponent>('BrnToggleGroupToken');\n\nexport function injectBrnToggleGroup<T>(): BrnToggleGroupComponent<T> | null {\n\treturn inject(BrnToggleGroupToken, { optional: true }) as BrnToggleGroupComponent<T> | null;\n}\n\nexport function provideBrnToggleGroup<T>(value: Type<BrnToggleGroupComponent<T>>): ExistingProvider {\n\treturn { provide: BrnToggleGroupToken, useExisting: value };\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Component, booleanAttribute, computed, forwardRef, input, model, output, signal } from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { provideBrnToggleGroup } from './brn-toggle-group.token';\nimport { BrnToggleGroupItemDirective } from './brn-toggle-item.directive';\n\nexport const BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnToggleGroupComponent),\n\tmulti: true,\n};\n\nexport class BrnButtonToggleChange<T = unknown> {\n\tconstructor(\n\t\tpublic source: BrnToggleGroupItemDirective<T>,\n\t\tpublic value: ToggleValue<T>,\n\t) {}\n}\n\n@Component({\n\tselector: 'brn-toggle-group',\n\tstandalone: true,\n\tproviders: [provideBrnToggleGroup(BrnToggleGroupComponent), BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR],\n\thost: {\n\t\trole: 'group',\n\t\tclass: 'brn-button-toggle-group',\n\t\t'[attr.aria-disabled]': 'state().disabled()',\n\t\t'[attr.data-disabled]': 'state().disabled()',\n\t\t'[attr.data-vertical]': 'vertical()',\n\t\t'(focusout)': 'onTouched()',\n\t},\n\texportAs: 'brnToggleGroup',\n\ttemplate: `\n\t\t<ng-content />\n\t`,\n})\nexport class BrnToggleGroupComponent<T = unknown> implements ControlValueAccessor {\n\t/**\n\t * The method to be called in order to update ngModel.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate _onChange: (value: ToggleValue<T>) => void = () => {};\n\n\t/** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprotected onTouched: () => void = () => {};\n\n\t/** Whether the button toggle group has a vertical orientation */\n\tpublic readonly vertical = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Value of the toggle group. */\n\tpublic readonly value = model<ToggleValue<T>>(undefined);\n\n\t/** Whether no button toggles need to be selected. */\n\tpublic readonly nullable = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether multiple button toggles can be selected. */\n\tpublic readonly multiple = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether the button toggle group is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The internal state of the component. This can be replaced with linkedSignal in the future. */\n\tpublic readonly state = computed(() => ({\n\t\tdisabled: signal(this.disabled()),\n\t}));\n\n\t/** Emit event when the group value changes. */\n\tpublic readonly change = output<BrnButtonToggleChange<T>>();\n\n\twriteValue(value: ToggleValue<T>): void {\n\t\tthis.value.set(value);\n\t}\n\n\tregisterOnChange(fn: (value: ToggleValue<T>) => void) {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void) {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.state().disabled.set(isDisabled);\n\t}\n\n\t/**\n\t * @internal\n\t * Determines whether a value can be set on the group.\n\t */\n\tcanDeselect(value: ToggleValue<T>): boolean {\n\t\t// if null values are allowed, the group can always be nullable\n\t\tif (this.nullable()) return true;\n\n\t\tconst currentValue = this.value();\n\n\t\tif (this.multiple() && Array.isArray(currentValue)) {\n\t\t\treturn !(currentValue.length === 1 && currentValue[0] === value);\n\t\t}\n\n\t\treturn currentValue !== value;\n\t}\n\n\t/**\n\t * @internal\n\t * Selects a value.\n\t */\n\tselect(value: T, source: BrnToggleGroupItemDirective<T>): void {\n\t\tif (this.state().disabled() || this.isSelected(value)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentValue = this.value();\n\n\t\t// emit the valueChange event here as we should only emit based on user interaction\n\t\tif (this.multiple()) {\n\t\t\tthis.emitSelectionChange([...((currentValue ?? []) as T[]), value], source);\n\t\t} else {\n\t\t\tthis.emitSelectionChange(value, source);\n\t\t}\n\n\t\tthis._onChange(this.value());\n\t\tthis.change.emit(new BrnButtonToggleChange<T>(source, this.value()));\n\t}\n\n\t/**\n\t * @internal\n\t * Deselects a value.\n\t */\n\tdeselect(value: T, source: BrnToggleGroupItemDirective<T>): void {\n\t\tif (this.state().disabled() || !this.isSelected(value) || !this.canDeselect(value)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentValue = this.value();\n\n\t\tif (this.multiple()) {\n\t\t\tthis.emitSelectionChange(\n\t\t\t\t((currentValue ?? []) as T[]).filter((v) => v !== value),\n\t\t\t\tsource,\n\t\t\t);\n\t\t} else if (currentValue === value) {\n\t\t\tthis.emitSelectionChange(null, source);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t * Determines whether a value is selected.\n\t */\n\tisSelected(value: T): boolean {\n\t\tconst currentValue = this.value();\n\n\t\tif (\n\t\t\tcurrentValue == null ||\n\t\t\tcurrentValue === undefined ||\n\t\t\t(Array.isArray(currentValue) && currentValue.length === 0)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.multiple()) {\n\t\t\treturn (currentValue as T[])?.includes(value);\n\t\t}\n\t\treturn currentValue === value;\n\t}\n\n\t/** Update the value of the group */\n\tprivate emitSelectionChange(value: ToggleValue<T>, source: BrnToggleGroupItemDirective<T>): void {\n\t\tthis.value.set(value);\n\t\tthis._onChange(value);\n\t\tthis.change.emit(new BrnButtonToggleChange<T>(source, this.value()));\n\t}\n}\n\ntype ToggleValue<T> = T | T[] | null | undefined;\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Directive, booleanAttribute, computed, inject, input, model } from '@angular/core';\nimport { injectBrnToggleGroup } from './brn-toggle-group.token';\n\n@Directive({\n\tselector: 'button[hlmToggleGroupItem], button[brnToggleGroupItem]',\n\tstandalone: true,\n\thost: {\n\t\t'[id]': 'id()',\n\t\t'[attr.disabled]': 'disabled() || group?.disabled() ? true : null',\n\t\t'[attr.data-disabled]': 'disabled() || group?.disabled() ? true : null',\n\t\t'[attr.data-state]': '_state()',\n\t\t'[attr.aria-pressed]': 'isOn()',\n\t\t'(click)': 'toggle()',\n\t},\n})\nexport class BrnToggleGroupItemDirective<T> {\n\tprivate static _uniqueId = 0;\n\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the toggle group if available. */\n\tprotected readonly group = injectBrnToggleGroup<T>();\n\n\t/** The id of the toggle. */\n\tpublic readonly id = input(`brn-toggle-group-item-${BrnToggleGroupItemDirective._uniqueId++}`);\n\n\t/** The value this toggle represents. */\n\tpublic readonly value = input<T>();\n\n\t/** Whether the toggle is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The current state of the toggle when not used in a group. */\n\tpublic readonly state = model<'on' | 'off'>('off');\n\n\t/** Whether the toggle is responds to click events. */\n\tpublic readonly disableToggleClick = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether the toggle is in the on state. */\n\tprotected readonly isOn = computed(() => this._state() === 'on');\n\n\t/** The current state that reflects the group state or the model state. */\n\tprotected readonly _state = computed(() => {\n\t\tif (this.group) {\n\t\t\treturn this.group.isSelected(this.value() as T) ? 'on' : 'off';\n\t\t}\n\t\treturn this.state();\n\t});\n\n\ttoggle(): void {\n\t\tif (this.disableToggleClick()) return;\n\n\t\tif (this.group) {\n\t\t\tif (this.isOn()) {\n\t\t\t\tthis.group.deselect(this.value() as T, this);\n\t\t\t} else {\n\t\t\t\tthis.group.select(this.value() as T, this);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.state.set(this.isOn() ? 'off' : 'on');\n\t\t}\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { BrnToggleGroupComponent } from './lib/brn-toggle-group.component';\nimport { BrnToggleGroupItemDirective } from './lib/brn-toggle-item.directive';\n\nexport * from './lib/brn-toggle-group.component';\nexport * from './lib/brn-toggle-item.directive';\n\n@NgModule({\n\timports: [BrnToggleGroupItemDirective, BrnToggleGroupComponent],\n\texports: [BrnToggleGroupItemDirective, BrnToggleGroupComponent],\n})\nexport class BrnToggleGroupModule {}\n\n@NgModule({\n\timports: [BrnToggleGroupItemDirective],\n\texports: [BrnToggleGroupItemDirective],\n})\nexport class BrnToggleGroupItemModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}