@bluefly/openstandardagents 0.2.7 → 0.2.9

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 (327) hide show
  1. package/.devfile.yaml +1 -1
  2. package/.env.example +1 -1
  3. package/.github/AGENTS.md +245 -0
  4. package/.github/agents/github-issue-triage.ossa.yaml +99 -0
  5. package/.github/agents/github-pr-triage.ossa.yaml +137 -0
  6. package/.github/workflows/issue-sync-to-gitlab.yml +138 -0
  7. package/.github/workflows/pr-triage-to-gitlab.yml +164 -0
  8. package/.version.json +2 -2
  9. package/.wiki-config.json +24 -0
  10. package/CHANGELOG.md +44 -18
  11. package/CODEOWNERS +75 -0
  12. package/CONTRIBUTING.md +103 -4
  13. package/README.md +178 -243
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +2 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/repositories/schema.repository.d.ts +6 -1
  19. package/dist/repositories/schema.repository.d.ts.map +1 -1
  20. package/dist/repositories/schema.repository.js +49 -27
  21. package/dist/repositories/schema.repository.js.map +1 -1
  22. package/dist/services/migration.service.d.ts +4 -3
  23. package/dist/services/migration.service.d.ts.map +1 -1
  24. package/dist/services/migration.service.js +11 -10
  25. package/dist/services/migration.service.js.map +1 -1
  26. package/dist/services/release-automation/release.service.js +1 -1
  27. package/dist/services/release-automation/release.service.js.map +1 -1
  28. package/dist/services/release-automation/schemas/release.schema.js +1 -1
  29. package/dist/services/release-automation/webhook.service.js +3 -3
  30. package/dist/services/release-automation/webhook.service.js.map +1 -1
  31. package/dist/services/runtime/claude/claude-adapter.d.ts +1 -1
  32. package/dist/services/runtime/claude/claude-adapter.d.ts.map +1 -1
  33. package/dist/services/runtime/claude/claude-adapter.js +2 -2
  34. package/dist/services/runtime/claude/claude-adapter.js.map +1 -1
  35. package/dist/spec/v0.2.8/CHANGELOG.md +401 -0
  36. package/dist/spec/v0.2.8/README.md +72 -0
  37. package/dist/spec/v0.2.8/migrations/v0.2.3-to-v0.2.4.md +599 -0
  38. package/dist/spec/v0.2.8/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
  39. package/dist/spec/v0.2.8/migrations/v0.2.6-to-v0.2.8.md +81 -0
  40. package/{spec/v0.2.6-dev/ossa-0.2.5.schema.json → dist/spec/v0.2.8/ossa-0.2.8.schema.json} +1509 -52
  41. package/dist/spec/v0.2.8/ossa-0.2.8.yaml +581 -0
  42. package/dist/spec/v0.2.9/a2a-protocol.md +1337 -0
  43. package/dist/spec/v0.2.9/agent.md +1946 -0
  44. package/dist/spec/v0.2.9/capabilities/index.yaml +25 -0
  45. package/dist/spec/v0.2.9/capabilities/memory.yaml +251 -0
  46. package/dist/spec/v0.2.9/capability-schema.md +576 -0
  47. package/dist/spec/v0.2.9/compliance-profiles.md +533 -0
  48. package/dist/spec/v0.2.9/conformance-testing.md +1527 -0
  49. package/dist/spec/v0.2.9/gitlab-duo-integration.md +621 -0
  50. package/dist/spec/v0.2.9/ossa-0.2.9.schema.json +3699 -0
  51. package/dist/spec/v0.2.9/runtime-semantics.md +464 -0
  52. package/dist/spec/v0.2.9/security-model.md +1245 -0
  53. package/dist/spec/v0.2.9/semantic-conventions.md +347 -0
  54. package/dist/spec/v0.2.9/types.ts +522 -0
  55. package/dist/types/index.d.ts +3 -2
  56. package/dist/types/index.d.ts.map +1 -1
  57. package/dist/types/policy.d.ts +377 -0
  58. package/dist/types/policy.d.ts.map +1 -0
  59. package/dist/types/policy.js +84 -0
  60. package/dist/types/policy.js.map +1 -0
  61. package/dist/utils/index.d.ts +6 -0
  62. package/dist/utils/index.d.ts.map +1 -0
  63. package/dist/utils/index.js +6 -0
  64. package/dist/utils/index.js.map +1 -0
  65. package/dist/utils/version.d.ts +68 -0
  66. package/dist/utils/version.d.ts.map +1 -0
  67. package/dist/utils/version.js +156 -0
  68. package/dist/utils/version.js.map +1 -0
  69. package/docs/specs/policy-dsl.md +925 -0
  70. package/eslint-report.json +1 -0
  71. package/examples/adk-integration/code-review-workflow.yml +1 -1
  72. package/examples/adk-integration/customer-support.yml +1 -1
  73. package/examples/adk-integration/data-pipeline.yml +1 -1
  74. package/examples/advanced/reasoning-agent.yaml +136 -0
  75. package/examples/advanced/workflows/hybrid-model-strategy.yaml +1 -1
  76. package/examples/agent-manifests/critics/critic-agent.yaml +1 -1
  77. package/examples/agent-manifests/governors/governor-agent.yaml +1 -1
  78. package/examples/agent-manifests/integrators/integrator-agent.yaml +1 -1
  79. package/examples/agent-manifests/judges/judge-agent.yaml +1 -1
  80. package/examples/agent-manifests/monitors/monitor-agent.yaml +1 -1
  81. package/examples/agent-manifests/orchestrators/orchestrator-agent.yaml +1 -1
  82. package/examples/agent-manifests/sample-compliant-agent.yaml +1 -1
  83. package/examples/agent-manifests/workers/worker-agent.yaml +1 -1
  84. package/examples/agents-md/code-agent.ossa.json +100 -0
  85. package/examples/agents-md/monorepo-agent.ossa.yaml +180 -0
  86. package/examples/anthropic/claude-assistant.ossa.json +1 -1
  87. package/examples/autogen/multi-agent.ossa.json +1 -1
  88. package/examples/claude-code/code-reviewer.ossa.yaml +78 -0
  89. package/examples/claude-code/ossa-validator.ossa.yaml +80 -0
  90. package/examples/common_npm/agent-router.ossa.yaml +1 -0
  91. package/examples/common_npm/agent-router.v0.2.2.ossa.yaml +1 -1
  92. package/examples/crewai/research-team.ossa.json +1 -1
  93. package/examples/cursor/code-review-agent.ossa.json +1 -1
  94. package/examples/drupal/gitlab-ml-recommender.ossa.yaml +1 -0
  95. package/examples/drupal/gitlab-ml-recommender.v0.2.2.ossa.yaml +1 -1
  96. package/examples/extensions/agents-md-v1.yml +175 -0
  97. package/examples/extensions/drupal-v1.yml +1 -1
  98. package/examples/extensions/kagent-v1.yml +1 -1
  99. package/examples/getting-started/hello-world-complete.ossa.yaml +1 -1
  100. package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +4 -4
  101. package/examples/kagent/compliance-validator.ossa.yaml +1 -1
  102. package/examples/kagent/cost-optimizer.ossa.yaml +1 -1
  103. package/examples/kagent/documentation-agent.ossa.yaml +1 -1
  104. package/examples/kagent/k8s-troubleshooter-v1.ossa.yaml +1 -0
  105. package/examples/kagent/k8s-troubleshooter-v1.v0.2.2.ossa.yaml +1 -1
  106. package/examples/kagent/k8s-troubleshooter.ossa.yaml +1 -1
  107. package/examples/kagent/security-scanner.ossa.yaml +1 -1
  108. package/examples/langchain/chain-agent.ossa.json +1 -1
  109. package/examples/langflow/workflow-agent.ossa.json +1 -1
  110. package/examples/langgraph/state-machine-agent.ossa.json +1 -1
  111. package/examples/llamaindex/rag-agent.ossa.json +1 -1
  112. package/examples/migration-guides/from-langchain-to-ossa.yaml +4 -4
  113. package/examples/multi-agent/README.md +74 -0
  114. package/examples/multi-agent/conditional-router.ossa.yaml +42 -0
  115. package/examples/multi-agent/parallel-execution.ossa.yaml +54 -0
  116. package/examples/multi-agent/sequential-pipeline.ossa.yaml +45 -0
  117. package/examples/openai/basic-agent.ossa.yaml +1 -1
  118. package/examples/openai/multi-tool-agent.ossa.json +1 -1
  119. package/examples/openai/swarm-agent.ossa.json +1 -1
  120. package/examples/production/document-analyzer-openai.yml +1 -1
  121. package/examples/quickstart/support-agent.ossa.yaml +1 -1
  122. package/examples/spec-examples/audit-agent.yml +1 -1
  123. package/examples/spec-examples/chat-agent.yml +1 -1
  124. package/examples/spec-examples/compliance-agent.yml +1 -1
  125. package/examples/spec-examples/monitoring-agent.yml +1 -1
  126. package/examples/spec-examples/workflow-agent.yml +1 -1
  127. package/examples/templates/ossa-compliance.yaml +1 -1
  128. package/examples/vercel/edge-agent.ossa.json +1 -1
  129. package/gl-code-quality-report.json +62 -0
  130. package/llms-ctx-full.txt +39 -0
  131. package/llms-ctx.txt +39 -0
  132. package/llms.txt +47 -0
  133. package/package.json +6 -3
  134. package/scripts/README.md +25 -0
  135. package/scripts/compliance-audit.ts +796 -0
  136. package/scripts/eslint-to-codequality.cjs +34 -0
  137. package/scripts/generate-agents-catalog.ts +2 -1
  138. package/scripts/generate-api-docs.ts +2 -1
  139. package/scripts/generate-examples-docs.ts +2 -1
  140. package/scripts/generate-llms-ctx.sh +17 -0
  141. package/scripts/generate-schema-docs.ts +31 -10
  142. package/scripts/sync-version.js +4 -12
  143. package/scripts/validate-schema.ts +2 -1
  144. package/spec/v0.2.8/CHANGELOG.md +401 -0
  145. package/spec/v0.2.8/README.md +72 -0
  146. package/spec/v0.2.8/migrations/v0.2.3-to-v0.2.4.md +599 -0
  147. package/spec/v0.2.8/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
  148. package/spec/v0.2.8/migrations/v0.2.6-to-v0.2.8.md +81 -0
  149. package/spec/{v0.2.6-dev/ossa-0.2.6-dev.schema.json → v0.2.8/ossa-0.2.8.schema.json} +1509 -52
  150. package/spec/v0.2.8/ossa-0.2.8.yaml +581 -0
  151. package/spec/v0.2.9/a2a-protocol.md +1337 -0
  152. package/spec/v0.2.9/agent.md +1946 -0
  153. package/spec/v0.2.9/capabilities/index.yaml +25 -0
  154. package/spec/v0.2.9/capabilities/memory.yaml +251 -0
  155. package/spec/v0.2.9/capability-schema.md +576 -0
  156. package/spec/v0.2.9/compliance-profiles.md +533 -0
  157. package/spec/v0.2.9/conformance-testing.md +1527 -0
  158. package/spec/v0.2.9/gitlab-duo-integration.md +621 -0
  159. package/spec/v0.2.9/ossa-0.2.9.schema.json +3699 -0
  160. package/spec/v0.2.9/runtime-semantics.md +464 -0
  161. package/spec/v0.2.9/security-model.md +1245 -0
  162. package/spec/v0.2.9/semantic-conventions.md +347 -0
  163. package/spec/v0.2.9/types.ts +522 -0
  164. package/test-results/junit.xml +337 -0
  165. package/.github/workflows/pr-comment.yml +0 -33
  166. package/bin/validate-ossa-0.2.5-RC.ts +0 -244
  167. package/dist/spec/v0.2.6-dev/ossa-0.2.5.schema.json +0 -1696
  168. package/dist/spec/v0.2.6-dev/ossa-0.2.6-dev.schema.json +0 -1696
  169. package/scripts/lib/exec.ts +0 -37
  170. package/scripts/lib/file-ops.ts +0 -58
  171. package/scripts/lib/version.ts +0 -83
  172. package/website/.lighthouserc.ts +0 -24
  173. package/website/.prettierrc +0 -10
  174. package/website/DESIGN_SYSTEM_IMPLEMENTATION.md +0 -445
  175. package/website/Dockerfile +0 -30
  176. package/website/app/about/page.tsx +0 -304
  177. package/website/app/blog/[slug]/page.tsx +0 -208
  178. package/website/app/blog/page.tsx +0 -249
  179. package/website/app/design-guide/page.tsx +0 -511
  180. package/website/app/docs/[[...slug]]/page.tsx +0 -847
  181. package/website/app/docs/core-concepts/project-structure/page.tsx +0 -349
  182. package/website/app/ecosystem/page.tsx +0 -410
  183. package/website/app/examples/page.tsx +0 -133
  184. package/website/app/globals.scss +0 -370
  185. package/website/app/layout.tsx +0 -106
  186. package/website/app/license/page.tsx +0 -183
  187. package/website/app/not-found.tsx +0 -18
  188. package/website/app/page.tsx +0 -686
  189. package/website/app/page.tsx.bak +0 -679
  190. package/website/app/page.tsx.bak2 +0 -649
  191. package/website/app/playground/page.tsx +0 -487
  192. package/website/app/robots.ts +0 -19
  193. package/website/app/rss.xml/route.ts +0 -74
  194. package/website/app/schema/page.tsx +0 -1001
  195. package/website/app/sitemap.ts +0 -56
  196. package/website/app/specification/page.tsx +0 -287
  197. package/website/components/InstallCommand.tsx +0 -96
  198. package/website/components/Logo.tsx +0 -97
  199. package/website/components/StructuredData.tsx +0 -65
  200. package/website/components/docs/DocsSearch.tsx +0 -104
  201. package/website/components/docs/DocsSidebar.tsx +0 -155
  202. package/website/components/docs/MarkdownContent.tsx +0 -401
  203. package/website/components/docs/VersionSelector.tsx +0 -105
  204. package/website/components/examples/ExamplesViewer.tsx +0 -293
  205. package/website/components/layout/Footer.tsx +0 -116
  206. package/website/components/layout/Header.tsx +0 -172
  207. package/website/components/schema/SchemaComponentsAccordion.tsx +0 -84
  208. package/website/components/schema/SchemaExplorer.tsx +0 -213
  209. package/website/components/ui/Badge.tsx +0 -82
  210. package/website/components/ui/Button.tsx +0 -116
  211. package/website/components/ui/Card.tsx +0 -167
  212. package/website/components/ui/Checkbox.tsx +0 -141
  213. package/website/components/ui/Input.tsx +0 -169
  214. package/website/components/ui/Radio.tsx +0 -141
  215. package/website/components/ui/Select.tsx +0 -182
  216. package/website/components/ui/Tag.tsx +0 -158
  217. package/website/components/ui/Textarea.tsx +0 -195
  218. package/website/components/ui/index.ts +0 -11
  219. package/website/content/blog/OpenAPI-AI-Agents-Standard.md +0 -285
  220. package/website/content/blog/Why-Formal-Standards-Matter-Now.md +0 -198
  221. package/website/content/blog/gitlab-kubernetes-agent-ecosystem.md +0 -286
  222. package/website/content/blog/introducing-ossa-framework.md +0 -328
  223. package/website/content/blog/ossa-production-results.md +0 -279
  224. package/website/content/blog/welcome-to-ossa.md +0 -43
  225. package/website/content/blog/why-ai-agents-need-open-standard.md +0 -98
  226. package/website/content/docs/00-home.md +0 -153
  227. package/website/content/docs/adapters/openai-adapter.md +0 -693
  228. package/website/content/docs/agents/catalog.md +0 -28
  229. package/website/content/docs/aiflow-framework-integration-with-ossa.md +0 -107
  230. package/website/content/docs/api-reference/index.md +0 -38
  231. package/website/content/docs/api-reference/ossa-core-api.md +0 -634
  232. package/website/content/docs/api-reference/ossa-registry-api.md +0 -515
  233. package/website/content/docs/api-reference/unified-agent-gateway.md +0 -599
  234. package/website/content/docs/architecture/execution-flow.md +0 -335
  235. package/website/content/docs/architecture/multi-agent-systems.md +0 -737
  236. package/website/content/docs/architecture/overview.md +0 -121
  237. package/website/content/docs/architecture/stack-integration.md +0 -461
  238. package/website/content/docs/changelog.md +0 -246
  239. package/website/content/docs/cli-reference/index.md +0 -111
  240. package/website/content/docs/cli-reference/ossa-agents.md +0 -70
  241. package/website/content/docs/cli-reference/ossa-export.md +0 -56
  242. package/website/content/docs/cli-reference/ossa-generate.md +0 -66
  243. package/website/content/docs/cli-reference/ossa-gitlab-agent.md +0 -57
  244. package/website/content/docs/cli-reference/ossa-import.md +0 -56
  245. package/website/content/docs/cli-reference/ossa-init.md +0 -57
  246. package/website/content/docs/cli-reference/ossa-migrate.md +0 -62
  247. package/website/content/docs/cli-reference/ossa-run.md +0 -66
  248. package/website/content/docs/cli-reference/ossa-schema.md +0 -57
  249. package/website/content/docs/cli-reference/ossa-setup.md +0 -57
  250. package/website/content/docs/cli-reference/ossa-validate.md +0 -66
  251. package/website/content/docs/configuration/index.md +0 -97
  252. package/website/content/docs/contributing.md +0 -599
  253. package/website/content/docs/deployment/github-mirroring.md +0 -924
  254. package/website/content/docs/documentation.md +0 -100
  255. package/website/content/docs/ecosystem/framework-support.md +0 -1361
  256. package/website/content/docs/ecosystem/overview.md +0 -366
  257. package/website/content/docs/errors/index.md +0 -10
  258. package/website/content/docs/examples/aiflow-framework-integration-with-ossa.md +0 -107
  259. package/website/content/docs/examples/catalog.md +0 -300
  260. package/website/content/docs/for-audiences/students-researchers.md +0 -122
  261. package/website/content/docs/getting-started/index.md +0 -92
  262. package/website/content/docs/getting-started/installation.md +0 -155
  263. package/website/content/docs/getting-started/running-agents.md +0 -309
  264. package/website/content/docs/getting-started.md +0 -91
  265. package/website/content/docs/integrations/aiflow.md +0 -104
  266. package/website/content/docs/integrations/drupal.md +0 -105
  267. package/website/content/docs/migration-guides/agent-schema-comparison.md +0 -232
  268. package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +0 -1750
  269. package/website/content/docs/migration-guides/crewai-to-ossa.md +0 -274
  270. package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +0 -2017
  271. package/website/content/docs/migration-guides/general-agent-schema.yml +0 -247
  272. package/website/content/docs/migration-guides/index.md +0 -133
  273. package/website/content/docs/migration-guides/langchain-to-ossa.md +0 -1714
  274. package/website/content/docs/migration-guides/langflow-to-ossa.md +0 -2075
  275. package/website/content/docs/migration-guides/migration-manifest.json +0 -64
  276. package/website/content/docs/migration-guides/openai-to-ossa.md +0 -1202
  277. package/website/content/docs/openapi-extensions/examples.md +0 -550
  278. package/website/content/docs/openapi-extensions/index.md +0 -551
  279. package/website/content/docs/openapi-extensions/operation-extensions.md +0 -457
  280. package/website/content/docs/openapi-extensions/root-extensions.md +0 -410
  281. package/website/content/docs/ossa-compliant-badge.md +0 -251
  282. package/website/content/docs/pre-release/index.md +0 -175
  283. package/website/content/docs/quick-reference.md +0 -17
  284. package/website/content/docs/readme.md +0 -35
  285. package/website/content/docs/releases/v0.2.6.md +0 -99
  286. package/website/content/docs/schema-reference/agent-capabilities.md +0 -50
  287. package/website/content/docs/schema-reference/agent-id.md +0 -52
  288. package/website/content/docs/schema-reference/agent-name.md +0 -50
  289. package/website/content/docs/schema-reference/agent-role.md +0 -54
  290. package/website/content/docs/schema-reference/agent-spec.md +0 -406
  291. package/website/content/docs/schema-reference/agent-version.md +0 -50
  292. package/website/content/docs/schema-reference/autonomy.md +0 -568
  293. package/website/content/docs/schema-reference/constraints.md +0 -543
  294. package/website/content/docs/schema-reference/index.md +0 -45
  295. package/website/content/docs/schema-reference/llm-config.md +0 -445
  296. package/website/content/docs/schema-reference/observability.md +0 -654
  297. package/website/content/docs/schema-reference/ossa-manifest.md +0 -309
  298. package/website/content/docs/schema-reference/taxonomy.md +0 -509
  299. package/website/content/docs/schema-reference/tools.md +0 -628
  300. package/website/content/docs/templates/blog-post.md +0 -43
  301. package/website/content/docs/types-reference/index.md +0 -105
  302. package/website/content/docs/use-cases/00-index.md +0 -395
  303. package/website/content/docs/use-cases/cicd-code-review.md +0 -1236
  304. package/website/content/docs/use-cases/customer-support.md +0 -1234
  305. package/website/content/docs/use-cases/enterprise-compliance.md +0 -1208
  306. package/website/content/docs/use-cases/research-multi-agent.md +0 -1161
  307. package/website/content/docs/versioning.md +0 -288
  308. package/website/dev.sh +0 -53
  309. package/website/docker-compose.dev.yml +0 -36
  310. package/website/lib/version.ts +0 -35
  311. package/website/lib/versions.json +0 -103
  312. package/website/next.config.ts +0 -18
  313. package/website/nginx.conf +0 -32
  314. package/website/package-lock.json +0 -9679
  315. package/website/package.json +0 -59
  316. package/website/postcss.config.mjs +0 -9
  317. package/website/scripts/fetch-versions.js +0 -166
  318. package/website/scripts/generate-examples-index.js +0 -163
  319. package/website/scripts/merge-docs-to-wiki.ts +0 -207
  320. package/website/scripts/sync-version.js +0 -72
  321. package/website/scripts/sync-wiki.ts +0 -322
  322. package/website/scripts/upload-wiki.ts +0 -199
  323. package/website/styles/_spacing.scss +0 -453
  324. package/website/styles/_tokens.scss +0 -245
  325. package/website/styles/_typography.scss +0 -361
  326. package/website/styles/_variables.scss +0 -287
  327. package/website/tailwind.config.ts +0 -170
@@ -1,182 +0,0 @@
1
- 'use client';
2
-
3
- import React, { SelectHTMLAttributes, forwardRef } from 'react';
4
-
5
- // Simple className merger utility
6
- function cn(...classes: (string | undefined | null | false)[]): string {
7
- return classes.filter(Boolean).join(' ');
8
- }
9
-
10
- // ============================================================================
11
- // SELECT COMPONENT
12
- // ============================================================================
13
- // Form select with label, error states, and accessibility
14
- // ============================================================================
15
-
16
- export interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {
17
- label?: string;
18
- error?: string;
19
- helperText?: string;
20
- fullWidth?: boolean;
21
- options?: Array<{ value: string; label: string; disabled?: boolean }>;
22
- }
23
-
24
- const Select = forwardRef<HTMLSelectElement, SelectProps>(
25
- (
26
- {
27
- className,
28
- label,
29
- error,
30
- helperText,
31
- fullWidth = false,
32
- options,
33
- id,
34
- disabled,
35
- required,
36
- children,
37
- ...props
38
- },
39
- ref
40
- ) => {
41
- // Generate ID if not provided
42
- const selectId = id || `select-${Math.random().toString(36).substr(2, 9)}`;
43
- const errorId = `${selectId}-error`;
44
- const helperId = `${selectId}-helper`;
45
-
46
- // Base select styles
47
- const baseStyles = [
48
- 'block',
49
- 'w-full',
50
- 'rounded-lg',
51
- 'border',
52
- 'px-4',
53
- 'py-2',
54
- 'pr-10',
55
- 'text-base',
56
- 'transition-colors',
57
- 'duration-200',
58
- 'focus:outline-none',
59
- 'focus:ring-2',
60
- 'focus:ring-offset-1',
61
- 'disabled:opacity-50',
62
- 'disabled:cursor-not-allowed',
63
- 'disabled:bg-gray-100',
64
- 'appearance-none',
65
- 'bg-white',
66
- 'cursor-pointer',
67
- ];
68
-
69
- // State-based styles
70
- const stateStyles = error
71
- ? [
72
- 'border-error-500',
73
- 'text-error-900',
74
- 'focus:border-error-500',
75
- 'focus:ring-error-500',
76
- ]
77
- : [
78
- 'border-gray-300',
79
- 'text-gray-900',
80
- 'focus:border-primary-500',
81
- 'focus:ring-primary-500',
82
- ];
83
-
84
- return (
85
- <div className={cn(fullWidth ? 'w-full' : 'w-auto')}>
86
- {/* Label */}
87
- {label && (
88
- <label
89
- htmlFor={selectId}
90
- className={cn(
91
- 'block',
92
- 'text-sm',
93
- 'font-medium',
94
- 'mb-1',
95
- error ? 'text-error-700' : 'text-gray-700'
96
- )}
97
- >
98
- {label}
99
- {required && <span className="text-error-500 ml-1">*</span>}
100
- </label>
101
- )}
102
-
103
- {/* Select wrapper */}
104
- <div className="relative">
105
- {/* Select */}
106
- <select
107
- ref={ref}
108
- id={selectId}
109
- className={cn(
110
- ...baseStyles,
111
- ...stateStyles,
112
- className
113
- )}
114
- disabled={disabled}
115
- required={required}
116
- aria-invalid={error ? 'true' : 'false'}
117
- aria-describedby={cn(
118
- error ? errorId : undefined,
119
- helperText ? helperId : undefined
120
- )}
121
- {...props}
122
- >
123
- {options
124
- ? options.map((option) => (
125
- <option
126
- key={option.value}
127
- value={option.value}
128
- disabled={option.disabled}
129
- >
130
- {option.label}
131
- </option>
132
- ))
133
- : children}
134
- </select>
135
-
136
- {/* Dropdown icon */}
137
- <div className="absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-gray-400">
138
- <svg
139
- className="w-5 h-5"
140
- fill="none"
141
- stroke="currentColor"
142
- viewBox="0 0 24 24"
143
- aria-hidden="true"
144
- >
145
- <path
146
- strokeLinecap="round"
147
- strokeLinejoin="round"
148
- strokeWidth={2}
149
- d="M19 9l-7 7-7-7"
150
- />
151
- </svg>
152
- </div>
153
- </div>
154
-
155
- {/* Error message */}
156
- {error && (
157
- <p
158
- id={errorId}
159
- className="mt-1 text-sm text-error-600"
160
- role="alert"
161
- >
162
- {error}
163
- </p>
164
- )}
165
-
166
- {/* Helper text */}
167
- {helperText && !error && (
168
- <p
169
- id={helperId}
170
- className="mt-1 text-sm text-gray-500"
171
- >
172
- {helperText}
173
- </p>
174
- )}
175
- </div>
176
- );
177
- }
178
- );
179
-
180
- Select.displayName = 'Select';
181
-
182
- export { Select };
@@ -1,158 +0,0 @@
1
- 'use client';
2
-
3
- import React, { HTMLAttributes, forwardRef } from 'react';
4
-
5
- // Simple className merger utility
6
- function cn(...classes: (string | undefined | null | false)[]): string {
7
- return classes.filter(Boolean).join(' ');
8
- }
9
-
10
- // ============================================================================
11
- // TAG COMPONENT
12
- // ============================================================================
13
- // Tag/chip component with removable option and color variants
14
- // ============================================================================
15
-
16
- export interface TagProps extends HTMLAttributes<HTMLSpanElement> {
17
- variant?: 'default' | 'success' | 'warning' | 'error' | 'info' | 'primary' | 'secondary';
18
- size?: 'sm' | 'md' | 'lg';
19
- removable?: boolean;
20
- onRemove?: () => void;
21
- }
22
-
23
- const Tag = forwardRef<HTMLSpanElement, TagProps>(
24
- (
25
- {
26
- className,
27
- variant = 'default',
28
- size = 'md',
29
- removable = false,
30
- onRemove,
31
- children,
32
- ...props
33
- },
34
- ref
35
- ) => {
36
- // Base styles
37
- const baseStyles = [
38
- 'inline-flex',
39
- 'items-center',
40
- 'gap-1.5',
41
- 'font-medium',
42
- 'rounded-md',
43
- 'transition-colors',
44
- 'duration-200',
45
- ];
46
-
47
- // Variant styles
48
- const variantStyles = {
49
- default: [
50
- 'bg-gray-200',
51
- 'text-gray-800',
52
- 'hover:bg-gray-300',
53
- ],
54
- success: [
55
- 'bg-success-200',
56
- 'text-success-900',
57
- 'hover:bg-success-300',
58
- ],
59
- warning: [
60
- 'bg-warning-200',
61
- 'text-warning-900',
62
- 'hover:bg-warning-300',
63
- ],
64
- error: [
65
- 'bg-error-200',
66
- 'text-error-900',
67
- 'hover:bg-error-300',
68
- ],
69
- info: [
70
- 'bg-info-200',
71
- 'text-info-900',
72
- 'hover:bg-info-300',
73
- ],
74
- primary: [
75
- 'bg-primary-200',
76
- 'text-primary-900',
77
- 'hover:bg-primary-300',
78
- ],
79
- secondary: [
80
- 'bg-secondary-200',
81
- 'text-secondary-900',
82
- 'hover:bg-secondary-300',
83
- ],
84
- };
85
-
86
- // Size styles
87
- const sizeStyles = {
88
- sm: ['text-xs', 'px-2', 'py-0.5'],
89
- md: ['text-sm', 'px-2.5', 'py-1'],
90
- lg: ['text-base', 'px-3', 'py-1.5'],
91
- };
92
-
93
- // Remove button colors
94
- const removeButtonColors = {
95
- default: 'hover:bg-gray-400',
96
- success: 'hover:bg-success-400',
97
- warning: 'hover:bg-warning-400',
98
- error: 'hover:bg-error-400',
99
- info: 'hover:bg-info-400',
100
- primary: 'hover:bg-primary-400',
101
- secondary: 'hover:bg-secondary-400',
102
- };
103
-
104
- return (
105
- <span
106
- ref={ref}
107
- className={cn(
108
- ...baseStyles,
109
- ...variantStyles[variant],
110
- ...sizeStyles[size],
111
- className
112
- )}
113
- {...props}
114
- >
115
- {children}
116
-
117
- {removable && onRemove && (
118
- <button
119
- type="button"
120
- onClick={onRemove}
121
- className={cn(
122
- 'flex-shrink-0',
123
- 'rounded-full',
124
- 'p-0.5',
125
- 'transition-colors',
126
- 'duration-200',
127
- 'focus:outline-none',
128
- 'focus:ring-2',
129
- 'focus:ring-offset-1',
130
- 'focus:ring-current',
131
- removeButtonColors[variant]
132
- )}
133
- aria-label="Remove tag"
134
- >
135
- <svg
136
- className="w-3 h-3"
137
- fill="none"
138
- stroke="currentColor"
139
- viewBox="0 0 24 24"
140
- aria-hidden="true"
141
- >
142
- <path
143
- strokeLinecap="round"
144
- strokeLinejoin="round"
145
- strokeWidth={2}
146
- d="M6 18L18 6M6 6l12 12"
147
- />
148
- </svg>
149
- </button>
150
- )}
151
- </span>
152
- );
153
- }
154
- );
155
-
156
- Tag.displayName = 'Tag';
157
-
158
- export { Tag };
@@ -1,195 +0,0 @@
1
- 'use client';
2
-
3
- import React, { TextareaHTMLAttributes, forwardRef, useState } from 'react';
4
-
5
- // Simple className merger utility
6
- function cn(...classes: (string | undefined | null | false)[]): string {
7
- return classes.filter(Boolean).join(' ');
8
- }
9
-
10
- // ============================================================================
11
- // TEXTAREA COMPONENT
12
- // ============================================================================
13
- // Textarea with label, error states, character count, and accessibility
14
- // ============================================================================
15
-
16
- export interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
17
- label?: string;
18
- error?: string;
19
- helperText?: string;
20
- fullWidth?: boolean;
21
- showCharCount?: boolean;
22
- resize?: 'none' | 'vertical' | 'horizontal' | 'both';
23
- }
24
-
25
- const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(
26
- (
27
- {
28
- className,
29
- label,
30
- error,
31
- helperText,
32
- fullWidth = false,
33
- showCharCount = false,
34
- resize = 'vertical',
35
- id,
36
- disabled,
37
- required,
38
- maxLength,
39
- value,
40
- defaultValue,
41
- onChange,
42
- ...props
43
- },
44
- ref
45
- ) => {
46
- // Track character count
47
- const [charCount, setCharCount] = useState(
48
- (value?.toString() || defaultValue?.toString() || '').length
49
- );
50
-
51
- // Generate ID if not provided
52
- const textareaId = id || `textarea-${Math.random().toString(36).substr(2, 9)}`;
53
- const errorId = `${textareaId}-error`;
54
- const helperId = `${textareaId}-helper`;
55
-
56
- // Handle change to update character count
57
- const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
58
- setCharCount(e.target.value.length);
59
- onChange?.(e);
60
- };
61
-
62
- // Base textarea styles
63
- const baseStyles = [
64
- 'block',
65
- 'w-full',
66
- 'rounded-lg',
67
- 'border',
68
- 'px-4',
69
- 'py-2',
70
- 'text-base',
71
- 'transition-colors',
72
- 'duration-200',
73
- 'focus:outline-none',
74
- 'focus:ring-2',
75
- 'focus:ring-offset-1',
76
- 'disabled:opacity-50',
77
- 'disabled:cursor-not-allowed',
78
- 'disabled:bg-gray-100',
79
- 'min-h-[100px]',
80
- ];
81
-
82
- // Resize styles
83
- const resizeStyles = {
84
- none: 'resize-none',
85
- vertical: 'resize-y',
86
- horizontal: 'resize-x',
87
- both: 'resize',
88
- };
89
-
90
- // State-based styles
91
- const stateStyles = error
92
- ? [
93
- 'border-error-500',
94
- 'text-error-900',
95
- 'focus:border-error-500',
96
- 'focus:ring-error-500',
97
- ]
98
- : [
99
- 'border-gray-300',
100
- 'text-gray-900',
101
- 'focus:border-primary-500',
102
- 'focus:ring-primary-500',
103
- ];
104
-
105
- return (
106
- <div className={cn(fullWidth ? 'w-full' : 'w-auto')}>
107
- {/* Label */}
108
- {label && (
109
- <label
110
- htmlFor={textareaId}
111
- className={cn(
112
- 'block',
113
- 'text-sm',
114
- 'font-medium',
115
- 'mb-1',
116
- error ? 'text-error-700' : 'text-gray-700'
117
- )}
118
- >
119
- {label}
120
- {required && <span className="text-error-500 ml-1">*</span>}
121
- </label>
122
- )}
123
-
124
- {/* Textarea */}
125
- <textarea
126
- ref={ref}
127
- id={textareaId}
128
- className={cn(
129
- ...baseStyles,
130
- resizeStyles[resize],
131
- ...stateStyles,
132
- className
133
- )}
134
- disabled={disabled}
135
- required={required}
136
- maxLength={maxLength}
137
- value={value}
138
- defaultValue={defaultValue}
139
- onChange={handleChange}
140
- aria-invalid={error ? 'true' : 'false'}
141
- aria-describedby={cn(
142
- error ? errorId : undefined,
143
- helperText ? helperId : undefined
144
- )}
145
- {...props}
146
- />
147
-
148
- {/* Character count and helper text row */}
149
- <div className="flex items-center justify-between mt-1">
150
- <div className="flex-1">
151
- {/* Error message */}
152
- {error && (
153
- <p
154
- id={errorId}
155
- className="text-sm text-error-600"
156
- role="alert"
157
- >
158
- {error}
159
- </p>
160
- )}
161
-
162
- {/* Helper text */}
163
- {helperText && !error && (
164
- <p
165
- id={helperId}
166
- className="text-sm text-gray-500"
167
- >
168
- {helperText}
169
- </p>
170
- )}
171
- </div>
172
-
173
- {/* Character count */}
174
- {showCharCount && maxLength && (
175
- <p
176
- className={cn(
177
- 'text-sm',
178
- 'ml-2',
179
- 'flex-shrink-0',
180
- charCount > maxLength ? 'text-error-600' : 'text-gray-500'
181
- )}
182
- aria-live="polite"
183
- >
184
- {charCount} / {maxLength}
185
- </p>
186
- )}
187
- </div>
188
- </div>
189
- );
190
- }
191
- );
192
-
193
- Textarea.displayName = 'Textarea';
194
-
195
- export { Textarea };
@@ -1,11 +0,0 @@
1
- export { Button, type ButtonProps } from './Button';
2
- export {
3
- Card,
4
- CardHeader,
5
- CardTitle,
6
- CardDescription,
7
- CardContent,
8
- CardFooter,
9
- type CardProps,
10
- } from './Card';
11
- export { Badge, type BadgeProps } from './Badge';