@eventcatalog/core 3.0.0-beta.9 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.md +41 -98
  2. package/dist/__mocks__/astro-content.cjs +32 -0
  3. package/dist/__mocks__/astro-content.d.cts +13 -0
  4. package/dist/__mocks__/astro-content.d.ts +13 -0
  5. package/dist/__mocks__/astro-content.js +7 -0
  6. package/dist/analytics/analytics.cjs +1 -1
  7. package/dist/analytics/analytics.js +2 -2
  8. package/dist/analytics/log-build.cjs +1 -1
  9. package/dist/analytics/log-build.js +3 -3
  10. package/dist/catalog-to-astro-content-directory.cjs +2 -19
  11. package/dist/catalog-to-astro-content-directory.d.cts +1 -2
  12. package/dist/catalog-to-astro-content-directory.d.ts +1 -2
  13. package/dist/catalog-to-astro-content-directory.js +3 -5
  14. package/dist/{chunk-RAJ7TGWN.js → chunk-2WGZFERB.js} +1 -1
  15. package/dist/{chunk-R2BJ7MJG.js → chunk-6Z6ARMQS.js} +1 -17
  16. package/dist/{chunk-TC3R47V6.js → chunk-ESUL7UE6.js} +1 -1
  17. package/dist/{chunk-2VPX4WIJ.js → chunk-I3CW5KQI.js} +1 -1
  18. package/dist/{chunk-TT4LZO2Q.js → chunk-KBO4IL2D.js} +1 -1
  19. package/dist/{chunk-A4MGWK5T.js → chunk-URR33SNK.js} +1 -1
  20. package/dist/constants.cjs +1 -1
  21. package/dist/constants.js +1 -1
  22. package/dist/eventcatalog.cjs +20 -64
  23. package/dist/eventcatalog.config.d.cts +11 -0
  24. package/dist/eventcatalog.config.d.ts +11 -0
  25. package/dist/eventcatalog.js +26 -52
  26. package/dist/generate.cjs +1 -1
  27. package/dist/generate.js +3 -3
  28. package/dist/utils/cli-logger.cjs +1 -1
  29. package/dist/utils/cli-logger.js +2 -2
  30. package/eventcatalog/astro.config.mjs +4 -1
  31. package/eventcatalog/integrations/eventcatalog-features.ts +69 -0
  32. package/eventcatalog/public/icons/asyncapi-black.svg +2 -0
  33. package/eventcatalog/public/icons/graphql-black.svg +1 -0
  34. package/eventcatalog/public/icons/openapi-black.svg +1 -0
  35. package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +1010 -0
  36. package/eventcatalog/src/components/ChatPanel/ChatPanelButton.tsx +24 -0
  37. package/eventcatalog/src/components/Checkbox.astro +7 -4
  38. package/eventcatalog/src/components/CopyAsMarkdown.tsx +15 -15
  39. package/eventcatalog/src/components/EnvironmentDropdown.tsx +15 -7
  40. package/eventcatalog/src/components/FavoriteButton.tsx +1 -1
  41. package/eventcatalog/src/components/Grids/DomainGrid.tsx +322 -173
  42. package/eventcatalog/src/components/Grids/MessageGrid.tsx +317 -178
  43. package/eventcatalog/src/components/Grids/specification-utils.ts +106 -0
  44. package/eventcatalog/src/components/Header.astro +40 -15
  45. package/eventcatalog/src/components/Lists/OwnersList.tsx +17 -10
  46. package/eventcatalog/src/components/Lists/PillListFlat.styles.css +12 -0
  47. package/eventcatalog/src/components/Lists/PillListFlat.tsx +15 -15
  48. package/eventcatalog/src/components/Lists/VersionList.astro +15 -5
  49. package/eventcatalog/src/components/MDX/Accordion/Accordion.tsx +3 -3
  50. package/eventcatalog/src/components/MDX/Admonition.tsx +49 -9
  51. package/eventcatalog/src/components/MDX/Attachments.astro +15 -11
  52. package/eventcatalog/src/components/MDX/ChannelInformation/ChannelInformation.tsx +29 -15
  53. package/eventcatalog/src/components/MDX/EntityPropertiesTable/EntityPropertiesTable.astro +20 -13
  54. package/eventcatalog/src/components/MDX/Link/Link.astro +1 -1
  55. package/eventcatalog/src/components/MDX/MessageTable/MessageTable.client.tsx +50 -29
  56. package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.tsx +28 -15
  57. package/eventcatalog/src/components/MDX/NodeGraph/StepWalkthrough.tsx +4 -4
  58. package/eventcatalog/src/components/MDX/NodeGraph/StudioModal.tsx +4 -4
  59. package/eventcatalog/src/components/MDX/NodeGraph/VisualiserSearch.tsx +2 -2
  60. package/eventcatalog/src/components/MDX/ResourceGroupTable/ResourceGroupTable.client.tsx +54 -33
  61. package/eventcatalog/src/components/MDX/ResourceLink/ResourceLink.astro +1 -1
  62. package/eventcatalog/src/components/MDX/Steps/Step.astro +2 -2
  63. package/eventcatalog/src/components/MDX/Steps/Steps.astro +3 -3
  64. package/eventcatalog/src/components/MDX/Tabs/Tabs.astro +13 -9
  65. package/eventcatalog/src/components/MDX/Tiles/Tile.astro +25 -13
  66. package/eventcatalog/src/components/MDX/Tiles/Tiles.astro +1 -1
  67. package/eventcatalog/src/components/SchemaExplorer/ApiAccessSection.tsx +95 -90
  68. package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +144 -0
  69. package/eventcatalog/src/components/SchemaExplorer/AvroSchemaViewer.tsx +29 -25
  70. package/eventcatalog/src/components/SchemaExplorer/DiffViewer.tsx +3 -3
  71. package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.tsx +61 -42
  72. package/eventcatalog/src/components/SchemaExplorer/OwnersSection.tsx +13 -9
  73. package/eventcatalog/src/components/SchemaExplorer/Pagination.tsx +36 -8
  74. package/eventcatalog/src/components/SchemaExplorer/ProducersConsumersSection.tsx +17 -13
  75. package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +37 -10
  76. package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsHeader.tsx +152 -109
  77. package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsPanel.tsx +6 -15
  78. package/eventcatalog/src/components/SchemaExplorer/SchemaExplorer.tsx +257 -61
  79. package/eventcatalog/src/components/SchemaExplorer/SchemaFilters.tsx +64 -126
  80. package/eventcatalog/src/components/SchemaExplorer/SchemaListItem.tsx +53 -43
  81. package/eventcatalog/src/components/SchemaExplorer/SchemaViewerModal.tsx +8 -8
  82. package/eventcatalog/src/components/Search/Search.astro +5 -5
  83. package/eventcatalog/src/components/Search/SearchDataLoader.astro +25 -0
  84. package/eventcatalog/src/components/Search/SearchModal.tsx +65 -36
  85. package/eventcatalog/src/components/SideNav/NestedSideBar/SearchBar.tsx +37 -24
  86. package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +117 -56
  87. package/eventcatalog/src/components/SideNav/SideNav.astro +0 -15
  88. package/eventcatalog/src/components/Tables/Table.tsx +97 -77
  89. package/eventcatalog/src/components/Tables/columns/ContainersTableColumns.tsx +114 -74
  90. package/eventcatalog/src/components/Tables/columns/DomainTableColumns.tsx +77 -55
  91. package/eventcatalog/src/components/Tables/columns/FlowTableColumns.tsx +36 -36
  92. package/eventcatalog/src/components/Tables/columns/MessageTableColumns.tsx +116 -77
  93. package/eventcatalog/src/components/Tables/columns/ServiceTableColumns.tsx +111 -94
  94. package/eventcatalog/src/components/Tables/columns/SharedColumns.tsx +31 -26
  95. package/eventcatalog/src/components/Tables/columns/TeamsTableColumns.tsx +123 -215
  96. package/eventcatalog/src/components/Tables/columns/UserTableColumns.tsx +156 -243
  97. package/eventcatalog/src/components/ThemeToggle.tsx +18 -0
  98. package/eventcatalog/src/content.config.ts +1 -13
  99. package/eventcatalog/src/enterprise/ai/chat-api.ts +360 -0
  100. package/eventcatalog/src/enterprise/auth/[...auth].ts +3 -0
  101. package/eventcatalog/src/enterprise/auth/login.astro +420 -0
  102. package/eventcatalog/src/enterprise/collections/index.ts +0 -1
  103. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/components/NestedItem.tsx +15 -7
  104. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/components/NoResultsFound.tsx +2 -2
  105. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/index.tsx +19 -15
  106. package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/index.astro +50 -17
  107. package/eventcatalog/src/layouts/DirectoryLayout.astro +11 -6
  108. package/eventcatalog/src/layouts/DiscoverLayout.astro +13 -8
  109. package/eventcatalog/src/layouts/Footer.astro +14 -11
  110. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +187 -123
  111. package/eventcatalog/src/pages/_index.astro +213 -573
  112. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.ts +8 -2
  113. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +9 -5
  114. package/eventcatalog/src/pages/directory/[type]/index.astro +6 -0
  115. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +19 -3
  116. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +7 -7
  117. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +5 -5
  118. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +81 -64
  119. package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +23 -24
  120. package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +214 -125
  121. package/eventcatalog/src/pages/docs/custom/index.astro +2 -2
  122. package/eventcatalog/src/pages/docs/teams/[id]/index.astro +98 -70
  123. package/eventcatalog/src/pages/docs/teams/[id].mdx.ts +36 -0
  124. package/eventcatalog/src/pages/docs/users/[id]/index.astro +60 -45
  125. package/eventcatalog/src/pages/docs/users/[id].mdx.ts +36 -0
  126. package/eventcatalog/src/pages/schemas/explorer/_index.data.ts +178 -0
  127. package/eventcatalog/src/pages/schemas/explorer/index.astro +7 -157
  128. package/eventcatalog/src/pages/studio.astro +155 -75
  129. package/eventcatalog/src/remark-plugins/directives.ts +36 -15
  130. package/eventcatalog/src/remark-plugins/mermaid.ts +2 -2
  131. package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/container.ts +10 -1
  132. package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/domain.ts +17 -7
  133. package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/message.ts +10 -1
  134. package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/service.ts +11 -4
  135. package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/shared.ts +14 -0
  136. package/eventcatalog/src/stores/{sidebar-store.ts → sidebar-store/index.ts} +1 -1
  137. package/eventcatalog/src/stores/theme-store.ts +93 -0
  138. package/eventcatalog/src/styles/theme.css +255 -0
  139. package/eventcatalog/src/styles/themes/forest.css +230 -0
  140. package/eventcatalog/src/styles/themes/ocean.css +235 -0
  141. package/eventcatalog/src/styles/themes/sapphire.css +230 -0
  142. package/eventcatalog/src/styles/themes/sunset.css +230 -0
  143. package/eventcatalog/src/utils/collections/channels.ts +0 -2
  144. package/eventcatalog/src/utils/collections/commands.ts +0 -2
  145. package/eventcatalog/src/utils/collections/containers.ts +0 -2
  146. package/eventcatalog/src/utils/collections/domains.ts +0 -2
  147. package/eventcatalog/src/utils/collections/entities.ts +0 -2
  148. package/eventcatalog/src/utils/collections/events.ts +0 -2
  149. package/eventcatalog/src/utils/collections/flows.ts +0 -2
  150. package/eventcatalog/src/utils/collections/queries.ts +0 -2
  151. package/eventcatalog/src/utils/collections/schemas.ts +45 -7
  152. package/eventcatalog/src/utils/collections/services.ts +0 -2
  153. package/eventcatalog/src/utils/feature.ts +13 -5
  154. package/eventcatalog/src/utils/node-graphs/services-node-graph.ts +1 -1
  155. package/eventcatalog/src/utils/resource-files.ts +86 -0
  156. package/eventcatalog/tailwind.config.mjs +6 -3
  157. package/package.json +12 -15
  158. package/default-files-for-collections/changelogs.md +0 -5
  159. package/default-files-for-collections/channels.md +0 -8
  160. package/default-files-for-collections/commands.md +0 -8
  161. package/default-files-for-collections/domains.md +0 -8
  162. package/default-files-for-collections/events.md +0 -8
  163. package/default-files-for-collections/flows.md +0 -11
  164. package/default-files-for-collections/queries.md +0 -8
  165. package/default-files-for-collections/services.md +0 -8
  166. package/default-files-for-collections/ubiquitousLanguages.md +0 -7
  167. package/eventcatalog/src/enterprise/collections/chat-prompts.ts +0 -32
  168. package/eventcatalog/src/enterprise/eventcatalog-chat/components/Chat.tsx +0 -60
  169. package/eventcatalog/src/enterprise/eventcatalog-chat/components/ChatMessage.tsx +0 -414
  170. package/eventcatalog/src/enterprise/eventcatalog-chat/components/ChatSidebar.tsx +0 -169
  171. package/eventcatalog/src/enterprise/eventcatalog-chat/components/InputModal.tsx +0 -244
  172. package/eventcatalog/src/enterprise/eventcatalog-chat/components/MentionInput.tsx +0 -211
  173. package/eventcatalog/src/enterprise/eventcatalog-chat/components/WelcomePromptArea.tsx +0 -176
  174. package/eventcatalog/src/enterprise/eventcatalog-chat/components/default-prompts.ts +0 -93
  175. package/eventcatalog/src/enterprise/eventcatalog-chat/components/hooks/ChatProvider.tsx +0 -143
  176. package/eventcatalog/src/enterprise/eventcatalog-chat/components/windows/ChatWindow.server.tsx +0 -387
  177. package/eventcatalog/src/enterprise/eventcatalog-chat/pages/api/chat.ts +0 -59
  178. package/eventcatalog/src/enterprise/eventcatalog-chat/pages/chat/index.astro +0 -104
  179. package/eventcatalog/src/enterprise/eventcatalog-chat/providers/ai-provider.ts +0 -140
  180. package/eventcatalog/src/enterprise/eventcatalog-chat/providers/anthropic.ts +0 -28
  181. package/eventcatalog/src/enterprise/eventcatalog-chat/providers/google.ts +0 -41
  182. package/eventcatalog/src/enterprise/eventcatalog-chat/providers/index.ts +0 -26
  183. package/eventcatalog/src/enterprise/eventcatalog-chat/providers/openai.ts +0 -61
  184. package/eventcatalog/src/enterprise/eventcatalog-chat/utils/chat-prompts.ts +0 -50
  185. package/eventcatalog/src/pages/auth/login.astro +0 -280
  186. package/eventcatalog/src/pages/chat/feature.astro +0 -179
  187. package/eventcatalog/src/pages/chat/index.astro +0 -10
  188. package/eventcatalog/src/pages/docs/_default-docs.mdx +0 -25
  189. package/eventcatalog/src/pages/docs/index.astro +0 -33
  190. package/eventcatalog/src/pages/nav-index.json.ts +0 -30
  191. /package/eventcatalog/src/{pages → enterprise}/auth/error.astro +0 -0
  192. /package/eventcatalog/src/{middleware-auth.ts → enterprise/auth/middleware/middleware-auth.ts} +0 -0
  193. /package/eventcatalog/src/{middleware.ts → enterprise/auth/middleware/middleware.ts} +0 -0
  194. /package/eventcatalog/src/{pages/unauthorized/index.astro → enterprise/auth/unauthorized.astro} +0 -0
  195. /package/eventcatalog/src/{pages → enterprise}/plans/index.astro +0 -0
  196. /package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/flow.ts +0 -0
  197. /package/eventcatalog/src/{components/SideNav/NestedSideBar/sidebar-builder.ts → stores/sidebar-store/state.ts} +0 -0
@@ -2,10 +2,12 @@
2
2
  import catalog from '@utils/eventcatalog-config/catalog';
3
3
  import Search from '@components/Search/Search.astro';
4
4
  import { buildUrl } from '@utils/url-builder';
5
- import { showEventCatalogBranding, showCustomBranding } from '@utils/feature';
5
+ import { showEventCatalogBranding, showCustomBranding, isEventCatalogChatEnabled } from '@utils/feature';
6
6
  import { getSession } from 'auth-astro/server';
7
7
  import { isAuthEnabled, isSSR } from '@utils/feature';
8
8
  import { EnvironmentDropdown } from './EnvironmentDropdown';
9
+ import ChatPanelButton from './ChatPanel/ChatPanelButton';
10
+ import ThemeToggle from './ThemeToggle';
9
11
 
10
12
  let session = null;
11
13
  if (isAuthEnabled()) {
@@ -23,7 +25,7 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
23
25
 
24
26
  <nav
25
27
  id="eventcatalog-header"
26
- class="fixed top-0 left-0 right-0 h-header bg-white/95 border-b border-gray-200 py-3 font-bold text-xl backdrop-blur-md z-10"
28
+ class="fixed top-0 left-0 right-0 h-header bg-[rgb(var(--ec-header-bg))] border-b border-[rgb(var(--ec-header-border))] py-3 font-bold text-xl z-10 text-[rgb(var(--ec-header-text))]"
27
29
  >
28
30
  <div class="px-4 sm:px-4 lg:px-4">
29
31
  <div class="flex justify-between items-center">
@@ -42,8 +44,11 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
42
44
  </a>
43
45
  </div>
44
46
 
45
- <div class="hidden lg:block flex-grow -ml-1">
46
- <Search />
47
+ <div class="hidden lg:flex flex-grow -ml-1 items-center">
48
+ <div class="flex-grow max-w-xl">
49
+ <Search />
50
+ </div>
51
+ {isEventCatalogChatEnabled() && <ChatPanelButton client:load />}
47
52
  </div>
48
53
 
49
54
  <div class="hidden md:block w-3/12">
@@ -53,6 +58,7 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
53
58
  {catalog.environments && catalog.environments.length > 0 && (
54
59
  <EnvironmentDropdown environments={catalog.environments} client:load />
55
60
  )}
61
+ <ThemeToggle client:load />
56
62
  <div class="relative">
57
63
  <button
58
64
  id="profile-menu-button"
@@ -60,6 +66,7 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
60
66
  class="flex items-center focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-400 rounded-full"
61
67
  aria-expanded="false"
62
68
  aria-haspopup="true"
69
+ aria-label="User menu"
63
70
  >
64
71
  {session.user?.image && !session.user?.image?.includes('googleusercontent.com') ? (
65
72
  <img
@@ -82,15 +89,17 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
82
89
  </button>
83
90
  <div
84
91
  id="profile-dropdown"
85
- class="hidden absolute right-0 mt-2 w-48 bg-white rounded-lg shadow-md py-1 z-50 border-2 border-gray-200 overflow-hidden"
92
+ class="hidden absolute right-0 mt-2 w-48 bg-[rgb(var(--ec-dropdown-bg))] rounded-lg shadow-md py-1 z-50 border-2 border-[rgb(var(--ec-dropdown-border))] overflow-hidden"
86
93
  >
87
- <div class="px-4 py-2 text-sm text-gray-700 border-b border-gray-200">
94
+ <div class="px-4 py-2 text-sm text-[rgb(var(--ec-dropdown-text))] border-b border-[rgb(var(--ec-dropdown-border))]">
88
95
  <div class="font-semibold">{session.user?.name || 'User'}</div>
89
- {session.user?.email && <div class="text-gray-500 text-xs mt-0.5">{session.user.email}</div>}
96
+ {session.user?.email && (
97
+ <div class="text-[rgb(var(--ec-icon-color))] text-xs mt-0.5">{session.user.email}</div>
98
+ )}
90
99
  </div>
91
100
  <button
92
101
  id="signout-btn"
93
- class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-50 transition-colors font-medium"
102
+ class="block w-full text-left px-4 py-2 text-sm text-[rgb(var(--ec-dropdown-text))] hover:bg-[rgb(var(--ec-dropdown-hover))] transition-colors font-medium"
94
103
  >
95
104
  Sign out
96
105
  </button>
@@ -106,27 +115,40 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
106
115
  {isAuthEnabled() && (
107
116
  <button
108
117
  id="okta-signin-btn"
109
- class="bg-gray-900 hover:bg-gray-800 text-white text-sm font-medium px-4 py-2 rounded-lg transition-all shadow-sm hover:shadow focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500"
118
+ class="bg-[rgb(var(--ec-button-bg))] hover:bg-[rgb(var(--ec-button-bg-hover))] text-[rgb(var(--ec-button-text))] text-sm font-medium px-4 py-2 rounded-lg transition-all shadow-sm hover:shadow focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500"
110
119
  >
111
120
  Sign In
112
121
  </button>
113
122
  )}
123
+ <ThemeToggle client:load />
114
124
  {showEventCatalogBranding() && (
115
125
  <ul class="flex space-x-4">
116
126
  <li>
117
127
  <a
118
128
  href="https://discord.com/invite/3rjaZMmrAm"
119
- class="block p-1.5 rounded-lg hover:bg-gray-100 transition-colors"
129
+ class="block p-1.5 rounded-lg hover:bg-[rgb(var(--ec-dropdown-hover))] transition-colors"
130
+ aria-label="Join our Discord community"
120
131
  >
121
- <img src={buildUrl('/icons/discord.svg', true)} class="h-6 w-6 hover:opacity-100 transition-opacity" />
132
+ <img
133
+ src={buildUrl('/icons/discord.svg', true)}
134
+ alt=""
135
+ class="h-6 w-6 hover:opacity-100 transition-opacity"
136
+ aria-hidden="true"
137
+ />
122
138
  </a>
123
139
  </li>
124
140
  <li>
125
141
  <a
126
142
  href="https://github.com/event-catalog/eventcatalog"
127
- class="block p-1.5 rounded-lg hover:bg-gray-100 transition-colors"
143
+ class="block p-1.5 rounded-lg hover:bg-[rgb(var(--ec-dropdown-hover))] transition-colors"
144
+ aria-label="View EventCatalog on GitHub"
128
145
  >
129
- <img src={buildUrl('/icons/github.svg', true)} class="h-6 w-6 hover:opacity-100 transition-opacity" />
146
+ <img
147
+ src={buildUrl('/icons/github.svg', true)}
148
+ alt=""
149
+ class="h-6 w-6 hover:opacity-100 transition-opacity"
150
+ aria-hidden="true"
151
+ />
130
152
  </a>
131
153
  </li>
132
154
  </ul>
@@ -136,11 +158,14 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
136
158
  <li>
137
159
  <a
138
160
  href={repositoryUrl}
139
- class="block p-1.5 rounded-lg hover:bg-gray-100 transition-colors focus:outline-none"
161
+ class="block p-1.5 rounded-lg hover:bg-[rgb(var(--ec-dropdown-hover))] transition-colors focus:outline-none"
162
+ aria-label="View repository on GitHub"
140
163
  >
141
164
  <img
142
165
  src={buildUrl('/icons/github.svg', true)}
166
+ alt=""
143
167
  class="h-6 w-6 opacity-70 hover:opacity-100 transition-opacity"
168
+ aria-hidden="true"
144
169
  />
145
170
  </a>
146
171
  </li>
@@ -156,7 +181,7 @@ const repositoryUrl = catalog?.repositoryUrl || 'https://github.com/event-catalo
156
181
  <button
157
182
  id="menu-toggle"
158
183
  type="button"
159
- class="text-gray-500 hover:text-gray-600 focus:outline-none focus:text-gray-600"
184
+ class="text-[rgb(var(--ec-icon-color))] hover:text-[rgb(var(--ec-icon-hover))] focus:outline-none focus:text-[rgb(var(--ec-icon-hover))]"
160
185
  aria-label="Toggle menu"
161
186
  >
162
187
  <svg viewBox="0 0 24 24" class="h-6 w-6 fill-current">
@@ -1,6 +1,7 @@
1
1
  import { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/react';
2
2
  import { ChevronDownIcon } from '@heroicons/react/20/solid';
3
3
  import { UserGroupIcon, UserIcon } from '@heroicons/react/24/outline';
4
+ import './PillListFlat.styles.css';
4
5
 
5
6
  interface Props {
6
7
  title: string;
@@ -17,30 +18,36 @@ interface Props {
17
18
  const OwnersList = ({ title, owners, emptyMessage }: Props) => {
18
19
  return (
19
20
  <div>
20
- <div className="mx-auto w-full max-w-lg divide-y divide-white/5 rounded-xl bg-white/5">
21
+ <div className="mx-auto w-full max-w-lg divide-y divide-[rgb(var(--ec-page-border))] rounded-xl">
21
22
  <Disclosure as="div" className="" defaultOpen={owners.length <= 5}>
22
23
  <DisclosureButton className="group flex w-full items-center justify-start space-x-4">
23
- <span className="text-sm text-black font-semibold group-data-[hover]:text-black/80 capitalize"> {title} </span>
24
- <ChevronDownIcon className="size-5 fill-black/60 group-data-[hover]:fill-black/50 group-data-[open]:rotate-180" />
24
+ <span className="text-sm text-[rgb(var(--ec-page-text))] font-semibold group-data-[hover]:opacity-80 capitalize">
25
+ {' '}
26
+ {title}{' '}
27
+ </span>
28
+ <ChevronDownIcon className="size-5 fill-[rgb(var(--ec-icon-color))] group-data-[hover]:opacity-80 group-data-[open]:rotate-180" />
25
29
  </DisclosureButton>
26
- <DisclosurePanel className="mt-2 text-sm/5 text-black/50">
30
+ <DisclosurePanel className="mt-2 text-sm/5 text-[rgb(var(--ec-page-text-muted))]">
27
31
  <ul role="list" className="space-y-2">
28
32
  {owners.map((item) => {
29
33
  return (
30
34
  <li
31
- className="has-tooltip rounded-md text-gray-600 group px-1 w-full hover:bg-gradient-to-l hover:from-purple-500 hover:to-purple-700 hover:text-white hover:font-normal "
35
+ className="owner-item has-tooltip rounded-md text-[rgb(var(--ec-page-text-muted))] group px-1 w-full hover:text-white hover:font-normal"
32
36
  key={item.href}
33
37
  >
34
38
  <a className={`flex items-center space-x-2`} href={item.href}>
35
39
  {item.type === 'users' && (
36
- <UserIcon className="h-4 w-4 text-gray-800 group-hover:text-white" strokeWidth={1} />
40
+ <UserIcon className="h-4 w-4 text-[rgb(var(--ec-page-text))] group-hover:text-white" strokeWidth={1} />
37
41
  )}
38
42
  {item.type === 'teams' && (
39
- <UserGroupIcon className="h-4 w-4 text-gray-800 group-hover:text-white" strokeWidth={1} />
43
+ <UserGroupIcon
44
+ className="h-4 w-4 text-[rgb(var(--ec-page-text))] group-hover:text-white"
45
+ strokeWidth={1}
46
+ />
40
47
  )}
41
48
  <span className="font-light text-sm truncate">{item.label}</span>
42
49
  {item.label.length > 24 && (
43
- <span className="tooltip rounded relative shadow-lg p-1 font-normal text-xs bg-white text-black ml-[30px] mt-12">
50
+ <span className="tooltip rounded relative shadow-lg p-1 font-normal text-xs bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] text-[rgb(var(--ec-page-text))] border border-[rgb(var(--ec-page-border))] ml-[30px] mt-12">
44
51
  {item.label}
45
52
  </span>
46
53
  )}
@@ -50,14 +57,14 @@ const OwnersList = ({ title, owners, emptyMessage }: Props) => {
50
57
  })}
51
58
  {owners.length === 0 && (
52
59
  <li className="inline mr-2 leading-6 text-sm">
53
- <span className="text-gray-500">{emptyMessage}</span>
60
+ <span className="text-[rgb(var(--ec-page-text-muted))]">{emptyMessage}</span>
54
61
  </li>
55
62
  )}
56
63
  </ul>
57
64
  </DisclosurePanel>
58
65
  </Disclosure>
59
66
  </div>
60
- <div className="border-b border-gray-100 my-4"></div>
67
+ <div className="border-b border-[rgb(var(--ec-page-border))] my-4"></div>
61
68
  </div>
62
69
  );
63
70
  };
@@ -5,4 +5,16 @@
5
5
  .has-tooltip:hover .tooltip {
6
6
  visibility: visible;
7
7
  z-index: 100;
8
+ }
9
+
10
+ .pill-item:hover {
11
+ background: linear-gradient(to left, rgb(var(--ec-accent-gradient-from)), rgb(var(--ec-accent-gradient-to)));
12
+ color: white;
13
+ font-weight: normal;
14
+ }
15
+
16
+ .owner-item:hover {
17
+ background: linear-gradient(to left, rgb(var(--ec-accent-gradient-from)), rgb(var(--ec-accent-gradient-to)));
18
+ color: white;
19
+ font-weight: normal;
8
20
  }
@@ -66,10 +66,7 @@ const PillList = ({ title, pills, emptyMessage, color = 'gray', limit = 10, ...p
66
66
  const PillIcon = item.icon ? (icons as any)[item.icon] : null;
67
67
 
68
68
  return (
69
- <li
70
- className=" has-tooltip rounded-md text-gray-600 group px-1 w-full hover:bg-gradient-to-l hover:from-purple-500 hover:to-purple-700 hover:text-white hover:font-normal "
71
- key={item.href}
72
- >
69
+ <li className="pill-item has-tooltip rounded-md text-[rgb(var(--ec-page-text-muted))] group px-1 w-full" key={item.href}>
73
70
  <a className={`leading-3`} href={href} target={item.target ?? '_self'}>
74
71
  <span className="space-x-2 flex items-center">
75
72
  {Icon && !PillIcon && <Icon className="h-4 w-4 shrink-0" />}
@@ -78,7 +75,7 @@ const PillList = ({ title, pills, emptyMessage, color = 'gray', limit = 10, ...p
78
75
  {item.label} {item.tag && <>({item.tag})</>}
79
76
  </span>
80
77
  {item.label.length > 24 && (
81
- <span className="tooltip rounded relative shadow-lg p-1 font-normal text-xs bg-white text-black ml-[30px] mt-12">
78
+ <span className="tooltip rounded relative shadow-lg p-1 font-normal text-xs bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] text-[rgb(var(--ec-page-text))] border border-[rgb(var(--ec-page-border))] ml-[30px] mt-12">
82
79
  {item.label} {item.tag && <>({item.tag})</>}
83
80
  </span>
84
81
  )}
@@ -91,13 +88,16 @@ const PillList = ({ title, pills, emptyMessage, color = 'gray', limit = 10, ...p
91
88
 
92
89
  return (
93
90
  <div className="">
94
- <div className="mx-auto w-full max-w-lg divide-y divide-white/5 rounded-xl bg-white/5">
91
+ <div className="mx-auto w-full max-w-lg divide-y divide-[rgb(var(--ec-page-border))] rounded-xl">
95
92
  <Disclosure as="div" className="" defaultOpen={pills.length <= limit}>
96
93
  <DisclosureButton className="group flex w-full items-center justify-start space-x-4">
97
- <span className="text-sm text-black font-semibold group-data-[hover]:text-black/80 capitalize"> {title} </span>
98
- <ChevronDownIcon className="size-5 ml-2 fill-black/60 group-data-[hover]:fill-black/50 group-data-[open]:rotate-180" />
94
+ <span className="text-sm text-[rgb(var(--ec-page-text))] font-semibold group-data-[hover]:opacity-80 capitalize">
95
+ {' '}
96
+ {title}{' '}
97
+ </span>
98
+ <ChevronDownIcon className="size-5 ml-2 fill-[rgb(var(--ec-icon-color))] group-data-[hover]:opacity-80 group-data-[open]:rotate-180" />
99
99
  </DisclosureButton>
100
- <DisclosurePanel className="mt-2 text-sm/5 text-black/50">
100
+ <DisclosurePanel className="mt-2 text-sm/5 text-[rgb(var(--ec-page-text-muted))]">
101
101
  <div className="space-y-2">
102
102
  {groupedPills.ungrouped.length > 0 && (
103
103
  <ul role="list" className="space-y-2">
@@ -115,10 +115,10 @@ const PillList = ({ title, pills, emptyMessage, color = 'gray', limit = 10, ...p
115
115
  e.stopPropagation();
116
116
  toggleSubgroup(subgroupName);
117
117
  }}
118
- className="p-1 hover:bg-gray-100 rounded-md"
118
+ className="p-1 hover:bg-[rgb(var(--ec-content-hover))] rounded-md"
119
119
  >
120
120
  <div className={`transition-transform duration-150 ${isCollapsed ? '' : 'rotate-180'}`}>
121
- <ChevronDownIcon className="h-3 w-3 text-gray-500" />
121
+ <ChevronDownIcon className="h-3 w-3 text-[rgb(var(--ec-icon-color))]" />
122
122
  </div>
123
123
  </button>
124
124
  <button
@@ -126,7 +126,7 @@ const PillList = ({ title, pills, emptyMessage, color = 'gray', limit = 10, ...p
126
126
  e.stopPropagation();
127
127
  toggleSubgroup(subgroupName);
128
128
  }}
129
- className="flex-grow flex items-center justify-between px-2 py-0.5 text-xs font-bold rounded-md text-gray-900 uppercase"
129
+ className="flex-grow flex items-center justify-between px-2 py-0.5 text-xs font-bold rounded-md text-[rgb(var(--ec-page-text))] uppercase"
130
130
  >
131
131
  {subgroupName} ({subgroupPills.length})
132
132
  </button>
@@ -134,7 +134,7 @@ const PillList = ({ title, pills, emptyMessage, color = 'gray', limit = 10, ...p
134
134
  <div
135
135
  className={`overflow-hidden transition-[height] duration-150 ease-out ${isCollapsed ? 'h-0' : 'h-auto'}`}
136
136
  >
137
- <ul role="list" className="space-y-2 border-l border-gray-200/80 ml-[9px] pl-4 pt-2">
137
+ <ul role="list" className="space-y-2 border-l border-[rgb(var(--ec-page-border))] ml-[9px] pl-4 pt-2">
138
138
  {subgroupPills.map(renderPillItem)}
139
139
  </ul>
140
140
  </div>
@@ -144,14 +144,14 @@ const PillList = ({ title, pills, emptyMessage, color = 'gray', limit = 10, ...p
144
144
 
145
145
  {pills.length === 0 && emptyMessage && (
146
146
  <div className="inline mr-2 leading-tight text-xs">
147
- <span className="text-gray-400">{emptyMessage}</span>
147
+ <span className="text-[rgb(var(--ec-icon-color))]">{emptyMessage}</span>
148
148
  </div>
149
149
  )}
150
150
  </div>
151
151
  </DisclosurePanel>
152
152
  </Disclosure>
153
153
  </div>
154
- <div className="border-b border-gray-100 my-4"></div>
154
+ <div className="border-b border-[rgb(var(--ec-page-border))] my-4"></div>
155
155
  </div>
156
156
  );
157
157
  };
@@ -15,7 +15,9 @@ const currentPath = Astro.url.pathname;
15
15
  ---
16
16
 
17
17
  <div class="space-y-2 pb-4">
18
- <span class="text-xs text-black font-semibold group-data-[hover]:text-black/80 capitalize">
18
+ <span
19
+ class="text-xs text-[rgb(var(--ec-page-text))] font-semibold group-data-[hover]:text-[rgb(var(--ec-page-text))]/80 capitalize"
20
+ >
19
21
  {title || `Versions (${collectionItem.data.versions?.length})`}
20
22
  </span>
21
23
  <ul role="list" class="space-y-2">
@@ -23,14 +25,16 @@ const currentPath = Astro.url.pathname;
23
25
  versions.map((version) => {
24
26
  const isCurrent = currentPath.includes(version);
25
27
  return (
26
- <li class="rounded-md px-1 group w-full hover:bg-gradient-to-l hover:from-purple-500 hover:to-purple-700 hover:text-white hover:font-normal ">
28
+ <li class="version-item rounded-md px-1 group w-full hover:text-white hover:font-normal">
27
29
  <a
28
30
  class={`flex items-center space-x-2 cursor-pointer`}
29
31
  href={buildUrl(`/docs/${collectionItem.collection}/${collectionItem.data.id}/${version}`)}
30
32
  >
31
33
  {/* {Icon && <Icon class={`h-4 w-4`} />} */}
32
- <HistoryIcon className="h-4 w-4 text-gray-800 group-hover:text-white" strokeWidth={1} />
33
- <span class={`font-light text-xs ${isCurrent ? 'underline ' : ''}`}>
34
+ <HistoryIcon className="h-4 w-4 text-[rgb(var(--ec-page-text-muted))] group-hover:text-white" strokeWidth={1} />
35
+ <span
36
+ class={`font-light text-xs text-[rgb(var(--ec-page-text))] group-hover:text-white ${isCurrent ? 'underline ' : ''}`}
37
+ >
34
38
  {version === collectionItem.data.latestVersion ? `v${version} (latest)` : `v${version}`}
35
39
  </span>
36
40
  </a>
@@ -39,9 +43,15 @@ const currentPath = Astro.url.pathname;
39
43
  })
40
44
  }
41
45
  </ul>
42
- <div class="border-b border-gray-100 pt-2"></div>
46
+ <div class="border-b border-[rgb(var(--ec-page-border))] pt-2"></div>
43
47
  </div>
44
48
 
49
+ <style>
50
+ .version-item:hover {
51
+ background: linear-gradient(to left, rgb(var(--ec-accent-gradient-from)), rgb(var(--ec-accent-gradient-to)));
52
+ }
53
+ </style>
54
+
45
55
  <script>
46
56
  document.getElementById('version')?.addEventListener('change', (e: any) => {
47
57
  if (!e.target) return;
@@ -12,7 +12,7 @@ declare global {
12
12
 
13
13
  export default function Example({ title, children }: any) {
14
14
  return (
15
- <div className="border border-gray-200 rounded-md px-4 shadow-sm py-2 accordion">
15
+ <div className="border border-[rgb(var(--ec-page-border))] rounded-md px-4 shadow-sm py-2 accordion bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))]">
16
16
  <Disclosure as="div" key={title} className="">
17
17
  {({ open }) => {
18
18
  useEffect(() => {
@@ -30,7 +30,7 @@ export default function Example({ title, children }: any) {
30
30
 
31
31
  return (
32
32
  <div>
33
- <DisclosureButton className="flex w-full items-start justify-between text-left text-gray-900">
33
+ <DisclosureButton className="flex w-full items-start justify-between text-left text-[rgb(var(--ec-page-text))]">
34
34
  <span className="text-base font-semibold leading-7">{title}</span>
35
35
  <span className="ml-6 flex h-7 items-center">
36
36
  {open ? (
@@ -41,7 +41,7 @@ export default function Example({ title, children }: any) {
41
41
  </span>
42
42
  </DisclosureButton>
43
43
  <DisclosurePanel as="dd" className="pr-12 py-4 prose prose-sm max-w-none">
44
- <div className="text-base leading-7 text-gray-600">{children}</div>
44
+ <div className="text-base leading-7 text-[rgb(var(--ec-page-text-muted))]">{children}</div>
45
45
  </DisclosurePanel>
46
46
  </div>
47
47
  );
@@ -1,15 +1,55 @@
1
1
  import { InformationCircleIcon, ExclamationTriangleIcon } from '@heroicons/react/24/outline';
2
2
 
3
- const getConfigurationByType = (type: string) => {
3
+ type AdmonitionType = 'danger' | 'alert' | 'warning' | 'info' | 'note';
4
+
5
+ interface AdmonitionConfig {
6
+ icon: typeof InformationCircleIcon;
7
+ title: string;
8
+ containerClasses: string;
9
+ iconClasses: string;
10
+ titleClasses: string;
11
+ contentClasses: string;
12
+ }
13
+
14
+ const getConfigurationByType = (type: string): AdmonitionConfig => {
4
15
  switch (type) {
5
16
  case 'danger':
6
- return { color: 'red', icon: ExclamationTriangleIcon, title: 'Danger' };
7
17
  case 'alert':
8
- return { color: 'red', icon: ExclamationTriangleIcon, title: 'Alert' };
18
+ return {
19
+ icon: ExclamationTriangleIcon,
20
+ title: type === 'danger' ? 'Danger' : 'Alert',
21
+ containerClasses: 'bg-red-50 dark:bg-red-950/50 border-red-500',
22
+ iconClasses: 'text-red-500 dark:text-red-400',
23
+ titleClasses: 'text-red-600 dark:text-red-300',
24
+ contentClasses: 'text-red-700 dark:text-red-200',
25
+ };
9
26
  case 'warning':
10
- return { color: 'yellow', icon: ExclamationTriangleIcon, title: 'Warning' };
27
+ return {
28
+ icon: ExclamationTriangleIcon,
29
+ title: 'Warning',
30
+ containerClasses: 'bg-yellow-50 dark:bg-yellow-950/50 border-yellow-500',
31
+ iconClasses: 'text-yellow-500 dark:text-yellow-400',
32
+ titleClasses: 'text-yellow-600 dark:text-yellow-300',
33
+ contentClasses: 'text-yellow-700 dark:text-yellow-200',
34
+ };
35
+ case 'note':
36
+ return {
37
+ icon: InformationCircleIcon,
38
+ title: 'Note',
39
+ containerClasses: 'bg-blue-50 dark:bg-blue-950/50 border-blue-500',
40
+ iconClasses: 'text-blue-500 dark:text-blue-400',
41
+ titleClasses: 'text-blue-600 dark:text-blue-300',
42
+ contentClasses: 'text-blue-700 dark:text-blue-200',
43
+ };
11
44
  default:
12
- return { color: 'indigo', icon: InformationCircleIcon, title: 'Info' };
45
+ return {
46
+ icon: InformationCircleIcon,
47
+ title: 'Info',
48
+ containerClasses: 'bg-indigo-50 dark:bg-indigo-950/50 border-indigo-500',
49
+ iconClasses: 'text-indigo-500 dark:text-indigo-400',
50
+ titleClasses: 'text-indigo-600 dark:text-indigo-300',
51
+ contentClasses: 'text-indigo-700 dark:text-indigo-200',
52
+ };
13
53
  }
14
54
  };
15
55
 
@@ -25,13 +65,13 @@ export default function Admonition({ children, type = 'info', className = '', ti
25
65
  const Icon = config.icon;
26
66
 
27
67
  return (
28
- <div className={`bg-${config.color}-50 border-l-4 border-${config.color}-500 p-4 my-4 ${className} rounded-md not-prose`}>
68
+ <div className={`${config.containerClasses} border-l-4 p-4 my-4 ${className} rounded-md not-prose`}>
29
69
  <div className="flex flex-col">
30
70
  <div className="flex items-center justify-start">
31
- <Icon className={`h-6 w-6 text-${config.color}-500 stroke-2`} aria-hidden="true" />
32
- <h3 className={`ml-2 text-${config.color}-600 font-bold text-md`}>{title || config.title}</h3>
71
+ <Icon className={`h-6 w-6 ${config.iconClasses} stroke-2`} aria-hidden="true" />
72
+ <h3 className={`ml-2 ${config.titleClasses} font-bold text-md`}>{title || config.title}</h3>
33
73
  </div>
34
- <div className={`mt-2 text-${config.color}-700 text-md`}>{children}</div>
74
+ <div className={`mt-2 ${config.contentClasses} text-md`}>{children}</div>
35
75
  </div>
36
76
  </div>
37
77
  );
@@ -83,16 +83,16 @@ const sortedGroups = Object.entries(groupedAttachments).sort(([a], [b]) => {
83
83
  <section class="not-prose my-8">
84
84
  {title && <h3 class="flex items-center gap-2 text-3xl font-bold mb-4">{title}</h3>}
85
85
 
86
- {description && <p class="text-gray-600 mb-6 prose prose-md">{description}</p>}
86
+ {description && <p class="text-[rgb(var(--ec-page-text-muted))] mb-6 prose prose-md">{description}</p>}
87
87
 
88
88
  {
89
89
  normalizedAttachments.length === 0 ? (
90
- <div class="text-gray-500 text-sm italic">No attachments available.</div>
90
+ <div class="text-[rgb(var(--ec-page-text-muted))] text-sm italic">No attachments available.</div>
91
91
  ) : (
92
92
  <div class="space-y-6">
93
93
  {sortedGroups.map(([groupType, groupAttachments], index) => (
94
94
  <div>
95
- <h4 class="text-sm font-medium text-gray-900 mb-3 uppercase tracking-wider">
95
+ <h4 class="text-sm font-medium text-[rgb(var(--ec-page-text))] mb-3 uppercase tracking-wider">
96
96
  {groupType} ({groupAttachments.length})
97
97
  </h4>
98
98
  <div class={`grid grid-cols-1 ${columns === 1 ? '' : `md:grid-cols-${Math.min(columns, 3)}`} gap-4`}>
@@ -105,34 +105,38 @@ const sortedGroups = Object.entries(groupedAttachments).sort(([a], [b]) => {
105
105
  href={attachment.url}
106
106
  target={isExternal ? '_blank' : '_self'}
107
107
  rel={isExternal ? 'noopener noreferrer' : undefined}
108
- class="group block bg-white border border-gray-200 rounded-lg p-4 transition-all duration-200 hover:shadow-md hover:border-purple-300 hover:bg-purple-50/30 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2"
108
+ class="group block bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-lg p-4 transition-all duration-200 hover:shadow-md hover:border-[rgb(var(--ec-accent)/0.5)] focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2"
109
109
  >
110
110
  <div class="flex items-start gap-3">
111
- <div class="flex-shrink-0 p-2 bg-gray-100 rounded-lg group-hover:bg-purple-100 transition-colors duration-200">
112
- {IconComponent && <IconComponent className="w-5 h-5 text-gray-600 group-hover:text-purple-600" />}
111
+ <div class="flex-shrink-0 p-2 bg-[rgb(var(--ec-content-hover))] rounded-lg group-hover:bg-[rgb(var(--ec-accent-subtle))] transition-colors duration-200">
112
+ {IconComponent && (
113
+ <IconComponent className="w-5 h-5 text-[rgb(var(--ec-icon-color))] group-hover:text-[rgb(var(--ec-accent))]" />
114
+ )}
113
115
  </div>
114
116
 
115
117
  <div class="flex-grow min-w-0">
116
118
  <div class="flex items-center gap-2">
117
- <h5 class="text-sm font-medium text-gray-900 group-hover:text-purple-900 truncate">
119
+ <h5 class="text-sm font-medium text-[rgb(var(--ec-page-text))] group-hover:text-[rgb(var(--ec-accent))] truncate">
118
120
  {attachment.title || 'Attachment'}
119
121
  </h5>
120
122
  {isExternal && (
121
- <Icons.ArrowTopRightOnSquareIcon className="w-3 h-3 text-gray-400 group-hover:text-purple-500 flex-shrink-0" />
123
+ <Icons.ArrowTopRightOnSquareIcon className="w-3 h-3 text-[rgb(var(--ec-icon-color))] group-hover:text-[rgb(var(--ec-accent))] flex-shrink-0" />
122
124
  )}
123
125
  </div>
124
126
 
125
127
  {attachment.summary && (
126
- <p class="mt-1 text-xs text-gray-600 group-hover:text-purple-700 line-clamp-2">{attachment.summary}</p>
128
+ <p class="mt-1 text-xs text-[rgb(var(--ec-page-text-muted))] group-hover:text-[rgb(var(--ec-accent-text))] line-clamp-2">
129
+ {attachment.summary}
130
+ </p>
127
131
  )}
128
132
 
129
133
  {attachment.description && (
130
- <p class="mt-1 text-xs text-gray-600 group-hover:text-purple-700 line-clamp-2">
134
+ <p class="mt-1 text-xs text-[rgb(var(--ec-page-text-muted))] group-hover:text-[rgb(var(--ec-accent-text))] line-clamp-2">
131
135
  {attachment.description}
132
136
  </p>
133
137
  )}
134
138
 
135
- <div class="mt-2 text-xs text-gray-400 group-hover:text-purple-500 truncate">
139
+ <div class="mt-2 text-xs text-[rgb(var(--ec-icon-color))] group-hover:text-[rgb(var(--ec-accent))] truncate">
136
140
  {attachment.url.replace(/^https?:\/\//, '')}
137
141
  </div>
138
142
  </div>
@@ -5,14 +5,17 @@ const ChannelParameters = (data: CollectionEntry<'channels'>['data']) => {
5
5
  return (
6
6
  <div className="container mx-auto py-4 not-prose space-y-4">
7
7
  <div>
8
- <h4 className="text-2xl font-bold">Channel information</h4>
8
+ <h4 className="text-2xl font-bold text-[rgb(var(--ec-page-text))]">Channel information</h4>
9
9
  </div>
10
10
 
11
11
  <div>
12
- <p className="text-md">
12
+ <p className="text-md text-[rgb(var(--ec-page-text))]">
13
13
  {data.address && (
14
14
  <div>
15
- <span className="font-semibold">Address:</span> <code className="bg-gray-100 p-1 rounded">{data.address}</code>
15
+ <span className="font-semibold">Address:</span>{' '}
16
+ <code className="bg-[rgb(var(--ec-content-hover))] p-1 rounded text-[rgb(var(--ec-page-text))]">
17
+ {data.address}
18
+ </code>
16
19
  </div>
17
20
  )}
18
21
  {data.protocols && data.protocols.length > 0 && (
@@ -22,7 +25,10 @@ const ChannelParameters = (data: CollectionEntry<'channels'>['data']) => {
22
25
  {data.protocols.map((protocol) => {
23
26
  const IconComponent = getIconForProtocol(protocol.toLowerCase());
24
27
  return (
25
- <li key={protocol} className=" text-sm flex items-center space-x-1 bg-gray-100 rounded-md px-1">
28
+ <li
29
+ key={protocol}
30
+ className="text-sm flex items-center space-x-1 bg-[rgb(var(--ec-content-hover))] rounded-md px-1"
31
+ >
26
32
  {IconComponent && <IconComponent className="w-4 h-4" />}
27
33
  <span>{protocol}</span>
28
34
  </li>
@@ -36,22 +42,30 @@ const ChannelParameters = (data: CollectionEntry<'channels'>['data']) => {
36
42
 
37
43
  {data.parameters && Object.keys(data.parameters).length > 0 && (
38
44
  <div className="overflow-x-auto">
39
- <table className="min-w-full bg-white border border-gray-300">
45
+ <table className="min-w-full bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))]">
40
46
  <thead>
41
- <tr className="bg-purple-500 text-white">
42
- <th className="py-2 px-4 border-b text-left">Parameter</th>
43
- <th className="py-2 px-4 border-b text-left">Description</th>
44
- <th className="py-2 px-4 border-b text-left">Options</th>
45
- <th className="py-2 px-4 border-b text-left">Default</th>
47
+ <tr className="bg-[rgb(var(--ec-accent))] text-white">
48
+ <th className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-left">Parameter</th>
49
+ <th className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-left">Description</th>
50
+ <th className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-left">Options</th>
51
+ <th className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-left">Default</th>
46
52
  </tr>
47
53
  </thead>
48
54
  <tbody>
49
55
  {Object.entries(data.parameters).map(([param, details]) => (
50
- <tr className="hover:bg-gray-50" key={param}>
51
- <td className="py-2 px-4 border-b">{param}</td>
52
- <td className="py-2 px-4 border-b">{details.description}</td>
53
- <td className="py-2 px-4 border-b">{details.enum ? details.enum.join(', ') : 'N/A'}</td>
54
- <td className="py-2 px-4 border-b">{details.default || 'N/A'}</td>
56
+ <tr className="hover:bg-[rgb(var(--ec-content-hover))]" key={param}>
57
+ <td className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-[rgb(var(--ec-page-text))]">
58
+ {param}
59
+ </td>
60
+ <td className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-[rgb(var(--ec-page-text-muted))]">
61
+ {details.description}
62
+ </td>
63
+ <td className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-[rgb(var(--ec-page-text-muted))]">
64
+ {details.enum ? details.enum.join(', ') : 'N/A'}
65
+ </td>
66
+ <td className="py-2 px-4 border-b border-[rgb(var(--ec-page-border))] text-[rgb(var(--ec-page-text-muted))]">
67
+ {details.default || 'N/A'}
68
+ </td>
55
69
  </tr>
56
70
  ))}
57
71
  </tbody>