{"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/input/switch/src/switch.props.ts","../../../../../projects/components/widgets/input/switch/src/switch.component.ts","../../../../../projects/components/widgets/input/switch/src/switch.component.html","../../../../../projects/components/widgets/input/switch/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget} from '@wm/components/base';\nimport {FormWidgetType} from '@wm/core';\n\nexport const switchProps = new Map(\n    [\n        ['class', PROP_STRING],\n        ['compareby', PROP_STRING],\n        ['datafield', PROP_STRING],\n        ['dataset', {value: 'yes, no, maybe', ...PROP_ANY}],\n        ['datavaluesource', PROP_ANY],\n        ['datavalue', PROP_STRING],\n        ['disabled', PROP_BOOLEAN],\n        ['displayexpression', PROP_STRING],\n        ['displayfield', PROP_STRING],\n        ['hint', PROP_ANY],\n        ['arialabel', PROP_STRING],\n        ['iconclass', PROP_STRING],\n        ['checkediconclass', {value: '', ...PROP_STRING}],\n        ['name', PROP_STRING],\n        ['orderby', PROP_STRING],\n        ['required', PROP_BOOLEAN],\n        ['show', {value: true, ...PROP_BOOLEAN}],\n        ['tabindex', {value: 0, ...PROP_NUMBER}]\n    ]\n);\n\n\nexport const registerProps = () => {\n    register(\n        'wm-switch',\n        switchProps\n    );\n    registerFormWidget(\n        FormWidgetType.SWITCH,\n        new Map(switchProps)\n    );\n    registerFormWidget(\n        FormWidgetType.TOGGLE,\n        new Map(switchProps)\n    );\n};\n","import { CommonModule } from '@angular/common';\nimport {AfterViewInit, Component, Inject, Injector, OnDestroy, Optional} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport {$appDigest, debounce, isDefined, setCSS, toBoolean} from '@wm/core';\nimport { DataSetItem, provideAs, provideAsWidgetRef, styler, TextContentDirective } from '@wm/components/base';\nimport { DatasetAwareFormComponent } from '@wm/components/input/dataset-aware-form';\n\nimport { registerProps } from './switch.props';\nimport {find, findIndex, forEach, isArray, isNull, isUndefined, trim} from \"lodash-es\";\n\ndeclare const $;\n\nconst DEFAULT_CLS = 'app-switch';\nconst WIDGET_CONFIG = {widgetType: 'wm-switch', hostClass: DEFAULT_CLS};\n\n@Component({\n  standalone: true,\n  imports: [CommonModule, TextContentDirective],\n    selector: '[wmSwitch]',\n    templateUrl: './switch.component.html',\n    providers: [\n        provideAs(SwitchComponent, NG_VALUE_ACCESSOR, true),\n        provideAsWidgetRef(SwitchComponent)\n    ],\n    exportAs: 'wmSwitch'\n})\nexport class SwitchComponent extends DatasetAwareFormComponent implements AfterViewInit, OnDestroy {\n    static initializeProps = registerProps();\n\n    options = [];\n    selectedItem: DataSetItem;\n    iconclass;\n    checkediconclass;\n    multiple: boolean;\n    private btnwidth;\n    public disabled: boolean;\n    public required: boolean;\n    private _debounceSetSelectedValue: Function | null = null;\n    public name: string;\n    public hint:any;\n\n    constructor(inj: Injector, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n        super(inj, WIDGET_CONFIG, explicitContext);\n        this.multiple = this.getAttr(\"multiple\") === \"true\";\n        this.checkediconclass = this.getAttr(\"checkediconclass\");\n\n        this._debounceSetSelectedValue = debounce((val) => {\n            this.setSelectedValue();\n            this.updateHighlighter(val);\n            // only for default value trigger app digest to apply the selectedItem\n            if (val) {\n                $appDigest();\n            }\n        }, 200);\n\n        const datasetSubscription = this.dataset$.subscribe(() => this.updateSwitchOptions());\n\n        this.registerDestroyListener(() => datasetSubscription.unsubscribe());\n\n        const datavalueSubscription = this.datavalue$.subscribe(() => {\n            if (this._debounceSetSelectedValue) {\n                this._debounceSetSelectedValue(true);\n            }\n        });\n        this.registerDestroyListener(() => datavalueSubscription.unsubscribe());\n    }\n\n    ngAfterViewInit() {\n        super.ngAfterViewInit();\n        styler(this.nativeElement as HTMLElement, this);\n    }\n\n    onStyleChange(key: string, nv: any, ov?: any) {\n        if (key === 'height') {\n            setCSS(this.nativeElement, 'overflow', nv ? 'auto' : '');\n        } else {\n            super.onStyleChange(key, nv, ov);\n        }\n    }\n\n    // This function sets the selectedItem by either using compareby fields or selected flag on datasetItems.\n    private setSelectedValue() {\n        if (isDefined(this.datavalue) || isDefined(this.toBeProcessedDatavalue)) {\n            this.selectedItem = find(this.datasetItems, {selected: true});\n            return;\n        }\n\n        // If no value is provided, set first value as default if options are available else set -1 ie no selection\n        // this.selectOptAtIndex(0);\n    }\n\n    // set the css for switch overlay element.\n    // set the selected index from the datasetItems and highlight the datavalue on switch.\n    private updateSwitchOptions() {\n        if (this.datasetItems.length && !this.multiple) {\n            this.btnwidth = (100 / this.datasetItems.length);\n            setCSS(this.nativeElement.querySelector('.app-switch-overlay') as HTMLElement, 'width', this.btnwidth + '%');\n        }\n\n        if (this._debounceSetSelectedValue) {\n            this._debounceSetSelectedValue(true);\n        }\n    }\n\n    // This function animates the highlighted span on to the selected value.\n    private updateHighlighter(skipAnimation?) {\n        const handler = $(this.nativeElement).find('span.app-switch-overlay');\n\n        this.setSelectedValue();\n\n        let left,\n            index = this.selectedItem ? findIndex(this.datasetItems, {key: this.selectedItem.key}) : -1;\n\n        if (index === undefined || index === null) {\n            index = -1;\n        }\n        left = index * this.btnwidth;\n        if (skipAnimation) {\n            handler.css('left', left + '%');\n        } else {\n            handler.animate({\n                left: left + '%'\n            }, 300);\n        }\n    }\n\n    selectOptAtIndex($index) {\n        if (!this.datasetItems.length) {\n            return;\n        }\n        const opt = this.datasetItems[$index];\n        this._modelByValue = opt.value;\n    }\n\n    // Triggered on selected the option from the switch.\n    // set the index and highlight the default value. Invoke onchange event handler.\n    selectOpt($event, $index, option) {\n        $event.preventDefault();\n\n        if (this.disabled) {\n            return;\n        }\n\n        if(this.multiple) {\n            const keys = [];\n            this.datasetItems[$index].selected = !this.datasetItems[$index].selected;\n            forEach(this.datasetItems, (item: any) => {\n                if(item.selected)\n                    keys.push(item.key);\n            });\n            this.modelByKey = keys;\n            this.selectedItem = find(this.datasetItems, {selected: true});\n        }\n        else {\n            this.modelByKey = option.key;\n            if (!this.multiple && this.selectedItem && $index === findIndex(this.datasetItems, {key: this.selectedItem.key})) {\n                if (this.datasetItems.length === 2) {\n                    $index = $index === 1 ? 0 : 1;\n                } else {\n                    return;\n                }\n            }\n            this.selectedItem = this.datasetItems[$index];\n            this.updateHighlighter();\n        }\n\n        this.invokeOnTouched();\n        // invoke on datavalue change.\n        this.invokeOnChange(this.datavalue, $event || {}, true);\n        $appDigest();\n    }\n\n    onPropertyChange(key, nv, ov?) {\n        if (key === 'disabled' && !toBoolean(nv)) {\n            this.nativeElement.removeAttribute(key);\n        } else {\n            if(key==='hint')\n            {\n                if (isUndefined(nv) || isNull(nv) || trim(nv) === '') {\n                    this.hint=[];\n                }\n                else  if (!isArray(nv)) {\n                    this.hint= [nv];\n                }\n            }\n            super.onPropertyChange(key, nv, ov);\n        }\n    }\n\n    ngOnDestroy() {\n        // MEMORY LEAK FIX: Nullify debounced function closure\n        // This closure captures 'this' and prevents garbage collection\n        this._debounceSetSelectedValue = null;\n\n        // MEMORY LEAK FIX: Clear options array\n        this.options = [];\n\n        // MEMORY LEAK FIX: Clear selected item reference\n        this.selectedItem = null;\n\n        // MEMORY LEAK FIX: Clear hint array\n        if (this.hint) {\n            this.hint = [];\n        }\n\n        // Call parent ngOnDestroy\n        super.ngOnDestroy();\n    }\n}\n","<div role=\"group\" class=\"btn-group btn-group-justified\" [ngClass]=\"{'multi-select': multiple}\">\n  @for (opt of datasetItems; track opt) {\n    <a\n      focus-target\n      href=\"javascript:void(0);\"\n      class=\"btn btn-default\"\n      [title]=\"hint?hint:opt.key\"\n      [name]=\"'wm-switch-' + opt.key\"\n      role=\"button\"\n      [title]=\"hint?.[opt.index-1]?hint[opt.index-1]:(hint?.[0]?hint[0]:(opt[displayfield]||opt.label))\"\n      [ngClass]=\"{'selected': opt.selected, 'disabled': disabled}\"\n      [attr.aria-pressed]=\"opt.selected ? true : false\"\n      (click)=\"selectOpt($event, $index, opt)\"\n      >\n      @if (opt.dataObject && opt.dataObject[iconclass] && (!opt.selected ||!checkediconclass)) {\n        <i aria-hidden=\"true\" [ngClass]=\"['app-icon', opt.dataObject[iconclass] || opt['icon']]\"></i>\n      }\n      @if (opt.selected && checkediconclass) {\n        <i aria-hidden=\"true\" [ngClass]=\"[checkediconclass]\"></i>\n      }\n      <span class=\"caption\" [textContent]=\"opt[displayfield] || opt.label\"></span>\n    </a>\n  }\n</div>\n@if (!multiple) {\n  <span [title]=\"selectedItem ? selectedItem.label : modelByKey\" aria-hidden=\"true\"\n    class=\"btn btn-primary app-switch-overlay switch-handle\">\n    <i [ngClass]=\"[checkediconclass]\"></i>\n    <span class=\"caption\">{{selectedItem ? selectedItem.label : modelByKey}}</span>\n  </span>\n}\n<input [name]=\"name\" class=\"model-holder ng-hide\" [disabled]=\"disabled\" [value]=\"modelByKey\" [required]=\"required\" aria-hidden=\"true\">\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}