@3t-transform/threeteeui 0.2.115 → 0.2.116

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.
@@ -190,7 +190,7 @@ const TttxForm = class {
190
190
  */
191
191
  async setSelectOptions(fieldname, options) {
192
192
  const select = this.fieldset.querySelector(`[name=${fieldname}]`);
193
- select.innerHTML = '';
193
+ const tttxSelect = this.fieldset.querySelector(`[name=overlay-${fieldname}]`);
194
194
  const fragment = new DocumentFragment();
195
195
  for (const option of options) {
196
196
  const o = document.createElement('option');
@@ -198,7 +198,10 @@ const TttxForm = class {
198
198
  o.value = option.value;
199
199
  fragment.appendChild(o);
200
200
  }
201
- select.appendChild(fragment);
201
+ select.replaceChildren(fragment);
202
+ tttxSelect.optionsData = options;
203
+ //await tttxSelect.setOptionsData(options);
204
+ await tttxSelect.setSelectedItem(options[0].value);
202
205
  }
203
206
  /**
204
207
  * Submits the form data to the server.
@@ -255,7 +258,7 @@ const TttxForm = class {
255
258
  * @param {boolean} [formProperties.options[].placeholder]
256
259
  */
257
260
  createSelect(formKey, formProperties) {
258
- var _a;
261
+ var _a, _b, _c, _d;
259
262
  const select = document.createElement('select');
260
263
  select.setAttribute('name', formKey);
261
264
  formProperties.options.forEach(optionProperties => {
@@ -263,7 +266,22 @@ const TttxForm = class {
263
266
  });
264
267
  if ((_a = this._data) === null || _a === void 0 ? void 0 : _a[formKey])
265
268
  select.classList.remove('placeholder');
266
- return select;
269
+ const tttxSelect = document.createElement('tttx-select-box');
270
+ tttxSelect.optionsData = (_b = formProperties.options) === null || _b === void 0 ? void 0 : _b.filter(o => !o.placeholder);
271
+ tttxSelect.placeholder = (_d = (_c = formProperties.options) === null || _c === void 0 ? void 0 : _c.filter(o => o.placeholder)[0]) === null || _d === void 0 ? void 0 : _d.label;
272
+ tttxSelect.inline = false;
273
+ tttxSelect.searchEnabled = true;
274
+ tttxSelect.style.width = '100%';
275
+ tttxSelect.style.marginTop = '6px';
276
+ tttxSelect.setAttribute('name', 'overlay-' + formKey);
277
+ const fragment = document.createDocumentFragment();
278
+ fragment.append(tttxSelect);
279
+ select.style.display = 'none';
280
+ tttxSelect.addEventListener('selectItemEvent', function (ev) {
281
+ select.value = ev.detail.value;
282
+ select.onblur({ target: select });
283
+ });
284
+ return { input: select, overlay: fragment };
267
285
  }
268
286
  /**
269
287
  * Appends an option to a select element
@@ -491,10 +509,11 @@ const TttxForm = class {
491
509
  *
492
510
  * @param {Record<string, any>} formProperties - An object containing properties for the form field, including its label text and validation rules.
493
511
  * @param {HTMLInputElement | HTMLSelectElement} input - The input element to associate with the label.
512
+ * @param {never} overlay - The Child Element which will be rendered atop the standard HTML5 element
494
513
  * @param {HTMLDivElement} errorBubble - The error bubble element to display error messages in.
495
514
  * @return {HTMLLabelElement} - The new label element.
496
515
  */
497
- createLabel(formProperties, input, errorBubble) {
516
+ createLabel(formProperties, input, overlay, errorBubble) {
498
517
  var _a;
499
518
  const outerContainer = document.createElement('div');
500
519
  let outerContainerClassName = 'outer-container inputBlock';
@@ -520,6 +539,9 @@ const TttxForm = class {
520
539
  }
521
540
  else {
522
541
  // Append the input element and error bubble element to the outerContainer
542
+ if (overlay) {
543
+ outerContainer.appendChild(overlay);
544
+ }
523
545
  outerContainer.appendChild(input);
524
546
  }
525
547
  if (formProperties.type !== 'checkbox') {
@@ -589,33 +611,33 @@ const TttxForm = class {
589
611
  this.template.content.append(end);
590
612
  continue;
591
613
  }
592
- let input;
614
+ let fragments = {};
593
615
  switch (formProperties.type) {
594
616
  case 'select':
595
- input = this.createSelect(formKey, formProperties);
617
+ fragments = this.createSelect(formKey, formProperties);
596
618
  break;
597
619
  case 'radio':
598
- input = this.createRadio(formKey, formProperties);
620
+ fragments.input = this.createRadio(formKey, formProperties);
599
621
  break;
600
622
  case 'textarea':
601
- input = this.createTextArea(formKey, formProperties);
623
+ fragments.input = this.createTextArea(formKey, formProperties);
602
624
  break;
603
625
  default:
604
- input = this.createInput(formKey, formProperties);
626
+ fragments.input = this.createInput(formKey, formProperties);
605
627
  }
606
628
  // If the form property has validation, apply it to the input
607
629
  if (formProperties.validation &&
608
630
  formProperties.type !== 'radio') {
609
- this.applyValidation(input, formProperties.validation);
631
+ this.applyValidation(fragments.input, formProperties.validation);
610
632
  }
611
633
  // Create an error bubble and label element for the input
612
634
  const errorBubble = this.createErrorBubble();
613
- const label = this.createLabel(formProperties, input, errorBubble);
635
+ const label = this.createLabel(formProperties, fragments.input, fragments.overlay, errorBubble);
614
636
  // If explicitly setting input as invalid, set invalid state and error message on render
615
637
  if ((_a = formProperties.validation) === null || _a === void 0 ? void 0 : _a.invalid) {
616
638
  const errorMessage = formProperties.validation.invalid.message;
617
- input.setCustomValidity(errorMessage); // Prevents the invalid styling from resetting on blur
618
- setErrorState(input, true, errorMessage);
639
+ fragments.input.setCustomValidity(errorMessage); // Prevents the invalid styling from resetting on blur
640
+ setErrorState(fragments.input, true, errorMessage);
619
641
  }
620
642
  // Append the label element to the form template
621
643
  this.template.content.append(label);
@@ -636,7 +658,7 @@ const TttxForm = class {
636
658
  return;
637
659
  }
638
660
  // Clone the template's content and store it in a variable
639
- const formItems = this.template.content.cloneNode(true);
661
+ const formItems = this.template.content;
640
662
  // Bind event listeners to form elements
641
663
  const properties = this._formSchema.properties;
642
664
  const propertyKeys = Object.keys(properties);
@@ -684,6 +706,11 @@ const TttxForm = class {
684
706
  formItem.checked = true;
685
707
  }
686
708
  break;
709
+ case 'select':
710
+ case 'select-one':
711
+ formItems.querySelector(`[name=overlay-${key}]`).selectedValue = this._data[key];
712
+ formItem.value = this._data[key];
713
+ break;
687
714
  default:
688
715
  formItem.value = this._data[key];
689
716
  }
@@ -22,12 +22,23 @@ const TttxSelectBox = class {
22
22
  }
23
23
  async componentWillLoad() {
24
24
  if (this.optionsData) {
25
- // attempt to preselect an item if specified
26
- const parsedOptionsData = (typeof this.optionsData === 'string') ? JSON.parse(this.optionsData) : this.optionsData;
27
- const matchingItems = parsedOptionsData.filter((item) => { return item.value == this.selectedValue; });
25
+ this.setOptionsData();
26
+ const matchingItems = this._optionsData.filter((item) => { return item.value == this.selectedValue; });
28
27
  this.selectedItem = (matchingItems.length > 0) ? matchingItems[0] : undefined;
29
28
  }
30
29
  }
30
+ async setOptionsData() {
31
+ this._optionsData = typeof this.optionsData === 'string' ? JSON.parse(this.optionsData) : this.optionsData;
32
+ }
33
+ async setSelectedItem(value) {
34
+ if (!value)
35
+ return;
36
+ const item = this._optionsData.find(x => x.value.toLowerCase() === value.toLowerCase());
37
+ if (!item)
38
+ return;
39
+ this.selectedValue = item.value;
40
+ this.selectedItem = item;
41
+ }
31
42
  handleCloseSelectBox() {
32
43
  this.open = false;
33
44
  }
@@ -107,7 +118,6 @@ const TttxSelectBox = class {
107
118
  render() {
108
119
  if (!this.optionsData)
109
120
  return;
110
- this._optionsData = typeof this.optionsData === 'string' ? JSON.parse(this.optionsData) : this.optionsData;
111
121
  return (h(Host, { class: this.inline ? 'inline' : 'block' }, this.label && h("div", { class: "label" }, this.label), h("div", { tabindex: "0", class: "dropdown-container" }, h("div", { class: "dropdown-selector", ref: (el) => this.dropdownSelector = el, onClick: this.onDropdownClicked.bind(this) }, this.dropdownSelectorContent()), this.open && (h("div", { class: "dropdown-body-container" }, h("div", { class: "dropdown-body", style: Object.assign({ width: `${this.dropdownSelector.offsetWidth}px` }, this.bodyOffset) }, this.searchEnabled &&
112
122
  /* istanbul ignore next */
113
123
  h("div", { class: "searchbox" }, h("tttx-standalone-input", { type: "text", label: "", required: true, showerrorbubble: false, iconleft: 'search', onInput: this.handleSearchInput.bind(this) })), h("div", { class: "dropdown-options-list" }, this._optionsData.map((option) => {
@@ -115,6 +125,9 @@ const TttxSelectBox = class {
115
125
  }))))))));
116
126
  }
117
127
  get el() { return getElement(this); }
128
+ static get watchers() { return {
129
+ "optionsData": ["setOptionsData"]
130
+ }; }
118
131
  };
119
132
  TttxSelectBox.style = tttxSelectBoxCss;
120
133
 
package/dist/esm/tttx.js CHANGED
@@ -14,5 +14,5 @@ const patchBrowser = () => {
14
14
  };
15
15
 
16
16
  patchBrowser().then(options => {
17
- return bootstrapLazy([["tttx-data-pattern",[[1,"tttx-data-pattern",{"data":[1],"sorteroptions":[1],"filteroptions":[1],"filterheader":[1]}]]],["tttx-multiselect-box",[[1,"tttx-multiselect-box",{"optionsData":[1,"options-data"],"label":[1],"inline":[4],"placeholder":[1],"searchEnabled":[4,"search-enabled"],"htmlVisibleValue":[4,"html-visible-value"],"visibleValue":[1,"visible-value"],"open":[32],"unsavedSelectedItems":[32],"searchTerm":[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["tttx-dialog-box",[[1,"tttx-dialog-box",{"data":[1025],"size":[1],"open":[1028],"allowOverflow":[4,"allow-overflow"],"elementSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-select-box",[[1,"tttx-select-box",{"optionsData":[1,"options-data"],"label":[1],"inline":[4],"placeholder":[1],"searchEnabled":[4,"search-enabled"],"selectedValue":[1,"selected-value"],"open":[32],"selectedItem":[32],"searchTerm":[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["tttx-tree-view",[[1,"tttx-tree-view",{"data":[1040],"firstSelected":[1028,"first-selected"],"treeData":[32],"selectedId":[32]}]]],["tttx-checkbox",[[0,"tttx-checkbox",{"checkboxId":[1,"checkbox-id"],"label":[1],"inline":[4],"indeterminate":[4],"checked":[4]}]]],["tttx-dialog",[[1,"tttx-dialog",{"header":[1],"type":[1],"size":[1],"open":[4],"allowOverflow":[4,"allow-overflow"],"closeEnabled":[4,"close-enabled"],"elementSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-expander",[[1,"tttx-expander",{"name":[1],"open":[4],"lefticon":[1],"lefticoncolor":[1],"isExpanded":[32]}]]],["tttx-tabs",[[2,"tttx-tabs",{"tabsName":[1,"tabs-name"],"navigation":[4],"wide":[4],"tabs":[1],"_tabs":[32]},[[0,"keydown","handleKeyDown"]]]]],["tttx-checkbox-group",[[1,"tttx-checkbox-group"]]],["tttx-checkbox-group-caption",[[4,"tttx-checkbox-group-caption"]]],["tttx-checkbox-group-heading",[[4,"tttx-checkbox-group-heading"]]],["tttx-form",[[1,"tttx-form",{"formschema":[1025],"data":[1032],"submit":[64],"setSelectOptions":[64]}]]],["tttx-keyvalue-block",[[1,"tttx-keyvalue-block",{"keyvalues":[1],"horizontal":[4],"spacedout":[4],"_elements":[32]}]]],["tttx-loading-spinner",[[1,"tttx-loading-spinner",{"loadingMessage":[1028,"loading-message"],"size":[1025]}]]],["tttx-percentage-bar",[[2,"tttx-percentage-bar",{"percentage":[8],"thresholds":[1],"color":[1],"min":[1],"labelid":[1],"_percentage":[32],"_ranges":[32],"_min":[32]}]]],["tttx-qrcode",[[1,"tttx-qrcode",{"link":[1025],"size":[1026]}]]],["tttx-tag",[[1,"tttx-tag",{"text":[1],"color":[1],"textColor":[1,"text-color"]}]]],["tttx-textarea",[[2,"tttx-textarea",{"label":[1],"secondarylabel":[1],"showerrormsg":[4],"showerrorbubble":[4],"errormsg":[1],"rows":[2],"textareaautofocus":[4],"inputkeyhint":[1],"inputindex":[8],"inputtitle":[1],"disabled":[4],"maxlength":[8],"name":[1],"placeholder":[1],"readonly":[8],"required":[4],"value":[1032]}]]],["tttx-icon",[[1,"tttx-icon",{"icon":[1],"color":[1]}]]],["tttx-standalone-input",[[2,"tttx-standalone-input",{"label":[1],"secondarylabel":[1],"showerrormsg":[4],"showerrorbubble":[4],"errormsg":[1],"iconleft":[1],"iconleftcolor":[1],"iconright":[1],"iconrightcolor":[1],"inputicon":[1],"inputiconcolor":[1],"inline":[4],"inputautocapitalize":[1],"inputautofocus":[4],"inputkeyhint":[1],"inputindex":[8],"inputtitle":[1],"autocomplete":[1],"checked":[4],"disabled":[4],"max":[8],"maxlength":[8],"min":[8],"minlength":[8],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[8],"required":[4],"step":[8],"type":[1],"value":[1032]}]]],["tttx-filter_4",[[1,"tttx-filter",{"filterKey":[1,"filter-key"],"filterOptions":[1,"filter-options"],"showSelectAll":[4,"show-select-all"],"showSearchField":[4,"show-search-field"],"showOptionIcons":[4,"show-option-icons"],"filterButtonStyle":[1,"filter-button-style"],"filterHeader":[1,"filter-header"],"defaultFilterOptions":[1,"default-filter-options"],"popoverWidth":[1,"popover-width"],"showPopover":[32],"displayedFilterSettings":[32],"selectedFilters":[32],"filterSearchTerm":[32],"allSelected":[32]},[[0,"closeFilter","handleCloseFilter"]]],[1,"tttx-list",{"data":[1025],"name":[1],"_data":[32]}],[1,"tttx-sorter",{"sorterKey":[1,"sorter-key"],"defaultSortDirection":[1,"default-sort-direction"],"fieldOptionsData":[1,"field-options-data"],"defaultOption":[1,"default-option"],"selectedField":[32],"sortDirection":[32],"dropdownExpand":[32],"dropdownOptions":[32]},[[0,"closeSorter","handleCloseSorter"]]],[1,"tttx-toolbar",{"border":[4],"viewSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-button",[[1,"tttx-button",{"notext":[4],"icon":[1],"iconposition":[1],"iconcolor":[1025],"design":[1]}]]]], options);
17
+ return bootstrapLazy([["tttx-data-pattern",[[1,"tttx-data-pattern",{"data":[1],"sorteroptions":[1],"filteroptions":[1],"filterheader":[1]}]]],["tttx-form",[[1,"tttx-form",{"formschema":[1025],"data":[1032],"submit":[64],"setSelectOptions":[64]}]]],["tttx-multiselect-box",[[1,"tttx-multiselect-box",{"optionsData":[1,"options-data"],"label":[1],"inline":[4],"placeholder":[1],"searchEnabled":[4,"search-enabled"],"htmlVisibleValue":[4,"html-visible-value"],"visibleValue":[1,"visible-value"],"open":[32],"unsavedSelectedItems":[32],"searchTerm":[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["tttx-dialog-box",[[1,"tttx-dialog-box",{"data":[1025],"size":[1],"open":[1028],"allowOverflow":[4,"allow-overflow"],"elementSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-tree-view",[[1,"tttx-tree-view",{"data":[1040],"firstSelected":[1028,"first-selected"],"treeData":[32],"selectedId":[32]}]]],["tttx-checkbox",[[0,"tttx-checkbox",{"checkboxId":[1,"checkbox-id"],"label":[1],"inline":[4],"indeterminate":[4],"checked":[4]}]]],["tttx-dialog",[[1,"tttx-dialog",{"header":[1],"type":[1],"size":[1],"open":[4],"allowOverflow":[4,"allow-overflow"],"closeEnabled":[4,"close-enabled"],"elementSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-expander",[[1,"tttx-expander",{"name":[1],"open":[4],"lefticon":[1],"lefticoncolor":[1],"isExpanded":[32]}]]],["tttx-tabs",[[2,"tttx-tabs",{"tabsName":[1,"tabs-name"],"navigation":[4],"wide":[4],"tabs":[1],"_tabs":[32]},[[0,"keydown","handleKeyDown"]]]]],["tttx-checkbox-group",[[1,"tttx-checkbox-group"]]],["tttx-checkbox-group-caption",[[4,"tttx-checkbox-group-caption"]]],["tttx-checkbox-group-heading",[[4,"tttx-checkbox-group-heading"]]],["tttx-keyvalue-block",[[1,"tttx-keyvalue-block",{"keyvalues":[1],"horizontal":[4],"spacedout":[4],"_elements":[32]}]]],["tttx-loading-spinner",[[1,"tttx-loading-spinner",{"loadingMessage":[1028,"loading-message"],"size":[1025]}]]],["tttx-percentage-bar",[[2,"tttx-percentage-bar",{"percentage":[8],"thresholds":[1],"color":[1],"min":[1],"labelid":[1],"_percentage":[32],"_ranges":[32],"_min":[32]}]]],["tttx-qrcode",[[1,"tttx-qrcode",{"link":[1025],"size":[1026]}]]],["tttx-tag",[[1,"tttx-tag",{"text":[1],"color":[1],"textColor":[1,"text-color"]}]]],["tttx-textarea",[[2,"tttx-textarea",{"label":[1],"secondarylabel":[1],"showerrormsg":[4],"showerrorbubble":[4],"errormsg":[1],"rows":[2],"textareaautofocus":[4],"inputkeyhint":[1],"inputindex":[8],"inputtitle":[1],"disabled":[4],"maxlength":[8],"name":[1],"placeholder":[1],"readonly":[8],"required":[4],"value":[1032]}]]],["tttx-icon",[[1,"tttx-icon",{"icon":[1],"color":[1]}]]],["tttx-select-box",[[1,"tttx-select-box",{"optionsData":[1,"options-data"],"label":[1],"inline":[4],"placeholder":[1],"searchEnabled":[4,"search-enabled"],"selectedValue":[1,"selected-value"],"open":[32],"selectedItem":[32],"searchTerm":[32],"setSelectedItem":[64]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["tttx-filter_4",[[1,"tttx-filter",{"filterKey":[1,"filter-key"],"filterOptions":[1,"filter-options"],"showSelectAll":[4,"show-select-all"],"showSearchField":[4,"show-search-field"],"showOptionIcons":[4,"show-option-icons"],"filterButtonStyle":[1,"filter-button-style"],"filterHeader":[1,"filter-header"],"defaultFilterOptions":[1,"default-filter-options"],"popoverWidth":[1,"popover-width"],"showPopover":[32],"displayedFilterSettings":[32],"selectedFilters":[32],"filterSearchTerm":[32],"allSelected":[32]},[[0,"closeFilter","handleCloseFilter"]]],[1,"tttx-list",{"data":[1025],"name":[1],"_data":[32]}],[1,"tttx-sorter",{"sorterKey":[1,"sorter-key"],"defaultSortDirection":[1,"default-sort-direction"],"fieldOptionsData":[1,"field-options-data"],"defaultOption":[1,"default-option"],"selectedField":[32],"sortDirection":[32],"dropdownExpand":[32],"dropdownOptions":[32]},[[0,"closeSorter","handleCloseSorter"]]],[1,"tttx-toolbar",{"border":[4],"viewSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-button",[[1,"tttx-button",{"notext":[4],"icon":[1],"iconposition":[1],"iconcolor":[1025],"design":[1]}]]],["tttx-standalone-input",[[2,"tttx-standalone-input",{"label":[1],"secondarylabel":[1],"showerrormsg":[4],"showerrorbubble":[4],"errormsg":[1],"iconleft":[1],"iconleftcolor":[1],"iconright":[1],"iconrightcolor":[1],"inputicon":[1],"inputiconcolor":[1],"inline":[4],"inputautocapitalize":[1],"inputautofocus":[4],"inputkeyhint":[1],"inputindex":[8],"inputtitle":[1],"autocomplete":[1],"checked":[4],"disabled":[4],"max":[8],"maxlength":[8],"min":[8],"minlength":[8],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[8],"required":[4],"step":[8],"type":[1],"value":[1032]}]]]], options);
18
18
  });
@@ -0,0 +1 @@
1
+ import{r as e,c as t,h as o,H as i}from"./p-65bb4035.js";import{p as n,d as r}from"./p-88ee2406.js";import"./p-112455b1.js";function a(e,t,o,i){let n;if(n=void 0!==i?i.querySelector(".errorBubble"):"label"===e.parentElement.nodeName.toLowerCase()?e.parentElement.querySelector(".errorBubble"):e.parentElement.parentElement.querySelector(".errorBubble"),n)if(t){e.classList.add("invalid"),n.classList.add("visible");const t=document.createElement("span");t.className="material-symbols-rounded",t.textContent="warning",n.innerHTML="",n.append(t),n.append(o)}else n.classList.remove("visible"),e.classList.remove("invalid"),n.innerHTML=""}const l=class{constructor(o){e(this,o),this.dataSubmitted=t(this,"dataSubmitted",7),this.dataChanged=t(this,"dataChanged",7),this.template=document.createElement("template"),this.formschema=void 0,this.data=void 0}onFormSchemaChange(e){if(!this.data&&this.form&&this._formSchema){const e=new FormData(this.form);this._data=Object.fromEntries(Object.keys(this._formSchema.properties).map((t=>[t,e.get(t)])))}this._formSchema="string"==typeof e?JSON.parse(e):e}onDataChange(e){this._data="string"==typeof e?JSON.parse(e):e}fieldChanged(e){this.dataChanged.emit({name:e.target.name,value:e.target.value})}async submit(){this.submitButton.click()}async setSelectOptions(e,t){const o=this.fieldset.querySelector(`[name=${e}]`),i=this.fieldset.querySelector(`[name=overlay-${e}]`),n=new DocumentFragment;for(const e of t){const t=document.createElement("option");t.innerText=e.label,t.value=e.value,n.appendChild(t)}o.replaceChildren(n),i.optionsData=t,await i.setSelectedItem(t[0].value)}doSubmit(e){e.preventDefault();const t=new FormData(e.target),o=this._formSchema.properties;for(const e of Object.keys(o))"checkbox"!==o[e].form.type||t.has(e)||t.append(e,"off");this.dataSubmitted.emit(t)}componentWillLoad(){this.onFormSchemaChange(this.formschema),this.data&&this.onDataChange(this.data)}componentWillRender(){this.template=document.createElement("template"),this.populateFormFromSchema()}createSelect(e,t){var o,i,n,r;const a=document.createElement("select");a.setAttribute("name",e),t.options.forEach((e=>{this.appendOption(a,e)})),(null===(o=this._data)||void 0===o?void 0:o[e])&&a.classList.remove("placeholder");const l=document.createElement("tttx-select-box");l.optionsData=null===(i=t.options)||void 0===i?void 0:i.filter((e=>!e.placeholder)),l.placeholder=null===(r=null===(n=t.options)||void 0===n?void 0:n.filter((e=>e.placeholder))[0])||void 0===r?void 0:r.label,l.inline=!1,l.searchEnabled=!0,l.style.width="100%",l.style.marginTop="6px",l.setAttribute("name","overlay-"+e);const s=document.createDocumentFragment();return s.append(l),a.style.display="none",l.addEventListener("selectItemEvent",(function(e){a.value=e.detail.value,a.onblur({target:a})})),{input:a,overlay:s}}appendOption(e,t){const o=document.createElement("option");o.setAttribute("value",t.value),t.placeholder&&(o.setAttribute("disabled",""),o.setAttribute("selected",""),o.setAttribute("hidden",""),e.classList.add("placeholder")),t.label&&(o.innerHTML=n.sanitize(t.label,r)),e.appendChild(o)}createInput(e,t){var o;const i=document.createElement("input");return i.type=t.type,i.name=e,i.placeholder=null!==(o=t.placeholder)&&void 0!==o?o:"",i.autocomplete="off",i.autocapitalize="off",t.readonly&&(i.readOnly=!0),i}createTextArea(e,t){var o;const i=document.createElement("textarea");return i.name=e,i.placeholder=null!==(o=t.placeholder)&&void 0!==o?o:"",i.autocomplete="off",i.autocapitalize="off",t.readonly&&(i.readOnly=!0),i}createStartEndDateComponent(e,t){const o=document.createElement("input"),i=document.createElement("input");let n,r;o.type=i.type="date",o.name=`${e}-startdate`,i.name=`${e}-enddate`,o.setAttribute("data-formkey",e),i.setAttribute("data-formkey",e),t.readonly&&(o.readOnly=!0,i.readOnly=!0),this.applyValidation(o,{required:{message:"Please enter a start date"},dateCompare:{to:i.name}}),this.applyValidation(i,{required:{message:"Please enter an end date"},dateCompare:{with:o.name,message:"End date cannot be before the start date"}}),t.includeTime&&(n=document.createElement("input"),r=document.createElement("input"),n.type=r.type="time",n.name=`${e}-starttime`,r.name=`${e}-endtime`,n.setAttribute("data-formkey",e),r.setAttribute("data-formkey",e),t.readonly&&(n.readOnly=!0,r.readOnly=!0),this.applyValidation(n,{required:{message:"Please enter a start time"}}),this.applyValidation(r,{required:{message:"Please enter an end time"}}));const a=document.createElement("label");a.innerText="Start date";const l=document.createElement("label");l.innerText="End date";const s=document.createElement("div"),d=document.createElement("div");return s.className=d.className="outer-container inputBlock",a.className=l.className="flex-label",s.append(o),n&&s.append(n),a.append(s),a.append(this.createErrorBubble()),d.append(i),r&&d.append(r),l.append(d),l.append(this.createErrorBubble()),{start:a,end:l}}applyValidation(e,t){var o,i;t.required&&(e.setAttribute("required",""),e.setAttribute("data-required",null!==(o=t.required.message)&&void 0!==o?o:"")),t.pattern&&(e.setAttribute("pattern",t.pattern.pattern),e.setAttribute("data-pattern",null!==(i=t.pattern.message)&&void 0!==i?i:"")),t.badInput&&e.setAttribute("data-badinput",t.badInput.message),t.minmax&&(e.setAttribute("min",t.minmax.min),e.setAttribute("max",t.minmax.max),e.setAttribute("data-range",t.minmax.message)),t.maxlength&&e.setAttribute("maxlength",t.maxlength),t.dateCompare&&(t.dateCompare.message&&t.dateCompare.with&&(e.setAttribute("data-compare",t.dateCompare.message),e.setAttribute("data-compare-with",t.dateCompare.with)),t.dateCompare.to&&e.setAttribute("data-compare-to",t.dateCompare.to))}createErrorBubble(){const e=document.createElement("div");return e.className="errorBubble",e}appendCheckboxInput(e,t,o){if(e.label){const e=document.createElement("br");o.appendChild(e)}if(o.appendChild(t),!e.inlineLabel)return;const i=document.createElement("span");i.className="inlineLabel",i.textContent=e.inlineLabel,o.appendChild(i)}createLabel(e,t,o,i){var n;const r=document.createElement("div");let a="outer-container inputBlock";const l=document.createElement("label");if(l.innerText=e.label,!(null===(n=e.validation)||void 0===n?void 0:n.required)&&e.label){const e=document.createElement("span");e.className="optional",e.innerHTML="&nbsp;(optional)",l.appendChild(e)}return"radio"===e.type&&(a+=" radioBlock"),r.className=a,e.readonly&&l.classList.add("readonly"),"checkbox"===e.type?this.appendCheckboxInput(e,t,l):(o&&r.appendChild(o),r.appendChild(t)),"checkbox"!==e.type&&l.appendChild(r),l.appendChild(i),l}createRadio(e,t){var o,i;const n=new DocumentFragment;for(const r of t.options){const a=document.createElement("input");a.type="radio",a.name=e,a.value=r.value,(null===(o=null==t?void 0:t.validation)||void 0===o?void 0:o.required)&&(a.setAttribute("required","required"),a.setAttribute("data-required",null!==(i=t.validation.required.message)&&void 0!==i?i:""));const l=document.createElement("span");l.innerText=r.label,n.appendChild(a),n.appendChild(l),n.appendChild(document.createElement("br"))}return n}populateFormFromSchema(){var e;if(!this._formSchema)return;const t=this._formSchema.properties,o=Object.keys(t);for(const i of o){const o=t[i].form;if("startenddate"===o.type){const{start:e,end:t}=this.createStartEndDateComponent(i,o);this.template.content.append(e),this.template.content.append(t);continue}let n={};switch(o.type){case"select":n=this.createSelect(i,o);break;case"radio":n.input=this.createRadio(i,o);break;case"textarea":n.input=this.createTextArea(i,o);break;default:n.input=this.createInput(i,o)}o.validation&&"radio"!==o.type&&this.applyValidation(n.input,o.validation);const r=this.createErrorBubble(),l=this.createLabel(o,n.input,n.overlay,r);if(null===(e=o.validation)||void 0===e?void 0:e.invalid){const e=o.validation.invalid.message;n.input.setCustomValidity(e),a(n.input,!0,e)}this.template.content.append(l)}}componentDidRender(){if(!this._formSchema)return;const e=this.template.content,t=this._formSchema.properties,o=Object.keys(t);for(const i of o){const o=e.querySelectorAll(`[name^=${i}]`);for(const e of o)e.oninvalid=this.validityCheckWrapper.bind(this),e.onblur=this.validityCheckWrapper.bind(this),e.onkeyup=this.fieldChanged.bind(this),e.onchange=this.fieldChanged.bind(this),"select"===t[i].form.type&&e.classList.contains("placeholder")&&e.addEventListener("change",(()=>{e.classList.remove("placeholder")})),"startenddate"===t[i].form.type&&e.hasAttribute("data-compare-with")&&(e.oninvalid=this.endDateComparisonValidator.bind(this),e.onblur=this.endDateComparisonValidator.bind(this)),"startenddate"===t[i].form.type&&"time"===e.type&&(e.oninvalid=this.startEndTimeComparitor.bind(this),e.onblur=this.startEndTimeComparitor.bind(this)),"startenddate"===t[i].form.type&&e.hasAttribute("data-compare-to")&&(e.oninvalid=this.startDateComparisonValidator.bind(this),e.onblur=this.startDateComparisonValidator.bind(this))}if(this._data&&Object.keys(this._data).length>0){const t=Object.keys(this._data);for(const o of t){const t=e.querySelectorAll(`[name=${o}]`);for(const i of t)switch(i.type){case"checkbox":"on"===this._data[o]&&(i.checked=!0);break;case"radio":i.value===this._data[o]&&(i.checked=!0);break;case"select":case"select-one":e.querySelector(`[name=overlay-${o}]`).selectedValue=this._data[o],i.value=this._data[o];break;default:i.value=this._data[o]}}}this.fieldset.replaceChildren(e)}startEndTimeComparitor(e){var t,o;const i=e.target,n=i.getAttribute("data-formkey"),r=Array.from(i.parentElement.parentElement.parentElement.querySelectorAll(`[data-formkey=${n}]`));if(4===r.length){const n=r.find((e=>e.name.endsWith("starttime"))),l=r.find((e=>e.name.endsWith("endtime"))),s=r.find((e=>e.name.endsWith("startdate"))),d=r.find((e=>e.name.endsWith("enddate")));n.valueAsNumber>=l.valueAsNumber&&(null===(t=s.valueAsDate)||void 0===t?void 0:t.valueOf())===(null===(o=d.valueAsDate)||void 0===o?void 0:o.valueOf())?(a(l,!0,"End time cannot be the same or before the start time"),i.name.endsWith("starttime")&&this.validityCheckWrapper(e)):(l.setCustomValidity(""),a(l,!1,null),this.validityCheckWrapper(e))}}clearTimeComparitor(e){const t=e.target,o=t.getAttribute("data-formkey"),i=Array.from(t.parentElement.parentElement.parentElement.querySelectorAll(`[type=time][data-formkey=${o}]`));if(i.length){const e=i.find((e=>e.name.endsWith("endtime")));e.setCustomValidity(""),a(e,!1,null)}}startDateComparisonValidator(e){const t=e.target,o=t.getAttribute("data-compare-to"),i=t.parentElement.parentElement.parentElement.querySelector(`[name=${o}]`);this.endDateComparisonValidator({target:i},!0),this.validityCheckWrapper(e)}endDateComparisonValidator(e,t=!1){var o,i,n,r;const l=e.target;if(!l.value&&t)return;const s=l.getAttribute("data-compare-with"),d=l.parentElement.parentElement.parentElement.querySelector(`[name=${s}]`);(null===(o=l.valueAsDate)||void 0===o?void 0:o.valueOf())<(null===(i=d.valueAsDate)||void 0===i?void 0:i.valueOf())?(l.setCustomValidity(l.getAttribute("data-compare")),a(l,!0,l.getAttribute("data-compare"))):(null===(n=l.valueAsDate)||void 0===n?void 0:n.valueOf())===(null===(r=d.valueAsDate)||void 0===r?void 0:r.valueOf())?(l.setCustomValidity(""),this.validityCheckWrapper(e),this.startEndTimeComparitor(e)):(this.clearTimeComparitor(e),this.validityCheckWrapper(e))}validityCheckWrapper(e){const{target:t,hasError:o,errorMessage:i}=function(e){var t,o,i,n;e.preventDefault&&e.preventDefault();const r=e.target;let a=!0,l="";switch(r.value.length&&!r.value.replace(/\s/g,"").length?(l="This field cannot be left blank",r.setCustomValidity(l)):(l="",r.setCustomValidity&&r.setCustomValidity("")),!0){case r.validity.valueMissing:l=null!==(t=r.dataset.required)&&void 0!==t?t:"This field is required";break;case r.validity.patternMismatch:l=null!==(o=r.dataset.pattern)&&void 0!==o?o:"Incorrect format";break;case r.validity.badInput:l=null!==(i=r.dataset.badinput)&&void 0!==i?i:"Wrong input type";break;case r.validity.rangeOverflow||r.validity.rangeUnderflow:l=null!==(n=r.dataset.range)&&void 0!==n?n:"Invalid value";break;case r.validity.customError:l=r.validationMessage;break;default:a=!1}return{target:r,hasError:a,errorMessage:l}}(e);a(t,o,i)}render(){return o(i,null,o("form",{ref:e=>this.form=e,onSubmit:this.doSubmit.bind(this)},o("fieldset",{ref:e=>this.fieldset=e}),o("input",{type:"submit",ref:e=>this.submitButton=e,style:{display:"none"}})))}static get watchers(){return{formschema:["onFormSchemaChange"],data:["onDataChange"]}}};l.style='.material-symbols-rounded{font-variation-settings:"FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24}.material-symbols-rounded{font-variation-settings:"FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24}label{font-weight:500;font-size:16px;line-height:18.752px;color:#212121}label .optional{color:#757575;font-weight:normal}label .outer-container{position:relative}label .outer-container .left-icons,label .outer-container .right-icons{display:flex;position:absolute;height:24px;gap:8px}label .outer-container .left-icons tttx-icon,label .outer-container .right-icons tttx-icon{height:24px;width:24px}label .outer-container .left-icons{left:8px}label .outer-container .right-icons{right:8px}label .outer-container input,label .outer-container textarea{color:#212121;box-sizing:border-box;border:1px solid #d5d5d5;border-radius:4px;padding:0;padding-left:16px;padding-right:16px;margin-top:4px;}label .outer-container input.has-input-icon,label .outer-container textarea.has-input-icon{padding-left:40px}label .outer-container input.has-input-icon.has-left-icon,label .outer-container textarea.has-input-icon.has-left-icon{padding-left:72px}label .outer-container input.has-left-icon,label .outer-container textarea.has-left-icon{padding-left:40px}label .outer-container input.has-right-icon,label .outer-container textarea.has-right-icon{padding-right:40px}label .outer-container input.invalid,label .outer-container textarea.invalid{border:1px solid #dc0000}label .outer-container input:not([type=submit]),label .outer-container textarea:not([type=submit]){font-family:"Roboto", serif;width:100%;height:36px;font-size:16px;line-height:18.752px}label .outer-container input[type=radio],label .outer-container textarea[type=radio]{width:20px;height:20px}label .outer-container input[type=date],label .outer-container textarea[type=date]{background:white;display:block;min-width:calc(100% - 18px);line-height:37px}label .outer-container input[readonly],label .outer-container textarea[readonly]{cursor:default;pointer-events:none;user-select:none;color:gray}label .outer-container input:focus,label .outer-container textarea:focus{border-color:#1479c6}label .outer-container input:focus-visible,label .outer-container textarea:focus-visible{outline:none}label .outer-container textarea{padding:8px;height:auto;min-height:100px;resize:vertical}label .outer-container.inputBlock{display:flex;align-items:center;line-height:21px}label .outer-container.inputBlock .left-icons,label .outer-container.inputBlock .right-icons{margin-top:4px}label .outer-container.inputBlock.readonly{pointer-events:none;user-select:none;color:gray}label .outer-container.inputBlock.radioBlock{display:block}label .outer-container.inputInline{display:flex;white-space:nowrap;align-items:center;margin:0}label .outer-container.inputInline input{margin-top:0}label .secondarylabel{color:#757575;font-size:14px;line-height:16.408px;font-weight:normal;display:flex;margin-top:4px}label .errorBubble{position:relative;font-size:14px;line-height:16.408px;font-weight:normal;width:100%;font-family:"Roboto", sans-serif;color:#dc0000;display:flex;align-content:center;align-items:center;justify-items:center;margin-top:4px}label .errorBubble:not(.visible){display:none}label .errorBubble span{color:#dc0000;font-size:16px;margin-right:4px}.material-symbols-rounded{font-family:"Material Symbols Rounded", sans-serif;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;color:#9e9e9e}button{cursor:pointer}.button{font-family:Roboto, serif;box-sizing:border-box;height:36px;min-width:36px;padding:0;margin:0;background:transparent;color:#212121;border:1px solid #c8c8c8;border-radius:4px;text-transform:uppercase;display:flex;justify-content:left;align-items:center;font-size:14px;font-weight:500}.button-content{display:block;padding:0 16px}.icon-left,.icon-right{margin-top:4px}.iconleft{padding-left:8px}.iconleft .button-content{padding-left:4px}.iconright{padding-right:8px}.iconright .button-content{padding-right:4px}.notext{padding:0 6px}.button:active{background:rgba(17, 17, 17, 0.2);border:1px solid #d5d5d5}.primary{background:#1479c6;border:1px solid #1479c6;color:white}.primary:active{background:#1464a2;border:1px solid #1464a2}.borderless{background:transparent;border:none;color:#212121}.borderless:active{background:rgba(17, 17, 17, 0.2);border:none}.borderless-circle{background:transparent;border:none;color:#212121;border-radius:50%}.borderless-circle:active{border:none}.borderless-circle:focus{border-color:transparent}.danger{background:#dc0000;border:1px solid #dc0000;color:white}.danger:active{background:#b00000;border:1px solid #b00000}.disabled{background:#aeaeae;border:none;color:#4c4c4c;cursor:not-allowed}.disabled:active{background:#aeaeae;border:none;color:#4c4c4c;cursor:not-allowed}@media (hover: hover){.button:hover{background:rgba(17, 17, 17, 0.1);border:1px solid #d5d5d5}.primary:hover{background:#146eb3;border:1px solid #146eb3}.borderless:hover{background:rgba(17, 17, 17, 0.1);border:none}.borderless-circle:hover{background:rgba(17, 17, 17, 0.1);border:none}.danger:hover{background:#c60000;border:1px solid #c60000}.disabled:hover{background:#aeaeae;border:none;color:#4c4c4c;cursor:not-allowed}}:host{display:block}fieldset{margin:0;padding:0;border:none}label{display:block;position:relative;margin-bottom:16px}.inlineLabel{font-weight:400;display:inline-block;vertical-align:top;padding-top:4px}input[type=checkbox]{width:18px;height:18px}input~label{font-weight:400}select{font-family:"Roboto", serif;box-sizing:border-box;width:100%;height:36px;padding:0 16px;font-size:16px;border:1px solid #d5d5d5;border-radius:4px;margin-top:4px}.placeholder{color:#9e9e9e}.placeholder option{color:initial}select.invalid:invalid{border:1px solid #dc0000}select~.errorBubble{position:relative;font-size:14px;font-weight:normal;width:100%;font-family:"Roboto", sans-serif;color:#dc0000;display:flex;align-content:center;align-items:center;justify-items:center}select~.errorBubble:not(.visible){visibility:hidden}select~.errorBubble span{color:#dc0000;font-size:16px;margin-right:4px;height:16px}select.invalid:invalid~.errorBubble{position:relative;font-size:14px;font-weight:normal;width:100%;font-family:"Roboto", sans-serif;color:#dc0000;visibility:visible}select:focus{border-color:#1479c6}select:focus-visible{outline:none}.button{padding:0 16px}.footer{display:flex;gap:16px;flex-direction:row-reverse}label.flex-label{display:flex;flex-direction:column;width:300px;box-sizing:border-box}label.flex-label input[type=date]{flex-grow:1;min-width:auto}label.flex-label input[type=time]{min-width:auto;text-align:center;width:180px;margin-left:16px}';export{l as tttx_form}
@@ -0,0 +1 @@
1
+ import{r as t,c as o,h as i,F as e,H as s,g as n}from"./p-65bb4035.js";import{p as d,d as r}from"./p-88ee2406.js";import"./p-112455b1.js";const l=class{constructor(i){t(this,i),this.selectItemEvent=o(this,"selectItemEvent",3),this.toggleOpen=o(this,"toggleOpen",3),this.bodyOffset={},this.optionsData=null,this.label=void 0,this.inline=void 0,this.placeholder="",this.searchEnabled=void 0,this.selectedValue=void 0,this.open=!1,this.selectedItem=void 0,this.searchTerm=""}async componentWillLoad(){if(this.optionsData){this.setOptionsData();const t=this._optionsData.filter((t=>t.value==this.selectedValue));this.selectedItem=t.length>0?t[0]:void 0}}async setOptionsData(){this._optionsData="string"==typeof this.optionsData?JSON.parse(this.optionsData):this.optionsData}async setSelectedItem(t){if(!t)return;const o=this._optionsData.find((o=>o.value.toLowerCase()===t.toLowerCase()));o&&(this.selectedValue=o.value,this.selectedItem=o)}handleCloseSelectBox(){this.open=!1}handleBlur(){this.open=!1,this.toggleOpen.emit(!1)}onDropdownClicked(){this.open=!this.open,this.searchTerm="",this.calculateDropdownMenuOffset(),this.toggleOpen.emit(this.open)}onItemSelected(t){this.selectedItem=t,this.selectItemEvent.emit(this.selectedItem),this.handleBlur()}dropdownSelectorContent(){let t,o;const s=i("tttx-icon",{icon:this.open?"expand_less":"expand_more",color:"black"});let n=i("div",{class:"dropdown-selector-chevron"},s);return this.selectedItem?this.selectedItem.html?(t=i("div",{title:this.selectedItem.label,class:"truncated-text",innerHTML:this.selectedItem.html}),i(e,null,t,n)):(t=i("div",{title:this.selectedItem.label,class:"truncated-text"},this.selectedItem.label),this.selectedItem.description&&(o=i("div",{class:"description"},i("p",null,this.selectedItem.description)),n=i("div",{class:"dropdown-selector-chevron-offset"},s)),i(e,null,i("div",{class:"left-wrapper"},t,o),n)):(t=i("div",{class:"placeholder"},this.placeholder),i(e,null,t,n))}dropdownOption(t){const o=this.searchEnabled&&-1===t.label.toLowerCase().indexOf(this.searchTerm.toLowerCase()),e=this.selectedItem&&t.value===this.selectedItem.value;if(t.html){const s=d.sanitize(t.html,r);return i("div",{class:`dropdown-option ${o?"hidden":""} ${e?"selected":""}`,onClick:this.onItemSelected.bind(this,t),key:t.label,innerHTML:s})}return t.description?i("div",{class:`dropdown-option ${o?"hidden":""} ${e?"selected":""}`,onClick:this.onItemSelected.bind(this,t),key:t.label},t.label,i("div",{class:"description-dd"},i("p",null,t.description))):i("div",{class:`dropdown-option ${o?"hidden":""} ${e?"selected":""}`,onClick:this.onItemSelected.bind(this,t),key:t.label},t.label)}handleSearchInput(t){this.searchTerm=t.target.value}calculateDropdownMenuOffset(){const t=this.el.shadowRoot.querySelector(".dropdown-selector"),o=this.dropdownSelector.getBoundingClientRect().bottom;let i=Math.min(368,36*this._optionsData.length)+8;this.searchEnabled&&(i+=52);const e=t.getBoundingClientRect();this.bodyOffset=o+i>window.innerHeight?{top:window.innerHeight-(i+16)+"px",position:"fixed",width:`${t.offsetWidth}px`,zIndex:"10"}:{position:"fixed",left:e.left,top:e.top,width:e.width-2+"px",zIndex:"10"}}render(){if(this.optionsData)return i(s,{class:this.inline?"inline":"block"},this.label&&i("div",{class:"label"},this.label),i("div",{tabindex:"0",class:"dropdown-container"},i("div",{class:"dropdown-selector",ref:t=>this.dropdownSelector=t,onClick:this.onDropdownClicked.bind(this)},this.dropdownSelectorContent()),this.open&&i("div",{class:"dropdown-body-container"},i("div",{class:"dropdown-body",style:Object.assign({width:`${this.dropdownSelector.offsetWidth}px`},this.bodyOffset)},this.searchEnabled&&i("div",{class:"searchbox"},i("tttx-standalone-input",{type:"text",label:"",required:!0,showerrorbubble:!1,iconleft:"search",onInput:this.handleSearchInput.bind(this)})),i("div",{class:"dropdown-options-list"},this._optionsData.map((t=>this.dropdownOption(t))))))))}get el(){return n(this)}static get watchers(){return{optionsData:["setOptionsData"]}}};l.style='.material-symbols-rounded{font-variation-settings:"FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24}:host{display:flex;gap:4px}.label{font-size:16px;font-weight:500;line-height:18.752px;color:#212121}:host(.inline) .label{padding-top:8px}:host(.block){flex-direction:column}.dropdown-container{position:relative;display:flex;flex-direction:column;width:100%}.dropdown-container:focus-visible{outline:none}.dropdown-container:focus .dropdown-selector{border:1px solid #1479c6}.dropdown-selector,.dropdown-body{display:flex;border-radius:4px;background-color:white}.dropdown-selector{min-height:36px;box-sizing:border-box;align-items:center;gap:8px;padding:4px 8px 4px 16px;cursor:pointer;justify-content:space-between;border:1px solid #d5d5d5;display:flex;flex-direction:row}.dropdown-selector>.left-wrapper{flex:1;min-width:0}.description{color:#757575;font-size:14px;line-height:16.408px}.description>p{margin:0}.description-dd{color:#757575;font-size:14px;line-height:16.408px}.description-dd>p{margin:0}.truncated-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#212121;font-size:16px;line-height:18.752px}.dropdown-selector-chevron{height:24px}.dropdown-selector-chevron-offset{height:24px}.dropdown-selector-chevron>tttx-icon{cursor:pointer}.dropdown-body-container{position:relative;z-index:2}.dropdown-body{position:absolute;flex-direction:column;box-shadow:0px 1px 5px #1111114D;padding-bottom:8px;border:1px solid #d5d5d5}.dropdown-options-list{display:flex;flex-direction:column;overflow-y:auto;max-height:368px}.dropdown-option{padding:6px 8px 6px 16px;cursor:pointer}.dropdown-option:hover{background-color:#1111110d}.dropdown-option:active,.dropdown-option.selected{background-color:#ebfbfc}.placeholder{color:#9e9e9e;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}.searchbox{padding:8px 16px}.searchbox tttx-standalone-input{margin-top:-4px}.hidden{display:none}';export{l as tttx_select_box}
@@ -1 +1 @@
1
- import{p as e,b as t}from"./p-65bb4035.js";export{s as setNonce}from"./p-65bb4035.js";(()=>{const t=import.meta.url,o={};return""!==t&&(o.resourcesUrl=new URL(".",t).href),e(o)})().then((e=>t([["p-7f1452fb",[[1,"tttx-data-pattern",{data:[1],sorteroptions:[1],filteroptions:[1],filterheader:[1]}]]],["p-f8c7f162",[[1,"tttx-multiselect-box",{optionsData:[1,"options-data"],label:[1],inline:[4],placeholder:[1],searchEnabled:[4,"search-enabled"],htmlVisibleValue:[4,"html-visible-value"],visibleValue:[1,"visible-value"],open:[32],unsavedSelectedItems:[32],searchTerm:[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["p-c476e635",[[1,"tttx-dialog-box",{data:[1025],size:[1],open:[1028],allowOverflow:[4,"allow-overflow"],elementSize:[32]},[[9,"resize","handleResize"]]]]],["p-64d61284",[[1,"tttx-select-box",{optionsData:[1,"options-data"],label:[1],inline:[4],placeholder:[1],searchEnabled:[4,"search-enabled"],selectedValue:[1,"selected-value"],open:[32],selectedItem:[32],searchTerm:[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["p-888fb9ee",[[1,"tttx-tree-view",{data:[1040],firstSelected:[1028,"first-selected"],treeData:[32],selectedId:[32]}]]],["p-7c3a76f3",[[0,"tttx-checkbox",{checkboxId:[1,"checkbox-id"],label:[1],inline:[4],indeterminate:[4],checked:[4]}]]],["p-20d3d8fb",[[1,"tttx-dialog",{header:[1],type:[1],size:[1],open:[4],allowOverflow:[4,"allow-overflow"],closeEnabled:[4,"close-enabled"],elementSize:[32]},[[9,"resize","handleResize"]]]]],["p-87b6e5a9",[[1,"tttx-expander",{name:[1],open:[4],lefticon:[1],lefticoncolor:[1],isExpanded:[32]}]]],["p-f247443b",[[2,"tttx-tabs",{tabsName:[1,"tabs-name"],navigation:[4],wide:[4],tabs:[1],_tabs:[32]},[[0,"keydown","handleKeyDown"]]]]],["p-c3ca37bb",[[1,"tttx-checkbox-group"]]],["p-0fb0d9eb",[[4,"tttx-checkbox-group-caption"]]],["p-78875ac9",[[4,"tttx-checkbox-group-heading"]]],["p-ae4e3fe8",[[1,"tttx-form",{formschema:[1025],data:[1032],submit:[64],setSelectOptions:[64]}]]],["p-15b7a577",[[1,"tttx-keyvalue-block",{keyvalues:[1],horizontal:[4],spacedout:[4],_elements:[32]}]]],["p-fe6c321b",[[1,"tttx-loading-spinner",{loadingMessage:[1028,"loading-message"],size:[1025]}]]],["p-be16cf2d",[[2,"tttx-percentage-bar",{percentage:[8],thresholds:[1],color:[1],min:[1],labelid:[1],_percentage:[32],_ranges:[32],_min:[32]}]]],["p-69642b71",[[1,"tttx-qrcode",{link:[1025],size:[1026]}]]],["p-e7b7d2e2",[[1,"tttx-tag",{text:[1],color:[1],textColor:[1,"text-color"]}]]],["p-e0662bf6",[[2,"tttx-textarea",{label:[1],secondarylabel:[1],showerrormsg:[4],showerrorbubble:[4],errormsg:[1],rows:[2],textareaautofocus:[4],inputkeyhint:[1],inputindex:[8],inputtitle:[1],disabled:[4],maxlength:[8],name:[1],placeholder:[1],readonly:[8],required:[4],value:[1032]}]]],["p-bcf3844e",[[1,"tttx-icon",{icon:[1],color:[1]}]]],["p-5b8bb736",[[2,"tttx-standalone-input",{label:[1],secondarylabel:[1],showerrormsg:[4],showerrorbubble:[4],errormsg:[1],iconleft:[1],iconleftcolor:[1],iconright:[1],iconrightcolor:[1],inputicon:[1],inputiconcolor:[1],inline:[4],inputautocapitalize:[1],inputautofocus:[4],inputkeyhint:[1],inputindex:[8],inputtitle:[1],autocomplete:[1],checked:[4],disabled:[4],max:[8],maxlength:[8],min:[8],minlength:[8],name:[1],pattern:[1],placeholder:[1],readonly:[8],required:[4],step:[8],type:[1],value:[1032]}]]],["p-f27adb48",[[1,"tttx-filter",{filterKey:[1,"filter-key"],filterOptions:[1,"filter-options"],showSelectAll:[4,"show-select-all"],showSearchField:[4,"show-search-field"],showOptionIcons:[4,"show-option-icons"],filterButtonStyle:[1,"filter-button-style"],filterHeader:[1,"filter-header"],defaultFilterOptions:[1,"default-filter-options"],popoverWidth:[1,"popover-width"],showPopover:[32],displayedFilterSettings:[32],selectedFilters:[32],filterSearchTerm:[32],allSelected:[32]},[[0,"closeFilter","handleCloseFilter"]]],[1,"tttx-list",{data:[1025],name:[1],_data:[32]}],[1,"tttx-sorter",{sorterKey:[1,"sorter-key"],defaultSortDirection:[1,"default-sort-direction"],fieldOptionsData:[1,"field-options-data"],defaultOption:[1,"default-option"],selectedField:[32],sortDirection:[32],dropdownExpand:[32],dropdownOptions:[32]},[[0,"closeSorter","handleCloseSorter"]]],[1,"tttx-toolbar",{border:[4],viewSize:[32]},[[9,"resize","handleResize"]]]]],["p-61741832",[[1,"tttx-button",{notext:[4],icon:[1],iconposition:[1],iconcolor:[1025],design:[1]}]]]],e)));
1
+ import{p as e,b as t}from"./p-65bb4035.js";export{s as setNonce}from"./p-65bb4035.js";(()=>{const t=import.meta.url,o={};return""!==t&&(o.resourcesUrl=new URL(".",t).href),e(o)})().then((e=>t([["p-7f1452fb",[[1,"tttx-data-pattern",{data:[1],sorteroptions:[1],filteroptions:[1],filterheader:[1]}]]],["p-a144a5ec",[[1,"tttx-form",{formschema:[1025],data:[1032],submit:[64],setSelectOptions:[64]}]]],["p-f8c7f162",[[1,"tttx-multiselect-box",{optionsData:[1,"options-data"],label:[1],inline:[4],placeholder:[1],searchEnabled:[4,"search-enabled"],htmlVisibleValue:[4,"html-visible-value"],visibleValue:[1,"visible-value"],open:[32],unsavedSelectedItems:[32],searchTerm:[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["p-c476e635",[[1,"tttx-dialog-box",{data:[1025],size:[1],open:[1028],allowOverflow:[4,"allow-overflow"],elementSize:[32]},[[9,"resize","handleResize"]]]]],["p-888fb9ee",[[1,"tttx-tree-view",{data:[1040],firstSelected:[1028,"first-selected"],treeData:[32],selectedId:[32]}]]],["p-7c3a76f3",[[0,"tttx-checkbox",{checkboxId:[1,"checkbox-id"],label:[1],inline:[4],indeterminate:[4],checked:[4]}]]],["p-20d3d8fb",[[1,"tttx-dialog",{header:[1],type:[1],size:[1],open:[4],allowOverflow:[4,"allow-overflow"],closeEnabled:[4,"close-enabled"],elementSize:[32]},[[9,"resize","handleResize"]]]]],["p-87b6e5a9",[[1,"tttx-expander",{name:[1],open:[4],lefticon:[1],lefticoncolor:[1],isExpanded:[32]}]]],["p-f247443b",[[2,"tttx-tabs",{tabsName:[1,"tabs-name"],navigation:[4],wide:[4],tabs:[1],_tabs:[32]},[[0,"keydown","handleKeyDown"]]]]],["p-c3ca37bb",[[1,"tttx-checkbox-group"]]],["p-0fb0d9eb",[[4,"tttx-checkbox-group-caption"]]],["p-78875ac9",[[4,"tttx-checkbox-group-heading"]]],["p-15b7a577",[[1,"tttx-keyvalue-block",{keyvalues:[1],horizontal:[4],spacedout:[4],_elements:[32]}]]],["p-fe6c321b",[[1,"tttx-loading-spinner",{loadingMessage:[1028,"loading-message"],size:[1025]}]]],["p-be16cf2d",[[2,"tttx-percentage-bar",{percentage:[8],thresholds:[1],color:[1],min:[1],labelid:[1],_percentage:[32],_ranges:[32],_min:[32]}]]],["p-69642b71",[[1,"tttx-qrcode",{link:[1025],size:[1026]}]]],["p-e7b7d2e2",[[1,"tttx-tag",{text:[1],color:[1],textColor:[1,"text-color"]}]]],["p-e0662bf6",[[2,"tttx-textarea",{label:[1],secondarylabel:[1],showerrormsg:[4],showerrorbubble:[4],errormsg:[1],rows:[2],textareaautofocus:[4],inputkeyhint:[1],inputindex:[8],inputtitle:[1],disabled:[4],maxlength:[8],name:[1],placeholder:[1],readonly:[8],required:[4],value:[1032]}]]],["p-bcf3844e",[[1,"tttx-icon",{icon:[1],color:[1]}]]],["p-e6514754",[[1,"tttx-select-box",{optionsData:[1,"options-data"],label:[1],inline:[4],placeholder:[1],searchEnabled:[4,"search-enabled"],selectedValue:[1,"selected-value"],open:[32],selectedItem:[32],searchTerm:[32],setSelectedItem:[64]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["p-f27adb48",[[1,"tttx-filter",{filterKey:[1,"filter-key"],filterOptions:[1,"filter-options"],showSelectAll:[4,"show-select-all"],showSearchField:[4,"show-search-field"],showOptionIcons:[4,"show-option-icons"],filterButtonStyle:[1,"filter-button-style"],filterHeader:[1,"filter-header"],defaultFilterOptions:[1,"default-filter-options"],popoverWidth:[1,"popover-width"],showPopover:[32],displayedFilterSettings:[32],selectedFilters:[32],filterSearchTerm:[32],allSelected:[32]},[[0,"closeFilter","handleCloseFilter"]]],[1,"tttx-list",{data:[1025],name:[1],_data:[32]}],[1,"tttx-sorter",{sorterKey:[1,"sorter-key"],defaultSortDirection:[1,"default-sort-direction"],fieldOptionsData:[1,"field-options-data"],defaultOption:[1,"default-option"],selectedField:[32],sortDirection:[32],dropdownExpand:[32],dropdownOptions:[32]},[[0,"closeSorter","handleCloseSorter"]]],[1,"tttx-toolbar",{border:[4],viewSize:[32]},[[9,"resize","handleResize"]]]]],["p-61741832",[[1,"tttx-button",{notext:[4],icon:[1],iconposition:[1],iconcolor:[1025],design:[1]}]]],["p-5b8bb736",[[2,"tttx-standalone-input",{label:[1],secondarylabel:[1],showerrormsg:[4],showerrorbubble:[4],errormsg:[1],iconleft:[1],iconleftcolor:[1],iconright:[1],iconrightcolor:[1],inputicon:[1],inputiconcolor:[1],inline:[4],inputautocapitalize:[1],inputautofocus:[4],inputkeyhint:[1],inputindex:[8],inputtitle:[1],autocomplete:[1],checked:[4],disabled:[4],max:[8],maxlength:[8],min:[8],minlength:[8],name:[1],pattern:[1],placeholder:[1],readonly:[8],required:[4],step:[8],type:[1],value:[1032]}]]]],e)));
@@ -69,7 +69,10 @@ export declare class TttxForm {
69
69
  value: string;
70
70
  placeholder?: boolean;
71
71
  }>;
72
- }): HTMLSelectElement;
72
+ }): {
73
+ input: HTMLSelectElement;
74
+ overlay: never;
75
+ };
73
76
  /**
74
77
  * Appends an option to a select element
75
78
  *
@@ -171,10 +174,11 @@ export declare class TttxForm {
171
174
  *
172
175
  * @param {Record<string, any>} formProperties - An object containing properties for the form field, including its label text and validation rules.
173
176
  * @param {HTMLInputElement | HTMLSelectElement} input - The input element to associate with the label.
177
+ * @param {never} overlay - The Child Element which will be rendered atop the standard HTML5 element
174
178
  * @param {HTMLDivElement} errorBubble - The error bubble element to display error messages in.
175
179
  * @return {HTMLLabelElement} - The new label element.
176
180
  */
177
- createLabel(formProperties: Record<string, any>, input: HTMLInputElement | HTMLSelectElement, errorBubble: HTMLDivElement): HTMLLabelElement;
181
+ createLabel(formProperties: Record<string, any>, input: HTMLInputElement | HTMLSelectElement, overlay: never, errorBubble: HTMLDivElement): HTMLLabelElement;
178
182
  /**
179
183
  * Creates a new radio input with a set of options.
180
184
  *
@@ -15,6 +15,8 @@ export declare class TttxSelectBox {
15
15
  private bodyOffset;
16
16
  el: any;
17
17
  componentWillLoad(): Promise<void>;
18
+ setOptionsData(): Promise<void>;
19
+ setSelectedItem(value: string): Promise<void>;
18
20
  selectItemEvent: EventEmitter<SelectItem>;
19
21
  toggleOpen: EventEmitter<boolean>;
20
22
  handleCloseSelectBox(): void;
@@ -129,6 +129,7 @@ export namespace Components {
129
129
  "placeholder": string;
130
130
  "searchEnabled": boolean;
131
131
  "selectedValue": string;
132
+ "setSelectedItem": (value: string) => Promise<void>;
132
133
  }
133
134
  interface TttxSorter {
134
135
  "defaultOption": string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@3t-transform/threeteeui",
3
- "version": "0.2.115",
3
+ "version": "0.2.116",
4
4
  "description": "3t Design System",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.js",
@@ -1 +0,0 @@
1
- import{r as o,c as t,h as i,F as e,H as s,g as n}from"./p-65bb4035.js";import{p as d,d as r}from"./p-88ee2406.js";import"./p-112455b1.js";const l=class{constructor(i){o(this,i),this.selectItemEvent=t(this,"selectItemEvent",3),this.toggleOpen=t(this,"toggleOpen",3),this.bodyOffset={},this.optionsData=null,this.label=void 0,this.inline=void 0,this.placeholder="",this.searchEnabled=void 0,this.selectedValue=void 0,this.open=!1,this.selectedItem=void 0,this.searchTerm=""}async componentWillLoad(){if(this.optionsData){const o=("string"==typeof this.optionsData?JSON.parse(this.optionsData):this.optionsData).filter((o=>o.value==this.selectedValue));this.selectedItem=o.length>0?o[0]:void 0}}handleCloseSelectBox(){this.open=!1}handleBlur(){this.open=!1,this.toggleOpen.emit(!1)}onDropdownClicked(){this.open=!this.open,this.searchTerm="",this.calculateDropdownMenuOffset(),this.toggleOpen.emit(this.open)}onItemSelected(o){this.selectedItem=o,this.selectItemEvent.emit(this.selectedItem),this.handleBlur()}dropdownSelectorContent(){let o,t;const s=i("tttx-icon",{icon:this.open?"expand_less":"expand_more",color:"black"});let n=i("div",{class:"dropdown-selector-chevron"},s);return this.selectedItem?this.selectedItem.html?(o=i("div",{title:this.selectedItem.label,class:"truncated-text",innerHTML:this.selectedItem.html}),i(e,null,o,n)):(o=i("div",{title:this.selectedItem.label,class:"truncated-text"},this.selectedItem.label),this.selectedItem.description&&(t=i("div",{class:"description"},i("p",null,this.selectedItem.description)),n=i("div",{class:"dropdown-selector-chevron-offset"},s)),i(e,null,i("div",{class:"left-wrapper"},o,t),n)):(o=i("div",{class:"placeholder"},this.placeholder),i(e,null,o,n))}dropdownOption(o){const t=this.searchEnabled&&-1===o.label.toLowerCase().indexOf(this.searchTerm.toLowerCase()),e=this.selectedItem&&o.value===this.selectedItem.value;if(o.html){const s=d.sanitize(o.html,r);return i("div",{class:`dropdown-option ${t?"hidden":""} ${e?"selected":""}`,onClick:this.onItemSelected.bind(this,o),key:o.label,innerHTML:s})}return o.description?i("div",{class:`dropdown-option ${t?"hidden":""} ${e?"selected":""}`,onClick:this.onItemSelected.bind(this,o),key:o.label},o.label,i("div",{class:"description-dd"},i("p",null,o.description))):i("div",{class:`dropdown-option ${t?"hidden":""} ${e?"selected":""}`,onClick:this.onItemSelected.bind(this,o),key:o.label},o.label)}handleSearchInput(o){this.searchTerm=o.target.value}calculateDropdownMenuOffset(){const o=this.el.shadowRoot.querySelector(".dropdown-selector"),t=this.dropdownSelector.getBoundingClientRect().bottom;let i=Math.min(368,36*this._optionsData.length)+8;this.searchEnabled&&(i+=52);const e=o.getBoundingClientRect();this.bodyOffset=t+i>window.innerHeight?{top:window.innerHeight-(i+16)+"px",position:"fixed",width:`${o.offsetWidth}px`,zIndex:"10"}:{position:"fixed",left:e.left,top:e.top,width:e.width-2+"px",zIndex:"10"}}render(){if(this.optionsData)return this._optionsData="string"==typeof this.optionsData?JSON.parse(this.optionsData):this.optionsData,i(s,{class:this.inline?"inline":"block"},this.label&&i("div",{class:"label"},this.label),i("div",{tabindex:"0",class:"dropdown-container"},i("div",{class:"dropdown-selector",ref:o=>this.dropdownSelector=o,onClick:this.onDropdownClicked.bind(this)},this.dropdownSelectorContent()),this.open&&i("div",{class:"dropdown-body-container"},i("div",{class:"dropdown-body",style:Object.assign({width:`${this.dropdownSelector.offsetWidth}px`},this.bodyOffset)},this.searchEnabled&&i("div",{class:"searchbox"},i("tttx-standalone-input",{type:"text",label:"",required:!0,showerrorbubble:!1,iconleft:"search",onInput:this.handleSearchInput.bind(this)})),i("div",{class:"dropdown-options-list"},this._optionsData.map((o=>this.dropdownOption(o))))))))}get el(){return n(this)}};l.style='.material-symbols-rounded{font-variation-settings:"FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24}:host{display:flex;gap:4px}.label{font-size:16px;font-weight:500;line-height:18.752px;color:#212121}:host(.inline) .label{padding-top:8px}:host(.block){flex-direction:column}.dropdown-container{position:relative;display:flex;flex-direction:column;width:100%}.dropdown-container:focus-visible{outline:none}.dropdown-container:focus .dropdown-selector{border:1px solid #1479c6}.dropdown-selector,.dropdown-body{display:flex;border-radius:4px;background-color:white}.dropdown-selector{min-height:36px;box-sizing:border-box;align-items:center;gap:8px;padding:4px 8px 4px 16px;cursor:pointer;justify-content:space-between;border:1px solid #d5d5d5;display:flex;flex-direction:row}.dropdown-selector>.left-wrapper{flex:1;min-width:0}.description{color:#757575;font-size:14px;line-height:16.408px}.description>p{margin:0}.description-dd{color:#757575;font-size:14px;line-height:16.408px}.description-dd>p{margin:0}.truncated-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#212121;font-size:16px;line-height:18.752px}.dropdown-selector-chevron{height:24px}.dropdown-selector-chevron-offset{height:24px}.dropdown-selector-chevron>tttx-icon{cursor:pointer}.dropdown-body-container{position:relative;z-index:2}.dropdown-body{position:absolute;flex-direction:column;box-shadow:0px 1px 5px #1111114D;padding-bottom:8px;border:1px solid #d5d5d5}.dropdown-options-list{display:flex;flex-direction:column;overflow-y:auto;max-height:368px}.dropdown-option{padding:6px 8px 6px 16px;cursor:pointer}.dropdown-option:hover{background-color:#1111110d}.dropdown-option:active,.dropdown-option.selected{background-color:#ebfbfc}.placeholder{color:#9e9e9e;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}.searchbox{padding:8px 16px}.searchbox tttx-standalone-input{margin-top:-4px}.hidden{display:none}';export{l as tttx_select_box}
@@ -1 +0,0 @@
1
- import{r as e,c as t,h as o,H as i}from"./p-65bb4035.js";import{p as n,d as r}from"./p-88ee2406.js";import"./p-112455b1.js";function a(e,t,o,i){let n;if(n=void 0!==i?i.querySelector(".errorBubble"):"label"===e.parentElement.nodeName.toLowerCase()?e.parentElement.querySelector(".errorBubble"):e.parentElement.parentElement.querySelector(".errorBubble"),n)if(t){e.classList.add("invalid"),n.classList.add("visible");const t=document.createElement("span");t.className="material-symbols-rounded",t.textContent="warning",n.innerHTML="",n.append(t),n.append(o)}else n.classList.remove("visible"),e.classList.remove("invalid"),n.innerHTML=""}const l=class{constructor(o){e(this,o),this.dataSubmitted=t(this,"dataSubmitted",7),this.dataChanged=t(this,"dataChanged",7),this.template=document.createElement("template"),this.formschema=void 0,this.data=void 0}onFormSchemaChange(e){if(!this.data&&this.form&&this._formSchema){const e=new FormData(this.form);this._data=Object.fromEntries(Object.keys(this._formSchema.properties).map((t=>[t,e.get(t)])))}this._formSchema="string"==typeof e?JSON.parse(e):e}onDataChange(e){this._data="string"==typeof e?JSON.parse(e):e}fieldChanged(e){this.dataChanged.emit({name:e.target.name,value:e.target.value})}async submit(){this.submitButton.click()}async setSelectOptions(e,t){const o=this.fieldset.querySelector(`[name=${e}]`);o.innerHTML="";const i=new DocumentFragment;for(const e of t){const t=document.createElement("option");t.innerText=e.label,t.value=e.value,i.appendChild(t)}o.appendChild(i)}doSubmit(e){e.preventDefault();const t=new FormData(e.target),o=this._formSchema.properties;for(const e of Object.keys(o))"checkbox"!==o[e].form.type||t.has(e)||t.append(e,"off");this.dataSubmitted.emit(t)}componentWillLoad(){this.onFormSchemaChange(this.formschema),this.data&&this.onDataChange(this.data)}componentWillRender(){this.template=document.createElement("template"),this.populateFormFromSchema()}createSelect(e,t){var o;const i=document.createElement("select");return i.setAttribute("name",e),t.options.forEach((e=>{this.appendOption(i,e)})),(null===(o=this._data)||void 0===o?void 0:o[e])&&i.classList.remove("placeholder"),i}appendOption(e,t){const o=document.createElement("option");o.setAttribute("value",t.value),t.placeholder&&(o.setAttribute("disabled",""),o.setAttribute("selected",""),o.setAttribute("hidden",""),e.classList.add("placeholder")),t.label&&(o.innerHTML=n.sanitize(t.label,r)),e.appendChild(o)}createInput(e,t){var o;const i=document.createElement("input");return i.type=t.type,i.name=e,i.placeholder=null!==(o=t.placeholder)&&void 0!==o?o:"",i.autocomplete="off",i.autocapitalize="off",t.readonly&&(i.readOnly=!0),i}createTextArea(e,t){var o;const i=document.createElement("textarea");return i.name=e,i.placeholder=null!==(o=t.placeholder)&&void 0!==o?o:"",i.autocomplete="off",i.autocapitalize="off",t.readonly&&(i.readOnly=!0),i}createStartEndDateComponent(e,t){const o=document.createElement("input"),i=document.createElement("input");let n,r;o.type=i.type="date",o.name=`${e}-startdate`,i.name=`${e}-enddate`,o.setAttribute("data-formkey",e),i.setAttribute("data-formkey",e),t.readonly&&(o.readOnly=!0,i.readOnly=!0),this.applyValidation(o,{required:{message:"Please enter a start date"},dateCompare:{to:i.name}}),this.applyValidation(i,{required:{message:"Please enter an end date"},dateCompare:{with:o.name,message:"End date cannot be before the start date"}}),t.includeTime&&(n=document.createElement("input"),r=document.createElement("input"),n.type=r.type="time",n.name=`${e}-starttime`,r.name=`${e}-endtime`,n.setAttribute("data-formkey",e),r.setAttribute("data-formkey",e),t.readonly&&(n.readOnly=!0,r.readOnly=!0),this.applyValidation(n,{required:{message:"Please enter a start time"}}),this.applyValidation(r,{required:{message:"Please enter an end time"}}));const a=document.createElement("label");a.innerText="Start date";const l=document.createElement("label");l.innerText="End date";const s=document.createElement("div"),d=document.createElement("div");return s.className=d.className="outer-container inputBlock",a.className=l.className="flex-label",s.append(o),n&&s.append(n),a.append(s),a.append(this.createErrorBubble()),d.append(i),r&&d.append(r),l.append(d),l.append(this.createErrorBubble()),{start:a,end:l}}applyValidation(e,t){var o,i;t.required&&(e.setAttribute("required",""),e.setAttribute("data-required",null!==(o=t.required.message)&&void 0!==o?o:"")),t.pattern&&(e.setAttribute("pattern",t.pattern.pattern),e.setAttribute("data-pattern",null!==(i=t.pattern.message)&&void 0!==i?i:"")),t.badInput&&e.setAttribute("data-badinput",t.badInput.message),t.minmax&&(e.setAttribute("min",t.minmax.min),e.setAttribute("max",t.minmax.max),e.setAttribute("data-range",t.minmax.message)),t.maxlength&&e.setAttribute("maxlength",t.maxlength),t.dateCompare&&(t.dateCompare.message&&t.dateCompare.with&&(e.setAttribute("data-compare",t.dateCompare.message),e.setAttribute("data-compare-with",t.dateCompare.with)),t.dateCompare.to&&e.setAttribute("data-compare-to",t.dateCompare.to))}createErrorBubble(){const e=document.createElement("div");return e.className="errorBubble",e}appendCheckboxInput(e,t,o){if(e.label){const e=document.createElement("br");o.appendChild(e)}if(o.appendChild(t),!e.inlineLabel)return;const i=document.createElement("span");i.className="inlineLabel",i.textContent=e.inlineLabel,o.appendChild(i)}createLabel(e,t,o){var i;const n=document.createElement("div");let r="outer-container inputBlock";const a=document.createElement("label");if(a.innerText=e.label,!(null===(i=e.validation)||void 0===i?void 0:i.required)&&e.label){const e=document.createElement("span");e.className="optional",e.innerHTML="&nbsp;(optional)",a.appendChild(e)}return"radio"===e.type&&(r+=" radioBlock"),n.className=r,e.readonly&&a.classList.add("readonly"),"checkbox"===e.type?this.appendCheckboxInput(e,t,a):n.appendChild(t),"checkbox"!==e.type&&a.appendChild(n),a.appendChild(o),a}createRadio(e,t){var o,i;const n=new DocumentFragment;for(const r of t.options){const a=document.createElement("input");a.type="radio",a.name=e,a.value=r.value,(null===(o=null==t?void 0:t.validation)||void 0===o?void 0:o.required)&&(a.setAttribute("required","required"),a.setAttribute("data-required",null!==(i=t.validation.required.message)&&void 0!==i?i:""));const l=document.createElement("span");l.innerText=r.label,n.appendChild(a),n.appendChild(l),n.appendChild(document.createElement("br"))}return n}populateFormFromSchema(){var e;if(!this._formSchema)return;const t=this._formSchema.properties,o=Object.keys(t);for(const i of o){const o=t[i].form;if("startenddate"===o.type){const{start:e,end:t}=this.createStartEndDateComponent(i,o);this.template.content.append(e),this.template.content.append(t);continue}let n;switch(o.type){case"select":n=this.createSelect(i,o);break;case"radio":n=this.createRadio(i,o);break;case"textarea":n=this.createTextArea(i,o);break;default:n=this.createInput(i,o)}o.validation&&"radio"!==o.type&&this.applyValidation(n,o.validation);const r=this.createErrorBubble(),l=this.createLabel(o,n,r);if(null===(e=o.validation)||void 0===e?void 0:e.invalid){const e=o.validation.invalid.message;n.setCustomValidity(e),a(n,!0,e)}this.template.content.append(l)}}componentDidRender(){if(!this._formSchema)return;const e=this.template.content.cloneNode(!0),t=this._formSchema.properties,o=Object.keys(t);for(const i of o){const o=e.querySelectorAll(`[name^=${i}]`);for(const e of o)e.oninvalid=this.validityCheckWrapper.bind(this),e.onblur=this.validityCheckWrapper.bind(this),e.onkeyup=this.fieldChanged.bind(this),e.onchange=this.fieldChanged.bind(this),"select"===t[i].form.type&&e.classList.contains("placeholder")&&e.addEventListener("change",(()=>{e.classList.remove("placeholder")})),"startenddate"===t[i].form.type&&e.hasAttribute("data-compare-with")&&(e.oninvalid=this.endDateComparisonValidator.bind(this),e.onblur=this.endDateComparisonValidator.bind(this)),"startenddate"===t[i].form.type&&"time"===e.type&&(e.oninvalid=this.startEndTimeComparitor.bind(this),e.onblur=this.startEndTimeComparitor.bind(this)),"startenddate"===t[i].form.type&&e.hasAttribute("data-compare-to")&&(e.oninvalid=this.startDateComparisonValidator.bind(this),e.onblur=this.startDateComparisonValidator.bind(this))}if(this._data&&Object.keys(this._data).length>0){const t=Object.keys(this._data);for(const o of t){const t=e.querySelectorAll(`[name=${o}]`);for(const e of t)switch(e.type){case"checkbox":"on"===this._data[o]&&(e.checked=!0);break;case"radio":e.value===this._data[o]&&(e.checked=!0);break;default:e.value=this._data[o]}}}this.fieldset.replaceChildren(e)}startEndTimeComparitor(e){var t,o;const i=e.target,n=i.getAttribute("data-formkey"),r=Array.from(i.parentElement.parentElement.parentElement.querySelectorAll(`[data-formkey=${n}]`));if(4===r.length){const n=r.find((e=>e.name.endsWith("starttime"))),l=r.find((e=>e.name.endsWith("endtime"))),s=r.find((e=>e.name.endsWith("startdate"))),d=r.find((e=>e.name.endsWith("enddate")));n.valueAsNumber>=l.valueAsNumber&&(null===(t=s.valueAsDate)||void 0===t?void 0:t.valueOf())===(null===(o=d.valueAsDate)||void 0===o?void 0:o.valueOf())?(a(l,!0,"End time cannot be the same or before the start time"),i.name.endsWith("starttime")&&this.validityCheckWrapper(e)):(l.setCustomValidity(""),a(l,!1,null),this.validityCheckWrapper(e))}}clearTimeComparitor(e){const t=e.target,o=t.getAttribute("data-formkey"),i=Array.from(t.parentElement.parentElement.parentElement.querySelectorAll(`[type=time][data-formkey=${o}]`));if(i.length){const e=i.find((e=>e.name.endsWith("endtime")));e.setCustomValidity(""),a(e,!1,null)}}startDateComparisonValidator(e){const t=e.target,o=t.getAttribute("data-compare-to"),i=t.parentElement.parentElement.parentElement.querySelector(`[name=${o}]`);this.endDateComparisonValidator({target:i},!0),this.validityCheckWrapper(e)}endDateComparisonValidator(e,t=!1){var o,i,n,r;const l=e.target;if(!l.value&&t)return;const s=l.getAttribute("data-compare-with"),d=l.parentElement.parentElement.parentElement.querySelector(`[name=${s}]`);(null===(o=l.valueAsDate)||void 0===o?void 0:o.valueOf())<(null===(i=d.valueAsDate)||void 0===i?void 0:i.valueOf())?(l.setCustomValidity(l.getAttribute("data-compare")),a(l,!0,l.getAttribute("data-compare"))):(null===(n=l.valueAsDate)||void 0===n?void 0:n.valueOf())===(null===(r=d.valueAsDate)||void 0===r?void 0:r.valueOf())?(l.setCustomValidity(""),this.validityCheckWrapper(e),this.startEndTimeComparitor(e)):(this.clearTimeComparitor(e),this.validityCheckWrapper(e))}validityCheckWrapper(e){const{target:t,hasError:o,errorMessage:i}=function(e){var t,o,i,n;e.preventDefault&&e.preventDefault();const r=e.target;let a=!0,l="";switch(r.value.length&&!r.value.replace(/\s/g,"").length?(l="This field cannot be left blank",r.setCustomValidity(l)):(l="",r.setCustomValidity&&r.setCustomValidity("")),!0){case r.validity.valueMissing:l=null!==(t=r.dataset.required)&&void 0!==t?t:"This field is required";break;case r.validity.patternMismatch:l=null!==(o=r.dataset.pattern)&&void 0!==o?o:"Incorrect format";break;case r.validity.badInput:l=null!==(i=r.dataset.badinput)&&void 0!==i?i:"Wrong input type";break;case r.validity.rangeOverflow||r.validity.rangeUnderflow:l=null!==(n=r.dataset.range)&&void 0!==n?n:"Invalid value";break;case r.validity.customError:l=r.validationMessage;break;default:a=!1}return{target:r,hasError:a,errorMessage:l}}(e);a(t,o,i)}render(){return o(i,null,o("form",{ref:e=>this.form=e,onSubmit:this.doSubmit.bind(this)},o("fieldset",{ref:e=>this.fieldset=e}),o("input",{type:"submit",ref:e=>this.submitButton=e,style:{display:"none"}})))}static get watchers(){return{formschema:["onFormSchemaChange"],data:["onDataChange"]}}};l.style='.material-symbols-rounded{font-variation-settings:"FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24}.material-symbols-rounded{font-variation-settings:"FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24}label{font-weight:500;font-size:16px;line-height:18.752px;color:#212121}label .optional{color:#757575;font-weight:normal}label .outer-container{position:relative}label .outer-container .left-icons,label .outer-container .right-icons{display:flex;position:absolute;height:24px;gap:8px}label .outer-container .left-icons tttx-icon,label .outer-container .right-icons tttx-icon{height:24px;width:24px}label .outer-container .left-icons{left:8px}label .outer-container .right-icons{right:8px}label .outer-container input,label .outer-container textarea{color:#212121;box-sizing:border-box;border:1px solid #d5d5d5;border-radius:4px;padding:0;padding-left:16px;padding-right:16px;margin-top:4px;}label .outer-container input.has-input-icon,label .outer-container textarea.has-input-icon{padding-left:40px}label .outer-container input.has-input-icon.has-left-icon,label .outer-container textarea.has-input-icon.has-left-icon{padding-left:72px}label .outer-container input.has-left-icon,label .outer-container textarea.has-left-icon{padding-left:40px}label .outer-container input.has-right-icon,label .outer-container textarea.has-right-icon{padding-right:40px}label .outer-container input.invalid,label .outer-container textarea.invalid{border:1px solid #dc0000}label .outer-container input:not([type=submit]),label .outer-container textarea:not([type=submit]){font-family:"Roboto", serif;width:100%;height:36px;font-size:16px;line-height:18.752px}label .outer-container input[type=radio],label .outer-container textarea[type=radio]{width:20px;height:20px}label .outer-container input[type=date],label .outer-container textarea[type=date]{background:white;display:block;min-width:calc(100% - 18px);line-height:37px}label .outer-container input[readonly],label .outer-container textarea[readonly]{cursor:default;pointer-events:none;user-select:none;color:gray}label .outer-container input:focus,label .outer-container textarea:focus{border-color:#1479c6}label .outer-container input:focus-visible,label .outer-container textarea:focus-visible{outline:none}label .outer-container textarea{padding:8px;height:auto;min-height:100px;resize:vertical}label .outer-container.inputBlock{display:flex;align-items:center;line-height:21px}label .outer-container.inputBlock .left-icons,label .outer-container.inputBlock .right-icons{margin-top:4px}label .outer-container.inputBlock.readonly{pointer-events:none;user-select:none;color:gray}label .outer-container.inputBlock.radioBlock{display:block}label .outer-container.inputInline{display:flex;white-space:nowrap;align-items:center;margin:0}label .outer-container.inputInline input{margin-top:0}label .secondarylabel{color:#757575;font-size:14px;line-height:16.408px;font-weight:normal;display:flex;margin-top:4px}label .errorBubble{position:relative;font-size:14px;line-height:16.408px;font-weight:normal;width:100%;font-family:"Roboto", sans-serif;color:#dc0000;display:flex;align-content:center;align-items:center;justify-items:center;margin-top:4px}label .errorBubble:not(.visible){display:none}label .errorBubble span{color:#dc0000;font-size:16px;margin-right:4px}.material-symbols-rounded{font-family:"Material Symbols Rounded", sans-serif;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;color:#9e9e9e}button{cursor:pointer}.button{font-family:Roboto, serif;box-sizing:border-box;height:36px;min-width:36px;padding:0;margin:0;background:transparent;color:#212121;border:1px solid #c8c8c8;border-radius:4px;text-transform:uppercase;display:flex;justify-content:left;align-items:center;font-size:14px;font-weight:500}.button-content{display:block;padding:0 16px}.icon-left,.icon-right{margin-top:4px}.iconleft{padding-left:8px}.iconleft .button-content{padding-left:4px}.iconright{padding-right:8px}.iconright .button-content{padding-right:4px}.notext{padding:0 6px}.button:active{background:rgba(17, 17, 17, 0.2);border:1px solid #d5d5d5}.primary{background:#1479c6;border:1px solid #1479c6;color:white}.primary:active{background:#1464a2;border:1px solid #1464a2}.borderless{background:transparent;border:none;color:#212121}.borderless:active{background:rgba(17, 17, 17, 0.2);border:none}.borderless-circle{background:transparent;border:none;color:#212121;border-radius:50%}.borderless-circle:active{border:none}.borderless-circle:focus{border-color:transparent}.danger{background:#dc0000;border:1px solid #dc0000;color:white}.danger:active{background:#b00000;border:1px solid #b00000}.disabled{background:#aeaeae;border:none;color:#4c4c4c;cursor:not-allowed}.disabled:active{background:#aeaeae;border:none;color:#4c4c4c;cursor:not-allowed}@media (hover: hover){.button:hover{background:rgba(17, 17, 17, 0.1);border:1px solid #d5d5d5}.primary:hover{background:#146eb3;border:1px solid #146eb3}.borderless:hover{background:rgba(17, 17, 17, 0.1);border:none}.borderless-circle:hover{background:rgba(17, 17, 17, 0.1);border:none}.danger:hover{background:#c60000;border:1px solid #c60000}.disabled:hover{background:#aeaeae;border:none;color:#4c4c4c;cursor:not-allowed}}:host{display:block}fieldset{margin:0;padding:0;border:none}label{display:block;position:relative;margin-bottom:16px}.inlineLabel{font-weight:400;display:inline-block;vertical-align:top;padding-top:4px}input[type=checkbox]{width:18px;height:18px}input~label{font-weight:400}select{font-family:"Roboto", serif;box-sizing:border-box;width:100%;height:36px;padding:0 16px;font-size:16px;border:1px solid #d5d5d5;border-radius:4px;margin-top:4px}.placeholder{color:#9e9e9e}.placeholder option{color:initial}select.invalid:invalid{border:1px solid #dc0000}select~.errorBubble{position:relative;font-size:14px;font-weight:normal;width:100%;font-family:"Roboto", sans-serif;color:#dc0000;display:flex;align-content:center;align-items:center;justify-items:center}select~.errorBubble:not(.visible){visibility:hidden}select~.errorBubble span{color:#dc0000;font-size:16px;margin-right:4px;height:16px}select.invalid:invalid~.errorBubble{position:relative;font-size:14px;font-weight:normal;width:100%;font-family:"Roboto", sans-serif;color:#dc0000;visibility:visible}select:focus{border-color:#1479c6}select:focus-visible{outline:none}.button{padding:0 16px}.footer{display:flex;gap:16px;flex-direction:row-reverse}label.flex-label{display:flex;flex-direction:column;width:300px;box-sizing:border-box}label.flex-label input[type=date]{flex-grow:1;min-width:auto}label.flex-label input[type=time]{min-width:auto;text-align:center;width:180px;margin-left:16px}';export{l as tttx_form}