@lion/ui 0.0.1 → 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 (279) hide show
  1. package/components/core/test/SlotMixin.test.js +28 -21
  2. package/components/drawer/src/LionDrawer.js +217 -0
  3. package/components/drawer/src/drawerStyle.js +59 -0
  4. package/components/drawer/test/lion-drawer.test.js +109 -0
  5. package/components/localize/src/number/parseNumber.js +15 -36
  6. package/components/localize/test/number/parseNumber.test.js +3 -12
  7. package/custom-elements.json +743 -0
  8. package/dist-types/components/drawer/src/LionDrawer.d.ts +67 -0
  9. package/dist-types/components/drawer/src/LionDrawer.d.ts.map +1 -0
  10. package/dist-types/components/drawer/src/drawerStyle.d.ts +2 -0
  11. package/dist-types/components/drawer/src/drawerStyle.d.ts.map +1 -0
  12. package/dist-types/components/drawer/test/lion-drawer.test.d.ts +3 -0
  13. package/dist-types/components/drawer/test/lion-drawer.test.d.ts.map +1 -0
  14. package/dist-types/components/localize/src/number/parseNumber.d.ts.map +1 -1
  15. package/dist-types/exports/define/lion-drawer.d.ts +2 -0
  16. package/dist-types/exports/define/lion-drawer.d.ts.map +1 -0
  17. package/dist-types/exports/drawer.d.ts +2 -0
  18. package/dist-types/exports/drawer.d.ts.map +1 -0
  19. package/dist-types/tsconfig.tsbuildinfo +1 -1
  20. package/docs/components/accordion/index.md +3 -0
  21. package/docs/components/accordion/overview.md +129 -0
  22. package/docs/components/accordion/reference.md +47 -0
  23. package/docs/components/accordion/use-cases.md +252 -0
  24. package/docs/components/button/examples.md +30 -0
  25. package/docs/components/button/index.md +3 -0
  26. package/docs/components/button/overview.md +30 -0
  27. package/docs/components/button/src/icon.svg.js +5 -0
  28. package/docs/components/button/use-cases.md +106 -0
  29. package/docs/components/calendar/index.md +3 -0
  30. package/docs/components/calendar/overview.md +49 -0
  31. package/docs/components/calendar/use-cases.md +192 -0
  32. package/docs/components/checkbox-group/index.md +3 -0
  33. package/docs/components/checkbox-group/overview.md +40 -0
  34. package/docs/components/checkbox-group/use-cases.md +256 -0
  35. package/docs/components/collapsible/assets/CustomCollapsible.js +113 -0
  36. package/docs/components/collapsible/assets/applyDemoCollapsibleStyles.js +37 -0
  37. package/docs/components/collapsible/examples.md +83 -0
  38. package/docs/components/collapsible/index.md +3 -0
  39. package/docs/components/collapsible/overview.md +39 -0
  40. package/docs/components/collapsible/use-cases.md +79 -0
  41. package/docs/components/combobox/examples.md +153 -0
  42. package/docs/components/combobox/index.md +3 -0
  43. package/docs/components/combobox/overview.md +51 -0
  44. package/docs/components/combobox/src/LinkMixin.js +60 -0
  45. package/docs/components/combobox/src/demo-selection-display.js +191 -0
  46. package/docs/components/combobox/src/gh-combobox/gh-button.js +69 -0
  47. package/docs/components/combobox/src/gh-combobox/gh-combobox.js +508 -0
  48. package/docs/components/combobox/src/google-combobox/assets/google-clear-icon.js +9 -0
  49. package/docs/components/combobox/src/google-combobox/assets/google-search-icon.js +9 -0
  50. package/docs/components/combobox/src/google-combobox/assets/google-voice-search-icon.js +19 -0
  51. package/docs/components/combobox/src/google-combobox/assets/googlelogo_color_272x92dp.png +0 -0
  52. package/docs/components/combobox/src/google-combobox/google-combobox.js +460 -0
  53. package/docs/components/combobox/src/lazyRender.js +29 -0
  54. package/docs/components/combobox/src/levenshtein.js +95 -0
  55. package/docs/components/combobox/src/md-combobox/MdFieldMixin.js +341 -0
  56. package/docs/components/combobox/src/md-combobox/md-combobox.js +89 -0
  57. package/docs/components/combobox/src/md-combobox/md-input.js +5 -0
  58. package/docs/components/combobox/src/md-combobox/style/load-roboto.js +6 -0
  59. package/docs/components/combobox/src/md-combobox/style/md-ripple.js +81 -0
  60. package/docs/components/combobox/src/wa-combobox/wa-combobox.js +368 -0
  61. package/docs/components/combobox/use-cases.md +377 -0
  62. package/docs/components/dialog/index.md +3 -0
  63. package/docs/components/dialog/overview.md +63 -0
  64. package/docs/components/dialog/src/demo-dialog-style.js +3 -0
  65. package/docs/components/dialog/src/demoStyle.js +39 -0
  66. package/docs/components/dialog/src/slots-dialog-content.js +32 -0
  67. package/docs/components/dialog/src/styled-dialog-content.js +38 -0
  68. package/docs/components/dialog/use-cases.md +154 -0
  69. package/docs/components/drawer/index.md +3 -0
  70. package/docs/components/drawer/overview.md +68 -0
  71. package/docs/components/drawer/src/demoStyle.js +71 -0
  72. package/docs/components/drawer/use-cases.md +194 -0
  73. package/docs/components/fieldset/index.md +3 -0
  74. package/docs/components/fieldset/overview.md +49 -0
  75. package/docs/components/fieldset/use-cases.md +185 -0
  76. package/docs/components/form/index.md +3 -0
  77. package/docs/components/form/overview.md +43 -0
  78. package/docs/components/form/use-cases.md +72 -0
  79. package/docs/components/icon/assets/bugs/bug01.svg.js +2 -0
  80. package/docs/components/icon/assets/bugs/bug02.svg.js +2 -0
  81. package/docs/components/icon/assets/bugs/bug05.svg.js +2 -0
  82. package/docs/components/icon/assets/bugs/bug06.svg.js +2 -0
  83. package/docs/components/icon/assets/bugs/bug08.svg.js +2 -0
  84. package/docs/components/icon/assets/bugs/bug12.svg.js +2 -0
  85. package/docs/components/icon/assets/bugs/bug19.svg.js +2 -0
  86. package/docs/components/icon/assets/bugs/bug23.svg.js +2 -0
  87. package/docs/components/icon/assets/bugs/bug24.svg.js +2 -0
  88. package/docs/components/icon/assets/iconset-bugs.js +11 -0
  89. package/docs/components/icon/assets/iconset-misc.js +3 -0
  90. package/docs/components/icon/assets/iconset-space.js +31 -0
  91. package/docs/components/icon/assets/misc/arrowLeft.svg.js +6 -0
  92. package/docs/components/icon/assets/space/aliens-spaceship.svg.js +2 -0
  93. package/docs/components/icon/assets/space/meteor.svg.js +2 -0
  94. package/docs/components/icon/assets/space/moon-flag.svg.js +2 -0
  95. package/docs/components/icon/assets/space/moon.svg.js +2 -0
  96. package/docs/components/icon/assets/space/night.svg.js +2 -0
  97. package/docs/components/icon/assets/space/orbit.svg.js +2 -0
  98. package/docs/components/icon/assets/space/planet.svg.js +2 -0
  99. package/docs/components/icon/assets/space/robot.svg.js +2 -0
  100. package/docs/components/icon/assets/space/rocket.svg.js +2 -0
  101. package/docs/components/icon/assets/space/satellite.svg.js +2 -0
  102. package/docs/components/icon/assets/space/signal.svg.js +2 -0
  103. package/docs/components/icon/assets/space/space-helmet.svg.js +2 -0
  104. package/docs/components/icon/assets/space/sun.svg.js +2 -0
  105. package/docs/components/icon/assets/space/telescope.svg.js +2 -0
  106. package/docs/components/icon/index.md +3 -0
  107. package/docs/components/icon/overview.md +40 -0
  108. package/docs/components/icon/use-cases.md +93 -0
  109. package/docs/components/index.md +7 -0
  110. package/docs/components/input/index.md +3 -0
  111. package/docs/components/input/overview.md +36 -0
  112. package/docs/components/input/use-cases.md +77 -0
  113. package/docs/components/input-amount/index.md +3 -0
  114. package/docs/components/input-amount/overview.md +49 -0
  115. package/docs/components/input-amount/use-cases.md +122 -0
  116. package/docs/components/input-date/index.md +3 -0
  117. package/docs/components/input-date/overview.md +39 -0
  118. package/docs/components/input-date/use-cases.md +83 -0
  119. package/docs/components/input-datepicker/index.md +3 -0
  120. package/docs/components/input-datepicker/overview.md +42 -0
  121. package/docs/components/input-datepicker/use-cases.md +78 -0
  122. package/docs/components/input-email/index.md +3 -0
  123. package/docs/components/input-email/overview.md +32 -0
  124. package/docs/components/input-email/use-cases.md +48 -0
  125. package/docs/components/input-iban/index.md +3 -0
  126. package/docs/components/input-iban/overview.md +37 -0
  127. package/docs/components/input-iban/use-cases.md +102 -0
  128. package/docs/components/input-range/index.md +3 -0
  129. package/docs/components/input-range/overview.md +34 -0
  130. package/docs/components/input-range/use-cases.md +108 -0
  131. package/docs/components/input-stepper/index.md +3 -0
  132. package/docs/components/input-stepper/overview.md +36 -0
  133. package/docs/components/input-stepper/use-cases.md +41 -0
  134. package/docs/components/input-tel/index.md +3 -0
  135. package/docs/components/input-tel/overview.md +62 -0
  136. package/docs/components/input-tel/src/h-region-code-table.js +109 -0
  137. package/docs/components/input-tel/use-cases.md +307 -0
  138. package/docs/components/input-tel-dropdown/examples.md +32 -0
  139. package/docs/components/input-tel-dropdown/index.md +3 -0
  140. package/docs/components/input-tel-dropdown/overview.md +38 -0
  141. package/docs/components/input-tel-dropdown/src/intl-input-tel-dropdown.js +127 -0
  142. package/docs/components/input-tel-dropdown/use-cases.md +159 -0
  143. package/docs/components/listbox/index.md +3 -0
  144. package/docs/components/listbox/overview.md +42 -0
  145. package/docs/components/listbox/src/listboxData.js +65 -0
  146. package/docs/components/listbox/use-cases.md +147 -0
  147. package/docs/components/pagination/index.md +3 -0
  148. package/docs/components/pagination/overview.md +29 -0
  149. package/docs/components/pagination/use-cases.md +99 -0
  150. package/docs/components/progress-indicator/assets/my-determinate-progress-bar.js +30 -0
  151. package/docs/components/progress-indicator/assets/my-indeterminate-progress-spinner.js +55 -0
  152. package/docs/components/progress-indicator/examples.md +125 -0
  153. package/docs/components/progress-indicator/index.md +3 -0
  154. package/docs/components/progress-indicator/overview.md +36 -0
  155. package/docs/components/radio-group/index.md +3 -0
  156. package/docs/components/radio-group/overview.md +46 -0
  157. package/docs/components/radio-group/use-cases.md +140 -0
  158. package/docs/components/select/index.md +3 -0
  159. package/docs/components/select/overview.md +44 -0
  160. package/docs/components/select/use-cases.md +55 -0
  161. package/docs/components/select-rich/examples.md +31 -0
  162. package/docs/components/select-rich/index.md +3 -0
  163. package/docs/components/select-rich/overview.md +46 -0
  164. package/docs/components/select-rich/src/flagStyles.js +1250 -0
  165. package/docs/components/select-rich/src/flags.png +0 -0
  166. package/docs/components/select-rich/src/flags@2x.png +0 -0
  167. package/docs/components/select-rich/src/intl-select-rich.js +194 -0
  168. package/docs/components/select-rich/src/regionMetaList.js +1717 -0
  169. package/docs/components/select-rich/use-cases.md +370 -0
  170. package/docs/components/steps/index.md +3 -0
  171. package/docs/components/steps/overview.md +63 -0
  172. package/docs/components/steps/use-cases.md +163 -0
  173. package/docs/components/switch/index.md +3 -0
  174. package/docs/components/switch/overview.md +75 -0
  175. package/docs/components/switch/reference.md +39 -0
  176. package/docs/components/switch/use-cases.md +76 -0
  177. package/docs/components/tabs/examples.md +23 -0
  178. package/docs/components/tabs/index.md +3 -0
  179. package/docs/components/tabs/overview.md +48 -0
  180. package/docs/components/tabs/src/lea-tab-panel.js +24 -0
  181. package/docs/components/tabs/src/lea-tab.js +45 -0
  182. package/docs/components/tabs/src/lea-tabs.js +28 -0
  183. package/docs/components/tabs/use-cases.md +219 -0
  184. package/docs/components/textarea/index.md +3 -0
  185. package/docs/components/textarea/overview.md +35 -0
  186. package/docs/components/textarea/use-cases.md +95 -0
  187. package/docs/components/tooltip/examples.md +39 -0
  188. package/docs/components/tooltip/index.md +3 -0
  189. package/docs/components/tooltip/overview.md +44 -0
  190. package/docs/components/tooltip/use-cases.md +208 -0
  191. package/docs/fundamentals/index.md +19 -0
  192. package/docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md +1 -0
  193. package/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md +233 -0
  194. package/docs/fundamentals/node-tools/index.md +1 -0
  195. package/docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md +68 -0
  196. package/docs/fundamentals/node-tools/providence-analytics/QueryResult.md +111 -0
  197. package/docs/fundamentals/node-tools/providence-analytics/analyzer.md +69 -0
  198. package/docs/fundamentals/node-tools/providence-analytics/assets/_mermaid.svg.js +1202 -0
  199. package/docs/fundamentals/node-tools/providence-analytics/dashboard.md +22 -0
  200. package/docs/fundamentals/node-tools/providence-analytics/index.md +1 -0
  201. package/docs/fundamentals/node-tools/providence-analytics/overview.md +192 -0
  202. package/docs/fundamentals/node-tools/publish-docs/index.md +1 -0
  203. package/docs/fundamentals/node-tools/publish-docs/overview.md +136 -0
  204. package/docs/fundamentals/node-tools/remark-extend/index.md +1 -0
  205. package/docs/fundamentals/node-tools/remark-extend/overview.md +274 -0
  206. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md +1 -0
  207. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +285 -0
  208. package/docs/fundamentals/rationales/TypeScript.md +18 -0
  209. package/docs/fundamentals/rationales/index.md +1 -0
  210. package/docs/fundamentals/rationales/side-effects.md +203 -0
  211. package/docs/fundamentals/rationales/versioning.md +35 -0
  212. package/docs/fundamentals/systems/core/index.md +3 -0
  213. package/docs/fundamentals/systems/core/overview.md +85 -0
  214. package/docs/fundamentals/systems/form/assets/FormatMixinDiagram-1.svg +1 -0
  215. package/docs/fundamentals/systems/form/assets/FormatMixinDiagram-2.svg +1 -0
  216. package/docs/fundamentals/systems/form/assets/FormatMixinDiagram-3.svg +84 -0
  217. package/docs/fundamentals/systems/form/assets/h-output.js +155 -0
  218. package/docs/fundamentals/systems/form/formatting-and-parsing.md +245 -0
  219. package/docs/fundamentals/systems/form/index.md +3 -0
  220. package/docs/fundamentals/systems/form/interaction-states.md +177 -0
  221. package/docs/fundamentals/systems/form/model-value.md +35 -0
  222. package/docs/fundamentals/systems/form/overview.md +82 -0
  223. package/docs/fundamentals/systems/form/styling.md +101 -0
  224. package/docs/fundamentals/systems/form/use-cases.md +156 -0
  225. package/docs/fundamentals/systems/form/validate.md +929 -0
  226. package/docs/fundamentals/systems/icon/index.md +3 -0
  227. package/docs/fundamentals/systems/icon/overview.md +124 -0
  228. package/docs/fundamentals/systems/index.md +1 -0
  229. package/docs/fundamentals/systems/localize/assets/all-locales.js +437 -0
  230. package/docs/fundamentals/systems/localize/assets/en-AU.js +6 -0
  231. package/docs/fundamentals/systems/localize/assets/en-GB.js +6 -0
  232. package/docs/fundamentals/systems/localize/assets/en-US.js +6 -0
  233. package/docs/fundamentals/systems/localize/assets/en.js +4 -0
  234. package/docs/fundamentals/systems/localize/assets/nl-BE.js +6 -0
  235. package/docs/fundamentals/systems/localize/assets/nl-NL.js +6 -0
  236. package/docs/fundamentals/systems/localize/assets/nl.js +4 -0
  237. package/docs/fundamentals/systems/localize/dates.md +195 -0
  238. package/docs/fundamentals/systems/localize/index.md +3 -0
  239. package/docs/fundamentals/systems/localize/numbers.md +217 -0
  240. package/docs/fundamentals/systems/localize/overview.md +48 -0
  241. package/docs/fundamentals/systems/localize/rationale.md +62 -0
  242. package/docs/fundamentals/systems/localize/text.md +125 -0
  243. package/docs/fundamentals/systems/localize/use-cases.md +319 -0
  244. package/docs/fundamentals/systems/overlays/assets/applyDemoOverlayStyles.js +22 -0
  245. package/docs/fundamentals/systems/overlays/assets/demo-overlay-backdrop.js +48 -0
  246. package/docs/fundamentals/systems/overlays/assets/demo-overlay-system.js +42 -0
  247. package/docs/fundamentals/systems/overlays/assets/umbrella-form.js +133 -0
  248. package/docs/fundamentals/systems/overlays/configuration.md +453 -0
  249. package/docs/fundamentals/systems/overlays/form-integration.md +65 -0
  250. package/docs/fundamentals/systems/overlays/index.md +3 -0
  251. package/docs/fundamentals/systems/overlays/overview.md +118 -0
  252. package/docs/fundamentals/systems/overlays/rationale.md +232 -0
  253. package/docs/fundamentals/systems/overlays/scope.md +176 -0
  254. package/docs/fundamentals/systems/overlays/use-cases.md +699 -0
  255. package/docs/fundamentals/tools/ajax/assets/naga.json +9 -0
  256. package/docs/fundamentals/tools/ajax/assets/pabu.json +9 -0
  257. package/docs/fundamentals/tools/ajax/index.md +3 -0
  258. package/docs/fundamentals/tools/ajax/overview.md +128 -0
  259. package/docs/fundamentals/tools/ajax/use-cases.md +456 -0
  260. package/docs/fundamentals/tools/helpers/action-logger.md +165 -0
  261. package/docs/fundamentals/tools/helpers/index.md +3 -0
  262. package/docs/fundamentals/tools/helpers/overview.md +30 -0
  263. package/docs/fundamentals/tools/index.md +1 -0
  264. package/docs/fundamentals/tools/singleton-manager/index.md +3 -0
  265. package/docs/fundamentals/tools/singleton-manager/overview.md +304 -0
  266. package/docs/guides/how-to/create-a-custom-field.md +200 -0
  267. package/docs/guides/how-to/extend-a-native-input.md +66 -0
  268. package/docs/guides/how-to/get-started.md +77 -0
  269. package/docs/guides/how-to/index.md +1 -0
  270. package/docs/guides/index.md +34 -0
  271. package/docs/guides/principles/definitions-and-terms.md +41 -0
  272. package/docs/guides/principles/index.md +26 -0
  273. package/docs/guides/principles/scoped-elements.md +103 -0
  274. package/docs/guides/principles/styling.md +32 -0
  275. package/docs/guides/principles/subclasser-apis.md +28 -0
  276. package/docs/override.js +15 -0
  277. package/exports/define/lion-drawer.js +3 -0
  278. package/exports/drawer.js +1 -0
  279. package/package.json +2 -2
@@ -0,0 +1,69 @@
1
+ import { css, html } from 'lit';
2
+ import { LionButton } from '@lion/ui/button.js';
3
+
4
+ export class GhButton extends LionButton {
5
+ static get properties() {
6
+ return {
7
+ value: String,
8
+ };
9
+ }
10
+
11
+ static get styles() {
12
+ return css`
13
+ :host {
14
+ outline: none;
15
+ position: relative;
16
+ display: inline-flex;
17
+ align-items: center;
18
+ padding: 5px 16px;
19
+ font-size: 14px;
20
+ font-weight: 500;
21
+ line-height: 20px;
22
+ white-space: nowrap;
23
+ vertical-align: middle;
24
+ cursor: pointer;
25
+ -webkit-user-select: none;
26
+ -moz-user-select: none;
27
+ -ms-user-select: none;
28
+ user-select: none;
29
+ border: 1px solid;
30
+ border-radius: 6px;
31
+ -webkit-appearance: none;
32
+ -moz-appearance: none;
33
+ appearance: none;
34
+
35
+ color: #24292e;
36
+ background-color: #fafbfc;
37
+ border-color: rgba(27, 31, 35, 0.15);
38
+ box-shadow: 0 1px 0 rgba(27, 31, 35, 0.04), inset 0 1px 0 hsla(0, 0%, 100%, 0.25);
39
+ transition: background-color 0.2s cubic-bezier(0.3, 0, 0.5, 1);
40
+ }
41
+
42
+ :host(:hover) {
43
+ background-color: #f3f4f6;
44
+ transition-duration: 0.1s;
45
+ }
46
+
47
+ :host ::slotted([slot='before']) {
48
+ margin-right: 4px;
49
+ }
50
+
51
+ /**
52
+ * TODO: this doesn't have to be light dom anymore in LionButton,
53
+ * just spawning a hidden native button on submit would be enough
54
+ */
55
+ :host ::slotted(button) {
56
+ position: absolute;
57
+ opacity: 0;
58
+ }
59
+ `;
60
+ }
61
+
62
+ render() {
63
+ return html` <slot name="before"></slot>
64
+ ${this.value}
65
+ <slot name="after"></slot>
66
+ <slot name="_button"></slot>`;
67
+ }
68
+ }
69
+ customElements.define('gh-button', GhButton);
@@ -0,0 +1,508 @@
1
+ import { css, html } from 'lit';
2
+ import { LionOption } from '@lion/ui/listbox.js';
3
+ import { renderLitAsNode } from '@lion/ui/helpers.js';
4
+ // import { withModalDialogConfig } from '@lion/ui/overlays.js';
5
+ import { LionCombobox } from '@lion/ui/combobox.js';
6
+ import './gh-button.js';
7
+
8
+ export class GhOption extends LionOption {
9
+ static get properties() {
10
+ return {
11
+ category: String,
12
+ default: { type: Boolean, reflect: true },
13
+ };
14
+ }
15
+
16
+ static get styles() {
17
+ return [
18
+ ...super.styles,
19
+ css`
20
+ :host {
21
+ display: flex;
22
+ align-items: center;
23
+ width: 100%;
24
+ padding: 16px;
25
+ overflow: hidden;
26
+ color: #24292e;
27
+ text-align: left;
28
+ cursor: pointer;
29
+ background-color: #fff;
30
+ border: 0;
31
+ border-bottom: 1px solid #eaecef;
32
+ box-sizing: border-box;
33
+ display: flex;
34
+ align-items: center;
35
+ }
36
+
37
+ @media (min-width: 544px) {
38
+ :host {
39
+ padding-top: 7px;
40
+ padding-bottom: 7px;
41
+ }
42
+ }
43
+
44
+ :host([checked]) {
45
+ background-color: white;
46
+ }
47
+
48
+ :host(:hover),
49
+ :host([active]),
50
+ :host([focused]) {
51
+ background-color: #f6f8fa;
52
+ }
53
+
54
+ .gh-check-icon {
55
+ visibility: hidden;
56
+ margin-right: 4px;
57
+ }
58
+
59
+ :host([checked]) .gh-check-icon {
60
+ visibility: visible;
61
+ }
62
+
63
+ .gh-default-badge {
64
+ visibility: hidden;
65
+
66
+ display: inline-block;
67
+ padding: 0 7px;
68
+ font-size: 12px;
69
+ font-weight: 500;
70
+ line-height: 18px;
71
+ border-radius: 2em;
72
+ background-color: initial !important;
73
+ border: 1px solid #e1e4e8;
74
+ color: #586069;
75
+ border-color: #e1e4e8;
76
+ }
77
+
78
+ :host([default]) .gh-default-badge {
79
+ visibility: visible;
80
+ }
81
+
82
+ .gh-content {
83
+ flex: 1;
84
+ }
85
+ `,
86
+ ];
87
+ }
88
+
89
+ render() {
90
+ return html`
91
+ <svg
92
+ class="gh-check-icon"
93
+ viewBox="0 0 16 16"
94
+ version="1.1"
95
+ width="16"
96
+ height="16"
97
+ aria-hidden="true"
98
+ >
99
+ <path
100
+ fill-rule="evenodd"
101
+ d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"
102
+ ></path>
103
+ </svg>
104
+ <span class="gh-content"><slot></slot></span>
105
+ <span class="gh-default-badge">default</span>
106
+ `;
107
+ }
108
+ }
109
+ customElements.define('gh-option', GhOption);
110
+
111
+ export class GhCombobox extends LionCombobox {
112
+ static get properties() {
113
+ return {
114
+ category: { type: String },
115
+ isDesktop: { type: Boolean, reflect: true, attribute: 'is-desktop' },
116
+ };
117
+ }
118
+
119
+ static get styles() {
120
+ return [
121
+ ...super.styles,
122
+ css`
123
+ /** @configure LionCombobox */
124
+
125
+ :host {
126
+ font-family: apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif,
127
+ Apple Color Emoji, Segoe UI Emoji;
128
+ font-size: 14px;
129
+ }
130
+
131
+ .input-group__container {
132
+ display: flex;
133
+ border-bottom: none;
134
+ }
135
+
136
+ * > ::slotted([role='listbox']) {
137
+ max-height: none;
138
+ }
139
+
140
+ * > ::slotted([slot='input']) {
141
+ padding: 5px 12px;
142
+ font-size: 14px;
143
+ line-height: 20px;
144
+ color: #24292e;
145
+ vertical-align: middle;
146
+ background-color: #fff;
147
+ background-repeat: no-repeat;
148
+ background-position: right 8px center;
149
+ border: 1px solid #e1e4e8;
150
+ border-radius: 6px;
151
+ outline: none;
152
+ box-shadow: inset 0 1px 0 rgba(225, 228, 232, 0.2);
153
+ }
154
+
155
+ :host([is-desktop]) {
156
+ font-size: 12px;
157
+ }
158
+
159
+ :host([is-desktop]) ::slotted([slot='input']) {
160
+ font-size: 14px;
161
+ }
162
+
163
+ :host([focused]) ::slotted([slot='input']) {
164
+ border-color: #0366d6;
165
+ outline: none;
166
+ box-shadow: 0 0 0 3px rgba(3, 102, 214, 0.3);
167
+ }
168
+
169
+ .gh-combobox {
170
+ height: auto;
171
+ max-height: 480px;
172
+ margin-top: 8px;
173
+
174
+ position: relative;
175
+ z-index: 99;
176
+ display: flex;
177
+ max-height: 66%;
178
+ margin: auto 0;
179
+ overflow: hidden;
180
+ pointer-events: auto;
181
+ flex-direction: column;
182
+ background-color: #fff;
183
+ border-radius: 12px;
184
+ box-shadow: 0 0 18px rgba(27, 31, 35, 0.4);
185
+ /* animation: SelectMenu-modal-animation 0.12s cubic-bezier(0, 0.1, 0.1, 1) backwards; */
186
+ }
187
+
188
+ :host([is-desktop]) .gh-combobox {
189
+ width: 300px;
190
+ height: auto;
191
+ max-height: 480px;
192
+ margin: 8px 0 16px;
193
+ font-size: 12px;
194
+ border: 1px solid #e1e4e8;
195
+ border-radius: 6px;
196
+ box-shadow: 0 8px 24px rgba(149, 157, 165, 0.2);
197
+ /* animation-name: SelectMenu-modal-animation--sm; */
198
+ }
199
+
200
+ .form-field__label {
201
+ font-weight: bold;
202
+ }
203
+
204
+ /** @enhance LionCombobox */
205
+
206
+ .gh-categories {
207
+ display: flex;
208
+ flex-shrink: 0;
209
+ overflow-x: auto;
210
+ overflow-y: hidden;
211
+ box-shadow: inset 0 -1px 0 #eaecef;
212
+ -webkit-overflow-scrolling: touch;
213
+ }
214
+
215
+ :host([is-desktop]) .gh-categories {
216
+ padding: 8px 8px 0;
217
+ }
218
+
219
+ .gh-categories__btn {
220
+ flex: 1;
221
+ padding: 8px 16px;
222
+ font-size: 12px;
223
+ font-weight: 500;
224
+ color: #6a737d;
225
+ text-align: center;
226
+ background-color: initial;
227
+ border: 0;
228
+ box-shadow: inset 0 -1px 0 #eaecef;
229
+
230
+ border-radius: 0;
231
+ font-family: inherit;
232
+ font-size: inherit;
233
+ line-height: inherit;
234
+ outline: none;
235
+
236
+ cursor: pointer;
237
+ }
238
+
239
+ .gh-categories__btn:focus {
240
+ background-color: #dbedff;
241
+ }
242
+
243
+ :host([is-desktop]) .gh-categories__btn {
244
+ flex: none;
245
+ padding: 4px 16px;
246
+ border: solid transparent;
247
+ border-width: 1px 1px 0;
248
+ border-top-left-radius: 6px;
249
+ border-top-right-radius: 6px;
250
+ }
251
+
252
+ .gh-categories__btn[aria-pressed='true'] {
253
+ z-index: 1;
254
+ color: #24292e;
255
+ cursor: default;
256
+ box-shadow: 0 0 0 1px #eaecef;
257
+ cursor: default;
258
+ }
259
+
260
+ :host([is-desktop]) .gh-categories__btn {
261
+ flex: none;
262
+ }
263
+ :host([is-desktop]) .gh-categories__btn[aria-pressed='true'] {
264
+ border-color: #eaecef;
265
+ box-shadow: none;
266
+ }
267
+
268
+ .gh-section-wrapper {
269
+ padding: 16px;
270
+ margin: 0;
271
+ border-bottom: 1px solid #eaecef;
272
+ }
273
+
274
+ :host([is-desktop]) .gh-section-wrapper {
275
+ padding: 8px;
276
+ }
277
+ `,
278
+ ];
279
+ }
280
+
281
+ /**
282
+ * @override LionCombobox put all content in an overlay
283
+ */
284
+ // eslint-disable-next-line class-methods-use-this
285
+ render() {
286
+ return html`
287
+ <slot name="selection-display"></slot>
288
+ <div id="overlay-content-node-wrapper" role="dialog">
289
+ <div class="gh-combobox">
290
+ <div class="form-field__group-one">
291
+ <div class="gh-section-wrapper">${this._groupOneTemplate()}</div>
292
+ </div>
293
+ <div class="form-field__group-two">
294
+ <div class="gh-section-wrapper">${this._groupTwoTemplate()}</div>
295
+ <div
296
+ class="gh-categories"
297
+ @click="${this.__handleCategory}"
298
+ @keydown="${this.__handleCategory}"
299
+ >
300
+ <button type="button" data-category="branches" class="gh-categories__btn">
301
+ Branches
302
+ </button>
303
+ <button type="button" data-category="tags" class="gh-categories__btn">Tags</button>
304
+ </div>
305
+ <slot name="listbox"></slot>
306
+ </div>
307
+ </div>
308
+ </div>
309
+ <slot id="options-outlet"></slot>
310
+ `;
311
+ }
312
+
313
+ /**
314
+ * Wrapper with combobox role for the text input that the end user controls the listbox with.
315
+ * @type {HTMLElement}
316
+ */
317
+ get _comboboxNode() {
318
+ if (this.__comboboxNode) {
319
+ return this.__comboboxNode;
320
+ }
321
+ const slot = this.querySelector('[slot="input"]');
322
+ if (slot) {
323
+ this.__comboboxNode = slot;
324
+ return slot;
325
+ }
326
+ const slot2 = this._overlayCtrl?.contentWrapperNode.querySelector('[slot="input"]');
327
+ if (slot2) {
328
+ this.__comboboxNode = slot2;
329
+ return slot2;
330
+ }
331
+ return null;
332
+ }
333
+
334
+ /**
335
+ * @override LionCombobox: remove selection-display (place it higher up)
336
+ */
337
+ // eslint-disable-next-line class-methods-use-this
338
+ _inputGroupInputTemplate() {
339
+ return html`
340
+ <div class="input-group__input">
341
+ <slot name="input"></slot>
342
+ </div>
343
+ `;
344
+ }
345
+
346
+ /**
347
+ * @override LionCombobox: restore to values FormControlMixin
348
+ */
349
+ // eslint-disable-next-line class-methods-use-this
350
+ _groupTwoTemplate() {
351
+ return html` ${this._inputGroupTemplate()} ${this._feedbackTemplate()} `;
352
+ }
353
+
354
+ get slots() {
355
+ return {
356
+ ...super.slots,
357
+ 'selection-display': () =>
358
+ renderLitAsNode(html`
359
+ <gh-button>
360
+ <svg
361
+ slot="before"
362
+ text="gray"
363
+ height="16"
364
+ class="octicon octicon-git-branch text-gray"
365
+ viewBox="0 0 16 16"
366
+ version="1.1"
367
+ width="16"
368
+ aria-hidden="true"
369
+ >
370
+ <path
371
+ fill-rule="evenodd"
372
+ d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"
373
+ ></path>
374
+ </svg>
375
+
376
+ <span slot="after"> </span>
377
+ </gh-button>
378
+ `),
379
+ };
380
+ }
381
+
382
+ get _overlayInvokerNode() {
383
+ return this.querySelector('[slot="selection-display"]');
384
+ }
385
+
386
+ get _overlayReferenceNode() {
387
+ return this._overlayInvokerNode;
388
+ }
389
+
390
+ get _categoryButtons() {
391
+ return Array.from(this.shadowRoot.querySelectorAll('.gh-categories__btn[data-category]'));
392
+ }
393
+
394
+ constructor() {
395
+ super();
396
+
397
+ this.showAllOnEmpty = true;
398
+
399
+ /** @type {'branches'|'tags'} */
400
+ this.category = 'branches';
401
+
402
+ this.selectionFollowsFocus = false;
403
+
404
+ // Capture mobile OverlayConfig
405
+ this.__mobileDropdownComboConfig = this.config;
406
+ }
407
+
408
+ firstUpdated(changedProperties) {
409
+ super.firstUpdated(changedProperties);
410
+
411
+ const mql = window.matchMedia('(min-width: 544px)');
412
+ this.isDesktop = mql.matches;
413
+ mql.addListener(({ matches }) => {
414
+ this.isDesktop = matches;
415
+ });
416
+ }
417
+
418
+ updated(changedProperties) {
419
+ super.updated(changedProperties);
420
+
421
+ if (changedProperties.has('category')) {
422
+ const cat = this.category;
423
+ this._categoryButtons.forEach(btn => {
424
+ btn.setAttribute(
425
+ 'aria-pressed',
426
+ btn.getAttribute('data-category') === cat ? 'true' : 'false',
427
+ );
428
+ });
429
+
430
+ this._inputNode.placeholder =
431
+ cat === 'branches' ? 'Find or create a branch...' : 'Find a tag';
432
+
433
+ this._handleAutocompletion();
434
+ }
435
+
436
+ if (changedProperties.has('opened')) {
437
+ // eslint-disable-next-line no-shadow
438
+ this._selectionDisplayNode.value = this.modelValue || 'Choose a value...';
439
+
440
+ if (this.opened) {
441
+ setTimeout(() => {
442
+ this._inputNode.focus();
443
+ });
444
+ } else {
445
+ setTimeout(() => {
446
+ this._selectionDisplayNode.focus();
447
+ }, 100);
448
+ }
449
+ }
450
+
451
+ if (changedProperties.has('isDesktop')) {
452
+ // this.config = this.isDesktop ? this.__mobileDropdownComboConfig : withModalDialogConfig();
453
+ }
454
+ }
455
+
456
+ // /**
457
+ // * @enhance LionCombobox
458
+ // * @param {*} option
459
+ // * @param {...any} args
460
+ // */
461
+ // matchCondition(option, ...args) {
462
+ // return super.matchCondition(option, ...args) && option.category === this.category;
463
+ // }
464
+
465
+ // _defineOverlayConfig() {
466
+ // // temp
467
+ // return { ...super._defineOverlayConfig(), hidesOnOutsideClick: false };
468
+ // }
469
+
470
+ __handleCategory(ev) {
471
+ this.category = ev.target.getAttribute('data-category');
472
+ }
473
+
474
+ // TODO: overrides below are not safe for override and should be made configurable in Combobox
475
+ // basically it should be possible te create a combobox without an overlay
476
+
477
+ /**
478
+ * @override
479
+ */
480
+ _textboxOnKeydown() {
481
+ // if (ev.key === 'Tab') {
482
+ // this.opened = false;
483
+ // }
484
+ this.__hasSelection = this._inputNode.value.length !== this._inputNode.selectionStart;
485
+ }
486
+
487
+ /**
488
+ * @enhance OverlayMixin
489
+ */
490
+ _setupOpenCloseListeners() {
491
+ super._setupOpenCloseListeners();
492
+ this.__toggleOverlay = this.__toggleOverlay.bind(this);
493
+ this._overlayInvokerNode.addEventListener('click', this.__toggleOverlay);
494
+ }
495
+
496
+ __toggleOverlay() {
497
+ this.opened = !this.opened;
498
+ }
499
+
500
+ /**
501
+ * @enhance OverlayMixin
502
+ */
503
+ _teardownOpenCloseListeners() {
504
+ super._teardownOpenCloseListeners();
505
+ this._overlayInvokerNode.removeEventListener('click', this.__toggleOverlay);
506
+ }
507
+ }
508
+ customElements.define('gh-combobox', GhCombobox);
@@ -0,0 +1,9 @@
1
+ import { html } from 'lit';
2
+
3
+ export default html`
4
+ <svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
5
+ <path
6
+ d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
7
+ ></path>
8
+ </svg>
9
+ `;
@@ -0,0 +1,9 @@
1
+ import { html } from 'lit';
2
+
3
+ export default html`
4
+ <svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
5
+ <path
6
+ d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"
7
+ ></path>
8
+ </svg>
9
+ `;
@@ -0,0 +1,19 @@
1
+ import { html } from 'lit';
2
+
3
+ export default html`
4
+ <svg class="HPVvwb" focusable="false" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
5
+ <path
6
+ d="m12 15c1.66 0 3-1.31 3-2.97v-7.02c0-1.66-1.34-3.01-3-3.01s-3 1.34-3 3.01v7.02c0 1.66 1.34 2.97 3 2.97z"
7
+ fill="#4285f4"
8
+ ></path>
9
+ <path d="m11 18.08h2v3.92h-2z" fill="#34a853"></path>
10
+ <path
11
+ d="m7.05 16.87c-1.27-1.33-2.05-2.83-2.05-4.87h2c0 1.45 0.56 2.42 1.47 3.38v0.32l-1.15 1.18z"
12
+ fill="#f4b400"
13
+ ></path>
14
+ <path
15
+ d="m12 16.93a4.97 5.25 0 0 1 -3.54 -1.55l-1.41 1.49c1.26 1.34 3.02 2.13 4.95 2.13 3.87 0 6.99-2.92 6.99-7h-1.99c0 2.92-2.24 4.93-5 4.93z"
16
+ fill="#ea4335"
17
+ ></path>
18
+ </svg>
19
+ `;