@workos-inc/widgets 1.20.2-next.1792700156145 → 1.20.2

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 (202) hide show
  1. package/CHANGELOG.md +4 -10
  2. package/dist/cjs/admin-portal-audit-log-streaming.client.cjs +2 -1
  3. package/dist/cjs/admin-portal-audit-log-streaming.client.cjs.map +1 -1
  4. package/dist/cjs/admin-portal-domain-verification.client.cjs +3 -2
  5. package/dist/cjs/admin-portal-domain-verification.client.cjs.map +1 -1
  6. package/dist/cjs/admin-portal-sso-connection.client.cjs +2 -1
  7. package/dist/cjs/admin-portal-sso-connection.client.cjs.map +1 -1
  8. package/dist/cjs/api/api-provider.cjs +23 -1
  9. package/dist/cjs/api/api-provider.cjs.map +1 -1
  10. package/dist/cjs/api/api-provider.d.cts.map +1 -1
  11. package/dist/cjs/api/claims.cjs.map +1 -1
  12. package/dist/cjs/api/claims.d.cts +2 -1
  13. package/dist/cjs/api/claims.d.cts.map +1 -1
  14. package/dist/cjs/api/client-graphql/client.cjs +3 -2
  15. package/dist/cjs/api/client-graphql/client.cjs.map +1 -1
  16. package/dist/cjs/api/client-graphql/hooks.cjs +3 -20
  17. package/dist/cjs/api/client-graphql/hooks.cjs.map +1 -1
  18. package/dist/cjs/api/client-graphql/hooks.d.cts +3 -12
  19. package/dist/cjs/api/client-graphql/hooks.d.cts.map +1 -1
  20. package/dist/cjs/api/client-graphql/query-keys.cjs +25 -0
  21. package/dist/cjs/api/client-graphql/query-keys.cjs.map +1 -0
  22. package/dist/cjs/api/client-graphql/query-keys.d.cts +16 -0
  23. package/dist/cjs/api/client-graphql/query-keys.d.cts.map +1 -0
  24. package/dist/cjs/components/copy-text.cjs +1 -1
  25. package/dist/cjs/components/copy-text.cjs.map +1 -1
  26. package/dist/cjs/components/form.cjs +9 -13
  27. package/dist/cjs/components/form.cjs.map +1 -1
  28. package/dist/cjs/components/form.d.cts.map +1 -1
  29. package/dist/cjs/components/otp-input.cjs +1 -0
  30. package/dist/cjs/components/otp-input.cjs.map +1 -1
  31. package/dist/cjs/directory-sync.client.cjs +2 -1
  32. package/dist/cjs/directory-sync.client.cjs.map +1 -1
  33. package/dist/cjs/lib/api/api-key.cjs +4 -3
  34. package/dist/cjs/lib/api/api-key.cjs.map +1 -1
  35. package/dist/cjs/lib/api/me.cjs +2 -1
  36. package/dist/cjs/lib/api/me.cjs.map +1 -1
  37. package/dist/cjs/lib/api/pipes.cjs +7 -6
  38. package/dist/cjs/lib/api/pipes.cjs.map +1 -1
  39. package/dist/cjs/lib/api/user-api-key.cjs +3 -2
  40. package/dist/cjs/lib/api/user-api-key.cjs.map +1 -1
  41. package/dist/cjs/lib/i18n/intl-context.cjs.map +1 -1
  42. package/dist/cjs/lib/i18n/intl-context.d.cts +1 -0
  43. package/dist/cjs/lib/i18n/intl-context.d.cts.map +1 -1
  44. package/dist/cjs/lib/i18n/use-translation.cjs +2 -2
  45. package/dist/cjs/lib/i18n/use-translation.cjs.map +1 -1
  46. package/dist/cjs/lib/use-composed-event-handlers.cjs +15 -0
  47. package/dist/cjs/lib/use-composed-event-handlers.cjs.map +1 -0
  48. package/dist/cjs/lib/use-composed-event-handlers.d.cts +6 -0
  49. package/dist/cjs/lib/use-composed-event-handlers.d.cts.map +1 -0
  50. package/dist/cjs/lib/use-debounce.cjs +124 -116
  51. package/dist/cjs/lib/use-debounce.cjs.map +1 -1
  52. package/dist/cjs/lib/use-debounce.d.cts +53 -48
  53. package/dist/cjs/lib/use-debounce.d.cts.map +1 -1
  54. package/dist/cjs/lib/use-widgets-invalidator.cjs +3 -3
  55. package/dist/cjs/lib/use-widgets-invalidator.cjs.map +1 -1
  56. package/dist/cjs/lib/use-widgets-invalidator.d.cts.map +1 -1
  57. package/dist/cjs/lib/utils.cjs +0 -7
  58. package/dist/cjs/lib/utils.cjs.map +1 -1
  59. package/dist/cjs/lib/utils.d.cts +0 -3
  60. package/dist/cjs/lib/utils.d.cts.map +1 -1
  61. package/dist/cjs/organization-switcher.client.cjs +2 -1
  62. package/dist/cjs/organization-switcher.client.cjs.map +1 -1
  63. package/dist/cjs/pipes-admin.client.cjs +2 -1
  64. package/dist/cjs/pipes-admin.client.cjs.map +1 -1
  65. package/dist/cjs/pipes.client.cjs +2 -1
  66. package/dist/cjs/pipes.client.cjs.map +1 -1
  67. package/dist/cjs/user-security.client.cjs +2 -1
  68. package/dist/cjs/user-security.client.cjs.map +1 -1
  69. package/dist/cjs/user-sessions.client.cjs +2 -1
  70. package/dist/cjs/user-sessions.client.cjs.map +1 -1
  71. package/dist/cjs/widgets/api-keys/api-keys-search.cjs +1 -1
  72. package/dist/cjs/widgets/api-keys/api-keys-search.cjs.map +1 -1
  73. package/dist/cjs/widgets/api-keys/user-api-keys-search.cjs +1 -1
  74. package/dist/cjs/widgets/api-keys/user-api-keys-search.cjs.map +1 -1
  75. package/dist/cjs/widgets/organization-switcher/organization-switcher.cjs +19 -5
  76. package/dist/cjs/widgets/organization-switcher/organization-switcher.cjs.map +1 -1
  77. package/dist/cjs/widgets/organization-switcher/organization-switcher.d.cts +2 -1
  78. package/dist/cjs/widgets/organization-switcher/organization-switcher.d.cts.map +1 -1
  79. package/dist/cjs/widgets/pipes/pipes.cjs +3 -2
  80. package/dist/cjs/widgets/pipes/pipes.cjs.map +1 -1
  81. package/dist/cjs/widgets/user-sessions/logout-all-sessions-dialog.cjs +2 -1
  82. package/dist/cjs/widgets/user-sessions/logout-all-sessions-dialog.cjs.map +1 -1
  83. package/dist/cjs/widgets/user-sessions/logout-dialog.cjs +2 -1
  84. package/dist/cjs/widgets/user-sessions/logout-dialog.cjs.map +1 -1
  85. package/dist/cjs/widgets/users-management/invite-user-dialog.cjs +5 -6
  86. package/dist/cjs/widgets/users-management/invite-user-dialog.cjs.map +1 -1
  87. package/dist/cjs/widgets/users-management/users-management-utils.cjs +4 -3
  88. package/dist/cjs/widgets/users-management/users-management-utils.cjs.map +1 -1
  89. package/dist/cjs/widgets/users-management/users-management.cjs.map +1 -1
  90. package/dist/cjs/widgets/users-management/users-search.cjs +1 -1
  91. package/dist/cjs/widgets/users-management/users-search.cjs.map +1 -1
  92. package/dist/esm/admin-portal-audit-log-streaming.client.js +2 -1
  93. package/dist/esm/admin-portal-audit-log-streaming.client.js.map +1 -1
  94. package/dist/esm/admin-portal-domain-verification.client.js +2 -1
  95. package/dist/esm/admin-portal-domain-verification.client.js.map +1 -1
  96. package/dist/esm/admin-portal-sso-connection.client.js +2 -1
  97. package/dist/esm/admin-portal-sso-connection.client.js.map +1 -1
  98. package/dist/esm/api/api-provider.d.ts.map +1 -1
  99. package/dist/esm/api/api-provider.js +23 -1
  100. package/dist/esm/api/api-provider.js.map +1 -1
  101. package/dist/esm/api/claims.d.ts +2 -1
  102. package/dist/esm/api/claims.d.ts.map +1 -1
  103. package/dist/esm/api/claims.js.map +1 -1
  104. package/dist/esm/api/client-graphql/client.js +3 -2
  105. package/dist/esm/api/client-graphql/client.js.map +1 -1
  106. package/dist/esm/api/client-graphql/hooks.d.ts +3 -12
  107. package/dist/esm/api/client-graphql/hooks.d.ts.map +1 -1
  108. package/dist/esm/api/client-graphql/hooks.js +1 -18
  109. package/dist/esm/api/client-graphql/hooks.js.map +1 -1
  110. package/dist/esm/api/client-graphql/query-keys.d.ts +16 -0
  111. package/dist/esm/api/client-graphql/query-keys.d.ts.map +1 -0
  112. package/dist/esm/api/client-graphql/query-keys.js +23 -0
  113. package/dist/esm/api/client-graphql/query-keys.js.map +1 -0
  114. package/dist/esm/components/copy-text.js +1 -1
  115. package/dist/esm/components/copy-text.js.map +1 -1
  116. package/dist/esm/components/form.d.ts.map +1 -1
  117. package/dist/esm/components/form.js +9 -13
  118. package/dist/esm/components/form.js.map +1 -1
  119. package/dist/esm/components/otp-input.js +1 -0
  120. package/dist/esm/components/otp-input.js.map +1 -1
  121. package/dist/esm/directory-sync.client.js +2 -1
  122. package/dist/esm/directory-sync.client.js.map +1 -1
  123. package/dist/esm/lib/api/api-key.js +2 -1
  124. package/dist/esm/lib/api/api-key.js.map +1 -1
  125. package/dist/esm/lib/api/me.js +2 -1
  126. package/dist/esm/lib/api/me.js.map +1 -1
  127. package/dist/esm/lib/api/pipes.js +2 -1
  128. package/dist/esm/lib/api/pipes.js.map +1 -1
  129. package/dist/esm/lib/api/user-api-key.js +2 -1
  130. package/dist/esm/lib/api/user-api-key.js.map +1 -1
  131. package/dist/esm/lib/i18n/intl-context.d.ts +1 -0
  132. package/dist/esm/lib/i18n/intl-context.d.ts.map +1 -1
  133. package/dist/esm/lib/i18n/intl-context.js.map +1 -1
  134. package/dist/esm/lib/i18n/use-translation.js +2 -2
  135. package/dist/esm/lib/i18n/use-translation.js.map +1 -1
  136. package/dist/esm/lib/use-composed-event-handlers.d.ts +6 -0
  137. package/dist/esm/lib/use-composed-event-handlers.d.ts.map +1 -0
  138. package/dist/esm/lib/use-composed-event-handlers.js +12 -0
  139. package/dist/esm/lib/use-composed-event-handlers.js.map +1 -0
  140. package/dist/esm/lib/use-debounce.d.ts +53 -48
  141. package/dist/esm/lib/use-debounce.d.ts.map +1 -1
  142. package/dist/esm/lib/use-debounce.js +124 -116
  143. package/dist/esm/lib/use-debounce.js.map +1 -1
  144. package/dist/esm/lib/use-widgets-invalidator.d.ts.map +1 -1
  145. package/dist/esm/lib/use-widgets-invalidator.js +2 -2
  146. package/dist/esm/lib/use-widgets-invalidator.js.map +1 -1
  147. package/dist/esm/lib/utils.d.ts +0 -3
  148. package/dist/esm/lib/utils.d.ts.map +1 -1
  149. package/dist/esm/lib/utils.js +1 -7
  150. package/dist/esm/lib/utils.js.map +1 -1
  151. package/dist/esm/organization-switcher.client.js +2 -1
  152. package/dist/esm/organization-switcher.client.js.map +1 -1
  153. package/dist/esm/pipes-admin.client.js +2 -1
  154. package/dist/esm/pipes-admin.client.js.map +1 -1
  155. package/dist/esm/pipes.client.js +2 -1
  156. package/dist/esm/pipes.client.js.map +1 -1
  157. package/dist/esm/user-security.client.js +2 -1
  158. package/dist/esm/user-security.client.js.map +1 -1
  159. package/dist/esm/user-sessions.client.js +2 -1
  160. package/dist/esm/user-sessions.client.js.map +1 -1
  161. package/dist/esm/widgets/api-keys/api-keys-search.js +1 -1
  162. package/dist/esm/widgets/api-keys/api-keys-search.js.map +1 -1
  163. package/dist/esm/widgets/api-keys/user-api-keys-search.js +1 -1
  164. package/dist/esm/widgets/api-keys/user-api-keys-search.js.map +1 -1
  165. package/dist/esm/widgets/organization-switcher/organization-switcher.d.ts +2 -1
  166. package/dist/esm/widgets/organization-switcher/organization-switcher.d.ts.map +1 -1
  167. package/dist/esm/widgets/organization-switcher/organization-switcher.js +19 -5
  168. package/dist/esm/widgets/organization-switcher/organization-switcher.js.map +1 -1
  169. package/dist/esm/widgets/pipes/pipes.js +2 -1
  170. package/dist/esm/widgets/pipes/pipes.js.map +1 -1
  171. package/dist/esm/widgets/user-sessions/logout-all-sessions-dialog.js +2 -1
  172. package/dist/esm/widgets/user-sessions/logout-all-sessions-dialog.js.map +1 -1
  173. package/dist/esm/widgets/user-sessions/logout-dialog.js +2 -1
  174. package/dist/esm/widgets/user-sessions/logout-dialog.js.map +1 -1
  175. package/dist/esm/widgets/users-management/invite-user-dialog.js +5 -6
  176. package/dist/esm/widgets/users-management/invite-user-dialog.js.map +1 -1
  177. package/dist/esm/widgets/users-management/users-management-utils.js +2 -1
  178. package/dist/esm/widgets/users-management/users-management-utils.js.map +1 -1
  179. package/dist/esm/widgets/users-management/users-management.js.map +1 -1
  180. package/dist/esm/widgets/users-management/users-search.js +1 -1
  181. package/dist/esm/widgets/users-management/users-search.js.map +1 -1
  182. package/package.json +1 -1
  183. package/src/api/api-provider.tsx +39 -1
  184. package/src/api/claims.ts +2 -1
  185. package/src/api/client-graphql/client.ts +8 -2
  186. package/src/api/client-graphql/hooks.ts +8 -27
  187. package/src/api/client-graphql/query-keys.ts +29 -0
  188. package/src/components/copy-text.tsx +1 -1
  189. package/src/components/form.tsx +33 -29
  190. package/src/components/otp-input.tsx +2 -0
  191. package/src/lib/i18n/intl-context.tsx +4 -0
  192. package/src/lib/i18n/use-translation.ts +1 -4
  193. package/src/lib/use-composed-event-handlers.ts +25 -0
  194. package/src/lib/use-debounce.ts +289 -237
  195. package/src/lib/use-widgets-invalidator.ts +0 -4
  196. package/src/lib/utils.ts +0 -12
  197. package/src/widgets/api-keys/api-keys-search.tsx +6 -3
  198. package/src/widgets/api-keys/user-api-keys-search.tsx +6 -3
  199. package/src/widgets/organization-switcher/organization-switcher.tsx +32 -8
  200. package/src/widgets/users-management/invite-user-dialog.tsx +9 -11
  201. package/src/widgets/users-management/users-management.tsx +1 -1
  202. package/src/widgets/users-management/users-search.tsx +6 -3
@@ -26,7 +26,7 @@ const ApiKeysSearch = react.forwardRef(function ApiKeysSearch({ className, ...pr
26
26
  type: "FILTER_BY_SEARCH",
27
27
  searchQuery: value
28
28
  });
29
- }, 200);
29
+ }, { wait: 200 });
30
30
  const resetSearch = () => {
31
31
  clearSearch();
32
32
  filter.cancel();
@@ -1 +1 @@
1
- {"version":3,"file":"api-keys-search.cjs","names":["React","useApiKeysSearchContext","useApiKeysContext","useTranslation","useDebouncedCallback","useComposedRefs","cx","namespaceClassName","MagnifyingGlassIcon","IconButton","Cross2Icon"],"sources":["../../../../src/widgets/api-keys/api-keys-search.tsx"],"sourcesContent":["\"use client\";\n\nimport { Cross2Icon, MagnifyingGlassIcon } from \"@radix-ui/react-icons\";\nimport cx from \"clsx\";\nimport * as React from \"react\";\nimport { IconButton, TextField } from \"../../components/elements.js\";\nimport { useComposedRefs } from \"../../lib/compose-refs.js\";\nimport { useTranslation } from \"../../lib/i18n/use-translation.js\";\nimport { useDebouncedCallback } from \"../../lib/use-debounce.js\";\nimport { namespaceClassName } from \"../../lib/widget-dom-props.js\";\nimport { useApiKeysContext } from \"./api-keys-context.js\";\nimport { useApiKeysSearchContext } from \"./api-keys-search-provider.js\";\n\ninterface ApiKeysSearchProps extends TextField.RootProps {}\n\nconst ApiKeysSearch = React.forwardRef<HTMLInputElement, ApiKeysSearchProps>(\n function ApiKeysSearch({ className, ...props }, ref) {\n const { inputRef, clearSearch, searchValue, setSearchValue } =\n useApiKeysSearchContext();\n const { dispatch } = useApiKeysContext();\n const translate = useTranslation();\n\n const filter = useDebouncedCallback((value) => {\n dispatch({ type: \"FILTER_BY_SEARCH\", searchQuery: value });\n }, 200);\n\n const resetSearch = () => {\n clearSearch();\n filter.cancel();\n };\n\n return (\n <TextField.Root\n ref={useComposedRefs(inputRef, ref)}\n className={cx(namespaceClassName(\"api-keys-search\"), className)}\n autoComplete=\"off\"\n placeholder={translate({\n defaultMessage: \"Search by name\",\n id: \"GC8aGI\",\n description: \"Placeholder for API key search input\",\n })}\n value={searchValue}\n onChange={(event) => {\n const value = event.target.value;\n setSearchValue(value);\n filter(value);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n resetSearch();\n }\n }}\n {...props}\n >\n <TextField.Slot side=\"left\">\n <MagnifyingGlassIcon aria-hidden=\"true\" height=\"16\" width=\"16\" />\n </TextField.Slot>\n\n <TextField.Slot side=\"right\">\n {!!searchValue && (\n <IconButton\n size=\"1\"\n onClick={resetSearch}\n title={translate({\n defaultMessage: \"Clear search\",\n id: \"7enwzK\",\n description: \"Title tooltip for clear search button\",\n })}\n >\n <Cross2Icon aria-hidden=\"true\" />\n </IconButton>\n )}\n </TextField.Slot>\n </TextField.Root>\n );\n },\n);\nexport { ApiKeysSearch };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAeA,MAAM,gBAAgBA,MAAM,WAC1B,SAAS,cAAc,EAAE,WAAW,GAAG,SAAS,KAAK;CACnD,MAAM,EAAE,UAAU,aAAa,aAAa,mBAC1CC,kDAAAA,wBAAwB;CAC1B,MAAM,EAAE,aAAaC,0CAAAA,kBAAkB;CACvC,MAAM,YAAYC,iCAAAA,eAAe;CAEjC,MAAM,SAASC,yBAAAA,sBAAsB,UAAU;EAC7C,SAAS;GAAE,MAAM;GAAoB,aAAa;EAAM,CAAC;CAC3D,GAAG,GAAG;CAEN,MAAM,oBAAoB;EACxB,YAAY;EACZ,OAAO,OAAO;CAChB;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,uCAAA,MAAA;EACE,KAAKC,yBAAAA,gBAAgB,UAAU,GAAG;EAClC,YAAA,GAAWC,KAAAA,QAAAA,CAAGC,6BAAAA,mBAAmB,iBAAiB,GAAG,SAAS;EAC9D,cAAa;EACb,aAAa,UAAU;GACrB,gBAAgB;GAChB,IAAI;GACJ,aAAa;EACf,CAAC;EACD,OAAO;EACP,WAAW,UAAU;GACnB,MAAM,QAAQ,MAAM,OAAO;GAC3B,eAAe,KAAK;GACpB,OAAO,KAAK;EACd;EACA,YAAY,UAAU;GACpB,IAAI,MAAM,QAAQ,UAAU;IAC1B,MAAM,eAAe;IACrB,YAAY;GACd;EACF;EACA,GAAI;EArBN,UAAA,CAuBE,iBAAA,GAAA,kBAAA,IAAA,CAAA,uCAAA,MAAA;GAAgB,MAAK;GACnB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,qBAAD;IAAqB,eAAY;IAAO,QAAO;IAAK,OAAM;GAAM,CAAA;EAClD,CAAA,GAEhB,iBAAA,GAAA,kBAAA,IAAA,CAAA,uCAAA,MAAA;GAAgB,MAAK;GAClB,UAAA,CAAC,CAAC,eACD,iBAAA,GAAA,kBAAA,IAAA,CAACC,wCAAAA,YAAD;IACE,MAAK;IACL,SAAS;IACT,OAAO,UAAU;KACf,gBAAgB;KAChB,IAAI;KACJ,aAAa;IACf,CAAC;IAED,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,YAAD,EAAY,eAAY,OAAQ,CAAA;GACtB,CAAA;EAEA,CAAA,CACF;;AAEpB,CACF"}
1
+ {"version":3,"file":"api-keys-search.cjs","names":["React","useApiKeysSearchContext","useApiKeysContext","useTranslation","useDebouncedCallback","useComposedRefs","cx","namespaceClassName","MagnifyingGlassIcon","IconButton","Cross2Icon"],"sources":["../../../../src/widgets/api-keys/api-keys-search.tsx"],"sourcesContent":["\"use client\";\n\nimport { Cross2Icon, MagnifyingGlassIcon } from \"@radix-ui/react-icons\";\nimport cx from \"clsx\";\nimport * as React from \"react\";\nimport { IconButton, TextField } from \"../../components/elements.js\";\nimport { useComposedRefs } from \"../../lib/compose-refs.js\";\nimport { useTranslation } from \"../../lib/i18n/use-translation.js\";\nimport { useDebouncedCallback } from \"../../lib/use-debounce.js\";\nimport { namespaceClassName } from \"../../lib/widget-dom-props.js\";\nimport { useApiKeysContext } from \"./api-keys-context.js\";\nimport { useApiKeysSearchContext } from \"./api-keys-search-provider.js\";\n\ninterface ApiKeysSearchProps extends TextField.RootProps {}\n\nconst ApiKeysSearch = React.forwardRef<HTMLInputElement, ApiKeysSearchProps>(\n function ApiKeysSearch({ className, ...props }, ref) {\n const { inputRef, clearSearch, searchValue, setSearchValue } =\n useApiKeysSearchContext();\n const { dispatch } = useApiKeysContext();\n const translate = useTranslation();\n\n const filter = useDebouncedCallback(\n (value) => {\n dispatch({ type: \"FILTER_BY_SEARCH\", searchQuery: value });\n },\n { wait: 200 },\n );\n\n const resetSearch = () => {\n clearSearch();\n filter.cancel();\n };\n\n return (\n <TextField.Root\n ref={useComposedRefs(inputRef, ref)}\n className={cx(namespaceClassName(\"api-keys-search\"), className)}\n autoComplete=\"off\"\n placeholder={translate({\n defaultMessage: \"Search by name\",\n id: \"GC8aGI\",\n description: \"Placeholder for API key search input\",\n })}\n value={searchValue}\n onChange={(event) => {\n const value = event.target.value;\n setSearchValue(value);\n filter(value);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n resetSearch();\n }\n }}\n {...props}\n >\n <TextField.Slot side=\"left\">\n <MagnifyingGlassIcon aria-hidden=\"true\" height=\"16\" width=\"16\" />\n </TextField.Slot>\n\n <TextField.Slot side=\"right\">\n {!!searchValue && (\n <IconButton\n size=\"1\"\n onClick={resetSearch}\n title={translate({\n defaultMessage: \"Clear search\",\n id: \"7enwzK\",\n description: \"Title tooltip for clear search button\",\n })}\n >\n <Cross2Icon aria-hidden=\"true\" />\n </IconButton>\n )}\n </TextField.Slot>\n </TextField.Root>\n );\n },\n);\nexport { ApiKeysSearch };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAeA,MAAM,gBAAgBA,MAAM,WAC1B,SAAS,cAAc,EAAE,WAAW,GAAG,SAAS,KAAK;CACnD,MAAM,EAAE,UAAU,aAAa,aAAa,mBAC1CC,kDAAAA,wBAAwB;CAC1B,MAAM,EAAE,aAAaC,0CAAAA,kBAAkB;CACvC,MAAM,YAAYC,iCAAAA,eAAe;CAEjC,MAAM,SAASC,yBAAAA,sBACZ,UAAU;EACT,SAAS;GAAE,MAAM;GAAoB,aAAa;EAAM,CAAC;CAC3D,GACA,EAAE,MAAM,IAAI,CACd;CAEA,MAAM,oBAAoB;EACxB,YAAY;EACZ,OAAO,OAAO;CAChB;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,uCAAA,MAAA;EACE,KAAKC,yBAAAA,gBAAgB,UAAU,GAAG;EAClC,YAAA,GAAWC,KAAAA,QAAAA,CAAGC,6BAAAA,mBAAmB,iBAAiB,GAAG,SAAS;EAC9D,cAAa;EACb,aAAa,UAAU;GACrB,gBAAgB;GAChB,IAAI;GACJ,aAAa;EACf,CAAC;EACD,OAAO;EACP,WAAW,UAAU;GACnB,MAAM,QAAQ,MAAM,OAAO;GAC3B,eAAe,KAAK;GACpB,OAAO,KAAK;EACd;EACA,YAAY,UAAU;GACpB,IAAI,MAAM,QAAQ,UAAU;IAC1B,MAAM,eAAe;IACrB,YAAY;GACd;EACF;EACA,GAAI;EArBN,UAAA,CAuBE,iBAAA,GAAA,kBAAA,IAAA,CAAA,uCAAA,MAAA;GAAgB,MAAK;GACnB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,qBAAD;IAAqB,eAAY;IAAO,QAAO;IAAK,OAAM;GAAM,CAAA;EAClD,CAAA,GAEhB,iBAAA,GAAA,kBAAA,IAAA,CAAA,uCAAA,MAAA;GAAgB,MAAK;GAClB,UAAA,CAAC,CAAC,eACD,iBAAA,GAAA,kBAAA,IAAA,CAACC,wCAAAA,YAAD;IACE,MAAK;IACL,SAAS;IACT,OAAO,UAAU;KACf,gBAAgB;KAChB,IAAI;KACJ,aAAa;IACf,CAAC;IAED,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,YAAD,EAAY,eAAY,OAAQ,CAAA;GACtB,CAAA;EAEA,CAAA,CACF;;AAEpB,CACF"}
@@ -26,7 +26,7 @@ const UserApiKeysSearch = react.forwardRef(function UserApiKeysSearch({ classNam
26
26
  type: "FILTER_BY_SEARCH",
27
27
  searchQuery: value
28
28
  });
29
- }, 200);
29
+ }, { wait: 200 });
30
30
  const resetSearch = () => {
31
31
  clearSearch();
32
32
  filter.cancel();
@@ -1 +1 @@
1
- {"version":3,"file":"user-api-keys-search.cjs","names":["React","useUserApiKeysSearchContext","useUserApiKeysContext","useTranslation","useDebouncedCallback","useComposedRefs","cx","namespaceClassName","MagnifyingGlassIcon","IconButton","Cross2Icon"],"sources":["../../../../src/widgets/api-keys/user-api-keys-search.tsx"],"sourcesContent":["\"use client\";\n\nimport { Cross2Icon, MagnifyingGlassIcon } from \"@radix-ui/react-icons\";\nimport cx from \"clsx\";\nimport * as React from \"react\";\nimport { IconButton, TextField } from \"../../components/elements.js\";\nimport { useComposedRefs } from \"../../lib/compose-refs.js\";\nimport { useTranslation } from \"../../lib/i18n/use-translation.js\";\nimport { useDebouncedCallback } from \"../../lib/use-debounce.js\";\nimport { namespaceClassName } from \"../../lib/widget-dom-props.js\";\nimport { useUserApiKeysContext } from \"./user-api-keys-context.js\";\nimport { useUserApiKeysSearchContext } from \"./user-api-keys-search-provider.js\";\n\ninterface UserApiKeysSearchProps extends TextField.RootProps {}\n\nconst UserApiKeysSearch = React.forwardRef<\n HTMLInputElement,\n UserApiKeysSearchProps\n>(function UserApiKeysSearch({ className, ...props }, ref) {\n const { inputRef, clearSearch, searchValue, setSearchValue } =\n useUserApiKeysSearchContext();\n const { dispatch } = useUserApiKeysContext();\n const translate = useTranslation();\n\n const filter = useDebouncedCallback((value) => {\n dispatch({ type: \"FILTER_BY_SEARCH\", searchQuery: value });\n }, 200);\n\n const resetSearch = () => {\n clearSearch();\n filter.cancel();\n };\n\n return (\n <TextField.Root\n ref={useComposedRefs(inputRef, ref)}\n className={cx(namespaceClassName(\"api-keys-search\"), className)}\n autoComplete=\"off\"\n placeholder={translate({\n defaultMessage: \"Search by name\",\n id: \"GC8aGI\",\n description: \"Placeholder for API key search input\",\n })}\n value={searchValue}\n onChange={(event) => {\n const value = event.target.value;\n setSearchValue(value);\n filter(value);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n resetSearch();\n }\n }}\n {...props}\n >\n <TextField.Slot side=\"left\">\n <MagnifyingGlassIcon aria-hidden=\"true\" height=\"16\" width=\"16\" />\n </TextField.Slot>\n\n <TextField.Slot side=\"right\">\n {!!searchValue && (\n <IconButton\n size=\"1\"\n onClick={resetSearch}\n title={translate({\n defaultMessage: \"Clear search\",\n id: \"7enwzK\",\n description: \"Title tooltip for clear search button\",\n })}\n >\n <Cross2Icon aria-hidden=\"true\" />\n </IconButton>\n )}\n </TextField.Slot>\n </TextField.Root>\n );\n});\nexport { UserApiKeysSearch };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAeA,MAAM,oBAAoBA,MAAM,WAG9B,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAS,KAAK;CACzD,MAAM,EAAE,UAAU,aAAa,aAAa,mBAC1CC,uDAAAA,4BAA4B;CAC9B,MAAM,EAAE,aAAaC,+CAAAA,sBAAsB;CAC3C,MAAM,YAAYC,iCAAAA,eAAe;CAEjC,MAAM,SAASC,yBAAAA,sBAAsB,UAAU;EAC7C,SAAS;GAAE,MAAM;GAAoB,aAAa;EAAM,CAAC;CAC3D,GAAG,GAAG;CAEN,MAAM,oBAAoB;EACxB,YAAY;EACZ,OAAO,OAAO;CAChB;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,uCAAA,MAAA;EACE,KAAKC,yBAAAA,gBAAgB,UAAU,GAAG;EAClC,YAAA,GAAWC,KAAAA,QAAAA,CAAGC,6BAAAA,mBAAmB,iBAAiB,GAAG,SAAS;EAC9D,cAAa;EACb,aAAa,UAAU;GACrB,gBAAgB;GAChB,IAAI;GACJ,aAAa;EACf,CAAC;EACD,OAAO;EACP,WAAW,UAAU;GACnB,MAAM,QAAQ,MAAM,OAAO;GAC3B,eAAe,KAAK;GACpB,OAAO,KAAK;EACd;EACA,YAAY,UAAU;GACpB,IAAI,MAAM,QAAQ,UAAU;IAC1B,MAAM,eAAe;IACrB,YAAY;GACd;EACF;EACA,GAAI;EArBN,UAAA,CAuBE,iBAAA,GAAA,kBAAA,IAAA,CAAA,uCAAA,MAAA;GAAgB,MAAK;GACnB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,qBAAD;IAAqB,eAAY;IAAO,QAAO;IAAK,OAAM;GAAM,CAAA;EAClD,CAAA,GAEhB,iBAAA,GAAA,kBAAA,IAAA,CAAA,uCAAA,MAAA;GAAgB,MAAK;GAClB,UAAA,CAAC,CAAC,eACD,iBAAA,GAAA,kBAAA,IAAA,CAACC,wCAAAA,YAAD;IACE,MAAK;IACL,SAAS;IACT,OAAO,UAAU;KACf,gBAAgB;KAChB,IAAI;KACJ,aAAa;IACf,CAAC;IAED,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,YAAD,EAAY,eAAY,OAAQ,CAAA;GACtB,CAAA;EAEA,CAAA,CACF;;AAEpB,CAAC"}
1
+ {"version":3,"file":"user-api-keys-search.cjs","names":["React","useUserApiKeysSearchContext","useUserApiKeysContext","useTranslation","useDebouncedCallback","useComposedRefs","cx","namespaceClassName","MagnifyingGlassIcon","IconButton","Cross2Icon"],"sources":["../../../../src/widgets/api-keys/user-api-keys-search.tsx"],"sourcesContent":["\"use client\";\n\nimport { Cross2Icon, MagnifyingGlassIcon } from \"@radix-ui/react-icons\";\nimport cx from \"clsx\";\nimport * as React from \"react\";\nimport { IconButton, TextField } from \"../../components/elements.js\";\nimport { useComposedRefs } from \"../../lib/compose-refs.js\";\nimport { useTranslation } from \"../../lib/i18n/use-translation.js\";\nimport { useDebouncedCallback } from \"../../lib/use-debounce.js\";\nimport { namespaceClassName } from \"../../lib/widget-dom-props.js\";\nimport { useUserApiKeysContext } from \"./user-api-keys-context.js\";\nimport { useUserApiKeysSearchContext } from \"./user-api-keys-search-provider.js\";\n\ninterface UserApiKeysSearchProps extends TextField.RootProps {}\n\nconst UserApiKeysSearch = React.forwardRef<\n HTMLInputElement,\n UserApiKeysSearchProps\n>(function UserApiKeysSearch({ className, ...props }, ref) {\n const { inputRef, clearSearch, searchValue, setSearchValue } =\n useUserApiKeysSearchContext();\n const { dispatch } = useUserApiKeysContext();\n const translate = useTranslation();\n\n const filter = useDebouncedCallback(\n (value) => {\n dispatch({ type: \"FILTER_BY_SEARCH\", searchQuery: value });\n },\n { wait: 200 },\n );\n\n const resetSearch = () => {\n clearSearch();\n filter.cancel();\n };\n\n return (\n <TextField.Root\n ref={useComposedRefs(inputRef, ref)}\n className={cx(namespaceClassName(\"api-keys-search\"), className)}\n autoComplete=\"off\"\n placeholder={translate({\n defaultMessage: \"Search by name\",\n id: \"GC8aGI\",\n description: \"Placeholder for API key search input\",\n })}\n value={searchValue}\n onChange={(event) => {\n const value = event.target.value;\n setSearchValue(value);\n filter(value);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n resetSearch();\n }\n }}\n {...props}\n >\n <TextField.Slot side=\"left\">\n <MagnifyingGlassIcon aria-hidden=\"true\" height=\"16\" width=\"16\" />\n </TextField.Slot>\n\n <TextField.Slot side=\"right\">\n {!!searchValue && (\n <IconButton\n size=\"1\"\n onClick={resetSearch}\n title={translate({\n defaultMessage: \"Clear search\",\n id: \"7enwzK\",\n description: \"Title tooltip for clear search button\",\n })}\n >\n <Cross2Icon aria-hidden=\"true\" />\n </IconButton>\n )}\n </TextField.Slot>\n </TextField.Root>\n );\n});\nexport { UserApiKeysSearch };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAeA,MAAM,oBAAoBA,MAAM,WAG9B,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAS,KAAK;CACzD,MAAM,EAAE,UAAU,aAAa,aAAa,mBAC1CC,uDAAAA,4BAA4B;CAC9B,MAAM,EAAE,aAAaC,+CAAAA,sBAAsB;CAC3C,MAAM,YAAYC,iCAAAA,eAAe;CAEjC,MAAM,SAASC,yBAAAA,sBACZ,UAAU;EACT,SAAS;GAAE,MAAM;GAAoB,aAAa;EAAM,CAAC;CAC3D,GACA,EAAE,MAAM,IAAI,CACd;CAEA,MAAM,oBAAoB;EACxB,YAAY;EACZ,OAAO,OAAO;CAChB;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,uCAAA,MAAA;EACE,KAAKC,yBAAAA,gBAAgB,UAAU,GAAG;EAClC,YAAA,GAAWC,KAAAA,QAAAA,CAAGC,6BAAAA,mBAAmB,iBAAiB,GAAG,SAAS;EAC9D,cAAa;EACb,aAAa,UAAU;GACrB,gBAAgB;GAChB,IAAI;GACJ,aAAa;EACf,CAAC;EACD,OAAO;EACP,WAAW,UAAU;GACnB,MAAM,QAAQ,MAAM,OAAO;GAC3B,eAAe,KAAK;GACpB,OAAO,KAAK;EACd;EACA,YAAY,UAAU;GACpB,IAAI,MAAM,QAAQ,UAAU;IAC1B,MAAM,eAAe;IACrB,YAAY;GACd;EACF;EACA,GAAI;EArBN,UAAA,CAuBE,iBAAA,GAAA,kBAAA,IAAA,CAAA,uCAAA,MAAA;GAAgB,MAAK;GACnB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,qBAAD;IAAqB,eAAY;IAAO,QAAO;IAAK,OAAM;GAAM,CAAA;EAClD,CAAA,GAEhB,iBAAA,GAAA,kBAAA,IAAA,CAAA,uCAAA,MAAA;GAAgB,MAAK;GAClB,UAAA,CAAC,CAAC,eACD,iBAAA,GAAA,kBAAA,IAAA,CAACC,wCAAAA,YAAD;IACE,MAAK;IACL,SAAS;IACT,OAAO,UAAU;KACf,gBAAgB;KAChB,IAAI;KACJ,aAAa;IACf,CAAC;IAED,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,YAAD,EAAY,eAAY,OAAQ,CAAA;GACtB,CAAA;EAEA,CAAA,CACF;;AAEpB,CAAC"}
@@ -21,7 +21,21 @@ let _radix_ui_themes_components_dropdown_menu = require("@radix-ui/themes/compon
21
21
  const OrganizationSwitcher = ({ organizations, switchToOrganization, variant, organizationLabel = "Organizations", truncateBehavior = "right", children, ...domProps }) => {
22
22
  const currentOrganization = organizations.find((organization) => organization.isCurrent);
23
23
  const invalidateAllWidgets = require_lib_use_widgets_invalidator.useWidgetsInvalidator();
24
- if (!currentOrganization) return null;
24
+ const translate = require_lib_i18n_use_translation.useTranslation();
25
+ if (organizations.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OrganizationSwitcherError, {
26
+ variant,
27
+ ...domProps,
28
+ message: translate({
29
+ id: "XimGbo",
30
+ defaultMessage: "No organizations found",
31
+ description: "Shown in the disabled organization switcher when the user belongs to no organizations"
32
+ })
33
+ });
34
+ const currentOrganizationName = currentOrganization?.name ?? translate({
35
+ id: "aZ7eyn",
36
+ defaultMessage: "Select an organization",
37
+ description: "Placeholder in the organization switcher trigger when the user has organizations but none is active"
38
+ });
25
39
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_themes_components_dropdown_menu.Root, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_themes_components_dropdown_menu.Trigger, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_elements_button.Button, {
26
40
  variant: "secondary",
27
41
  ...mapVariantProps(variant),
@@ -37,7 +51,7 @@ const OrganizationSwitcher = ({ organizations, switchToOrganization, variant, or
37
51
  overflow: "hidden",
38
52
  minWidth: "0",
39
53
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TruncatedOrganizationName, {
40
- organizationName: currentOrganization.name,
54
+ organizationName: currentOrganizationName,
41
55
  truncateBehavior
42
56
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_themes.Flex, {
43
57
  asChild: true,
@@ -52,7 +66,7 @@ const OrganizationSwitcher = ({ organizations, switchToOrganization, variant, or
52
66
  minWidth: "180px",
53
67
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_elements_dropdown_menu.Item, {
54
68
  onClick: () => {
55
- if (organization.id !== currentOrganization.id) {
69
+ if (!currentOrganization || organization.id !== currentOrganization.id) {
56
70
  const result = switchToOrganization({ organizationId: organization.id });
57
71
  if (require_lib_utils.isPromiseLike(result)) result.then(invalidateAllWidgets);
58
72
  else invalidateAllWidgets();
@@ -105,9 +119,9 @@ const OrganizationSwitcherLoading = ({ variant, ...props }) => {
105
119
  })
106
120
  });
107
121
  };
108
- const OrganizationSwitcherError = ({ error, variant, ...domProps }) => {
122
+ const OrganizationSwitcherError = ({ error, variant, message, ...domProps }) => {
109
123
  const translate = require_lib_i18n_use_translation.useTranslation();
110
- const { heading } = require_components_generic_error.getErrorMessage(error, translate);
124
+ const heading = message || require_components_generic_error.getErrorMessage(error, translate).heading;
111
125
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_elements_button.Button, {
112
126
  variant: "secondary",
113
127
  disabled: true,
@@ -1 +1 @@
1
- {"version":3,"file":"organization-switcher.cjs","names":["useWidgetsInvalidator","Button","cx","Flex","Text","isPromiseLike","VisuallyHidden","Translation","CheckIcon","Box","Skeleton","ChevronDownIcon","useTranslation","getErrorMessage","getWidgetDomProps"],"sources":["../../../../src/widgets/organization-switcher/organization-switcher.tsx"],"sourcesContent":["\"use client\";\n\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport {\n Box,\n ChevronDownIcon,\n Flex,\n Text,\n VisuallyHidden,\n} from \"@radix-ui/themes\";\nimport cx from \"clsx\";\nimport type { ListUserOrganizationsQuery } from \"../../api/client-graphql/generated.js\";\nimport { Button, DropdownMenu, Skeleton } from \"../../components/elements.js\";\nimport type { ButtonProps } from \"../../components/elements.js\";\nimport { getErrorMessage } from \"../../components/generic-error.js\";\nimport { Translation } from \"../../lib/i18n/translation.js\";\nimport { useTranslation } from \"../../lib/i18n/use-translation.js\";\nimport { useWidgetsInvalidator } from \"../../lib/use-widgets-invalidator.js\";\nimport { isPromiseLike } from \"../../lib/utils.js\";\nimport { getWidgetDomProps } from \"../../lib/widget-dom-props.js\";\nimport type {\n WidgetRootDomProps,\n WidgetRootState,\n} from \"../../lib/widget-types.js\";\n\ntype OrganizationSwitcherVariant = \"ghost\" | \"outline\";\n\n// Rename all uses of `org` to `organization`\ninterface OrganizationSwitcherPassthroughProps extends WidgetRootDomProps {\n switchToOrganization: ({\n organizationId,\n }: {\n organizationId: string;\n }) => void | Promise<void>;\n // Simple props to affect the overall style\n variant?: OrganizationSwitcherVariant;\n organizationLabel?: string | null;\n children?: React.ReactNode;\n /**\n * Choose where to truncate organization name in the trigger and dropdown\n * items.\n *\n * - `right`: Truncate the right side of the organization name\n * - `middle`: Truncate the middle of the organization name, trying to keep\n * words whole\n */\n truncateBehavior?: \"right\" | \"middle\";\n}\n\ntype UserOrganization = ListUserOrganizationsQuery[\"organizations\"][number];\n\ninterface OrganizationSwitcherProps extends OrganizationSwitcherPassthroughProps {\n organizations: UserOrganization[];\n}\n\nconst OrganizationSwitcher: React.FC<OrganizationSwitcherProps> = ({\n organizations,\n switchToOrganization,\n variant,\n organizationLabel = \"Organizations\",\n truncateBehavior = \"right\",\n children,\n ...domProps\n}) => {\n const currentOrganization = organizations.find(\n (organization) => organization.isCurrent,\n );\n const invalidateAllWidgets = useWidgetsInvalidator();\n\n // TODO: Possible if the user has no organizations - we should figure out what\n // to do in this case\n if (!currentOrganization) {\n return null;\n }\n\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button\n variant=\"secondary\"\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"resolved\", {\n ...domProps,\n // TODO(v2): Remove `OrganizationSwitcherTrigger` in the next major\n // version. This should follow conventions of all other widgets\n // using classnames in getWidgetRootDomProps.\n className: cx(domProps.className, \"OrganizationSwitcherTrigger\"),\n })}\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"2\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n minWidth=\"0\"\n >\n <TruncatedOrganizationName\n organizationName={currentOrganization.name}\n truncateBehavior={truncateBehavior}\n />\n <Flex asChild flexShrink=\"0\">\n <DropdownMenu.TriggerIcon />\n </Flex>\n </Flex>\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Group>\n {organizationLabel ? (\n <DropdownMenu.Label>\n <Text>{organizationLabel}</Text>\n </DropdownMenu.Label>\n ) : null}\n {organizations.map((organization) => (\n <Flex\n key={organization.id}\n asChild\n pr=\"2\"\n maxWidth=\"280px\"\n minWidth=\"180px\"\n >\n <DropdownMenu.Item\n onClick={() => {\n if (organization.id !== currentOrganization.id) {\n const result = switchToOrganization({\n organizationId: organization.id,\n });\n if (isPromiseLike(result)) {\n result.then(invalidateAllWidgets);\n } else {\n invalidateAllWidgets();\n }\n }\n }}\n >\n <Flex\n justify=\"between\"\n align=\"center\"\n gap=\"4\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n >\n <TruncatedOrganizationName\n organizationName={organization.name}\n truncateBehavior={truncateBehavior}\n />\n {organization.isCurrent && (\n <VisuallyHidden>\n <Translation\n defaultMessage=\"(current)\"\n id=\"daFXTP\"\n description=\"Label for screen readers indicating current organization\"\n />\n </VisuallyHidden>\n )}\n <Flex\n aria-hidden\n align=\"center\"\n justify=\"center\"\n flexShrink=\"0\"\n >\n {organization.isCurrent ? (\n <CheckIcon width=\"18px\" height=\"18px\" />\n ) : (\n // make the extra space for\n <Box width=\"18px\" height=\"18px\" />\n )}\n </Flex>\n </Flex>\n </DropdownMenu.Item>\n </Flex>\n ))}\n </DropdownMenu.Group>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n\ninterface OrganizationSwitcherLoadingProps extends WidgetRootDomProps {\n variant?: OrganizationSwitcherVariant;\n}\n\nconst OrganizationSwitcherLoading: React.FC<\n OrganizationSwitcherLoadingProps\n> = ({ variant, ...props }: OrganizationSwitcherLoadingProps) => {\n return (\n // Always need DropdownMenu.Root to wrap children than may include\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"loading\", props)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Skeleton>\n {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}\n <Text>Loading...</Text>\n </Skeleton>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n};\n\ninterface OrganizationSwitcherErrorProps extends WidgetRootDomProps {\n error: unknown;\n variant?: OrganizationSwitcherVariant;\n}\n\nconst OrganizationSwitcherError: React.FC<OrganizationSwitcherErrorProps> = ({\n error,\n variant,\n ...domProps\n}) => {\n const translate = useTranslation();\n const { heading } = getErrorMessage(error, translate);\n\n return (\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"error\", domProps)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Text>{heading}</Text>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n};\n\nconst MAX_TRUNCATED_SUFFIX_LENGTH = 10;\nconst MIN_TRUNCATED_SUFFIX_LENGTH = 3;\n\nconst WHITE_SPACE_REGEX = /\\s/;\n\nconst getSplitPosition = (organizationName: string) => {\n if (organizationName.length <= MAX_TRUNCATED_SUFFIX_LENGTH) {\n return organizationName.length;\n }\n\n for (\n let i = organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n i < organizationName.length - MIN_TRUNCATED_SUFFIX_LENGTH;\n i++\n ) {\n if (WHITE_SPACE_REGEX.test(organizationName[i - 1])) {\n return i;\n }\n }\n\n return organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n};\n\nconst splitOrganizationName = (organizationName: string) => {\n const splitPosition = getSplitPosition(organizationName);\n return [\n organizationName.slice(0, splitPosition),\n organizationName.slice(splitPosition),\n ];\n};\n\ninterface TruncatedOrganizationNameProps {\n organizationName: string;\n truncateBehavior: \"right\" | \"middle\";\n}\n\nconst TruncatedOrganizationName: React.FC<TruncatedOrganizationNameProps> = ({\n organizationName,\n truncateBehavior,\n}) => {\n if (truncateBehavior === \"right\") {\n return <Text truncate>{organizationName}</Text>;\n }\n\n const [organizationNameLeft, organizationNameRight] =\n splitOrganizationName(organizationName);\n\n return (\n <Flex overflow=\"hidden\">\n <VisuallyHidden>\n <Text>{organizationName}</Text>\n </VisuallyHidden>\n <Text aria-hidden truncate style={{ whiteSpace: \"pre\" }}>\n {organizationNameLeft}\n </Text>\n <Text aria-hidden>{organizationNameRight}</Text>\n </Flex>\n );\n};\n\nfunction mapVariantProps(variant?: OrganizationSwitcherVariant): ButtonProps {\n const variantProps: ButtonProps = {};\n // Passing `undefined` to the variant prop will result in overrides to props we\n // set internally. This should be addressed in Radix Themes, but we can\n // explicitly set it only when it's provided and _not_ undefined.\n if (variant) {\n variantProps.unsafe_radixVariant = variant;\n }\n return variantProps;\n}\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getWidgetDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"organization-switcher\",\n widgetState: state,\n });\n}\nexport type {\n OrganizationSwitcherLoadingProps,\n OrganizationSwitcherErrorProps,\n OrganizationSwitcherPassthroughProps,\n UserOrganization,\n};\nexport {\n OrganizationSwitcher,\n OrganizationSwitcherLoading,\n OrganizationSwitcherError,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"organization-switcher.cjs","names":["useWidgetsInvalidator","useTranslation","Button","cx","Flex","Text","isPromiseLike","VisuallyHidden","Translation","CheckIcon","Box","Skeleton","ChevronDownIcon","getErrorMessage","getWidgetDomProps"],"sources":["../../../../src/widgets/organization-switcher/organization-switcher.tsx"],"sourcesContent":["\"use client\";\n\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport {\n Box,\n ChevronDownIcon,\n Flex,\n Text,\n VisuallyHidden,\n} from \"@radix-ui/themes\";\nimport cx from \"clsx\";\nimport type { ListUserOrganizationsQuery } from \"../../api/client-graphql/generated.js\";\nimport { Button, DropdownMenu, Skeleton } from \"../../components/elements.js\";\nimport type { ButtonProps } from \"../../components/elements.js\";\nimport { getErrorMessage } from \"../../components/generic-error.js\";\nimport { Translation } from \"../../lib/i18n/translation.js\";\nimport { useTranslation } from \"../../lib/i18n/use-translation.js\";\nimport { useWidgetsInvalidator } from \"../../lib/use-widgets-invalidator.js\";\nimport { isPromiseLike } from \"../../lib/utils.js\";\nimport { getWidgetDomProps } from \"../../lib/widget-dom-props.js\";\nimport type {\n WidgetRootDomProps,\n WidgetRootState,\n} from \"../../lib/widget-types.js\";\n\ntype OrganizationSwitcherVariant = \"ghost\" | \"outline\";\n\n// Rename all uses of `org` to `organization`\ninterface OrganizationSwitcherPassthroughProps extends WidgetRootDomProps {\n switchToOrganization: ({\n organizationId,\n }: {\n organizationId: string;\n }) => void | Promise<void>;\n // Simple props to affect the overall style\n variant?: OrganizationSwitcherVariant;\n organizationLabel?: string | null;\n children?: React.ReactNode;\n /**\n * Choose where to truncate organization name in the trigger and dropdown\n * items.\n *\n * - `right`: Truncate the right side of the organization name\n * - `middle`: Truncate the middle of the organization name, trying to keep\n * words whole\n */\n truncateBehavior?: \"right\" | \"middle\";\n}\n\ntype UserOrganization = ListUserOrganizationsQuery[\"organizations\"][number];\n\ninterface OrganizationSwitcherProps extends OrganizationSwitcherPassthroughProps {\n organizations: UserOrganization[];\n}\n\nconst OrganizationSwitcher: React.FC<OrganizationSwitcherProps> = ({\n organizations,\n switchToOrganization,\n variant,\n organizationLabel = \"Organizations\",\n truncateBehavior = \"right\",\n children,\n ...domProps\n}) => {\n const currentOrganization = organizations.find(\n (organization) => organization.isCurrent,\n );\n const invalidateAllWidgets = useWidgetsInvalidator();\n const translate = useTranslation();\n\n if (organizations.length === 0) {\n return (\n <OrganizationSwitcherError\n variant={variant}\n {...domProps}\n message={translate({\n id: \"XimGbo\",\n defaultMessage: \"No organizations found\",\n description:\n \"Shown in the disabled organization switcher when the user belongs to no organizations\",\n })}\n />\n );\n }\n\n const currentOrganizationName =\n currentOrganization?.name ??\n translate({\n id: \"aZ7eyn\",\n defaultMessage: \"Select an organization\",\n description:\n \"Placeholder in the organization switcher trigger when the user has organizations but none is active\",\n });\n\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button\n variant=\"secondary\"\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"resolved\", {\n ...domProps,\n // TODO(v2): Remove `OrganizationSwitcherTrigger` in the next major\n // version. This should follow conventions of all other widgets\n // using classnames in getWidgetRootDomProps.\n className: cx(domProps.className, \"OrganizationSwitcherTrigger\"),\n })}\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"2\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n minWidth=\"0\"\n >\n <TruncatedOrganizationName\n organizationName={currentOrganizationName}\n truncateBehavior={truncateBehavior}\n />\n <Flex asChild flexShrink=\"0\">\n <DropdownMenu.TriggerIcon />\n </Flex>\n </Flex>\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Group>\n {organizationLabel ? (\n <DropdownMenu.Label>\n <Text>{organizationLabel}</Text>\n </DropdownMenu.Label>\n ) : null}\n {organizations.map((organization) => (\n <Flex\n key={organization.id}\n asChild\n pr=\"2\"\n maxWidth=\"280px\"\n minWidth=\"180px\"\n >\n <DropdownMenu.Item\n onClick={() => {\n if (\n !currentOrganization ||\n organization.id !== currentOrganization.id\n ) {\n const result = switchToOrganization({\n organizationId: organization.id,\n });\n if (isPromiseLike(result)) {\n result.then(invalidateAllWidgets);\n } else {\n invalidateAllWidgets();\n }\n }\n }}\n >\n <Flex\n justify=\"between\"\n align=\"center\"\n gap=\"4\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n >\n <TruncatedOrganizationName\n organizationName={organization.name}\n truncateBehavior={truncateBehavior}\n />\n {organization.isCurrent && (\n <VisuallyHidden>\n <Translation\n defaultMessage=\"(current)\"\n id=\"daFXTP\"\n description=\"Label for screen readers indicating current organization\"\n />\n </VisuallyHidden>\n )}\n <Flex\n aria-hidden\n align=\"center\"\n justify=\"center\"\n flexShrink=\"0\"\n >\n {organization.isCurrent ? (\n <CheckIcon width=\"18px\" height=\"18px\" />\n ) : (\n // make the extra space for\n <Box width=\"18px\" height=\"18px\" />\n )}\n </Flex>\n </Flex>\n </DropdownMenu.Item>\n </Flex>\n ))}\n </DropdownMenu.Group>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n\ninterface OrganizationSwitcherLoadingProps extends WidgetRootDomProps {\n variant?: OrganizationSwitcherVariant;\n}\n\nconst OrganizationSwitcherLoading: React.FC<\n OrganizationSwitcherLoadingProps\n> = ({ variant, ...props }: OrganizationSwitcherLoadingProps) => {\n return (\n // Always need DropdownMenu.Root to wrap children than may include\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"loading\", props)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Skeleton>\n {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}\n <Text>Loading...</Text>\n </Skeleton>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n};\n\ninterface OrganizationSwitcherErrorProps extends WidgetRootDomProps {\n error?: unknown;\n message?: string;\n variant?: OrganizationSwitcherVariant;\n}\n\nconst OrganizationSwitcherError: React.FC<OrganizationSwitcherErrorProps> = ({\n error,\n variant,\n message,\n ...domProps\n}) => {\n const translate = useTranslation();\n const heading = message || getErrorMessage(error, translate).heading;\n\n return (\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"error\", domProps)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Text>{heading}</Text>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n};\n\nconst MAX_TRUNCATED_SUFFIX_LENGTH = 10;\nconst MIN_TRUNCATED_SUFFIX_LENGTH = 3;\n\nconst WHITE_SPACE_REGEX = /\\s/;\n\nconst getSplitPosition = (organizationName: string) => {\n if (organizationName.length <= MAX_TRUNCATED_SUFFIX_LENGTH) {\n return organizationName.length;\n }\n\n for (\n let i = organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n i < organizationName.length - MIN_TRUNCATED_SUFFIX_LENGTH;\n i++\n ) {\n if (WHITE_SPACE_REGEX.test(organizationName[i - 1])) {\n return i;\n }\n }\n\n return organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n};\n\nconst splitOrganizationName = (organizationName: string) => {\n const splitPosition = getSplitPosition(organizationName);\n return [\n organizationName.slice(0, splitPosition),\n organizationName.slice(splitPosition),\n ];\n};\n\ninterface TruncatedOrganizationNameProps {\n organizationName: string;\n truncateBehavior: \"right\" | \"middle\";\n}\n\nconst TruncatedOrganizationName: React.FC<TruncatedOrganizationNameProps> = ({\n organizationName,\n truncateBehavior,\n}) => {\n if (truncateBehavior === \"right\") {\n return <Text truncate>{organizationName}</Text>;\n }\n\n const [organizationNameLeft, organizationNameRight] =\n splitOrganizationName(organizationName);\n\n return (\n <Flex overflow=\"hidden\">\n <VisuallyHidden>\n <Text>{organizationName}</Text>\n </VisuallyHidden>\n <Text aria-hidden truncate style={{ whiteSpace: \"pre\" }}>\n {organizationNameLeft}\n </Text>\n <Text aria-hidden>{organizationNameRight}</Text>\n </Flex>\n );\n};\n\nfunction mapVariantProps(variant?: OrganizationSwitcherVariant): ButtonProps {\n const variantProps: ButtonProps = {};\n // Passing `undefined` to the variant prop will result in overrides to props we\n // set internally. This should be addressed in Radix Themes, but we can\n // explicitly set it only when it's provided and _not_ undefined.\n if (variant) {\n variantProps.unsafe_radixVariant = variant;\n }\n return variantProps;\n}\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getWidgetDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"organization-switcher\",\n widgetState: state,\n });\n}\nexport type {\n OrganizationSwitcherLoadingProps,\n OrganizationSwitcherErrorProps,\n OrganizationSwitcherPassthroughProps,\n UserOrganization,\n};\nexport {\n OrganizationSwitcher,\n OrganizationSwitcherLoading,\n OrganizationSwitcherError,\n};\n"],"mappings":"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"}
@@ -29,7 +29,8 @@ interface OrganizationSwitcherLoadingProps extends WidgetRootDomProps {
29
29
  }
30
30
  declare const OrganizationSwitcherLoading: React.FC<OrganizationSwitcherLoadingProps>;
31
31
  interface OrganizationSwitcherErrorProps extends WidgetRootDomProps {
32
- error: unknown;
32
+ error?: unknown;
33
+ message?: string;
33
34
  variant?: OrganizationSwitcherVariant;
34
35
  }
35
36
  declare const OrganizationSwitcherError: React.FC<OrganizationSwitcherErrorProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"organization-switcher.d.cts","names":[],"sources":["../../../../src/widgets/organization-switcher/organization-switcher.tsx"],"mappings":";;;KAyBK;UAGK,6CAA6C;EACrD,yBACE;IAEA;eACW;EAEb,UAAU;EACV;EACA,WAAW,MAAM;;;;;;;;;EASjB;;KAGG,mBAAmB;UAEd,kCAAkC;EAC1C,eAAe;;cAGX,sBAAsB,MAAM,GAAG;UA6H3B,yCAAyC;EACjD,UAAU;;cAGN,6BAA6B,MAAM,GACvC;UAqBQ,uCAAuC;EAC/C;EACA,UAAU;;cAGN,2BAA2B,MAAM,GAAG"}
1
+ {"version":3,"file":"organization-switcher.d.cts","names":[],"sources":["../../../../src/widgets/organization-switcher/organization-switcher.tsx"],"mappings":";;;KAyBK;UAGK,6CAA6C;EACrD,yBACE;IAEA;eACW;EAEb,UAAU;EACV;EACA,WAAW,MAAM;;;;;;;;;EASjB;;KAGG,mBAAmB;UAEd,kCAAkC;EAC1C,eAAe;;cAGX,sBAAsB,MAAM,GAAG;UAmJ3B,yCAAyC;EACjD,UAAU;;cAGN,6BAA6B,MAAM,GACvC;UAqBQ,uCAAuC;EAC/C;EACA;EACA,UAAU;;cAGN,2BAA2B,MAAM,GAAG"}
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_lib_widget_dom_props = require("../../lib/widget-dom-props.cjs");
4
+ const require_api_client_graphql_query_keys = require("../../api/client-graphql/query-keys.cjs");
4
5
  const require_api_errors = require("../../api/errors.cjs");
5
6
  const require_api_client_graphql_client = require("../../api/client-graphql/client.cjs");
6
7
  const require_api_client_graphql_hooks = require("../../api/client-graphql/hooks.cjs");
@@ -119,7 +120,7 @@ const useAuthorizeConnection = (owner) => {
119
120
  };
120
121
  function useAuthKitOrigin() {
121
122
  return require_api_client_graphql_hooks.useClientGraphqlQuery({
122
- queryKey: require_api_client_graphql_hooks.clientGraphqlQueryKey("AuthKitSettings"),
123
+ queryKey: require_api_client_graphql_query_keys.clientGraphqlQueryKey("AuthKitSettings"),
123
124
  queryFn: (sdk) => sdk.AuthKitSettings()
124
125
  }).data?.authkitSettings.origin ?? "";
125
126
  }
@@ -448,7 +449,7 @@ const LogoSeparator = () => {
448
449
  */
449
450
  const ConnectDialogHeader = ({ integration }) => {
450
451
  const branding = require_api_client_graphql_hooks.useClientGraphqlQuery({
451
- queryKey: require_api_client_graphql_hooks.clientGraphqlQueryKey("Branding"),
452
+ queryKey: require_api_client_graphql_query_keys.clientGraphqlQueryKey("Branding"),
452
453
  queryFn: (sdk) => sdk.Branding()
453
454
  });
454
455
  const logo = branding.data?.branding.logoDarkPath ?? branding.data?.branding.logoLightPath;