q2-tecton-elements 1.23.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/dist/cjs/action-sheet-4b366e9a.js +84 -0
  2. package/dist/cjs/{index-0648c2ec.js → index-dc92e71f.js} +32 -5
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/q2-action-sheet.cjs.entry.js +218 -0
  5. package/dist/cjs/q2-badge_2.cjs.entry.js +46 -17
  6. package/dist/cjs/q2-btn_2.cjs.entry.js +1 -1
  7. package/dist/cjs/q2-calendar.cjs.entry.js +2 -4
  8. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  10. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
  14. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  16. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-dropdown.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-optgroup_2.cjs.entry.js +93 -0
  24. package/dist/cjs/q2-option-list_2.cjs.entry.js +226 -86
  25. package/dist/cjs/q2-pagination.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-pill.cjs.entry.js +57 -18
  27. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-section.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-select.cjs.entry.js +148 -409
  31. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-tab-container.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-tag.cjs.entry.js +21 -7
  36. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  37. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  38. package/dist/collection/collection-manifest.json +1 -0
  39. package/dist/collection/components/q2-action-sheet/index.js +345 -0
  40. package/dist/collection/components/q2-action-sheet/styles.css +215 -0
  41. package/dist/collection/components/q2-calendar/index.js +2 -4
  42. package/dist/collection/components/q2-checkbox/index.js +2 -2
  43. package/dist/collection/components/q2-dropdown/index.js +1 -1
  44. package/dist/collection/components/q2-input/index.js +46 -17
  45. package/dist/collection/components/q2-loading/index.js +1 -1
  46. package/dist/collection/components/q2-optgroup/styles.css +2 -2
  47. package/dist/collection/components/q2-option/index.js +3 -58
  48. package/dist/collection/components/q2-option/styles.css +7 -0
  49. package/dist/collection/components/q2-option-list/index.js +290 -102
  50. package/dist/collection/components/q2-pill/index.js +79 -18
  51. package/dist/collection/components/q2-pill/styles.css +1 -2
  52. package/dist/collection/components/q2-popover/index.js +17 -3
  53. package/dist/collection/components/q2-popover/styles.css +10 -67
  54. package/dist/collection/components/q2-radio/index.js +2 -2
  55. package/dist/collection/components/q2-select/index.js +179 -427
  56. package/dist/collection/components/q2-select/styles.css +5 -11
  57. package/dist/collection/components/q2-tag/index.js +33 -19
  58. package/dist/collection/utils/action-sheet.js +79 -0
  59. package/dist/collection/utils/index.js +29 -5
  60. package/dist/components/action-sheet.js +81 -0
  61. package/dist/components/index.d.ts +1 -0
  62. package/dist/components/index.js +1 -0
  63. package/dist/components/index10.js +1 -1
  64. package/dist/components/index11.js +42 -353
  65. package/dist/components/index12.js +44 -99
  66. package/dist/components/index13.js +495 -583
  67. package/dist/components/index14.js +137 -0
  68. package/dist/components/index15.js +629 -0
  69. package/dist/components/index5.js +1 -1
  70. package/dist/components/index6.js +1 -1
  71. package/dist/components/index7.js +1 -1
  72. package/dist/components/index8.js +46 -17
  73. package/dist/components/index9.js +2 -2
  74. package/dist/components/q2-action-sheet.d.ts +11 -0
  75. package/dist/components/q2-action-sheet.js +282 -0
  76. package/dist/components/q2-calendar.js +2 -4
  77. package/dist/components/q2-card.js +1 -1
  78. package/dist/components/q2-carousel-pane.js +1 -1
  79. package/dist/components/q2-carousel.js +1 -1
  80. package/dist/components/q2-chart-area.js +1 -1
  81. package/dist/components/q2-chart-bar.js +1 -1
  82. package/dist/components/q2-chart-donut.js +1 -1
  83. package/dist/components/q2-checkbox-group.js +1 -1
  84. package/dist/components/q2-checkbox.js +1 -1
  85. package/dist/components/q2-dropdown.js +2 -2
  86. package/dist/components/q2-editable-field.js +1 -1
  87. package/dist/components/q2-loc.js +1 -1
  88. package/dist/components/q2-month-picker.js +1 -1
  89. package/dist/components/q2-optgroup.js +1 -70
  90. package/dist/components/q2-option-list.js +1 -1
  91. package/dist/components/q2-option.js +1 -76
  92. package/dist/components/q2-pagination.js +1 -1
  93. package/dist/components/q2-pill.js +62 -21
  94. package/dist/components/q2-popover.js +1 -1
  95. package/dist/components/q2-radio-group.js +1 -1
  96. package/dist/components/q2-radio.js +3 -3
  97. package/dist/components/q2-section.js +1 -1
  98. package/dist/components/q2-select.js +179 -427
  99. package/dist/components/q2-stepper-pane.js +1 -1
  100. package/dist/components/q2-stepper-vertical.js +1 -1
  101. package/dist/components/q2-stepper.js +1 -1
  102. package/dist/components/q2-tab-container.js +1 -1
  103. package/dist/components/q2-tag.js +25 -11
  104. package/dist/components/q2-textarea.js +1 -1
  105. package/dist/docs.d.ts +148 -0
  106. package/dist/docs.json +8755 -0
  107. package/dist/esm/action-sheet-a9597b32.js +81 -0
  108. package/dist/esm/{index-501fd22e.js → index-d4a87058.js} +30 -6
  109. package/dist/esm/loader.js +1 -1
  110. package/dist/esm/q2-action-sheet.entry.js +214 -0
  111. package/dist/esm/q2-badge_2.entry.js +46 -17
  112. package/dist/esm/q2-btn_2.entry.js +1 -1
  113. package/dist/esm/q2-calendar.entry.js +2 -4
  114. package/dist/esm/q2-card.entry.js +1 -1
  115. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  116. package/dist/esm/q2-carousel.entry.js +1 -1
  117. package/dist/esm/q2-chart-area.entry.js +1 -1
  118. package/dist/esm/q2-chart-bar.entry.js +1 -1
  119. package/dist/esm/q2-chart-donut.entry.js +1 -1
  120. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  121. package/dist/esm/q2-checkbox.entry.js +1 -1
  122. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  123. package/dist/esm/q2-dropdown.entry.js +1 -1
  124. package/dist/esm/q2-editable-field.entry.js +1 -1
  125. package/dist/esm/q2-icon.entry.js +1 -1
  126. package/dist/esm/q2-loc.entry.js +1 -1
  127. package/dist/esm/q2-message.entry.js +1 -1
  128. package/dist/esm/q2-month-picker.entry.js +1 -1
  129. package/dist/esm/q2-optgroup_2.entry.js +88 -0
  130. package/dist/esm/q2-option-list_2.entry.js +226 -86
  131. package/dist/esm/q2-pagination.entry.js +1 -1
  132. package/dist/esm/q2-pill.entry.js +57 -18
  133. package/dist/esm/q2-radio-group.entry.js +1 -1
  134. package/dist/esm/q2-radio.entry.js +1 -1
  135. package/dist/esm/q2-section.entry.js +1 -1
  136. package/dist/esm/q2-select.entry.js +148 -409
  137. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  138. package/dist/esm/q2-stepper-vertical.entry.js +1 -1
  139. package/dist/esm/q2-stepper.entry.js +1 -1
  140. package/dist/esm/q2-tab-container.entry.js +1 -1
  141. package/dist/esm/q2-tag.entry.js +22 -8
  142. package/dist/esm/q2-tecton-elements.js +1 -1
  143. package/dist/esm/q2-textarea.entry.js +1 -1
  144. package/dist/q2-tecton-elements/p-059065e4.js +1 -0
  145. package/dist/q2-tecton-elements/{p-9b101e22.entry.js → p-1a744921.entry.js} +1 -1
  146. package/dist/q2-tecton-elements/{p-3fd5d010.entry.js → p-1b95e43f.entry.js} +1 -1
  147. package/dist/q2-tecton-elements/{p-3603fcdc.entry.js → p-1ea4b8bd.entry.js} +1 -1
  148. package/dist/q2-tecton-elements/{p-53be87c8.entry.js → p-1f3eb04c.entry.js} +1 -1
  149. package/dist/q2-tecton-elements/p-25839309.entry.js +1 -0
  150. package/dist/q2-tecton-elements/{p-38a33baa.entry.js → p-274ec152.entry.js} +1 -1
  151. package/dist/q2-tecton-elements/{p-6be86940.entry.js → p-2ba9e1a2.entry.js} +1 -1
  152. package/dist/q2-tecton-elements/{p-ebd7efa5.entry.js → p-2c309c54.entry.js} +1 -1
  153. package/dist/q2-tecton-elements/{p-3e9a30c4.entry.js → p-2cc70f49.entry.js} +1 -1
  154. package/dist/q2-tecton-elements/{p-604b22a8.entry.js → p-2ceb41c4.entry.js} +1 -1
  155. package/dist/q2-tecton-elements/p-2e938b20.entry.js +1 -0
  156. package/dist/q2-tecton-elements/{p-5b1aba1a.entry.js → p-306a4bc7.entry.js} +1 -1
  157. package/dist/q2-tecton-elements/p-32f44993.entry.js +1 -0
  158. package/dist/q2-tecton-elements/{p-d7b27803.entry.js → p-3a9aac19.entry.js} +1 -1
  159. package/dist/q2-tecton-elements/p-3c73ce3f.entry.js +1 -0
  160. package/dist/q2-tecton-elements/p-4a95f78e.entry.js +1 -0
  161. package/dist/q2-tecton-elements/{p-6b7e1ebd.entry.js → p-4b48a49d.entry.js} +1 -1
  162. package/dist/q2-tecton-elements/p-4b92e44e.entry.js +1 -0
  163. package/dist/q2-tecton-elements/p-5ecb9c27.entry.js +1 -0
  164. package/dist/q2-tecton-elements/p-6779270e.entry.js +1 -0
  165. package/dist/q2-tecton-elements/{p-70b01387.entry.js → p-72fc58e7.entry.js} +1 -1
  166. package/dist/q2-tecton-elements/p-7ac02ae5.entry.js +1 -0
  167. package/dist/q2-tecton-elements/{p-78fac0fa.entry.js → p-7c168977.entry.js} +1 -1
  168. package/dist/q2-tecton-elements/{p-d27b2caa.entry.js → p-7c9bf80a.entry.js} +1 -1
  169. package/dist/q2-tecton-elements/p-83d678c7.entry.js +1 -0
  170. package/dist/q2-tecton-elements/p-a1926e65.js +1 -0
  171. package/dist/q2-tecton-elements/{p-24f4571d.entry.js → p-a3a5b57b.entry.js} +1 -1
  172. package/dist/q2-tecton-elements/p-a6296870.entry.js +1 -0
  173. package/dist/q2-tecton-elements/{p-45d61789.entry.js → p-a64e7eb1.entry.js} +1 -1
  174. package/dist/q2-tecton-elements/{p-8dea9a0c.entry.js → p-ad83984e.entry.js} +1 -1
  175. package/dist/q2-tecton-elements/{p-bf41e71b.entry.js → p-bf0ed24a.entry.js} +1 -1
  176. package/dist/q2-tecton-elements/{p-a2add94e.entry.js → p-bff85959.entry.js} +1 -1
  177. package/dist/q2-tecton-elements/{p-7aa80653.entry.js → p-c4a9ab25.entry.js} +1 -1
  178. package/dist/q2-tecton-elements/p-ea5383ba.entry.js +1 -0
  179. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  180. package/dist/test/helpers.js +3 -2
  181. package/dist/types/components/q2-action-sheet/index.d.ts +52 -0
  182. package/dist/types/components/q2-checkbox/index.d.ts +4 -1
  183. package/dist/types/components/q2-input/index.d.ts +5 -0
  184. package/dist/types/components/q2-option/index.d.ts +1 -4
  185. package/dist/types/components/q2-option-list/index.d.ts +16 -8
  186. package/dist/types/components/q2-pill/index.d.ts +10 -1
  187. package/dist/types/components/q2-popover/index.d.ts +2 -0
  188. package/dist/types/components/q2-select/index.d.ts +45 -47
  189. package/dist/types/components/q2-tag/index.d.ts +3 -3
  190. package/dist/types/components.d.ts +44 -17
  191. package/dist/types/global.d.ts +9 -2
  192. package/dist/types/utils/action-sheet.d.ts +12 -0
  193. package/dist/types/utils/index.d.ts +4 -1
  194. package/dist/types/workspace/workspace/Tecton_tecton-production_master/packages/q2-tecton-elements/.stencil/test/helpers.d.ts +1 -1
  195. package/package.json +4 -2
  196. package/dist/cjs/q2-optgroup.cjs.entry.js +0 -56
  197. package/dist/cjs/q2-option.cjs.entry.js +0 -46
  198. package/dist/esm/q2-optgroup.entry.js +0 -52
  199. package/dist/esm/q2-option.entry.js +0 -42
  200. package/dist/q2-tecton-elements/p-18629cbf.entry.js +0 -1
  201. package/dist/q2-tecton-elements/p-2c20fc43.entry.js +0 -1
  202. package/dist/q2-tecton-elements/p-3813f51d.entry.js +0 -1
  203. package/dist/q2-tecton-elements/p-68ef0786.entry.js +0 -1
  204. package/dist/q2-tecton-elements/p-a510290a.js +0 -1
  205. package/dist/q2-tecton-elements/p-acc77332.entry.js +0 -1
  206. package/dist/q2-tecton-elements/p-ba73ee1f.entry.js +0 -1
  207. package/dist/q2-tecton-elements/p-ba76ecfd.entry.js +0 -1
  208. package/dist/q2-tecton-elements/p-bbdae095.entry.js +0 -1
  209. package/dist/q2-tecton-elements/p-d68b5eb3.entry.js +0 -1
  210. package/dist/q2-tecton-elements/p-d88e4383.entry.js +0 -1
  211. package/dist/q2-tecton-elements/p-f1d06917.entry.js +0 -1
  212. package/dist/q2-tecton-elements/p-f6e868c1.entry.js +0 -1
@@ -138,7 +138,7 @@ button {
138
138
  .q2-select-input {
139
139
  margin: 0;
140
140
  --tct-input-min-height: var(--tct-select-input-min-height, var(--t-select-input-min-height));
141
- --tct-input-max-height: var(--tct-select-input-max-height, var(--t-select-input-max-height, 100px));
141
+ --tct-input-max-height: var(--tct-select-input-max-height, var(--t-select-input-max-height, none));
142
142
  }
143
143
 
144
144
  ::slotted([slot=_selected-display]) {
@@ -171,22 +171,16 @@ button {
171
171
  width: calc(100% - 68px - var(--tct-scale-3, var(--app-scale-3x, 15px)));
172
172
  }
173
173
 
174
- .dropdown-open .q2-select-dropdown {
175
- overflow-y: auto;
176
- max-height: 300px;
177
- }
178
-
179
174
  .multi-select-header {
180
175
  padding: var(--tct-scale-1, var(--app-scale-1x, 5px)) var(--tct-scale-2, var(--app-scale-2x, 10px));
181
176
  position: sticky;
182
177
  top: 0;
183
178
  z-index: 5;
184
179
  background: var(--app-white);
185
- }
186
-
187
- .show-all-options {
188
- margin-right: var(--tct-scale-1, var(--app-scale-1x, 5px));
189
- margin-left: var(--tct-scale-2, var(--app-scale-2x, 10px));
180
+ display: inline-grid;
181
+ grid-template-columns: repeat(3, auto);
182
+ gap: var(--app-scale-2x, 10px);
183
+ align-items: center;
190
184
  }
191
185
 
192
186
  .q2-element-dropdown.dropup {
@@ -1,7 +1,9 @@
1
- import { h } from '@stencil/core';
1
+ import { h, Host, } from '@stencil/core';
2
2
  import { isEventFromElement, loc, overrideFocus } from 'src/utils';
3
+ import { shouldShowActionSheet, showActionSheetList } from 'src/utils/action-sheet';
3
4
  export class Q2Tag {
4
5
  constructor() {
6
+ var _a;
5
7
  this.activateFirstOption = false;
6
8
  /// Getters ///
7
9
  /// Helpers
@@ -24,14 +26,26 @@ export class Q2Tag {
24
26
  const { value } = event.detail;
25
27
  this.click.emit({ value });
26
28
  };
27
- this.handleClick = (event) => {
29
+ this.handleClick = async (event) => {
28
30
  event.stopPropagation();
29
31
  this.activateFirstOption = false;
30
- this.popoverElement.toggle();
32
+ if (shouldShowActionSheet(this)) {
33
+ const { value } = await showActionSheetList(this, event);
34
+ this.click.emit({ value });
35
+ }
36
+ else {
37
+ this.popoverElement.toggle();
38
+ }
31
39
  };
32
- this.handleKeydown = (event) => {
40
+ this.handleKeydown = async (event) => {
33
41
  this.activateFirstOption = true;
34
- this.optionList.handleExternalKeydown(event);
42
+ if (shouldShowActionSheet(this, event)) {
43
+ const { value } = await showActionSheetList(this, event);
44
+ this.click.emit({ value });
45
+ }
46
+ else {
47
+ this.optionList.handleExternalKeydown(event);
48
+ }
35
49
  };
36
50
  this.handleButtonFocusout = (event) => {
37
51
  var _a;
@@ -44,8 +58,8 @@ export class Q2Tag {
44
58
  this.dropdownBtn.focus();
45
59
  this.dropdownBtn.click();
46
60
  };
61
+ this.hoist = !!((_a = window.Tecton) === null || _a === void 0 ? void 0 : _a.useActionSheets);
47
62
  this.open = undefined;
48
- this.role = 'listitem';
49
63
  this.label = undefined;
50
64
  this.theme = undefined;
51
65
  this.popoverMinHeight = 150;
@@ -91,7 +105,7 @@ export class Q2Tag {
91
105
  const wrapperClassNames = ['tag-wrapper'];
92
106
  if (hasOptions)
93
107
  wrapperClassNames.push('has-options');
94
- return (h("click-elsewhere", { onChange: this.onClickElsewhere }, h("div", { class: wrapperClassNames.join(' '), onClick: e => e.stopPropagation() }, h("div", { class: "tag" }, this.label), this.hasOptions && (h("div", { class: "btn-wrapper", onClick: this.handleWrapperClick }, h("button", { ref: el => (this.dropdownBtn = el), "test-id": "btn-control", onClick: this.handleClick, onKeyDown: this.handleKeydown, onFocusout: this.handleButtonFocusout, "aria-controls": "option-list", "aria-haspopup": "true", "aria-expanded": open ? 'true' : 'false', "aria-label": loc('tecton.element.tag.viewOptions') }, h("q2-icon", { type: "options" }))))), this.hasOptions && (h("q2-popover", { ref: el => (this.popoverElement = el), controlElement: this.dropdownBtn, open: this.open, minHeight: this.popoverMinHeight, direction: this.popoverDirection }, h("q2-option-list", { id: "option-list", ref: el => (this.optionList = el), onChange: this.handleChange, align: "right", type: "menu", "no-select": true }, h("slot", null))))));
108
+ return (h(Host, { role: "listitem" }, h("click-elsewhere", { onChange: this.onClickElsewhere }, h("div", { class: wrapperClassNames.join(' '), onClick: e => e.stopPropagation() }, h("div", { class: "tag" }, this.label), this.hasOptions && (h("div", { class: "btn-wrapper", onClick: this.handleWrapperClick }, h("button", { ref: el => (this.dropdownBtn = el), "test-id": "btn-control", onClick: this.handleClick, onKeyDown: this.handleKeydown, onFocusout: this.handleButtonFocusout, "aria-controls": "option-list", "aria-haspopup": "true", "aria-expanded": open ? 'true' : 'false', "aria-label": loc('tecton.element.tag.viewOptions') }, h("q2-icon", { type: "options" }))))), this.hasOptions && (h("q2-popover", { ref: el => (this.popoverElement = el), controlElement: this.dropdownBtn, open: this.open, minHeight: this.popoverMinHeight, direction: this.popoverDirection, align: "right" }, h("q2-option-list", { id: "option-list", ref: el => (this.optionList = el), onChange: this.handleChange, align: "right", type: "menu", "no-select": true }, h("slot", null)))))));
95
109
  }
96
110
  static get is() { return "q2-tag"; }
97
111
  static get encapsulation() { return "shadow"; }
@@ -107,9 +121,9 @@ export class Q2Tag {
107
121
  }
108
122
  static get properties() {
109
123
  return {
110
- "open": {
124
+ "hoist": {
111
125
  "type": "boolean",
112
- "mutable": true,
126
+ "mutable": false,
113
127
  "complexType": {
114
128
  "original": "boolean",
115
129
  "resolved": "boolean",
@@ -121,15 +135,16 @@ export class Q2Tag {
121
135
  "tags": [],
122
136
  "text": ""
123
137
  },
124
- "attribute": "open",
125
- "reflect": true
138
+ "attribute": "hoist",
139
+ "reflect": false,
140
+ "defaultValue": "!!window.Tecton?.useActionSheets"
126
141
  },
127
- "role": {
128
- "type": "string",
129
- "mutable": false,
142
+ "open": {
143
+ "type": "boolean",
144
+ "mutable": true,
130
145
  "complexType": {
131
- "original": "string",
132
- "resolved": "string",
146
+ "original": "boolean",
147
+ "resolved": "boolean",
133
148
  "references": {}
134
149
  },
135
150
  "required": false,
@@ -138,9 +153,8 @@ export class Q2Tag {
138
153
  "tags": [],
139
154
  "text": ""
140
155
  },
141
- "attribute": "role",
142
- "reflect": true,
143
- "defaultValue": "'listitem'"
156
+ "attribute": "open",
157
+ "reflect": true
144
158
  },
145
159
  "label": {
146
160
  "type": "string",
@@ -0,0 +1,79 @@
1
+ export const shouldShowActionSheet = (component, event) => {
2
+ var _a;
3
+ const isDialogSupported = 'open' in document.createElement('dialog');
4
+ if (!isDialogSupported)
5
+ return false;
6
+ const canShowActionSheet = !!((_a = window.TectonElements) === null || _a === void 0 ? void 0 : _a.showActionSheet);
7
+ if (!canShowActionSheet)
8
+ return false;
9
+ const keysThatTriggerOpen = ['ArrowDown', 'ArrowUp', 'PageDown', 'PageUp', 'Home', 'End'];
10
+ if (event) {
11
+ const eventIsKeyboardEvent = event instanceof KeyboardEvent;
12
+ const eventIsMouseEvent = event instanceof MouseEvent;
13
+ const keyboardEventShouldTriggerOpen = eventIsKeyboardEvent && keysThatTriggerOpen.includes(event.key);
14
+ const mouseEventShouldTriggerOpen = eventIsMouseEvent && event.type === 'click';
15
+ const eventShouldTriggerOpen = mouseEventShouldTriggerOpen || keyboardEventShouldTriggerOpen;
16
+ if (!eventShouldTriggerOpen)
17
+ return false;
18
+ }
19
+ if (component.hoist)
20
+ return true;
21
+ return false;
22
+ };
23
+ const parseOptions = (options) => {
24
+ const defaultOption = {
25
+ disabled: false,
26
+ display: '',
27
+ hidden: false,
28
+ multiline: false,
29
+ value: '',
30
+ innerHTML: '',
31
+ };
32
+ const optionPropsToGet = Object.keys(defaultOption);
33
+ const defaultOptgroup = {
34
+ disabled: false,
35
+ label: '',
36
+ options: [],
37
+ };
38
+ const optgroupPropsToGet = Object.keys(defaultOptgroup);
39
+ return options.map(option => {
40
+ if (option.tagName === 'Q2-OPTGROUP') {
41
+ const optgroup = option;
42
+ return optgroupPropsToGet.reduce((acc, prop) => {
43
+ if (prop === 'options') {
44
+ const options = Array.from(option.children).filter(child => child.tagName === 'Q2-OPTION' || child.tagName === 'Q2-OPTGROUP');
45
+ acc[prop] = parseOptions(options);
46
+ }
47
+ else {
48
+ acc[prop] = optgroup[prop];
49
+ }
50
+ return acc;
51
+ }, Object.assign({}, defaultOptgroup));
52
+ }
53
+ else if (option.tagName === 'Q2-OPTION') {
54
+ return optionPropsToGet.reduce((acc, prop) => {
55
+ acc[prop] = option[prop];
56
+ return acc;
57
+ }, Object.assign({}, defaultOption));
58
+ }
59
+ });
60
+ };
61
+ export const buildListData = async (component, event) => {
62
+ return {
63
+ appearance: 'list',
64
+ title: component.label || '',
65
+ description: '',
66
+ event,
67
+ listProps: {
68
+ multiple: !!component.optionList.multiple,
69
+ selectedOptions: component.optionList.selectedOptions || [],
70
+ noSelect: !!component.optionList.noSelect,
71
+ },
72
+ options: parseOptions(await component.optionList.getContents()),
73
+ };
74
+ };
75
+ export const showActionSheetList = async (component, event) => {
76
+ var _a;
77
+ const listData = await buildListData(component, event);
78
+ return (_a = window.TectonElements) === null || _a === void 0 ? void 0 : _a.showActionSheet(listData);
79
+ };
@@ -1,5 +1,27 @@
1
1
  import { h } from '@stencil/core';
2
2
  import smoothScroll from 'smoothscroll-polyfill';
3
+ export function isMobile() {
4
+ return /Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile|IEMobile|Windows Phone|Opera Mini/i.test(navigator.userAgent);
5
+ }
6
+ export function isHostLosingFocus(event, hostElement) {
7
+ const type = event.type;
8
+ const focusInTypes = ['focusin', 'focus'];
9
+ const isFocusIn = focusInTypes.includes(type);
10
+ // on focusin: `target` is element losing focus, `relatedTarget` is element gaining focus
11
+ // on focusout: `target` is element gaining focus, `relatedTarget` is element losing focus
12
+ const elementGainingFocus = isFocusIn ? event.target : event.relatedTarget;
13
+ const isElementNestedInHostElement = (element) => {
14
+ if (element === hostElement)
15
+ return true;
16
+ if (element.parentElement) {
17
+ return isElementNestedInHostElement(element.parentElement);
18
+ }
19
+ return false;
20
+ };
21
+ if (!(elementGainingFocus instanceof HTMLElement))
22
+ return false;
23
+ return !isElementNestedInHostElement(elementGainingFocus);
24
+ }
3
25
  export function isRelatedTargetWithinHost(event, element) {
4
26
  return event.relatedTarget !== element && !element.contains(event.relatedTarget);
5
27
  }
@@ -31,11 +53,13 @@ let guid = 1000;
31
53
  export function createGuid() {
32
54
  return guid++;
33
55
  }
34
- export function nextPaint(fn, execute) {
35
- if (execute)
36
- fn();
37
- else
38
- requestAnimationFrame(() => nextPaint(fn, true));
56
+ export function nextPaint(fn) {
57
+ requestAnimationFrame(() => {
58
+ requestAnimationFrame(fn);
59
+ });
60
+ }
61
+ export function waitForNextPaint() {
62
+ return new Promise(resolve => nextPaint(resolve));
39
63
  }
40
64
  export function capitalize(value) {
41
65
  return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;
@@ -0,0 +1,81 @@
1
+ const shouldShowActionSheet = (component, event) => {
2
+ var _a;
3
+ const isDialogSupported = 'open' in document.createElement('dialog');
4
+ if (!isDialogSupported)
5
+ return false;
6
+ const canShowActionSheet = !!((_a = window.TectonElements) === null || _a === void 0 ? void 0 : _a.showActionSheet);
7
+ if (!canShowActionSheet)
8
+ return false;
9
+ const keysThatTriggerOpen = ['ArrowDown', 'ArrowUp', 'PageDown', 'PageUp', 'Home', 'End'];
10
+ if (event) {
11
+ const eventIsKeyboardEvent = event instanceof KeyboardEvent;
12
+ const eventIsMouseEvent = event instanceof MouseEvent;
13
+ const keyboardEventShouldTriggerOpen = eventIsKeyboardEvent && keysThatTriggerOpen.includes(event.key);
14
+ const mouseEventShouldTriggerOpen = eventIsMouseEvent && event.type === 'click';
15
+ const eventShouldTriggerOpen = mouseEventShouldTriggerOpen || keyboardEventShouldTriggerOpen;
16
+ if (!eventShouldTriggerOpen)
17
+ return false;
18
+ }
19
+ if (component.hoist)
20
+ return true;
21
+ return false;
22
+ };
23
+ const parseOptions = (options) => {
24
+ const defaultOption = {
25
+ disabled: false,
26
+ display: '',
27
+ hidden: false,
28
+ multiline: false,
29
+ value: '',
30
+ innerHTML: '',
31
+ };
32
+ const optionPropsToGet = Object.keys(defaultOption);
33
+ const defaultOptgroup = {
34
+ disabled: false,
35
+ label: '',
36
+ options: [],
37
+ };
38
+ const optgroupPropsToGet = Object.keys(defaultOptgroup);
39
+ return options.map(option => {
40
+ if (option.tagName === 'Q2-OPTGROUP') {
41
+ const optgroup = option;
42
+ return optgroupPropsToGet.reduce((acc, prop) => {
43
+ if (prop === 'options') {
44
+ const options = Array.from(option.children).filter(child => child.tagName === 'Q2-OPTION' || child.tagName === 'Q2-OPTGROUP');
45
+ acc[prop] = parseOptions(options);
46
+ }
47
+ else {
48
+ acc[prop] = optgroup[prop];
49
+ }
50
+ return acc;
51
+ }, Object.assign({}, defaultOptgroup));
52
+ }
53
+ else if (option.tagName === 'Q2-OPTION') {
54
+ return optionPropsToGet.reduce((acc, prop) => {
55
+ acc[prop] = option[prop];
56
+ return acc;
57
+ }, Object.assign({}, defaultOption));
58
+ }
59
+ });
60
+ };
61
+ const buildListData = async (component, event) => {
62
+ return {
63
+ appearance: 'list',
64
+ title: component.label || '',
65
+ description: '',
66
+ event,
67
+ listProps: {
68
+ multiple: !!component.optionList.multiple,
69
+ selectedOptions: component.optionList.selectedOptions || [],
70
+ noSelect: !!component.optionList.noSelect,
71
+ },
72
+ options: parseOptions(await component.optionList.getContents()),
73
+ };
74
+ };
75
+ const showActionSheetList = async (component, event) => {
76
+ var _a;
77
+ const listData = await buildListData(component, event);
78
+ return (_a = window.TectonElements) === null || _a === void 0 ? void 0 : _a.showActionSheet(listData);
79
+ };
80
+
81
+ export { showActionSheetList as a, shouldShowActionSheet as s };
@@ -1,5 +1,6 @@
1
1
  /* Q2TectonElements custom elements */
2
2
  export { ClickElsewhere as ClickElsewhere } from '../types/components/click-elsewhere/index';
3
+ export { Q2ActionSheet as Q2ActionSheet } from '../types/components/q2-action-sheet/index';
3
4
  export { Q2Avatar as Q2Avatar } from '../types/components/q2-avatar/index';
4
5
  export { Q2Badge as Q2Badge } from '../types/components/q2-badge/index';
5
6
  export { Q2Btn as Q2Btn } from '../types/components/q2-btn/index';
@@ -1,5 +1,6 @@
1
1
  export { setAssetPath, setPlatformOptions } from '@stencil/core/internal/client';
2
2
  export { ClickElsewhere, defineCustomElement as defineCustomElementClickElsewhere } from './click-elsewhere.js';
3
+ export { Q2ActionSheet, defineCustomElement as defineCustomElementQ2ActionSheet } from './q2-action-sheet.js';
3
4
  export { Q2Avatar, defineCustomElement as defineCustomElementQ2Avatar } from './q2-avatar.js';
4
5
  export { Q2Badge, defineCustomElement as defineCustomElementQ2Badge } from './q2-badge.js';
5
6
  export { Q2Btn, defineCustomElement as defineCustomElementQ2Btn } from './q2-btn.js';
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
2
- import { j as isFirefox, o as overrideFocus, n as nextPaint, i as isEventFromElement } from './index13.js';
2
+ import { p as isFirefox, o as overrideFocus, n as nextPaint, a as isEventFromElement } from './index15.js';
3
3
  import { d as defineCustomElement$1 } from './index7.js';
4
4
 
5
5
  const stylesCss = "*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #33b4ff #06C)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{display:block}:host([hidden]){display:none}.message{border-left-width:var(--tct-message-bar-width, var(--t-message-bar-width, var(--app-scale-1x, 5px)));border-left-style:solid;--comp-line-height:var(--tct-message-line-height, var(--t-message-line-height, var(--app-line-height, 1.428571429em)));display:grid;gap:var(--tct-scale-1, var(--app-scale-1x, 5px));align-items:flex-start;background:var(--tct-message-bg, var(--t-message-bg, var(--tct-gray-14, var(--t-gray-14, var(--tct-gray-l3, var(--app-gray-l3, #f2f2f2))))));color:var(--tct-message-font-color, var(--t-message-font-color, inherit));box-shadow:var(--tct-message-box-shadow, var(--t-message-box-shadow, inherit));border-radius:var(--tct-message-border-radius, var(--t-message-border-radius, inherit))}.message:focus{box-shadow:var(--const-global-focus)}.message-icon{--comp-top-offset:calc(calc(var(--comp-line-height) - var(--comp-icon-size)) / 2);--tct-icon-size:var(--comp-icon-size);top:var(--comp-top-offset);margin-bottom:calc(var(--comp-top-offset) * -1)}.message-content{flex:1;line-height:var(--comp-line-height)}::slotted(ul){padding-left:var(--tct-scale-l3, var(--app-scale-3x, 15px))}:host(:not([appearance])),:host([appearance=standard]){margin:var(--tct-scale-l3, var(--app-scale-3x, 15px)) 0}:host(:not([appearance])) .message,:host([appearance=standard]) .message{--comp-icon-size:var(--tct-message-icon-size, var(--t-message-icon-size, 24px));--comp-padding:var(--tct-message-padding, var(--t-message-padding, var(--app-scale-3x, 15px)));grid-template-columns:var(--comp-icon-size) 1fr;padding:var(--comp-padding);padding-left:calc(var(--comp-padding) - var(--tct-scale-2, var(--app-scale-2x, 10px)));padding-bottom:calc(var(--comp-padding) - var(--tct-scale-1, var(--app-scale-1x, 5px)))}:host(:not([appearance])) ::slotted(ul),:host([appearance=standard]) ::slotted(ul){margin:var(--tct-scale-l3, var(--app-scale-3x, 15px)) 0}:host([appearance=minimal]){margin:0}:host([appearance=minimal]) .message{padding:var(--tct-message-minimal-padding, var(--t-message-minimal-padding, var(--app-scale-2x, 10px)));grid-template-columns:1fr}:host([appearance=minimal]) ::slotted(ul){margin:var(--tct-scale-1, var(--app-scale-1x, 5px)) 0}:host(:not([type])) .message,:host([type=info]) .message{border-left-color:var(--tct-stoplight-info, var(--const-stoplight-info, #0079c1))}:host(:not([type])) .message-icon,:host([type=info]) .message-icon{--tct-icon-stroke-primary:var(--tct-stoplight-info, var(--const-stoplight-info, #0079c1));--tct-icon-stroke-secondary:var(--tct-stoplight-info, var(--const-stoplight-info, #0079c1))}:host([type=success]) .message{border-left-color:var(--tct-stoplight-success, var(--const-stoplight-success, #0e8a00))}:host([type=success]) .message-icon{--tct-icon-stroke-primary:var(--tct-stoplight-success, var(--const-stoplight-success, #0e8a00));--tct-icon-stroke-secondary:var(--tct-stoplight-success, var(--const-stoplight-success, #0e8a00))}:host([type=warning]) .message{border-left-color:var(--tct-stoplight-warning, var(--const-stoplight-warning, #f0b400))}:host([type=warning]) .message-icon{--tct-icon-stroke-primary:var(--tct-stoplight-warning, var(--const-stoplight-warning, #f0b400));--tct-icon-stroke-secondary:var(--tct-stoplight-warning, var(--const-stoplight-warning, #f0b400))}:host([type=error]) .message,:host([type=danger]) .message{border-left-color:var(--tct-stoplight-error, var(--const-stoplight-alert, #c30000))}:host([type=error]) .message-icon,:host([type=danger]) .message-icon{--tct-icon-stroke-primary:var(--tct-stoplight-error, var(--const-stoplight-alert, #c30000));--tct-icon-stroke-secondary:var(--tct-stoplight-error, var(--const-stoplight-alert, #c30000))}";