@lion/ui 0.0.2 → 0.0.3

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 (263) hide show
  1. package/components/core/test/SlotMixin.test.js +28 -21
  2. package/components/localize/src/number/parseNumber.js +15 -36
  3. package/components/localize/test/number/parseNumber.test.js +3 -12
  4. package/dist-types/components/localize/src/number/parseNumber.d.ts.map +1 -1
  5. package/dist-types/tsconfig.tsbuildinfo +1 -1
  6. package/docs/components/accordion/index.md +3 -0
  7. package/docs/components/accordion/overview.md +129 -0
  8. package/docs/components/accordion/reference.md +47 -0
  9. package/docs/components/accordion/use-cases.md +252 -0
  10. package/docs/components/button/examples.md +30 -0
  11. package/docs/components/button/index.md +3 -0
  12. package/docs/components/button/overview.md +30 -0
  13. package/docs/components/button/src/icon.svg.js +5 -0
  14. package/docs/components/button/use-cases.md +106 -0
  15. package/docs/components/calendar/index.md +3 -0
  16. package/docs/components/calendar/overview.md +49 -0
  17. package/docs/components/calendar/use-cases.md +192 -0
  18. package/docs/components/checkbox-group/index.md +3 -0
  19. package/docs/components/checkbox-group/overview.md +40 -0
  20. package/docs/components/checkbox-group/use-cases.md +256 -0
  21. package/docs/components/collapsible/assets/CustomCollapsible.js +113 -0
  22. package/docs/components/collapsible/assets/applyDemoCollapsibleStyles.js +37 -0
  23. package/docs/components/collapsible/examples.md +83 -0
  24. package/docs/components/collapsible/index.md +3 -0
  25. package/docs/components/collapsible/overview.md +39 -0
  26. package/docs/components/collapsible/use-cases.md +79 -0
  27. package/docs/components/combobox/examples.md +153 -0
  28. package/docs/components/combobox/index.md +3 -0
  29. package/docs/components/combobox/overview.md +51 -0
  30. package/docs/components/combobox/src/LinkMixin.js +60 -0
  31. package/docs/components/combobox/src/demo-selection-display.js +191 -0
  32. package/docs/components/combobox/src/gh-combobox/gh-button.js +69 -0
  33. package/docs/components/combobox/src/gh-combobox/gh-combobox.js +508 -0
  34. package/docs/components/combobox/src/google-combobox/assets/google-clear-icon.js +9 -0
  35. package/docs/components/combobox/src/google-combobox/assets/google-search-icon.js +9 -0
  36. package/docs/components/combobox/src/google-combobox/assets/google-voice-search-icon.js +19 -0
  37. package/docs/components/combobox/src/google-combobox/assets/googlelogo_color_272x92dp.png +0 -0
  38. package/docs/components/combobox/src/google-combobox/google-combobox.js +460 -0
  39. package/docs/components/combobox/src/lazyRender.js +29 -0
  40. package/docs/components/combobox/src/levenshtein.js +95 -0
  41. package/docs/components/combobox/src/md-combobox/MdFieldMixin.js +341 -0
  42. package/docs/components/combobox/src/md-combobox/md-combobox.js +89 -0
  43. package/docs/components/combobox/src/md-combobox/md-input.js +5 -0
  44. package/docs/components/combobox/src/md-combobox/style/load-roboto.js +6 -0
  45. package/docs/components/combobox/src/md-combobox/style/md-ripple.js +81 -0
  46. package/docs/components/combobox/src/wa-combobox/wa-combobox.js +368 -0
  47. package/docs/components/combobox/use-cases.md +377 -0
  48. package/docs/components/dialog/index.md +3 -0
  49. package/docs/components/dialog/overview.md +63 -0
  50. package/docs/components/dialog/src/demo-dialog-style.js +3 -0
  51. package/docs/components/dialog/src/demoStyle.js +39 -0
  52. package/docs/components/dialog/src/slots-dialog-content.js +32 -0
  53. package/docs/components/dialog/src/styled-dialog-content.js +38 -0
  54. package/docs/components/dialog/use-cases.md +154 -0
  55. package/docs/components/drawer/index.md +3 -0
  56. package/docs/components/drawer/overview.md +68 -0
  57. package/docs/components/drawer/src/demoStyle.js +71 -0
  58. package/docs/components/drawer/use-cases.md +194 -0
  59. package/docs/components/fieldset/index.md +3 -0
  60. package/docs/components/fieldset/overview.md +49 -0
  61. package/docs/components/fieldset/use-cases.md +185 -0
  62. package/docs/components/form/index.md +3 -0
  63. package/docs/components/form/overview.md +43 -0
  64. package/docs/components/form/use-cases.md +72 -0
  65. package/docs/components/icon/assets/bugs/bug01.svg.js +2 -0
  66. package/docs/components/icon/assets/bugs/bug02.svg.js +2 -0
  67. package/docs/components/icon/assets/bugs/bug05.svg.js +2 -0
  68. package/docs/components/icon/assets/bugs/bug06.svg.js +2 -0
  69. package/docs/components/icon/assets/bugs/bug08.svg.js +2 -0
  70. package/docs/components/icon/assets/bugs/bug12.svg.js +2 -0
  71. package/docs/components/icon/assets/bugs/bug19.svg.js +2 -0
  72. package/docs/components/icon/assets/bugs/bug23.svg.js +2 -0
  73. package/docs/components/icon/assets/bugs/bug24.svg.js +2 -0
  74. package/docs/components/icon/assets/iconset-bugs.js +11 -0
  75. package/docs/components/icon/assets/iconset-misc.js +3 -0
  76. package/docs/components/icon/assets/iconset-space.js +31 -0
  77. package/docs/components/icon/assets/misc/arrowLeft.svg.js +6 -0
  78. package/docs/components/icon/assets/space/aliens-spaceship.svg.js +2 -0
  79. package/docs/components/icon/assets/space/meteor.svg.js +2 -0
  80. package/docs/components/icon/assets/space/moon-flag.svg.js +2 -0
  81. package/docs/components/icon/assets/space/moon.svg.js +2 -0
  82. package/docs/components/icon/assets/space/night.svg.js +2 -0
  83. package/docs/components/icon/assets/space/orbit.svg.js +2 -0
  84. package/docs/components/icon/assets/space/planet.svg.js +2 -0
  85. package/docs/components/icon/assets/space/robot.svg.js +2 -0
  86. package/docs/components/icon/assets/space/rocket.svg.js +2 -0
  87. package/docs/components/icon/assets/space/satellite.svg.js +2 -0
  88. package/docs/components/icon/assets/space/signal.svg.js +2 -0
  89. package/docs/components/icon/assets/space/space-helmet.svg.js +2 -0
  90. package/docs/components/icon/assets/space/sun.svg.js +2 -0
  91. package/docs/components/icon/assets/space/telescope.svg.js +2 -0
  92. package/docs/components/icon/index.md +3 -0
  93. package/docs/components/icon/overview.md +40 -0
  94. package/docs/components/icon/use-cases.md +93 -0
  95. package/docs/components/index.md +7 -0
  96. package/docs/components/input/index.md +3 -0
  97. package/docs/components/input/overview.md +36 -0
  98. package/docs/components/input/use-cases.md +77 -0
  99. package/docs/components/input-amount/index.md +3 -0
  100. package/docs/components/input-amount/overview.md +49 -0
  101. package/docs/components/input-amount/use-cases.md +122 -0
  102. package/docs/components/input-date/index.md +3 -0
  103. package/docs/components/input-date/overview.md +39 -0
  104. package/docs/components/input-date/use-cases.md +83 -0
  105. package/docs/components/input-datepicker/index.md +3 -0
  106. package/docs/components/input-datepicker/overview.md +42 -0
  107. package/docs/components/input-datepicker/use-cases.md +78 -0
  108. package/docs/components/input-email/index.md +3 -0
  109. package/docs/components/input-email/overview.md +32 -0
  110. package/docs/components/input-email/use-cases.md +48 -0
  111. package/docs/components/input-iban/index.md +3 -0
  112. package/docs/components/input-iban/overview.md +37 -0
  113. package/docs/components/input-iban/use-cases.md +102 -0
  114. package/docs/components/input-range/index.md +3 -0
  115. package/docs/components/input-range/overview.md +34 -0
  116. package/docs/components/input-range/use-cases.md +108 -0
  117. package/docs/components/input-stepper/index.md +3 -0
  118. package/docs/components/input-stepper/overview.md +36 -0
  119. package/docs/components/input-stepper/use-cases.md +41 -0
  120. package/docs/components/input-tel/index.md +3 -0
  121. package/docs/components/input-tel/overview.md +62 -0
  122. package/docs/components/input-tel/src/h-region-code-table.js +109 -0
  123. package/docs/components/input-tel/use-cases.md +307 -0
  124. package/docs/components/input-tel-dropdown/examples.md +32 -0
  125. package/docs/components/input-tel-dropdown/index.md +3 -0
  126. package/docs/components/input-tel-dropdown/overview.md +38 -0
  127. package/docs/components/input-tel-dropdown/src/intl-input-tel-dropdown.js +127 -0
  128. package/docs/components/input-tel-dropdown/use-cases.md +159 -0
  129. package/docs/components/listbox/index.md +3 -0
  130. package/docs/components/listbox/overview.md +42 -0
  131. package/docs/components/listbox/src/listboxData.js +65 -0
  132. package/docs/components/listbox/use-cases.md +147 -0
  133. package/docs/components/pagination/index.md +3 -0
  134. package/docs/components/pagination/overview.md +29 -0
  135. package/docs/components/pagination/use-cases.md +99 -0
  136. package/docs/components/progress-indicator/assets/my-determinate-progress-bar.js +30 -0
  137. package/docs/components/progress-indicator/assets/my-indeterminate-progress-spinner.js +55 -0
  138. package/docs/components/progress-indicator/examples.md +125 -0
  139. package/docs/components/progress-indicator/index.md +3 -0
  140. package/docs/components/progress-indicator/overview.md +36 -0
  141. package/docs/components/radio-group/index.md +3 -0
  142. package/docs/components/radio-group/overview.md +46 -0
  143. package/docs/components/radio-group/use-cases.md +140 -0
  144. package/docs/components/select/index.md +3 -0
  145. package/docs/components/select/overview.md +44 -0
  146. package/docs/components/select/use-cases.md +55 -0
  147. package/docs/components/select-rich/examples.md +31 -0
  148. package/docs/components/select-rich/index.md +3 -0
  149. package/docs/components/select-rich/overview.md +46 -0
  150. package/docs/components/select-rich/src/flagStyles.js +1250 -0
  151. package/docs/components/select-rich/src/flags.png +0 -0
  152. package/docs/components/select-rich/src/flags@2x.png +0 -0
  153. package/docs/components/select-rich/src/intl-select-rich.js +194 -0
  154. package/docs/components/select-rich/src/regionMetaList.js +1717 -0
  155. package/docs/components/select-rich/use-cases.md +370 -0
  156. package/docs/components/steps/index.md +3 -0
  157. package/docs/components/steps/overview.md +63 -0
  158. package/docs/components/steps/use-cases.md +163 -0
  159. package/docs/components/switch/index.md +3 -0
  160. package/docs/components/switch/overview.md +75 -0
  161. package/docs/components/switch/reference.md +39 -0
  162. package/docs/components/switch/use-cases.md +76 -0
  163. package/docs/components/tabs/examples.md +23 -0
  164. package/docs/components/tabs/index.md +3 -0
  165. package/docs/components/tabs/overview.md +48 -0
  166. package/docs/components/tabs/src/lea-tab-panel.js +24 -0
  167. package/docs/components/tabs/src/lea-tab.js +45 -0
  168. package/docs/components/tabs/src/lea-tabs.js +28 -0
  169. package/docs/components/tabs/use-cases.md +219 -0
  170. package/docs/components/textarea/index.md +3 -0
  171. package/docs/components/textarea/overview.md +35 -0
  172. package/docs/components/textarea/use-cases.md +95 -0
  173. package/docs/components/tooltip/examples.md +39 -0
  174. package/docs/components/tooltip/index.md +3 -0
  175. package/docs/components/tooltip/overview.md +44 -0
  176. package/docs/components/tooltip/use-cases.md +208 -0
  177. package/docs/fundamentals/index.md +19 -0
  178. package/docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md +1 -0
  179. package/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md +233 -0
  180. package/docs/fundamentals/node-tools/index.md +1 -0
  181. package/docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md +68 -0
  182. package/docs/fundamentals/node-tools/providence-analytics/QueryResult.md +111 -0
  183. package/docs/fundamentals/node-tools/providence-analytics/analyzer.md +69 -0
  184. package/docs/fundamentals/node-tools/providence-analytics/assets/_mermaid.svg.js +1202 -0
  185. package/docs/fundamentals/node-tools/providence-analytics/dashboard.md +22 -0
  186. package/docs/fundamentals/node-tools/providence-analytics/index.md +1 -0
  187. package/docs/fundamentals/node-tools/providence-analytics/overview.md +192 -0
  188. package/docs/fundamentals/node-tools/publish-docs/index.md +1 -0
  189. package/docs/fundamentals/node-tools/publish-docs/overview.md +136 -0
  190. package/docs/fundamentals/node-tools/remark-extend/index.md +1 -0
  191. package/docs/fundamentals/node-tools/remark-extend/overview.md +274 -0
  192. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md +1 -0
  193. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +285 -0
  194. package/docs/fundamentals/rationales/TypeScript.md +18 -0
  195. package/docs/fundamentals/rationales/index.md +1 -0
  196. package/docs/fundamentals/rationales/side-effects.md +203 -0
  197. package/docs/fundamentals/rationales/versioning.md +35 -0
  198. package/docs/fundamentals/systems/core/index.md +3 -0
  199. package/docs/fundamentals/systems/core/overview.md +85 -0
  200. package/docs/fundamentals/systems/form/assets/FormatMixinDiagram-1.svg +1 -0
  201. package/docs/fundamentals/systems/form/assets/FormatMixinDiagram-2.svg +1 -0
  202. package/docs/fundamentals/systems/form/assets/FormatMixinDiagram-3.svg +84 -0
  203. package/docs/fundamentals/systems/form/assets/h-output.js +155 -0
  204. package/docs/fundamentals/systems/form/formatting-and-parsing.md +245 -0
  205. package/docs/fundamentals/systems/form/index.md +3 -0
  206. package/docs/fundamentals/systems/form/interaction-states.md +177 -0
  207. package/docs/fundamentals/systems/form/model-value.md +35 -0
  208. package/docs/fundamentals/systems/form/overview.md +82 -0
  209. package/docs/fundamentals/systems/form/styling.md +101 -0
  210. package/docs/fundamentals/systems/form/use-cases.md +156 -0
  211. package/docs/fundamentals/systems/form/validate.md +929 -0
  212. package/docs/fundamentals/systems/icon/index.md +3 -0
  213. package/docs/fundamentals/systems/icon/overview.md +124 -0
  214. package/docs/fundamentals/systems/index.md +1 -0
  215. package/docs/fundamentals/systems/localize/assets/all-locales.js +437 -0
  216. package/docs/fundamentals/systems/localize/assets/en-AU.js +6 -0
  217. package/docs/fundamentals/systems/localize/assets/en-GB.js +6 -0
  218. package/docs/fundamentals/systems/localize/assets/en-US.js +6 -0
  219. package/docs/fundamentals/systems/localize/assets/en.js +4 -0
  220. package/docs/fundamentals/systems/localize/assets/nl-BE.js +6 -0
  221. package/docs/fundamentals/systems/localize/assets/nl-NL.js +6 -0
  222. package/docs/fundamentals/systems/localize/assets/nl.js +4 -0
  223. package/docs/fundamentals/systems/localize/dates.md +195 -0
  224. package/docs/fundamentals/systems/localize/index.md +3 -0
  225. package/docs/fundamentals/systems/localize/numbers.md +217 -0
  226. package/docs/fundamentals/systems/localize/overview.md +48 -0
  227. package/docs/fundamentals/systems/localize/rationale.md +62 -0
  228. package/docs/fundamentals/systems/localize/text.md +125 -0
  229. package/docs/fundamentals/systems/localize/use-cases.md +319 -0
  230. package/docs/fundamentals/systems/overlays/assets/applyDemoOverlayStyles.js +22 -0
  231. package/docs/fundamentals/systems/overlays/assets/demo-overlay-backdrop.js +48 -0
  232. package/docs/fundamentals/systems/overlays/assets/demo-overlay-system.js +42 -0
  233. package/docs/fundamentals/systems/overlays/assets/umbrella-form.js +133 -0
  234. package/docs/fundamentals/systems/overlays/configuration.md +453 -0
  235. package/docs/fundamentals/systems/overlays/form-integration.md +65 -0
  236. package/docs/fundamentals/systems/overlays/index.md +3 -0
  237. package/docs/fundamentals/systems/overlays/overview.md +118 -0
  238. package/docs/fundamentals/systems/overlays/rationale.md +232 -0
  239. package/docs/fundamentals/systems/overlays/scope.md +176 -0
  240. package/docs/fundamentals/systems/overlays/use-cases.md +699 -0
  241. package/docs/fundamentals/tools/ajax/assets/naga.json +9 -0
  242. package/docs/fundamentals/tools/ajax/assets/pabu.json +9 -0
  243. package/docs/fundamentals/tools/ajax/index.md +3 -0
  244. package/docs/fundamentals/tools/ajax/overview.md +128 -0
  245. package/docs/fundamentals/tools/ajax/use-cases.md +456 -0
  246. package/docs/fundamentals/tools/helpers/action-logger.md +165 -0
  247. package/docs/fundamentals/tools/helpers/index.md +3 -0
  248. package/docs/fundamentals/tools/helpers/overview.md +30 -0
  249. package/docs/fundamentals/tools/index.md +1 -0
  250. package/docs/fundamentals/tools/singleton-manager/index.md +3 -0
  251. package/docs/fundamentals/tools/singleton-manager/overview.md +304 -0
  252. package/docs/guides/how-to/create-a-custom-field.md +200 -0
  253. package/docs/guides/how-to/extend-a-native-input.md +66 -0
  254. package/docs/guides/how-to/get-started.md +77 -0
  255. package/docs/guides/how-to/index.md +1 -0
  256. package/docs/guides/index.md +34 -0
  257. package/docs/guides/principles/definitions-and-terms.md +41 -0
  258. package/docs/guides/principles/index.md +26 -0
  259. package/docs/guides/principles/scoped-elements.md +103 -0
  260. package/docs/guides/principles/styling.md +32 -0
  261. package/docs/guides/principles/subclasser-apis.md +28 -0
  262. package/docs/override.js +15 -0
  263. package/package.json +1 -1
@@ -0,0 +1,460 @@
1
+ import { css, html } from 'lit';
2
+ import { LionOption } from '@lion/ui/listbox.js';
3
+ import { renderLitAsNode } from '@lion/ui/helpers.js';
4
+ import { LionCombobox } from '@lion/ui/combobox.js';
5
+ import { LinkMixin } from '../LinkMixin.js';
6
+ import googleSearchIcon from './assets/google-search-icon.js';
7
+ import googleVoiceSearchIcon from './assets/google-voice-search-icon.js';
8
+ import googleClearIcon from './assets/google-clear-icon.js';
9
+
10
+ const googleSearchLogoUrl = new URL('./assets/googlelogo_color_272x92dp.png', import.meta.url).href;
11
+
12
+ export class GoogleOption extends LinkMixin(LionOption) {
13
+ static get properties() {
14
+ return {
15
+ imageUrl: {
16
+ type: String,
17
+ },
18
+ };
19
+ }
20
+
21
+ static get styles() {
22
+ return [
23
+ ...super.styles,
24
+ css`
25
+ :host {
26
+ position: relative;
27
+ padding: 8px 16px;
28
+ display: flex;
29
+ align-items: center;
30
+ background: none;
31
+ }
32
+
33
+ :host:hover,
34
+ :host([active]) {
35
+ background: #eee !important;
36
+ }
37
+
38
+ :host([checked]) {
39
+ background: none;
40
+ }
41
+
42
+ /* :host([active]) {
43
+ color: #1867c0 !important;
44
+ caret-color: #1867c0 !important;
45
+ } */
46
+
47
+ :host {
48
+ font-weight: bold;
49
+ }
50
+
51
+ :host ::slotted(.google-option__highlight) {
52
+ font-weight: normal;
53
+ }
54
+
55
+ .google-option__icon {
56
+ height: 20px;
57
+ width: 20px;
58
+ margin-right: 12px;
59
+ fill: var(--icon-color);
60
+ }
61
+ `,
62
+ ];
63
+ }
64
+
65
+ /**
66
+ * @configure
67
+ * @param {string} currentValue
68
+ */
69
+ onFilterMatch(currentValue) {
70
+ const { innerHTML } = this;
71
+ // eslint-disable-next-line no-param-reassign
72
+ this.__originalInnerHTML = innerHTML;
73
+ const newInnerHTML = innerHTML.replace(
74
+ new RegExp(`(${currentValue})`, 'i'),
75
+ `<span class="google-option__highlight">$1</span>`,
76
+ );
77
+ // For Safari, we need to add a label to the element
78
+ this.setAttribute('aria-label', this.textContent);
79
+ this.innerHTML = newInnerHTML;
80
+ // Alternatively, an extension can add an animation here
81
+ this.style.display = '';
82
+ }
83
+
84
+ /**
85
+ * @configure LionCombobox
86
+ */
87
+ onFilterUnmatch() {
88
+ this.removeAttribute('aria-label');
89
+ if (this.__originalInnerHTML) {
90
+ this.innerHTML = this.__originalInnerHTML;
91
+ }
92
+ this.style.display = 'none';
93
+ }
94
+
95
+ render() {
96
+ return html`
97
+ ${!this.imageUrl
98
+ ? html` <div class="google-option__icon">${googleSearchIcon}</div>`
99
+ : html` <img class="google-option__icon" src="${this.imageUrl}" alt="" />`}
100
+ ${super.render()}
101
+ `;
102
+ }
103
+ }
104
+ customElements.define('google-option', GoogleOption);
105
+
106
+ export class GoogleCombobox extends LionCombobox {
107
+ static get styles() {
108
+ return [
109
+ ...super.styles,
110
+ css`
111
+ /** @configure FormControlMixin */
112
+
113
+ /* =======================
114
+ block | .form-field
115
+ ======================= */
116
+
117
+ :host {
118
+ font-family: arial, sans-serif;
119
+ }
120
+
121
+ .form-field__label {
122
+ margin-top: 36px;
123
+ margin-bottom: 24px;
124
+ display: flex;
125
+ justify-content: center;
126
+ }
127
+
128
+ /* ==============================
129
+ element | .input-group
130
+ ============================== */
131
+
132
+ .input-group {
133
+ margin-bottom: 16px;
134
+ max-width: 582px;
135
+ margin: auto;
136
+ }
137
+
138
+ .input-group__container {
139
+ position: relative;
140
+ background: #fff;
141
+ display: flex;
142
+ border: 1px solid #dfe1e5;
143
+ box-shadow: none;
144
+ border-radius: 24px;
145
+ height: 44px;
146
+ }
147
+
148
+ .input-group__container:hover,
149
+ :host([opened]) .input-group__container {
150
+ border-color: rgba(223, 225, 229, 0);
151
+ box-shadow: 0 1px 6px rgba(32, 33, 36, 0.28);
152
+ }
153
+
154
+ :host([opened]) .input-group__container {
155
+ border-bottom-right-radius: 0;
156
+ border-bottom-left-radius: 0;
157
+ }
158
+
159
+ :host([opened]) .input-group__container::before {
160
+ content: '';
161
+ position: absolute;
162
+ background: white;
163
+ left: 0;
164
+ right: 0;
165
+ height: 10px;
166
+ bottom: -10px;
167
+ }
168
+
169
+ :host([opened]) .input-group__container::after {
170
+ content: '';
171
+ position: absolute;
172
+ background: #eee;
173
+ left: 16px;
174
+ right: 16px;
175
+ height: 1px;
176
+ bottom: 0;
177
+ z-index: 3;
178
+ }
179
+
180
+ .input-group__prefix,
181
+ .input-group__suffix {
182
+ display: block;
183
+ fill: var(--icon-color);
184
+ display: flex;
185
+ place-items: center;
186
+ }
187
+
188
+ .input-group__input {
189
+ flex: 1;
190
+ }
191
+
192
+ .input-group__input ::slotted([slot='input']) {
193
+ border: transparent;
194
+ width: 100%;
195
+ }
196
+
197
+ /** @configure LionCombobox */
198
+
199
+ /* =======================
200
+ block | .form-field
201
+ ======================= */
202
+
203
+ #overlay-content-node-wrapper {
204
+ box-shadow: 0 4px 6px rgba(32, 33, 36, 0.28);
205
+ border-radius: 0 0 24px 24px;
206
+ margin-top: -2px;
207
+ padding-top: 6px;
208
+ background: white;
209
+ }
210
+
211
+ * > ::slotted([slot='listbox']) {
212
+ margin-bottom: 8px;
213
+ background: none;
214
+ }
215
+
216
+ :host {
217
+ --icon-color: #9aa0a6;
218
+ }
219
+
220
+ /** @enhance LionCombobox */
221
+
222
+ /* ===================================
223
+ block | .google-search-clear-btn
224
+ =================================== */
225
+
226
+ .google-search-clear-btn {
227
+ position: relative;
228
+ height: 100%;
229
+ align-items: center;
230
+ display: none;
231
+ }
232
+
233
+ .google-search-clear-btn::after {
234
+ border-left: 1px solid #dfe1e5;
235
+ height: 65%;
236
+ right: 0;
237
+ content: '';
238
+ margin-right: 10px;
239
+ margin-left: 8px;
240
+ }
241
+
242
+ :host([filled]) .google-search-clear-btn {
243
+ display: flex;
244
+ }
245
+
246
+ * > ::slotted([slot='suffix']),
247
+ * > ::slotted([slot='clear-btn']) {
248
+ font: inherit;
249
+ margin: 0;
250
+ border: 0;
251
+ outline: 0;
252
+ padding: 0;
253
+ color: inherit;
254
+ background-color: transparent;
255
+ text-align: left;
256
+ white-space: normal;
257
+ overflow: visible;
258
+
259
+ user-select: none;
260
+ -moz-user-select: none;
261
+ -webkit-user-select: none;
262
+ -ms-user-select: none;
263
+ -webkit-tap-highlight-color: transparent;
264
+
265
+ width: 25px;
266
+ height: 25px;
267
+ cursor: pointer;
268
+ }
269
+
270
+ * > ::slotted([slot='suffix']) {
271
+ margin-right: 20px;
272
+ }
273
+
274
+ * > ::slotted([slot='prefix']) {
275
+ height: 20px;
276
+ width: 20px;
277
+ margin-left: 12px;
278
+ margin-right: 16px;
279
+ }
280
+
281
+ /* =============================
282
+ block | .google-search-btns
283
+ ============================ */
284
+
285
+ .google-search-btns {
286
+ display: flex;
287
+ justify-content: center;
288
+ align-items: center;
289
+ }
290
+
291
+ .google-search-btns__input-button {
292
+ background-image: -webkit-linear-gradient(top, #f8f9fa, #f8f9fa);
293
+ background-color: #f8f9fa;
294
+ border: 1px solid #f8f9fa;
295
+ border-radius: 4px;
296
+ color: #3c4043;
297
+ font-family: arial, sans-serif;
298
+ font-size: 14px;
299
+ margin: 11px 4px;
300
+ padding: 0 16px;
301
+ line-height: 27px;
302
+ height: 36px;
303
+ min-width: 54px;
304
+ text-align: center;
305
+ cursor: pointer;
306
+ user-select: none;
307
+ }
308
+
309
+ .google-search-btns__input-button:hover {
310
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
311
+ background-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1);
312
+ background-color: #f8f8f8;
313
+ border: 1px solid #c6c6c6;
314
+ color: #222;
315
+ }
316
+
317
+ .google-search-btns__input-button:focus {
318
+ border: 1px solid #4d90fe;
319
+ outline: none;
320
+ }
321
+
322
+ /* ===============================
323
+ block | .google-search-report
324
+ ============================== */
325
+
326
+ .google-search-report {
327
+ display: flex;
328
+ align-content: right;
329
+ color: #70757a;
330
+ font-style: italic;
331
+ font-size: 8pt;
332
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
333
+ margin-bottom: 8px;
334
+ justify-content: flex-end;
335
+ margin-right: 20px;
336
+ }
337
+
338
+ .google-search-report a {
339
+ color: inherit;
340
+ }
341
+ `,
342
+ ];
343
+ }
344
+
345
+ /**
346
+ * @enhance LionCombobox - add google search buttons
347
+ */
348
+ _overlayListboxTemplate() {
349
+ return html`
350
+ <div id="overlay-content-node-wrapper" role="dialog">
351
+ <slot name="listbox"></slot>
352
+ ${this._googleSearchBtnsTemplate()}
353
+ <div class="google-search-report"><a href="#">Report inappropriate predictions</a></div>
354
+ </div>
355
+ <slot id="options-outlet"></slot>
356
+ `;
357
+ }
358
+
359
+ /**
360
+ * @enhance FormControlMixin add clear-btn
361
+ */
362
+ _inputGroupSuffixTemplate() {
363
+ return html`
364
+ <div class="input-group__suffix">
365
+ <div class="google-search-clear-btn">
366
+ <slot name="clear-btn"></slot>
367
+ </div>
368
+ <slot name="suffix"></slot>
369
+ </div>
370
+ `;
371
+ }
372
+
373
+ _googleSearchBtnsTemplate() {
374
+ return html` <div class="google-search-btns">
375
+ <input
376
+ type="submit"
377
+ class="google-search-btns__input-button"
378
+ value="Google Search"
379
+ aria-label="Google Search"
380
+ />
381
+ <input
382
+ type="submit"
383
+ class="google-search-btns__input-button"
384
+ value="I'm Feeling Lucky"
385
+ aria-label="I'm Feeling Lucky"
386
+ />
387
+ </div>`;
388
+ }
389
+
390
+ /**
391
+ * @enhance FormControlMixin - add google search buttons
392
+ */
393
+ _groupTwoTemplate() {
394
+ return html`${super._groupTwoTemplate()} ${!this.opened ? this._googleSearchBtnsTemplate() : ''} `;
395
+ }
396
+
397
+ get slots() {
398
+ return {
399
+ ...super.slots,
400
+ label: () => renderLitAsNode(html` <img alt="Google Search" src="${googleSearchLogoUrl}" />`),
401
+ prefix: () => renderLitAsNode(html` <span>${googleSearchIcon}</span> `),
402
+ suffix: () =>
403
+ renderLitAsNode(
404
+ html` <button aria-label="Search by voice">${googleVoiceSearchIcon}</button> `,
405
+ ),
406
+ 'clear-btn': () =>
407
+ renderLitAsNode(
408
+ html`
409
+ <button @click="${this.__clearText}" aria-label="Clear text">${googleClearIcon}</button>
410
+ `,
411
+ ),
412
+ };
413
+ }
414
+
415
+ /**
416
+ * @configure OverlayMixin
417
+ */
418
+ get _overlayReferenceNode() {
419
+ return /** @type {ShadowRoot} */ (this.shadowRoot).querySelector('.input-group');
420
+ }
421
+
422
+ constructor() {
423
+ super();
424
+ /** @configure LionCombobox */
425
+ this.autocomplete = 'list';
426
+ /** @configure LionCombobox */
427
+ this.showAllOnEmpty = true;
428
+
429
+ this.__resetFocus = this.__resetFocus.bind(this);
430
+ this.__clearText = this.__clearText.bind(this);
431
+ }
432
+
433
+ firstUpdated(changedProperties) {
434
+ super.firstUpdated(changedProperties);
435
+
436
+ this._overlayContentNode.addEventListener('mouseenter', this.__resetFocus);
437
+ }
438
+
439
+ /**
440
+ * @override LionCombobox - always sync textbox when selected value changes
441
+ */
442
+ // eslint-disable-next-line no-unused-vars
443
+ _syncToTextboxCondition() {
444
+ return true;
445
+ }
446
+
447
+ _showOverlayCondition(options) {
448
+ return this.focused || super._showOverlayCondition(options);
449
+ }
450
+
451
+ __resetFocus() {
452
+ this.activeIndex = -1;
453
+ this.checkedIndex = -1;
454
+ }
455
+
456
+ __clearText() {
457
+ this._inputNode.value = '';
458
+ }
459
+ }
460
+ customElements.define('google-combobox', GoogleCombobox);
@@ -0,0 +1,29 @@
1
+ import { directive } from 'lit/directive.js';
2
+ import { AsyncDirective } from 'lit/async-directive.js';
3
+
4
+ /**
5
+ * In order to speed up the first meaningful paint, use this directive
6
+ * on content that is:
7
+ * - (visually) hidden
8
+ * - out of the page flow (having position: 'absolute|fixed')
9
+ *
10
+ * A good practice would be to use it in overlays,
11
+ * For hidden tab panels, collapsible content etc. it's also useful
12
+ * @example
13
+ * <lion-combobox name="combo" label="Combo">
14
+ * ${lazyRender(
15
+ * largeListOfData.map(entry => html` <expensive-option>${entry}</expensive-option> `),
16
+ * )}
17
+ * </lion-combobox>
18
+ */
19
+ export const lazyRender = directive(
20
+ class extends AsyncDirective {
21
+ render(tplResult) {
22
+ setTimeout(() => {
23
+ this.setValue(tplResult);
24
+ });
25
+ }
26
+ },
27
+ );
28
+
29
+ // export const lazyRender = () => {};
@@ -0,0 +1,95 @@
1
+ /* eslint-disable */
2
+ // https://github.com/gustf/js-levenshtein/blob/master/index.js
3
+
4
+ function _min(d0, d1, d2, bx, ay) {
5
+ return d0 < d1 || d2 < d1 ? (d0 > d2 ? d2 + 1 : d0 + 1) : bx === ay ? d1 : d1 + 1;
6
+ }
7
+
8
+ export default function (a, b) {
9
+ if (a === b) {
10
+ return 0;
11
+ }
12
+
13
+ if (a.length > b.length) {
14
+ var tmp = a;
15
+ a = b;
16
+ b = tmp;
17
+ }
18
+
19
+ var la = a.length;
20
+ var lb = b.length;
21
+
22
+ while (la > 0 && a.charCodeAt(la - 1) === b.charCodeAt(lb - 1)) {
23
+ la--;
24
+ lb--;
25
+ }
26
+
27
+ var offset = 0;
28
+
29
+ while (offset < la && a.charCodeAt(offset) === b.charCodeAt(offset)) {
30
+ offset++;
31
+ }
32
+
33
+ la -= offset;
34
+ lb -= offset;
35
+
36
+ if (la === 0 || lb < 3) {
37
+ return lb;
38
+ }
39
+
40
+ var x = 0;
41
+ var y;
42
+ var d0;
43
+ var d1;
44
+ var d2;
45
+ var d3;
46
+ var dd;
47
+ var dy;
48
+ var ay;
49
+ var bx0;
50
+ var bx1;
51
+ var bx2;
52
+ var bx3;
53
+
54
+ var vector = [];
55
+
56
+ for (y = 0; y < la; y++) {
57
+ vector.push(y + 1);
58
+ vector.push(a.charCodeAt(offset + y));
59
+ }
60
+
61
+ var len = vector.length - 1;
62
+
63
+ for (; x < lb - 3; ) {
64
+ bx0 = b.charCodeAt(offset + (d0 = x));
65
+ bx1 = b.charCodeAt(offset + (d1 = x + 1));
66
+ bx2 = b.charCodeAt(offset + (d2 = x + 2));
67
+ bx3 = b.charCodeAt(offset + (d3 = x + 3));
68
+ dd = x += 4;
69
+ for (y = 0; y < len; y += 2) {
70
+ dy = vector[y];
71
+ ay = vector[y + 1];
72
+ d0 = _min(dy, d0, d1, bx0, ay);
73
+ d1 = _min(d0, d1, d2, bx1, ay);
74
+ d2 = _min(d1, d2, d3, bx2, ay);
75
+ dd = _min(d2, d3, dd, bx3, ay);
76
+ vector[y] = dd;
77
+ d3 = d2;
78
+ d2 = d1;
79
+ d1 = d0;
80
+ d0 = dy;
81
+ }
82
+ }
83
+
84
+ for (; x < lb; ) {
85
+ bx0 = b.charCodeAt(offset + (d0 = x));
86
+ dd = ++x;
87
+ for (y = 0; y < len; y += 2) {
88
+ dy = vector[y];
89
+ vector[y] = dd = _min(dy, d0, dd, bx0, vector[y + 1]);
90
+ d0 = dy;
91
+ }
92
+ }
93
+
94
+ return dd;
95
+ }