@eventcatalog/core 3.0.0 → 3.2.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 (109) hide show
  1. package/dist/analytics/analytics.cjs +1 -1
  2. package/dist/analytics/analytics.js +2 -2
  3. package/dist/analytics/log-build.cjs +1 -1
  4. package/dist/analytics/log-build.js +3 -3
  5. package/dist/{chunk-VO5WYA44.js → chunk-AA47DJ43.js} +1 -1
  6. package/dist/{chunk-EKGR533N.js → chunk-GGRXP5WM.js} +1 -1
  7. package/dist/{chunk-E5Q7TZYT.js → chunk-L3QRQT7U.js} +1 -1
  8. package/dist/{chunk-BYP43AAT.js → chunk-RWYEP5SD.js} +1 -1
  9. package/dist/{chunk-KF5PARQK.js → chunk-VPQCMMRM.js} +1 -1
  10. package/dist/constants.cjs +1 -1
  11. package/dist/constants.js +1 -1
  12. package/dist/eventcatalog.cjs +1 -1
  13. package/dist/eventcatalog.config.d.cts +7 -0
  14. package/dist/eventcatalog.config.d.ts +7 -0
  15. package/dist/eventcatalog.js +5 -5
  16. package/dist/generate.cjs +1 -1
  17. package/dist/generate.js +3 -3
  18. package/dist/utils/cli-logger.cjs +1 -1
  19. package/dist/utils/cli-logger.js +2 -2
  20. package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +520 -247
  21. package/eventcatalog/src/components/ChatPanel/ChatPanelButton.tsx +3 -3
  22. package/eventcatalog/src/components/Checkbox.astro +7 -4
  23. package/eventcatalog/src/components/CopyAsMarkdown.tsx +15 -15
  24. package/eventcatalog/src/components/EnvironmentDropdown.tsx +15 -7
  25. package/eventcatalog/src/components/FavoriteButton.tsx +1 -1
  26. package/eventcatalog/src/components/Grids/DomainGrid.tsx +72 -60
  27. package/eventcatalog/src/components/Grids/MessageGrid.tsx +68 -48
  28. package/eventcatalog/src/components/Header.astro +15 -10
  29. package/eventcatalog/src/components/Lists/OwnersList.tsx +17 -10
  30. package/eventcatalog/src/components/Lists/PillListFlat.styles.css +12 -0
  31. package/eventcatalog/src/components/Lists/PillListFlat.tsx +15 -15
  32. package/eventcatalog/src/components/Lists/VersionList.astro +15 -5
  33. package/eventcatalog/src/components/MDX/Accordion/Accordion.tsx +3 -3
  34. package/eventcatalog/src/components/MDX/Admonition.tsx +49 -9
  35. package/eventcatalog/src/components/MDX/Attachments.astro +15 -11
  36. package/eventcatalog/src/components/MDX/ChannelInformation/ChannelInformation.tsx +29 -15
  37. package/eventcatalog/src/components/MDX/EntityPropertiesTable/EntityPropertiesTable.astro +20 -13
  38. package/eventcatalog/src/components/MDX/Link/Link.astro +1 -1
  39. package/eventcatalog/src/components/MDX/MessageTable/MessageTable.client.tsx +50 -29
  40. package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.tsx +14 -12
  41. package/eventcatalog/src/components/MDX/NodeGraph/StepWalkthrough.tsx +4 -4
  42. package/eventcatalog/src/components/MDX/NodeGraph/StudioModal.tsx +4 -4
  43. package/eventcatalog/src/components/MDX/NodeGraph/VisualiserSearch.tsx +2 -2
  44. package/eventcatalog/src/components/MDX/ResourceGroupTable/ResourceGroupTable.client.tsx +54 -33
  45. package/eventcatalog/src/components/MDX/ResourceLink/ResourceLink.astro +1 -1
  46. package/eventcatalog/src/components/MDX/Steps/Step.astro +2 -2
  47. package/eventcatalog/src/components/MDX/Steps/Steps.astro +3 -3
  48. package/eventcatalog/src/components/MDX/Tabs/Tabs.astro +13 -9
  49. package/eventcatalog/src/components/MDX/Tiles/Tile.astro +25 -13
  50. package/eventcatalog/src/components/MDX/Tiles/Tiles.astro +1 -1
  51. package/eventcatalog/src/components/SchemaExplorer/ApiAccessSection.tsx +3 -3
  52. package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +3 -3
  53. package/eventcatalog/src/components/SchemaExplorer/AvroSchemaViewer.tsx +29 -25
  54. package/eventcatalog/src/components/SchemaExplorer/DiffViewer.tsx +3 -3
  55. package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.tsx +61 -42
  56. package/eventcatalog/src/components/SchemaExplorer/OwnersSection.tsx +13 -9
  57. package/eventcatalog/src/components/SchemaExplorer/Pagination.tsx +6 -4
  58. package/eventcatalog/src/components/SchemaExplorer/ProducersConsumersSection.tsx +17 -13
  59. package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +35 -8
  60. package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsHeader.tsx +33 -21
  61. package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsPanel.tsx +1 -1
  62. package/eventcatalog/src/components/SchemaExplorer/SchemaExplorer.tsx +41 -33
  63. package/eventcatalog/src/components/SchemaExplorer/SchemaListItem.tsx +19 -7
  64. package/eventcatalog/src/components/SchemaExplorer/SchemaViewerModal.tsx +8 -8
  65. package/eventcatalog/src/components/Search/Search.astro +3 -3
  66. package/eventcatalog/src/components/Search/SearchModal.tsx +65 -36
  67. package/eventcatalog/src/components/SideNav/NestedSideBar/SearchBar.tsx +31 -21
  68. package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +92 -59
  69. package/eventcatalog/src/components/Tables/Table.tsx +25 -24
  70. package/eventcatalog/src/components/Tables/columns/ContainersTableColumns.tsx +22 -16
  71. package/eventcatalog/src/components/Tables/columns/DomainTableColumns.tsx +14 -11
  72. package/eventcatalog/src/components/Tables/columns/FlowTableColumns.tsx +6 -6
  73. package/eventcatalog/src/components/Tables/columns/MessageTableColumns.tsx +22 -16
  74. package/eventcatalog/src/components/Tables/columns/ServiceTableColumns.tsx +22 -16
  75. package/eventcatalog/src/components/Tables/columns/SharedColumns.tsx +4 -4
  76. package/eventcatalog/src/components/Tables/columns/TeamsTableColumns.tsx +21 -13
  77. package/eventcatalog/src/components/Tables/columns/UserTableColumns.tsx +30 -19
  78. package/eventcatalog/src/components/ThemeToggle.tsx +18 -0
  79. package/eventcatalog/src/enterprise/ai/chat-api.ts +24 -3
  80. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/components/NestedItem.tsx +15 -7
  81. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/components/NoResultsFound.tsx +2 -2
  82. package/eventcatalog/src/enterprise/custom-documentation/components/CustomDocsNav/index.tsx +19 -15
  83. package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/index.astro +50 -17
  84. package/eventcatalog/src/layouts/DirectoryLayout.astro +11 -6
  85. package/eventcatalog/src/layouts/DiscoverLayout.astro +13 -8
  86. package/eventcatalog/src/layouts/Footer.astro +6 -6
  87. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +62 -14
  88. package/eventcatalog/src/pages/_index.astro +135 -179
  89. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +2 -2
  90. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +4 -4
  91. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +77 -63
  92. package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +23 -24
  93. package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +66 -50
  94. package/eventcatalog/src/pages/docs/custom/index.astro +2 -2
  95. package/eventcatalog/src/pages/docs/teams/[id]/index.astro +25 -21
  96. package/eventcatalog/src/pages/docs/users/[id]/index.astro +25 -21
  97. package/eventcatalog/src/pages/schemas/explorer/index.astro +1 -1
  98. package/eventcatalog/src/pages/studio.astro +59 -31
  99. package/eventcatalog/src/remark-plugins/directives.ts +6 -6
  100. package/eventcatalog/src/remark-plugins/mermaid.ts +2 -2
  101. package/eventcatalog/src/stores/theme-store.ts +93 -0
  102. package/eventcatalog/src/styles/theme.css +255 -0
  103. package/eventcatalog/src/styles/themes/forest.css +230 -0
  104. package/eventcatalog/src/styles/themes/ocean.css +235 -0
  105. package/eventcatalog/src/styles/themes/sapphire.css +230 -0
  106. package/eventcatalog/src/styles/themes/sunset.css +230 -0
  107. package/eventcatalog/src/utils/feature.ts +4 -0
  108. package/eventcatalog/tailwind.config.mjs +6 -3
  109. package/package.json +7 -6
@@ -224,7 +224,7 @@ export default function StepWalkthrough({
224
224
  <select
225
225
  value={selectedPathIndex}
226
226
  onChange={(e: React.ChangeEvent<HTMLSelectElement>) => handlePathSelection(parseInt(e.target.value))}
227
- className="w-full px-3 py-2 text-xs border border-gray-300 rounded-md bg-white focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500"
227
+ className="w-full px-3 py-2 text-xs border border-gray-300 rounded-md bg-white focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:border-[rgb(var(--ec-accent))]"
228
228
  >
229
229
  {availablePaths.map((path, index) => {
230
230
  // @ts-ignore
@@ -256,7 +256,7 @@ export default function StepWalkthrough({
256
256
  <div className="flex-1"></div>
257
257
  <button
258
258
  onClick={handleNextStep}
259
- className="flex items-center justify-center px-6 py-2 text-xs font-medium bg-purple-600 text-white rounded-md hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 transition-colors"
259
+ className="flex items-center justify-center px-6 py-2 text-xs font-medium bg-[rgb(var(--ec-accent))] text-white rounded-md hover:bg-[rgb(var(--ec-accent-hover))] focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2 transition-colors"
260
260
  >
261
261
  Start
262
262
  </button>
@@ -266,7 +266,7 @@ export default function StepWalkthrough({
266
266
  <>
267
267
  <button
268
268
  onClick={handlePreviousStep}
269
- className="flex items-center justify-center px-4 py-2 text-xs font-medium bg-purple-600 text-white rounded-md hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 transition-colors"
269
+ className="flex items-center justify-center px-4 py-2 text-xs font-medium bg-[rgb(var(--ec-accent))] text-white rounded-md hover:bg-[rgb(var(--ec-accent-hover))] focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2 transition-colors"
270
270
  >
271
271
  <ChevronLeftIcon className="w-4 h-4 mr-1" />
272
272
  Previous
@@ -275,7 +275,7 @@ export default function StepWalkthrough({
275
275
  {availablePaths.length > 0 ? (
276
276
  <button
277
277
  onClick={handleNextStep}
278
- className="flex items-center justify-center px-4 py-2 text-xs font-medium bg-purple-600 text-white rounded-md hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 transition-colors"
278
+ className="flex items-center justify-center px-4 py-2 text-xs font-medium bg-[rgb(var(--ec-accent))] text-white rounded-md hover:bg-[rgb(var(--ec-accent-hover))] focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2 transition-colors"
279
279
  >
280
280
  Next
281
281
  <ChevronRightIcon className="w-4 h-4 ml-1" />
@@ -55,7 +55,7 @@ const StudioModal: React.FC<StudioModalProps> = ({ isOpen, onClose }) => {
55
55
  Import your diagram into{' '}
56
56
  <a
57
57
  href="https://eventcatalog.studio"
58
- className="text-purple-600 hover:text-purple-700 underline"
58
+ className="text-[rgb(var(--ec-accent))] hover:text-[rgb(var(--ec-accent-hover))] underline"
59
59
  target="_blank"
60
60
  rel="noopener noreferrer"
61
61
  >
@@ -90,7 +90,7 @@ const StudioModal: React.FC<StudioModalProps> = ({ isOpen, onClose }) => {
90
90
  </button>
91
91
  </div>
92
92
 
93
- <div className="bg-purple-50 rounded-lg p-4 border border-purple-200">
93
+ <div className="bg-[rgb(var(--ec-accent-subtle))] rounded-lg p-4 border border-[rgb(var(--ec-accent)/0.3)]">
94
94
  <h4 className="text-sm font-bold text-gray-900 mb-2">Step 2: Open EventCatalog Studio</h4>
95
95
  <p className="text-xs text-gray-600 mb-3">
96
96
  Go to EventCatalog Studio and import your design using the "Import from EventCatalog" button.
@@ -98,7 +98,7 @@ const StudioModal: React.FC<StudioModalProps> = ({ isOpen, onClose }) => {
98
98
 
99
99
  <button
100
100
  onClick={handleOpenStudio}
101
- className="w-full flex items-center justify-center space-x-2 px-4 py-2 bg-purple-600 text-white text-sm font-medium rounded-md hover:bg-purple-700 transition-colors"
101
+ className="w-full flex items-center justify-center space-x-2 px-4 py-2 bg-[rgb(var(--ec-accent))] text-white text-sm font-medium rounded-md hover:bg-[rgb(var(--ec-accent-hover))] transition-colors"
102
102
  >
103
103
  <ExternalLinkIcon className="w-4 h-4" />
104
104
  <span>Open EventCatalog Studio</span>
@@ -113,7 +113,7 @@ const StudioModal: React.FC<StudioModalProps> = ({ isOpen, onClose }) => {
113
113
  <Dialog.Close asChild>
114
114
  <button
115
115
  type="button"
116
- className="px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 transition-colors"
116
+ className="px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2 transition-colors"
117
117
  onClick={onClose}
118
118
  >
119
119
  Close
@@ -214,7 +214,7 @@ const VisualiserSearch = forwardRef<VisualiserSearchRef, VisualiserSearchProps>(
214
214
  onChange={handleSearchChange}
215
215
  onKeyDown={handleSearchKeyDown}
216
216
  onFocus={handleSearchFocus}
217
- className="w-full px-4 py-2 pr-10 bg-white border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-transparent"
217
+ className="w-full px-4 py-2 pr-10 bg-white border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:border-transparent"
218
218
  />
219
219
  {searchQuery && (
220
220
  <button
@@ -238,7 +238,7 @@ const VisualiserSearch = forwardRef<VisualiserSearchRef, VisualiserSearchProps>(
238
238
  key={node.id}
239
239
  onClick={() => handleSuggestionClick(node)}
240
240
  className={`px-4 py-2 cursor-pointer flex items-center justify-between hover:bg-gray-100 ${
241
- index === selectedSuggestionIndex ? 'bg-purple-50' : ''
241
+ index === selectedSuggestionIndex ? 'bg-[rgb(var(--ec-accent-subtle))]' : ''
242
242
  }`}
243
243
  >
244
244
  <span className="text-sm font-medium text-gray-900">{nodeName}</span>
@@ -37,35 +37,35 @@ const ResourceRow = memo(
37
37
  const owners = resource.owners || [];
38
38
 
39
39
  return (
40
- <tr className="group hover:bg-gray-100">
41
- <td className="whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-gray-900 sm:pl-6 relative">
40
+ <tr className="group hover:bg-[rgb(var(--ec-content-hover))]">
41
+ <td className="whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-[rgb(var(--ec-page-text))] sm:pl-6 relative">
42
42
  <a href={url} className="absolute inset-0 z-10" aria-label={`View details for ${resource.name}`} />
43
43
  <div className="flex items-center gap-2 relative">
44
44
  <Icon className={`h-5 w-5 text-${color}-500`} />
45
- <span className="group-hover:text-blue-600 break-all">{resource.name}</span>
45
+ <span className="group-hover:text-[rgb(var(--ec-accent))] break-all">{resource.name}</span>
46
46
  </div>
47
47
  </td>
48
- <td className="whitespace-nowrap px-3 py-4 text-sm text-gray-500 relative">
48
+ <td className="whitespace-nowrap px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
49
49
  <a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
50
50
  <span>v{resource.version}</span>
51
51
  </td>
52
- <td className="whitespace-nowrap px-3 py-4 text-sm text-gray-500 relative">
52
+ <td className="whitespace-nowrap px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
53
53
  <a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
54
54
  <span>{type}</span>
55
55
  </td>
56
- <td className="px-3 py-4 text-sm text-gray-500 relative">
56
+ <td className="px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
57
57
  <a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
58
58
  <span className="line-clamp-2 break-words">{resource.summary || resource.description || '-'}</span>
59
59
  </td>
60
60
  {showTags && (
61
- <td className="px-3 py-4 text-sm text-gray-500 relative">
61
+ <td className="px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
62
62
  <a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
63
63
  <div className="flex flex-wrap gap-1">
64
64
  {tags.length > 0
65
65
  ? tags.map((tag, index) => (
66
66
  <span
67
67
  key={`${tag}-${index}`}
68
- className="inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10"
68
+ className="inline-flex items-center rounded-md bg-[rgb(var(--ec-content-hover))] px-2 py-1 text-xs font-medium text-[rgb(var(--ec-page-text-muted))] ring-1 ring-inset ring-[rgb(var(--ec-page-border))]"
69
69
  >
70
70
  {tag}
71
71
  </span>
@@ -75,14 +75,14 @@ const ResourceRow = memo(
75
75
  </td>
76
76
  )}
77
77
  {showOwners && (
78
- <td className="px-3 py-4 text-sm text-gray-500 relative">
78
+ <td className="px-3 py-4 text-sm text-[rgb(var(--ec-page-text-muted))] relative">
79
79
  <a href={url} className="absolute inset-0 z-10" aria-hidden="true" />
80
80
  <div className="flex flex-wrap gap-1">
81
81
  {owners.length > 0
82
82
  ? owners.map((owner, index) => (
83
83
  <span
84
84
  key={`${owner.id || owner.name}-${index}`}
85
- className="inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10"
85
+ className="inline-flex items-center rounded-md bg-[rgb(var(--ec-content-hover))] px-2 py-1 text-xs font-medium text-[rgb(var(--ec-page-text-muted))] ring-1 ring-inset ring-[rgb(var(--ec-page-border))]"
86
86
  >
87
87
  {owner.name || owner.id}
88
88
  </span>
@@ -119,8 +119,8 @@ const FilterButton = memo(
119
119
  }}
120
120
  className={`px-3 py-1 rounded-md text-sm font-medium ${
121
121
  typeFilter === type
122
- ? 'bg-black text-white border border-gray-200 hover:bg-gray-900'
123
- : 'bg-white text-black border border-gray-200 hover:bg-gray-100'
122
+ ? 'bg-[rgb(var(--ec-button-bg))] text-[rgb(var(--ec-button-text))] border border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-button-bg-hover))]'
123
+ : 'bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] text-[rgb(var(--ec-page-text))] border border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))]'
124
124
  }`}
125
125
  >
126
126
  {label} ({count})
@@ -217,13 +217,13 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
217
217
 
218
218
  return (
219
219
  <div className="mx-auto not-prose py-4 space-y-4 my-4">
220
- {title && <h2 className="text-2xl font-semibold">{title}</h2>}
221
- <div className="flow-root bg-white border-gray-200 border p-4 pb-2 rounded-lg text-gray-900">
220
+ {title && <h2 className="text-2xl font-semibold text-[rgb(var(--ec-page-text))]">{title}</h2>}
221
+ <div className="flow-root bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border-[rgb(var(--ec-page-border))] border p-4 pb-2 rounded-lg text-[rgb(var(--ec-page-text))]">
222
222
  <div className="space-y-4">
223
223
  <h2 className="text-xl font-semibold">
224
224
  {subtitle} ({searchTerm || typeFilter ? `${filteredResources.length}/${resources.length}` : resources.length})
225
225
  </h2>
226
- <span className="text-sm text-gray-700">{description}</span>
226
+ <span className="text-sm text-[rgb(var(--ec-page-text-muted))]">{description}</span>
227
227
 
228
228
  {/* Type filter buttons - only shown if there are filter options */}
229
229
  {filterButtons.length > 0 && (
@@ -244,7 +244,12 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
244
244
 
245
245
  <div className="relative">
246
246
  <div className="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3">
247
- <svg className="h-5 w-5 text-gray-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
247
+ <svg
248
+ className="h-5 w-5 text-[rgb(var(--ec-icon-color))]"
249
+ viewBox="0 0 20 20"
250
+ fill="currentColor"
251
+ aria-hidden="true"
252
+ >
248
253
  <path
249
254
  fillRule="evenodd"
250
255
  d="M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z"
@@ -260,7 +265,7 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
260
265
  setCurrentPage(1); // Reset to first page when searching
261
266
  }}
262
267
  placeholder="Search by name, type, description, or tags..."
263
- className="block w-full rounded-md border-0 py-1.5 pl-10 pr-10 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm sm:leading-6"
268
+ className="block w-full rounded-md border-0 py-1.5 pl-10 pr-10 bg-[rgb(var(--ec-input-bg))] text-[rgb(var(--ec-input-text))] ring-1 ring-inset ring-[rgb(var(--ec-input-border))] placeholder:text-[rgb(var(--ec-input-placeholder))] focus:ring-2 focus:ring-inset focus:ring-[rgb(var(--ec-accent))] sm:text-sm sm:leading-6"
264
269
  />
265
270
  {searchTerm && (
266
271
  <button
@@ -271,7 +276,11 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
271
276
  className="absolute inset-y-0 right-0 flex items-center pr-3"
272
277
  aria-label="Clear search"
273
278
  >
274
- <svg className="h-5 w-5 text-gray-400 hover:text-gray-500" viewBox="0 0 20 20" fill="currentColor">
279
+ <svg
280
+ className="h-5 w-5 text-[rgb(var(--ec-icon-color))] hover:text-[rgb(var(--ec-icon-hover))]"
281
+ viewBox="0 0 20 20"
282
+ fill="currentColor"
283
+ >
275
284
  <path d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" />
276
285
  </svg>
277
286
  </button>
@@ -281,40 +290,52 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
281
290
  <div className="overflow-x-auto">
282
291
  <div className="inline-block min-w-full py-2 align-middle">
283
292
  <div className="max-w-full overflow-hidden">
284
- <table className="min-w-full table-fixed divide-y divide-gray-300 rounded-sm bg-white">
293
+ <table className="min-w-full table-fixed divide-y divide-[rgb(var(--ec-page-border))] rounded-sm bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))]">
285
294
  <thead>
286
295
  <tr>
287
296
  <th
288
297
  scope="col"
289
- className={`${showTags || showOwners ? 'w-1/5' : 'w-1/4'} py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-6`}
298
+ className={`${showTags || showOwners ? 'w-1/5' : 'w-1/4'} py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))] sm:pl-6`}
290
299
  >
291
300
  Name
292
301
  </th>
293
- <th scope="col" className="w-[100px] px-3 py-3.5 text-left text-sm font-semibold text-gray-900">
302
+ <th
303
+ scope="col"
304
+ className="w-[100px] px-3 py-3.5 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]"
305
+ >
294
306
  Version
295
307
  </th>
296
- <th scope="col" className="w-[100px] py-3.5 pl-3.5 pr-3 text-left text-sm font-semibold text-gray-900">
308
+ <th
309
+ scope="col"
310
+ className="w-[100px] py-3.5 pl-3.5 pr-3 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]"
311
+ >
297
312
  Type
298
313
  </th>
299
314
  <th
300
315
  scope="col"
301
- className={`${showTags && showOwners ? 'w-1/4' : showTags || showOwners ? 'w-1/3' : 'w-1/2'} px-3 py-3.5 text-left text-sm font-semibold text-gray-900`}
316
+ className={`${showTags && showOwners ? 'w-1/4' : showTags || showOwners ? 'w-1/3' : 'w-1/2'} px-3 py-3.5 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]`}
302
317
  >
303
318
  Description
304
319
  </th>
305
320
  {showTags && (
306
- <th scope="col" className="w-1/6 px-3 py-3.5 text-left text-sm font-semibold text-gray-900">
321
+ <th
322
+ scope="col"
323
+ className="w-1/6 px-3 py-3.5 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]"
324
+ >
307
325
  Tags
308
326
  </th>
309
327
  )}
310
328
  {showOwners && (
311
- <th scope="col" className="w-1/6 px-3 py-3.5 text-left text-sm font-semibold text-gray-900">
329
+ <th
330
+ scope="col"
331
+ className="w-1/6 px-3 py-3.5 text-left text-sm font-semibold text-[rgb(var(--ec-page-text))]"
332
+ >
312
333
  Owners
313
334
  </th>
314
335
  )}
315
336
  </tr>
316
337
  </thead>
317
- <tbody className="divide-y divide-gray-200">
338
+ <tbody className="divide-y divide-[rgb(var(--ec-page-border))]">
318
339
  {paginatedResources.length > 0 ? (
319
340
  paginatedResources.map((resource) => (
320
341
  <ResourceRow
@@ -328,7 +349,7 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
328
349
  <tr>
329
350
  <td
330
351
  colSpan={showTags && showOwners ? 6 : showTags || showOwners ? 5 : 4}
331
- className="text-center py-4 text-sm text-gray-500"
352
+ className="text-center py-4 text-sm text-[rgb(var(--ec-page-text-muted))]"
332
353
  >
333
354
  No resources found
334
355
  </td>
@@ -340,26 +361,26 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
340
361
  </div>
341
362
  </div>
342
363
  {totalPages > 1 && (
343
- <div className="flex items-center justify-between border-t border-gray-200 bg-white px-4 py-3 sm:px-6 -mt-2">
364
+ <div className="flex items-center justify-between border-t border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] px-4 py-3 sm:px-6 -mt-2">
344
365
  <div className="flex flex-1 justify-between sm:hidden">
345
366
  <button
346
367
  onClick={() => setCurrentPage(currentPage - 1)}
347
368
  disabled={currentPage === 1}
348
- className={`relative inline-flex items-center rounded-md border border-gray-300 bg-white px-4 py-2 text-sm font-medium ${currentPage === 1 ? 'text-gray-300' : 'text-gray-700 hover:bg-gray-50'}`}
369
+ className={`relative inline-flex items-center rounded-md border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] px-4 py-2 text-sm font-medium ${currentPage === 1 ? 'text-[rgb(var(--ec-icon-color))]' : 'text-[rgb(var(--ec-page-text))] hover:bg-[rgb(var(--ec-content-hover))]'}`}
349
370
  >
350
371
  Previous
351
372
  </button>
352
373
  <button
353
374
  onClick={() => setCurrentPage(currentPage + 1)}
354
375
  disabled={currentPage === totalPages}
355
- className={`relative ml-3 inline-flex items-center rounded-md border border-gray-300 bg-white px-4 py-2 text-sm font-medium ${currentPage === totalPages ? 'text-gray-300' : 'text-gray-700 hover:bg-gray-50'}`}
376
+ className={`relative ml-3 inline-flex items-center rounded-md border border-[rgb(var(--ec-page-border))] bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] px-4 py-2 text-sm font-medium ${currentPage === totalPages ? 'text-[rgb(var(--ec-icon-color))]' : 'text-[rgb(var(--ec-page-text))] hover:bg-[rgb(var(--ec-content-hover))]'}`}
356
377
  >
357
378
  Next
358
379
  </button>
359
380
  </div>
360
381
  <div className="hidden sm:flex sm:flex-1 sm:items-center sm:justify-between">
361
382
  <div>
362
- <p className="text-sm text-gray-700">
383
+ <p className="text-sm text-[rgb(var(--ec-page-text-muted))]">
363
384
  Showing <span className="font-medium">{startIndex + 1}</span> to{' '}
364
385
  <span className="font-medium">{Math.min(startIndex + itemsPerPage, filteredResources.length)}</span> of{' '}
365
386
  <span className="font-medium">{filteredResources.length}</span> results
@@ -370,7 +391,7 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
370
391
  <button
371
392
  onClick={() => setCurrentPage(currentPage - 1)}
372
393
  disabled={currentPage === 1}
373
- className={`relative inline-flex items-center rounded-l-md px-2 py-2 ${currentPage === 1 ? 'text-gray-300' : 'text-gray-400 hover:bg-gray-50'} ring-1 ring-inset ring-gray-300`}
394
+ className={`relative inline-flex items-center rounded-l-md px-2 py-2 ${currentPage === 1 ? 'text-[rgb(var(--ec-icon-color))]' : 'text-[rgb(var(--ec-page-text-muted))] hover:bg-[rgb(var(--ec-content-hover))]'} ring-1 ring-inset ring-[rgb(var(--ec-page-border))]`}
374
395
  >
375
396
  <span className="sr-only">Previous</span>
376
397
  <svg className="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
@@ -384,7 +405,7 @@ const ResourceGroupTable = (props: ResourceGroupTableProps) => {
384
405
  <button
385
406
  onClick={() => setCurrentPage(currentPage + 1)}
386
407
  disabled={currentPage === totalPages}
387
- className={`relative inline-flex items-center rounded-r-md px-2 py-2 ${currentPage === totalPages ? 'text-gray-300' : 'text-gray-400 hover:bg-gray-50'} ring-1 ring-inset ring-gray-300`}
408
+ className={`relative inline-flex items-center rounded-r-md px-2 py-2 ${currentPage === totalPages ? 'text-[rgb(var(--ec-icon-color))]' : 'text-[rgb(var(--ec-page-text-muted))] hover:bg-[rgb(var(--ec-content-hover))]'} ring-1 ring-inset ring-[rgb(var(--ec-page-border))]`}
388
409
  >
389
410
  <span className="sr-only">Next</span>
390
411
  <svg className="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
@@ -43,7 +43,7 @@ try {
43
43
 
44
44
  {
45
45
  !linkHasError && (
46
- <a href={href} class="text-purple-500 hover:text-purple-700">
46
+ <a href={href} class="text-[rgb(var(--ec-accent))] hover:text-[rgb(var(--ec-accent-hover))]">
47
47
  {slotHTML}
48
48
  </a>
49
49
  )
@@ -9,7 +9,7 @@ const { title } = Astro.props;
9
9
  </span>
10
10
  <h3 class="font-semibold text-lg ml-0">{title}</h3>
11
11
  </div>
12
- <p class="text-gray-500 text-sm ml-4"><slot /></p>
12
+ <p class="text-[rgb(var(--ec-page-text-muted))] text-sm ml-4"><slot /></p>
13
13
  </li>
14
14
 
15
15
  <script>
@@ -26,7 +26,7 @@ const { title } = Astro.props;
26
26
 
27
27
  <style is:global>
28
28
  .step a {
29
- color: #4b5563;
29
+ color: rgb(var(--ec-page-text-muted));
30
30
  text-decoration: underline;
31
31
  &:hover {
32
32
  color: #b977f9;
@@ -19,9 +19,9 @@ function splitByLi(html: string) {
19
19
  const data = splitByLi(html);
20
20
  ---
21
21
 
22
- <div class="bg-white text-gray-800 py-10 pb-0 font-sans not-prose">
23
- {title && <h2 class="text-2xl font-bold text-gray-800 mb-6">{title}</h2>}
24
- <ol class="relative border-l border-gray-200 ml-3">
22
+ <div class="bg-[rgb(var(--ec-page-bg))] text-[rgb(var(--ec-page-text))] py-10 pb-0 font-sans not-prose">
23
+ {title && <h2 class="text-2xl font-bold text-[rgb(var(--ec-page-text))] mb-6">{title}</h2>}
24
+ <ol class="relative border-l border-[rgb(var(--ec-page-border))] ml-3">
25
25
  {data.map((item: any) => <Fragment set:html={item} />)}
26
26
  </ol>
27
27
  </div>
@@ -32,8 +32,8 @@ const tabItems: TabItem[] = await Promise.all(
32
32
  const tabsId = Math.random().toString(36).substring(2, 9);
33
33
  ---
34
34
 
35
- <div class="bg-white text-gray-800 pb-10 not-prose" data-tabs-container={tabsId}>
36
- {title && <h2 class="text-2xl font-bold text-gray-800 mb-6">{title}</h2>}
35
+ <div class="bg-[rgb(var(--ec-page-bg))] text-[rgb(var(--ec-page-text))] pb-10 not-prose" data-tabs-container={tabsId}>
36
+ {title && <h2 class="text-2xl font-bold text-[rgb(var(--ec-page-text))] mb-6">{title}</h2>}
37
37
 
38
38
  {/* Tab List */}
39
39
  <div class="">
@@ -41,7 +41,7 @@ const tabsId = Math.random().toString(36).substring(2, 9);
41
41
  {
42
42
  tabItems.map((item) => (
43
43
  <button
44
- class="whitespace-nowrap py-4 px-1 border-b-2 px-6 font-bold text-sm border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 hover:bg-gray-100 focus:outline-none"
44
+ class="whitespace-nowrap py-4 px-1 border-b-2 px-6 font-bold text-sm border-transparent text-[rgb(var(--ec-page-text-muted))] hover:text-[rgb(var(--ec-page-text))] hover:border-[rgb(var(--ec-page-border))] hover:bg-[rgb(var(--ec-content-hover))] focus:outline-none tab-button"
45
45
  data-tab={item.id}
46
46
  aria-selected="false"
47
47
  >
@@ -70,22 +70,19 @@ const tabsId = Math.random().toString(36).substring(2, 9);
70
70
  const panels: NodeListOf<HTMLElement> = container.querySelectorAll('[data-tab-content]');
71
71
 
72
72
  // Show first tab by default
73
- tabs[0]?.classList.add('text-purple-600', 'border-purple-600');
74
- tabs[0]?.classList.remove('text-gray-500', 'border-transparent');
73
+ tabs[0]?.classList.add('tab-active');
75
74
  panels[0]?.classList.remove('hidden');
76
75
 
77
76
  tabs.forEach((tab: HTMLButtonElement) => {
78
77
  tab.addEventListener('click', () => {
79
78
  // Remove active states
80
79
  tabs.forEach((t: HTMLButtonElement) => {
81
- t.classList.remove('text-purple-600', 'border-purple-600');
82
- t.classList.add('text-gray-500', 'border-transparent');
80
+ t.classList.remove('tab-active');
83
81
  });
84
82
  panels.forEach((p: HTMLElement) => p.classList.add('hidden'));
85
83
 
86
84
  // Set active states
87
- tab.classList.remove('text-gray-500', 'border-transparent');
88
- tab.classList.add('text-purple-600', 'border-purple-600');
85
+ tab.classList.add('tab-active');
89
86
 
90
87
  // Show corresponding panel
91
88
  const tabId = tab.getAttribute('data-tab');
@@ -103,3 +100,10 @@ const tabsId = Math.random().toString(36).substring(2, 9);
103
100
  });
104
101
  });
105
102
  </script>
103
+
104
+ <style is:global>
105
+ .tab-button.tab-active {
106
+ color: rgb(var(--ec-accent));
107
+ border-color: rgb(var(--ec-accent));
108
+ }
109
+ </style>
@@ -28,31 +28,43 @@ function startsWithProtocol(str: string) {
28
28
  <a
29
29
  href={startsWithProtocol(href) ? href : buildUrl(href)}
30
30
  target={openWindow ? '_blank' : '_self'}
31
- class="block relative bg-white border border-gray-200 rounded-xl p-8 h-48 transition-all duration-300 ease-out hover:border-purple-300 hover:shadow-lg hover:shadow-purple-500/10 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 overflow-hidden"
31
+ class="tile-card block relative bg-[rgb(var(--ec-card-bg,var(--ec-page-bg)))] border border-[rgb(var(--ec-page-border))] rounded-xl p-8 h-48 transition-all duration-300 ease-out hover:border-[rgb(var(--ec-accent)/0.5)] focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ec-accent))] focus:ring-offset-2 overflow-hidden"
32
32
  >
33
33
  <!-- Icon centered in card with grid background -->
34
34
  <div class="relative h-full flex items-center justify-center">
35
35
  <!-- Squared paper grid behind icon -->
36
- <div
37
- class="absolute inset-0 opacity-15"
38
- style="background-image:
39
- linear-gradient(rgba(147, 51, 234, 0.2) 1px, transparent 1px),
40
- linear-gradient(90deg, rgba(147, 51, 234, 0.2) 1px, transparent 1px);
41
- background-size: 16px 16px;"
42
- >
43
- </div>
44
-
45
- {IconComponent && <IconComponent className="relative w-16 h-16 text-purple-600 stroke-1" />}
36
+ <div class="tile-grid absolute inset-0 opacity-15"></div>
37
+
38
+ {IconComponent && <IconComponent className="tile-icon relative w-16 h-16 stroke-1" />}
46
39
  </div>
47
40
  </a>
48
41
 
49
42
  <!-- Title and description outside card -->
50
43
  <div class="mt-4 space-y-0">
51
- <h2 class="text-gray-900 text-lg font-semibold">
44
+ <h2 class="text-[rgb(var(--ec-page-text))] text-lg font-semibold">
52
45
  {title}
53
46
  </h2>
54
- <p class="text-gray-600 text-sm leading-relaxed">
47
+ <p class="text-[rgb(var(--ec-page-text-muted))] text-sm leading-relaxed">
55
48
  {description}
56
49
  </p>
57
50
  </div>
58
51
  </div>
52
+
53
+ <style>
54
+ .tile-card:hover {
55
+ box-shadow:
56
+ 0 10px 15px -3px rgb(var(--ec-accent) / 0.1),
57
+ 0 4px 6px -4px rgb(var(--ec-accent) / 0.1);
58
+ }
59
+
60
+ .tile-grid {
61
+ background-image:
62
+ linear-gradient(rgb(var(--ec-accent) / 0.2) 1px, transparent 1px),
63
+ linear-gradient(90deg, rgb(var(--ec-accent) / 0.2) 1px, transparent 1px);
64
+ background-size: 16px 16px;
65
+ }
66
+
67
+ .tile-icon {
68
+ color: rgb(var(--ec-accent));
69
+ }
70
+ </style>
@@ -3,7 +3,7 @@ const { title, columns = 2 } = Astro.props;
3
3
  ---
4
4
 
5
5
  <section class="not-prose my-8">
6
- {title && <h2 class="text-2xl font-bold text-gray-800 mb-6">{title}</h2>}
6
+ {title && <h2 class="text-2xl font-bold text-[rgb(var(--ec-page-text))] mb-6">{title}</h2>}
7
7
  <div class={`grid grid-cols-1 md:grid-cols-${columns} gap-6 w-full not-prose`}>
8
8
  <slot />
9
9
  </div>
@@ -42,7 +42,7 @@ export default function ApiAccessSection({
42
42
  <CommandLineIcon className="h-3.5 w-3.5 text-gray-700" />
43
43
  <span className="text-xs font-medium text-gray-700">API</span>
44
44
  {!apiAccessEnabled && (
45
- <span className="inline-flex items-center gap-1 rounded bg-purple-50 px-1.5 py-0.5 text-[10px] font-medium text-purple-600 border border-purple-100">
45
+ <span className="inline-flex items-center gap-1 rounded bg-[rgb(var(--ec-accent-subtle))] px-1.5 py-0.5 text-[10px] font-medium text-[rgb(var(--ec-accent-text))] border border-[rgb(var(--ec-accent)/0.2)]">
46
46
  <LockClosedIcon className="h-2.5 w-2.5" />
47
47
  Scale
48
48
  </span>
@@ -119,7 +119,7 @@ export default function ApiAccessSection({
119
119
  </div>
120
120
  </div>
121
121
  ) : (
122
- <div className="flex items-center justify-between gap-3 bg-gradient-to-r from-purple-50 to-indigo-50 border border-purple-100 rounded-md px-3 py-2.5">
122
+ <div className="flex items-center justify-between gap-3 bg-[rgb(var(--ec-accent-subtle))] border border-[rgb(var(--ec-accent)/0.2)] rounded-md px-3 py-2.5">
123
123
  <div className="flex-1 min-w-0">
124
124
  <p className="text-xs font-medium text-gray-700">Access schemas via API</p>
125
125
  <p className="text-[10px] text-gray-500 mt-0.5">CI/CD, automation & integrations</p>
@@ -128,7 +128,7 @@ export default function ApiAccessSection({
128
128
  href="https://eventcatalog.cloud"
129
129
  target="_blank"
130
130
  rel="noopener noreferrer"
131
- className="flex-shrink-0 inline-flex items-center gap-1 px-2.5 py-1.5 text-[11px] font-medium text-white bg-purple-600 rounded-md hover:bg-purple-700 transition-colors"
131
+ className="flex-shrink-0 inline-flex items-center gap-1 px-2.5 py-1.5 text-[11px] font-medium text-white bg-[rgb(var(--ec-accent))] rounded-md hover:bg-[rgb(var(--ec-accent-hover))] transition-colors"
132
132
  >
133
133
  Try Scale
134
134
  <svg xmlns="http://www.w3.org/2000/svg" className="h-3 w-3" fill="none" viewBox="0 0 24 24" stroke="currentColor">
@@ -26,8 +26,8 @@ export default function ApiContentViewer({ message, onCopy, copiedId, apiAccessE
26
26
  return (
27
27
  <div className="h-full flex items-center justify-center p-8">
28
28
  <div className="max-w-md text-center">
29
- <div className="flex items-center justify-center w-16 h-16 mx-auto mb-4 rounded-2xl bg-gradient-to-br from-purple-100 to-indigo-100 border border-purple-200">
30
- <LockClosedIcon className="h-8 w-8 text-purple-600" />
29
+ <div className="flex items-center justify-center w-16 h-16 mx-auto mb-4 rounded-2xl bg-[rgb(var(--ec-accent-subtle))] border border-[rgb(var(--ec-accent)/0.3)]">
30
+ <LockClosedIcon className="h-8 w-8 text-[rgb(var(--ec-accent))]" />
31
31
  </div>
32
32
  <h3 className="text-lg font-semibold text-gray-900 mb-2">API Access</h3>
33
33
  <p className="text-sm text-gray-600 mb-6">
@@ -38,7 +38,7 @@ export default function ApiContentViewer({ message, onCopy, copiedId, apiAccessE
38
38
  href="https://eventcatalog.cloud"
39
39
  target="_blank"
40
40
  rel="noopener noreferrer"
41
- className="inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-white bg-purple-600 rounded-lg hover:bg-purple-700 transition-colors"
41
+ className="inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-white bg-[rgb(var(--ec-accent))] rounded-lg hover:bg-[rgb(var(--ec-accent-hover))] transition-colors"
42
42
  >
43
43
  Upgrade to Scale
44
44
  <svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">