@api-client/ui 0.0.5 → 0.0.8

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 (326) hide show
  1. package/demo/elements/http/http-assertions.html +3 -0
  2. package/demo/elements/http/http-assertions.ts +1 -1
  3. package/demo/elements/http/http-flows.html +23 -0
  4. package/demo/elements/http/http-flows.ts +92 -0
  5. package/demo/elements/http/index.html +3 -0
  6. package/demo/pages/http-project/main.ts +5 -6
  7. package/dist/bindings/base/StoreBindings.js +4 -4
  8. package/dist/bindings/base/StoreBindings.js.map +1 -1
  9. package/dist/define/dialog/delete-cookie-action-dialog.d.ts +10 -0
  10. package/dist/define/dialog/delete-cookie-action-dialog.d.ts.map +1 -0
  11. package/dist/define/dialog/delete-cookie-action-dialog.js +14 -0
  12. package/dist/define/dialog/delete-cookie-action-dialog.js.map +1 -0
  13. package/dist/define/dialog/set-cookie-action-dialog.d.ts +10 -0
  14. package/dist/define/dialog/set-cookie-action-dialog.d.ts.map +1 -0
  15. package/dist/define/dialog/set-cookie-action-dialog.js +14 -0
  16. package/dist/define/dialog/set-cookie-action-dialog.js.map +1 -0
  17. package/dist/define/http/http-assertions.d.ts +1 -1
  18. package/dist/define/http/http-assertions.d.ts.map +1 -1
  19. package/dist/define/http/http-assertions.js +3 -3
  20. package/dist/define/http/http-assertions.js.map +1 -1
  21. package/dist/define/http/http-flows.d.ts +10 -0
  22. package/dist/define/http/http-flows.d.ts.map +1 -0
  23. package/dist/define/http/http-flows.js +13 -0
  24. package/dist/define/http/http-flows.js.map +1 -0
  25. package/dist/define/ui/ui-divider.d.ts +4 -1
  26. package/dist/define/ui/ui-divider.d.ts.map +1 -1
  27. package/dist/define/ui/ui-divider.js +11 -2
  28. package/dist/define/ui/ui-divider.js.map +1 -1
  29. package/dist/elements/ApiElement.d.ts +4 -0
  30. package/dist/elements/ApiElement.d.ts.map +1 -1
  31. package/dist/elements/ApiElement.js +6 -0
  32. package/dist/elements/ApiElement.js.map +1 -1
  33. package/dist/elements/amf/ApiAuthorizationEditor.element.js +1 -1
  34. package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
  35. package/dist/elements/amf/ApiOperationDocument.element.d.ts.map +1 -1
  36. package/dist/elements/amf/ApiOperationDocument.element.js +2 -1
  37. package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
  38. package/dist/elements/amf/ApiRequest.element.js +1 -1
  39. package/dist/elements/amf/ApiRequest.element.js.map +1 -1
  40. package/dist/elements/amf/ApiRequestEditor.element.d.ts +0 -1
  41. package/dist/elements/amf/ApiRequestEditor.element.d.ts.map +1 -1
  42. package/dist/elements/amf/ApiRequestEditor.element.js +0 -3
  43. package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
  44. package/dist/elements/authorization/ui/Authorization.d.ts +2 -1
  45. package/dist/elements/authorization/ui/Authorization.d.ts.map +1 -1
  46. package/dist/elements/authorization/ui/Authorization.js +0 -3
  47. package/dist/elements/authorization/ui/Authorization.js.map +1 -1
  48. package/dist/elements/dialog/DeleteCookieAction.element.d.ts +20 -0
  49. package/dist/elements/dialog/DeleteCookieAction.element.d.ts.map +1 -0
  50. package/dist/elements/dialog/DeleteCookieAction.element.js +93 -0
  51. package/dist/elements/dialog/DeleteCookieAction.element.js.map +1 -0
  52. package/dist/elements/dialog/DeleteCookieAction.styles.d.ts +3 -0
  53. package/dist/elements/dialog/DeleteCookieAction.styles.d.ts.map +1 -0
  54. package/dist/elements/dialog/DeleteCookieAction.styles.js +13 -0
  55. package/dist/elements/dialog/DeleteCookieAction.styles.js.map +1 -0
  56. package/dist/elements/dialog/Rename.d.ts +7 -6
  57. package/dist/elements/dialog/Rename.d.ts.map +1 -1
  58. package/dist/elements/dialog/Rename.js +7 -6
  59. package/dist/elements/dialog/Rename.js.map +1 -1
  60. package/dist/elements/dialog/SetCookieAction.element.d.ts +22 -0
  61. package/dist/elements/dialog/SetCookieAction.element.d.ts.map +1 -0
  62. package/dist/elements/dialog/SetCookieAction.element.js +173 -0
  63. package/dist/elements/dialog/SetCookieAction.element.js.map +1 -0
  64. package/dist/elements/environment/EnvironmentEditor.d.ts +24 -3
  65. package/dist/elements/environment/EnvironmentEditor.d.ts.map +1 -1
  66. package/dist/elements/environment/EnvironmentEditor.js +69 -23
  67. package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
  68. package/dist/elements/environment/EnvironmentEditor.styles.d.ts.map +1 -1
  69. package/dist/elements/environment/EnvironmentEditor.styles.js +5 -0
  70. package/dist/elements/environment/EnvironmentEditor.styles.js.map +1 -1
  71. package/dist/elements/environment/ServerEditor.d.ts +3 -3
  72. package/dist/elements/environment/ServerEditor.d.ts.map +1 -1
  73. package/dist/elements/environment/ServerEditor.js +3 -6
  74. package/dist/elements/environment/ServerEditor.js.map +1 -1
  75. package/dist/elements/environment/VariablesEditor.d.ts +0 -1
  76. package/dist/elements/environment/VariablesEditor.d.ts.map +1 -1
  77. package/dist/elements/environment/VariablesEditor.js +3 -6
  78. package/dist/elements/environment/VariablesEditor.js.map +1 -1
  79. package/dist/elements/highlight/Prism.styles.d.ts.map +1 -1
  80. package/dist/elements/highlight/Prism.styles.js +12 -5
  81. package/dist/elements/highlight/Prism.styles.js.map +1 -1
  82. package/dist/elements/http/BodyEditor.d.ts +0 -4
  83. package/dist/elements/http/BodyEditor.d.ts.map +1 -1
  84. package/dist/elements/http/BodyEditor.js +10 -16
  85. package/dist/elements/http/BodyEditor.js.map +1 -1
  86. package/dist/elements/http/BodyMultipartEditor.d.ts +3 -16
  87. package/dist/elements/http/BodyMultipartEditor.d.ts.map +1 -1
  88. package/dist/elements/http/BodyMultipartEditor.js +3 -19
  89. package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
  90. package/dist/elements/http/BodyTextEditor.d.ts +0 -1
  91. package/dist/elements/http/BodyTextEditor.d.ts.map +1 -1
  92. package/dist/elements/http/BodyTextEditor.js +0 -3
  93. package/dist/elements/http/BodyTextEditor.js.map +1 -1
  94. package/dist/elements/http/BodyUrlEncodedEditor.d.ts +3 -3
  95. package/dist/elements/http/BodyUrlEncodedEditor.d.ts.map +1 -1
  96. package/dist/elements/http/BodyUrlEncodedEditor.js +3 -5
  97. package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
  98. package/dist/elements/http/HeadersForm.d.ts +0 -4
  99. package/dist/elements/http/HeadersForm.d.ts.map +1 -1
  100. package/dist/elements/http/HeadersForm.js +0 -6
  101. package/dist/elements/http/HeadersForm.js.map +1 -1
  102. package/dist/elements/http/HttpAssertions.element.d.ts +55 -0
  103. package/dist/elements/http/HttpAssertions.element.d.ts.map +1 -0
  104. package/dist/elements/http/HttpAssertions.element.js +264 -0
  105. package/dist/elements/http/HttpAssertions.element.js.map +1 -0
  106. package/dist/elements/http/HttpAssertions.styles.d.ts.map +1 -1
  107. package/dist/elements/http/HttpAssertions.styles.js +7 -156
  108. package/dist/elements/http/HttpAssertions.styles.js.map +1 -1
  109. package/dist/elements/http/HttpFlows.common.d.ts +3 -0
  110. package/dist/elements/http/HttpFlows.common.d.ts.map +1 -0
  111. package/dist/elements/http/HttpFlows.common.js +181 -0
  112. package/dist/elements/http/HttpFlows.common.js.map +1 -0
  113. package/dist/elements/http/HttpFlows.element.d.ts +97 -0
  114. package/dist/elements/http/HttpFlows.element.d.ts.map +1 -0
  115. package/dist/elements/http/HttpFlows.element.js +684 -0
  116. package/dist/elements/http/HttpFlows.element.js.map +1 -0
  117. package/dist/elements/http/HttpFlows.styles.d.ts +3 -0
  118. package/dist/elements/http/HttpFlows.styles.d.ts.map +1 -0
  119. package/dist/elements/http/HttpFlows.styles.js +28 -0
  120. package/dist/elements/http/HttpFlows.styles.js.map +1 -0
  121. package/dist/elements/http/HttpFlowsUi.d.ts +172 -0
  122. package/dist/elements/http/HttpFlowsUi.d.ts.map +1 -0
  123. package/dist/elements/http/HttpFlowsUi.js +1256 -0
  124. package/dist/elements/http/HttpFlowsUi.js.map +1 -0
  125. package/dist/elements/http/RequestConfigElement.d.ts +0 -1
  126. package/dist/elements/http/RequestConfigElement.d.ts.map +1 -1
  127. package/dist/elements/http/RequestConfigElement.js +8 -11
  128. package/dist/elements/http/RequestConfigElement.js.map +1 -1
  129. package/dist/elements/http/RequestEditor.d.ts +10 -10
  130. package/dist/elements/http/RequestEditor.d.ts.map +1 -1
  131. package/dist/elements/http/RequestEditor.js +62 -23
  132. package/dist/elements/http/RequestEditor.js.map +1 -1
  133. package/dist/elements/http/UrlInput.d.ts +3 -3
  134. package/dist/elements/http/UrlInput.d.ts.map +1 -1
  135. package/dist/elements/http/UrlInput.js +2 -2
  136. package/dist/elements/http/UrlInput.js.map +1 -1
  137. package/dist/elements/http/UrlParamsForm.d.ts +0 -1
  138. package/dist/elements/http/UrlParamsForm.d.ts.map +1 -1
  139. package/dist/elements/http/UrlParamsForm.js +0 -3
  140. package/dist/elements/http/UrlParamsForm.js.map +1 -1
  141. package/dist/elements/layout/SplitView.styles.d.ts.map +1 -1
  142. package/dist/elements/layout/SplitView.styles.js +1 -0
  143. package/dist/elements/layout/SplitView.styles.js.map +1 -1
  144. package/dist/elements/navigation/AppNavigationItem.styles.d.ts.map +1 -1
  145. package/dist/elements/navigation/AppNavigationItem.styles.js +2 -0
  146. package/dist/elements/navigation/AppNavigationItem.styles.js.map +1 -1
  147. package/dist/elements/project/HttpProjectRequest.d.ts +2 -1
  148. package/dist/elements/project/HttpProjectRequest.d.ts.map +1 -1
  149. package/dist/elements/project/HttpProjectRequest.js +14 -5
  150. package/dist/elements/project/HttpProjectRequest.js.map +1 -1
  151. package/dist/elements/project/ProjectRunner.d.ts +0 -1
  152. package/dist/elements/project/ProjectRunner.d.ts.map +1 -1
  153. package/dist/elements/project/ProjectRunner.js +1 -4
  154. package/dist/elements/project/ProjectRunner.js.map +1 -1
  155. package/dist/elements/schema-design/AssociationFormElement.d.ts +0 -1
  156. package/dist/elements/schema-design/AssociationFormElement.d.ts.map +1 -1
  157. package/dist/elements/schema-design/AssociationFormElement.js +2 -5
  158. package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
  159. package/dist/elements/schema-design/DataEntityEditorElement.d.ts +2 -2
  160. package/dist/elements/schema-design/DataEntityEditorElement.d.ts.map +1 -1
  161. package/dist/elements/schema-design/DataEntityEditorElement.js +5 -5
  162. package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
  163. package/dist/elements/schema-design/DataSchemaDocument.d.ts +0 -1
  164. package/dist/elements/schema-design/DataSchemaDocument.d.ts.map +1 -1
  165. package/dist/elements/schema-design/DataSchemaDocument.js +4 -7
  166. package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
  167. package/dist/elements/schema-design/EntityFormElement.d.ts +0 -1
  168. package/dist/elements/schema-design/EntityFormElement.d.ts.map +1 -1
  169. package/dist/elements/schema-design/EntityFormElement.js +4 -7
  170. package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
  171. package/dist/elements/schema-design/PropertyFormElement.d.ts +1 -2
  172. package/dist/elements/schema-design/PropertyFormElement.d.ts.map +1 -1
  173. package/dist/elements/schema-design/PropertyFormElement.js +8 -11
  174. package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
  175. package/dist/pages/ApplicationScreen.d.ts +1 -1
  176. package/dist/pages/ApplicationScreen.d.ts.map +1 -1
  177. package/dist/pages/ApplicationScreen.js +1 -1
  178. package/dist/pages/ApplicationScreen.js.map +1 -1
  179. package/dist/pages/api-client/ApiClient.styles.d.ts.map +1 -1
  180. package/dist/pages/api-client/ApiClient.styles.js +22 -3
  181. package/dist/pages/api-client/ApiClient.styles.js.map +1 -1
  182. package/dist/pages/api-client/Authenticate.screen.d.ts +2 -0
  183. package/dist/pages/api-client/Authenticate.screen.d.ts.map +1 -1
  184. package/dist/pages/api-client/Authenticate.screen.js +19 -3
  185. package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
  186. package/dist/pages/api-client/StoreConfig.screen.d.ts.map +1 -1
  187. package/dist/pages/api-client/StoreConfig.screen.js +4 -2
  188. package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
  189. package/dist/pages/api-client/StoreConfig.styles.d.ts.map +1 -1
  190. package/dist/pages/api-client/StoreConfig.styles.js +5 -0
  191. package/dist/pages/api-client/StoreConfig.styles.js.map +1 -1
  192. package/dist/pages/api-client/pages/Files.page.d.ts +1 -0
  193. package/dist/pages/api-client/pages/Files.page.d.ts.map +1 -1
  194. package/dist/pages/api-client/pages/Files.page.js +2 -1
  195. package/dist/pages/api-client/pages/Files.page.js.map +1 -1
  196. package/dist/pages/http-project/HttpProject.screen.d.ts +0 -8
  197. package/dist/pages/http-project/HttpProject.screen.d.ts.map +1 -1
  198. package/dist/pages/http-project/HttpProject.screen.js +14 -15
  199. package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
  200. package/dist/pages/http-project/types.d.ts +8 -6
  201. package/dist/pages/http-project/types.d.ts.map +1 -1
  202. package/dist/pages/http-project/types.js.map +1 -1
  203. package/dist/styles/m3/surface.module.d.ts.map +1 -1
  204. package/dist/styles/m3/surface.module.js +11 -27
  205. package/dist/styles/m3/surface.module.js.map +1 -1
  206. package/dist/ui/UiElement.d.ts +4 -0
  207. package/dist/ui/UiElement.d.ts.map +1 -1
  208. package/dist/ui/UiElement.js +6 -0
  209. package/dist/ui/UiElement.js.map +1 -1
  210. package/dist/ui/button/SegmentedButton.styles.d.ts.map +1 -1
  211. package/dist/ui/button/SegmentedButton.styles.js +3 -1
  212. package/dist/ui/button/SegmentedButton.styles.js.map +1 -1
  213. package/dist/ui/dialog/UiDialog.d.ts +3 -0
  214. package/dist/ui/dialog/UiDialog.d.ts.map +1 -1
  215. package/dist/ui/dialog/UiDialog.js +3 -0
  216. package/dist/ui/dialog/UiDialog.js.map +1 -1
  217. package/dist/ui/effects/ripple.d.ts.map +1 -1
  218. package/dist/ui/effects/ripple.js +5 -1
  219. package/dist/ui/effects/ripple.js.map +1 -1
  220. package/dist/ui/icons/Icons.d.ts +3 -2
  221. package/dist/ui/icons/Icons.d.ts.map +1 -1
  222. package/dist/ui/icons/Icons.js +2 -1
  223. package/dist/ui/icons/Icons.js.map +1 -1
  224. package/dist/ui/input/CheckedElement.d.ts +1 -1
  225. package/dist/ui/input/CheckedElement.d.ts.map +1 -1
  226. package/dist/ui/input/CheckedElement.js +3 -3
  227. package/dist/ui/input/CheckedElement.js.map +1 -1
  228. package/dist/ui/input/Input.js +1 -1
  229. package/dist/ui/input/Input.js.map +1 -1
  230. package/dist/ui/list/{DividerElement.d.ts → UiDivider.element.d.ts} +6 -6
  231. package/dist/ui/list/UiDivider.element.d.ts.map +1 -0
  232. package/dist/ui/list/UiDivider.element.js +39 -0
  233. package/dist/ui/list/UiDivider.element.js.map +1 -0
  234. package/dist/ui/list/UiDivider.styles.d.ts +3 -0
  235. package/dist/ui/list/UiDivider.styles.d.ts.map +1 -0
  236. package/dist/ui/list/UiDivider.styles.js +49 -0
  237. package/dist/ui/list/UiDivider.styles.js.map +1 -0
  238. package/dist/ui/tabs/UiTabs.d.ts +13 -1
  239. package/dist/ui/tabs/UiTabs.d.ts.map +1 -1
  240. package/dist/ui/tabs/UiTabs.js +42 -13
  241. package/dist/ui/tabs/UiTabs.js.map +1 -1
  242. package/package.json +1 -1
  243. package/src/bindings/base/StoreBindings.ts +4 -4
  244. package/src/define/dialog/delete-cookie-action-dialog.ts +16 -0
  245. package/src/define/dialog/set-cookie-action-dialog.ts +16 -0
  246. package/src/define/http/http-assertions.ts +3 -3
  247. package/src/define/http/http-flows.ts +15 -0
  248. package/src/define/ui/ui-divider.ts +7 -2
  249. package/src/elements/ApiElement.ts +7 -0
  250. package/src/elements/amf/ApiAuthorizationEditor.element.ts +1 -1
  251. package/src/elements/amf/ApiOperationDocument.element.ts +2 -1
  252. package/src/elements/amf/ApiRequest.element.ts +1 -1
  253. package/src/elements/amf/ApiRequestEditor.element.ts +0 -4
  254. package/src/elements/authorization/ui/Authorization.ts +3 -5
  255. package/src/elements/dialog/DeleteCookieAction.element.ts +100 -0
  256. package/src/elements/dialog/DeleteCookieAction.styles.ts +14 -0
  257. package/src/elements/dialog/Rename.ts +8 -7
  258. package/src/elements/dialog/SetCookieAction.element.ts +183 -0
  259. package/src/elements/environment/EnvironmentEditor.styles.ts +5 -0
  260. package/src/elements/environment/EnvironmentEditor.ts +81 -22
  261. package/src/elements/environment/ServerEditor.ts +4 -8
  262. package/src/elements/environment/VariablesEditor.ts +3 -7
  263. package/src/elements/highlight/Prism.styles.ts +12 -5
  264. package/src/elements/http/BodyEditor.ts +10 -17
  265. package/src/elements/http/BodyMultipartEditor.ts +3 -20
  266. package/src/elements/http/BodyTextEditor.ts +0 -4
  267. package/src/elements/http/BodyUrlEncodedEditor.ts +5 -8
  268. package/src/elements/http/HeadersForm.ts +2 -9
  269. package/src/elements/http/HttpAssertions.element.ts +286 -0
  270. package/src/elements/http/HttpAssertions.styles.ts +7 -156
  271. package/src/elements/http/HttpFlows.common.ts +181 -0
  272. package/src/elements/http/HttpFlows.element.ts +722 -0
  273. package/src/elements/http/HttpFlows.styles.ts +29 -0
  274. package/src/elements/http/HttpFlowsUi.ts +1327 -0
  275. package/src/elements/http/RequestConfigElement.ts +10 -14
  276. package/src/elements/http/RequestEditor.ts +77 -35
  277. package/src/elements/http/UrlInput.ts +6 -6
  278. package/src/elements/http/UrlParamsForm.ts +2 -6
  279. package/src/elements/layout/SplitView.styles.ts +1 -0
  280. package/src/elements/navigation/AppNavigationItem.styles.ts +2 -0
  281. package/src/elements/project/HttpProjectRequest.ts +16 -5
  282. package/src/elements/project/ProjectRunner.ts +3 -7
  283. package/src/elements/schema-design/AssociationFormElement.ts +4 -8
  284. package/src/elements/schema-design/DataEntityEditorElement.ts +8 -8
  285. package/src/elements/schema-design/DataSchemaDocument.ts +5 -9
  286. package/src/elements/schema-design/EntityFormElement.ts +6 -10
  287. package/src/elements/schema-design/PropertyFormElement.ts +11 -15
  288. package/src/pages/ApplicationScreen.ts +1 -1
  289. package/src/pages/api-client/ApiClient.styles.ts +22 -3
  290. package/src/pages/api-client/Authenticate.screen.ts +19 -3
  291. package/src/pages/api-client/StoreConfig.screen.ts +4 -2
  292. package/src/pages/api-client/StoreConfig.styles.ts +5 -0
  293. package/src/pages/api-client/pages/Files.page.ts +2 -1
  294. package/src/pages/http-project/HttpProject.screen.ts +14 -26
  295. package/src/pages/http-project/types.ts +8 -6
  296. package/src/styles/m3/surface.module.ts +11 -27
  297. package/src/styles/m3/theme.css +36 -0
  298. package/src/styles/m3/tokens.css +11 -0
  299. package/src/ui/UiElement.ts +7 -0
  300. package/src/ui/button/SegmentedButton.styles.ts +3 -1
  301. package/src/ui/dialog/UiDialog.ts +3 -0
  302. package/src/ui/effects/ripple.ts +6 -1
  303. package/src/ui/icons/Icons.ts +3 -2
  304. package/src/ui/input/CheckedElement.ts +3 -3
  305. package/src/ui/input/Input.ts +1 -1
  306. package/src/ui/list/UiDivider.element.ts +41 -0
  307. package/src/ui/list/UiDivider.styles.ts +49 -0
  308. package/src/ui/tabs/UiTabs.ts +55 -13
  309. package/test/amf/authorization/OAuth2Method.test.ts +1 -1
  310. package/test/elements/http/HttpAssertions.test.ts +5 -6
  311. package/test/elements/http/HttpFlows.test.ts +485 -0
  312. package/dist/elements/http/HttpAssertions.d.ts +0 -114
  313. package/dist/elements/http/HttpAssertions.d.ts.map +0 -1
  314. package/dist/elements/http/HttpAssertions.js +0 -1146
  315. package/dist/elements/http/HttpAssertions.js.map +0 -1
  316. package/dist/elements/http/internals.d.ts +0 -150
  317. package/dist/elements/http/internals.d.ts.map +0 -1
  318. package/dist/elements/http/internals.js +0 -150
  319. package/dist/elements/http/internals.js.map +0 -1
  320. package/dist/ui/list/DividerElement.d.ts.map +0 -1
  321. package/dist/ui/list/DividerElement.js +0 -82
  322. package/dist/ui/list/DividerElement.js.map +0 -1
  323. package/src/elements/http/HttpAssertions.ts +0 -1187
  324. package/src/elements/http/internals.ts +0 -151
  325. package/src/http-client/docs/Files.md +0 -28
  326. package/src/ui/list/DividerElement.ts +0 -84
@@ -1 +1 @@
1
- {"version":3,"file":"UiTabs.js","sourceRoot":"","sources":["../../../src/ui/tabs/UiTabs.ts"],"names":[],"mappings":";AAAA,oCAAoC;AACpC,sCAAsC;AACtC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAkB,MAAM,KAAK,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAa,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAa,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,+BAA+B,CAAC;AACvC,OAAO,4BAA4B,CAAC;AAUpC;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,EAAU;IAC/C,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,UAAU;IAA9C;;QACE,UAAK,GAAY,EAAE,CAAC;QAEpB,eAAU,GAAiB,IAAI,CAAC;QAQhC;;;;;WAKG;QACwC,aAAQ,GAAiB,SAAS,CAAC;QAe9E;;;;;;WAMG;QACyB,sBAAiB,GAAG,eAAe,CAAC;QAM7C,cAAS,GAAG,KAAK,CAAC;IAgZvC,CAAC;IA9YC,kBAAkB;IAClB,aAAa;IAEb,wEAAwE;IACxE,oEAAoE;IACpE,IAAI;IAEK,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;YAC9B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;SACtC;IACH,CAAC;IAES,KAAK,CAAC,WAAW;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SACxB;QACD,MAAM,IAAI,CAAC,cAAc,CAAC;QAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACO,SAAS,CAAC,OAAgB;QAClC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;YAC1C,OAAO,KAAK,CAAC;SACd;QACD,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC;IACxC,CAAC;IAES,YAAY,CAAC,OAAc;QACnC,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QACD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;YACpD,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAES,eAAe;QACvB,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAChE,IAAI,CAAC,iBAAiB,EAAE;YACtB,OAAO;SACR;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC7E,IAAI,IAAI,IAAI,IAAI,KAAK,UAAU,EAAE;YAC/B,OAAO;SACR;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAES,aAAa,CAAC,GAAW,EAAE,KAAK,GAAG,KAAK;QAChD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAC5B,IAAI,UAAU,KAAK,GAAG,EAAE;YACtB,GAAG,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO;SACR;QACD,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;SAC/B;QACD,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,mEAAmE;gBACnE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;aACxB;SACF;IACH,CAAC;IAED,YAAY,CAAC,IAAW;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,OAAO;SACR;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAqB,QAAQ,EAAE;YAC/D,MAAM,EAAE;gBACN,IAAI;gBACJ,KAAK;gBACL,MAAM,EAAE,SAAS;aAClB;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAES,UAAU,CAAC,GAAU,EAAE,KAAK,GAAG,KAAK;QAC5C,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,EAAE;YAC3B,OAAO;SACR;QACD,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;YACjC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;SAClC;QACD,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC1C,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,GAAG,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9E,IAAI,KAAK,EAAE;YACT,GAAG,CAAC,KAAK,EAAE,CAAC;SACb;IACH,CAAC;IAES,YAAY,CAAC,GAAU;QAC/B,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAC3C,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACnC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;QACrB,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;IACxB,CAAC;IAES,KAAK,CAAC,eAAe,CAAC,GAAU,EAAE,GAAkB;QAC5D,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;YACzB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAC/B,OAAO;SACR;QAED,IAAI,CAAC,GAAG,EAAE;YACR,2CAA2C;YAC3C,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;YACrB,OAAO;SACR;QAED,6DAA6D;QAC7D,8CAA8C;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;QAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,CAAC,cAAc,CAAC;QAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE3G,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;SAC7B;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE;YAC5C,QAAQ,EAAE,GAAG;YACb,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CACA,CAAC;QACF,MAAM,WAAW,GAAc;YAC7B,IAAI,EAAE,GAAG,KAAK,IAAI;SACnB,CAAC;QACF,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC5C,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAC/B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC5C,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAIS,cAAc,CAAC,GAAU;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc;QACvD,MAAM,IAAI,GAAG,cAAc,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;QAChE,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAES,gBAAgB,CAAC,GAAU;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc;QACvD,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC;QACzD,OAAO,GAAG,cAAc,IAAI,CAAC;IAC/B,CAAC;IAES,mBAAmB,CAAC,KAAa,EAAE,KAAa;QACxD,OAAO;YACL;gBACE,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,MAAM;aACd;YACD;gBACE,KAAK,EAAE,MAAM;aACd;YACD;gBACE,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,MAAM;aACd;SACF,CAAC;IACJ,CAAC;IAES,qBAAqB,CAAC,KAAa,EAAE,KAAa;QAC1D,OAAO;YACL;gBACE,IAAI,EAAE,KAAK;aACZ;YACD;gBACE,IAAI,EAAE,KAAK;aACZ;SACF,CAAC;IACJ,CAAC;IAES,mBAAmB,CAAC,CAAe;QAC3C,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAES,qBAAqB,CAAC,CAAgB;QAC9C,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YACvC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;SAC3B;IACH,CAAC;IAES,iBAAiB,CAAC,CAAQ;QAClC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC;QAC9B,IAAI,IAAuB,CAAC;QAC5B,OAAO,CAAC,IAAI,EAAE;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAW,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE;gBACT,MAAM;aACP;YACD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACxB,IAAI,GAAG,IAAI,CAAC;aACb;SACF;QACD,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAES,gBAAgB;QACxB,MAAM,EAAE,aAAa,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAC5C,IAAI,aAAa,KAAK,CAAC,EAAE;YACvB,OAAO;SACR;QACD,IAAI,IAAI,GAAG,aAAa,GAAG,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAG,CAAC,EAAE;YACZ,IAAI,GAAG,CAAC,CAAC;SACV;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,CAAC,QAAQ,CAAC;YACf,QAAQ,EAAE,QAAQ;YAClB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAES,iBAAiB;QACzB,MAAM,EAAE,aAAa,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAC5C,IAAI,IAAI,GAAG,aAAa,GAAG,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE;YACpD,IAAI,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;SAClD;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,CAAC,QAAQ,CAAC;YACf,QAAQ,EAAE,QAAQ;YAClB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAES,YAAY,CAAC,CAAQ;QAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,MAAqB,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC;IACtC,CAAC;IAES,aAAa,CAAC,CAAgB;QACtC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;YAC3B,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SAC/B;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;YACjC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpF,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SAC/B;IACH,CAAC;IAED,eAAe,CAAC,IAAW;QACzB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;QACD,IAAI,CAAC,GAAG,QAAQ,CAAC;QACjB,IAAI,MAA+B,CAAC;QACpC,GAAG;YACD,CAAC,EAAE,CAAC;YACJ,IAAI,CAAC,KAAK,QAAQ,EAAE;gBAClB,uDAAuD;gBACvD,OAAO,IAAI,CAAC;aACb;YACD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,GAAG,EAAE;gBACR,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;gBACjB,SAAS;aACV;YACD,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;gBAC1B,MAAM,GAAG,GAAG,CAAC;aACd;SACF,QAAQ,CAAC,MAAM,EAAE;QAClB,OAAO,MAAe,IAAI,IAAI,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,IAAW;QACrB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;QACD,IAAI,CAAC,GAAG,QAAQ,CAAC;QACjB,IAAI,IAA6B,CAAC;QAClC,GAAG;YACD,CAAC,EAAE,CAAC;YACJ,IAAI,CAAC,KAAK,QAAQ,EAAE;gBAClB,yDAAyD;gBACzD,OAAO,IAAI,CAAC;aACb;YACD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,GAAG,EAAE;gBACR,CAAC,GAAG,CAAC,CAAC,CAAC;gBACP,SAAS;aACV;YACD,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;gBAC1B,IAAI,GAAG,GAAG,CAAC;aACZ;SACF,QAAQ,CAAC,IAAI,EAAE;QAChB,OAAO,IAAa,IAAI,IAAI,CAAC;IAC/B,CAAC;IAEQ,MAAM;QACb,MAAM,OAAO,GAAc;YACzB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU;SAC9B,CAAA;QACD,OAAO,IAAI,CAAA;kBACG,QAAQ,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,uBAAuB,EAAE;sCACA,IAAI,CAAC,YAAY,eAAe,IAAI,CAAC,aAAa;UAC9E,IAAI,CAAC,UAAU,EAAE;;QAEnB,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,eAAe,EAAE;;;KAGzB,CAAC;IACJ,CAAC;IAES,UAAU;QAClB,OAAO,IAAI,CAAA;qBACM,IAAI,CAAC,WAAW;gBACrB,IAAI,CAAC,mBAAmB;kBACtB,IAAI,CAAC,qBAAqB,WAAW,CAAC;IACtD,CAAC;IAES,eAAe;QACvB,MAAM,OAAO,GAAc;YACzB,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS;YACpC,SAAS,EAAE,IAAI,CAAC,QAAQ,KAAK,WAAW;SACzC,CAAA;QACD,OAAO,IAAI,CAAA;kBACG,QAAQ,CAAC,OAAO,CAAC;yDACsB,QAAQ,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;;KAEtF,CAAC;IACJ,CAAC;IAES,uBAAuB;QAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAI,CAAA;;uFAEwE,IAAI,CAAC,gBAAgB;;;WAGjG,CAAC;IACV,CAAC;IAES,kBAAkB;QAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAI,CAAA;yFAC0E,IAAI,CAAC,iBAAiB;;;WAGpG,CAAC;IACV,CAAC;CACF;AAxb2C;IAAzC,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDAAmD;AAEzE;IAAlB,KAAK,CAAC,UAAU,CAAC;uCAAiC;AAEhC;IAAlB,KAAK,CAAC,UAAU,CAAC;uCAAiC;AAQR;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;wCAAoC;AAMjD;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;0CAAsB;AAOtB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAAmB;AASlB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAAqC;AAEvD;IAAR,KAAK,EAAE;6CAAqC;AAIpC;IAAR,KAAK,EAAE;yCAA6B","sourcesContent":["/* eslint-disable import/no-cycle */\n/* eslint-disable no-param-reassign */\nimport { html, LitElement, nothing, TemplateResult } from \"lit\";\nimport { property, query, queryAssignedElements, state } from \"lit/decorators.js\";\nimport { ClassInfo, classMap } from \"lit/directives/class-map.js\";\nimport { StyleInfo, styleMap } from \"lit/directives/style-map.js\";\nimport { Easing } from \"../motion/animation.js\";\nimport UiTab from \"./UiTab.js\";\nimport '../../define/ui/ui-icon-button.js';\nimport '../../define/ui/ui-divider.js';\nimport '../../define/ui/ui-icon.js';\n\nexport type TabsPriority = 'primary' | 'secondary';\n\nexport interface TabSelectionDetail {\n item: UiTab;\n index: number;\n select: string | null;\n}\n\n/**\n * Calculates value in percentages\n * @param w Element width\n * @param w0 Parent width\n * @return The percentage of element's width relative to parent.\n */\nexport function calcPercent(w: number, w0: number): number {\n return (100 * w) / w0;\n}\n\n/**\n * A container for tabs.\n * \n * @fires select - A non bubbling event when selection change through user interaction. The `event.detail` object contains the `item` and `index` properties. It also has the `select` property with the value of the `selectedAttribute` on the tab.\n */\nexport default class UiTabs extends LitElement {\n items: UiTab[] = [];\n\n activeItem: UiTab | null = null;\n\n @queryAssignedElements({ flatten: true }) protected assignedElements!: HTMLElement[] | null;\n\n @query('.pointer') protected pointer!: HTMLElement;\n\n @query('.content') protected content!: HTMLElement;\n\n /**\n * The priority of the tabs.\n * \n * @default primary\n * @attribute\n */\n @property({ type: String, reflect: true }) priority: TabsPriority = 'primary';\n\n /**\n * If true, tabs are scrollable and the tab width is based on the label width.\n * @attribute\n */\n @property({ type: Boolean }) scrollable?: boolean;\n\n /**\n * The value of the selected tab.\n * This is matched with the `aria-controls` of the tab.\n * @attribute\n */\n @property({ type: String }) selected?: string;\n\n /**\n * The attribute on the `ui-tab` that indicates which value for `selected` \n * corresponds to which tab. \n * \n * @default aria-controls\n * @attribute\n */\n @property({ type: String }) selectedAttribute = `aria-controls`;\n\n @state() protected pointerStyles?: StyleInfo;\n\n protected contentScroll?: number;\n\n @state() protected indicated = false;\n\n // constructor() {\n // super();\n\n // // this.addEventListener('keydown', this.handleKeydown.bind(this));\n // // this.addEventListener('click', this.handleClick.bind(this));\n // }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'tablist');\n }\n }\n\n protected async updateItems(): Promise<void> {\n const elements = this.assignedElements || [];\n const items = elements.filter(this.isTabItem, this);\n this.items = items;\n if (this.activeItem && !items.includes(this.activeItem)) {\n this.activeItem = null;\n }\n await this.updateComplete;\n this.ensureSelection();\n }\n\n /** \n * @return Whether the given element is a list item element. \n */\n protected isTabItem(element: Element): element is UiTab {\n if (element.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n return element.localName === 'ui-tab';\n }\n\n protected isSelectable(element: UiTab): boolean {\n if (element.disabled) {\n return false;\n }\n if (element.hidden && element.hasAttribute('hidden')) {\n return false;\n }\n return true;\n }\n\n protected ensureSelection(): void {\n const { selected, selectedAttribute, activeItem, items } = this;\n if (!selectedAttribute) {\n return;\n }\n const item = items.find(i => i.getAttribute(selectedAttribute) === selected);\n if (item && item === activeItem) {\n return;\n }\n this.makeSelection(item);\n }\n\n protected makeSelection(tab?: UiTab, focus = false): void {\n const { activeItem } = this;\n if (activeItem === tab) {\n tab.highlight();\n return;\n }\n if (activeItem) {\n this.deselectItem(activeItem);\n }\n if (tab) {\n this.selectItem(tab, focus);\n this.positionPointer(tab, activeItem);\n if (this.activeItem) {\n // we set this here so we won't notify selection when initializing.\n this.notifySelect(tab);\n }\n }\n }\n\n notifySelect(item: UiTab): void {\n const index = this.items.indexOf(item);\n if (index === -1) {\n return;\n }\n const attrValue = item.getAttribute(this.selectedAttribute);\n this.dispatchEvent(new CustomEvent<TabSelectionDetail>('select', {\n detail: {\n item,\n index,\n select: attrValue,\n }\n }));\n }\n\n protected selectItem(tab: UiTab, focus = false): void {\n if (this.activeItem === tab) {\n return;\n }\n if (this.hasAttribute('tabindex')) {\n this.removeAttribute('tabindex');\n }\n tab.setAttribute('aria-selected', 'true');\n tab.setAttribute('tabindex', '0');\n tab.selected = true;\n this.activeItem = tab;\n tab.priority = this.priority;\n tab.scrollIntoView({ inline: 'nearest', behavior: 'auto', block: 'nearest' });\n if (focus) {\n tab.focus();\n }\n }\n\n protected deselectItem(tab: UiTab): void {\n tab.setAttribute('aria-selected', 'false');\n tab.setAttribute('tabindex', '-1');\n tab.selected = false;\n tab.indicated = false;\n }\n\n protected async positionPointer(tab: UiTab, old?: UiTab | null): Promise<void> {\n const { items, pointer } = this;\n const index = items.indexOf(tab);\n if (index < 0 || !pointer) {\n this.pointerStyles = undefined;\n return;\n }\n\n if (!old) {\n // no start animation, just show indicator.\n tab.indicated = true;\n return;\n }\n\n // first position this indicator in the place of the old one.\n // update the view and then run the animation.\n this.indicated = true;\n const isPrimary = this.priority === 'primary';\n const left = isPrimary ? this.getPrimaryLeft(old) : this.getSecondaryLeft(old);\n this.pointerStyles = { left };\n await this.updateComplete;\n const final = isPrimary ? this.getPrimaryLeft(tab) : this.getSecondaryLeft(tab);\n const frames = isPrimary ? this.getPrimaryKeyframes(left, final) : this.getSecondaryKeyframes(left, final);\n \n if (this.moveAnimation) {\n this.moveAnimation.cancel();\n }\n const moveAnimation = pointer.animate(frames, {\n duration: 360,\n iterations: 1,\n easing: Easing.DECELERATION,\n }\n );\n const finalStyles: StyleInfo = {\n left: `${final}px`,\n };\n moveAnimation.addEventListener('finish', () => {\n this.pointerStyles = finalStyles;\n this.moveAnimation = undefined;\n tab.indicated = true;\n this.indicated = false;\n });\n moveAnimation.addEventListener('cancel', () => {\n this.pointerStyles = finalStyles;\n });\n this.moveAnimation = moveAnimation;\n }\n\n protected moveAnimation?: Animation;\n\n protected getPrimaryLeft(tab: UiTab): string {\n const contentBox = this.content.getBoundingClientRect();\n const tabRect = tab.getBoundingClientRect();\n const leftFromParent = tabRect.x - contentBox.x;\n const offset = this.scrollable ? 48 : 0; // left button\n const left = leftFromParent + (tabRect.width / 2) - 20 + offset;\n return `${left}px`;\n }\n\n protected getSecondaryLeft(tab: UiTab): string {\n const contentBox = this.content.getBoundingClientRect();\n const tabRect = tab.getBoundingClientRect();\n const offset = this.scrollable ? 48 : 0; // left button\n const leftFromParent = tabRect.x - contentBox.x + offset;\n return `${leftFromParent}px`;\n }\n\n protected getPrimaryKeyframes(start: string, final: string): Keyframe[] {\n return [\n {\n left: start,\n width: `40px`,\n },\n {\n width: `80px`,\n },\n {\n left: final,\n width: `40px`,\n }\n ];\n }\n\n protected getSecondaryKeyframes(start: string, final: string): Keyframe[] {\n return [\n {\n left: start,\n },\n {\n left: final,\n }\n ];\n }\n\n protected contentClickHandler(e: PointerEvent): void {\n this.activateFromEvent(e);\n }\n\n protected contentKeyDownHandler(e: KeyboardEvent): void {\n if (['Enter', 'Space'].includes(e.code)) {\n this.activateFromEvent(e);\n }\n }\n\n protected activateFromEvent(e: Event): void {\n const { items } = this;\n const path = e.composedPath();\n let item: UiTab | undefined;\n while (!item) {\n const next = path.shift() as UiTab;\n if (!next) {\n break;\n }\n if (items.includes(next)) {\n item = next;\n }\n }\n if (!item) {\n return;\n }\n this.makeSelection(item, true);\n }\n\n protected handleScrollLeft(): void {\n const { contentScroll = 0, content } = this;\n if (contentScroll === 0) {\n return;\n }\n let left = contentScroll - 80;\n if (left < 0) {\n left = 0;\n }\n this.contentScroll = left;\n content.scrollTo({\n behavior: 'smooth',\n left,\n });\n }\n\n protected handleScrollRight(): void {\n const { contentScroll = 0, content } = this;\n let left = contentScroll + 80;\n if (left + content.clientWidth > content.scrollWidth) {\n left = content.scrollWidth - content.clientWidth;\n }\n this.contentScroll = left;\n content.scrollTo({\n behavior: 'smooth',\n left,\n });\n }\n\n protected handleScroll(e: Event): void {\n const div = e.target as HTMLElement;\n this.contentScroll = div.scrollLeft;\n }\n\n protected handleKeyDown(e: KeyboardEvent): void {\n if (e.code === 'ArrowRight') {\n e.preventDefault();\n const tab = this.activeItem ? this.getNextItem(this.activeItem) : this.items[0];\n this.makeSelection(tab, true);\n } else if (e.code === 'ArrowLeft') {\n e.preventDefault();\n const tab = this.activeItem ? this.getPreviousItem(this.activeItem) : this.items[0];\n this.makeSelection(tab, true);\n }\n }\n\n getPreviousItem(item: UiTab): UiTab {\n const { items } = this;\n const curIndex = items.indexOf(item);\n if (curIndex < 0) {\n return item;\n }\n let i = curIndex;\n let result: HTMLElement | undefined;\n do {\n i--;\n if (i === curIndex) {\n // looped back from the end, no active element to find.\n return item;\n }\n const tmp = items[i];\n if (!tmp) {\n i = items.length;\n continue;\n }\n if (this.isSelectable(tmp)) {\n result = tmp;\n }\n } while (!result);\n return result as UiTab || item;\n }\n\n getNextItem(item: UiTab): UiTab {\n const { items } = this;\n const curIndex = items.indexOf(item);\n if (curIndex < 0) {\n return item;\n }\n let i = curIndex;\n let next: HTMLElement | undefined;\n do {\n i++;\n if (i === curIndex) {\n // looped back from the start, no active element to find.\n return item;\n }\n const tmp = items[i];\n if (!tmp) {\n i = -1;\n continue;\n }\n if (this.isSelectable(tmp)) {\n next = tmp;\n }\n } while (!next);\n return next as UiTab || item;\n }\n\n override render(): TemplateResult {\n const classes: ClassInfo = {\n surface: true,\n scrollable: !!this.scrollable,\n }\n return html`\n <div class=\"${classMap(classes)}\">\n ${this.renderLeftScrollControl()}\n <div class=\"content\" @scroll=\"${this.handleScroll}\" @keydown=\"${this.handleKeyDown}\">\n ${this.renderSlot()}\n </div>\n ${this.rightScrollControl()}\n ${this.renderIndicator()}\n <div class=\"divider\"></div>\n </div>\n `;\n }\n\n protected renderSlot(): TemplateResult {\n return html`<slot \n @slotchange=\"${this.updateItems}\" \n @click=\"${this.contentClickHandler}\" \n @keydown=\"${this.contentKeyDownHandler}\"></slot>`;\n }\n\n protected renderIndicator(): TemplateResult {\n const classes: ClassInfo = {\n indicator: true,\n indicated: this.indicated,\n primary: this.priority === 'primary',\n secondary: this.priority === 'secondary',\n }\n return html`\n <div class=\"${classMap(classes)}\">\n <span role=\"presentation\" class=\"pointer\" style=\"${styleMap(this.pointerStyles || {})}\"></span>\n </div>\n `;\n }\n\n protected renderLeftScrollControl(): TemplateResult | typeof nothing {\n if (!this.scrollable) {\n return nothing;\n }\n return html`\n <div class=\"scroll-control left\">\n <ui-icon-button aria-label=\"Scroll tabs left\" title=\"Scroll tabs left\" @click=\"${this.handleScrollLeft}\">\n <ui-icon icon=\"chevronLeft\"></ui-icon>\n </ui-icon-button>\n </div>`;\n }\n\n protected rightScrollControl(): TemplateResult | typeof nothing {\n if (!this.scrollable) {\n return nothing;\n }\n return html`<div class=\"scroll-control right\">\n <ui-icon-button aria-label=\"Scroll tabs right\" title=\"Scroll tabs right\" @click=\"${this.handleScrollRight}\">\n <ui-icon icon=\"chevronRight\"></ui-icon>\n </ui-icon-button>\n </div>`;\n }\n}\n"]}
1
+ {"version":3,"file":"UiTabs.js","sourceRoot":"","sources":["../../../src/ui/tabs/UiTabs.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-cycle */\n/* eslint-disable no-param-reassign */\nimport { html, LitElement, nothing, PropertyValues, TemplateResult } from \"lit\";\nimport { property, query, queryAssignedElements, state } from \"lit/decorators.js\";\nimport { ClassInfo, classMap } from \"lit/directives/class-map.js\";\nimport { StyleInfo, styleMap } from \"lit/directives/style-map.js\";\nimport { Easing } from \"../motion/animation.js\";\nimport UiTab from \"./UiTab.js\";\nimport '../../define/ui/ui-icon-button.js';\nimport '../../define/ui/ui-divider.js';\nimport '../../define/ui/ui-icon.js';\n\nexport type TabsPriority = 'primary' | 'secondary';\n\nexport interface TabSelectionDetail {\n item: UiTab;\n index: number;\n select: string | null;\n}\n\n/**\n * Calculates value in percentages\n * @param w Element width\n * @param w0 Parent width\n * @return The percentage of element's width relative to parent.\n */\nexport function calcPercent(w: number, w0: number): number {\n return (100 * w) / w0;\n}\n\n/**\n * A container for tabs.\n * \n * @fires select - A non bubbling event when selection change through user interaction. The `event.detail` object contains the `item` and `index` properties. It also has the `select` property with the value of the `selectedAttribute` on the tab.\n */\nexport default class UiTabs extends LitElement {\n items: UiTab[] = [];\n\n activeItem: UiTab | null = null;\n\n previousItem: UiTab | null = null;\n\n @queryAssignedElements({ flatten: true }) protected assignedElements!: HTMLElement[] | null;\n\n @query('.pointer') protected pointer!: HTMLElement;\n\n @query('.content') protected content!: HTMLElement;\n\n /**\n * The priority of the tabs.\n * \n * @default primary\n * @attribute\n */\n @property({ type: String, reflect: true }) priority: TabsPriority = 'primary';\n\n /**\n * If true, tabs are scrollable and the tab width is based on the label width.\n * @attribute\n */\n @property({ type: Boolean }) scrollable?: boolean;\n\n /**\n * The value of the selected tab.\n * This is matched with the `aria-controls` of the tab.\n * @attribute\n */\n @property({ type: String }) selected?: string;\n\n /**\n * The attribute on the `ui-tab` that indicates which value for `selected` \n * corresponds to which tab. \n * \n * @default aria-controls\n * @attribute\n */\n @property({ type: String }) selectedAttribute = `aria-controls`;\n\n @state() protected pointerStyles?: StyleInfo;\n\n protected contentScroll?: number;\n\n @state() protected indicated = false;\n\n protected observer: IntersectionObserver;\n\n /**\n * This is set by the intersection observer. Once the tabs are in the view it turns to `true`.\n * This we can properly visualize selection.\n */\n @state() isVisible?: boolean;\n\n constructor() {\n super();\n\n this.observer = new IntersectionObserver(this.intersectionCallback.bind(this), {\n threshold: 1.0,\n rootMargin: '0px',\n });\n }\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('isVisible')) {\n this.handleVisibility();\n }\n super.willUpdate(cp);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'tablist');\n }\n this.observer.observe(this);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.observer.unobserve(this);\n }\n\n protected intersectionCallback(entries: IntersectionObserverEntry[]): void {\n const [entry] = entries;\n this.isVisible = entry.isIntersecting;\n }\n\n protected async updateItems(): Promise<void> {\n const elements = this.assignedElements || [];\n const items = elements.filter(this.isTabItem, this);\n this.items = items;\n if (this.activeItem && !items.includes(this.activeItem)) {\n this.activeItem = null;\n }\n await this.updateComplete;\n this.ensureSelection();\n }\n\n /** \n * @return Whether the given element is a list item element. \n */\n protected isTabItem(element: Element): element is UiTab {\n if (element.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n return element.localName === 'ui-tab';\n }\n\n protected isSelectable(element: UiTab): boolean {\n if (element.disabled) {\n return false;\n }\n if (element.hidden && element.hasAttribute('hidden')) {\n return false;\n }\n return true;\n }\n\n protected ensureSelection(): void {\n const { selected, selectedAttribute, activeItem, items } = this;\n if (!selectedAttribute) {\n return;\n }\n const item = items.find(i => i.getAttribute(selectedAttribute) === selected);\n if (item && item === activeItem) {\n return;\n }\n this.makeSelection(item);\n }\n\n protected makeSelection(tab?: UiTab, focus = false): void {\n const { activeItem } = this;\n if (activeItem === tab) {\n tab.highlight();\n return;\n }\n this.previousItem = activeItem;\n if (activeItem) {\n this.deselectItem(activeItem);\n }\n if (tab) {\n this.selectItem(tab, focus);\n this.positionPointer(tab, activeItem);\n if (this.activeItem) {\n // we set this here so we won't notify selection when initializing.\n this.notifySelect(tab);\n }\n }\n }\n\n notifySelect(item: UiTab): void {\n const index = this.items.indexOf(item);\n if (index === -1) {\n return;\n }\n const attrValue = item.getAttribute(this.selectedAttribute);\n this.dispatchEvent(new CustomEvent<TabSelectionDetail>('select', {\n detail: {\n item,\n index,\n select: attrValue,\n }\n }));\n }\n\n protected selectItem(tab: UiTab, focus = false): void {\n this.activeItem = tab;\n if (this.hasAttribute('tabindex')) {\n this.removeAttribute('tabindex');\n }\n tab.setAttribute('aria-selected', 'true');\n tab.setAttribute('tabindex', '0');\n tab.selected = true;\n tab.priority = this.priority;\n tab.scrollIntoView({ inline: 'nearest', behavior: 'auto', block: 'nearest' });\n if (focus) {\n tab.focus();\n }\n }\n\n protected deselectItem(tab: UiTab): void {\n tab.setAttribute('aria-selected', 'false');\n tab.setAttribute('tabindex', '-1');\n tab.selected = false;\n tab.indicated = false;\n }\n\n protected handleVisibility(): void {\n const { previousItem, activeItem } = this;\n if (!activeItem) {\n return;\n }\n this.positionPointer(activeItem, previousItem);\n }\n\n protected async positionPointer(tab: UiTab, old?: UiTab | null): Promise<void> {\n const { items, pointer, isVisible } = this;\n if (!isVisible) {\n return;\n }\n const index = items.indexOf(tab);\n if (index < 0 || !pointer) {\n this.pointerStyles = undefined;\n return;\n }\n\n if (!old) {\n // no start animation, just show indicator.\n tab.indicated = true;\n return;\n }\n const isPrimary = this.priority === 'primary';\n const final = isPrimary ? this.getPrimaryLeft(tab) : this.getSecondaryLeft(tab);\n if (this.pointerStyles && this.pointerStyles.left === `${final}px`) {\n return;\n }\n\n // first position this indicator in the place of the old one.\n // update the view and then run the animation.\n this.indicated = true;\n const left = isPrimary ? this.getPrimaryLeft(old) : this.getSecondaryLeft(old);\n this.pointerStyles = { left };\n await this.updateComplete;\n const frames = isPrimary ? this.getPrimaryKeyframes(left, final) : this.getSecondaryKeyframes(left, final);\n \n if (this.moveAnimation) {\n this.moveAnimation.cancel();\n }\n const moveAnimation = pointer.animate(frames, {\n duration: 360,\n iterations: 1,\n easing: Easing.DECELERATION,\n }\n );\n const finalStyles: StyleInfo = {\n left: `${final}px`,\n };\n moveAnimation.addEventListener('finish', () => {\n this.pointerStyles = finalStyles;\n this.moveAnimation = undefined;\n tab.indicated = true;\n this.indicated = false;\n });\n moveAnimation.addEventListener('cancel', () => {\n this.pointerStyles = finalStyles;\n });\n this.moveAnimation = moveAnimation;\n }\n\n protected moveAnimation?: Animation;\n\n protected getPrimaryLeft(tab: UiTab): string {\n const contentBox = this.content.getBoundingClientRect();\n const tabRect = tab.getBoundingClientRect();\n const leftFromParent = tabRect.x - contentBox.x;\n const offset = this.scrollable ? 48 : 0; // left button\n const left = leftFromParent + (tabRect.width / 2) - 20 + offset;\n return `${left}px`;\n }\n\n protected getSecondaryLeft(tab: UiTab): string {\n const contentBox = this.content.getBoundingClientRect();\n const tabRect = tab.getBoundingClientRect();\n const offset = this.scrollable ? 48 : 0; // left button\n const leftFromParent = tabRect.x - contentBox.x + offset;\n return `${leftFromParent}px`;\n }\n\n protected getPrimaryKeyframes(start: string, final: string): Keyframe[] {\n return [\n {\n left: start,\n width: `40px`,\n },\n {\n width: `80px`,\n },\n {\n left: final,\n width: `40px`,\n }\n ];\n }\n\n protected getSecondaryKeyframes(start: string, final: string): Keyframe[] {\n return [\n {\n left: start,\n },\n {\n left: final,\n }\n ];\n }\n\n protected contentClickHandler(e: PointerEvent): void {\n this.activateFromEvent(e);\n }\n\n protected contentKeyDownHandler(e: KeyboardEvent): void {\n if (['Enter', 'Space'].includes(e.code)) {\n this.activateFromEvent(e);\n }\n }\n\n protected activateFromEvent(e: Event): void {\n const { items } = this;\n const path = e.composedPath();\n let item: UiTab | undefined;\n while (!item) {\n const next = path.shift() as UiTab;\n if (!next) {\n break;\n }\n if (items.includes(next)) {\n item = next;\n }\n }\n if (!item) {\n return;\n }\n this.makeSelection(item, true);\n }\n\n protected handleScrollLeft(): void {\n const { contentScroll = 0, content } = this;\n if (contentScroll === 0) {\n return;\n }\n let left = contentScroll - 80;\n if (left < 0) {\n left = 0;\n }\n this.contentScroll = left;\n content.scrollTo({\n behavior: 'smooth',\n left,\n });\n }\n\n protected handleScrollRight(): void {\n const { contentScroll = 0, content } = this;\n let left = contentScroll + 80;\n if (left + content.clientWidth > content.scrollWidth) {\n left = content.scrollWidth - content.clientWidth;\n }\n this.contentScroll = left;\n content.scrollTo({\n behavior: 'smooth',\n left,\n });\n }\n\n protected handleScroll(e: Event): void {\n const div = e.target as HTMLElement;\n this.contentScroll = div.scrollLeft;\n }\n\n protected handleKeyDown(e: KeyboardEvent): void {\n if (e.code === 'ArrowRight') {\n e.preventDefault();\n const tab = this.activeItem ? this.getNextItem(this.activeItem) : this.items[0];\n this.makeSelection(tab, true);\n } else if (e.code === 'ArrowLeft') {\n e.preventDefault();\n const tab = this.activeItem ? this.getPreviousItem(this.activeItem) : this.items[0];\n this.makeSelection(tab, true);\n }\n }\n\n getPreviousItem(item: UiTab): UiTab {\n const { items } = this;\n const curIndex = items.indexOf(item);\n if (curIndex < 0) {\n return item;\n }\n let i = curIndex;\n let result: HTMLElement | undefined;\n do {\n i--;\n if (i === curIndex) {\n // looped back from the end, no active element to find.\n return item;\n }\n const tmp = items[i];\n if (!tmp) {\n i = items.length;\n continue;\n }\n if (this.isSelectable(tmp)) {\n result = tmp;\n }\n } while (!result);\n return result as UiTab || item;\n }\n\n getNextItem(item: UiTab): UiTab {\n const { items } = this;\n const curIndex = items.indexOf(item);\n if (curIndex < 0) {\n return item;\n }\n let i = curIndex;\n let next: HTMLElement | undefined;\n do {\n i++;\n if (i === curIndex) {\n // looped back from the start, no active element to find.\n return item;\n }\n const tmp = items[i];\n if (!tmp) {\n i = -1;\n continue;\n }\n if (this.isSelectable(tmp)) {\n next = tmp;\n }\n } while (!next);\n return next as UiTab || item;\n }\n\n override render(): TemplateResult {\n const classes: ClassInfo = {\n surface: true,\n scrollable: !!this.scrollable,\n }\n return html`\n <div class=\"${classMap(classes)}\">\n ${this.renderLeftScrollControl()}\n <div class=\"content\" @scroll=\"${this.handleScroll}\" @keydown=\"${this.handleKeyDown}\">\n ${this.renderSlot()}\n </div>\n ${this.rightScrollControl()}\n ${this.renderIndicator()}\n <div class=\"divider\"></div>\n </div>\n `;\n }\n\n protected renderSlot(): TemplateResult {\n return html`<slot \n @slotchange=\"${this.updateItems}\" \n @click=\"${this.contentClickHandler}\" \n @keydown=\"${this.contentKeyDownHandler}\"></slot>`;\n }\n\n protected renderIndicator(): TemplateResult {\n const classes: ClassInfo = {\n indicator: true,\n indicated: this.indicated,\n primary: this.priority === 'primary',\n secondary: this.priority === 'secondary',\n }\n return html`\n <div class=\"${classMap(classes)}\">\n <span role=\"presentation\" class=\"pointer\" style=\"${styleMap(this.pointerStyles || {})}\"></span>\n </div>\n `;\n }\n\n protected renderLeftScrollControl(): TemplateResult | typeof nothing {\n if (!this.scrollable) {\n return nothing;\n }\n return html`\n <div class=\"scroll-control left\">\n <ui-icon-button aria-label=\"Scroll tabs left\" title=\"Scroll tabs left\" @click=\"${this.handleScrollLeft}\">\n <ui-icon icon=\"chevronLeft\"></ui-icon>\n </ui-icon-button>\n </div>`;\n }\n\n protected rightScrollControl(): TemplateResult | typeof nothing {\n if (!this.scrollable) {\n return nothing;\n }\n return html`<div class=\"scroll-control right\">\n <ui-icon-button aria-label=\"Scroll tabs right\" title=\"Scroll tabs right\" @click=\"${this.handleScrollRight}\">\n <ui-icon icon=\"chevronRight\"></ui-icon>\n </ui-icon-button>\n </div>`;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@api-client/ui",
3
- "version": "0.0.5",
3
+ "version": "0.0.8",
4
4
  "description": "UI for API Client.",
5
5
  "license": "CC-BY-2.0",
6
6
  "main": "dist/index.js",
@@ -181,10 +181,10 @@ export abstract class StoreBindings extends PlatformBindings {
181
181
 
182
182
  // project runs
183
183
  target.addEventListener(EventTypes.Store.ProjectRuns.add, this.handleAddProjectExecution.bind(this) as EventListener);
184
- target.addEventListener(EventTypes.Store.ProjectRuns.delete, this.handleProjectExecutionRead.bind(this) as EventListener);
185
- target.addEventListener(EventTypes.Store.ProjectRuns.deleteBulk, this.handleProjectExecutionList.bind(this) as EventListener);
186
- target.addEventListener(EventTypes.Store.ProjectRuns.list, this.handleProjectExecutionDelete.bind(this) as EventListener);
187
- target.addEventListener(EventTypes.Store.ProjectRuns.read, this.handleProjectExecutionDeleteBulk.bind(this) as EventListener);
184
+ target.addEventListener(EventTypes.Store.ProjectRuns.list, this.handleProjectExecutionList.bind(this) as EventListener);
185
+ target.addEventListener(EventTypes.Store.ProjectRuns.read, this.handleProjectExecutionRead.bind(this) as EventListener);
186
+ target.addEventListener(EventTypes.Store.ProjectRuns.delete, this.handleProjectExecutionDelete.bind(this) as EventListener);
187
+ target.addEventListener(EventTypes.Store.ProjectRuns.deleteBulk, this.handleProjectExecutionDeleteBulk.bind(this) as EventListener);
188
188
  target.addEventListener(EventTypes.Store.ProjectRuns.clearSpace, this.handleProjectExecutionClearSpace.bind(this) as EventListener);
189
189
  target.addEventListener(EventTypes.Store.ProjectRuns.clearProject, this.handleProjectExecutionClearProject.bind(this) as EventListener);
190
190
  target.addEventListener(EventTypes.Store.ProjectRuns.clearParent, this.handleProjectExecutionClearFolder.bind(this) as EventListener);
@@ -0,0 +1,16 @@
1
+ import { customElement } from "lit/decorators.js";
2
+ import Element from "../../elements/dialog/DeleteCookieAction.element.js";
3
+ import elementStyles from '../../elements/dialog/DeleteCookieAction.styles.js';
4
+ import dialogStyles from '../../ui/dialog/UiDialog.styles.js';
5
+ import typography from '../../styles/m3/typography.module.js';
6
+
7
+ @customElement('delete-cookie-action-dialog')
8
+ export class ConfirmDeleteDialogElement extends Element {
9
+ static override styles = [dialogStyles, typography, elementStyles];
10
+ }
11
+
12
+ declare global {
13
+ interface HTMLElementTagNameMap {
14
+ 'delete-cookie-action-dialog': Element;
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ import { customElement } from "lit/decorators.js";
2
+ import Element from "../../elements/dialog/SetCookieAction.element.js";
3
+ import elementStyles from '../../elements/dialog/DeleteCookieAction.styles.js';
4
+ import dialogStyles from '../../ui/dialog/UiDialog.styles.js';
5
+ import typography from '../../styles/m3/typography.module.js';
6
+
7
+ @customElement('set-cookie-action-dialog')
8
+ export class ConfirmDeleteDialogElement extends Element {
9
+ static override styles = [dialogStyles, typography, elementStyles];
10
+ }
11
+
12
+ declare global {
13
+ interface HTMLElementTagNameMap {
14
+ 'set-cookie-action-dialog': Element;
15
+ }
16
+ }
@@ -1,11 +1,11 @@
1
1
  import { customElement } from 'lit/decorators.js';
2
- import Element from '../../elements/http/HttpAssertions.js';
2
+ import Element from '../../elements/http/HttpAssertions.element.js';
3
3
  import styles from '../../elements/http/HttpAssertions.styles.js';
4
- import typographyStyles from '../../styles/m3/typography.module.js';
4
+ import common from '../../elements/http/HttpFlows.common.js';
5
5
 
6
6
  @customElement('http-assertions')
7
7
  export class HttpAssertionsElement extends Element {
8
- static override styles = [styles, typographyStyles];
8
+ static override styles = [styles, ...common];
9
9
  }
10
10
 
11
11
  declare global {
@@ -0,0 +1,15 @@
1
+ import { customElement } from 'lit/decorators.js';
2
+ import Element from '../../elements/http/HttpFlows.element.js';
3
+ import styles from '../../elements/http/HttpFlows.styles.js';
4
+ import common from '../../elements/http/HttpFlows.common.js';
5
+
6
+ @customElement('http-flows')
7
+ export class HttpFlowsElement extends Element {
8
+ static override styles = [styles, ...common];
9
+ }
10
+
11
+ declare global {
12
+ interface HTMLElementTagNameMap {
13
+ 'http-flows': Element;
14
+ }
15
+ }
@@ -1,6 +1,11 @@
1
- import Element from "../../ui/list/DividerElement.js";
1
+ import { customElement } from "lit/decorators.js";
2
+ import Element from "../../ui/list/UiDivider.element.js";
3
+ import styles from "../../ui/list/UiDivider.styles.js";
2
4
 
3
- window.customElements.define('ui-divider', Element);
5
+ @customElement('ui-divider')
6
+ export class UiDividerElement extends Element {
7
+ static override styles = [styles];
8
+ }
4
9
 
5
10
  declare global {
6
11
  interface HTMLElementTagNameMap {
@@ -18,4 +18,11 @@ export default class ApiElement extends LitElement {
18
18
  super();
19
19
  this.eventsTarget = window;
20
20
  }
21
+
22
+ /**
23
+ * A common way for an element to notify a change.
24
+ */
25
+ notifyChange(): void {
26
+ this.dispatchEvent(new Event('change'));
27
+ }
21
28
  }
@@ -146,7 +146,7 @@ export default class ApiAuthorizationEditor extends ApiElement {
146
146
  */
147
147
  protected changeHandler(): void {
148
148
  this.validate();
149
- this.dispatchEvent(new Event('change'));
149
+ this.notifyChange();
150
150
  }
151
151
 
152
152
  /**
@@ -872,10 +872,11 @@ export default class ApiOperationDocument extends ApiDocumentationBase {
872
872
  const { selectedStatus } = this;
873
873
  const response = responses.find((item) => item.statusCode === selectedStatus);
874
874
  if (!response) {
875
- return html`<div class="empty-info">Select a response to render the documentation.</div>`;
875
+ return html`<div class="empty-info" id="status${selectedStatus}">Select a response to render the documentation.</div>`;
876
876
  }
877
877
  return html`
878
878
  <api-response-document
879
+ id="status${selectedStatus}"
879
880
  .domainId="${response.id}"
880
881
  .response="${response}"
881
882
  class="method-response"
@@ -194,7 +194,7 @@ export default class ApiRequest extends ApiElement {
194
194
  * Retargets the change event from the editor.
195
195
  */
196
196
  protected changeHandler(): void {
197
- this.dispatchEvent(new Event('change'));
197
+ this.notifyChange();
198
198
  }
199
199
 
200
200
  protected handleResponse(e: CustomEvent<IRequestLog>): void {
@@ -423,10 +423,6 @@ export default class ApiRequestEditor extends ApiElement {
423
423
  this.addEventListener(UiEventTypes.Http.Request.send, this.internalSendHandler.bind(this));
424
424
  }
425
425
 
426
- notifyChange(): void {
427
- this.dispatchEvent(new Event('change'));
428
- }
429
-
430
426
  override connectedCallback(): void {
431
427
  super.connectedCallback();
432
428
  this.processDebounce();
@@ -47,11 +47,13 @@ export class Authorization extends ApiElement {
47
47
 
48
48
  /**
49
49
  * Whether the UI should render the toggle button to toggle the enabled state of the security scheme
50
+ * @attribute
50
51
  */
51
52
  @property({ type: Boolean }) canToggle?: boolean;
52
53
 
53
54
  /**
54
55
  * Whether the UI should render the delete button
56
+ * @attribute
55
57
  */
56
58
  @property({ type: Boolean }) canDelete?: boolean;
57
59
 
@@ -68,11 +70,7 @@ export class Authorization extends ApiElement {
68
70
  this.requestUpdate();
69
71
  this.notifyChange();
70
72
  }
71
-
72
- notifyChange(): void {
73
- this.dispatchEvent(new Event('change'));
74
- }
75
-
73
+
76
74
  protected handleDelete(): void {
77
75
  this.dispatchEvent(new Event('delete'))
78
76
  }
@@ -0,0 +1,100 @@
1
+ import { TemplateResult, html, PropertyValues } from 'lit';
2
+ import { property } from 'lit/decorators.js';
3
+ import { live } from 'lit/directives/live.js';
4
+ import { ClassInfo, classMap } from 'lit/directives/class-map.js';
5
+ import { IDeleteCookieStep, DeleteCookieStep } from "@api-client/core/build/browser.js";
6
+ import UiDialog from "../../ui/dialog/UiDialog.js";
7
+ import type Input from '../../ui/input/Input.js';
8
+ import '../../define/ui/ui-text-field.js';
9
+
10
+ /**
11
+ * A dialog used by the Flow builder to configure the Delete Cookie action.
12
+ */
13
+ export default class DeleteCookieAction extends UiDialog {
14
+ @property({ type: Object }) step?: IDeleteCookieStep;
15
+
16
+ override dialogValue: IDeleteCookieStep = new DeleteCookieStep().toJSON();
17
+
18
+ constructor() {
19
+ super();
20
+ this.dismissLabel = 'Cancel';
21
+ this.confirmLabel = 'Save';
22
+ }
23
+
24
+ protected override willUpdate(cp: PropertyValues<this>): void {
25
+ if (cp.has('step')) {
26
+ this.setupDialogValue();
27
+ }
28
+ super.willUpdate(cp);
29
+ }
30
+
31
+ protected setupDialogValue(): void {
32
+ const { step } = this;
33
+ if (!step) {
34
+ this.dialogValue = new DeleteCookieStep().toJSON();
35
+ } else {
36
+ this.dialogValue = new DeleteCookieStep(step).toJSON();
37
+ }
38
+ }
39
+
40
+ protected handleUrlChange(e: Event): void {
41
+ const input = e.target as Input;
42
+ this.dialogValue.url = input.value;
43
+ }
44
+
45
+ protected handleNameChange(e: Event): void {
46
+ const input = e.target as Input;
47
+ this.dialogValue.name = input.value;
48
+ }
49
+
50
+ override renderIcon(): TemplateResult {
51
+ const classes: ClassInfo = {
52
+ icon: true,
53
+ 'with-icon': true,
54
+ };
55
+ return html`
56
+ <div class="${classMap(classes)}" part="icon"><ui-icon icon="tune" role="presentation"></ui-icon></div>
57
+ `;
58
+ }
59
+
60
+ override renderTitle(): TemplateResult {
61
+ const classes: ClassInfo = {
62
+ title: true,
63
+ 'with-title': true,
64
+ };
65
+ return html`
66
+ <div class="${classMap(classes)}" part="title"><span>Configure Delete Cookie Action</span></div>
67
+ `;
68
+ }
69
+
70
+ override renderBody(): TemplateResult {
71
+ const { name = '', url = '' } = this.dialogValue;
72
+
73
+ return html`
74
+ <div class="content">
75
+ <div class="param-row">
76
+ <ui-text-field
77
+ name="name"
78
+ label="Cookie name"
79
+ type="text"
80
+ .value="${live(name)}"
81
+ @change="${this.handleNameChange}"
82
+ class="input"
83
+ supportingText="Leave empty to delete all cookies for the URL."
84
+ ></ui-text-field>
85
+ </div>
86
+ <div class="param-row">
87
+ <ui-text-field
88
+ name="url"
89
+ label="Cookie URL"
90
+ type="url"
91
+ .value="${live(url)}"
92
+ @change="${this.handleUrlChange}"
93
+ class="input"
94
+ supportingText="When the URL is not set then the request URL is used."
95
+ ></ui-text-field>
96
+ </div>
97
+ </div>
98
+ `;
99
+ }
100
+ }
@@ -0,0 +1,14 @@
1
+ import { css } from 'lit';
2
+
3
+ // These are shared with the set cookie action dialog.
4
+
5
+ export default css`
6
+ .input {
7
+ max-width: 520px;
8
+ width: 100%;
9
+ }
10
+
11
+ .param-row:not(:last-of-type) {
12
+ margin-bottom: 20px;
13
+ }
14
+ `;
@@ -3,10 +3,10 @@ import { property, state } from 'lit/decorators.js';
3
3
  import { ClassInfo, classMap } from 'lit/directives/class-map.js';
4
4
  import { live } from 'lit/directives/live.js';
5
5
  import UiDialog from '../../ui/dialog/UiDialog.js';
6
+ import type Input from '../../ui/input/Input.js';
6
7
  import '../../define/ui/ui-button.js';
7
8
  import '../../define/ui/ui-icon.js';
8
9
  import '../../define/ui/ui-text-field.js';
9
- import Input from '../../ui/input/Input.js';
10
10
 
11
11
  /**
12
12
  * A dialog that requests the user for the new name.
@@ -20,15 +20,16 @@ import Input from '../../ui/input/Input.js';
20
20
  * The application should handle the event and trigger name change flow.
21
21
  *
22
22
  * ```javascript
23
- * const dialog = document.createElement('rename-file-dialog');
24
- * dialog.opened = true;
23
+ * const dialog = document.createElement('rename-dialog');
24
+ * dialog.name = 'old name';
25
25
  * document.body.appendChild(dialog);
26
+ * dialog.open = true;
26
27
  * dialog.addEventListener('closed', (ev: Event) => {
27
28
  * document.body.removeChild(dialog);
28
- * const event = ev as CustomEvent;
29
- * const { canceled, confirmed, value } = event.detail;
30
- * if (!canceled && confirmed && value) {
31
- * // trigger the flow
29
+ * const event = ev as CustomEvent<UiDialogClosingReason>;
30
+ * const { cancelled, value } = event.detail;
31
+ * if (!cancelled && value) {
32
+ * // trigger the flow, value is the new value
32
33
  * }
33
34
  * });
34
35
  * ```
@@ -0,0 +1,183 @@
1
+ import { TemplateResult, html, PropertyValues } from 'lit';
2
+ import { property } from 'lit/decorators.js';
3
+ import { live } from 'lit/directives/live.js';
4
+ import { ClassInfo, classMap } from 'lit/directives/class-map.js';
5
+ import { ISetCookieStep, SetCookieStep } from "@api-client/core/build/browser.js";
6
+ import type { SameSiteValue } from "@api-client/core/build/src/cookies/CookieParser.js";
7
+ import UiDialog from "../../ui/dialog/UiDialog.js";
8
+ import type Input from '../../ui/input/Input.js';
9
+ import type CheckboxElement from '../../ui/input/CheckboxElement.js';
10
+ import '../../define/ui/ui-text-field.js';
11
+ import '../../define/ui/ui-checkbox.js';
12
+
13
+ /**
14
+ * A dialog used by the Flow builder to configure the Set Cookie action.
15
+ */
16
+ export default class SetCookieAction extends UiDialog {
17
+ @property({ type: Object }) step?: ISetCookieStep;
18
+
19
+ override dialogValue: ISetCookieStep = new SetCookieStep().toJSON();
20
+
21
+ constructor() {
22
+ super();
23
+ this.dismissLabel = 'Cancel';
24
+ this.confirmLabel = 'Save';
25
+ }
26
+
27
+ protected override willUpdate(cp: PropertyValues<this>): void {
28
+ if (cp.has('step')) {
29
+ this.setupDialogValue();
30
+ }
31
+ super.willUpdate(cp);
32
+ }
33
+
34
+ protected setupDialogValue(): void {
35
+ const { step } = this;
36
+ if (!step) {
37
+ this.dialogValue = new SetCookieStep().toJSON();
38
+ } else {
39
+ this.dialogValue = new SetCookieStep(step).toJSON();
40
+ }
41
+ }
42
+
43
+ protected handleValueChange(e: Event): void {
44
+ const input = e.target as Input;
45
+ const name = input.name as 'name' | 'url' | 'expires';
46
+ this.dialogValue[name] = input.value;
47
+ }
48
+
49
+ protected handleBooleanChange(e: Event): void {
50
+ const input = e.target as CheckboxElement;
51
+ const name = input.name as 'hostOnly' | 'httpOnly' | 'secure' | 'session';
52
+ this.dialogValue[name] = input.checked as boolean;
53
+ }
54
+
55
+ protected handleSameSiteChange(e: Event): void {
56
+ const input = e.target as Input;
57
+ this.dialogValue.sameSite = input.value as SameSiteValue;
58
+ }
59
+
60
+ override renderIcon(): TemplateResult {
61
+ const classes: ClassInfo = {
62
+ icon: true,
63
+ 'with-icon': true,
64
+ };
65
+ return html`
66
+ <div class="${classMap(classes)}" part="icon"><ui-icon icon="tune" role="presentation"></ui-icon></div>
67
+ `;
68
+ }
69
+
70
+ override renderTitle(): TemplateResult {
71
+ const classes: ClassInfo = {
72
+ title: true,
73
+ 'with-title': true,
74
+ };
75
+ return html`
76
+ <div class="${classMap(classes)}" part="title"><span>Configure Set Cookie Action</span></div>
77
+ `;
78
+ }
79
+
80
+ override renderBody(): TemplateResult {
81
+ const { name = '', url = '', expires = '', hostOnly = false, httpOnly = false, sameSite = 'None', secure = false, session = false } = this.dialogValue;
82
+
83
+ return html`
84
+ <div class="content">
85
+ <div class="param-row">
86
+ <ui-text-field
87
+ name="name"
88
+ label="Cookie name"
89
+ type="text"
90
+ required
91
+ .value="${live(name)}"
92
+ @change="${this.handleValueChange}"
93
+ class="input"
94
+ supportingText="The name of the cookie to set."
95
+ ></ui-text-field>
96
+ </div>
97
+
98
+ <div class="param-row">
99
+ <ui-text-field
100
+ name="url"
101
+ label="Cookie URL"
102
+ type="url"
103
+ .value="${live(url)}"
104
+ @change="${this.handleValueChange}"
105
+ class="input"
106
+ supportingText="When the URL is not set then the request URL is used."
107
+ ></ui-text-field>
108
+ </div>
109
+
110
+ <div class="param-row">
111
+ <ui-text-field
112
+ name="expires"
113
+ label="Expires"
114
+ .value="${live(expires)}"
115
+ @change="${this.handleValueChange}"
116
+ class="input"
117
+ supportingText="A valid cookie date or relative time like 4d, 600s, etc."
118
+ ></ui-text-field>
119
+ </div>
120
+
121
+ <div class="param-row">
122
+ <ui-text-field
123
+ name="sameSite"
124
+ label="Same site"
125
+ .value="${live(sameSite)}"
126
+ @change="${this.handleSameSiteChange}"
127
+ class="input"
128
+ .list="${['Lax', 'Strict', 'None']}"
129
+ ></ui-text-field>
130
+ </div>
131
+
132
+ <div class="checkbox-row">
133
+ <label>
134
+ <ui-checkbox
135
+ name="hostOnly"
136
+ .checked="${hostOnly}"
137
+ @change="${this.handleBooleanChange}"
138
+ aria-label="Host only cookie"
139
+ ></ui-checkbox>
140
+ Host only
141
+ </label>
142
+ </div>
143
+
144
+ <div class="checkbox-row">
145
+ <label>
146
+ <ui-checkbox
147
+ name="httpOnly"
148
+ .checked="${httpOnly}"
149
+ @change="${this.handleBooleanChange}"
150
+ aria-label="HTTP only cookie"
151
+ ></ui-checkbox>
152
+ HTTP only
153
+ </label>
154
+ </div>
155
+
156
+ <div class="checkbox-row">
157
+ <label>
158
+ <ui-checkbox
159
+ name="secure"
160
+ .checked="${secure}"
161
+ @change="${this.handleBooleanChange}"
162
+ aria-label="Secure cookie"
163
+ ></ui-checkbox>
164
+ Secure
165
+ </label>
166
+ </div>
167
+
168
+ <div class="checkbox-row">
169
+ <label>
170
+ <ui-checkbox
171
+ name="session"
172
+ .checked="${session}"
173
+ @change="${this.handleBooleanChange}"
174
+ aria-label="Session cookie"
175
+ ></ui-checkbox>
176
+ Session
177
+ </label>
178
+ </div>
179
+
180
+ </div>
181
+ `;
182
+ }
183
+ }