@api-client/ui 0.2.3 → 0.2.4

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 (203) hide show
  1. package/.vscode/settings.json +3 -3
  2. package/build/src/elements/authorization/ui/ApiKeyAuthorization.d.ts +1 -1
  3. package/build/src/elements/authorization/ui/ApiKeyAuthorization.d.ts.map +1 -1
  4. package/build/src/elements/authorization/ui/ApiKeyAuthorization.js +7 -7
  5. package/build/src/elements/authorization/ui/ApiKeyAuthorization.js.map +1 -1
  6. package/build/src/elements/authorization/ui/Authorization.styles.js +4 -4
  7. package/build/src/elements/authorization/ui/Authorization.styles.js.map +1 -1
  8. package/build/src/elements/authorization/ui/BasicAuthorization.d.ts +1 -1
  9. package/build/src/elements/authorization/ui/BasicAuthorization.d.ts.map +1 -1
  10. package/build/src/elements/authorization/ui/BasicAuthorization.js +5 -5
  11. package/build/src/elements/authorization/ui/BasicAuthorization.js.map +1 -1
  12. package/build/src/elements/authorization/ui/BearerAuthorization.d.ts +1 -1
  13. package/build/src/elements/authorization/ui/BearerAuthorization.d.ts.map +1 -1
  14. package/build/src/elements/authorization/ui/BearerAuthorization.js +3 -3
  15. package/build/src/elements/authorization/ui/BearerAuthorization.js.map +1 -1
  16. package/build/src/elements/authorization/ui/NtlmAuthorization.d.ts +1 -1
  17. package/build/src/elements/authorization/ui/NtlmAuthorization.d.ts.map +1 -1
  18. package/build/src/elements/authorization/ui/NtlmAuthorization.js +7 -7
  19. package/build/src/elements/authorization/ui/NtlmAuthorization.js.map +1 -1
  20. package/build/src/elements/authorization/ui/OAuth2Authorization.d.ts +1 -1
  21. package/build/src/elements/authorization/ui/OAuth2Authorization.d.ts.map +1 -1
  22. package/build/src/elements/authorization/ui/OAuth2Authorization.js +32 -27
  23. package/build/src/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
  24. package/build/src/elements/authorization/ui/OidcAuthorization.js +4 -4
  25. package/build/src/elements/authorization/ui/OidcAuthorization.js.map +1 -1
  26. package/build/src/elements/autocomplete/autocomplete-input.d.ts +10 -0
  27. package/build/src/elements/autocomplete/autocomplete-input.d.ts.map +1 -0
  28. package/build/src/{md/text-field/ui-text-field.js → elements/autocomplete/autocomplete-input.js} +9 -9
  29. package/build/src/elements/autocomplete/autocomplete-input.js.map +1 -0
  30. package/build/src/elements/autocomplete/internals/autocomplete.d.ts +209 -0
  31. package/build/src/elements/autocomplete/internals/autocomplete.d.ts.map +1 -0
  32. package/build/src/elements/autocomplete/internals/autocomplete.js +493 -0
  33. package/build/src/elements/autocomplete/internals/autocomplete.js.map +1 -0
  34. package/build/src/elements/autocomplete/internals/autocomplete.styles.d.ts +3 -0
  35. package/build/src/elements/autocomplete/internals/autocomplete.styles.d.ts.map +1 -0
  36. package/build/src/elements/autocomplete/internals/autocomplete.styles.js +25 -0
  37. package/build/src/elements/autocomplete/internals/autocomplete.styles.js.map +1 -0
  38. package/build/src/elements/dialog/internals/DeleteCookieAction.element.d.ts +1 -1
  39. package/build/src/elements/dialog/internals/DeleteCookieAction.element.d.ts.map +1 -1
  40. package/build/src/elements/dialog/internals/DeleteCookieAction.element.js +5 -5
  41. package/build/src/elements/dialog/internals/DeleteCookieAction.element.js.map +1 -1
  42. package/build/src/elements/dialog/internals/Rename.d.ts +1 -1
  43. package/build/src/elements/dialog/internals/Rename.d.ts.map +1 -1
  44. package/build/src/elements/dialog/internals/Rename.js +3 -3
  45. package/build/src/elements/dialog/internals/Rename.js.map +1 -1
  46. package/build/src/elements/dialog/internals/SetCookieAction.element.d.ts +1 -1
  47. package/build/src/elements/dialog/internals/SetCookieAction.element.d.ts.map +1 -1
  48. package/build/src/elements/dialog/internals/SetCookieAction.element.js +9 -9
  49. package/build/src/elements/dialog/internals/SetCookieAction.element.js.map +1 -1
  50. package/build/src/elements/environment/EnvironmentEditor.d.ts +1 -1
  51. package/build/src/elements/environment/EnvironmentEditor.d.ts.map +1 -1
  52. package/build/src/elements/environment/EnvironmentEditor.js +3 -3
  53. package/build/src/elements/environment/EnvironmentEditor.js.map +1 -1
  54. package/build/src/elements/environment/EnvironmentEditor.styles.js +1 -1
  55. package/build/src/elements/environment/EnvironmentEditor.styles.js.map +1 -1
  56. package/build/src/elements/environment/ServerEditor.d.ts +1 -1
  57. package/build/src/elements/environment/ServerEditor.d.ts.map +1 -1
  58. package/build/src/elements/environment/ServerEditor.js +7 -7
  59. package/build/src/elements/environment/ServerEditor.js.map +1 -1
  60. package/build/src/elements/environment/ServerEditor.styles.js +1 -1
  61. package/build/src/elements/environment/ServerEditor.styles.js.map +1 -1
  62. package/build/src/elements/http/BodyMultipartEditor.d.ts.map +1 -1
  63. package/build/src/elements/http/BodyMultipartEditor.js +4 -0
  64. package/build/src/elements/http/BodyMultipartEditor.js.map +1 -1
  65. package/build/src/elements/http/CertificateAdd.element.d.ts +1 -1
  66. package/build/src/elements/http/CertificateAdd.element.d.ts.map +1 -1
  67. package/build/src/elements/http/CertificateAdd.element.js +8 -8
  68. package/build/src/elements/http/CertificateAdd.element.js.map +1 -1
  69. package/build/src/elements/http/CertificateAdd.styles.js +1 -1
  70. package/build/src/elements/http/CertificateAdd.styles.js.map +1 -1
  71. package/build/src/elements/http/HttpAssertions.element.js +3 -3
  72. package/build/src/elements/http/HttpAssertions.element.js.map +1 -1
  73. package/build/src/elements/http/HttpFlows.element.js +3 -3
  74. package/build/src/elements/http/HttpFlows.element.js.map +1 -1
  75. package/build/src/elements/http/HttpFlowsUi.d.ts +1 -1
  76. package/build/src/elements/http/HttpFlowsUi.d.ts.map +1 -1
  77. package/build/src/elements/http/HttpFlowsUi.js +31 -31
  78. package/build/src/elements/http/HttpFlowsUi.js.map +1 -1
  79. package/build/src/elements/http/RequestConfigElement.d.ts +1 -1
  80. package/build/src/elements/http/RequestConfigElement.d.ts.map +1 -1
  81. package/build/src/elements/http/RequestConfigElement.js +7 -7
  82. package/build/src/elements/http/RequestConfigElement.js.map +1 -1
  83. package/build/src/elements/http/UrlParamsForm.d.ts +1 -1
  84. package/build/src/elements/http/UrlParamsForm.d.ts.map +1 -1
  85. package/build/src/elements/http/UrlParamsForm.js +1 -1
  86. package/build/src/elements/http/UrlParamsForm.js.map +1 -1
  87. package/build/src/elements/project/ProjectRunner.d.ts +1 -1
  88. package/build/src/elements/project/ProjectRunner.d.ts.map +1 -1
  89. package/build/src/elements/project/ProjectRunner.js +5 -5
  90. package/build/src/elements/project/ProjectRunner.js.map +1 -1
  91. package/build/src/md/input/Input.d.ts +0 -15
  92. package/build/src/md/input/Input.d.ts.map +1 -1
  93. package/build/src/md/input/Input.js +7 -42
  94. package/build/src/md/input/Input.js.map +1 -1
  95. package/build/src/md/list/internals/List.d.ts +7 -2
  96. package/build/src/md/list/internals/List.d.ts.map +1 -1
  97. package/build/src/md/list/internals/List.js +6 -0
  98. package/build/src/md/list/internals/List.js.map +1 -1
  99. package/build/src/md/list/internals/ListItem.styles.d.ts.map +1 -1
  100. package/build/src/md/list/internals/ListItem.styles.js +8 -0
  101. package/build/src/md/list/internals/ListItem.styles.js.map +1 -1
  102. package/build/src/md/listbox/internals/Listbox.d.ts +2 -2
  103. package/build/src/md/listbox/internals/Listbox.d.ts.map +1 -1
  104. package/build/src/md/listbox/internals/Listbox.js.map +1 -1
  105. package/build/src/md/text-area/internals/TextAreaElement.d.ts.map +1 -1
  106. package/build/src/md/text-area/internals/TextAreaElement.js +0 -5
  107. package/build/src/md/text-area/internals/TextAreaElement.js.map +1 -1
  108. package/build/src/md/text-area/ui-text-area.d.ts.map +1 -1
  109. package/build/src/md/text-area/ui-text-area.js +3 -2
  110. package/build/src/md/text-area/ui-text-area.js.map +1 -1
  111. package/build/src/md/text-field/internals/{TextFieldElement.d.ts → TextField.d.ts} +2 -2
  112. package/build/src/md/text-field/internals/TextField.d.ts.map +1 -0
  113. package/build/src/md/text-field/internals/{TextFieldElement.js → TextField.js} +2 -5
  114. package/build/src/md/text-field/internals/TextField.js.map +1 -0
  115. package/build/src/md/text-field/internals/{TextField.styles.d.ts → common.styles.d.ts} +1 -1
  116. package/build/src/md/text-field/internals/common.styles.d.ts.map +1 -0
  117. package/build/src/md/text-field/internals/{TextField.styles.js → common.styles.js} +8 -94
  118. package/build/src/md/text-field/internals/common.styles.js.map +1 -0
  119. package/build/src/md/text-field/internals/filled.styles.d.ts +3 -0
  120. package/build/src/md/text-field/internals/filled.styles.d.ts.map +1 -0
  121. package/build/src/md/text-field/internals/filled.styles.js +107 -0
  122. package/build/src/md/text-field/internals/filled.styles.js.map +1 -0
  123. package/build/src/md/text-field/internals/outlined.styles.d.ts +3 -0
  124. package/build/src/md/text-field/internals/outlined.styles.d.ts.map +1 -0
  125. package/build/src/md/text-field/internals/outlined.styles.js +43 -0
  126. package/build/src/md/text-field/internals/outlined.styles.js.map +1 -0
  127. package/build/src/md/text-field/ui-filled-text-field.d.ts +11 -0
  128. package/build/src/md/text-field/ui-filled-text-field.d.ts.map +1 -0
  129. package/build/src/md/text-field/ui-filled-text-field.js +28 -0
  130. package/build/src/md/text-field/ui-filled-text-field.js.map +1 -0
  131. package/build/src/md/text-field/ui-outlined-text-field.d.ts +11 -0
  132. package/build/src/md/text-field/ui-outlined-text-field.d.ts.map +1 -0
  133. package/build/src/md/text-field/ui-outlined-text-field.js +28 -0
  134. package/build/src/md/text-field/ui-outlined-text-field.js.map +1 -0
  135. package/build/src/types/input.d.ts +1 -1
  136. package/build/src/types/input.d.ts.map +1 -1
  137. package/build/src/types/input.js.map +1 -1
  138. package/demo/elements/authorization/oauth-authorize.html +4 -4
  139. package/demo/elements/authorization/oauth-authorize.ts +1 -1
  140. package/demo/elements/autocomplete/index.html +24 -0
  141. package/demo/elements/autocomplete/index.ts +123 -0
  142. package/demo/elements/http/body-editor.ts +3 -3
  143. package/demo/elements/index.html +15 -11
  144. package/demo/md/index.html +1 -1
  145. package/demo/md/inputs/input.html +10 -15
  146. package/demo/md/inputs/input.ts +389 -101
  147. package/demo/page.css +4 -0
  148. package/package.json +1 -1
  149. package/src/elements/authorization/ui/ApiKeyAuthorization.ts +7 -7
  150. package/src/elements/authorization/ui/Authorization.styles.ts +4 -4
  151. package/src/elements/authorization/ui/BasicAuthorization.ts +5 -5
  152. package/src/elements/authorization/ui/BearerAuthorization.ts +3 -3
  153. package/src/elements/authorization/ui/NtlmAuthorization.ts +7 -7
  154. package/src/elements/authorization/ui/OAuth2Authorization.ts +32 -27
  155. package/src/elements/authorization/ui/OidcAuthorization.ts +4 -4
  156. package/src/elements/autocomplete/autocomplete-input.ts +14 -0
  157. package/src/elements/autocomplete/internals/autocomplete.styles.ts +25 -0
  158. package/src/elements/autocomplete/internals/autocomplete.ts +490 -0
  159. package/src/elements/dialog/internals/DeleteCookieAction.element.ts +5 -5
  160. package/src/elements/dialog/internals/Rename.ts +3 -3
  161. package/src/elements/dialog/internals/SetCookieAction.element.ts +9 -9
  162. package/src/elements/environment/EnvironmentEditor.styles.ts +1 -1
  163. package/src/elements/environment/EnvironmentEditor.ts +3 -3
  164. package/src/elements/environment/ServerEditor.styles.ts +1 -1
  165. package/src/elements/environment/ServerEditor.ts +7 -7
  166. package/src/elements/http/BodyMultipartEditor.ts +4 -0
  167. package/src/elements/http/CertificateAdd.element.ts +8 -8
  168. package/src/elements/http/CertificateAdd.styles.ts +1 -1
  169. package/src/elements/http/HttpAssertions.element.ts +3 -3
  170. package/src/elements/http/HttpFlows.element.ts +3 -3
  171. package/src/elements/http/HttpFlowsUi.ts +31 -31
  172. package/src/elements/http/RequestConfigElement.ts +7 -7
  173. package/src/elements/http/UrlParamsForm.ts +1 -1
  174. package/src/elements/project/ProjectRunner.ts +5 -5
  175. package/src/md/input/Input.ts +6 -21
  176. package/src/md/list/internals/List.ts +14 -2
  177. package/src/md/list/internals/ListItem.styles.ts +8 -0
  178. package/src/md/listbox/internals/Listbox.ts +2 -2
  179. package/src/md/text-area/internals/TextAreaElement.ts +0 -5
  180. package/src/md/text-area/ui-text-area.ts +3 -2
  181. package/src/md/text-field/internals/{TextFieldElement.ts → TextField.ts} +1 -4
  182. package/src/md/text-field/internals/{TextField.styles.ts → common.styles.ts} +7 -93
  183. package/src/md/text-field/internals/filled.styles.ts +107 -0
  184. package/src/md/text-field/internals/outlined.styles.ts +43 -0
  185. package/src/md/text-field/ui-filled-text-field.ts +16 -0
  186. package/src/md/text-field/ui-outlined-text-field.ts +16 -0
  187. package/src/types/input.ts +0 -1
  188. package/test/elements/authorization/basic-method.test.ts +3 -3
  189. package/test/elements/authorization/bearer-method.test.ts +2 -2
  190. package/test/elements/authorization/ntlm-method.test.ts +4 -4
  191. package/test/elements/autocomplete/autocomplete-input.spec.ts +448 -0
  192. package/test/elements/http/BodyMultipartEditorElement.test.ts +15 -16
  193. package/test/elements/http/CertificateAdd.test.ts +11 -11
  194. package/test/elements/http/HttpAssertions.test.ts +9 -9
  195. package/test/elements/http/HttpFlows.test.ts +4 -4
  196. package/build/src/md/text-field/internals/TextField.styles.d.ts.map +0 -1
  197. package/build/src/md/text-field/internals/TextField.styles.js.map +0 -1
  198. package/build/src/md/text-field/internals/TextFieldElement.d.ts.map +0 -1
  199. package/build/src/md/text-field/internals/TextFieldElement.js.map +0 -1
  200. package/build/src/md/text-field/ui-text-field.d.ts +0 -11
  201. package/build/src/md/text-field/ui-text-field.d.ts.map +0 -1
  202. package/build/src/md/text-field/ui-text-field.js.map +0 -1
  203. package/src/md/text-field/ui-text-field.ts +0 -15
@@ -1 +1 @@
1
- {"version":3,"file":"OidcAuthorization.js","sourceRoot":"","sources":["../../../../../src/elements/authorization/ui/OidcAuthorization.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, PropertyValues, TemplateResult } from 'lit'\nimport '@github/relative-time-element'\nimport { state } from 'lit/decorators.js'\nimport { live } from 'lit/directives/live.js'\nimport { generateState } from '@api-client/core/authorization/lib/Utils.js'\nimport * as KnownGrants from '@api-client/core/authorization/lib/KnownGrants.js'\nimport type {\n IOauth2GrantType,\n IOauth2ResponseType,\n IOidcAuthorization,\n IOidcTokenError,\n IOidcTokenInfo,\n} from '@api-client/core/models/Authorization.js'\nimport { Events as CoreEvents } from '@api-client/core/events/Events.js'\nimport type { IOpenIdProviderMetadata } from '@api-client/core/authorization/types.js'\nimport OAuth2Authorization from './OAuth2Authorization.js'\nimport Input from '../../../md/input/Input.js'\nimport '../../../md/icons/ui-icon.js'\nimport '../../../md/button/ui-filled-tonal-button.js'\nimport '../../../md/button/ui-filled-button.js'\n\nexport const GrantLabels: Record<string, string> = {\n [KnownGrants.implicit]: 'Access token',\n [KnownGrants.code]: 'Authorization code',\n refresh_token: 'Refresh token',\n [KnownGrants.password]: 'Password',\n [KnownGrants.clientCredentials]: 'Client credentials',\n [KnownGrants.deviceCode]: 'Device code',\n [KnownGrants.jwtBearer]: 'JWT Bearer',\n}\n\nexport const ResponseTypeLabels: Record<string, string> = {\n token: 'Token',\n code: 'Code',\n id_token: 'ID token',\n id: 'ID token',\n}\n\nexport const discoveryCache = new Map<string, IOpenIdProviderMetadata>()\n\n/**\n * @returns The default grant types for OIDC\n */\nexport const defaultGrantTypes: IOauth2GrantType[] = [\n {\n type: 'implicit',\n label: 'Access token (browser flow)',\n },\n {\n type: 'authorization_code',\n label: 'Authorization code (server flow)',\n },\n]\n\nexport default class OidcAuthorization extends OAuth2Authorization {\n @state() accessor discovered = false\n\n /**\n * The index of the response from the `supportedResponses`.\n * By default it selects the first one.\n */\n @state() accessor selectedResponse: number | undefined\n\n /**\n * @returns True when the current `grantType` can support redirect URI.\n */\n override get hasRedirectUri(): boolean {\n const { discovered } = this\n const { grantType } = this.config\n if (!discovered || !grantType) {\n return false\n }\n return [KnownGrants.implicit, KnownGrants.code].includes(grantType)\n }\n\n override get config(): IOidcAuthorization {\n const { authorization } = this\n if (!authorization) {\n return {}\n }\n if (!authorization.config) {\n authorization.config = {} as IOidcAuthorization\n }\n return authorization.config as IOidcAuthorization\n }\n\n protected override update(cp: PropertyValues<void>): void {\n if (cp.has('authorization') && this.authorization) {\n this.detectDiscovered()\n this.detectSelectedResponseType()\n }\n super.update(cp)\n }\n\n /**\n * Serialized input values\n * @returns An object with user input\n */\n override serialize(): IOidcAuthorization {\n const result = super.serialize() as IOidcAuthorization\n const { config } = this\n delete result.accessToken\n result.issuerUri = config.issuerUri\n result.tokens = config.tokens\n result.tokenInUse = config.tokenInUse\n result.supportedResponses = config.supportedResponses\n result.grantTypes = config.grantTypes\n result.serverScopes = config.serverScopes\n\n const { selectedResponse = 0 } = this\n const { supportedResponses = [], tokens, tokenInUse = 0 } = config\n const response = supportedResponses[selectedResponse]\n if (response) {\n result.responseType = response.map((i) => i.type).join(' ')\n }\n if (Array.isArray(tokens)) {\n result.accessToken = this.readTokenValue(tokens[tokenInUse] as IOidcTokenInfo)\n }\n if (result.responseType && !this.noPkce && result.responseType.includes('code')) {\n result.pkce = config.pkce\n }\n return result\n }\n\n override async authorize(): Promise<null> {\n this.lastErrorMessage = undefined\n const validationResult = this.checkValidity()\n if (!validationResult) {\n return null\n }\n this.authorizing = true\n const detail = this.serialize()\n const stateParam = generateState()\n detail.state = stateParam\n\n try {\n const tokens = await CoreEvents.Authorization.Oidc.authorize(detail, this)\n this.authorizing = false\n if (!Array.isArray(tokens) || !tokens.length) {\n return null\n }\n const { config } = this\n config.tokens = tokens\n config.accessToken = undefined\n config.tokenInUse = 0\n this.notifyChange()\n this.requestUpdate()\n } catch (e) {\n const { message = 'Unknown error' } = e as Error\n this.lastErrorMessage = message\n this.authorizing = false\n throw e\n }\n return null\n }\n\n readTokenLabel(token: IOidcTokenInfo | IOidcTokenError): string {\n const { responseType } = token\n switch (responseType) {\n case 'token':\n return 'Access token'\n case 'code':\n return 'Access token from code exchange'\n case 'id_token':\n case 'id':\n return 'ID token'\n default:\n return 'Unknown token'\n }\n }\n\n readTokenValue(token: IOidcTokenInfo): string {\n if (!token) {\n return ''\n }\n const { responseType } = token\n switch (responseType) {\n case 'token':\n return token.accessToken || ''\n case 'code':\n return token.accessToken || ''\n case 'id_token':\n case 'id':\n return token.idToken || ''\n default:\n return token.accessToken || token.refreshToken || token.idToken || ''\n }\n }\n\n updateIssuerUri(value?: string): void {\n const { config } = this\n if (config.issuerUri === value) {\n return\n }\n config.issuerUri = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n /**\n * Downloads the OIDC info and pre-populates the form inputs.\n */\n async discover(): Promise<void> {\n const { issuerUri } = this.config\n if (!issuerUri) {\n const message = 'Set the issuer URI first.'\n this.lastErrorMessage = message\n this.discovered = false\n throw new Error(message)\n }\n this.lastErrorMessage = undefined\n let info: IOpenIdProviderMetadata | undefined\n const oidcUrl = this.buildIssuerUrl(issuerUri)\n if (discoveryCache.has(oidcUrl)) {\n info = discoveryCache.get(oidcUrl)\n } else {\n try {\n info = await this.transportDiscovery(oidcUrl)\n if (info) {\n discoveryCache.set(oidcUrl, info)\n }\n } catch {\n this.lastErrorMessage = `Unable to read the discovery information.`\n }\n }\n if (info) {\n this.propagateOidc(info)\n this.discovered = true\n this.notifyChange()\n } else {\n this.discovered = false\n }\n }\n\n /**\n * Constructs the OIDC discovery URL.\n * @param baseUri The issues URI.\n */\n protected buildIssuerUrl(baseUri: string): string {\n let url = baseUri\n if (!url.includes('.well-known')) {\n if (!url.endsWith('/')) {\n url += '/'\n }\n url += '.well-known/openid-configuration'\n }\n return url\n }\n\n /**\n * Requests the data from the discovery endpoint.\n */\n protected async transportDiscovery(url: string): Promise<IOpenIdProviderMetadata | undefined> {\n const rsp = await fetch(url)\n return rsp.json()\n }\n\n propagateOidc(meta: IOpenIdProviderMetadata): void {\n const { config } = this\n\n config.authorizationUri = meta.authorization_endpoint\n config.supportedResponses = this.translateResponseCodes(meta.response_types_supported)\n if (meta.token_endpoint) {\n config.accessTokenUri = meta.token_endpoint\n }\n if (Array.isArray(meta.grant_types_supported) && meta.grant_types_supported.length) {\n config.serverScopes = meta.grant_types_supported\n this.grantTypes = this.translateGrantTypesMeta(meta.grant_types_supported)\n } else {\n this.grantTypes = [...defaultGrantTypes]\n config.serverScopes = undefined\n }\n if (Array.isArray(meta.scopes_supported)) {\n config.scopes = meta.scopes_supported\n } else {\n config.scopes = ['openid']\n }\n }\n\n protected translateGrantTypesMeta(types: string[]): IOauth2GrantType[] {\n const result: IOauth2GrantType[] = []\n types.forEach((type) => {\n const item = {\n type,\n label: type,\n }\n if (GrantLabels[type]) {\n item.label = GrantLabels[type]\n }\n result.push(item)\n })\n return result\n }\n\n /**\n * This generates a 2-dimensional array with the response codes\n * supported by the authorization server. Next to the grant type\n * it describes how token is received by the\n */\n protected translateResponseCodes(codes: string[]): IOauth2ResponseType[][] {\n const result: IOauth2ResponseType[][] = []\n codes.forEach((value) => {\n const items = value.split(' ')\n const response: IOauth2ResponseType[] = []\n result.push(response)\n items.forEach((responseValue) => {\n const type = {\n type: responseValue,\n label: responseValue,\n }\n if (ResponseTypeLabels[responseValue]) {\n type.label = ResponseTypeLabels[responseValue]\n }\n response.push(type)\n })\n })\n return result\n }\n\n /**\n * Sets the `discovered` flag depending on the current configuration.\n */\n protected detectDiscovered(): void {\n const { grantTypes, config } = this\n const { issuerUri, authorizationUri, scopes } = config\n if (!issuerUri || !authorizationUri) {\n this.discovered = false\n return\n }\n if (!Array.isArray(grantTypes) || !grantTypes.length) {\n this.discovered = false\n return\n }\n if (!Array.isArray(scopes) || !scopes.length) {\n this.discovered = false\n return\n }\n this.discovered = true\n }\n\n /**\n * A function called from the auth element `updated` lifecycle method.\n * It tries to figure out the `selectedResponse` from the current list of\n * `supportedResponses` and the `responseType`.\n */\n protected detectSelectedResponseType(): void {\n const { selectedResponse, config } = this\n const { supportedResponses, responseType } = config\n if (!responseType || !Array.isArray(supportedResponses)) {\n return\n }\n const parts = responseType.split(' ')\n const index = supportedResponses.findIndex((i) => {\n const rspTypes = i.map((e) => e.type)\n const hasNotFound = parts.some((p) => !rspTypes.includes(p))\n return !hasNotFound\n })\n if (index >= 0 && selectedResponse !== index) {\n this.selectedResponse = index\n }\n }\n\n selectResponseType(index: number): void {\n if (this.selectedResponse === index) {\n return\n }\n this.selectedResponse = index\n // this.notifyChange(); ???\n }\n\n protected handleIssuerUri(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateIssuerUri(value)\n }\n\n protected handleIssuerRead(): void {\n this.discover()\n }\n\n protected handleResponseTypeSelect(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined\n if (!target) {\n return\n }\n const index = Number(target.dataset.index)\n if (Number.isNaN(index)) {\n return\n }\n this.selectResponseType(index)\n }\n\n protected handleTokenInUse(e: Event): void {\n const input = e.target as HTMLInputElement\n const { value } = input\n if (!input.checked) {\n return\n }\n this.config.tokenInUse = Number(value)\n this.notifyChange()\n }\n\n protected override renderEditor(): TemplateResult | typeof nothing {\n const { authorization, discovered } = this\n if (!authorization) {\n return nothing\n }\n return html`\n <form autocomplete=\"on\" class=\"auth-form oauth2-auth\">\n ${this.renderIssuerInput()} ${discovered ? this.renderFormContent() : ''}\n </form>\n ${this.renderAuthAction()} ${this.renderError()} ${this.renderAuthInfo()}\n `\n }\n\n protected renderIssuerInput(): TemplateResult {\n const { config } = this\n const { issuerUri } = config\n return html`\n <div class=\"full-input base-level issuer-field\">\n <ui-text-field\n label=\"Issuer URI\"\n name=\"issuerUri\"\n .value=\"${live(issuerUri || '')}\"\n type=\"url\"\n required\n invalidText=\"Issuer URI is required\"\n supportingText=\"The URI without the .well-known part.\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleIssuerUri}\"\n ></ui-text-field>\n\n <ui-filled-tonal-button\n title=\"Downloads and processes the discovery info\"\n @click=\"${this.handleIssuerRead}\"\n data-type=\"read-discovery\"\n >Read</ui-filled-tonal-button\n >\n </div>\n `\n }\n\n protected override renderFormContent(): (typeof nothing | TemplateResult)[] {\n const parts = super.renderFormContent()\n parts.unshift(this.renderResponses())\n return parts\n }\n\n /**\n * @returns The template for the response types drop down.\n */\n protected renderResponses(): TemplateResult | typeof nothing {\n const { supportedResponses } = this.config\n if (!Array.isArray(supportedResponses) || !supportedResponses.length) {\n return nothing\n }\n const { selectedResponse = 0, readOnly, disabled } = this\n\n const selected = supportedResponses[selectedResponse]\n const label = selected ? selected.map((i) => i.label).join(', ') : ''\n\n return html` <div class=\"full-input\">\n <ui-dropdown-list verticalAlign=\"top\" @select=\"${this.handleResponseTypeSelect}\" closeOnOutsideClick>\n <ui-text-field\n readOnly\n name=\"responseType\"\n .value=\"${label}\"\n label=\"Response type\"\n ?disabled=\"${disabled || readOnly}\"\n >\n <ui-icon slot=\"suffix\" icon=\"arrowDropDown\" role=\"presentation\"></ui-icon>\n </ui-text-field>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${supportedResponses.map((item, index) => this.renderResponseItem(item, index))}\n </ui-list>\n </ui-dropdown-list>\n </div>`\n }\n\n /**\n * @param item The responses list to render as a single item.\n * @returns The template for the response types drop down item.\n */\n protected renderResponseItem(item: IOauth2ResponseType[], index: number): TemplateResult | string {\n const label = item.map((i) => i.label).join(', ')\n return html` <ui-list-item role=\"menuitem\" data-index=\"${index}\">${label}</ui-list-item> `\n }\n\n protected override renderAuthAction(): TemplateResult | typeof nothing {\n const { config } = this\n const { tokens = [] } = config\n return tokens.length ? this.renderOAuth2Token() : this.renderOAth2Authorize()\n }\n\n protected override renderOAuth2Token(): TemplateResult | typeof nothing {\n const { config, authorizing } = this\n const { tokens = [] } = config\n return html` <div class=\"current-tokens\">\n <p class=\"tokens-title\">Tokens</p>\n ${tokens.map((info, index) => this.renderToken(info, index))}\n <div class=\"authorize-actions\">\n <ui-filled-button\n ?disabled=\"${authorizing}\"\n class=\"auth-button\"\n data-type=\"refresh-token\"\n @click=\"${this.authorize}\"\n >Refresh tokens</ui-filled-button\n >\n </div>\n </div>`\n }\n\n protected renderToken(token: IOidcTokenInfo | IOidcTokenError, index: number): TemplateResult {\n const typedError = token as IOidcTokenError\n if (typedError.error) {\n return this.renderErrorToken(typedError)\n }\n return this.renderInfoToken(token as IOidcTokenInfo, index)\n }\n\n protected renderErrorToken(token: IOidcTokenError): TemplateResult {\n const { error, errorDescription } = token\n const label = this.readTokenLabel(token)\n return html` <div class=\"current-token\">\n <label class=\"token-label label-large\">${label}</label>\n <p class=\"token-value body-small\">\n <span>${error}: ${errorDescription}</span>\n </p>\n </div>`\n }\n\n protected renderInfoToken(token: IOidcTokenInfo, index: number): TemplateResult {\n const { config } = this\n const { responseType } = token\n const label = this.readTokenLabel(token)\n const value = this.readTokenValue(token)\n return html`\n <div class=\"token-option\">\n <input\n type=\"radio\"\n id=\"${responseType}\"\n name=\"tokenInUse\"\n .value=\"${String(index)}\"\n ?checked=\"${config.tokenInUse === index}\"\n @change=\"${this.handleTokenInUse}\"\n />\n <div class=\"token-info\">\n <label for=\"${responseType}\" class=\"token-label label-large\"> ${label} </label>\n ${this.renderTokenExpiration(token)}\n <div\n class=\"token-value body-small\"\n title=\"${value}\"\n @click=\"${this.handleClickCopy}\"\n @keydown=\"${this.handlerCopyKeydown}\"\n >\n ${value.trim()}\n </div>\n </div>\n </div>\n `\n }\n\n protected renderTokenExpiration(token: IOidcTokenInfo): TemplateResult | string {\n const { time, expiresIn } = token\n if (!time || !expiresIn) {\n return ''\n }\n const d = new Date(time + expiresIn * 1000)\n const expTime = d.toISOString()\n const expired = Date.now() > d.getTime()\n const label = expired ? 'Expired' : 'Expires'\n return html`\n <div class=\"token-expires label-small\">${label} <relative-time datetime=\"${expTime}\"></relative-time></div>\n `\n }\n\n protected override renderOAth2Authorize(): TemplateResult | typeof nothing {\n const { authorizing } = this\n return html` <div class=\"authorize-actions base-level\">\n <ui-filled-button\n ?disabled=\"${authorizing || !this.discovered}\"\n class=\"auth-button\"\n data-type=\"get-token\"\n @click=\"${this.authorize}\"\n >Request tokens</ui-filled-button\n >\n </div>`\n }\n}\n"]}
1
+ {"version":3,"file":"OidcAuthorization.js","sourceRoot":"","sources":["../../../../../src/elements/authorization/ui/OidcAuthorization.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, PropertyValues, TemplateResult } from 'lit'\nimport '@github/relative-time-element'\nimport { state } from 'lit/decorators.js'\nimport { live } from 'lit/directives/live.js'\nimport { generateState } from '@api-client/core/authorization/lib/Utils.js'\nimport * as KnownGrants from '@api-client/core/authorization/lib/KnownGrants.js'\nimport type {\n IOauth2GrantType,\n IOauth2ResponseType,\n IOidcAuthorization,\n IOidcTokenError,\n IOidcTokenInfo,\n} from '@api-client/core/models/Authorization.js'\nimport { Events as CoreEvents } from '@api-client/core/events/Events.js'\nimport type { IOpenIdProviderMetadata } from '@api-client/core/authorization/types.js'\nimport OAuth2Authorization from './OAuth2Authorization.js'\nimport Input from '../../../md/input/Input.js'\nimport '../../../md/icons/ui-icon.js'\nimport '../../../md/button/ui-filled-tonal-button.js'\nimport '../../../md/button/ui-filled-button.js'\n\nexport const GrantLabels: Record<string, string> = {\n [KnownGrants.implicit]: 'Access token',\n [KnownGrants.code]: 'Authorization code',\n refresh_token: 'Refresh token',\n [KnownGrants.password]: 'Password',\n [KnownGrants.clientCredentials]: 'Client credentials',\n [KnownGrants.deviceCode]: 'Device code',\n [KnownGrants.jwtBearer]: 'JWT Bearer',\n}\n\nexport const ResponseTypeLabels: Record<string, string> = {\n token: 'Token',\n code: 'Code',\n id_token: 'ID token',\n id: 'ID token',\n}\n\nexport const discoveryCache = new Map<string, IOpenIdProviderMetadata>()\n\n/**\n * @returns The default grant types for OIDC\n */\nexport const defaultGrantTypes: IOauth2GrantType[] = [\n {\n type: 'implicit',\n label: 'Access token (browser flow)',\n },\n {\n type: 'authorization_code',\n label: 'Authorization code (server flow)',\n },\n]\n\nexport default class OidcAuthorization extends OAuth2Authorization {\n @state() accessor discovered = false\n\n /**\n * The index of the response from the `supportedResponses`.\n * By default it selects the first one.\n */\n @state() accessor selectedResponse: number | undefined\n\n /**\n * @returns True when the current `grantType` can support redirect URI.\n */\n override get hasRedirectUri(): boolean {\n const { discovered } = this\n const { grantType } = this.config\n if (!discovered || !grantType) {\n return false\n }\n return [KnownGrants.implicit, KnownGrants.code].includes(grantType)\n }\n\n override get config(): IOidcAuthorization {\n const { authorization } = this\n if (!authorization) {\n return {}\n }\n if (!authorization.config) {\n authorization.config = {} as IOidcAuthorization\n }\n return authorization.config as IOidcAuthorization\n }\n\n protected override update(cp: PropertyValues<void>): void {\n if (cp.has('authorization') && this.authorization) {\n this.detectDiscovered()\n this.detectSelectedResponseType()\n }\n super.update(cp)\n }\n\n /**\n * Serialized input values\n * @returns An object with user input\n */\n override serialize(): IOidcAuthorization {\n const result = super.serialize() as IOidcAuthorization\n const { config } = this\n delete result.accessToken\n result.issuerUri = config.issuerUri\n result.tokens = config.tokens\n result.tokenInUse = config.tokenInUse\n result.supportedResponses = config.supportedResponses\n result.grantTypes = config.grantTypes\n result.serverScopes = config.serverScopes\n\n const { selectedResponse = 0 } = this\n const { supportedResponses = [], tokens, tokenInUse = 0 } = config\n const response = supportedResponses[selectedResponse]\n if (response) {\n result.responseType = response.map((i) => i.type).join(' ')\n }\n if (Array.isArray(tokens)) {\n result.accessToken = this.readTokenValue(tokens[tokenInUse] as IOidcTokenInfo)\n }\n if (result.responseType && !this.noPkce && result.responseType.includes('code')) {\n result.pkce = config.pkce\n }\n return result\n }\n\n override async authorize(): Promise<null> {\n this.lastErrorMessage = undefined\n const validationResult = this.checkValidity()\n if (!validationResult) {\n return null\n }\n this.authorizing = true\n const detail = this.serialize()\n const stateParam = generateState()\n detail.state = stateParam\n\n try {\n const tokens = await CoreEvents.Authorization.Oidc.authorize(detail, this)\n this.authorizing = false\n if (!Array.isArray(tokens) || !tokens.length) {\n return null\n }\n const { config } = this\n config.tokens = tokens\n config.accessToken = undefined\n config.tokenInUse = 0\n this.notifyChange()\n this.requestUpdate()\n } catch (e) {\n const { message = 'Unknown error' } = e as Error\n this.lastErrorMessage = message\n this.authorizing = false\n throw e\n }\n return null\n }\n\n readTokenLabel(token: IOidcTokenInfo | IOidcTokenError): string {\n const { responseType } = token\n switch (responseType) {\n case 'token':\n return 'Access token'\n case 'code':\n return 'Access token from code exchange'\n case 'id_token':\n case 'id':\n return 'ID token'\n default:\n return 'Unknown token'\n }\n }\n\n readTokenValue(token: IOidcTokenInfo): string {\n if (!token) {\n return ''\n }\n const { responseType } = token\n switch (responseType) {\n case 'token':\n return token.accessToken || ''\n case 'code':\n return token.accessToken || ''\n case 'id_token':\n case 'id':\n return token.idToken || ''\n default:\n return token.accessToken || token.refreshToken || token.idToken || ''\n }\n }\n\n updateIssuerUri(value?: string): void {\n const { config } = this\n if (config.issuerUri === value) {\n return\n }\n config.issuerUri = value\n this.requestUpdate()\n this.notifyChange()\n }\n\n /**\n * Downloads the OIDC info and pre-populates the form inputs.\n */\n async discover(): Promise<void> {\n const { issuerUri } = this.config\n if (!issuerUri) {\n const message = 'Set the issuer URI first.'\n this.lastErrorMessage = message\n this.discovered = false\n throw new Error(message)\n }\n this.lastErrorMessage = undefined\n let info: IOpenIdProviderMetadata | undefined\n const oidcUrl = this.buildIssuerUrl(issuerUri)\n if (discoveryCache.has(oidcUrl)) {\n info = discoveryCache.get(oidcUrl)\n } else {\n try {\n info = await this.transportDiscovery(oidcUrl)\n if (info) {\n discoveryCache.set(oidcUrl, info)\n }\n } catch {\n this.lastErrorMessage = `Unable to read the discovery information.`\n }\n }\n if (info) {\n this.propagateOidc(info)\n this.discovered = true\n this.notifyChange()\n } else {\n this.discovered = false\n }\n }\n\n /**\n * Constructs the OIDC discovery URL.\n * @param baseUri The issues URI.\n */\n protected buildIssuerUrl(baseUri: string): string {\n let url = baseUri\n if (!url.includes('.well-known')) {\n if (!url.endsWith('/')) {\n url += '/'\n }\n url += '.well-known/openid-configuration'\n }\n return url\n }\n\n /**\n * Requests the data from the discovery endpoint.\n */\n protected async transportDiscovery(url: string): Promise<IOpenIdProviderMetadata | undefined> {\n const rsp = await fetch(url)\n return rsp.json()\n }\n\n propagateOidc(meta: IOpenIdProviderMetadata): void {\n const { config } = this\n\n config.authorizationUri = meta.authorization_endpoint\n config.supportedResponses = this.translateResponseCodes(meta.response_types_supported)\n if (meta.token_endpoint) {\n config.accessTokenUri = meta.token_endpoint\n }\n if (Array.isArray(meta.grant_types_supported) && meta.grant_types_supported.length) {\n config.serverScopes = meta.grant_types_supported\n this.grantTypes = this.translateGrantTypesMeta(meta.grant_types_supported)\n } else {\n this.grantTypes = [...defaultGrantTypes]\n config.serverScopes = undefined\n }\n if (Array.isArray(meta.scopes_supported)) {\n config.scopes = meta.scopes_supported\n } else {\n config.scopes = ['openid']\n }\n }\n\n protected translateGrantTypesMeta(types: string[]): IOauth2GrantType[] {\n const result: IOauth2GrantType[] = []\n types.forEach((type) => {\n const item = {\n type,\n label: type,\n }\n if (GrantLabels[type]) {\n item.label = GrantLabels[type]\n }\n result.push(item)\n })\n return result\n }\n\n /**\n * This generates a 2-dimensional array with the response codes\n * supported by the authorization server. Next to the grant type\n * it describes how token is received by the\n */\n protected translateResponseCodes(codes: string[]): IOauth2ResponseType[][] {\n const result: IOauth2ResponseType[][] = []\n codes.forEach((value) => {\n const items = value.split(' ')\n const response: IOauth2ResponseType[] = []\n result.push(response)\n items.forEach((responseValue) => {\n const type = {\n type: responseValue,\n label: responseValue,\n }\n if (ResponseTypeLabels[responseValue]) {\n type.label = ResponseTypeLabels[responseValue]\n }\n response.push(type)\n })\n })\n return result\n }\n\n /**\n * Sets the `discovered` flag depending on the current configuration.\n */\n protected detectDiscovered(): void {\n const { grantTypes, config } = this\n const { issuerUri, authorizationUri, scopes } = config\n if (!issuerUri || !authorizationUri) {\n this.discovered = false\n return\n }\n if (!Array.isArray(grantTypes) || !grantTypes.length) {\n this.discovered = false\n return\n }\n if (!Array.isArray(scopes) || !scopes.length) {\n this.discovered = false\n return\n }\n this.discovered = true\n }\n\n /**\n * A function called from the auth element `updated` lifecycle method.\n * It tries to figure out the `selectedResponse` from the current list of\n * `supportedResponses` and the `responseType`.\n */\n protected detectSelectedResponseType(): void {\n const { selectedResponse, config } = this\n const { supportedResponses, responseType } = config\n if (!responseType || !Array.isArray(supportedResponses)) {\n return\n }\n const parts = responseType.split(' ')\n const index = supportedResponses.findIndex((i) => {\n const rspTypes = i.map((e) => e.type)\n const hasNotFound = parts.some((p) => !rspTypes.includes(p))\n return !hasNotFound\n })\n if (index >= 0 && selectedResponse !== index) {\n this.selectedResponse = index\n }\n }\n\n selectResponseType(index: number): void {\n if (this.selectedResponse === index) {\n return\n }\n this.selectedResponse = index\n // this.notifyChange(); ???\n }\n\n protected handleIssuerUri(e: Event): void {\n const input = e.target as Input\n const { value } = input\n this.updateIssuerUri(value)\n }\n\n protected handleIssuerRead(): void {\n this.discover()\n }\n\n protected handleResponseTypeSelect(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined\n if (!target) {\n return\n }\n const index = Number(target.dataset.index)\n if (Number.isNaN(index)) {\n return\n }\n this.selectResponseType(index)\n }\n\n protected handleTokenInUse(e: Event): void {\n const input = e.target as HTMLInputElement\n const { value } = input\n if (!input.checked) {\n return\n }\n this.config.tokenInUse = Number(value)\n this.notifyChange()\n }\n\n protected override renderEditor(): TemplateResult | typeof nothing {\n const { authorization, discovered } = this\n if (!authorization) {\n return nothing\n }\n return html`\n <form autocomplete=\"on\" class=\"auth-form oauth2-auth\">\n ${this.renderIssuerInput()} ${discovered ? this.renderFormContent() : ''}\n </form>\n ${this.renderAuthAction()} ${this.renderError()} ${this.renderAuthInfo()}\n `\n }\n\n protected renderIssuerInput(): TemplateResult {\n const { config } = this\n const { issuerUri } = config\n return html`\n <div class=\"full-input base-level issuer-field\">\n <ui-filled-text-field\n label=\"Issuer URI\"\n name=\"issuerUri\"\n .value=\"${live(issuerUri || '')}\"\n type=\"url\"\n required\n invalidText=\"Issuer URI is required\"\n supportingText=\"The URI without the .well-known part.\"\n ?disabled=\"${this.disabled}\"\n ?readOnly=\"${this.readOnly}\"\n @change=\"${this.handleIssuerUri}\"\n ></ui-filled-text-field>\n\n <ui-filled-tonal-button\n title=\"Downloads and processes the discovery info\"\n @click=\"${this.handleIssuerRead}\"\n data-type=\"read-discovery\"\n >Read</ui-filled-tonal-button\n >\n </div>\n `\n }\n\n protected override renderFormContent(): (typeof nothing | TemplateResult)[] {\n const parts = super.renderFormContent()\n parts.unshift(this.renderResponses())\n return parts\n }\n\n /**\n * @returns The template for the response types drop down.\n */\n protected renderResponses(): TemplateResult | typeof nothing {\n const { supportedResponses } = this.config\n if (!Array.isArray(supportedResponses) || !supportedResponses.length) {\n return nothing\n }\n const { selectedResponse = 0, readOnly, disabled } = this\n\n const selected = supportedResponses[selectedResponse]\n const label = selected ? selected.map((i) => i.label).join(', ') : ''\n\n return html` <div class=\"full-input\">\n <ui-dropdown-list verticalAlign=\"top\" @select=\"${this.handleResponseTypeSelect}\" closeOnOutsideClick>\n <ui-filled-text-field\n readOnly\n name=\"responseType\"\n .value=\"${label}\"\n label=\"Response type\"\n ?disabled=\"${disabled || readOnly}\"\n >\n <ui-icon slot=\"suffix\" icon=\"arrowDropDown\" role=\"presentation\"></ui-icon>\n </ui-filled-text-field>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${supportedResponses.map((item, index) => this.renderResponseItem(item, index))}\n </ui-list>\n </ui-dropdown-list>\n </div>`\n }\n\n /**\n * @param item The responses list to render as a single item.\n * @returns The template for the response types drop down item.\n */\n protected renderResponseItem(item: IOauth2ResponseType[], index: number): TemplateResult | string {\n const label = item.map((i) => i.label).join(', ')\n return html` <ui-list-item role=\"menuitem\" data-index=\"${index}\">${label}</ui-list-item> `\n }\n\n protected override renderAuthAction(): TemplateResult | typeof nothing {\n const { config } = this\n const { tokens = [] } = config\n return tokens.length ? this.renderOAuth2Token() : this.renderOAth2Authorize()\n }\n\n protected override renderOAuth2Token(): TemplateResult | typeof nothing {\n const { config, authorizing } = this\n const { tokens = [] } = config\n return html` <div class=\"current-tokens\">\n <p class=\"tokens-title\">Tokens</p>\n ${tokens.map((info, index) => this.renderToken(info, index))}\n <div class=\"authorize-actions\">\n <ui-filled-button\n ?disabled=\"${authorizing}\"\n class=\"auth-button\"\n data-type=\"refresh-token\"\n @click=\"${this.authorize}\"\n >Refresh tokens</ui-filled-button\n >\n </div>\n </div>`\n }\n\n protected renderToken(token: IOidcTokenInfo | IOidcTokenError, index: number): TemplateResult {\n const typedError = token as IOidcTokenError\n if (typedError.error) {\n return this.renderErrorToken(typedError)\n }\n return this.renderInfoToken(token as IOidcTokenInfo, index)\n }\n\n protected renderErrorToken(token: IOidcTokenError): TemplateResult {\n const { error, errorDescription } = token\n const label = this.readTokenLabel(token)\n return html` <div class=\"current-token\">\n <label class=\"token-label label-large\">${label}</label>\n <p class=\"token-value body-small\">\n <span>${error}: ${errorDescription}</span>\n </p>\n </div>`\n }\n\n protected renderInfoToken(token: IOidcTokenInfo, index: number): TemplateResult {\n const { config } = this\n const { responseType } = token\n const label = this.readTokenLabel(token)\n const value = this.readTokenValue(token)\n return html`\n <div class=\"token-option\">\n <input\n type=\"radio\"\n id=\"${responseType}\"\n name=\"tokenInUse\"\n .value=\"${String(index)}\"\n ?checked=\"${config.tokenInUse === index}\"\n @change=\"${this.handleTokenInUse}\"\n />\n <div class=\"token-info\">\n <label for=\"${responseType}\" class=\"token-label label-large\"> ${label} </label>\n ${this.renderTokenExpiration(token)}\n <div\n class=\"token-value body-small\"\n title=\"${value}\"\n @click=\"${this.handleClickCopy}\"\n @keydown=\"${this.handlerCopyKeydown}\"\n >\n ${value.trim()}\n </div>\n </div>\n </div>\n `\n }\n\n protected renderTokenExpiration(token: IOidcTokenInfo): TemplateResult | string {\n const { time, expiresIn } = token\n if (!time || !expiresIn) {\n return ''\n }\n const d = new Date(time + expiresIn * 1000)\n const expTime = d.toISOString()\n const expired = Date.now() > d.getTime()\n const label = expired ? 'Expired' : 'Expires'\n return html`\n <div class=\"token-expires label-small\">${label} <relative-time datetime=\"${expTime}\"></relative-time></div>\n `\n }\n\n protected override renderOAth2Authorize(): TemplateResult | typeof nothing {\n const { authorizing } = this\n return html` <div class=\"authorize-actions base-level\">\n <ui-filled-button\n ?disabled=\"${authorizing || !this.discovered}\"\n class=\"auth-button\"\n data-type=\"get-token\"\n @click=\"${this.authorize}\"\n >Request tokens</ui-filled-button\n >\n </div>`\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import Element from './internals/autocomplete.js';
2
+ export declare class AutocompleteInput extends Element {
3
+ static styles: import("lit").CSSResult[];
4
+ }
5
+ declare global {
6
+ interface HTMLElementTagNameMap {
7
+ 'autocomplete-input': AutocompleteInput;
8
+ }
9
+ }
10
+ //# sourceMappingURL=autocomplete-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete-input.d.ts","sourceRoot":"","sources":["../../../../src/elements/autocomplete/autocomplete-input.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,6BAA6B,CAAA;AAGjD,qBACa,iBAAkB,SAAQ,OAAO;IAC5C,OAAgB,MAAM,4BAAW;CAClC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,iBAAiB,CAAA;KACxC;CACF"}
@@ -1,19 +1,19 @@
1
1
  import { __esDecorate, __runInitializers } from "tslib";
2
2
  import { customElement } from 'lit/decorators.js';
3
- import Element from './internals/TextFieldElement.js';
4
- import styles from './internals/TextField.styles.js';
5
- let UiTextFieldElement = (() => {
6
- let _classDecorators = [customElement('ui-text-field')];
3
+ import Element from './internals/autocomplete.js';
4
+ import styles from './internals/autocomplete.styles.js';
5
+ let AutocompleteInput = (() => {
6
+ let _classDecorators = [customElement('autocomplete-input')];
7
7
  let _classDescriptor;
8
8
  let _classExtraInitializers = [];
9
9
  let _classThis;
10
10
  let _classSuper = Element;
11
- var UiTextFieldElement = class extends _classSuper {
11
+ var AutocompleteInput = class extends _classSuper {
12
12
  static { _classThis = this; }
13
13
  static {
14
14
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
15
15
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
16
- UiTextFieldElement = _classThis = _classDescriptor.value;
16
+ AutocompleteInput = _classThis = _classDescriptor.value;
17
17
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
18
18
  }
19
19
  static styles = [styles];
@@ -21,7 +21,7 @@ let UiTextFieldElement = (() => {
21
21
  __runInitializers(_classThis, _classExtraInitializers);
22
22
  }
23
23
  };
24
- return UiTextFieldElement = _classThis;
24
+ return AutocompleteInput = _classThis;
25
25
  })();
26
- export { UiTextFieldElement };
27
- //# sourceMappingURL=ui-text-field.js.map
26
+ export { AutocompleteInput };
27
+ //# sourceMappingURL=autocomplete-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete-input.js","sourceRoot":"","sources":["../../../../src/elements/autocomplete/autocomplete-input.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,OAAO,MAAM,6BAA6B,CAAA;AACjD,OAAO,MAAM,MAAM,oCAAoC,CAAA;IAG1C,iBAAiB;4BAD7B,aAAa,CAAC,oBAAoB,CAAC;;;;sBACG,OAAO;iCAAf,SAAQ,WAAO;;;;YAA9C,6KAEC;;;;QADC,MAAM,CAAU,MAAM,GAAG,CAAC,MAAM,CAAC,CAAA;;YADtB,uDAAiB;;;;;SAAjB,iBAAiB","sourcesContent":["import { customElement } from 'lit/decorators.js'\nimport Element from './internals/autocomplete.js'\nimport styles from './internals/autocomplete.styles.js'\n\n@customElement('autocomplete-input')\nexport class AutocompleteInput extends Element {\n static override styles = [styles]\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'autocomplete-input': AutocompleteInput\n }\n}\n"]}
@@ -0,0 +1,209 @@
1
+ import { LitElement, PropertyValues, TemplateResult } from 'lit';
2
+ import type UiListbox from '../../../md/listbox/internals/Listbox.js';
3
+ /**
4
+ * An accessible and performant autocomplete component that enhances a text input with a list of suggestions.
5
+ *
6
+ * The `autocomplete-input` component provides a flexible way to add autocomplete functionality
7
+ * to any text input. It works by coordinating a slotted input element with a slotted `ui-listbox`
8
+ * containing suggestions.
9
+ *
10
+ * Key Features:
11
+ *
12
+ * - **Popover Management**: Automatically shows and hides the suggestions popover based on input focus
13
+ * and user interaction.
14
+ * - **Keyboard Navigation**: Allows users to navigate suggestions using ArrowUp, ArrowDown keys directly
15
+ * from the input. Enter selects a suggestion, and Escape closes the popover.
16
+ * The suggestion list itself never gains focus.
17
+ * - **Dynamic Filtering**: Filters the list of suggestions as the user types into the input. Items not matching
18
+ * the query are hidden (not removed).
19
+ * - By default, filtering checks `item.dataset.value` and then `item.textContent`.
20
+ * - If a `ui-list-item` has a `data-index` attribute (e.g., `data-index="name email"`), filtering will search
21
+ * within the specified `data-*` attributes (e.g., `data-name`, `data-email`).
22
+ * - **Mutation Awareness**: Reacts to changes in slotted suggestions, re-filtering them if necessary.
23
+ * - **Event-Driven**: Notifies the parent application via an `autocomplete` event when a suggestion is selected,
24
+ * without directly modifying the input's value. This allows the application author to control the input update logic.
25
+ * - **Accessibility**: Designed with accessibility in mind, ensuring keyboard navigability and proper ARIA attribute
26
+ * management (handled by `ui-listbox`).
27
+ *
28
+ * The component uses CSS anchor positioning to place the suggestions popover relative to the input.
29
+ * Ensure your `ui-listbox` is styled appropriately for popover display (e.g., `popover="manual"`, `position-anchor`).
30
+ * The component will manage `showPopover()` and `hidePopover()` calls.
31
+ *
32
+ * @slot input - The input element that will be used for autocomplete. This element should be an `HTMLInputElement`
33
+ * or behave like one (have a `value` property and dispatch `input`, `focus`, `blur`, and `keydown`
34
+ * events).
35
+ * @slot suggestions - The `ui-listbox` element containing `ui-list-item` elements as suggestions.
36
+ *
37
+ * @fires autocomplete - Dispatched when a suggestion is selected by the user (e.g., via click or Enter key).
38
+ * The `event.detail` object contains:
39
+ * - `item`: The selected `UiListItem` instance.
40
+ *
41
+ * @example
42
+ * ```html
43
+ * <autocomplete-input @autocomplete="${this.handleAutocompleteSelection}">
44
+ * <input slot="input" type="text" placeholder="Search fruits..." />
45
+ * <ui-listbox slot="suggestions">
46
+ * <ui-list-item data-value="apple">Apple</ui-list-item>
47
+ * <ui-list-item data-value="banana">Banana</ui-list-item>
48
+ * <ui-list-item data-value="cherry">Cherry</ui-list-item>
49
+ * </ui-listbox>
50
+ * </autocomplete-input>
51
+ *
52
+ * <script>
53
+ * // In your component/script
54
+ * handleAutocompleteSelection(event) {
55
+ * const selectedItem = event.detail.item;
56
+ * const inputElement = this.shadowRoot.querySelector('input[slot="input"]');
57
+ * if (inputElement) {
58
+ * inputElement.value = selectedItem.dataset.value || selectedItem.textContent;
59
+ * }
60
+ * console.log('Selected:', selectedItem.dataset.value);
61
+ * }
62
+ * </script>
63
+ * ```
64
+ *
65
+ * @example Dynamic filtering with `data-index`
66
+ * ```html
67
+ * <autocomplete-input @autocomplete="${this.handleUserSelection}">
68
+ * <input slot="input" type="text" placeholder="Search users..." />
69
+ * <ui-listbox slot="suggestions">
70
+ * <ui-list-item data-id="1" data-name="Alice Wonderland" data-email="alice@example.com" data-index="name email">
71
+ * Alice Wonderland
72
+ * <span slot="supporting-text">alice@example.com</span>
73
+ * </ui-list-item>
74
+ * <ui-list-item data-id="2" data-name="Bob The Builder" data-email="bob@example.com" data-index="name email">
75
+ * Bob The Builder
76
+ * <span slot="supporting-text">bob@example.com</span>
77
+ * </ui-list-item>
78
+ * </ui-listbox>
79
+ * </autocomplete-input>
80
+ *
81
+ * <script>
82
+ * // In your component/script
83
+ * handleUserSelection(event) {
84
+ * const selectedItem = event.detail.item;
85
+ * const inputElement = this.shadowRoot.querySelector('input[slot="input"]');
86
+ * if (inputElement) {
87
+ * // You might want to display the name, but store the ID
88
+ * inputElement.value = selectedItem.dataset.name;
89
+ * }
90
+ * console.log('Selected user ID:', selectedItem.dataset.id);
91
+ * }
92
+ * </script>
93
+ * ```
94
+ */
95
+ export default class Autocomplete extends LitElement {
96
+ /**
97
+ * The MutationObserver instance used to watch for changes in slotted children.
98
+ */
99
+ protected observer?: MutationObserver;
100
+ /**
101
+ * The ID of the input element, generated if not provided.
102
+ * This is used for CSS anchoring and to ensure unique IDs for accessibility.
103
+ */
104
+ protected accessor inputId: string;
105
+ /**
106
+ * The reference to the slotted input element.
107
+ * This should be an `HTMLInputElement` or behave like one.
108
+ */
109
+ protected inputRef?: HTMLInputElement | HTMLElement | null;
110
+ /**
111
+ * The reference to the slotted suggestions element, which should be a `ui-listbox`.
112
+ * This is used to manage the suggestions popover and filtering.
113
+ */
114
+ protected suggestionsRef?: UiListbox | null;
115
+ /**
116
+ * Checks if the suggestions popover is currently open.
117
+ */
118
+ get opened(): boolean;
119
+ connectedCallback(): void;
120
+ disconnectedCallback(): void;
121
+ protected firstUpdated(cp: PropertyValues): void;
122
+ /**
123
+ * Performs initial setup after the first update, ensuring that slotted input
124
+ * and suggestions elements are configured.
125
+ */
126
+ firstSetup(): Promise<void>;
127
+ /**
128
+ * Handles mutations observed on the component's slotted children.
129
+ * This is used to set up or tear down input and suggestions elements when they are added or removed.
130
+ * @param mutations An array of MutationRecord objects.
131
+ */
132
+ protected handleMutations(mutations: MutationRecord[]): void;
133
+ /**
134
+ * Clears event listeners from the current input reference and resets it.
135
+ */
136
+ protected clearInputListeners(): void;
137
+ /**
138
+ * Clears event listeners from the current suggestions reference and resets it.
139
+ */
140
+ protected clearSuggestionsListeners(): void;
141
+ /**
142
+ * Sets up the slotted input element.
143
+ * Assigns an ID if necessary, sets up CSS anchoring, and attaches event listeners.
144
+ * @param input The HTMLElement to be used as the input.
145
+ */
146
+ protected setupInput(input: HTMLElement): void;
147
+ /**
148
+ * Sets up the slotted suggestions element (assumed to be a `UiListbox`).
149
+ * Configures popover behavior, CSS anchoring, and attaches event listeners.
150
+ * @param suggestionsElement The `UiListbox` element to be used for suggestions.
151
+ */
152
+ protected setupSuggestions(suggestionsElement: UiListbox): void;
153
+ /**
154
+ * Handles the focus event on the input element.
155
+ * Opens the suggestions popover if there are items to display.
156
+ */
157
+ protected handleInputFocus(): void;
158
+ /**
159
+ * Handles the input event on the input element.
160
+ * Filters suggestions based on the input query and opens/closes the popover accordingly.
161
+ * @param event The input event.
162
+ */
163
+ protected handleInput(event: Event): void;
164
+ /**
165
+ * Handles keydown events on the input element for navigating and selecting suggestions.
166
+ * - ArrowDown/ArrowUp: Navigates the suggestion list.
167
+ * - Enter: Selects the highlighted suggestion.
168
+ * - Escape: Closes the suggestions popover.
169
+ * @param event The keyboard event.
170
+ */
171
+ protected handleKeydown(event: KeyboardEvent): void;
172
+ /**
173
+ * Navigates the suggestion list based on the pressed key.
174
+ * @param key The key that was pressed (ArrowDown or ArrowUp).
175
+ */
176
+ protected navigateList(key: string): void;
177
+ /**
178
+ * Handles the blur event on the input element.
179
+ * Closes the suggestions popover if focus moves outside the autocomplete component.
180
+ */
181
+ protected handleInputBlur(): void;
182
+ /**
183
+ * Handles the `select` event dispatched by the `ui-listbox` when a suggestion is chosen.
184
+ * Dispatches an `autocomplete` event and closes the popover.
185
+ * @param event The custom event from `ui-listbox`.
186
+ */
187
+ protected handleSuggestionSelect(event: CustomEvent): void;
188
+ /**
189
+ * Handles the `itemschange` event dispatched by the `ui-listbox` when its slotted items change.
190
+ * Re-filters the suggestions.
191
+ */
192
+ protected handleSuggestionsSlotChange(): void;
193
+ /**
194
+ * Opens the suggestions popover if it's not already open and there are visible items.
195
+ */
196
+ protected openSuggestions(): void;
197
+ /**
198
+ * Closes the suggestions popover if it's open and clears any highlighted item.
199
+ */
200
+ protected closeSuggestions(): void;
201
+ /**
202
+ * Filters the suggestions based on the provided query.
203
+ * Hides items that do not match and manages the highlighted item state.
204
+ * @param query The search query string.
205
+ */
206
+ protected filterSuggestions(query: string): void;
207
+ protected render(): TemplateResult;
208
+ }
209
+ //# sourceMappingURL=autocomplete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../../../src/elements/autocomplete/internals/autocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAEtE,OAAO,KAAK,SAAS,MAAM,0CAA0C,CAAA;AAIrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,UAAU;IAClD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAErC;;;OAGG;IACM,SAAS,CAAC,QAAQ,CAAC,OAAO,SAAK;IAExC;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,WAAW,GAAG,IAAI,CAAA;IAC1D;;;OAGG;IACH,SAAS,CAAC,cAAc,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IAE3C;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAEQ,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;cAQlB,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAKzD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC;;;;OAIG;IACH,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI;IAyB5D;;OAEG;IACH,SAAS,CAAC,mBAAmB,IAAI,IAAI;IAUrC;;OAEG;IACH,SAAS,CAAC,yBAAyB,IAAI,IAAI;IAY3C;;;;OAIG;IACH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAwB9C;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,SAAS,GAAG,IAAI;IAmB/D;;;OAGG;IAEH,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAalC;;;;OAIG;IAEH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMzC;;;;;;OAMG;IAEH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA4BnD;;;OAGG;IACH,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAazC;;;OAGG;IAEH,SAAS,CAAC,eAAe,IAAI,IAAI;IAajC;;;;OAIG;IAEH,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAa1D;;;OAGG;IAEH,SAAS,CAAC,2BAA2B,IAAI,IAAI;IAS7C;;OAEG;IACH,SAAS,CAAC,eAAe,IAAI,IAAI;IAMjC;;OAEG;IACH,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAMlC;;;;OAIG;IACH,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;cA6C7B,MAAM,IAAI,cAAc;CAM5C"}