@burdenoff/microfe-devportal 2026.623.2 → 2026.623.4

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.
@@ -1,471 +1,202 @@
1
1
  import { cn as e } from "../utils/cn.js";
2
2
  import { PageLayout as t, PageSection as n } from "../components/PageLayout.js";
3
3
  import { nativeCopyText as r, nativeImpact as i, nativeNotify as a } from "../../utils/nativeBridge.js";
4
- import { useState as o } from "react";
5
- import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
- import { BookOpen as c, Boxes as l, Code2 as u, Cpu as d, Download as f, ExternalLink as p, FileCode as m, Github as h, Globe as g, Layers as _, Monitor as v, Palette as y, Search as b, Smartphone as x, Star as S, Terminal as C, Wrench as w } from "lucide-react";
7
- import { jsx as T, jsxs as E } from "react/jsx-runtime";
4
+ import { useMemo as o, useState as s } from "react";
5
+ import { useI18n as c } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
+ import { BookOpen as l, CalendarClock as u, Code2 as d, ExternalLink as f, FileCode as p, HelpCircle as m, KeyRound as h, Layers as g, Network as _, Plug as v, Rocket as y, Search as b, Webhook as x } from "lucide-react";
7
+ import { jsx as S, jsxs as C } from "react/jsx-runtime";
8
8
  //#region src/devportal/pages/ResourcesPage.tsx
9
- var D = [
9
+ var w = "https://docs.burdenoff.com/developers", T = {
10
+ id: "sdks",
11
+ name: "SDKs",
12
+ description: "Official client libraries for building on the Burdenoff platform. See the SDKs documentation for supported languages and installation.",
13
+ icon: /* @__PURE__ */ S(d, { size: 24 }),
14
+ url: `${w}/build/sdks`,
15
+ installCommand: "npm install @burdenoff/sdk-node"
16
+ }, E = [
10
17
  {
11
- id: "sdk-node",
12
- name: "Node.js SDK",
13
- language: "TypeScript/JavaScript",
14
- description: "Official SDK for Node.js applications with TypeScript support",
15
- version: "2.4.1",
16
- downloads: "125k",
17
- icon: /* @__PURE__ */ T(u, { size: 24 }),
18
- packageManager: "npm",
19
- installCommand: "npm install @burdenoff/sdk-node",
20
- docsUrl: "https://docs.burdenoff.com/sdks/node",
21
- githubUrl: "https://github.com/burdenoff/sdk-node",
22
- isOfficial: !0
18
+ id: "graphql-api",
19
+ name: "GraphQL API",
20
+ description: "Query and mutate platform data through the federated GraphQL API.",
21
+ icon: /* @__PURE__ */ S(_, { size: 24 }),
22
+ url: `${w}/build/graphql-api`
23
23
  },
24
24
  {
25
- id: "sdk-python",
26
- name: "Python SDK",
27
- language: "Python",
28
- description: "Official SDK for Python applications with async support",
29
- version: "1.8.0",
30
- downloads: "89k",
31
- icon: /* @__PURE__ */ T(m, { size: 24 }),
32
- packageManager: "pip",
33
- installCommand: "pip install burdenoff-sdk",
34
- docsUrl: "https://docs.burdenoff.com/sdks/python",
35
- githubUrl: "https://github.com/burdenoff/sdk-python",
36
- isOfficial: !0
25
+ id: "plugins",
26
+ name: "Plugins",
27
+ description: "Extend the platform with plugins that add new capabilities and surfaces.",
28
+ icon: /* @__PURE__ */ S(v, { size: 24 }),
29
+ url: `${w}/build/plugins`
37
30
  },
38
31
  {
39
- id: "sdk-go",
40
- name: "Go SDK",
41
- language: "Go",
42
- description: "Official SDK for Go applications",
43
- version: "1.5.2",
44
- downloads: "45k",
45
- icon: /* @__PURE__ */ T(d, { size: 24 }),
46
- packageManager: "go",
47
- installCommand: "go get github.com/burdenoff/sdk-go",
48
- docsUrl: "https://docs.burdenoff.com/sdks/go",
49
- githubUrl: "https://github.com/burdenoff/sdk-go",
50
- isOfficial: !0
51
- },
52
- {
53
- id: "sdk-react",
54
- name: "React SDK",
55
- language: "TypeScript/React",
56
- description: "Hooks and components for React applications",
57
- version: "3.1.0",
58
- downloads: "78k",
59
- icon: /* @__PURE__ */ T(l, { size: 24 }),
60
- packageManager: "npm",
61
- installCommand: "npm install @burdenoff/react",
62
- docsUrl: "https://docs.burdenoff.com/sdks/react",
63
- githubUrl: "https://github.com/burdenoff/sdk-react",
64
- isOfficial: !0
65
- },
66
- {
67
- id: "sdk-ruby",
68
- name: "Ruby SDK",
69
- language: "Ruby",
70
- description: "Community SDK for Ruby on Rails applications",
71
- version: "1.2.0",
72
- downloads: "12k",
73
- icon: /* @__PURE__ */ T(m, { size: 24 }),
74
- packageManager: "gem",
75
- installCommand: "gem install burdenoff",
76
- docsUrl: "https://docs.burdenoff.com/sdks/ruby",
77
- githubUrl: "https://github.com/burdenoff/sdk-ruby",
78
- isOfficial: !1
32
+ id: "webhooks",
33
+ name: "Webhooks",
34
+ description: "Receive real-time platform events in your own services via webhooks.",
35
+ icon: /* @__PURE__ */ S(x, { size: 24 }),
36
+ url: `${w}/build/webhooks`
79
37
  }
80
- ], O = [
81
- {
82
- id: "cli",
83
- name: "Burdenoff CLI",
84
- description: "Command-line tool for managing apps, deployments, and testing",
85
- icon: /* @__PURE__ */ T(C, { size: 24 }),
86
- type: "cli",
87
- url: "https://docs.burdenoff.com/cli"
88
- },
89
- {
90
- id: "vscode",
91
- name: "VS Code Extension",
92
- description: "IntelliSense, snippets, and debugging for Burdenoff development",
93
- icon: /* @__PURE__ */ T(v, { size: 24 }),
94
- type: "extension",
95
- url: "https://marketplace.visualstudio.com/items?itemName=burdenoff.burdenoff-vscode",
96
- isNew: !0
97
- },
98
- {
99
- id: "graphql-playground",
100
- name: "GraphQL Playground",
101
- description: "Interactive GraphQL IDE for exploring and testing the API",
102
- icon: /* @__PURE__ */ T(g, { size: 24 }),
103
- type: "utility",
104
- url: "https://api.burdenoff.com/graphql"
105
- },
106
- {
107
- id: "postman",
108
- name: "Postman Collection",
109
- description: "Pre-built Postman collection for REST API testing",
110
- icon: /* @__PURE__ */ T(_, { size: 24 }),
111
- type: "utility",
112
- url: "https://www.postman.com/burdenoff/workspace/burdenoff-api"
113
- },
38
+ ], D = [{
39
+ id: "scheduler",
40
+ name: "Scheduler & Workflows",
41
+ description: "Schedule jobs and orchestrate long-running workflows on the platform.",
42
+ icon: /* @__PURE__ */ S(u, { size: 24 }),
43
+ url: `${w}/extend/scheduler/`
44
+ }], O = [
114
45
  {
115
- id: "webhook-tester",
116
- name: "Webhook Tester",
117
- description: "Tool for testing and debugging webhook integrations",
118
- icon: /* @__PURE__ */ T(w, { size: 24 }),
119
- type: "utility",
120
- url: "https://developers.burdenoff.com/tools/webhook-tester"
46
+ id: "platform-overview",
47
+ name: "Platform Overview",
48
+ description: "Understand the building blocks of the Burdenoff developer platform.",
49
+ icon: /* @__PURE__ */ S(l, { size: 24 }),
50
+ url: `${w}/platform-overview`
121
51
  },
122
52
  {
123
- id: "oauth-debugger",
124
- name: "OAuth Debugger",
125
- description: "Debug OAuth flows and inspect tokens",
126
- icon: /* @__PURE__ */ T(w, { size: 24 }),
127
- type: "utility",
128
- url: "https://developers.burdenoff.com/tools/oauth-debugger",
129
- isNew: !0
53
+ id: "quick-start",
54
+ name: "Quick Start",
55
+ description: "Get up and running with the platform in a few steps.",
56
+ icon: /* @__PURE__ */ S(y, { size: 24 }),
57
+ url: `${w}/quick-start`
130
58
  },
131
59
  {
132
- id: "ui-kit",
133
- name: "UI Component Kit",
134
- description: "Figma design kit matching Burdenoff platform UI",
135
- icon: /* @__PURE__ */ T(y, { size: 24 }),
136
- type: "library",
137
- url: "https://www.figma.com/community/file/burdenoff-ui-kit"
138
- }
139
- ], k = [
140
- {
141
- id: "nextjs-starter",
142
- name: "Next.js Starter",
143
- description: "Full-featured Next.js app with OAuth, webhooks, and API integration",
144
- framework: "Next.js 14",
145
- icon: /* @__PURE__ */ T(l, { size: 24 }),
146
- githubUrl: "https://github.com/burdenoff/starter-nextjs",
147
- demoUrl: "https://starter-nextjs.burdenoff.dev",
148
- stars: 1240
60
+ id: "authentication",
61
+ name: "Authentication",
62
+ description: "Learn how to authenticate requests and manage actor identity.",
63
+ icon: /* @__PURE__ */ S(h, { size: 24 }),
64
+ url: `${w}/authentication`
149
65
  },
150
66
  {
151
- id: "express-starter",
152
- name: "Express.js Starter",
153
- description: "Backend starter with Express, TypeScript, and webhook handling",
154
- framework: "Express.js",
155
- icon: /* @__PURE__ */ T(u, { size: 24 }),
156
- githubUrl: "https://github.com/burdenoff/starter-express",
157
- stars: 890
67
+ id: "relationship-graphs",
68
+ name: "Relationship Graphs",
69
+ description: "Model and traverse connected data with relationship graphs.",
70
+ icon: /* @__PURE__ */ S(g, { size: 24 }),
71
+ url: `${w}/concepts/relationship-graphs`
158
72
  },
159
73
  {
160
- id: "react-starter",
161
- name: "React Dashboard",
162
- description: "React dashboard template with Burdenoff SDK integration",
163
- framework: "React + Vite",
164
- icon: /* @__PURE__ */ T(v, { size: 24 }),
165
- githubUrl: "https://github.com/burdenoff/starter-react",
166
- demoUrl: "https://starter-react.burdenoff.dev",
167
- stars: 756
74
+ id: "examples",
75
+ name: "Examples",
76
+ description: "Browse worked examples covering common integration tasks.",
77
+ icon: /* @__PURE__ */ S(p, { size: 24 }),
78
+ url: `${w}/examples`
168
79
  },
169
80
  {
170
- id: "python-starter",
171
- name: "FastAPI Starter",
172
- description: "Python FastAPI backend with async Burdenoff SDK",
173
- framework: "FastAPI",
174
- icon: /* @__PURE__ */ T(m, { size: 24 }),
175
- githubUrl: "https://github.com/burdenoff/starter-fastapi",
176
- stars: 534
177
- },
178
- {
179
- id: "mobile-starter",
180
- name: "React Native Starter",
181
- description: "Mobile app template with Burdenoff authentication",
182
- framework: "React Native",
183
- icon: /* @__PURE__ */ T(x, { size: 24 }),
184
- githubUrl: "https://github.com/burdenoff/starter-react-native",
185
- stars: 423
81
+ id: "faq",
82
+ name: "FAQ",
83
+ description: "Answers to frequently asked developer questions.",
84
+ icon: /* @__PURE__ */ S(m, { size: 24 }),
85
+ url: `${w}/faq`
186
86
  }
187
- ], A = [
188
- {
189
- id: "first-app",
190
- title: "Build Your First App",
191
- description: "Step-by-step guide to creating and publishing your first application",
192
- difficulty: "beginner",
193
- duration: "30 min",
194
- url: "https://docs.burdenoff.com/guides/first-app"
195
- },
196
- {
197
- id: "oauth-setup",
198
- title: "Setting Up OAuth 2.0",
199
- description: "Complete guide to implementing OAuth authentication",
200
- difficulty: "intermediate",
201
- duration: "45 min",
202
- url: "https://docs.burdenoff.com/guides/oauth-setup"
203
- },
204
- {
205
- id: "webhooks-guide",
206
- title: "Webhook Integration Guide",
207
- description: "Handle real-time events with webhooks",
208
- difficulty: "intermediate",
209
- duration: "40 min",
210
- url: "https://docs.burdenoff.com/guides/webhooks"
211
- },
212
- {
213
- id: "multi-tenant",
214
- title: "Building Multi-Tenant Apps",
215
- description: "Architecture patterns for multi-tenant applications",
216
- difficulty: "advanced",
217
- duration: "60 min",
218
- url: "https://docs.burdenoff.com/guides/multi-tenant"
219
- },
220
- {
221
- id: "graphql-subscriptions",
222
- title: "Real-time with GraphQL Subscriptions",
223
- description: "Implement real-time features using GraphQL subscriptions",
224
- difficulty: "advanced",
225
- duration: "50 min",
226
- url: "https://docs.burdenoff.com/guides/subscriptions"
227
- },
228
- {
229
- id: "app-security",
230
- title: "Security Best Practices",
231
- description: "Secure your application with industry best practices",
232
- difficulty: "intermediate",
233
- duration: "35 min",
234
- url: "https://docs.burdenoff.com/guides/security"
235
- }
236
- ], j = ({ sdk: e }) => {
237
- let [t, n] = o(!1);
238
- return /* @__PURE__ */ E("div", {
87
+ ], k = (e, t) => t ? `${e.name} ${e.description}`.toLowerCase().includes(t.toLowerCase()) : !0, A = ({ sdk: e, copyLabel: t, copiedLabel: n }) => {
88
+ let [o, c] = s(!1);
89
+ return /* @__PURE__ */ C("div", {
239
90
  className: "flex flex-col rounded-lg border bg-card p-5",
240
91
  children: [
241
- /* @__PURE__ */ E("div", {
242
- className: "flex items-start justify-between",
243
- children: [/* @__PURE__ */ E("div", {
244
- className: "flex items-center gap-3",
245
- children: [/* @__PURE__ */ T("div", {
246
- className: "rounded-lg bg-primary/10 p-2.5 text-primary",
247
- children: e.icon
248
- }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ E("div", {
249
- className: "flex items-center gap-2",
250
- children: [/* @__PURE__ */ T("h3", {
251
- className: "font-semibold",
252
- children: e.name
253
- }), e.isOfficial && /* @__PURE__ */ T("span", {
254
- className: "rounded-full bg-status-info-bg-subtle px-2 py-0.5 text-xs font-medium text-status-info-text",
255
- children: "Official"
256
- })]
257
- }), /* @__PURE__ */ T("p", {
258
- className: "text-sm text-muted-foreground",
259
- children: e.language
260
- })] })]
261
- }), /* @__PURE__ */ E("span", {
262
- className: "text-sm text-muted-foreground",
263
- children: ["v", e.version]
264
- })]
92
+ /* @__PURE__ */ C("div", {
93
+ className: "flex items-center gap-3",
94
+ children: [/* @__PURE__ */ S("div", {
95
+ className: "rounded-lg bg-primary/10 p-2.5 text-primary",
96
+ children: e.icon
97
+ }), /* @__PURE__ */ S("div", { children: /* @__PURE__ */ S("h3", {
98
+ className: "font-semibold",
99
+ children: e.name
100
+ }) })]
265
101
  }),
266
- /* @__PURE__ */ T("p", {
102
+ /* @__PURE__ */ S("p", {
267
103
  className: "mt-3 text-sm text-muted-foreground",
268
104
  children: e.description
269
105
  }),
270
- /* @__PURE__ */ E("div", {
106
+ /* @__PURE__ */ C("div", {
271
107
  className: "mt-4 flex items-center gap-2 rounded-md bg-muted/50 p-2",
272
- children: [/* @__PURE__ */ T("code", {
108
+ children: [/* @__PURE__ */ S("code", {
273
109
  className: "flex-1 text-xs",
274
110
  children: e.installCommand
275
- }), /* @__PURE__ */ T("button", {
111
+ }), /* @__PURE__ */ S("button", {
112
+ type: "button",
276
113
  onClick: async () => {
277
- i("light"), await r(e.installCommand) ? (n(!0), a("success"), setTimeout(() => n(!1), 2e3)) : a("error");
114
+ i("light"), await r(e.installCommand) ? (c(!0), a("success"), setTimeout(() => c(!1), 2e3)) : a("error");
278
115
  },
279
- className: "rounded px-2 py-1 text-xs hover:bg-muted transition-colors",
280
- children: t ? "Copied!" : "Copy"
116
+ className: "rounded px-2 py-1 text-xs hover:bg-muted transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
117
+ children: o ? n : t
281
118
  })]
282
119
  }),
283
- /* @__PURE__ */ E("div", {
284
- className: "mt-4 flex items-center justify-between text-sm",
285
- children: [/* @__PURE__ */ E("span", {
286
- className: "flex items-center gap-1 text-muted-foreground",
287
- children: [
288
- /* @__PURE__ */ T(f, { size: 14 }),
289
- e.downloads,
290
- " downloads"
291
- ]
292
- }), /* @__PURE__ */ E("div", {
293
- className: "flex gap-2",
294
- children: [/* @__PURE__ */ E("a", {
295
- href: e.docsUrl,
296
- target: "_blank",
297
- rel: "noopener noreferrer",
298
- className: "flex items-center gap-1 text-primary hover:underline",
299
- children: ["Docs ", /* @__PURE__ */ T(p, { size: 12 })]
300
- }), /* @__PURE__ */ T("a", {
301
- href: e.githubUrl,
302
- target: "_blank",
303
- rel: "noopener noreferrer",
304
- "aria-label": `${e.name} on GitHub`,
305
- className: "flex items-center gap-1 text-primary hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
306
- children: /* @__PURE__ */ T(h, {
307
- size: 14,
308
- "aria-hidden": "true"
309
- })
120
+ /* @__PURE__ */ S("div", {
121
+ className: "mt-4 flex items-center justify-end text-sm",
122
+ children: /* @__PURE__ */ C("a", {
123
+ href: e.url,
124
+ target: "_blank",
125
+ rel: "noopener noreferrer",
126
+ className: "flex items-center gap-1 text-primary hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
127
+ children: ["Docs ", /* @__PURE__ */ S(f, {
128
+ size: 12,
129
+ "aria-hidden": "true"
310
130
  })]
311
- })]
131
+ })
312
132
  })
313
133
  ]
314
134
  });
315
- }, M = ({ tool: e }) => /* @__PURE__ */ E("a", {
135
+ }, j = ({ resource: e }) => /* @__PURE__ */ C("a", {
316
136
  href: e.url,
317
137
  target: "_blank",
318
138
  rel: "noopener noreferrer",
319
- className: "group flex items-start gap-4 rounded-lg border bg-card p-4 transition-all hover:border-primary/50 hover:shadow-md",
139
+ className: "group flex items-start gap-4 rounded-lg border bg-card p-4 transition-all hover:border-primary/50 hover:shadow-md focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
320
140
  children: [
321
- /* @__PURE__ */ T("div", {
141
+ /* @__PURE__ */ S("div", {
322
142
  className: "rounded-lg bg-primary/10 p-2.5 text-primary",
323
143
  children: e.icon
324
144
  }),
325
- /* @__PURE__ */ E("div", {
145
+ /* @__PURE__ */ C("div", {
326
146
  className: "flex-1",
327
- children: [/* @__PURE__ */ E("div", {
328
- className: "flex items-center gap-2",
329
- children: [/* @__PURE__ */ T("h3", {
330
- className: "font-semibold group-hover:text-primary",
331
- children: e.name
332
- }), e.isNew && /* @__PURE__ */ T("span", {
333
- className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs font-medium text-status-success-text",
334
- children: "New"
335
- })]
336
- }), /* @__PURE__ */ T("p", {
147
+ children: [/* @__PURE__ */ S("h3", {
148
+ className: "font-semibold group-hover:text-primary",
149
+ children: e.name
150
+ }), /* @__PURE__ */ S("p", {
337
151
  className: "mt-1 text-sm text-muted-foreground",
338
152
  children: e.description
339
153
  })]
340
154
  }),
341
- /* @__PURE__ */ T(p, {
155
+ /* @__PURE__ */ S(f, {
342
156
  size: 16,
157
+ "aria-hidden": "true",
343
158
  className: "text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100"
344
159
  })
345
160
  ]
346
- }), N = ({ starter: e }) => /* @__PURE__ */ E("div", {
347
- className: "flex flex-col rounded-lg border bg-card p-5",
348
- children: [
349
- /* @__PURE__ */ E("div", {
350
- className: "flex items-start justify-between",
351
- children: [/* @__PURE__ */ E("div", {
352
- className: "flex items-center gap-3",
353
- children: [/* @__PURE__ */ T("div", {
354
- className: "rounded-lg bg-primary/10 p-2.5 text-primary",
355
- children: e.icon
356
- }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("h3", {
357
- className: "font-semibold",
358
- children: e.name
359
- }), /* @__PURE__ */ T("p", {
360
- className: "text-sm text-muted-foreground",
361
- children: e.framework
362
- })] })]
363
- }), /* @__PURE__ */ E("span", {
364
- className: "flex items-center gap-1 text-sm text-muted-foreground",
365
- children: [/* @__PURE__ */ T(S, {
366
- size: 14,
367
- className: "text-status-warning-text"
368
- }), e.stars.toLocaleString()]
369
- })]
370
- }),
371
- /* @__PURE__ */ T("p", {
372
- className: "mt-3 text-sm text-muted-foreground",
373
- children: e.description
374
- }),
375
- /* @__PURE__ */ E("div", {
376
- className: "mt-4 flex gap-2",
377
- children: [/* @__PURE__ */ E("a", {
378
- href: e.githubUrl,
379
- target: "_blank",
380
- rel: "noopener noreferrer",
381
- className: "flex flex-1 items-center justify-center gap-2 rounded-md border bg-background px-3 py-2 text-sm font-medium hover:bg-accent transition-colors",
382
- children: [/* @__PURE__ */ T(h, { size: 16 }), "View on GitHub"]
383
- }), e.demoUrl && /* @__PURE__ */ E("a", {
384
- href: e.demoUrl,
385
- target: "_blank",
386
- rel: "noopener noreferrer",
387
- className: "flex items-center justify-center gap-2 rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors",
388
- children: [/* @__PURE__ */ T(g, { size: 16 }), "Demo"]
389
- })]
390
- })
391
- ]
392
- }), P = ({ guide: t }) => /* @__PURE__ */ E("a", {
393
- href: t.url,
394
- target: "_blank",
395
- rel: "noopener noreferrer",
396
- className: "group flex items-center gap-4 rounded-lg border bg-card p-4 transition-all hover:border-primary/50 hover:shadow-md",
397
- children: [
398
- /* @__PURE__ */ T("div", {
399
- className: "rounded-lg bg-primary/10 p-2.5 text-primary",
400
- children: /* @__PURE__ */ T(c, { size: 20 })
401
- }),
402
- /* @__PURE__ */ E("div", {
403
- className: "flex-1",
404
- children: [
405
- /* @__PURE__ */ T("h3", {
406
- className: "font-semibold group-hover:text-primary",
407
- children: t.title
408
- }),
409
- /* @__PURE__ */ T("p", {
410
- className: "mt-1 text-sm text-muted-foreground",
411
- children: t.description
412
- }),
413
- /* @__PURE__ */ E("div", {
414
- className: "mt-2 flex items-center gap-3",
415
- children: [/* @__PURE__ */ T("span", {
416
- className: e("rounded-full px-2 py-0.5 text-xs font-medium capitalize", {
417
- beginner: "bg-status-success-bg-subtle text-status-success-text",
418
- intermediate: "bg-status-warning-bg-subtle text-status-warning-text",
419
- advanced: "bg-status-error-bg-subtle text-status-error-text"
420
- }[t.difficulty]),
421
- children: t.difficulty
422
- }), /* @__PURE__ */ T("span", {
423
- className: "text-xs text-muted-foreground",
424
- children: t.duration
425
- })]
426
- })
427
- ]
428
- }),
429
- /* @__PURE__ */ T(p, {
430
- size: 16,
431
- className: "text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100"
432
- })
433
- ]
434
- }), F = () => {
435
- let { t: r } = s(), i = (e, t) => {
161
+ }), M = () => {
162
+ let { t: r } = c(), i = (e, t) => {
436
163
  let n = r(e);
437
164
  return n === e ? t : n;
438
- }, [a, c] = o(""), [l, u] = o("all");
439
- return /* @__PURE__ */ E(t, {
165
+ }, [a, l] = s(""), [u, d] = s("all"), f = u === "all" || u === "build", p = u === "all" || u === "learn", m = o(() => f && k(T, a), [f, a]), h = o(() => f ? E.filter((e) => k(e, a)) : [], [f, a]), g = o(() => f ? D.filter((e) => k(e, a)) : [], [f, a]), _ = o(() => p ? O.filter((e) => k(e, a)) : [], [p, a]), v = m || h.length > 0 || g.length > 0 || _.length > 0;
166
+ return /* @__PURE__ */ C(t, {
440
167
  title: i("devportal.developerResources", "Developer Resources"),
441
- description: i("devportal.resourcesDescription", "SDKs, tools, starter templates, and guides to accelerate your development"),
168
+ description: i("devportal.resourcesDescription", "Documentation for building, extending, and learning the Burdenoff platform"),
442
169
  children: [
443
- /* @__PURE__ */ E("div", {
170
+ /* @__PURE__ */ C("div", {
444
171
  role: "status",
445
172
  className: "mb-6 rounded-lg border border-status-warning-border bg-status-warning-bg p-4 text-sm text-status-warning-text",
446
- children: [/* @__PURE__ */ T("strong", {
173
+ children: [/* @__PURE__ */ S("strong", {
447
174
  className: "font-semibold",
448
175
  children: i("devportal.resources.comingSoon.title", "Coming soon")
449
- }), /* @__PURE__ */ T("span", {
176
+ }), /* @__PURE__ */ S("span", {
450
177
  className: "ml-2",
451
- children: i("devportal.resources.comingSoon.description", "An in-product resources hub is on the way. For now we're surfacing the most useful external SDKs, tools, and templates here.")
178
+ children: i("devportal.resources.comingSoon.description", "An in-product resources hub is on the way. For now, these cards link to the official Burdenoff developer documentation.")
452
179
  })]
453
180
  }),
454
- /* @__PURE__ */ E("div", {
181
+ /* @__PURE__ */ C("div", {
455
182
  className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
456
- children: [/* @__PURE__ */ E("div", {
183
+ children: [/* @__PURE__ */ C("div", {
457
184
  className: "relative flex-1 max-w-md",
458
- children: [/* @__PURE__ */ T(b, {
185
+ children: [/* @__PURE__ */ S(b, {
459
186
  size: 16,
187
+ "aria-hidden": "true",
460
188
  className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"
461
- }), /* @__PURE__ */ T("input", {
189
+ }), /* @__PURE__ */ S("input", {
462
190
  type: "text",
191
+ "aria-label": i("devportal.searchResources", "Search resources..."),
463
192
  placeholder: i("devportal.searchResources", "Search resources..."),
464
193
  value: a,
465
- onChange: (e) => c(e.target.value),
194
+ onChange: (e) => l(e.target.value),
466
195
  className: "w-full rounded-md border bg-background pl-9 pr-4 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary"
467
196
  })]
468
- }), /* @__PURE__ */ T("div", {
197
+ }), /* @__PURE__ */ S("div", {
198
+ role: "group",
199
+ "aria-label": i("devportal.filterResources", "Filter resources"),
469
200
  className: "flex items-center gap-1 rounded-md border p-1",
470
201
  children: [
471
202
  {
@@ -473,64 +204,66 @@ var D = [
473
204
  label: i("devportal.filterAll", "All")
474
205
  },
475
206
  {
476
- id: "sdks",
477
- label: i("devportal.filterSdks", "SDKs")
478
- },
479
- {
480
- id: "tools",
481
- label: i("devportal.filterTools", "Tools")
207
+ id: "build",
208
+ label: i("devportal.filterBuild", "Build")
482
209
  },
483
210
  {
484
- id: "starters",
485
- label: i("devportal.filterStarters", "Starters")
486
- },
487
- {
488
- id: "guides",
489
- label: i("devportal.filterGuides", "Guides")
211
+ id: "learn",
212
+ label: i("devportal.filterLearn", "Learn")
490
213
  }
491
- ].map((t) => /* @__PURE__ */ T("button", {
492
- onClick: () => u(t.id),
493
- className: e("rounded px-3 py-1.5 text-sm font-medium transition-colors", l === t.id ? "bg-primary text-primary-foreground" : "hover:bg-muted"),
214
+ ].map((t) => /* @__PURE__ */ S("button", {
215
+ type: "button",
216
+ "aria-pressed": u === t.id,
217
+ onClick: () => d(t.id),
218
+ className: e("rounded px-3 py-1.5 text-sm font-medium transition-colors", u === t.id ? "bg-primary text-primary-foreground" : "hover:bg-muted"),
494
219
  children: t.label
495
220
  }, t.id))
496
221
  })]
497
222
  }),
498
- (l === "all" || l === "sdks") && /* @__PURE__ */ T(n, {
499
- title: i("devportal.officialSdks", "Official SDKs"),
500
- description: i("devportal.officialSdksDescription", "Client libraries for popular languages"),
501
- children: /* @__PURE__ */ T("div", {
223
+ m && /* @__PURE__ */ S(n, {
224
+ title: i("devportal.sdks", "SDKs"),
225
+ description: i("devportal.sdksDescription", "Client libraries for building on the platform"),
226
+ children: /* @__PURE__ */ S("div", {
502
227
  className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
503
- children: D.map((e) => /* @__PURE__ */ T(j, { sdk: e }, e.id))
228
+ children: /* @__PURE__ */ S(A, {
229
+ sdk: T,
230
+ copyLabel: i("devportal.copy", "Copy"),
231
+ copiedLabel: i("devportal.copied", "Copied!")
232
+ })
504
233
  })
505
234
  }),
506
- (l === "all" || l === "tools") && /* @__PURE__ */ T(n, {
507
- title: i("devportal.developerTools", "Developer Tools"),
508
- description: i("devportal.developerToolsDescription", "Tools to streamline your development workflow"),
509
- children: /* @__PURE__ */ T("div", {
235
+ h.length > 0 && /* @__PURE__ */ S(n, {
236
+ title: i("devportal.build", "Build"),
237
+ description: i("devportal.buildDescription", "APIs and integration surfaces"),
238
+ children: /* @__PURE__ */ S("div", {
510
239
  className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
511
- children: O.map((e) => /* @__PURE__ */ T(M, { tool: e }, e.id))
240
+ children: h.map((e) => /* @__PURE__ */ S(j, { resource: e }, e.id))
512
241
  })
513
242
  }),
514
- (l === "all" || l === "starters") && /* @__PURE__ */ T(n, {
515
- title: i("devportal.starterTemplates", "Starter Templates"),
516
- description: i("devportal.starterTemplatesDescription", "Production-ready templates to kickstart your project"),
517
- children: /* @__PURE__ */ T("div", {
243
+ g.length > 0 && /* @__PURE__ */ S(n, {
244
+ title: i("devportal.extend", "Extend"),
245
+ description: i("devportal.extendDescription", "Schedule jobs and orchestrate workflows"),
246
+ children: /* @__PURE__ */ S("div", {
518
247
  className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
519
- children: k.map((e) => /* @__PURE__ */ T(N, { starter: e }, e.id))
248
+ children: g.map((e) => /* @__PURE__ */ S(j, { resource: e }, e.id))
520
249
  })
521
250
  }),
522
- (l === "all" || l === "guides") && /* @__PURE__ */ T(n, {
523
- title: i("devportal.stepByStepGuides", "Step-by-Step Guides"),
524
- description: i("devportal.stepByStepGuidesDescription", "Learn with hands-on tutorials"),
525
- children: /* @__PURE__ */ T("div", {
526
- className: "grid gap-4 lg:grid-cols-2",
527
- children: A.map((e) => /* @__PURE__ */ T(P, { guide: e }, e.id))
251
+ _.length > 0 && /* @__PURE__ */ S(n, {
252
+ title: i("devportal.learn", "Learn"),
253
+ description: i("devportal.learnDescription", "Guides and concepts to get you started"),
254
+ children: /* @__PURE__ */ S("div", {
255
+ className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
256
+ children: _.map((e) => /* @__PURE__ */ S(j, { resource: e }, e.id))
528
257
  })
258
+ }),
259
+ !v && /* @__PURE__ */ S("div", {
260
+ className: "mt-8 rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground",
261
+ children: i("devportal.noResourcesFound", "No resources match your search.")
529
262
  })
530
263
  ]
531
264
  });
532
265
  };
533
266
  //#endregion
534
- export { F as ResourcesPage };
267
+ export { M as ResourcesPage };
535
268
 
536
269
  //# sourceMappingURL=ResourcesPage.js.map