@lukoweb/create-apitogo 0.2.22 → 0.2.24

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 (60) hide show
  1. package/LICENSE.md +18 -18
  2. package/README.md +60 -60
  3. package/dist/index.js +0 -1
  4. package/dist/templates/default/js/AGENTS.md +35 -35
  5. package/dist/templates/default/js/README-template.md +24 -24
  6. package/dist/templates/default/js/apis/openapi.yaml +806 -806
  7. package/dist/templates/default/js/apitogo.config.json +256 -256
  8. package/dist/templates/default/js/apitogo.config.jsx +3 -3
  9. package/dist/templates/default/js/env +23 -23
  10. package/dist/templates/default/js/eslintrc.json +4 -4
  11. package/dist/templates/default/js/gitignore +32 -32
  12. package/dist/templates/default/js/pages/example.mdx +131 -131
  13. package/dist/templates/default/js/pages/introduction.mdx +20 -20
  14. package/dist/templates/default/js/public/logo-dark.svg +4 -4
  15. package/dist/templates/default/js/public/logo-light.svg +4 -4
  16. package/dist/templates/default/js/user-panel/AccountPlansPage.tsx +1 -1
  17. package/dist/templates/default/js/user-panel/DashboardPage.tsx +1 -1
  18. package/dist/templates/default/ts/AGENTS.md +35 -35
  19. package/dist/templates/default/ts/README-template.md +24 -24
  20. package/dist/templates/default/ts/apis/openapi.yaml +806 -806
  21. package/dist/templates/default/ts/apitogo.config.json +221 -221
  22. package/dist/templates/default/ts/apitogo.config.tsx +8 -8
  23. package/dist/templates/default/ts/env +23 -23
  24. package/dist/templates/default/ts/eslintrc.json +6 -6
  25. package/dist/templates/default/ts/gitignore +32 -32
  26. package/dist/templates/default/ts/landing/LandingPage.tsx +176 -176
  27. package/dist/templates/default/ts/pages/example.mdx +132 -132
  28. package/dist/templates/default/ts/pages/introduction.mdx +21 -21
  29. package/dist/templates/default/ts/public/logo-dark.svg +4 -4
  30. package/dist/templates/default/ts/public/logo-light.svg +4 -4
  31. package/dist/templates/default/ts/tsconfig.json +16 -16
  32. package/dist/templates/default/ts/user-panel/AccountPlansPage.tsx +1 -1
  33. package/dist/templates/default/ts/user-panel/DashboardPage.tsx +1 -1
  34. package/dist/templates/empty/js/AGENTS.md +35 -35
  35. package/dist/templates/empty/js/README-template.md +23 -23
  36. package/dist/templates/empty/js/apitogo.config.json +80 -80
  37. package/dist/templates/empty/js/apitogo.config.jsx +6 -6
  38. package/dist/templates/empty/js/env +23 -23
  39. package/dist/templates/empty/js/eslintrc.json +4 -4
  40. package/dist/templates/empty/js/gitignore +32 -32
  41. package/dist/templates/empty/js/public/logo-dark.svg +4 -4
  42. package/dist/templates/empty/js/public/logo-light.svg +4 -4
  43. package/dist/templates/empty/js/user-panel/AccountPlansPage.tsx +1 -1
  44. package/dist/templates/empty/js/user-panel/DashboardPage.tsx +1 -1
  45. package/dist/templates/empty/ts/AGENTS.md +35 -35
  46. package/dist/templates/empty/ts/README-template.md +23 -23
  47. package/dist/templates/empty/ts/apitogo.config.json +81 -81
  48. package/dist/templates/empty/ts/apitogo.config.tsx +8 -8
  49. package/dist/templates/empty/ts/env +23 -23
  50. package/dist/templates/empty/ts/eslintrc.json +6 -6
  51. package/dist/templates/empty/ts/gitignore +32 -32
  52. package/dist/templates/empty/ts/landing/LandingPage.tsx +43 -43
  53. package/dist/templates/empty/ts/public/logo-dark.svg +4 -4
  54. package/dist/templates/empty/ts/public/logo-light.svg +4 -4
  55. package/dist/templates/empty/ts/tsconfig.json +16 -16
  56. package/dist/templates/empty/ts/user-panel/AccountPlansPage.tsx +1 -1
  57. package/dist/templates/empty/ts/user-panel/DashboardPage.tsx +1 -1
  58. package/dist/templates/index.ts +422 -422
  59. package/dist/templates/types.ts +23 -23
  60. package/package.json +1 -1
@@ -1,176 +1,176 @@
1
- import {
2
- ApiShowcaseSection,
3
- FeaturesSection,
4
- HeroSection,
5
- LandingShell,
6
- PlansPreviewSection,
7
- PricingCtaSection,
8
- StepsSection,
9
- } from "@lukoweb/apitogo-module-landing";
10
- import { usePlansPreview } from "@lukoweb/apitogo-plugin-dev-portal-billing";
11
-
12
- export default function LandingPage() {
13
- // Plans from modules.userPanel.plans.items (or the live dev portal backend).
14
- const plans = usePlansPreview();
15
-
16
- return (
17
- <LandingShell
18
- title="Test against a real API before you build one"
19
- description="Sample API gives you realistic endpoints, authentication, rate limits, and webhooks — a fully working backend for prototypes, demos, and QA."
20
- >
21
- <HeroSection
22
- hero={{
23
- badge: "SANDBOX API",
24
- title: "Test against a real API before you build one",
25
- description:
26
- "Sample API gives you realistic endpoints, authentication, rate limits, and webhooks — a fully working backend for prototypes, demos, and QA. No setup, no infrastructure.",
27
- }}
28
- primaryAction={{ label: "Start for free", href: "/signup" }}
29
- secondaryAction={{ label: "Read the docs", href: "/introduction" }}
30
- codeExamples={[
31
- {
32
- filename: "Create a key",
33
- language: "bash",
34
- code: `$ curl -X POST https://api.sampleapi.dev/v1/keys
35
- # sk_live_9f2c7a1e...`,
36
- },
37
- {
38
- filename: "Call an endpoint",
39
- language: "bash",
40
- code: `$ curl https://api.sampleapi.dev/v1/users/42 \\
41
- -H "Authorization: Bearer sk_live_9f2c..."
42
- # { "id": 42, "name": "Priya Shah", "plan": "pro" }`,
43
- },
44
- ]}
45
- />
46
- <FeaturesSection
47
- section={{
48
- label: "Everything a real API has",
49
- title: "Built for testing, not just browsing",
50
- description:
51
- "Realistic data, live auth, rate limits, and webhooks — so you can ship with confidence.",
52
- }}
53
- features={[
54
- {
55
- title: "Realistic mock data",
56
- description:
57
- "Users, orders, products, and posts with relationships and pagination, not lorem ipsum.",
58
- icon: "boxes",
59
- },
60
- {
61
- title: "Real auth flow",
62
- description:
63
- "Every request checks a live API key, so you can test error handling and expiry.",
64
- icon: "shield-check",
65
- },
66
- {
67
- title: "Rate limiting",
68
- description:
69
- "Per-plan request limits and 429 responses, so you can build and test backoff logic.",
70
- icon: "gauge",
71
- },
72
- {
73
- title: "Webhooks",
74
- description:
75
- "Trigger test events and inspect delivered payloads and retries.",
76
- icon: "webhook",
77
- },
78
- {
79
- title: "OpenAPI & docs",
80
- description:
81
- "A full OpenAPI spec and reference docs for every endpoint.",
82
- icon: "book-open",
83
- },
84
- {
85
- title: "Usage analytics",
86
- description:
87
- "Track requests, latency, and errors per key from your dashboard.",
88
- icon: "activity",
89
- },
90
- ]}
91
- />
92
- <StepsSection
93
- steps={[
94
- {
95
- step: "01",
96
- title: "Create an account",
97
- description:
98
- "Sign up and land straight in your dashboard — no approval queue.",
99
- },
100
- {
101
- step: "02",
102
- title: "Generate a key",
103
- description:
104
- "Every key is scoped and rate-limited to your plan from the moment it's created.",
105
- },
106
- {
107
- step: "03",
108
- title: "Call any endpoint",
109
- description:
110
- "Users, orders, products, posts, and webhooks — all documented, all live.",
111
- },
112
- ]}
113
- />
114
- {/* Static sample list. To show your real API operations from the dev portal
115
- backend instead, see https://docs.apitogo.com/docs/customization/landing-page#live-apis */}
116
- <ApiShowcaseSection
117
- apiShowcase={{
118
- title: "Sample endpoints",
119
- subtitle:
120
- "A slice of what's available — see the full reference in the docs.",
121
- browseAllHref: "/api",
122
- browseAllLabel: "Browse all APIs",
123
- layout: "list",
124
- items: [
125
- {
126
- name: "List paginated users",
127
- path: "/v1/users",
128
- method: "GET",
129
- summary: "List paginated users",
130
- },
131
- {
132
- name: "Create a mock order",
133
- path: "/v1/orders",
134
- method: "POST",
135
- summary: "Create a mock order",
136
- },
137
- {
138
- name: "Fetch one product",
139
- path: "/v1/products/{id}",
140
- method: "GET",
141
- summary: "Fetch one product",
142
- },
143
- {
144
- name: "List posts with comments",
145
- path: "/v1/posts",
146
- method: "GET",
147
- summary: "List posts with comments",
148
- },
149
- {
150
- name: "Fire a test webhook event",
151
- path: "/v1/webhooks/test",
152
- method: "POST",
153
- summary: "Fire a test webhook event",
154
- },
155
- {
156
- name: "Delete a mock order",
157
- path: "/v1/orders/{id}",
158
- method: "DELETE",
159
- summary: "Delete a mock order",
160
- },
161
- ],
162
- }}
163
- />
164
- <PlansPreviewSection plans={plans} />
165
- <PricingCtaSection
166
- variant="banner"
167
- pricingCta={{
168
- title: "Start testing in minutes",
169
- description:
170
- "Free tier includes 1,000 requests a month — no card required.",
171
- primaryAction: { label: "Start for free", href: "/signup" },
172
- }}
173
- />
174
- </LandingShell>
175
- );
176
- }
1
+ import {
2
+ ApiShowcaseSection,
3
+ FeaturesSection,
4
+ HeroSection,
5
+ LandingShell,
6
+ PlansPreviewSection,
7
+ PricingCtaSection,
8
+ StepsSection,
9
+ } from "@lukoweb/apitogo-module-landing";
10
+ import { usePlansPreview } from "@lukoweb/apitogo-plugin-dev-portal-billing";
11
+
12
+ export default function LandingPage() {
13
+ // Plans from modules.userPanel.plans.items (or the live dev portal backend).
14
+ const plans = usePlansPreview();
15
+
16
+ return (
17
+ <LandingShell
18
+ title="Test against a real API before you build one"
19
+ description="Sample API gives you realistic endpoints, authentication, rate limits, and webhooks — a fully working backend for prototypes, demos, and QA."
20
+ >
21
+ <HeroSection
22
+ hero={{
23
+ badge: "SANDBOX API",
24
+ title: "Test against a real API before you build one",
25
+ description:
26
+ "Sample API gives you realistic endpoints, authentication, rate limits, and webhooks — a fully working backend for prototypes, demos, and QA. No setup, no infrastructure.",
27
+ }}
28
+ primaryAction={{ label: "Start for free", href: "/signup" }}
29
+ secondaryAction={{ label: "Read the docs", href: "/introduction" }}
30
+ codeExamples={[
31
+ {
32
+ filename: "Create a key",
33
+ language: "bash",
34
+ code: `$ curl -X POST https://api.sampleapi.dev/v1/keys
35
+ # sk_live_9f2c7a1e...`,
36
+ },
37
+ {
38
+ filename: "Call an endpoint",
39
+ language: "bash",
40
+ code: `$ curl https://api.sampleapi.dev/v1/users/42 \\
41
+ -H "Authorization: Bearer sk_live_9f2c..."
42
+ # { "id": 42, "name": "Priya Shah", "plan": "pro" }`,
43
+ },
44
+ ]}
45
+ />
46
+ <FeaturesSection
47
+ section={{
48
+ label: "Everything a real API has",
49
+ title: "Built for testing, not just browsing",
50
+ description:
51
+ "Realistic data, live auth, rate limits, and webhooks — so you can ship with confidence.",
52
+ }}
53
+ features={[
54
+ {
55
+ title: "Realistic mock data",
56
+ description:
57
+ "Users, orders, products, and posts with relationships and pagination, not lorem ipsum.",
58
+ icon: "boxes",
59
+ },
60
+ {
61
+ title: "Real auth flow",
62
+ description:
63
+ "Every request checks a live API key, so you can test error handling and expiry.",
64
+ icon: "shield-check",
65
+ },
66
+ {
67
+ title: "Rate limiting",
68
+ description:
69
+ "Per-plan request limits and 429 responses, so you can build and test backoff logic.",
70
+ icon: "gauge",
71
+ },
72
+ {
73
+ title: "Webhooks",
74
+ description:
75
+ "Trigger test events and inspect delivered payloads and retries.",
76
+ icon: "webhook",
77
+ },
78
+ {
79
+ title: "OpenAPI & docs",
80
+ description:
81
+ "A full OpenAPI spec and reference docs for every endpoint.",
82
+ icon: "book-open",
83
+ },
84
+ {
85
+ title: "Usage analytics",
86
+ description:
87
+ "Track requests, latency, and errors per key from your dashboard.",
88
+ icon: "activity",
89
+ },
90
+ ]}
91
+ />
92
+ <StepsSection
93
+ steps={[
94
+ {
95
+ step: "01",
96
+ title: "Create an account",
97
+ description:
98
+ "Sign up and land straight in your dashboard — no approval queue.",
99
+ },
100
+ {
101
+ step: "02",
102
+ title: "Generate a key",
103
+ description:
104
+ "Every key is scoped and rate-limited to your plan from the moment it's created.",
105
+ },
106
+ {
107
+ step: "03",
108
+ title: "Call any endpoint",
109
+ description:
110
+ "Users, orders, products, posts, and webhooks — all documented, all live.",
111
+ },
112
+ ]}
113
+ />
114
+ {/* Static sample list. To show your real API operations from the dev portal
115
+ backend instead, see https://docs.apitogo.com/docs/customization/landing-page#live-apis */}
116
+ <ApiShowcaseSection
117
+ apiShowcase={{
118
+ title: "Sample endpoints",
119
+ subtitle:
120
+ "A slice of what's available — see the full reference in the docs.",
121
+ browseAllHref: "/api",
122
+ browseAllLabel: "Browse all APIs",
123
+ layout: "list",
124
+ items: [
125
+ {
126
+ name: "List paginated users",
127
+ path: "/v1/users",
128
+ method: "GET",
129
+ summary: "List paginated users",
130
+ },
131
+ {
132
+ name: "Create a mock order",
133
+ path: "/v1/orders",
134
+ method: "POST",
135
+ summary: "Create a mock order",
136
+ },
137
+ {
138
+ name: "Fetch one product",
139
+ path: "/v1/products/{id}",
140
+ method: "GET",
141
+ summary: "Fetch one product",
142
+ },
143
+ {
144
+ name: "List posts with comments",
145
+ path: "/v1/posts",
146
+ method: "GET",
147
+ summary: "List posts with comments",
148
+ },
149
+ {
150
+ name: "Fire a test webhook event",
151
+ path: "/v1/webhooks/test",
152
+ method: "POST",
153
+ summary: "Fire a test webhook event",
154
+ },
155
+ {
156
+ name: "Delete a mock order",
157
+ path: "/v1/orders/{id}",
158
+ method: "DELETE",
159
+ summary: "Delete a mock order",
160
+ },
161
+ ],
162
+ }}
163
+ />
164
+ <PlansPreviewSection plans={plans} />
165
+ <PricingCtaSection
166
+ variant="banner"
167
+ pricingCta={{
168
+ title: "Start testing in minutes",
169
+ description:
170
+ "Free tier includes 1,000 requests a month — no card required.",
171
+ primaryAction: { label: "Start for free", href: "/signup" },
172
+ }}
173
+ />
174
+ </LandingShell>
175
+ );
176
+ }
@@ -1,132 +1,132 @@
1
- ---
2
- title: MDX examples
3
- description:
4
- Callouts, fenced code, tabbed code, tables, task lists, links, badges, and buttons available in
5
- APIToGo MDX pages.
6
- ---
7
-
8
- This page lists patterns you can copy into any `.mdx` file under `pages/`. Your site title comes
9
- from front matter (`title` above) and appears in the sidebar for this route.
10
-
11
- <Link to="/introduction">Introduction</Link> · <Link to="/api">API reference</Link> ·
12
- <Badge variant="secondary">built-in</Badge> <Badge variant="outline">mdx</Badge>
13
-
14
- ## Callouts (directives)
15
-
16
- :::note{title="Note"}
17
-
18
- Neutral context readers should notice.
19
-
20
- :::
21
-
22
- :::tip{title="Tip"}
23
-
24
- Suggested workflows or shortcuts.
25
-
26
- :::
27
-
28
- :::info{title="Info"}
29
-
30
- Extra detail that is not urgent.
31
-
32
- :::
33
-
34
- :::caution{title="Caution"}
35
-
36
- Something might break if misconfigured.
37
-
38
- :::
39
-
40
- :::danger{title="Danger"}
41
-
42
- Destructive or security-sensitive actions.
43
-
44
- :::
45
-
46
- ## Fenced code
47
-
48
- Inline: `ApitogoConfig`, `apitogo run`, `pages/example.mdx`.
49
-
50
- ```bash
51
- apitogo run
52
- apitogo build
53
- apitogo build --preview
54
- ```
55
-
56
- ```json
57
- { "example": true }
58
- ```
59
-
60
- ```ts
61
- import type { ApitogoConfig } from "@lukoweb/apitogo";
62
-
63
- const config: ApitogoConfig = {
64
- site: { title: "My API docs" },
65
- };
66
-
67
- export default config;
68
- ```
69
-
70
- ## Tabbed code (`CodeTabs`)
71
-
72
- <CodeTabs>
73
-
74
- ```bash title="curl"
75
- curl -sS https://httpbin.org/get
76
- ```
77
-
78
- ```bash title="HTTPie"
79
- http GET https://httpbin.org/get
80
- ```
81
-
82
- ```ts title="fetch"
83
- const res = await fetch("https://httpbin.org/get");
84
- console.log(await res.json());
85
- ```
86
-
87
- </CodeTabs>
88
-
89
- <CodeTabs>
90
-
91
- ```json title="JSON"
92
- { "status": "ok" }
93
- ```
94
-
95
- ```yaml title="YAML"
96
- status: ok
97
- ```
98
-
99
- </CodeTabs>
100
-
101
- ## Table
102
-
103
- | Topic | Where to look |
104
- | ------- | -------------------- |
105
- | Config | `apitogo.config.tsx` |
106
- | Pages | `pages/**/*.mdx` |
107
- | OpenAPI | `apis/openapi.yaml` |
108
-
109
- ## Lists
110
-
111
- 1. Edit Markdown or MDX under `pages/`.
112
- 2. Adjust `apitogo.config.tsx`.
113
- 3. Run `apitogo build` before deploy.
114
-
115
- Task list (GFM):
116
-
117
- - [x] Scaffold created
118
- - [ ] Customize for your API
119
-
120
- ## Markdown
121
-
122
- > Blockquote for quotes or asides.
123
-
124
- **Bold**, _italic_, ~~strikethrough~~, and [link to API](/api).
125
-
126
- ---
127
-
128
- ## Button
129
-
130
- <Button variant="outline" type="button">
131
- Example button
132
- </Button>
1
+ ---
2
+ title: MDX examples
3
+ description:
4
+ Callouts, fenced code, tabbed code, tables, task lists, links, badges, and buttons available in
5
+ APIToGo MDX pages.
6
+ ---
7
+
8
+ This page lists patterns you can copy into any `.mdx` file under `pages/`. Your site title comes
9
+ from front matter (`title` above) and appears in the sidebar for this route.
10
+
11
+ <Link to="/introduction">Introduction</Link> · <Link to="/api">API reference</Link> ·
12
+ <Badge variant="secondary">built-in</Badge> <Badge variant="outline">mdx</Badge>
13
+
14
+ ## Callouts (directives)
15
+
16
+ :::note{title="Note"}
17
+
18
+ Neutral context readers should notice.
19
+
20
+ :::
21
+
22
+ :::tip{title="Tip"}
23
+
24
+ Suggested workflows or shortcuts.
25
+
26
+ :::
27
+
28
+ :::info{title="Info"}
29
+
30
+ Extra detail that is not urgent.
31
+
32
+ :::
33
+
34
+ :::caution{title="Caution"}
35
+
36
+ Something might break if misconfigured.
37
+
38
+ :::
39
+
40
+ :::danger{title="Danger"}
41
+
42
+ Destructive or security-sensitive actions.
43
+
44
+ :::
45
+
46
+ ## Fenced code
47
+
48
+ Inline: `ApitogoConfig`, `apitogo run`, `pages/example.mdx`.
49
+
50
+ ```bash
51
+ apitogo run
52
+ apitogo build
53
+ apitogo build --preview
54
+ ```
55
+
56
+ ```json
57
+ { "example": true }
58
+ ```
59
+
60
+ ```ts
61
+ import type { ApitogoConfig } from "@lukoweb/apitogo";
62
+
63
+ const config: ApitogoConfig = {
64
+ site: { title: "My API docs" },
65
+ };
66
+
67
+ export default config;
68
+ ```
69
+
70
+ ## Tabbed code (`CodeTabs`)
71
+
72
+ <CodeTabs>
73
+
74
+ ```bash title="curl"
75
+ curl -sS https://httpbin.org/get
76
+ ```
77
+
78
+ ```bash title="HTTPie"
79
+ http GET https://httpbin.org/get
80
+ ```
81
+
82
+ ```ts title="fetch"
83
+ const res = await fetch("https://httpbin.org/get");
84
+ console.log(await res.json());
85
+ ```
86
+
87
+ </CodeTabs>
88
+
89
+ <CodeTabs>
90
+
91
+ ```json title="JSON"
92
+ { "status": "ok" }
93
+ ```
94
+
95
+ ```yaml title="YAML"
96
+ status: ok
97
+ ```
98
+
99
+ </CodeTabs>
100
+
101
+ ## Table
102
+
103
+ | Topic | Where to look |
104
+ | ------- | -------------------- |
105
+ | Config | `apitogo.config.tsx` |
106
+ | Pages | `pages/**/*.mdx` |
107
+ | OpenAPI | `apis/openapi.yaml` |
108
+
109
+ ## Lists
110
+
111
+ 1. Edit Markdown or MDX under `pages/`.
112
+ 2. Adjust `apitogo.config.tsx`.
113
+ 3. Run `apitogo build` before deploy.
114
+
115
+ Task list (GFM):
116
+
117
+ - [x] Scaffold created
118
+ - [ ] Customize for your API
119
+
120
+ ## Markdown
121
+
122
+ > Blockquote for quotes or asides.
123
+
124
+ **Bold**, _italic_, ~~strikethrough~~, and [link to API](/api).
125
+
126
+ ---
127
+
128
+ ## Button
129
+
130
+ <Button variant="outline" type="button">
131
+ Example button
132
+ </Button>
@@ -1,21 +1,21 @@
1
- ---
2
- title: Welcome to APIToGo
3
- ---
4
-
5
- Thanks for choosing to use APIToGo to power your API documentation!
6
-
7
- ## Edit this page
8
-
9
- To edit this page, open the `pages/introduction.mdx` file.
10
-
11
- ## Configuration
12
-
13
- You can find the full site configuration in `apitogo.config.json`. Plugins and custom code live in
14
- `apitogo.config.tsx`. Override values per environment with `APITOGO_CONFIG_*` variables in `.env`.
15
-
16
- For further information on how to customize your site, check out the
17
- [APIToGo documentation](https://docs.apitogo.com).
18
-
19
- ## MDX building blocks
20
-
21
- See [MDX examples](/example) for callouts, code blocks, tabs, tables, and common components.
1
+ ---
2
+ title: Welcome to APIToGo
3
+ ---
4
+
5
+ Thanks for choosing to use APIToGo to power your API documentation!
6
+
7
+ ## Edit this page
8
+
9
+ To edit this page, open the `pages/introduction.mdx` file.
10
+
11
+ ## Configuration
12
+
13
+ You can find the full site configuration in `apitogo.config.json`. Plugins and custom code live in
14
+ `apitogo.config.tsx`. Override values per environment with `APITOGO_CONFIG_*` variables in `.env`.
15
+
16
+ For further information on how to customize your site, check out the
17
+ [APIToGo documentation](https://docs.apitogo.com).
18
+
19
+ ## MDX building blocks
20
+
21
+ See [MDX examples](/example) for callouts, code blocks, tabs, tables, and common components.