{"version":3,"file":"tym-form.mjs","sources":["../../../projects/tym-form/src/lib/tym-form.component.ts","../../../projects/tym-form/src/lib/tym-form.module.ts","../../../projects/tym-form/src/public-api.ts","../../../projects/tym-form/src/tym-form.ts"],"sourcesContent":["/*!\r\n * tym-form.js\r\n * Copyright (c) 2022 shinichi tayama\r\n * Released under the MIT license.\r\n * see https://opensource.org/licenses/MIT\r\n */\r\n\r\nimport { Inject, InjectionToken, StaticProvider } from '@angular/core';\r\nimport { Component, Input, ElementRef, Renderer2, HostBinding } from '@angular/core';\r\n\r\n/**\r\n * フォームスタイルカスタマイズの定義\r\n */\r\nexport type TYM_FORM_OPTS = {\r\n  /** font size, default:16px */\r\n  /** line height, default:24px */\r\n\r\n  /** zoom, default:1 */\r\n  zoom?: string,\r\n\r\n  /** font color, default:#000 */\r\n  fontColor?: string,\r\n  /** font family, default:monospace, monospace */\r\n  fontFamily?: string,\r\n  /** tab size, default:unset */\r\n  tabSize?: string,\r\n  /** set '16px' to line height */\r\n  lineHeight16px?: boolean,\r\n  /** border style, default:double */\r\n  borderStyle?: string,\r\n  /** border color, default:#888 */\r\n  borderColor?: string,\r\n  /** background color, default:#eff */\r\n  backgroundColor?: string,\r\n\r\n  /** form element border, default:dotted 1px #ccc */\r\n  formBorder?: string,\r\n  /** form element font color, default:#000 */\r\n  formFontColor?: string,\r\n  /** form element background color, default:#efe */\r\n  formBackgroundColor?: string,\r\n  /** form element focus outline, default:solid 1px #888 */\r\n  formFocusOutline?: string,\r\n  /** form element invalid border, default:solid 1px #f00 */\r\n  formInvalidBorder?: string,\r\n\r\n  /** border bottom positions(0,1～max line), default:none */\r\n  borderLines?: number[],\r\n}\r\n\r\ntype DEF = {\r\n  id: string,\r\n  varname: string,\r\n  type: string,\r\n  inputmode: string,\r\n  pattern: string,\r\n  required: string,\r\n  placeholder: string,\r\n  title: string,\r\n  line: number,\r\n  option: string[],\r\n}\r\n\r\n@Component({\r\n  selector: 'ngx-tym-form',\r\n  template: `<pre></pre><form></form>`,\r\n  styleUrls: ['./tym-form.component.scss']\r\n})\r\nexport class TymFormComponent {\r\n\r\n  /**\r\n   * FORM用トークン\r\n   */\r\n  public static TYM_FORM_TOKEN = new InjectionToken<any>('TymForm');\r\n\r\n  private static idnum = 0;\r\n\r\n  public loading: Promise<string> = new Promise<string>(() => { });\r\n  private _defmap = new Map<string, DEF>();\r\n\r\n  private _thisElm: HTMLElement; // this table element\r\n  private _bkuptext: string = '';\r\n  private _borderLines: number[] = [];\r\n\r\n  @HostBinding('style.--fm-bo') protected formBorder!: string;\r\n  @HostBinding('style.--fm-co') protected formFontColor!: string;\r\n  @HostBinding('style.--fm-bg') protected formBackgroundColor!: string;\r\n  @HostBinding('style.--fm-ol') protected formFocusOutline!: string;\r\n  @HostBinding('style.--fm-ib') protected formInvalidBorder!: string;\r\n\r\n  @Input() vals: { [name: string]: string | string[] } = {}\r\n\r\n  @Input() set opts(opts: TYM_FORM_OPTS) {\r\n    if (!opts) return;\r\n    const thisElm = this._thisElm;\r\n    const style = thisElm.style;\r\n    const {\r\n      zoom, fontColor, fontFamily, tabSize, lineHeight16px,\r\n      borderStyle, borderColor, backgroundColor,\r\n      formBorder, formFontColor, formBackgroundColor,\r\n      formFocusOutline, formInvalidBorder } = opts;\r\n    if (fontColor) style.color = fontColor;\r\n    if (fontFamily) style.fontFamily = fontFamily;\r\n    if (tabSize) style.tabSize = tabSize;\r\n    style.lineHeight = (lineHeight16px?.toString() == 'true') ? '16px' : '';\r\n    setTimeout(() => {\r\n      const pre = thisElm.firstElementChild as HTMLPreElement;\r\n      const form = thisElm.lastElementChild as HTMLFormElement;\r\n      const prestyle = pre.style;\r\n      if (borderStyle) prestyle.borderStyle = borderStyle;\r\n      if (borderColor) prestyle.borderColor = borderColor;\r\n      if (backgroundColor) prestyle.backgroundColor = backgroundColor;\r\n      if (zoom) {\r\n        prestyle.transform = form.style.transform = `scale(${zoom})`;\r\n      }\r\n    });\r\n    //---------------------------------------------------------------\r\n    if (formBorder) this.formBorder = formBorder;\r\n    if (formFontColor) this.formFontColor = formFontColor;\r\n    if (formBackgroundColor) this.formBackgroundColor = formBackgroundColor;\r\n    if (formFocusOutline) this.formFocusOutline = formFocusOutline;\r\n    if (formInvalidBorder) this.formInvalidBorder = formInvalidBorder;\r\n    this._borderLines = opts.borderLines ?? [];\r\n    this._createForm(this._bkuptext);\r\n  }\r\n\r\n  @Input() set formText(text: string) { this._createForm(text) }\r\n\r\n  @Input() set formTextUrl(url: string) { this._setTextUrl(url) }\r\n\r\n  @Input() button = (event: MouseEvent, vals: any, varname: string) => { }\r\n\r\n  @Input() enter = (event: KeyboardEvent, vals: any, varname: string) => { }\r\n\r\n  /**\r\n   * コンストラクタ\r\n   *\r\n   * @param {ElementRef} _elmRef このディレクティブがセットされたDOMへの参照\r\n   * @param {Renderer2} _renderer DOMを操作用\r\n   * @param {any} _vals StaticProviderのuseValue値\r\n   * @memberof TymFormComponent\r\n   */\r\n  constructor(\r\n    private _elmRef: ElementRef,\r\n    private _renderer: Renderer2,\r\n    @Inject(TymFormComponent.TYM_FORM_TOKEN) private _vals: any,\r\n  ) {\r\n    this._thisElm = this._elmRef.nativeElement as HTMLElement;\r\n    if (_vals.vals) {\r\n      this.vals = _vals.vals;\r\n      if (_vals.opts) this.opts = _vals.opts;\r\n      if (_vals.button) this.button = _vals.button;\r\n      if (_vals.enter) this.enter = _vals.enter;\r\n      if (_vals.text) this._createForm(_vals.text);\r\n      if (_vals.texturl) this._setTextUrl(_vals.texturl);\r\n      Object.assign(this._thisElm.style, {\r\n        width: 'min-content',\r\n        height: 'min-content',\r\n        maxWidth: 'calc(100vw * .8)',\r\n        maxHeight: 'calc(100vh * .8)',\r\n        margin: 'auto',\r\n        position: 'fixed',\r\n        border: 'solid 1px #ccc',\r\n        borderRadius: '4px',\r\n        top: '0',\r\n        left: '0',\r\n        right: '0',\r\n        bottom: '0',\r\n        backgroundColor: '#fff',\r\n        padding: '8px',\r\n      } as CSSStyleDeclaration);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * borderLinesから罫線用のタグを作成する\r\n   */\r\n  private _createBorderLines() {\r\n    const pre = this._thisElm.firstElementChild as HTMLPreElement;\r\n    const { lineHeight } = window.getComputedStyle(pre);\r\n    const borderLines = this._borderLines;\r\n    const create_div_element = () => this._renderer.createElement('div') as HTMLDivElement;\r\n    let div1 = pre.nextElementSibling as HTMLDivElement;\r\n    if (div1 && div1.tagName == 'DIV') {\r\n      while (div1?.firstChild) { div1.removeChild(div1.firstChild); }\r\n    } else {\r\n      div1 = this._thisElm.insertBefore(create_div_element(), div1);\r\n    }\r\n    const div1Style = div1.style;\r\n    div1Style.width = `${pre.clientWidth - 16}px`;\r\n    div1Style.height = `${pre.clientHeight - 16}px`;\r\n    div1Style.transform = pre.style.transform;\r\n    const maxlinenum = Math.max(...borderLines);\r\n    for (let index = 1; index <= maxlinenum; index++) {\r\n      const div = div1.appendChild(create_div_element());\r\n      const divStyle = div.style;\r\n      divStyle.height = lineHeight;\r\n      divStyle.boxSizing = 'border-box';\r\n      if (borderLines.indexOf(index) >= 0) {\r\n        divStyle.borderBottom = 'solid 1px #ccc';\r\n      }\r\n    }\r\n    if (div1.firstElementChild && borderLines.indexOf(0) >= 0) {\r\n      (div1.firstElementChild as HTMLElement).style.borderTop = 'solid 1px #ccc';\r\n    }\r\n  }\r\n\r\n  /**\r\n   * urlからformテキストを読み込み表示する\r\n   * @param url url文字列\r\n   * @returns Promise<string>\r\n   */\r\n  private async _setTextUrl(url: string) {\r\n    if (!url) return Promise.resolve('err');\r\n    this.loading = fetch(url).then(res => {\r\n      if (res.ok) {\r\n        let p = res.text();\r\n        p.then(text => {\r\n          this._createForm(text);\r\n          return Promise.resolve('ok');\r\n        });\r\n        return p;\r\n      } else {\r\n        this._createForm(`load error.\\r\\n${url}`);\r\n        return Promise.resolve('err');\r\n      }\r\n    });\r\n    return this.loading;\r\n  }\r\n\r\n  /**\r\n   * formテキストを表示する\r\n   * @param text formテキスト\r\n   */\r\n  private _createForm(text: string) {\r\n    if (text) {\r\n      const [txt, def] = text.split('[DEF]', 2);\r\n      if (def != undefined) this._createDefMap(def);\r\n      if (txt.trim() != '') setTimeout(() => this._createView(txt));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 定義文字列から定義情報(map)を作成する\r\n   * @param defstext 定義文字列\r\n   */\r\n  private _createDefMap(defstext: string) {\r\n    if (!defstext) return;\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    this._defmap.clear();\r\n    defstext.split(/\\r\\n|\\n/)?.forEach(def => {\r\n      //{id}:{var name}:{type}:{inputmode}:{pattern}:{required}:{placeholder}:{title}:{line}:{option}\r\n      const [_id, varname, type, inputmode, pattern, required, placeholder, title, line, option] = def.split(':');\r\n      const id = _id.trim();\r\n      if (id == '' || id[0] == '#') return;\r\n      this._defmap.set(id, {\r\n        id: id,\r\n        varname: varname?.trim(),\r\n        type: type?.trim(),\r\n        inputmode: inputmode?.trim(),\r\n        pattern: pattern?.trim(),\r\n        required: required?.trim(),\r\n        placeholder: placeholder?.trim(),\r\n        title: title?.trim(),\r\n        line: parseInt(line?.trim()) || 1,\r\n        option: option?.trim().split(','),\r\n      })\r\n    });\r\n  }\r\n\r\n  /**\r\n   * 画面テキストと定義データから画面を表示する\r\n   * @param viewtext 画面テキスト\r\n   */\r\n  private _createView(viewtext: string) {\r\n    if (!viewtext) return;\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    const { vals, _thisElm, _defmap, _renderer } = this;\r\n    const pre = _thisElm.firstElementChild as HTMLPreElement;\r\n    const form = _thisElm.lastElementChild as HTMLFormElement;\r\n    while (form.firstChild) form.removeChild(form.firstChild);\r\n    const { lineHeight } = window.getComputedStyle(pre);\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    const create_text = (txt: string) => _renderer.createText(txt);\r\n    const create_element = (elm: string) => _renderer.createElement(elm);\r\n    const create_input_element = (type: string) => {\r\n      const elm = create_element('input') as HTMLInputElement;\r\n      elm.type = type;\r\n      return elm;\r\n    }\r\n    const create_textarea_element = () => create_element('textarea') as HTMLInputElement;\r\n    const create_label_element = () => create_element('label') as HTMLLabelElement;\r\n    const create_span_element = () => create_element('span') as HTMLSpanElement;\r\n    const create_select_element = () => create_element('select') as HTMLSelectElement;\r\n    const create_datalist_element = () => create_element('datalist') as HTMLDataListElement;\r\n    const create_option_element = () => create_element('option') as HTMLOptionElement;\r\n    /****************************************************************\r\n     * valsにメンバ変数/値を設定する\r\n     * @param varname 変数名文字列\r\n     * @param val 設定する値\r\n     * @returns \r\n     */\r\n    const set_prop = (varname: string, val: any) => {\r\n      if (vals.hasOwnProperty(varname) || val != '') vals[varname] = val;\r\n    }\r\n    /****************************************************************\r\n     * keypressイベントでEnterイベントを登録する\r\n     * @param elm エレメント\r\n     * @param def タグ用定義\r\n     */\r\n    const make_enter_event = (elm: HTMLElement, def: DEF) => {\r\n      elm.addEventListener('keypress', e => {\r\n        if (e.key == 'Enter') this.enter(e, vals, def.varname);\r\n      });\r\n    }\r\n    /****************************************************************\r\n     * input/textarea タグを作成する\r\n     * @param def タグ用定義\r\n     * @param type タグタイプ\r\n     * @returns エレメント\r\n     */\r\n    const make_input_elm = (def: DEF, type: string) => {\r\n      const input = (def.line > 1)\r\n        ? create_textarea_element()\r\n        : create_input_element(type);\r\n      input.name = def.varname;\r\n      input.addEventListener('change', e => {\r\n        const _input = e.target as HTMLInputElement;\r\n        set_prop(def.varname, _input.value);\r\n      });\r\n      make_enter_event(input, def);\r\n      if (def.inputmode) input.inputMode = def.inputmode;\r\n      if (def.pattern) input.pattern = def.pattern;\r\n      if (def.required) input.required = (def.required == 'y');\r\n      if (def.placeholder) input.placeholder = def.placeholder;\r\n      if (def.title) input.title = def.title;\r\n      if (def.option && def.type == 'datalist') {\r\n        const idName = '_tymform-' + TymFormComponent.idnum++;\r\n        input.setAttribute('list', idName);\r\n        const dl = create_datalist_element();\r\n        dl.id = idName;\r\n        def.option.forEach(o => {\r\n          const option = create_option_element();\r\n          option.value = o;\r\n          option.appendChild(create_text(o));\r\n          dl.appendChild(option);\r\n        });\r\n        form.appendChild(dl);\r\n      }\r\n      if (def.varname && vals && type != 'password') {\r\n        if (vals.hasOwnProperty(def.varname)) {\r\n          input.value = vals[def.varname] as string;\r\n        }\r\n      }\r\n      return input;\r\n    }\r\n    /****************************************************************\r\n     * input type=checkbox/radio タグを作成する\r\n     * @param def タグ用定義\r\n     * @param type タグタイプ\r\n     * @returns エレメント\r\n     */\r\n    const make_check_elm = (def: DEF, type: string) => {\r\n      const span = create_span_element();\r\n      make_enter_event(span, def);\r\n      const selvals: string[] =\r\n        (vals?.hasOwnProperty(def.varname)) ? vals[def.varname] as string[] : [];\r\n      def.option?.forEach(o => {\r\n        const label = create_label_element();\r\n        const input = create_input_element(type);\r\n        input.addEventListener('change', e => {\r\n          let rets: string[] = [];\r\n          span.querySelectorAll('input').forEach(e => {\r\n            if (e.checked) rets.push(e.value);\r\n          });\r\n          set_prop(def.varname, rets);\r\n        });\r\n        input.name = def.varname;\r\n        input.value = o;\r\n        if (selvals.indexOf(o) >= 0) input.checked = true;\r\n        label.appendChild(input);\r\n        label.appendChild(create_text(o));\r\n        span.appendChild(label);\r\n        span.appendChild(create_text(' '));\r\n      });\r\n      return span;\r\n    }\r\n    /****************************************************************\r\n     * input type=file タグを作成する\r\n     * @param def タグ用定義\r\n     * @param type タグタイプ\r\n     * @returns エレメント\r\n     */\r\n    const make_file_elm = (def: DEF, type: string) => {\r\n      const msg = def.option[0] || 'select file ...';\r\n      const label = create_label_element();\r\n      label.tabIndex = 0;\r\n      label.style.fontSize = '75%';\r\n      const input = create_input_element(type);\r\n      input.name = def.varname;\r\n      const text = create_text(msg);\r\n      make_enter_event(label, def);\r\n      label.addEventListener('keypress', e => {\r\n        if (e.key == ' ') {\r\n          input.dispatchEvent(new MouseEvent('click'));\r\n          e.preventDefault();\r\n        }\r\n      });\r\n      input.addEventListener('change', e => {\r\n        setTimeout(() => {\r\n          text.nodeValue = input.value || msg;\r\n          set_prop(def.varname, input.value);\r\n          label.style.fontSize = (input.value) ? '' : '75%';\r\n        });\r\n      });\r\n      label.appendChild(input);\r\n      label.appendChild(text);\r\n      return label;\r\n    }\r\n    /****************************************************************\r\n     * select/option タグを作成する\r\n     * @param def タグ用定義\r\n     * @param type タグタイプ\r\n     * @returns エレメント\r\n     */\r\n    const make_select_elm = (def: DEF, type: string) => {\r\n      const select = create_select_element();\r\n      make_enter_event(select, def);\r\n      select.addEventListener('change', e => {\r\n        set_prop(def.varname, select.value);\r\n      });\r\n      select.name = def.varname;\r\n      if (def.title) select.title = def.title;\r\n      const selval = (vals?.hasOwnProperty(def.varname)) ? vals[def.varname] : '';\r\n      def.option?.forEach(o => {\r\n        const option = create_option_element();\r\n        option.value = o;\r\n        if (selval == o) option.selected = true;\r\n        option.appendChild(create_text(o));\r\n        select.appendChild(option);\r\n      });\r\n      return select;\r\n    }\r\n    /****************************************************************\r\n     * input type=button/reset タグを作成する\r\n     * @param def タグ用定義\r\n     * @param type タグタイプ\r\n     * @returns エレメント\r\n     */\r\n    const make_button_elm = (def: DEF, type: string) => {\r\n      const button = create_input_element(type);\r\n      //ラベル,color,bgColor,method,action,target\r\n      if (def.option) {\r\n        const [label, color, bgColor, method, action, target] = def.option;\r\n        const style = button.style;\r\n        if (label) button.value = label;\r\n        if (color) style.color = color;\r\n        if (bgColor) style.backgroundColor = bgColor;\r\n        if (type == 'submit') {\r\n          if (method) form.method = method;\r\n          if (action) form.action = action;\r\n          if (target) form.target = target;\r\n        }\r\n      }\r\n      button.addEventListener('click', e => {\r\n        if (type == 'reset') {\r\n          setTimeout(() => {\r\n            form.querySelectorAll('input,select,textarea').forEach(e => {\r\n              e.dispatchEvent(new Event('change'));\r\n            });\r\n            this.button(e, vals, def.varname);\r\n          });\r\n        } else {\r\n          this.button(e, vals, def.varname);\r\n        }\r\n      });\r\n      return button;\r\n    }\r\n    /****************************************************************\r\n     * テキスト表示時のサイズ(幅)を求める\r\n     * @param txt テキスト\r\n     * @returns サイズ(px)\r\n     */\r\n    const getsize = (txt: string) =>\r\n      (calc_prex.innerText = txt, calc_prex.clientWidth);\r\n    /****************************************************************\r\n     * 各タグを作成する\r\n     * @param matches テキスト分割正規表現\r\n     * @param line 行位置\r\n     */\r\n    const create_elm = (matches: RegExpExecArray, line: number) => {\r\n      const prev = matches.input.substring(0, matches.index);\r\n      const hits = matches[1];\r\n      const v = hits.charAt(1);\r\n      const def = _defmap.get(v);\r\n      if (!def) return;\r\n      //-------------------------------------------------------------\r\n      const type = def.type || 'text';\r\n      const spec = ['checkbox', 'radio', 'file', 'select', 'reset', 'button', 'submit'];\r\n      const fncs = [\r\n        make_check_elm, make_check_elm, make_file_elm,\r\n        make_select_elm, make_button_elm, make_button_elm, make_button_elm];\r\n      const idx = spec.indexOf(type);\r\n      const elm = (idx == -1) ? make_input_elm(def, type) : fncs[idx](def, type);\r\n      Object.assign(elm.style, {\r\n        top: `calc(${lineHeight} * ${line} + 8px)`,\r\n        left: `calc(${getsize(prev)}px - 8px)`,  //padding分\r\n        width: `calc(${getsize(hits)}px - 16px)`,//padding分\r\n        height: `calc(${lineHeight} * ${def.line} - 1px)`,\r\n      } as CSSStyleDeclaration);\r\n      form.appendChild(elm);\r\n    }\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    pre.innerText = viewtext;\r\n    form.style.width = `${pre.clientWidth - 16}px`;\r\n    form.style.height = `${pre.clientHeight - 16}px`;\r\n    const scales = window.getComputedStyle(pre).transform.split(/[(,)]/);\r\n    _thisElm.style.width = `calc(${pre.clientWidth + 10}px * ${(scales.length >= 5) ? scales[1] : 1})`;\r\n    _thisElm.style.height = `calc(${pre.clientHeight + 10}px * ${(scales.length >= 5) ? scales[4] : 1})`;\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    const calc_prex = create_element('pre');\r\n    _thisElm.appendChild(calc_prex);\r\n    const re = /(\\[[a-z][ \\t　]*\\])/g;\r\n    viewtext.split(/\\r\\n|\\n/).forEach((tx, line) => {\r\n      let matches;\r\n      while ((matches = re.exec(tx)) != null) {\r\n        create_elm(matches, line);\r\n      }\r\n    });\r\n    calc_prex.parentElement.removeChild(calc_prex);\r\n    this._bkuptext = viewtext;\r\n    if (form.querySelector('input[type=file]')) {\r\n      form.enctype = 'multipart/form-data';\r\n    }\r\n    this._createBorderLines();\r\n  }\r\n\r\n  /**\r\n   * StaticProviderのuseValue値の生成\r\n   * @param vals val names object\r\n   * @param text form text\r\n   * @param texturl form text url\r\n   * @param opts custom options\r\n   * @param button button click event function\r\n   * @param enter press enter key event function\r\n   * @returns FORM画面用StaticProvider\r\n   */\r\n  public static provider(\r\n    vals: any,\r\n    text: string,\r\n    texturl: string,\r\n    opts?: TYM_FORM_OPTS,\r\n    button?: (event: MouseEvent, vals: any, varname: string) => void,\r\n    enter?: (event: KeyboardEvent, vals: any, varname: string) => void,\r\n  ): StaticProvider {\r\n    return {\r\n      provide: TymFormComponent.TYM_FORM_TOKEN,\r\n      useValue: {\r\n        vals: vals,\r\n        text: text,\r\n        texturl: texturl,\r\n        button: button,\r\n        enter: enter,\r\n        opts: opts,\r\n      }\r\n    }\r\n  }\r\n}","/*!\r\n * tym-form.js\r\n * Copyright (c) 2022 shinichi tayama\r\n * Released under the MIT license.\r\n * see https://opensource.org/licenses/MIT\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { TymFormComponent } from './tym-form.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    TymFormComponent\r\n  ],\r\n  imports: [\r\n  ],\r\n  exports: [\r\n    TymFormComponent\r\n  ],\r\n  providers: [\r\n    { provide: TymFormComponent.TYM_FORM_TOKEN, useValue: {} }\r\n  ]\r\n})\r\nexport class TymFormModule { }\r\n","/*\r\n * Public API Surface of tym-form\r\n */\r\n\r\nexport * from './lib/tym-form.component';\r\nexport * from './lib/tym-form.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}