solid-ui 3.0.6 → 3.1.1-test.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 (243) hide show
  1. package/README.md +146 -2
  2. package/dist/acl/access-groups.js +1 -1
  3. package/dist/components/button/index.d.ts +1 -0
  4. package/dist/components/button/index.esm.js +546 -0
  5. package/dist/components/button/index.esm.js.map +1 -0
  6. package/dist/components/button/index.esm.min.js +268 -0
  7. package/dist/components/button/index.esm.min.js.map +1 -0
  8. package/dist/components/button/index.js +428 -0
  9. package/dist/components/button/index.js.map +1 -0
  10. package/dist/components/button/index.min.js +257 -0
  11. package/dist/components/button/index.min.js.map +1 -0
  12. package/dist/components/combobox/index.d.ts +1 -0
  13. package/dist/components/combobox/index.esm.js +953 -0
  14. package/dist/components/combobox/index.esm.js.map +1 -0
  15. package/dist/components/combobox/index.esm.min.js +339 -0
  16. package/dist/components/combobox/index.esm.min.js.map +1 -0
  17. package/dist/components/combobox/index.js +782 -0
  18. package/dist/components/combobox/index.js.map +1 -0
  19. package/dist/components/combobox/index.min.js +328 -0
  20. package/dist/components/combobox/index.min.js.map +1 -0
  21. package/dist/components/footer/index.d.ts +1 -0
  22. package/dist/components/footer/index.esm.js +24406 -0
  23. package/dist/components/footer/index.esm.js.map +1 -0
  24. package/dist/components/footer/index.esm.min.js +137 -0
  25. package/dist/components/footer/index.esm.min.js.map +1 -0
  26. package/dist/components/footer/index.js +23303 -0
  27. package/dist/components/footer/index.js.map +1 -0
  28. package/dist/components/footer/index.min.js +125 -0
  29. package/dist/components/footer/index.min.js.map +1 -0
  30. package/dist/components/header/index.d.ts +1 -0
  31. package/dist/components/header/index.esm.js +1936 -0
  32. package/dist/components/header/index.esm.js.map +1 -0
  33. package/dist/components/header/index.esm.min.js +1125 -0
  34. package/dist/components/header/index.esm.min.js.map +1 -0
  35. package/dist/components/header/index.js +1897 -0
  36. package/dist/components/header/index.js.map +1 -0
  37. package/dist/components/header/index.min.js +1126 -0
  38. package/dist/components/header/index.min.js.map +1 -0
  39. package/dist/components/loginButton/index.d.ts +1 -0
  40. package/dist/components/loginButton/index.esm.js +761 -0
  41. package/dist/components/loginButton/index.esm.js.map +1 -0
  42. package/dist/components/loginButton/index.esm.min.js +444 -0
  43. package/dist/components/loginButton/index.esm.min.js.map +1 -0
  44. package/dist/components/loginButton/index.js +743 -0
  45. package/dist/components/loginButton/index.js.map +1 -0
  46. package/dist/components/loginButton/index.min.js +444 -0
  47. package/dist/components/loginButton/index.min.js.map +1 -0
  48. package/dist/components/photoCapture/index.d.ts +1 -0
  49. package/dist/components/photoCapture/index.esm.js +966 -0
  50. package/dist/components/photoCapture/index.esm.js.map +1 -0
  51. package/dist/components/photoCapture/index.esm.min.js +304 -0
  52. package/dist/components/photoCapture/index.esm.min.js.map +1 -0
  53. package/dist/components/photoCapture/index.js +848 -0
  54. package/dist/components/photoCapture/index.js.map +1 -0
  55. package/dist/components/photoCapture/index.min.js +293 -0
  56. package/dist/components/photoCapture/index.min.js.map +1 -0
  57. package/dist/components/select/index.d.ts +1 -0
  58. package/dist/components/select/index.esm.js +939 -0
  59. package/dist/components/select/index.esm.js.map +1 -0
  60. package/dist/components/select/index.esm.min.js +370 -0
  61. package/dist/components/select/index.esm.min.js.map +1 -0
  62. package/dist/components/select/index.js +771 -0
  63. package/dist/components/select/index.js.map +1 -0
  64. package/dist/components/select/index.min.js +359 -0
  65. package/dist/components/select/index.min.js.map +1 -0
  66. package/dist/components/signupButton/index.d.ts +1 -0
  67. package/dist/components/signupButton/index.esm.js +270 -0
  68. package/dist/components/signupButton/index.esm.js.map +1 -0
  69. package/dist/components/signupButton/index.esm.min.js +82 -0
  70. package/dist/components/signupButton/index.esm.min.js.map +1 -0
  71. package/dist/components/signupButton/index.js +264 -0
  72. package/dist/components/signupButton/index.js.map +1 -0
  73. package/dist/components/signupButton/index.min.js +82 -0
  74. package/dist/components/signupButton/index.min.js.map +1 -0
  75. package/dist/footer/index.d.ts.map +1 -1
  76. package/dist/footer/index.js +8 -4
  77. package/dist/footer/index.js.map +1 -1
  78. package/dist/icons/v2/icons-svg/contactIcons.d.ts +3 -0
  79. package/dist/icons/v2/icons-svg/contactIcons.d.ts.map +1 -0
  80. package/dist/icons/v2/icons-svg/contactIcons.js +27 -0
  81. package/dist/icons/v2/icons-svg/contactIcons.js.map +1 -0
  82. package/dist/icons/v2/icons-svg/headerIcons.d.ts +18 -0
  83. package/dist/icons/v2/icons-svg/headerIcons.d.ts.map +1 -0
  84. package/dist/icons/v2/icons-svg/headerIcons.js +245 -0
  85. package/dist/icons/v2/icons-svg/headerIcons.js.map +1 -0
  86. package/dist/icons/v2/icons-svg/pngIcons.d.ts +3 -0
  87. package/dist/icons/v2/icons-svg/pngIcons.d.ts.map +1 -0
  88. package/dist/icons/v2/icons-svg/pngIcons.js +4 -0
  89. package/dist/icons/v2/icons-svg/pngIcons.js.map +1 -0
  90. package/dist/icons/v2/icons-svg/profileIcons.d.ts +23 -0
  91. package/dist/icons/v2/icons-svg/profileIcons.d.ts.map +1 -0
  92. package/dist/icons/v2/icons-svg/profileIcons.js +317 -0
  93. package/dist/icons/v2/icons-svg/profileIcons.js.map +1 -0
  94. package/dist/login/login.d.ts.map +1 -1
  95. package/dist/login/login.js +12 -2
  96. package/dist/login/login.js.map +1 -1
  97. package/dist/matrix/matrix.js.map +1 -1
  98. package/dist/pad.d.ts.map +1 -1
  99. package/dist/pad.js +13 -13
  100. package/dist/pad.js.map +1 -1
  101. package/dist/solid-ui.esm.js +9627 -12206
  102. package/dist/solid-ui.esm.js.map +1 -1
  103. package/dist/solid-ui.esm.min.js +15 -14
  104. package/dist/solid-ui.esm.min.js.map +1 -1
  105. package/dist/solid-ui.js +12621 -14833
  106. package/dist/solid-ui.js.map +1 -1
  107. package/dist/solid-ui.min.js +23 -22
  108. package/dist/solid-ui.min.js.map +1 -1
  109. package/dist/tabs.js +2 -2
  110. package/dist/tabs.js.map +1 -1
  111. package/dist/utils/headerFooterHelpers.d.ts.map +1 -1
  112. package/dist/utils/headerFooterHelpers.js +11 -2
  113. package/dist/utils/headerFooterHelpers.js.map +1 -1
  114. package/dist/v2/components/actions/button/Button.d.ts +97 -0
  115. package/dist/v2/components/actions/button/Button.d.ts.map +1 -0
  116. package/dist/v2/components/actions/button/Button.js +325 -0
  117. package/dist/v2/components/actions/button/Button.js.map +1 -0
  118. package/dist/v2/components/actions/button/Button.test.d.ts +2 -0
  119. package/dist/v2/components/actions/button/Button.test.d.ts.map +1 -0
  120. package/dist/v2/components/actions/button/Button.test.js +117 -0
  121. package/dist/v2/components/actions/button/Button.test.js.map +1 -0
  122. package/dist/v2/components/actions/button/index.d.ts +8 -0
  123. package/dist/v2/components/actions/button/index.d.ts.map +1 -0
  124. package/dist/v2/components/actions/button/index.js +7 -0
  125. package/dist/v2/components/actions/button/index.js.map +1 -0
  126. package/dist/v2/components/auth/loginButton/LoginButton.d.ts +62 -0
  127. package/dist/v2/components/auth/loginButton/LoginButton.d.ts.map +1 -0
  128. package/dist/v2/components/auth/loginButton/LoginButton.js +539 -0
  129. package/dist/v2/components/auth/loginButton/LoginButton.js.map +1 -0
  130. package/dist/v2/components/auth/loginButton/LoginButton.test.d.ts +2 -0
  131. package/dist/v2/components/auth/loginButton/LoginButton.test.d.ts.map +1 -0
  132. package/dist/v2/components/auth/loginButton/LoginButton.test.js +53 -0
  133. package/dist/v2/components/auth/loginButton/LoginButton.test.js.map +1 -0
  134. package/dist/v2/components/auth/loginButton/downArrow.d.ts +2 -0
  135. package/dist/v2/components/auth/loginButton/downArrow.d.ts.map +1 -0
  136. package/dist/v2/components/auth/loginButton/downArrow.js +10 -0
  137. package/dist/v2/components/auth/loginButton/downArrow.js.map +1 -0
  138. package/dist/v2/components/auth/loginButton/index.d.ts +3 -0
  139. package/dist/v2/components/auth/loginButton/index.d.ts.map +1 -0
  140. package/dist/v2/components/auth/loginButton/index.js +7 -0
  141. package/dist/v2/components/auth/loginButton/index.js.map +1 -0
  142. package/dist/v2/components/auth/signupButton/SignupButton.d.ts +36 -0
  143. package/dist/v2/components/auth/signupButton/SignupButton.d.ts.map +1 -0
  144. package/dist/v2/components/auth/signupButton/SignupButton.js +84 -0
  145. package/dist/v2/components/auth/signupButton/SignupButton.js.map +1 -0
  146. package/dist/v2/components/auth/signupButton/SignupButton.test.d.ts +2 -0
  147. package/dist/v2/components/auth/signupButton/SignupButton.test.d.ts.map +1 -0
  148. package/dist/v2/components/auth/signupButton/SignupButton.test.js +49 -0
  149. package/dist/v2/components/auth/signupButton/SignupButton.test.js.map +1 -0
  150. package/dist/v2/components/auth/signupButton/index.d.ts +3 -0
  151. package/dist/v2/components/auth/signupButton/index.d.ts.map +1 -0
  152. package/dist/v2/components/auth/signupButton/index.js +7 -0
  153. package/dist/v2/components/auth/signupButton/index.js.map +1 -0
  154. package/dist/v2/components/forms/combobox/Combobox.d.ts +82 -0
  155. package/dist/v2/components/forms/combobox/Combobox.d.ts.map +1 -0
  156. package/dist/v2/components/forms/combobox/Combobox.js +506 -0
  157. package/dist/v2/components/forms/combobox/Combobox.js.map +1 -0
  158. package/dist/v2/components/forms/combobox/Combobox.test.d.ts +2 -0
  159. package/dist/v2/components/forms/combobox/Combobox.test.d.ts.map +1 -0
  160. package/dist/v2/components/forms/combobox/Combobox.test.js +201 -0
  161. package/dist/v2/components/forms/combobox/Combobox.test.js.map +1 -0
  162. package/dist/v2/components/forms/combobox/comboboxTypes.d.ts +6 -0
  163. package/dist/v2/components/forms/combobox/comboboxTypes.d.ts.map +1 -0
  164. package/dist/v2/components/forms/combobox/comboboxTypes.js +2 -0
  165. package/dist/v2/components/forms/combobox/comboboxTypes.js.map +1 -0
  166. package/dist/v2/components/forms/combobox/index.d.ts +3 -0
  167. package/dist/v2/components/forms/combobox/index.d.ts.map +1 -0
  168. package/dist/v2/components/forms/combobox/index.js +7 -0
  169. package/dist/v2/components/forms/combobox/index.js.map +1 -0
  170. package/dist/v2/components/forms/select/Select.d.ts +68 -0
  171. package/dist/v2/components/forms/select/Select.d.ts.map +1 -0
  172. package/dist/v2/components/forms/select/Select.js +499 -0
  173. package/dist/v2/components/forms/select/Select.js.map +1 -0
  174. package/dist/v2/components/forms/select/Select.test.d.ts +2 -0
  175. package/dist/v2/components/forms/select/Select.test.d.ts.map +1 -0
  176. package/dist/v2/components/forms/select/Select.test.js +168 -0
  177. package/dist/v2/components/forms/select/Select.test.js.map +1 -0
  178. package/dist/v2/components/forms/select/index.d.ts +3 -0
  179. package/dist/v2/components/forms/select/index.d.ts.map +1 -0
  180. package/dist/v2/components/forms/select/index.js +7 -0
  181. package/dist/v2/components/forms/select/index.js.map +1 -0
  182. package/dist/v2/components/forms/shared/downArrow.d.ts +2 -0
  183. package/dist/v2/components/forms/shared/downArrow.d.ts.map +1 -0
  184. package/dist/v2/components/forms/shared/downArrow.js +10 -0
  185. package/dist/v2/components/forms/shared/downArrow.js.map +1 -0
  186. package/dist/v2/components/forms/shared/keyboard.d.ts +7 -0
  187. package/dist/v2/components/forms/shared/keyboard.d.ts.map +1 -0
  188. package/dist/v2/components/forms/shared/keyboard.js +56 -0
  189. package/dist/v2/components/forms/shared/keyboard.js.map +1 -0
  190. package/dist/v2/components/forms/shared/listboxStyles.d.ts +2 -0
  191. package/dist/v2/components/forms/shared/listboxStyles.d.ts.map +1 -0
  192. package/dist/v2/components/forms/shared/listboxStyles.js +96 -0
  193. package/dist/v2/components/forms/shared/listboxStyles.js.map +1 -0
  194. package/dist/v2/components/forms/shared/listboxTemplate.d.ts +11 -0
  195. package/dist/v2/components/forms/shared/listboxTemplate.d.ts.map +1 -0
  196. package/dist/v2/components/forms/shared/listboxTemplate.js +37 -0
  197. package/dist/v2/components/forms/shared/listboxTemplate.js.map +1 -0
  198. package/dist/v2/components/forms/shared/optionTypes.d.ts +6 -0
  199. package/dist/v2/components/forms/shared/optionTypes.d.ts.map +1 -0
  200. package/dist/v2/components/forms/shared/optionTypes.js +2 -0
  201. package/dist/v2/components/forms/shared/optionTypes.js.map +1 -0
  202. package/dist/v2/components/layout/footer/Footer.d.ts +60 -0
  203. package/dist/v2/components/layout/footer/Footer.d.ts.map +1 -0
  204. package/dist/v2/components/layout/footer/Footer.js +148 -0
  205. package/dist/v2/components/layout/footer/Footer.js.map +1 -0
  206. package/dist/v2/components/layout/footer/Footer.test.d.ts +2 -0
  207. package/dist/v2/components/layout/footer/Footer.test.d.ts.map +1 -0
  208. package/dist/v2/components/layout/footer/Footer.test.js +53 -0
  209. package/dist/v2/components/layout/footer/Footer.test.js.map +1 -0
  210. package/dist/v2/components/layout/footer/index.d.ts +3 -0
  211. package/dist/v2/components/layout/footer/index.d.ts.map +1 -0
  212. package/dist/v2/components/layout/footer/index.js +7 -0
  213. package/dist/v2/components/layout/footer/index.js.map +1 -0
  214. package/dist/v2/components/layout/header/Header.d.ts +155 -0
  215. package/dist/v2/components/layout/header/Header.d.ts.map +1 -0
  216. package/dist/v2/components/layout/header/Header.js +845 -0
  217. package/dist/v2/components/layout/header/Header.js.map +1 -0
  218. package/dist/v2/components/layout/header/header.test.d.ts +2 -0
  219. package/dist/v2/components/layout/header/header.test.d.ts.map +1 -0
  220. package/dist/v2/components/layout/header/header.test.js +242 -0
  221. package/dist/v2/components/layout/header/header.test.js.map +1 -0
  222. package/dist/v2/components/layout/header/index.d.ts +4 -0
  223. package/dist/v2/components/layout/header/index.d.ts.map +1 -0
  224. package/dist/v2/components/layout/header/index.js +7 -0
  225. package/dist/v2/components/layout/header/index.js.map +1 -0
  226. package/dist/v2/components/media/photoCapture/PhotoCapture.d.ts +200 -0
  227. package/dist/v2/components/media/photoCapture/PhotoCapture.d.ts.map +1 -0
  228. package/dist/v2/components/media/photoCapture/PhotoCapture.js +723 -0
  229. package/dist/v2/components/media/photoCapture/PhotoCapture.js.map +1 -0
  230. package/dist/v2/components/media/photoCapture/PhotoCapture.test.d.ts +2 -0
  231. package/dist/v2/components/media/photoCapture/PhotoCapture.test.d.ts.map +1 -0
  232. package/dist/v2/components/media/photoCapture/PhotoCapture.test.js +157 -0
  233. package/dist/v2/components/media/photoCapture/PhotoCapture.test.js.map +1 -0
  234. package/dist/v2/components/media/photoCapture/index.d.ts +3 -0
  235. package/dist/v2/components/media/photoCapture/index.d.ts.map +1 -0
  236. package/dist/v2/components/media/photoCapture/index.js +7 -0
  237. package/dist/v2/components/media/photoCapture/index.js.map +1 -0
  238. package/dist/versionInfo.js +15 -15
  239. package/dist/widgets/buttons.d.ts +10 -3
  240. package/dist/widgets/buttons.d.ts.map +1 -1
  241. package/dist/widgets/buttons.js +81 -7
  242. package/dist/widgets/buttons.js.map +1 -1
  243. package/package.json +139 -46
@@ -0,0 +1,168 @@
1
+ import { beforeEach, describe, expect, it, jest } from '@jest/globals';
2
+ import { Select } from './Select';
3
+ import './index';
4
+ function getPortalRoot() {
5
+ var _a;
6
+ const portalHost = document.querySelector('[data-solid-ui-select-portal]');
7
+ return (_a = portalHost === null || portalHost === void 0 ? void 0 : portalHost.shadowRoot) !== null && _a !== void 0 ? _a : null;
8
+ }
9
+ describe('SolidUISelect', () => {
10
+ beforeEach(() => {
11
+ document.body.innerHTML = '';
12
+ });
13
+ it('is defined as a custom element', () => {
14
+ expect(customElements.get('solid-ui-select')).toBe(Select);
15
+ });
16
+ it('renders the trigger with the first option label by default', async () => {
17
+ var _a, _b;
18
+ const select = new Select();
19
+ select.label = 'Language';
20
+ select.options = [
21
+ { label: 'English', value: 'en' },
22
+ { label: 'French', value: 'fr' }
23
+ ];
24
+ document.body.appendChild(select);
25
+ await select.updateComplete;
26
+ const trigger = (_a = select.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('button.select-trigger');
27
+ const triggerIcon = (_b = select.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.select-trigger-icon svg');
28
+ expect(trigger).not.toBeNull();
29
+ expect(triggerIcon).not.toBeNull();
30
+ expect(trigger.getAttribute('aria-haspopup')).toBe('listbox');
31
+ expect(trigger.getAttribute('aria-expanded')).toBe('false');
32
+ expect(trigger.textContent).toContain('English');
33
+ });
34
+ it('renders the fallback label when no options are provided', async () => {
35
+ var _a;
36
+ const select = new Select();
37
+ select.label = 'Language';
38
+ document.body.appendChild(select);
39
+ await select.updateComplete;
40
+ const trigger = (_a = select.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('button.select-trigger');
41
+ expect(trigger).not.toBeNull();
42
+ expect(trigger.textContent).toContain('Language');
43
+ expect(trigger.getAttribute('aria-expanded')).toBe('false');
44
+ });
45
+ it('opens the popup and updates the value when an option is clicked', async () => {
46
+ var _a;
47
+ const select = new Select();
48
+ const changed = jest.fn();
49
+ select.label = 'Language';
50
+ select.options = [
51
+ { label: 'English', value: 'en' },
52
+ { label: 'French', value: 'fr' }
53
+ ];
54
+ select.addEventListener('change', (event) => {
55
+ changed(event.detail);
56
+ });
57
+ document.body.appendChild(select);
58
+ await select.updateComplete;
59
+ const trigger = (_a = select.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('button.select-trigger');
60
+ trigger.click();
61
+ await select.updateComplete;
62
+ const portalRoot = getPortalRoot();
63
+ const listbox = portalRoot === null || portalRoot === void 0 ? void 0 : portalRoot.querySelector('[role="listbox"]');
64
+ const options = portalRoot === null || portalRoot === void 0 ? void 0 : portalRoot.querySelectorAll('[role="option"]');
65
+ expect(listbox).not.toBeNull();
66
+ expect(options).toHaveLength(2);
67
+ options[1].click();
68
+ await select.updateComplete;
69
+ expect(select.value).toBe('fr');
70
+ expect(trigger.textContent).toContain('French');
71
+ expect(trigger.getAttribute('aria-expanded')).toBe('false');
72
+ expect(changed).toHaveBeenCalledWith({ value: 'fr' });
73
+ });
74
+ it('opens the popup when clicking the visible trigger toggle', async () => {
75
+ var _a, _b, _c;
76
+ const select = new Select();
77
+ select.label = 'Language';
78
+ select.options = [
79
+ { label: 'English', value: 'en' },
80
+ { label: 'French', value: 'fr' }
81
+ ];
82
+ document.body.appendChild(select);
83
+ await select.updateComplete;
84
+ const toggle = (_a = select.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.select-trigger-toggle');
85
+ expect(toggle).not.toBeNull();
86
+ toggle.click();
87
+ await select.updateComplete;
88
+ const trigger = (_b = select.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('button.select-trigger');
89
+ expect(trigger.getAttribute('aria-expanded')).toBe('true');
90
+ expect((_c = getPortalRoot()) === null || _c === void 0 ? void 0 : _c.querySelector('[role="listbox"]')).not.toBeNull();
91
+ });
92
+ it('renders the selected option first in the popup', async () => {
93
+ var _a, _b;
94
+ const select = new Select();
95
+ select.options = [
96
+ { label: 'English', value: 'en' },
97
+ { label: 'French', value: 'fr' },
98
+ { label: 'Spanish', value: 'es' }
99
+ ];
100
+ select.value = 'fr';
101
+ document.body.appendChild(select);
102
+ await select.updateComplete;
103
+ const trigger = (_a = select.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('button.select-trigger');
104
+ trigger.click();
105
+ await select.updateComplete;
106
+ const options = Array.from((_b = getPortalRoot()) === null || _b === void 0 ? void 0 : _b.querySelectorAll('[role="option"]'));
107
+ expect(options).toHaveLength(3);
108
+ expect(options[0].textContent).toContain('French');
109
+ expect(options[0].getAttribute('aria-selected')).toBe('true');
110
+ });
111
+ it('does not reflect options to an HTML attribute', async () => {
112
+ const select = new Select();
113
+ select.options = [
114
+ { label: 'English', value: 'en' },
115
+ { label: 'French', value: 'fr' }
116
+ ];
117
+ document.body.appendChild(select);
118
+ await select.updateComplete;
119
+ expect(select.hasAttribute('options')).toBe(false);
120
+ });
121
+ it('supports keyboard selection from the trigger', async () => {
122
+ var _a;
123
+ const select = new Select();
124
+ const changed = jest.fn();
125
+ select.label = 'Language';
126
+ select.options = [
127
+ { label: 'English', value: 'en' },
128
+ { label: 'French', value: 'fr' },
129
+ { label: 'Spanish', value: 'es' }
130
+ ];
131
+ select.addEventListener('change', (event) => {
132
+ changed(event.detail);
133
+ });
134
+ document.body.appendChild(select);
135
+ await select.updateComplete;
136
+ const trigger = (_a = select.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('button.select-trigger');
137
+ trigger.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));
138
+ await select.updateComplete;
139
+ expect(trigger.getAttribute('aria-expanded')).toBe('true');
140
+ expect(trigger.getAttribute('aria-activedescendant')).toBeTruthy();
141
+ trigger.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));
142
+ await select.updateComplete;
143
+ trigger.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true }));
144
+ await select.updateComplete;
145
+ expect(select.value).toBe('fr');
146
+ expect(trigger.textContent).toContain('French');
147
+ expect(changed).toHaveBeenCalledWith({ value: 'fr' });
148
+ });
149
+ it('closes the popup when clicking outside the component', async () => {
150
+ var _a;
151
+ const select = new Select();
152
+ select.options = [
153
+ { label: 'English', value: 'en' },
154
+ { label: 'French', value: 'fr' }
155
+ ];
156
+ document.body.appendChild(select);
157
+ await select.updateComplete;
158
+ const trigger = (_a = select.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('button.select-trigger');
159
+ trigger.click();
160
+ await select.updateComplete;
161
+ expect(trigger.getAttribute('aria-expanded')).toBe('true');
162
+ expect(getPortalRoot()).not.toBeNull();
163
+ document.body.dispatchEvent(new Event('pointerdown', { bubbles: true }));
164
+ await select.updateComplete;
165
+ expect(trigger.getAttribute('aria-expanded')).toBe('false');
166
+ });
167
+ });
168
+ //# sourceMappingURL=Select.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.test.js","sourceRoot":"","sources":["../../../../../src/v2/components/forms/select/Select.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Select } from './Select';
2
+ export { Select };
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/v2/components/forms/select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { Select } from './Select';
2
+ export { Select };
3
+ const SELECT_TAG_NAME = 'solid-ui-select';
4
+ if (!customElements.get(SELECT_TAG_NAME)) {
5
+ customElements.define(SELECT_TAG_NAME, Select);
6
+ }
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/v2/components/forms/select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,CAAA;AAEjB,MAAM,eAAe,GAAG,iBAAiB,CAAA;AAEzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;IACzC,cAAc,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;AAChD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const downArrowIcon: import("lit-html").TemplateResult<1>;
2
+ //# sourceMappingURL=downArrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downArrow.d.ts","sourceRoot":"","sources":["../../../../../src/v2/components/forms/shared/downArrow.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,sCAOzB,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { html } from 'lit-html';
2
+ export const downArrowIcon = html `
3
+ <svg xmlns="http://www.w3.org/2000/svg"
4
+ viewBox="0 0 12 7"
5
+ fill="none"
6
+ >
7
+ <path d="M0.679688 0.678955L5.50729 5.50656L10.3349 0.678955" stroke="#6A7282" stroke-width="1.35776" stroke-linecap="round" stroke-linejoin="round"/>
8
+ </svg>
9
+ `;
10
+ //# sourceMappingURL=downArrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downArrow.js","sourceRoot":"","sources":["../../../../../src/v2/components/forms/shared/downArrow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAE/B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAA;;;;;;;CAOhC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { SelectOption } from './optionTypes';
2
+ export declare function getNextEnabledIndex(currentIndex: number, options: SelectOption[], direction: 1 | -1): number;
3
+ export declare function getFirstEnabledIndex(options: SelectOption[]): number;
4
+ export declare function getLastEnabledIndex(options: SelectOption[]): number;
5
+ export declare function findOptionIndexByValue(options: SelectOption[], value?: string): number;
6
+ export declare function getListboxActionFromKey(key: string): 'open' | 'close' | 'next' | 'previous' | 'first' | 'last' | 'select' | 'none';
7
+ //# sourceMappingURL=keyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../../../../src/v2/components/forms/shared/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,YAAY,EAAE,EACvB,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAChB,MAAM,CAiBR;AAGD,wBAAgB,oBAAoB,CAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAMrE;AAED,wBAAgB,mBAAmB,CAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAMpE;AAGD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,YAAY,EAAE,EACvB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAKR;AAGD,wBAAgB,uBAAuB,CAAE,GAAG,EAAE,MAAM,GAChD,MAAM,GACN,OAAO,GACP,MAAM,GACN,UAAU,GACV,OAAO,GACP,MAAM,GACN,QAAQ,GACR,MAAM,CAkBT"}
@@ -0,0 +1,56 @@
1
+ /* Move up or down, skip disabled options */
2
+ export function getNextEnabledIndex(currentIndex, options, direction) {
3
+ if (!options.length) {
4
+ return -1;
5
+ }
6
+ if (options.every(option => option.disabled)) {
7
+ return -1;
8
+ }
9
+ const optionsCount = options.length;
10
+ let nextIndex = currentIndex;
11
+ do {
12
+ nextIndex = (nextIndex + direction + optionsCount) % optionsCount;
13
+ } while (options[nextIndex].disabled);
14
+ return nextIndex;
15
+ }
16
+ /* Handle 'Home' and 'End' keys and initial highlight */
17
+ export function getFirstEnabledIndex(options) {
18
+ if (!options.length) {
19
+ return -1;
20
+ }
21
+ return getNextEnabledIndex(-1, options, 1);
22
+ }
23
+ export function getLastEnabledIndex(options) {
24
+ if (!options.length) {
25
+ return -1;
26
+ }
27
+ return getNextEnabledIndex(options.length, options, -1);
28
+ }
29
+ /* Sync current value to active index */
30
+ export function findOptionIndexByValue(options, value) {
31
+ if (value === undefined) {
32
+ return -1;
33
+ }
34
+ return options.findIndex(option => option.value === value);
35
+ }
36
+ /* Map keyboard events to actions */
37
+ export function getListboxActionFromKey(key) {
38
+ switch (key) {
39
+ case 'ArrowDown':
40
+ return 'next';
41
+ case 'ArrowUp':
42
+ return 'previous';
43
+ case 'Home':
44
+ return 'first';
45
+ case 'End':
46
+ return 'last';
47
+ case 'Enter':
48
+ case ' ':
49
+ return 'select';
50
+ case 'Escape':
51
+ return 'close';
52
+ default:
53
+ return 'none';
54
+ }
55
+ }
56
+ //# sourceMappingURL=keyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../../../../src/v2/components/forms/shared/keyboard.ts"],"names":[],"mappings":"AAEA,4CAA4C;AAC5C,MAAM,UAAU,mBAAmB,CACjC,YAAoB,EACpB,OAAuB,EACvB,SAAiB;IAEjB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAA;IACnC,IAAI,SAAS,GAAG,YAAY,CAAA;IAE5B,GAAG,CAAC;QACF,SAAS,GAAG,CAAC,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC,GAAG,YAAY,CAAA;IACnE,CAAC,QAAQ,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAC;IAErC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,oBAAoB,CAAE,OAAuB;IAC3D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;IAED,OAAO,mBAAmB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAE,OAAuB;IAC1D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;IAED,OAAO,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;AACzD,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,sBAAsB,CACpC,OAAuB,EACvB,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;AAC5D,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,uBAAuB,CAAE,GAAW;IASlD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,WAAW;YACd,OAAO,MAAM,CAAA;QACf,KAAK,SAAS;YACZ,OAAO,UAAU,CAAA;QACnB,KAAK,MAAM;YACT,OAAO,OAAO,CAAA;QAChB,KAAK,KAAK;YACR,OAAO,MAAM,CAAA;QACf,KAAK,OAAO,CAAC;QACb,KAAK,GAAG;YACN,OAAO,QAAQ,CAAA;QACjB,KAAK,QAAQ;YACX,OAAO,OAAO,CAAA;QAChB;YACE,OAAO,MAAM,CAAA;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const listboxStyles: import("lit").CSSResult;
2
+ //# sourceMappingURL=listboxStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listboxStyles.d.ts","sourceRoot":"","sources":["../../../../../src/v2/components/forms/shared/listboxStyles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,yBA6FzB,CAAA"}
@@ -0,0 +1,96 @@
1
+ import { css } from 'lit';
2
+ export const listboxStyles = css `
3
+ :host { /* default theme */
4
+ --input-background: var(--color-background, #F8F9FB);
5
+ --item-text: var(--color-text-heading, #000000);
6
+ --item-selected-text: var(--color-primary, #7c4dff);
7
+ --item-hover-background: var(--color-header-menu-item-hover, #e6dcff);
8
+ --item-selected-background: var(--color-header-menu-item-selected, #cbb9ff);
9
+ --listbox-z-index: 1;
10
+ }
11
+
12
+ :host([theme='dark']) {
13
+ --input-background: var(--color-background, #1A1A1A);
14
+ --item-text: var(--color-text-heading, #F8F9FB);
15
+ --item-selected-text: var(--color-primary, #7c4dff);
16
+ --item-hover-background: var(--color-header-menu-item-hover, #e6dcff);
17
+ --item-selected-background: var(--color-header-menu-item-selected, #cbb9ff);
18
+ --listbox-z-index: 1;
19
+ }
20
+
21
+ .listbox {
22
+ position: relative;
23
+ top: 0;
24
+ left: 0;
25
+ right: 0;
26
+ display: flex;
27
+ flex-direction: column;
28
+ gap: 0.0625rem;
29
+ margin: 0;
30
+ padding: 0;
31
+ list-style: none;
32
+ border: none;
33
+ border-radius: inherit;
34
+ background: var(--input-background);
35
+ background-color: var(--input-background);
36
+ opacity: 1;
37
+ overflow: hidden;
38
+ padding: 0.25rem;
39
+ z-index: var(--listbox-z-index);
40
+ box-shadow: 0 4px 12px rgba(124, 77, 255, 0.12);
41
+ }
42
+
43
+ .listbox-item {
44
+ display: flex;
45
+ align-items: center;
46
+ gap: var(--spacing-2xs, 0.625rem);
47
+ width: 100%;
48
+ min-height: calc(var(--font-size-sm, 0.875rem) + 1rem);
49
+ padding: 0.5rem var(--spacing-xs, 0.75rem);
50
+ border: none;
51
+ border-radius: var(--border-radius-sm, 0.2rem);
52
+ background: transparent;
53
+ color: var(--item-text);
54
+ cursor: pointer;
55
+ font: inherit;
56
+ font-size: var(--font-size-sm, 0.875rem);
57
+ font-weight: var(--font-weight-normal, 400);
58
+ line-height: normal;
59
+ text-align: left;
60
+ text-decoration: none;
61
+ box-sizing: border-box;
62
+ }
63
+
64
+ .listbox-item:hover {
65
+ background: var(--item-hover-background);
66
+ border-radius: var(--border-radius-sm, 0.2rem);
67
+ }
68
+
69
+ .listbox-item:focus {
70
+ background: var(--item-hover-background);
71
+ border-radius: var(--border-radius-sm, 0.2rem);
72
+ }
73
+
74
+ .listbox-item-active {
75
+ background: var(--item-selected-background);
76
+ color: var(--item-selected-text);
77
+ border-radius: var(--border-radius-sm, 0.2rem);
78
+ outline: none;
79
+ }
80
+
81
+ .listbox-item-active:hover,
82
+ .listbox-item-active:focus {
83
+ color: var(--item-text);
84
+ }
85
+
86
+ .listbox-item-disabled {
87
+ opacity: 0.55;
88
+ cursor: not-allowed;
89
+ }
90
+
91
+ .listbox-item-disabled:hover {
92
+ background: transparent;
93
+ border-radius: 0;
94
+ }
95
+ `;
96
+ //# sourceMappingURL=listboxStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listboxStyles.js","sourceRoot":"","sources":["../../../../../src/v2/components/forms/shared/listboxStyles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6F/B,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { SelectOption } from './optionTypes';
2
+ export interface RenderListboxArgs {
3
+ options: SelectOption[];
4
+ selectedOption?: SelectOption;
5
+ activeOption?: SelectOption;
6
+ listboxId?: string;
7
+ getOptionId?: (option: SelectOption, index: number) => string;
8
+ onOptionSelect: (option: SelectOption) => void;
9
+ }
10
+ export declare function renderListbox(args: RenderListboxArgs): import("lit-html").TemplateResult<1>;
11
+ //# sourceMappingURL=listboxTemplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listboxTemplate.d.ts","sourceRoot":"","sources":["../../../../../src/v2/components/forms/shared/listboxTemplate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,cAAc,CAAC,EAAE,YAAY,CAAA;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC7D,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAA;CAC/C;AAED,wBAAgB,aAAa,CAAE,IAAI,EAAE,iBAAiB,wCA2CrD"}
@@ -0,0 +1,37 @@
1
+ import { html } from 'lit';
2
+ export function renderListbox(args) {
3
+ const { options, selectedOption, activeOption, listboxId, getOptionId, onOptionSelect } = args;
4
+ return html `
5
+ <ul
6
+ class="listbox"
7
+ id="${listboxId !== null && listboxId !== void 0 ? listboxId : ''}"
8
+ part="listbox"
9
+ role="listbox"
10
+ aria-orientation="vertical"
11
+ >
12
+ ${options.map((option, index) => {
13
+ const isSelected = option.value === (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.value);
14
+ const isActive = option.value === (activeOption === null || activeOption === void 0 ? void 0 : activeOption.value);
15
+ const optionId = getOptionId === null || getOptionId === void 0 ? void 0 : getOptionId(option, index);
16
+ return html `
17
+ <li
18
+ id="${optionId !== null && optionId !== void 0 ? optionId : ''}"
19
+ class="listbox-item${isSelected ? ' listbox-item-selected' : ''}${isActive ? ' listbox-item-active' : ''}${option.disabled ? ' listbox-item-disabled' : ''}"
20
+ part="option${isSelected ? ' selected-option' : ''}${isActive ? ' active-option' : ''}${option.disabled ? ' disabled-option' : ''}"
21
+ role="option"
22
+ aria-selected="${isSelected}"
23
+ aria-disabled="${option.disabled ? 'true' : 'false'}"
24
+ @click="${() => {
25
+ if (!option.disabled) {
26
+ onOptionSelect(option);
27
+ }
28
+ }}"
29
+ >
30
+ ${option.label}
31
+ </li>
32
+ `;
33
+ })}
34
+ </ul>
35
+ `;
36
+ }
37
+ //# sourceMappingURL=listboxTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listboxTemplate.js","sourceRoot":"","sources":["../../../../../src/v2/components/forms/shared/listboxTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAY1B,MAAM,UAAU,aAAa,CAAE,IAAuB;IACpD,MAAM,EACJ,OAAO,EACP,cAAc,EACd,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAc,EACf,GAAG,IAAI,CAAA;IAER,OAAO,IAAI,CAAA;;;YAGD,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE;;;;;QAKnB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,MAAK,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,KAAK,CAAA,CAAA;QACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,MAAK,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,CAAA,CAAA;QACrD,MAAM,QAAQ,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,MAAM,EAAE,KAAK,CAAC,CAAA;QAE7C,OAAO,IAAI,CAAA;;kBAED,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,EAAE;iCACC,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE;0BAC5I,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;;6BAEhH,UAAU;6BACV,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;sBACzC,GAAG,EAAE;YACb,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,cAAc,CAAC,MAAM,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;;cAEC,MAAM,CAAC,KAAK;;SAEjB,CAAA;IACH,CAAC,CAAC;;GAEL,CAAA;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface SelectOption {
2
+ label: string;
3
+ value: string;
4
+ disabled?: boolean;
5
+ }
6
+ //# sourceMappingURL=optionTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionTypes.d.ts","sourceRoot":"","sources":["../../../../../src/v2/components/forms/shared/optionTypes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=optionTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionTypes.js","sourceRoot":"","sources":["../../../../../src/v2/components/forms/shared/optionTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ import { LitElement } from 'lit';
2
+ import type { LiveStore, NamedNode } from 'rdflib';
3
+ export declare class Footer extends LitElement {
4
+ static properties: {
5
+ theme: {
6
+ type: StringConstructor;
7
+ reflect: boolean;
8
+ };
9
+ layout: {
10
+ type: StringConstructor;
11
+ reflect: boolean;
12
+ };
13
+ position: {
14
+ type: StringConstructor;
15
+ reflect: boolean;
16
+ };
17
+ top: {
18
+ type: StringConstructor;
19
+ reflect: boolean;
20
+ };
21
+ right: {
22
+ type: StringConstructor;
23
+ reflect: boolean;
24
+ };
25
+ bottom: {
26
+ type: StringConstructor;
27
+ reflect: boolean;
28
+ };
29
+ left: {
30
+ type: StringConstructor;
31
+ reflect: boolean;
32
+ };
33
+ store: {
34
+ type: ObjectConstructor;
35
+ attribute: boolean;
36
+ };
37
+ _user: {
38
+ state: boolean;
39
+ };
40
+ };
41
+ static styles: import("lit").CSSResult;
42
+ theme: 'light' | 'dark';
43
+ layout: 'desktop' | 'mobile';
44
+ position: 'static' | 'absolute' | 'relative' | 'fixed' | 'sticky';
45
+ top: string;
46
+ right: string;
47
+ bottom: string;
48
+ left: string;
49
+ store: LiveStore | null;
50
+ _user: NamedNode | null;
51
+ constructor();
52
+ connectedCallback(): void;
53
+ disconnectedCallback(): void;
54
+ updated(changedProperties: Map<string, unknown>): void;
55
+ private _updatePositionStyles;
56
+ private _updateFooter;
57
+ render(): import("lit-html").TemplateResult<1>;
58
+ private _renderFooterContent;
59
+ }
60
+ //# sourceMappingURL=Footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../../src/v2/components/layout/footer/Footer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAA;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAIlD,qBAAa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAUhB;IAED,MAAM,CAAC,MAAM,0BAsDZ;IAEO,KAAK,EAAE,OAAO,GAAG,MAAM,CAAA;IACvB,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC5B,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;IACjE,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;;IAgB/B,iBAAiB;IAOjB,oBAAoB;IAWpB,OAAO,CAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAYhD,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,aAAa;IAIrB,MAAM;IAQN,OAAO,CAAC,oBAAoB;CAsB7B"}