@redpanda-data/docs-extensions-and-macros 4.12.5 → 4.13.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 (62) hide show
  1. package/README.adoc +33 -1064
  2. package/bin/doc-tools-mcp.js +720 -0
  3. package/bin/doc-tools.js +1050 -50
  4. package/bin/mcp-tools/antora.js +153 -0
  5. package/bin/mcp-tools/cache.js +89 -0
  6. package/bin/mcp-tools/cloud-regions.js +127 -0
  7. package/bin/mcp-tools/content-review.js +196 -0
  8. package/bin/mcp-tools/crd-docs.js +153 -0
  9. package/bin/mcp-tools/frontmatter.js +138 -0
  10. package/bin/mcp-tools/generated-docs-review.js +887 -0
  11. package/bin/mcp-tools/helm-docs.js +152 -0
  12. package/bin/mcp-tools/index.js +245 -0
  13. package/bin/mcp-tools/job-queue.js +468 -0
  14. package/bin/mcp-tools/mcp-validation.js +266 -0
  15. package/bin/mcp-tools/metrics-docs.js +146 -0
  16. package/bin/mcp-tools/openapi.js +174 -0
  17. package/bin/mcp-tools/prompt-discovery.js +283 -0
  18. package/bin/mcp-tools/property-docs.js +157 -0
  19. package/bin/mcp-tools/rpcn-docs.js +113 -0
  20. package/bin/mcp-tools/rpk-docs.js +141 -0
  21. package/bin/mcp-tools/telemetry.js +211 -0
  22. package/bin/mcp-tools/utils.js +131 -0
  23. package/bin/mcp-tools/versions.js +168 -0
  24. package/cli-utils/convert-doc-links.js +1 -1
  25. package/cli-utils/github-token.js +58 -0
  26. package/cli-utils/self-managed-docs-branch.js +2 -2
  27. package/cli-utils/setup-mcp.js +313 -0
  28. package/docker-compose/25.1/transactions.md +1 -1
  29. package/docker-compose/transactions.md +1 -1
  30. package/extensions/DEVELOPMENT.adoc +464 -0
  31. package/extensions/README.adoc +124 -0
  32. package/extensions/REFERENCE.adoc +768 -0
  33. package/extensions/USER_GUIDE.adoc +339 -0
  34. package/extensions/generate-rp-connect-info.js +3 -4
  35. package/extensions/version-fetcher/get-latest-console-version.js +38 -27
  36. package/extensions/version-fetcher/get-latest-redpanda-helm-version-from-operator.js +1 -1
  37. package/extensions/version-fetcher/get-latest-redpanda-version.js +65 -54
  38. package/extensions/version-fetcher/retry-util.js +88 -0
  39. package/extensions/version-fetcher/set-latest-version.js +6 -3
  40. package/macros/DEVELOPMENT.adoc +377 -0
  41. package/macros/README.adoc +105 -0
  42. package/macros/REFERENCE.adoc +222 -0
  43. package/macros/USER_GUIDE.adoc +220 -0
  44. package/macros/rp-connect-components.js +6 -6
  45. package/package.json +12 -3
  46. package/tools/bundle-openapi.js +20 -10
  47. package/tools/cloud-regions/generate-cloud-regions.js +1 -1
  48. package/tools/fetch-from-github.js +18 -4
  49. package/tools/gen-rpk-ascii.py +3 -1
  50. package/tools/generate-cli-docs.js +325 -0
  51. package/tools/get-console-version.js +4 -2
  52. package/tools/get-redpanda-version.js +4 -2
  53. package/tools/metrics/metrics.py +19 -7
  54. package/tools/property-extractor/Makefile +7 -1
  55. package/tools/property-extractor/cloud_config.py +4 -4
  56. package/tools/property-extractor/constant_resolver.py +11 -11
  57. package/tools/property-extractor/property_extractor.py +18 -16
  58. package/tools/property-extractor/topic_property_extractor.py +2 -2
  59. package/tools/property-extractor/transformers.py +7 -7
  60. package/tools/property-extractor/type_definition_extractor.py +4 -4
  61. package/tools/redpanda-connect/README.adoc +1 -1
  62. package/tools/redpanda-connect/generate-rpcn-connector-docs.js +5 -3
@@ -0,0 +1,377 @@
1
+ = AsciiDoc Macros Development Guide
2
+ :toc:
3
+ :toclevels: 3
4
+
5
+ Guide for developing new AsciiDoc macros.
6
+
7
+ AsciiDoc macros extend AsciiDoc syntax with custom inline and block elements. Macros are Asciidoctor.js extensions that process custom syntax and generate HTML output.
8
+
9
+ == Macro types
10
+
11
+ === Inline macros
12
+
13
+ Inline macros appear within text and generate inline HTML:
14
+
15
+ [,asciidoc]
16
+ ----
17
+ Text with glossterm:term[] inline.
18
+ ----
19
+
20
+ === Block macros
21
+
22
+ Block macros appear on their own lines and generate block-level HTML:
23
+
24
+ [,asciidoc]
25
+ ----
26
+ component_table::[]
27
+ ----
28
+
29
+ == Creating an inline macro
30
+
31
+ === Create the file
32
+
33
+ [,bash]
34
+ ----
35
+ touch macros/my-macro.js
36
+ ----
37
+
38
+ === Implement the macro
39
+
40
+ [,javascript]
41
+ ----
42
+ module.exports.register = function register (registry, context) {
43
+ // Register inline macro
44
+ registry.inlineMacro('mymacro', function () {
45
+ const self = this
46
+
47
+ // Define macro processing
48
+ self.process(function (parent, target, attrs) {
49
+ // target: the value after the colon
50
+ // attrs: positional and named attributes
51
+
52
+ // Generate HTML
53
+ const html = `<span class="my-macro">${target}</span>`
54
+
55
+ // Return as passthrough
56
+ return self.createInline(parent, 'quoted', html, { type: 'unquoted' })
57
+ })
58
+ })
59
+ }
60
+ ----
61
+
62
+ === Register in playbook
63
+
64
+ [,yaml]
65
+ ----
66
+ asciidoc:
67
+ extensions:
68
+ - './macros/my-macro.js'
69
+ ----
70
+
71
+ === Use in AsciiDoc
72
+
73
+ [,asciidoc]
74
+ ----
75
+ This is my mymacro:example[] macro.
76
+ ----
77
+
78
+ == Creating a block macro
79
+
80
+ [,javascript]
81
+ ----
82
+ module.exports.register = function register (registry, context) {
83
+ registry.blockMacro('myblock', function () {
84
+ const self = this
85
+
86
+ self.process(function (parent, target, attrs) {
87
+ // Generate block HTML
88
+ const html = `
89
+ <div class="my-block">
90
+ <h3>${target}</h3>
91
+ <p>${attrs.content || 'No content'}</p>
92
+ </div>
93
+ `
94
+
95
+ // Return as passthrough block
96
+ return self.createBlock(parent, 'pass', html)
97
+ })
98
+ })
99
+ }
100
+ ----
101
+
102
+ Use in AsciiDoc:
103
+
104
+ [,asciidoc]
105
+ ----
106
+ myblock::title[content=Some content here]
107
+ ----
108
+
109
+ == Common patterns
110
+
111
+ === Accessing attributes
112
+
113
+ [,javascript]
114
+ ----
115
+ self.process(function (parent, target, attrs) {
116
+ // Positional attributes
117
+ const first = attrs.$positional[0]
118
+ const second = attrs.$positional[1]
119
+
120
+ // Named attributes
121
+ const name = attrs.name
122
+ const value = attrs.value || 'default'
123
+
124
+ // Document attributes
125
+ const docAttr = parent.getDocument().getAttribute('my-attr')
126
+
127
+ return self.createInline(parent, 'quoted', html, { type: 'unquoted' })
128
+ })
129
+ ----
130
+
131
+ === Generating links
132
+
133
+ [,javascript]
134
+ ----
135
+ self.process(function (parent, target, attrs) {
136
+ const url = `https://example.com/${target}`
137
+ const text = attrs.text || target
138
+
139
+ const html = `<a href="${url}" class="external">${text}</a>`
140
+
141
+ return self.createInline(parent, 'quoted', html, { type: 'unquoted' })
142
+ })
143
+ ----
144
+
145
+ === Accessing page context
146
+
147
+ [,javascript]
148
+ ----
149
+ module.exports.register = function register (registry, context) {
150
+ // Access Antora context
151
+ const { contentCatalog, file } = context
152
+
153
+ registry.inlineMacro('pagemacro', function () {
154
+ const self = this
155
+
156
+ self.process(function (parent, target, attrs) {
157
+ // Access current page
158
+ const doc = parent.getDocument()
159
+ const component = doc.getAttribute('page-component-name')
160
+ const version = doc.getAttribute('page-component-version')
161
+
162
+ // Access content catalog
163
+ const page = contentCatalog.getById({
164
+ component,
165
+ version,
166
+ module: 'ROOT',
167
+ family: 'page',
168
+ relative: `${target}.adoc`
169
+ })
170
+
171
+ if (page) {
172
+ const html = `<a href="${page.pub.url}">${page.asciidoc.doctitle}</a>`
173
+ return self.createInline(parent, 'quoted', html, { type: 'unquoted' })
174
+ }
175
+
176
+ return self.createInline(parent, 'quoted', target, { type: 'unquoted' })
177
+ })
178
+ })
179
+ }
180
+ ----
181
+
182
+ === Creating complex HTML
183
+
184
+ [,javascript]
185
+ ----
186
+ self.process(function (parent, target, attrs) {
187
+ const items = attrs.items ? attrs.items.split(',') : []
188
+
189
+ const html = `
190
+ <div class="custom-list">
191
+ <ul>
192
+ ${items.map(item => `<li>${item.trim()}</li>`).join('\n')}
193
+ </ul>
194
+ </div>
195
+ `
196
+
197
+ return self.createBlock(parent, 'pass', html)
198
+ })
199
+ ----
200
+
201
+ === Error handling
202
+
203
+ [,javascript]
204
+ ----
205
+ self.process(function (parent, target, attrs) {
206
+ try {
207
+ if (!target) {
208
+ console.warn('mymacro: target is required')
209
+ return self.createInline(parent, 'quoted', '[Missing target]', { type: 'unquoted' })
210
+ }
211
+
212
+ // Process macro
213
+ const html = `<span>${target}</span>`
214
+ return self.createInline(parent, 'quoted', html, { type: 'unquoted' })
215
+
216
+ } catch (err) {
217
+ console.error(`mymacro error: ${err.message}`)
218
+ return self.createInline(parent, 'quoted', '[Macro error]', { type: 'unquoted' })
219
+ }
220
+ })
221
+ ----
222
+
223
+ == Testing
224
+
225
+ === Unit tests
226
+
227
+ [,javascript]
228
+ ----
229
+ // macros/__tests__/my-macro.test.js
230
+ const asciidoctor = require('@asciidoctor/core')()
231
+ const myMacro = require('../my-macro')
232
+
233
+ describe('my-macro', () => {
234
+ let registry
235
+
236
+ beforeEach(() => {
237
+ registry = asciidoctor.Extensions.create()
238
+ myMacro.register(registry)
239
+ })
240
+
241
+ test('processes inline macro', () => {
242
+ const html = asciidoctor.convert(
243
+ 'Text with mymacro:value[] inline.',
244
+ { extension_registry: registry }
245
+ )
246
+
247
+ expect(html).toContain('class="my-macro"')
248
+ expect(html).toContain('value')
249
+ })
250
+ })
251
+ ----
252
+
253
+ === Integration tests
254
+
255
+ Test with Antora:
256
+
257
+ [,bash]
258
+ ----
259
+ npx antora --fetch local-antora-playbook.yml
260
+ ----
261
+
262
+ == Best practices
263
+
264
+ === Validate input
265
+
266
+ [,javascript]
267
+ ----
268
+ if (!target) {
269
+ console.warn('Macro requires a target')
270
+ return self.createInline(parent, 'quoted', '', { type: 'unquoted' })
271
+ }
272
+ ----
273
+
274
+ === Escape HTML
275
+
276
+ [,javascript]
277
+ ----
278
+ function escapeHtml(text) {
279
+ return text
280
+ .replace(/&/g, '&amp;')
281
+ .replace(/</g, '&lt;')
282
+ .replace(/>/g, '&gt;')
283
+ .replace(/"/g, '&quot;')
284
+ .replace(/'/g, '&#039;')
285
+ }
286
+
287
+ const safeTarget = escapeHtml(target)
288
+ const html = `<span>${safeTarget}</span>`
289
+ ----
290
+
291
+ === Provide defaults
292
+
293
+ [,javascript]
294
+ ----
295
+ const cssClass = attrs.class || 'default-class'
296
+ const text = attrs.text || target || 'Default text'
297
+ ----
298
+
299
+ === Use semantic HTML
300
+
301
+ [,javascript]
302
+ ----
303
+ // Good
304
+ const html = `<code class="property">${target}</code>`
305
+
306
+ // Avoid
307
+ const html = `<span class="code-like property">${target}</span>`
308
+ ----
309
+
310
+ === Document your macro
311
+
312
+ [,javascript]
313
+ ----
314
+ /**
315
+ * My Macro - Short description
316
+ *
317
+ * Syntax: mymacro:target[attr1,attr2]
318
+ *
319
+ * Parameters:
320
+ * - target: The target value (required)
321
+ * - attr1: First attribute (optional)
322
+ * - attr2: Second attribute (optional)
323
+ *
324
+ * Example:
325
+ * mymacro:example[foo,bar]
326
+ */
327
+ module.exports.register = function register (registry, context) {
328
+ // Implementation
329
+ }
330
+ ----
331
+
332
+ == Debugging
333
+
334
+ === Enable logging
335
+
336
+ [,javascript]
337
+ ----
338
+ console.log('Macro target:', target)
339
+ console.log('Macro attrs:', JSON.stringify(attrs, null, 2))
340
+ console.log('Document attrs:', parent.getDocument().getAttributes())
341
+ ----
342
+
343
+ === Test locally
344
+
345
+ Create a test AsciiDoc file:
346
+
347
+ [,asciidoc]
348
+ ----
349
+ = Test Page
350
+
351
+ Testing mymacro:value[attr1,attr2] inline.
352
+ ----
353
+
354
+ Convert directly:
355
+
356
+ [,bash]
357
+ ----
358
+ node -e "
359
+ const asciidoctor = require('@asciidoctor/core')()
360
+ const macro = require('./macros/my-macro')
361
+ const registry = asciidoctor.Extensions.create()
362
+ macro.register(registry)
363
+ const html = asciidoctor.convertFile('test.adoc', {
364
+ extension_registry: registry,
365
+ to_file: false
366
+ })
367
+ console.log(html)
368
+ "
369
+ ----
370
+
371
+ == Related documentation
372
+
373
+ * link:USER_GUIDE.adoc[User guide] - How to use macros
374
+ * link:REFERENCE.adoc[Reference] - Complete macro documentation
375
+ * https://docs.asciidoctor.org/asciidoctor.js/latest/extend/extensions/[Asciidoctor.js Extensions]
376
+ * https://docs.asciidoctor.org/asciidoctor.js/latest/extend/extensions/inline-macro-processor/[Inline Macro Processor]
377
+ * https://docs.asciidoctor.org/asciidoctor.js/latest/extend/extensions/block-macro-processor/[Block Macro Processor]
@@ -0,0 +1,105 @@
1
+ = AsciiDoc Macros
2
+ :toc:
3
+ :toclevels: 2
4
+
5
+ Documentation for AsciiDoc macros and extensions for Redpanda documentation.
6
+
7
+ == What are AsciiDoc macros?
8
+
9
+ AsciiDoc macros are custom inline and block elements that extend AsciiDoc syntax. These macros provide specialized formatting, references, and dynamic content generation within documentation pages.
10
+
11
+ == Documentation
12
+
13
+ link:USER_GUIDE.adoc[**User guide**]:: How to use AsciiDoc macros in your documentation
14
+ +
15
+ * Installation and setup
16
+ * Using macros in AsciiDoc
17
+ * Common usage patterns
18
+ * Troubleshooting
19
+
20
+ link:REFERENCE.adoc[**Reference**]:: Complete reference for all available macros
21
+ +
22
+ * Macro descriptions
23
+ * Syntax and parameters
24
+ * Configuration options
25
+ * Examples for each macro
26
+
27
+ link:DEVELOPMENT.adoc[**Development guide**]:: How to develop new AsciiDoc macros
28
+ +
29
+ * Macro architecture
30
+ * Creating inline and block macros
31
+ * Testing and debugging
32
+ * Best practices
33
+
34
+ == Quickstart
35
+
36
+ === Install the package
37
+
38
+ [,bash]
39
+ ----
40
+ npm i @redpanda-data/docs-extensions-and-macros
41
+ ----
42
+
43
+ === Configure in your playbook
44
+
45
+ [,yaml]
46
+ ----
47
+ asciidoc:
48
+ extensions:
49
+ - '@redpanda-data/docs-extensions-and-macros/macros/glossary'
50
+ ----
51
+
52
+ IMPORTANT: Macros must be registered under the `asciidoc.extensions` key in your playbook, not `antora.extensions`.
53
+
54
+ == Available macros
55
+
56
+ === Inline macros
57
+
58
+ * **glossterm** - Reference glossary terms with tooltips
59
+ * **config_ref** - Link to configuration properties
60
+ * **helm_ref** - Link to Helm chart values
61
+ * **badge** - Display status badges
62
+
63
+ === Block macros
64
+
65
+ * **components_by_category** - Display Redpanda Connect components grouped by category
66
+ * **component_table** - Generate searchable component tables
67
+ * **component_type_dropdown** - Create dropdown for component types
68
+
69
+ See link:REFERENCE.adoc[Reference documentation] for complete details on each macro.
70
+
71
+ == Common use cases
72
+
73
+ === Reference glossary terms
74
+
75
+ [,asciidoc]
76
+ ----
77
+ The glossterm:partition[partition] contains the data.
78
+ ----
79
+
80
+ === Link to configuration
81
+
82
+ [,asciidoc]
83
+ ----
84
+ Configure the config_ref:retention.ms,true,topic-properties[] property.
85
+ ----
86
+
87
+ === Link to Helm values
88
+
89
+ [,asciidoc]
90
+ ----
91
+ For configuration options, see the helm_ref:storage.tieredConfig.cloud_storage_enabled[] value.
92
+ ----
93
+
94
+ === Display Redpanda Connect components
95
+
96
+ [,asciidoc]
97
+ ----
98
+ components_by_category::inputs[]
99
+ ----
100
+
101
+ == Support
102
+
103
+ * link:USER_GUIDE.adoc#troubleshooting[Troubleshooting guide]
104
+ * https://github.com/redpanda-data/docs-extensions-and-macros/issues[Report issues]
105
+ * https://docs.asciidoctor.org/asciidoctor.js/latest/extend/extensions/[Asciidoctor.js Extensions]
@@ -0,0 +1,222 @@
1
+ = AsciiDoc macros reference
2
+ :toc:
3
+ :toclevels: 3
4
+
5
+ Reference documentation for all AsciiDoc macros and extensions provided by this library.
6
+
7
+ IMPORTANT: Be sure to register each extension under the `asciidoc.extensions` key in the playbook, not the `antora.extensions` key.
8
+
9
+ == Add line numbers and highlights
10
+
11
+ This extension adds the necessary classes to make line numbers and line highlighting work with Prism.js.
12
+
13
+ === Registration
14
+
15
+ ```yaml
16
+ antora:
17
+ extensions:
18
+ - '@redpanda-data/docs-extensions-and-macros/asciidoc-extensions/add-line-numbers-highlights'
19
+ ```
20
+
21
+ == config_ref
22
+
23
+ This inline macro is used to generate a reference to a configuration value in the Redpanda documentation. The macro's parameters allow for control over the generated reference's format and the type of output produced.
24
+
25
+ === Usage
26
+
27
+ The `config_ref` macro is used in an AsciiDoc document as follows:
28
+
29
+ [,asciidoc]
30
+ ----
31
+ config_ref:configRef,isLink,path[]
32
+ ----
33
+
34
+ The `config_ref` macro takes three parameters:
35
+
36
+ configRef::
37
+ This is the configuration reference, which is also used to generate the anchor link if `isLink` is `true`.
38
+
39
+ isLink::
40
+ Whether the output should be a link. If `isLink` is set to `true`, the output will be a cross-reference (xref) to the relevant configuration value.
41
+
42
+ path::
43
+ This is the path to the document where the configuration value is defined. This parameter is used to to generate the link if `isLink` is `true`.
44
+
45
+ IMPORTANT: The path must be the name of a document at the root of the `reference` module.
46
+
47
+ NOTE: The `config_ref` macro is environment-aware. It checks if the document it is being used in is part of a Kubernetes environment by checking if the `env-kubernetes` attribute is set in the document's attributes. Depending on this check, it either prepends `storage.tieredConfig.` to the `configRef` or just uses the `configRef` as is.
48
+
49
+ For example:
50
+
51
+ [,asciidoc]
52
+ ----
53
+ config_ref:example_config,true,tunable-properties[]
54
+ ----
55
+
56
+ === Registration
57
+
58
+ [,yaml]
59
+ ----
60
+ asciidoc:
61
+ extensions:
62
+ - '@redpanda-data/docs-extensions-and-macros/macros/config-ref'
63
+ ----
64
+
65
+ == glossterm
66
+
67
+ The `glossterm` inline macro provides a way to define and reference glossary terms in your AsciiDoc documents.
68
+
69
+ NOTE: This macro is a customized version of https://gitlab.com/djencks/asciidoctor-glossary[`asciidoctor-glossary`].
70
+
71
+ === Usage
72
+
73
+ Use the `glossterm` inline macro to reference a term within the text of the document:
74
+
75
+ [,asciidoc]
76
+ ----
77
+ glossterm:my term[myDefinition]
78
+ ----
79
+
80
+ It takes two parameters:
81
+
82
+ term::
83
+ The term to be defined.
84
+
85
+ definition (optional)::
86
+ The definition of the term. If the term is defined in the https://github.com/redpanda-data/docs-site[`shared` component] or the `local-terms` object of the `antora.yml` file, you can omit the definition as it will always be replaced by those definitions.
87
+
88
+ === Configuration options
89
+
90
+ glossary-log-terms (optional)::
91
+ Whether to log a textual representation of a definition list item to the console.
92
+
93
+ glossary-term-role (optional)::
94
+ Role to assign each term. By default, glossary terms are assigned the `glossary-term` role, which gives them the class `glossary-term` in generated html.
95
+
96
+ glossary-links (optional)::
97
+ Whether to generate links to glossary entries.
98
+ By default, links to the glossary entries are generated from the glossary terms. To avoid this, set the attribute to `false` as either asciidoctor configuration or a header attribute.
99
+
100
+ glossary-page (optional)::
101
+ Target page for glossary links. By default, links are generated to the same page as the glossary term. To specify the target page, set this attribute to the resource ID of a page where the `glossary` block macro is used.
102
+
103
+ glossary-tooltip (optional)::
104
+ Whether to enable tooltips for the defined terms. Valid values are:
105
+ - title: This uses the browser built-in `title` attribute to display the definition.
106
+
107
+ - true: This inserts the definition as the value of the attribute `data-glossary-tooltip`.
108
+
109
+ - data-<attribute-name>​: This inserts the definition as the value of the supplied attribute name, which must start with `data`.
110
+
111
+ The last two options are intended to support js/css tooltip solutions such as tippy.js.
112
+
113
+ === Registration
114
+
115
+ [,yaml]
116
+ ----
117
+ asciidoc:
118
+ extensions:
119
+ - '@redpanda-data/docs-extensions-and-macros/macros/glossary'
120
+ ----
121
+
122
+ == helm_ref
123
+
124
+ This is an inline macro to create links to a Helm `values.yaml` file on ArtifactHub.
125
+
126
+ === Usage
127
+
128
+ In an AsciiDoc document, use the `helm_ref` macro as follows:
129
+
130
+ [,asciidoc]
131
+ ----
132
+ helm_ref:<helmRef>[]
133
+ ----
134
+
135
+ Where `<helmRef>` is the Helm configuration value you want to reference in the `values.yaml` file.
136
+
137
+ For example:
138
+
139
+ Given a Helm reference value of `myConfigValue`, you would use the macro like this:
140
+
141
+ [,asciidoc]
142
+ ----
143
+ helm_ref:myConfigValue[]
144
+ ----
145
+
146
+ This will generate the following output:
147
+
148
+ [,asciidoc]
149
+ ----
150
+ For default values and documentation for configuration options, see the https://artifacthub.io/packages/helm/redpanda-data/redpanda?modal=values&path=myConfigValue[values.yaml] file.
151
+ ----
152
+
153
+ If you do not specify a Helm reference value, the macro generates a link without specifying a path.
154
+
155
+ === Registration
156
+
157
+ [,yaml]
158
+ ----
159
+ asciidoc:
160
+ extensions:
161
+ - '@redpanda-data/docs-extensions-and-macros/macros/helm-ref'
162
+ ----
163
+
164
+ == components_by_category
165
+
166
+ This macro generates a tabbed interface to display Redpanda Connect components by category.
167
+
168
+ The categories are fetched from the `connectCategoriesData` that's generated in the Component category aggregator extension.
169
+
170
+ === Usage
171
+
172
+ ```asciidoc
173
+ components_by_category::[<type>]
174
+ ```
175
+
176
+ === Registration
177
+
178
+ ```yaml
179
+ asciidoc:
180
+ extensions:
181
+ - '@redpanda-data/docs-extensions-and-macros/macros/rp-connect-components'
182
+ ```
183
+
184
+ == component_table
185
+
186
+ This macro generates a searchable table of all Redpanda Connect components with filters for support and type.
187
+
188
+ The types are fetched from the `flatComponentsData` that's generated in the Component category aggregator extension.
189
+
190
+ === Usage
191
+
192
+ ```asciidoc
193
+ component_table::[]
194
+ ```
195
+
196
+ === Registration
197
+
198
+ ```yaml
199
+ asciidoc:
200
+ extensions:
201
+ - '@redpanda-data/docs-extensions-and-macros/macros/rp-connect-components'
202
+ ```
203
+
204
+ == component_type_dropdown
205
+
206
+ This macro generates a dropdown of other supported types for a particular component, allowing users to switch between different types.
207
+
208
+ The types are fetched from the `flatComponentsData` that's generated in the Component category aggregator extension.
209
+
210
+ === Usage
211
+
212
+ ```asciidoc
213
+ component_type_dropdown::[]
214
+ ```
215
+
216
+ === Registration
217
+
218
+ ```yaml
219
+ asciidoc:
220
+ extensions:
221
+ - '@redpanda-data/docs-extensions-and-macros/macros/rp-connect-components'
222
+ ```