{"version":3,"file":"ng-formworks-cssframework.mjs","sources":["../../../../projects/ng-formworks-cssframework/src/lib/css-framework.service.ts","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.component.ts","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.component.html","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.defs.ts","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.module.ts","../../../../projects/ng-formworks-cssframework/src/lib/css.framework.ts","../../../../projects/ng-formworks-cssframework/src/public-api.ts","../../../../projects/ng-formworks-cssframework/src/ng-formworks-cssframework.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CssframeworkService {\r\n\r\n  frameworkTheme$: Observable<string>;\r\n  activeRequestedTheme:string;\r\n  frameworkThemeSubject: BehaviorSubject<string>;\r\n  constructor() {\r\n    this.frameworkThemeSubject = new BehaviorSubject<string>('default');\r\n    this.frameworkTheme$ = this.frameworkThemeSubject.asObservable();\r\n   }\r\n\r\n   //TODO-review: this acts as a public api to change the theme\r\n   //but doesn't do the actual change, instead it relies on \r\n   //the CssFramewkCoromponent having subscribed to listen \r\n   //and perform the actual theme change\r\n   requestThemeChange(themeName:string){\r\n      this.frameworkThemeSubject.next(themeName);\r\n      this.activeRequestedTheme=themeName;\r\n   }\r\n\r\n   //TODO-review:there's no way of knowing what the individual component instance\r\n   //has set its theme to, this is just the theme made through the requestThemeChange\r\n   //calls and not guaranteed to correspond to the actual theme set by the \r\n   //component instance themselves\r\n   getActiveRequestedTheme():string{\r\n      return this.activeRequestedTheme;\r\n   }\r\n}\r\n","import { ChangeDetectorRef, Component, OnChanges, OnDestroy, OnInit, ViewEncapsulation, inject, input, model } from '@angular/core';\r\nimport { FrameworkLibraryService, JsonSchemaFormService, addClasses, inArray } from '@ng-formworks/core';\r\nimport _, { cloneDeep, map } from 'lodash';\r\nimport { Subscription } from 'rxjs';\r\nimport { css_fw } from './css-framework.defs';\r\nimport { CssframeworkService } from './css-framework.service';\r\n\r\n@Component({\r\n    selector: 'css-framework',\r\n    templateUrl: './css-framework.component.html',\r\n    styleUrls: ['./css-framework.component.scss'],\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: false\r\n})\r\nexport class CssFrameworkComponent implements OnInit, OnChanges,OnDestroy {\r\n  cdr = inject(ChangeDetectorRef);\r\n  jsf = inject(JsonSchemaFormService);\r\n  jsfFLService = inject(FrameworkLibraryService);\r\n  cssFWService = inject(CssframeworkService);\r\n\r\n  frameworkInitialized = false;\r\n  widgetOptions: any; // Options passed to child widget\r\n  widgetLayoutNode: any; // layoutNode passed to child widget\r\n  options: any; // Options used in this framework\r\n  formControl: any = null;\r\n  debugOutput: any = '';\r\n  debug: any = '';\r\n  parentArray: any = null;\r\n  isOrderable = false;\r\n  dynamicTitle: string = null;\r\n  isDynamicTitle:boolean;\r\n  readonly layoutNode = input<any>(undefined);\r\n  readonly layoutIndex = input<number[]>(undefined);\r\n  readonly dataIndex = input<number[]>(undefined);\r\n\r\n  readonly widgetStyles = model<css_fw.widgetstyles>(undefined);\r\n\r\n\r\n\r\n\r\n\r\n  //TODO-move to ng-formworks/core utility.functions.ts\r\n  applyCssClasses(type, widgetOptions, styleOptions) {\r\n    //console.log(\"applyCssClasses for type:\"+type);\r\n    let cssClasses = this.widgetStyles()[type];\r\n    if (!cssClasses || _.isEmpty(cssClasses) ) {\r\n      cssClasses = this.widgetStyles().default;\r\n    }\r\n    Object.keys(cssClasses).forEach(catName => {\r\n      let classList = cssClasses[catName];\r\n\r\n      if (classList.length) {\r\n        widgetOptions[catName] = addClasses(widgetOptions[catName], classList);\r\n      }\r\n      if (styleOptions) {\r\n        widgetOptions[catName] = addClasses(widgetOptions[catName], styleOptions);\r\n      }\r\n\r\n    })\r\n  }\r\n\r\n  flattenWidgetStyles(wstyles:css_fw.widgetstyles){\r\n    var flattened:any={};\r\n    let ignore=['__themes__'];\r\n    Object.keys(wstyles).forEach(wkey=>{\r\n      let wstyle=wstyles[wkey];\r\n      if(ignore.indexOf(wkey)>=0){\r\n        flattened[wkey]=wstyle;\r\n        return;\r\n      }\r\n      if(_.isArray(wstyle)){\r\n        \r\n        flattened[wkey]=wstyle.join(\" \");\r\n      }\r\n      if(_.isObject(wstyle)){//is csscategories\r\n          flattened[wkey]=flattened[wkey]||{};\r\n        Object.keys(wstyle).forEach(catName=>{\r\n          let cssCat=wstyle[catName];\r\n          \r\n          if(_.isArray(cssCat)){\r\n            flattened[wkey][catName]=cssCat.join(\" \");\r\n          }else{\r\n            flattened[wkey][catName]=cssCat;\r\n          }\r\n        })\r\n      }\r\n      if(_.isString(wstyle)){\r\n        flattened[wkey]=wstyle;\r\n      }\r\n    })\r\n    return flattened\r\n}\r\n\r\ndefaultStyling:css_fw.widgetstyles={\r\n  array:{},\r\n  default:{fieldHtmlClass: \"cssfw-form-control\"},\r\n  __themes__:[{name:'notheme',text:'None'}],\r\n  __remove_item__:\"cssfw-remove-item\",\r\n    __array_item_nonref__:{\r\n      \"htmlClass\":   \"cssfw-array-item-nonref\"\r\n  },\r\n  __active__:{activeClass:\"cssfw-active\"},\r\n  __array__:{htmlClass:\"cssfw-array\"},\r\n  __control_label__:{labelHtmlClass:\"cssfw-control-label\"},\r\n  __form_group__:{htmlClass: \"cssfw-form-group\"},\r\n  __field_addon_left__:\"cssfw-addon-left\",\r\n  __field_addon_right__:\"cssfw-addon-right\",\r\n  __help_block__:\"cssfw-help-block\",\r\n  __required_asterisk__:\"cssfw-required-astersisk\",\r\n  __screen_reader__: \"cssfw-screen-reader\"\r\n\r\n}\r\n\r\n\r\n\r\n\r\ntheme:string\r\nframeworkThemeSubs:Subscription;\r\n  constructor(){\r\n    const cssFWService = this.cssFWService;\r\n    \r\n    let activeFramework:any=this.jsfFLService.activeFramework;\r\n    let fwcfg=activeFramework.config||{};\r\n    \r\n    this.widgetStyles.set(Object.assign(this.defaultStyling,fwcfg.widgetstyles));\r\n    let defaultTheme=this.widgetStyles().__themes__[0];\r\n    let defaultThemeName=cssFWService.activeRequestedTheme||defaultTheme.name;\r\n    this.theme=this.options?.theme|| defaultThemeName;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.frameworkThemeSubs?.unsubscribe();\r\n    this.frameworkThemeSubs=null;\r\n  }\r\n\r\n\r\n  get showRemoveButton(): boolean {\r\n    const layoutNode = this.layoutNode();\r\n    if (!this.options.removable || this.options.readonly ||\r\n      layoutNode.type === '$ref'\r\n    ) {\r\n      return false;\r\n    }\r\n    if (layoutNode.recursiveReference) {\r\n      return true;\r\n    }\r\n    if (!layoutNode.arrayItem || !this.parentArray) {\r\n      return false;\r\n    }\r\n    // If array length <= minItems, don't allow removing any items\r\n    return this.parentArray.items.length - 1 <= this.parentArray.options.minItems ? false :\r\n      // For removable list items, allow removing any item\r\n      layoutNode.arrayItemType === 'list' ? true :\r\n        // For removable tuple items, only allow removing last item in list\r\n        this.layoutIndex()[this.layoutIndex().length - 1] === this.parentArray.items.length - 2;\r\n  }\r\n\r\n  ngOnInit() {\r\n    const cssFWService = this.cssFWService;\r\n    //TODO review:this will be run by every component instance\r\n    this.frameworkThemeSubs=cssFWService.frameworkTheme$.subscribe(newTheme=>{\r\n        this.theme=newTheme;\r\n        this.cdr.detectChanges();\r\n    })\r\n    this.initializeFramework();\r\n    const layoutNode = this.layoutNode();\r\n    if (layoutNode.arrayItem && layoutNode.type !== '$ref') {\r\n      this.parentArray = this.jsf.getParentNode(this);\r\n      if (this.parentArray) {\r\n        this.isOrderable = layoutNode.arrayItemType === 'list' &&\r\n          !this.options.readonly && this.parentArray.options.orderable;\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes) {\r\n    if (!this.frameworkInitialized) {\r\n      this.initializeFramework();\r\n    }\r\n    if (this.isDynamicTitle) {\r\n      this.updateTitle();\r\n    }\r\n  }\r\n\r\n  initializeFramework() {\r\n    const layoutNode = this.layoutNode();\r\n    if (layoutNode) {\r\n      this.options = cloneDeep(layoutNode.options);\r\n      this.widgetLayoutNode = {\r\n        ...layoutNode,\r\n        options: cloneDeep(layoutNode.options)\r\n      };\r\n      this.widgetOptions = this.widgetLayoutNode.options;\r\n      this.formControl = this.jsf.getFormControl(this);\r\n\r\n      this.options.isInputWidget = inArray(layoutNode.type, [\r\n        'button', 'checkbox', 'checkboxes-inline', 'checkboxes', 'color',\r\n        'date', 'datetime-local', 'datetime', 'email', 'file', 'hidden',\r\n        'image', 'integer', 'month', 'number', 'password', 'radio',\r\n        'radiobuttons', 'radios-inline', 'radios', 'range', 'reset', 'search',\r\n        'select', 'submit', 'tel', 'text', 'textarea', 'time', 'url', 'week'\r\n      ]);\r\n      \r\n      this.isDynamicTitle=this.options?.title&& /{{.+?}}/.test(this.options.title)\r\n      this.dynamicTitle=this.options?.title;\r\n      if (\r\n        !['$ref', 'advancedfieldset', 'authfieldset', 'button', 'card',\r\n          'checkbox', 'expansion-panel', 'help', 'message', 'msg', 'section',\r\n          'submit', 'tabarray', 'tabs'].includes(layoutNode.type) &&\r\n        /{{.+?}}/.test(this.widgetOptions.title || '')\r\n      ) {\r\n        this.updateTitle();\r\n      }\r\n      \r\n      this.options.title=this.setTitle();\r\n\r\n      if(this.widgetOptions.title){\r\n        this.dynamicTitle=\"\";\r\n      }\r\n\r\n      this.options.htmlClass =\r\n        addClasses(this.options.htmlClass, 'schema-form-' + layoutNode.type);\r\n\r\n      \r\n      if (layoutNode.type === 'array') {\r\n        this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__array__.htmlClass);\r\n      } else if (layoutNode.arrayItem && layoutNode.type !== '$ref') {\r\n        this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__array_item_nonref__.htmlClass);\r\n      } else {\r\n        this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__form_group__.htmlClass);\r\n      }\r\n      \r\n\r\n      /*\r\n      this.options.htmlClass =\r\n      this.layoutNode.type === 'array' ?\r\n        addClasses(this.options.htmlClass, ['border','shadow-md','p-1']) :\r\n        this.layoutNode.arrayItem && this.layoutNode.type !== '$ref' ?\r\n          addClasses(this.options.htmlClass, ['border','shadow-md','p-1']) :\r\n          addClasses(this.options.htmlClass, 'mb-1');\r\n*/\r\n\r\n/*\r\nthis.options.htmlClass =\r\nthis.layoutNode.type === 'array' ?\r\naddClasses(this.options.htmlClass, this.widgetStyles.array.htmlClass):\r\n  this.layoutNode.arrayItem && this.layoutNode.type !== '$ref' ?\r\n  addClasses(this.options.htmlClass, this.widgetStyles.__array_item_nonref__.htmlClass):\r\n  addClasses(this.options.htmlClass, this.widgetStyles.__form_group__.htmlClass);\r\n*/\r\n          \r\n      this.widgetOptions.htmlClass = '';\r\n      this.options.labelHtmlClass =\r\n        addClasses(this.options.labelHtmlClass, this.widgetStyles().__control_label__.labelHtmlClass);\r\n      this.widgetOptions.activeClass =\r\n        addClasses(this.widgetOptions.activeClass, this.widgetStyles().__active__.activeClass);\r\n      this.options.fieldAddonLeft =\r\n        this.options.fieldAddonLeft || this.options.prepend;\r\n      this.options.fieldAddonRight =\r\n        this.options.fieldAddonRight || this.options.append;\r\n\r\n      // Add asterisk to titles if required\r\n      if (this.options.title && layoutNode.type !== 'tab' &&\r\n        !this.options.notitle && this.options.required &&\r\n        !this.options.title.includes('*')\r\n      ) {\r\n        let required_asterisk_class=this.widgetStyles().__required_asterisk__||'text-danger'\r\n        this.options.title += ` <strong class=\"${required_asterisk_class}\">*</strong>`;\r\n      }\r\n      if (layoutNode.type == 'optionfieldset') {\r\n        this.options.messageLocation = 'top';\r\n      }\r\n      // Set miscelaneous styles and settings for each control type\r\n      this.applyCssClasses(layoutNode.type, this.widgetOptions, this.options.style);\r\n      if (this.formControl) {\r\n        this.updateHelpBlock(this.formControl.status);\r\n        this.formControl.statusChanges.subscribe(status => this.updateHelpBlock(status));\r\n\r\n        if (this.options.debug) {\r\n          const vars: any[] = [];\r\n          this.debugOutput = map(vars, thisVar => JSON.stringify(thisVar, null, 2)).join('\\n');\r\n        }\r\n      }\r\n      this.updateTitle();\r\n      this.frameworkInitialized = true;\r\n    }\r\n\r\n  }\r\n\r\n  updateHelpBlock(status) {\r\n    this.options.helpBlock = status === 'INVALID' &&\r\n      this.options.enableErrorState && this.formControl.errors &&\r\n      (this.formControl.dirty || this.options.feedbackOnRender) ?\r\n      this.jsf.formatErrors(this.formControl.errors, this.options.validationMessages) :\r\n      this.options.description || this.options.help || null;\r\n  }\r\n\r\n  //TODO review-side effect assignments\r\n  setTitle(): string {\r\n    switch (this.layoutNode().type) {\r\n      case 'button':\r\n      case 'checkbox':\r\n      case 'section':\r\n      case 'help':\r\n      case 'msg':\r\n      case 'submit':\r\n      case 'message':\r\n      case 'tabarray':\r\n      case 'tabs':\r\n      case '$ref':\r\n        return null;\r\n      case 'advancedfieldset':\r\n        this.widgetOptions.expandable = true;\r\n        this.widgetOptions.title = 'Advanced options';\r\n        return null;\r\n      case 'authfieldset':\r\n        this.widgetOptions.expandable = true;\r\n        this.widgetOptions.title = 'Authentication settings';\r\n        return null;\r\n      case 'fieldset':\r\n        this.widgetOptions.title = this.options.title;\r\n        return null;\r\n      default:\r\n        this.widgetOptions.title = null;\r\n        return this.jsf.setItemTitle(this);\r\n    }\r\n  }\r\n\r\n  updateTitle() {\r\n    this.dynamicTitle=\r\n     this.jsf.parseText(\r\n      this.options?.title,\r\n      this.jsf.getFormControlValue(this),\r\n      this.jsf.getFormControlGroup(this)?.value,\r\n      this.dataIndex()[this.dataIndex().length - 1]\r\n    );\r\n    //this.jsf.setItemTitle(this);\r\n    //this.widgetLayoutNode.options.title=this.dynamicTitle;\r\n  }\r\n\r\n  removeItem() {\r\n    this.jsf.removeItem(this);\r\n  }\r\n}\r\n","<div [attr.data-bs-theme]=\"theme\" [attr.data-theme]=\"theme\" [class]=\"options?.htmlClass || ''\" [class.has-feedback]=\"options?.feedback && options?.isInputWidget &&\r\n        (formControl?.dirty || options?.feedbackOnRender)\" [class.has-error]=\"options?.enableErrorState && formControl?.errors &&\r\n        (formControl?.dirty || options?.feedbackOnRender)\" [class.has-success]=\"options?.enableSuccessState && !formControl?.errors &&\r\n        (formControl?.dirty || options?.feedbackOnRender)\">\r\n\r\n  @if (showRemoveButton) {\r\n    <button [class]=\"widgetStyles().__remove_item__\" type=\"button\" (click)=\"removeItem()\">\r\n      <span aria-hidden=\"true\">&times;</span>\r\n      <span [class]=\"widgetStyles().__screen_reader__\">Close</span>\r\n    </button>\r\n  }\r\n  @if (options?.messageLocation === 'top') {\r\n    <div>\r\n      @if (options?.helpBlock) {\r\n        <p [class]=\"widgetStyles().__help_block__\" [innerHTML]=\"options?.helpBlock\"></p>\r\n      }\r\n    </div>\r\n  }\r\n\r\n  @if (options?.title && layoutNode()?.type !== 'tab') {\r\n    <label [attr.for]=\"'control' + layoutNode()?._id\" [class]=\"options?.labelHtmlClass || ''\" [class.sr-only]=\"options?.notitle\" [innerHTML]=\"dynamicTitle\"></label>\r\n  }\r\n  @if (layoutNode()?.type === 'submit' && jsf?.formOptions?.fieldsRequired) {\r\n    <p>\r\n      <strong [class]=\"widgetStyles().__required_asterisk__\">*</strong> = required fields\r\n    </p>\r\n  }\r\n  <div [class.input-group]=\"options?.fieldAddonLeft || options?.fieldAddonRight\">\r\n    @if (options?.fieldAddonLeft) {\r\n      <span [class]=\"widgetStyles().__field_addon_left__\" [innerHTML]=\"options?.fieldAddonLeft\"></span>\r\n    }\r\n\r\n    <select-widget-widget [layoutNode]=\"widgetLayoutNode\" [dataIndex]=\"dataIndex()\" [layoutIndex]=\"layoutIndex()\"></select-widget-widget>\r\n\r\n    @if (options?.fieldAddonRight) {\r\n      <span [class]=\"widgetStyles().__field_addon_right__\" [innerHTML]=\"options?.fieldAddonRight\"></span>\r\n    }\r\n  </div>\r\n\r\n  @if (options?.feedback && options?.isInputWidget &&\r\n    !options?.fieldAddonRight && !layoutNode().arrayItem &&\r\n    (formControl?.dirty || options?.feedbackOnRender)) {\r\n    <span [class.glyphicon-ok]=\"options?.enableSuccessState && !formControl?.errors\" [class.glyphicon-remove]=\"options?.enableErrorState && formControl?.errors\" aria-hidden=\"true\" class=\"form-control-feedback glyphicon\"></span>\r\n  }\r\n  @if (options?.messageLocation !== 'top') {\r\n    <div>\r\n      @if (options?.helpBlock) {\r\n        <p [class]=\"widgetStyles().__help_block__\" [innerHTML]=\"options?.helpBlock\"></p>\r\n      }\r\n    </div>\r\n  }\r\n\r\n</div>\r\n\r\n@if (debug && debugOutput) {\r\n  <div>debug:\r\n    <pre>{{debugOutput}}</pre>\r\n  </div>\r\n}\r\n\r\n<!--\r\n<div class=\"btn input input-bordered input-primary w-full max-w-xs\r\nbtn-neutral\r\nbtn-primary\r\nbtn-secondary\r\nbtn-accent\r\nbtn-info\r\nbtn-success\r\nbtn-warning\r\nbtn-error\r\nbtn-ghost\r\nbtn-link\r\nbtn-outline\r\nbtn-active\r\nbtn-disabled\r\nglass\r\nno-animation\r\nbtn-lg\r\nbtn-md\r\nbtn-sm\r\nbtn-xs\r\nbtn-wide\r\nbtn-block\r\nbtn-circle\r\nbtn-square\r\nhidden\r\n\">defs al</div>\r\n-->\r\n<!--<input type=\"text\" placeholder=\"Type here\" class=\"input input-bordered input-primary w-full max-w-xs\" />-->","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const CSS_FRAMEWORK_CFG = new InjectionToken<css_fw.frameworkcfg>('CSS_FRAMEWORK_CFG');\r\n\r\nexport namespace css_fw{\r\n\r\n    export type themeKV=\r\n    { \r\n        name:string,\r\n        text:string\r\n     }\r\n\r\n    export class csscategories{\r\n        fieldHtmlClass?:string|string[]\r\n        labelHtmlClass?:string|string[]\r\n        htmlClass?:string|string[]\r\n        itemLabelHtmlClass?:string|string[]\r\n        activeClass?:string|string[]\r\n        [key: `widget_${string}`]: string|string[]; //allows for properties prefixed with widget\r\n    }\r\n\r\n    export type widgetstyles={\r\n        '$ref'?:csscategories,\r\n        'alt-date'?:csscategories,\r\n        'alt-datetime'?:csscategories,\r\n        __themes__?:themeKV[],\r\n        __array_item_nonref__:csscategories,\r\n        __form_group__:csscategories,\r\n        __control_label__:csscategories,\r\n        __active__:csscategories,\r\n        __required_asterisk__:string,\r\n        __array__:csscategories,\r\n        '__remove_item__':string,\r\n        __help_block__:string,\r\n        __field_addon_left__:string\r\n        __field_addon_right__:string,\r\n        __screen_reader__:string,\r\n        array:csscategories,\r\n        authfieldset?:csscategories,\r\n        advancedfieldset?:csscategories,\r\n        button?:csscategories,\r\n        checkbox?:csscategories,\r\n        checkboxes?:csscategories,\r\n        checkboxbuttons?:csscategories,\r\n        'checkboxes-inline'?:csscategories,\r\n        date?:csscategories,\r\n        'datetime-local'?:csscategories,\r\n        fieldset?:csscategories,\r\n        integer?:csscategories,\r\n        number?:csscategories,\r\n        optionfieldset?:csscategories,\r\n        password?:csscategories,\r\n        radiobuttons?:csscategories,\r\n        radio?:csscategories,\r\n        radios?:csscategories,\r\n        \"radios-inline\"?:csscategories,\r\n        'range'?:csscategories,\r\n        section?:csscategories,\r\n        selectfieldset?:csscategories,\r\n        select?:csscategories,\r\n        submit?:csscategories,\r\n        text?:csscategories,\r\n        tabs?:csscategories,\r\n        tabarray?:csscategories,\r\n        'one-of'?:csscategories,\r\n        textarea?:csscategories,\r\n        default:csscategories\r\n    }\r\n    export type frameworkcfg={\r\n        name:string,\r\n        text:string;\r\n        stylesheets:string[],\r\n        scripts?:string[],\r\n        widgetstyles:widgetstyles,\r\n        widgets?:any;\r\n    }\r\n\r\n    \r\n\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FrameworkLibraryService, JsonSchemaFormModule, JsonSchemaFormService, WidgetLibraryModule, WidgetLibraryService } from '@ng-formworks/core';\r\nimport { CssFrameworkComponent } from './css-framework.component';\r\nimport { CssframeworkService } from './css-framework.service';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    CssFrameworkComponent\r\n  ],\r\n  imports: [\r\n    JsonSchemaFormModule,\r\n    CommonModule,\r\n    WidgetLibraryModule,\r\n  ],\r\n  exports: [\r\n    CssFrameworkComponent\r\n  ],\r\n  providers: [\r\n    JsonSchemaFormService,\r\n    FrameworkLibraryService,\r\n    WidgetLibraryService,\r\n    CssframeworkService\r\n   // { provide: Framework, useClass: CssFramework, multi: true },\r\n  ]\r\n})\r\nexport class CssFrameworkModule { }\r\n","import { Inject, Injectable, inject } from '@angular/core';\r\nimport { Framework } from '@ng-formworks/core';\r\nimport { CssFrameworkComponent } from './css-framework.component';\r\nimport { CSS_FRAMEWORK_CFG, css_fw } from './css-framework.defs';\r\nimport { CssframeworkService } from './css-framework.service';\r\n\r\n\r\n\r\n@Injectable()\r\nexport class CssFramework extends Framework {\r\n  cssFWService = inject(CssframeworkService);\r\n\r\n  name = 'css';\r\n\r\n  framework:any = CssFrameworkComponent;\r\n  config:css_fw.frameworkcfg\r\n  constructor(@Inject(CSS_FRAMEWORK_CFG ) cfg:css_fw.frameworkcfg){\r\n        //reverted to use @Inject for other child classes\r\n        //const cfg = inject<css_fw.frameworkcfg>(CSS_FRAMEWORK_CFG);\r\n\r\n        super();\r\n        \r\n        this.name=cfg.name;\r\n        this.text=cfg.text||this.name;\r\n        this.stylesheets=cfg.stylesheets;\r\n        this.scripts=cfg.scripts;\r\n        this.config=cfg;\r\n        this.widgets=cfg.widgets;\r\n  }\r\n  getActiveTheme():css_fw.themeKV{\r\n    let activeRequestedThemeName=this.cssFWService.getActiveRequestedTheme();\r\n    let frameWorkThemes=this.config?.widgetstyles?.__themes__;\r\n    \r\n    let theme=frameWorkThemes && frameWorkThemes[0]\r\n    if(activeRequestedThemeName){//if not set return first theme in config;\r\n      theme={name:activeRequestedThemeName,text:activeRequestedThemeName};\r\n      if(frameWorkThemes){\r\n        let filtered=frameWorkThemes.filter(theme=>{return theme.name==activeRequestedThemeName});\r\n        theme=(filtered && filtered[0])||theme;\r\n      }\r\n    }\r\n    return  theme;\r\n  }\r\n\r\n  requestThemeChange(name:string){\r\n    this.cssFWService.requestThemeChange(name);\r\n  }\r\n\r\n  registerTheme(newTheme:css_fw.themeKV,overwrite:boolean=true):boolean{\r\n    let themeList=this.config?.widgetstyles?.__themes__||[];\r\n    let matchedThemes=themeList.filter(theme=>{return newTheme.name==theme.name});\r\n    if(matchedThemes && matchedThemes[0]){\r\n      if(overwrite){\r\n        matchedThemes[0].text=newTheme.text;\r\n        return true;\r\n      }\r\n      if(!overwrite){\r\n        return false;\r\n      }\r\n      \r\n    }\r\n    if(!matchedThemes || matchedThemes.length==0){\r\n      let cfg:any=this.config\r\n      cfg.widgetstyles= this.config.widgetstyles||{};\r\n      cfg.widgetstyles.__themes__=cfg.widgetstyles.__themes__||[];\r\n      cfg.widgetstyles.__themes__.push(newTheme);\r\n      return true;\r\n    }\r\n  };\r\n\r\n  unregisterTheme(name:string):boolean{\r\n    let themeList=this.config?.widgetstyles?.__themes__;\r\n    let foundInd=-1;\r\n    if(themeList){\r\n        themeList.forEach((theme,ind)=>{\r\n          if(name==theme.name){\r\n            foundInd=ind;\r\n          }\r\n      });\r\n      if(foundInd>=0){\r\n        themeList.splice(foundInd,1);\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  getConfig():css_fw.frameworkcfg{\r\n    return this.config;\r\n  }\r\n\r\n  /*\r\n  stylesheets = [\r\n    //TODO-enable for dev only\r\n    cdn.tailwindcss.com/3.3.3'\r\n  ];\r\n\r\n\r\n  scripts = [\r\n\r\n  ];\r\n  */\r\n\r\n}\r\n","/*\r\n * Public API Surface of ng-formworks-cssframework\r\n */\r\n\r\nexport * from './lib/css-framework.component';\r\nexport * from './lib/css-framework.defs';\r\nexport * from './lib/css-framework.module';\r\nexport * from './lib/css-framework.service';\r\nexport * from './lib/css.framework';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}