@idealyst/mcp-server 1.0.92 → 1.0.94
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.
- package/dist/data/cli-commands.d.ts +2 -0
- package/dist/data/cli-commands.d.ts.map +1 -0
- package/dist/data/cli-commands.js +100 -0
- package/dist/data/cli-commands.js.map +1 -0
- package/dist/data/components/Accordion.d.ts +15 -0
- package/dist/data/components/Accordion.d.ts.map +1 -0
- package/{src/data/components/Accordion.ts → dist/data/components/Accordion.js} +26 -28
- package/dist/data/components/Accordion.js.map +1 -0
- package/dist/data/components/ActivityIndicator.d.ts +15 -0
- package/dist/data/components/ActivityIndicator.d.ts.map +1 -0
- package/{src/data/components/ActivityIndicator.ts → dist/data/components/ActivityIndicator.js} +26 -28
- package/dist/data/components/ActivityIndicator.js.map +1 -0
- package/dist/data/components/Alert.d.ts +15 -0
- package/dist/data/components/Alert.d.ts.map +1 -0
- package/{src/data/components/Alert.ts → dist/data/components/Alert.js} +28 -30
- package/dist/data/components/Alert.js.map +1 -0
- package/dist/data/components/Avatar.d.ts +15 -0
- package/dist/data/components/Avatar.d.ts.map +1 -0
- package/{src/data/components/Avatar.ts → dist/data/components/Avatar.js} +26 -28
- package/dist/data/components/Avatar.js.map +1 -0
- package/dist/data/components/Badge.d.ts +15 -0
- package/dist/data/components/Badge.d.ts.map +1 -0
- package/{src/data/components/Badge.ts → dist/data/components/Badge.js} +16 -15
- package/dist/data/components/Badge.js.map +1 -0
- package/dist/data/components/Breadcrumb.d.ts +15 -0
- package/dist/data/components/Breadcrumb.d.ts.map +1 -0
- package/{src/data/components/Breadcrumb.ts → dist/data/components/Breadcrumb.js} +27 -29
- package/dist/data/components/Breadcrumb.js.map +1 -0
- package/dist/data/components/Button.d.ts +15 -0
- package/dist/data/components/Button.d.ts.map +1 -0
- package/{src/data/components/Button.ts → dist/data/components/Button.js} +18 -17
- package/dist/data/components/Button.js.map +1 -0
- package/dist/data/components/Card.d.ts +15 -0
- package/dist/data/components/Card.d.ts.map +1 -0
- package/{src/data/components/Card.ts → dist/data/components/Card.js} +16 -15
- package/dist/data/components/Card.js.map +1 -0
- package/dist/data/components/Checkbox.d.ts +15 -0
- package/dist/data/components/Checkbox.d.ts.map +1 -0
- package/{src/data/components/Checkbox.ts → dist/data/components/Checkbox.js} +27 -29
- package/dist/data/components/Checkbox.js.map +1 -0
- package/dist/data/components/Chip.d.ts +15 -0
- package/dist/data/components/Chip.d.ts.map +1 -0
- package/{src/data/components/Chip.ts → dist/data/components/Chip.js} +19 -18
- package/dist/data/components/Chip.js.map +1 -0
- package/dist/data/components/Dialog.d.ts +15 -0
- package/dist/data/components/Dialog.d.ts.map +1 -0
- package/{src/data/components/Dialog.ts → dist/data/components/Dialog.js} +18 -17
- package/dist/data/components/Dialog.js.map +1 -0
- package/dist/data/components/Divider.d.ts +15 -0
- package/dist/data/components/Divider.d.ts.map +1 -0
- package/{src/data/components/Divider.ts → dist/data/components/Divider.js} +26 -28
- package/dist/data/components/Divider.js.map +1 -0
- package/dist/data/components/Icon.d.ts +15 -0
- package/dist/data/components/Icon.d.ts.map +1 -0
- package/{src/data/components/Icon.ts → dist/data/components/Icon.js} +26 -28
- package/dist/data/components/Icon.js.map +1 -0
- package/dist/data/components/Image.d.ts +15 -0
- package/dist/data/components/Image.d.ts.map +1 -0
- package/{src/data/components/Image.ts → dist/data/components/Image.js} +29 -31
- package/dist/data/components/Image.js.map +1 -0
- package/dist/data/components/Input.d.ts +15 -0
- package/dist/data/components/Input.d.ts.map +1 -0
- package/{src/data/components/Input.ts → dist/data/components/Input.js} +20 -19
- package/dist/data/components/Input.js.map +1 -0
- package/dist/data/components/List.d.ts +15 -0
- package/dist/data/components/List.d.ts.map +1 -0
- package/{src/data/components/List.ts → dist/data/components/List.js} +18 -17
- package/dist/data/components/List.js.map +1 -0
- package/dist/data/components/Menu.d.ts +15 -0
- package/dist/data/components/Menu.d.ts.map +1 -0
- package/{src/data/components/Menu.ts → dist/data/components/Menu.js} +27 -29
- package/dist/data/components/Menu.js.map +1 -0
- package/dist/data/components/Popover.d.ts +15 -0
- package/dist/data/components/Popover.d.ts.map +1 -0
- package/{src/data/components/Popover.ts → dist/data/components/Popover.js} +28 -30
- package/dist/data/components/Popover.js.map +1 -0
- package/dist/data/components/Pressable.d.ts +15 -0
- package/dist/data/components/Pressable.d.ts.map +1 -0
- package/{src/data/components/Pressable.ts → dist/data/components/Pressable.js} +27 -29
- package/dist/data/components/Pressable.js.map +1 -0
- package/dist/data/components/Progress.d.ts +15 -0
- package/dist/data/components/Progress.d.ts.map +1 -0
- package/{src/data/components/Progress.ts → dist/data/components/Progress.js} +27 -29
- package/dist/data/components/Progress.js.map +1 -0
- package/dist/data/components/RadioButton.d.ts +15 -0
- package/dist/data/components/RadioButton.d.ts.map +1 -0
- package/{src/data/components/RadioButton.ts → dist/data/components/RadioButton.js} +28 -30
- package/dist/data/components/RadioButton.js.map +1 -0
- package/dist/data/components/SVGImage.d.ts +15 -0
- package/dist/data/components/SVGImage.d.ts.map +1 -0
- package/{src/data/components/SVGImage.ts → dist/data/components/SVGImage.js} +27 -29
- package/dist/data/components/SVGImage.js.map +1 -0
- package/dist/data/components/Screen.d.ts +15 -0
- package/dist/data/components/Screen.d.ts.map +1 -0
- package/{src/data/components/Screen.ts → dist/data/components/Screen.js} +27 -29
- package/dist/data/components/Screen.js.map +1 -0
- package/dist/data/components/Select.d.ts +15 -0
- package/dist/data/components/Select.d.ts.map +1 -0
- package/{src/data/components/Select.ts → dist/data/components/Select.js} +30 -32
- package/dist/data/components/Select.js.map +1 -0
- package/dist/data/components/Skeleton.d.ts +15 -0
- package/dist/data/components/Skeleton.d.ts.map +1 -0
- package/{src/data/components/Skeleton.ts → dist/data/components/Skeleton.js} +27 -29
- package/dist/data/components/Skeleton.js.map +1 -0
- package/dist/data/components/Slider.d.ts +15 -0
- package/dist/data/components/Slider.d.ts.map +1 -0
- package/{src/data/components/Slider.ts → dist/data/components/Slider.js} +31 -33
- package/dist/data/components/Slider.js.map +1 -0
- package/dist/data/components/Switch.d.ts +15 -0
- package/dist/data/components/Switch.d.ts.map +1 -0
- package/{src/data/components/Switch.ts → dist/data/components/Switch.js} +28 -30
- package/dist/data/components/Switch.js.map +1 -0
- package/dist/data/components/TabBar.d.ts +15 -0
- package/dist/data/components/TabBar.d.ts.map +1 -0
- package/{src/data/components/TabBar.ts → dist/data/components/TabBar.js} +27 -29
- package/dist/data/components/TabBar.js.map +1 -0
- package/dist/data/components/Table.d.ts +15 -0
- package/dist/data/components/Table.d.ts.map +1 -0
- package/{src/data/components/Table.ts → dist/data/components/Table.js} +29 -31
- package/dist/data/components/Table.js.map +1 -0
- package/dist/data/components/Tabs.d.ts +15 -0
- package/dist/data/components/Tabs.d.ts.map +1 -0
- package/{src/data/components/Tabs.ts → dist/data/components/Tabs.js} +28 -30
- package/dist/data/components/Tabs.js.map +1 -0
- package/dist/data/components/Text.d.ts +15 -0
- package/dist/data/components/Text.d.ts.map +1 -0
- package/{src/data/components/Text.ts → dist/data/components/Text.js} +27 -29
- package/dist/data/components/Text.js.map +1 -0
- package/dist/data/components/TextArea.d.ts +15 -0
- package/dist/data/components/TextArea.d.ts.map +1 -0
- package/{src/data/components/TextArea.ts → dist/data/components/TextArea.js} +31 -33
- package/dist/data/components/TextArea.js.map +1 -0
- package/dist/data/components/Tooltip.d.ts +15 -0
- package/dist/data/components/Tooltip.d.ts.map +1 -0
- package/{src/data/components/Tooltip.ts → dist/data/components/Tooltip.js} +28 -30
- package/dist/data/components/Tooltip.js.map +1 -0
- package/dist/data/components/Video.d.ts +15 -0
- package/dist/data/components/Video.d.ts.map +1 -0
- package/{src/data/components/Video.ts → dist/data/components/Video.js} +31 -33
- package/dist/data/components/Video.js.map +1 -0
- package/dist/data/components/View.d.ts +15 -0
- package/dist/data/components/View.d.ts.map +1 -0
- package/{src/data/components/View.ts → dist/data/components/View.js} +28 -30
- package/dist/data/components/View.js.map +1 -0
- package/dist/data/components/index.d.ts +37 -0
- package/dist/data/components/index.d.ts.map +1 -0
- package/{src/data/components/index.ts → dist/data/components/index.js} +37 -38
- package/dist/data/components/index.js.map +1 -0
- package/dist/data/framework-guides.d.ts +2 -0
- package/dist/data/framework-guides.d.ts.map +1 -0
- package/{src/data/framework-guides.ts → dist/data/framework-guides.js} +307 -8
- package/dist/data/framework-guides.js.map +1 -0
- package/dist/data/icon-guide.d.ts +2 -0
- package/dist/data/icon-guide.d.ts.map +1 -0
- package/{src/data/icon-guide.ts → dist/data/icon-guide.js} +1 -0
- package/dist/data/icon-guide.js.map +1 -0
- package/dist/data/icons.json +7452 -0
- package/dist/data/navigation-guides.d.ts +2 -0
- package/dist/data/navigation-guides.d.ts.map +1 -0
- package/{src/data/navigation-guides.ts → dist/data/navigation-guides.js} +7 -10
- package/dist/data/navigation-guides.js.map +1 -0
- package/dist/generated/types.json +2556 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -0
- package/dist/tools/get-types.d.ts +26 -0
- package/dist/tools/get-types.d.ts.map +1 -0
- package/dist/tools/get-types.js +123 -0
- package/dist/tools/get-types.js.map +1 -0
- package/package.json +10 -5
- package/ARCHITECTURE.md +0 -313
- package/TYPE-SYSTEM.md +0 -397
- package/scripts/extract-types.ts +0 -71
- package/scripts/type-extractor.ts +0 -286
- package/scripts/validate-examples.ts +0 -142
- package/src/data/cli-commands.ts +0 -103
- package/src/data/icons.json +0 -7452
- package/src/index.ts +0 -653
- package/src/tools/get-types.ts +0 -169
- package/test-client.js +0 -86
- package/tsconfig.examples.json +0 -14
- package/tsconfig.json +0 -20
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export const frameworkGuides
|
|
2
|
-
|
|
1
|
+
export const frameworkGuides = {
|
|
2
|
+
"idealyst://framework/getting-started": `# Getting Started with Idealyst
|
|
3
3
|
|
|
4
4
|
Idealyst is a modern, cross-platform framework for building React and React Native applications with a powerful component library, type-safe APIs, and monorepo tooling.
|
|
5
5
|
|
|
@@ -83,8 +83,7 @@ my-app/
|
|
|
83
83
|
3. Define your API routes in \`packages/api\`
|
|
84
84
|
4. Build your UI in \`packages/web\` or \`packages/mobile\`
|
|
85
85
|
`,
|
|
86
|
-
|
|
87
|
-
"idealyst://framework/components-overview": `# Idealyst Components Overview
|
|
86
|
+
"idealyst://framework/components-overview": `# Idealyst Components Overview
|
|
88
87
|
|
|
89
88
|
Idealyst provides a comprehensive library of cross-platform React components organized into categories.
|
|
90
89
|
|
|
@@ -185,8 +184,7 @@ All components use the Unistyles theming system:
|
|
|
185
184
|
import { Button, Card, Text, View } from '@idealyst/components';
|
|
186
185
|
\`\`\`
|
|
187
186
|
`,
|
|
188
|
-
|
|
189
|
-
"idealyst://framework/theming": `# Theming Guide
|
|
187
|
+
"idealyst://framework/theming": `# Theming Guide
|
|
190
188
|
|
|
191
189
|
Idealyst uses react-native-unistyles for cross-platform theming with full TypeScript support.
|
|
192
190
|
|
|
@@ -379,8 +377,7 @@ const styles = StyleSheet.create(theme => ({
|
|
|
379
377
|
}));
|
|
380
378
|
\`\`\`
|
|
381
379
|
`,
|
|
382
|
-
|
|
383
|
-
"idealyst://framework/cli": `# Idealyst CLI Reference
|
|
380
|
+
"idealyst://framework/cli": `# Idealyst CLI Reference
|
|
384
381
|
|
|
385
382
|
The Idealyst CLI provides commands for creating and managing Idealyst projects.
|
|
386
383
|
|
|
@@ -589,5 +586,307 @@ workspace/
|
|
|
589
586
|
6. **Documentation**: Add README files to packages
|
|
590
587
|
7. **Git**: Use conventional commits
|
|
591
588
|
8. **Dependencies**: Share dependencies across packages when possible
|
|
589
|
+
`,
|
|
590
|
+
"idealyst://framework/api-overview": `# API Architecture Overview
|
|
591
|
+
|
|
592
|
+
Idealyst provides a dual API architecture with both tRPC and GraphQL, giving you flexibility for different use cases.
|
|
593
|
+
|
|
594
|
+
## When to Use Each
|
|
595
|
+
|
|
596
|
+
### tRPC (Type-Safe RPC)
|
|
597
|
+
- **Best for**: Internal clients, same-team consumption
|
|
598
|
+
- **Benefits**: End-to-end type safety, no code generation, fast development
|
|
599
|
+
- **Use when**: Your frontend and backend are TypeScript
|
|
600
|
+
|
|
601
|
+
### GraphQL
|
|
602
|
+
- **Best for**: Public APIs, third-party integrations, mobile apps
|
|
603
|
+
- **Benefits**: Flexible queries, schema documentation, wide ecosystem
|
|
604
|
+
- **Use when**: You need schema introspection or have non-TypeScript clients
|
|
605
|
+
|
|
606
|
+
## Architecture
|
|
607
|
+
|
|
608
|
+
Both APIs run on the same Express server:
|
|
609
|
+
|
|
610
|
+
\`\`\`
|
|
611
|
+
Server (port 3000)
|
|
612
|
+
├── /trpc/* → tRPC handlers
|
|
613
|
+
├── /graphql → GraphQL Yoga endpoint
|
|
614
|
+
└── Shared context (database, auth)
|
|
615
|
+
\`\`\`
|
|
616
|
+
|
|
617
|
+
## File Structure
|
|
618
|
+
|
|
619
|
+
\`\`\`
|
|
620
|
+
packages/api/src/
|
|
621
|
+
├── routers/ # tRPC routers
|
|
622
|
+
│ ├── index.ts # Root router
|
|
623
|
+
│ └── test.ts # Example router
|
|
624
|
+
├── graphql/ # GraphQL setup
|
|
625
|
+
│ ├── builder.ts # Pothos schema builder
|
|
626
|
+
│ ├── index.ts # Yoga server setup
|
|
627
|
+
│ └── types/ # GraphQL type definitions
|
|
628
|
+
│ └── test.ts # Example types
|
|
629
|
+
├── context.ts # Shared context
|
|
630
|
+
├── server.ts # Express server
|
|
631
|
+
└── index.ts # Entry point
|
|
632
|
+
\`\`\`
|
|
633
|
+
|
|
634
|
+
## Shared Context
|
|
635
|
+
|
|
636
|
+
Both APIs share the same context:
|
|
637
|
+
|
|
638
|
+
\`\`\`typescript
|
|
639
|
+
// context.ts
|
|
640
|
+
export interface Context {
|
|
641
|
+
db: PrismaClient;
|
|
642
|
+
// Add auth, session, etc.
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
export async function createContext(): Promise<Context> {
|
|
646
|
+
return {
|
|
647
|
+
db: prisma,
|
|
648
|
+
};
|
|
649
|
+
}
|
|
650
|
+
\`\`\`
|
|
651
|
+
|
|
652
|
+
## Client Setup
|
|
653
|
+
|
|
654
|
+
The shared package provides clients for both:
|
|
655
|
+
|
|
656
|
+
\`\`\`typescript
|
|
657
|
+
// In your App component
|
|
658
|
+
import { createTRPCClient, createGraphQLClient } from '@your-app/shared';
|
|
659
|
+
|
|
660
|
+
// tRPC - automatic type inference
|
|
661
|
+
const trpcClient = createTRPCClient({ apiUrl: 'http://localhost:3000/trpc' });
|
|
662
|
+
|
|
663
|
+
// GraphQL - manual queries with graphql-request
|
|
664
|
+
createGraphQLClient({ apiUrl: 'http://localhost:3000/graphql' });
|
|
665
|
+
\`\`\`
|
|
666
|
+
|
|
667
|
+
## Migration Path
|
|
668
|
+
|
|
669
|
+
Start with tRPC for rapid development, add GraphQL when you need:
|
|
670
|
+
- Public API documentation
|
|
671
|
+
- Third-party integrations
|
|
672
|
+
- Schema-first development
|
|
673
|
+
- Non-TypeScript clients
|
|
674
|
+
`,
|
|
675
|
+
"idealyst://framework/graphql-setup": `# GraphQL Setup Guide
|
|
676
|
+
|
|
677
|
+
Idealyst uses Pothos (code-first schema) with GraphQL Yoga server, integrated with Prisma.
|
|
678
|
+
|
|
679
|
+
## Server Setup
|
|
680
|
+
|
|
681
|
+
### 1. Schema Builder (builder.ts)
|
|
682
|
+
|
|
683
|
+
\`\`\`typescript
|
|
684
|
+
import SchemaBuilder from '@pothos/core';
|
|
685
|
+
import PrismaPlugin from '@pothos/plugin-prisma';
|
|
686
|
+
import type PrismaTypes from './generated';
|
|
687
|
+
import { prisma } from '@your-app/database';
|
|
688
|
+
|
|
689
|
+
export const builder = new SchemaBuilder<{
|
|
690
|
+
PrismaTypes: PrismaTypes;
|
|
691
|
+
Context: { db: typeof prisma };
|
|
692
|
+
}>({
|
|
693
|
+
plugins: [PrismaPlugin],
|
|
694
|
+
prisma: {
|
|
695
|
+
client: prisma,
|
|
696
|
+
},
|
|
697
|
+
});
|
|
698
|
+
|
|
699
|
+
// Initialize Query and Mutation types
|
|
700
|
+
builder.queryType({});
|
|
701
|
+
builder.mutationType({});
|
|
702
|
+
\`\`\`
|
|
703
|
+
|
|
704
|
+
### 2. Generate Prisma Types
|
|
705
|
+
|
|
706
|
+
\`\`\`bash
|
|
707
|
+
# In packages/api
|
|
708
|
+
npx prisma generate --generator pothos
|
|
709
|
+
\`\`\`
|
|
710
|
+
|
|
711
|
+
Add to your prisma schema:
|
|
712
|
+
|
|
713
|
+
\`\`\`prisma
|
|
714
|
+
generator pothos {
|
|
715
|
+
provider = "prisma-pothos-types"
|
|
716
|
+
output = "../src/graphql/generated.ts"
|
|
717
|
+
}
|
|
718
|
+
\`\`\`
|
|
719
|
+
|
|
720
|
+
### 3. Define Types (types/example.ts)
|
|
721
|
+
|
|
722
|
+
\`\`\`typescript
|
|
723
|
+
import { builder } from '../builder';
|
|
724
|
+
|
|
725
|
+
// Object type from Prisma model
|
|
726
|
+
builder.prismaObject('Test', {
|
|
727
|
+
fields: (t) => ({
|
|
728
|
+
id: t.exposeID('id'),
|
|
729
|
+
name: t.exposeString('name'),
|
|
730
|
+
message: t.exposeString('message'),
|
|
731
|
+
status: t.exposeString('status'),
|
|
732
|
+
createdAt: t.expose('createdAt', { type: 'DateTime' }),
|
|
733
|
+
}),
|
|
734
|
+
});
|
|
735
|
+
|
|
736
|
+
// Input type for mutations
|
|
737
|
+
const CreateTestInput = builder.inputType('CreateTestInput', {
|
|
738
|
+
fields: (t) => ({
|
|
739
|
+
name: t.string({ required: true }),
|
|
740
|
+
message: t.string({ required: true }),
|
|
741
|
+
status: t.string({ required: true }),
|
|
742
|
+
}),
|
|
743
|
+
});
|
|
744
|
+
|
|
745
|
+
// Query
|
|
746
|
+
builder.queryField('tests', (t) =>
|
|
747
|
+
t.prismaField({
|
|
748
|
+
type: ['Test'],
|
|
749
|
+
args: {
|
|
750
|
+
take: t.arg.int(),
|
|
751
|
+
skip: t.arg.int(),
|
|
752
|
+
},
|
|
753
|
+
resolve: async (query, _root, args, ctx) =>
|
|
754
|
+
ctx.db.test.findMany({
|
|
755
|
+
...query,
|
|
756
|
+
take: args.take ?? 10,
|
|
757
|
+
skip: args.skip ?? 0,
|
|
758
|
+
orderBy: { createdAt: 'desc' },
|
|
759
|
+
}),
|
|
760
|
+
})
|
|
761
|
+
);
|
|
762
|
+
|
|
763
|
+
// Mutation
|
|
764
|
+
builder.mutationField('createTest', (t) =>
|
|
765
|
+
t.prismaField({
|
|
766
|
+
type: 'Test',
|
|
767
|
+
args: {
|
|
768
|
+
input: t.arg({ type: CreateTestInput, required: true }),
|
|
769
|
+
},
|
|
770
|
+
resolve: async (query, _root, args, ctx) =>
|
|
771
|
+
ctx.db.test.create({
|
|
772
|
+
...query,
|
|
773
|
+
data: args.input,
|
|
774
|
+
}),
|
|
775
|
+
})
|
|
776
|
+
);
|
|
777
|
+
\`\`\`
|
|
778
|
+
|
|
779
|
+
### 4. Yoga Server (index.ts)
|
|
780
|
+
|
|
781
|
+
\`\`\`typescript
|
|
782
|
+
import { createYoga } from 'graphql-yoga';
|
|
783
|
+
import { builder } from './builder';
|
|
784
|
+
import './types/test'; // Import all type definitions
|
|
785
|
+
|
|
786
|
+
export const yoga = createYoga({
|
|
787
|
+
schema: builder.toSchema(),
|
|
788
|
+
graphqlEndpoint: '/graphql',
|
|
789
|
+
});
|
|
790
|
+
\`\`\`
|
|
791
|
+
|
|
792
|
+
### 5. Mount in Express (server.ts)
|
|
793
|
+
|
|
794
|
+
\`\`\`typescript
|
|
795
|
+
import express from 'express';
|
|
796
|
+
import { yoga } from './graphql';
|
|
797
|
+
|
|
798
|
+
const app = express();
|
|
799
|
+
|
|
800
|
+
// GraphQL endpoint
|
|
801
|
+
app.use('/graphql', yoga);
|
|
802
|
+
|
|
803
|
+
// tRPC endpoint
|
|
804
|
+
app.use('/trpc', trpcMiddleware);
|
|
805
|
+
\`\`\`
|
|
806
|
+
|
|
807
|
+
## Client Setup
|
|
808
|
+
|
|
809
|
+
### 1. GraphQL Client (shared/src/graphql/client.ts)
|
|
810
|
+
|
|
811
|
+
\`\`\`typescript
|
|
812
|
+
import { GraphQLClient } from 'graphql-request';
|
|
813
|
+
|
|
814
|
+
let client: GraphQLClient | null = null;
|
|
815
|
+
|
|
816
|
+
export function createGraphQLClient(config: { apiUrl: string }) {
|
|
817
|
+
client = new GraphQLClient(config.apiUrl);
|
|
818
|
+
return client;
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
export function getGraphQLClient(): GraphQLClient {
|
|
822
|
+
if (!client) throw new Error('GraphQL client not initialized');
|
|
823
|
+
return client;
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
export { gql } from 'graphql-request';
|
|
827
|
+
\`\`\`
|
|
828
|
+
|
|
829
|
+
### 2. Using with React Query
|
|
830
|
+
|
|
831
|
+
\`\`\`typescript
|
|
832
|
+
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
|
833
|
+
import { getGraphQLClient, gql } from '../graphql/client';
|
|
834
|
+
|
|
835
|
+
const TESTS_QUERY = gql\`
|
|
836
|
+
query GetTests($take: Int) {
|
|
837
|
+
tests(take: $take) {
|
|
838
|
+
id
|
|
839
|
+
name
|
|
840
|
+
message
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
\`;
|
|
844
|
+
|
|
845
|
+
const CREATE_TEST = gql\`
|
|
846
|
+
mutation CreateTest($input: CreateTestInput!) {
|
|
847
|
+
createTest(input: $input) {
|
|
848
|
+
id
|
|
849
|
+
name
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
\`;
|
|
853
|
+
|
|
854
|
+
// Query hook
|
|
855
|
+
const { data, isLoading } = useQuery({
|
|
856
|
+
queryKey: ['graphql', 'tests'],
|
|
857
|
+
queryFn: () => getGraphQLClient().request(TESTS_QUERY, { take: 10 }),
|
|
858
|
+
});
|
|
859
|
+
|
|
860
|
+
// Mutation hook
|
|
861
|
+
const queryClient = useQueryClient();
|
|
862
|
+
const mutation = useMutation({
|
|
863
|
+
mutationFn: (input) => getGraphQLClient().request(CREATE_TEST, { input }),
|
|
864
|
+
onSuccess: () => {
|
|
865
|
+
queryClient.invalidateQueries({ queryKey: ['graphql', 'tests'] });
|
|
866
|
+
},
|
|
867
|
+
});
|
|
868
|
+
\`\`\`
|
|
869
|
+
|
|
870
|
+
## GraphQL Playground
|
|
871
|
+
|
|
872
|
+
Access the GraphQL playground at:
|
|
873
|
+
\`\`\`
|
|
874
|
+
http://localhost:3000/graphql
|
|
875
|
+
\`\`\`
|
|
876
|
+
|
|
877
|
+
Features:
|
|
878
|
+
- Schema explorer
|
|
879
|
+
- Query autocompletion
|
|
880
|
+
- Documentation browser
|
|
881
|
+
- Query history
|
|
882
|
+
|
|
883
|
+
## Best Practices
|
|
884
|
+
|
|
885
|
+
1. **Use Input Types**: Always use input types for mutations
|
|
886
|
+
2. **Pagination**: Implement cursor-based pagination for lists
|
|
887
|
+
3. **Error Handling**: Use Pothos error types
|
|
888
|
+
4. **Authorization**: Add auth checks in resolvers
|
|
889
|
+
5. **N+1 Prevention**: Use Prisma's query optimization
|
|
592
890
|
`,
|
|
593
891
|
};
|
|
892
|
+
//# sourceMappingURL=framework-guides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-guides.js","sourceRoot":"","sources":["../../src/data/framework-guides.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,sCAAsC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFzC;IAEC,0CAA0C,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoG7C;IAEC,8BAA8B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgMjC;IAEC,0BAA0B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiN7B;IAEC,mCAAmC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoFtC;IAEC,oCAAoC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuNvC;CACA,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const iconGuide = "# Material Design Icons Reference\n\nIdealyst uses Material Design Icons (@mdi/react) with **7,447 icons** available.\n\n## Icon Usage\n\n### In Components\n\nIcons can be used by providing the icon name as a string:\n\n```tsx\nimport { Button, Icon, List, Badge } from '@idealyst/components';\n\n// Button with icon\n<Button icon=\"check\">Save</Button>\n\n// Standalone Icon\n<Icon name=\"home\" size=\"md\" color=\"primary\" />\n\n// List with icons\n<ListItem label=\"Settings\" leading=\"cog\" trailing=\"chevron-right\" />\n\n// Badge with icon\n<Badge icon=\"star\">Featured</Badge>\n```\n\n### Icon Properties\n\n```tsx\n<Icon\n name=\"home\" // Icon name (required)\n size=\"xs|sm|md|lg|xl|number\" // Icon size\n color=\"primary|secondary|...\" // Theme color\n/>\n```\n\n## Common Icons by Category\n\n### Navigation & Actions\n- **home** - Home/dashboard\n- **menu** - Hamburger menu\n- **arrow-left** - Back/previous\n- **arrow-right** - Forward/next\n- **chevron-left** - Small back arrow\n- **chevron-right** - Small forward arrow\n- **chevron-up** - Collapse/up\n- **chevron-down** - Expand/down\n- **close** - Close/dismiss\n- **check** - Confirm/success\n- **plus** - Add/create\n- **minus** - Remove/subtract\n- **delete** - Delete/trash\n- **dots-vertical** - More options (vertical)\n- **dots-horizontal** - More options (horizontal)\n\n### User & Account\n- **account** - User profile\n- **account-circle** - User avatar\n- **account-multiple** - Multiple users/team\n- **account-plus** - Add user\n- **account-minus** - Remove user\n- **account-edit** - Edit profile\n- **account-cog** - User settings\n- **login** - Login/sign in\n- **logout** - Logout/sign out\n- **account-key** - Authentication\n\n### Communication\n- **email** - Email/mail\n- **email-outline** - Email outline variant\n- **message** - Message/chat\n- **message-text** - Text message\n- **message-reply** - Reply to message\n- **phone** - Phone/call\n- **bell** - Notifications\n- **bell-outline** - Notifications outline\n- **comment** - Comment/feedback\n- **forum** - Discussion/forum\n\n### File & Document\n- **file** - Generic file\n- **file-document** - Document\n- **file-pdf** - PDF file\n- **file-image** - Image file\n- **folder** - Folder\n- **folder-open** - Open folder\n- **download** - Download\n- **upload** - Upload\n- **attachment** - Attach file\n- **cloud-upload** - Cloud upload\n- **cloud-download** - Cloud download\n\n### Media\n- **play** - Play media\n- **pause** - Pause media\n- **stop** - Stop media\n- **skip-next** - Next track\n- **skip-previous** - Previous track\n- **volume-high** - High volume\n- **volume-low** - Low volume\n- **volume-off** - Muted\n- **image** - Picture/photo\n- **camera** - Camera\n- **video** - Video\n\n### Edit & Create\n- **pencil** - Edit\n- **pencil-outline** - Edit outline\n- **content-save** - Save\n- **content-copy** - Copy\n- **content-cut** - Cut\n- **content-paste** - Paste\n- **undo** - Undo\n- **redo** - Redo\n- **format-bold** - Bold text\n- **format-italic** - Italic text\n- **format-underline** - Underline text\n\n### Status & Alerts\n- **check-circle** - Success\n- **check-circle-outline** - Success outline\n- **alert** - Warning\n- **alert-circle** - Alert circle\n- **alert-octagon** - Critical alert\n- **information** - Information\n- **information-outline** - Info outline\n- **help-circle** - Help/question\n- **close-circle** - Error\n- **clock** - Time/pending\n\n### UI Elements\n- **magnify** - Search\n- **filter** - Filter\n- **sort** - Sort\n- **tune** - Settings/adjust\n- **cog** - Settings\n- **palette** - Theme/colors\n- **eye** - View/visible\n- **eye-off** - Hidden\n- **heart** - Favorite/like\n- **heart-outline** - Like outline\n- **star** - Star/rating\n- **star-outline** - Star outline\n- **bookmark** - Bookmark\n- **bookmark-outline** - Bookmark outline\n\n### Shopping & Commerce\n- **cart** - Shopping cart\n- **cart-outline** - Cart outline\n- **cash** - Money/payment\n- **credit-card** - Credit card\n- **tag** - Tag/label\n- **sale** - Sale/discount\n- **receipt** - Receipt\n- **store** - Store/shop\n\n### Social\n- **share** - Share\n- **share-variant** - Share variant\n- **thumb-up** - Like/upvote\n- **thumb-down** - Dislike/downvote\n- **emoticon** - Emoji/mood\n- **emoticon-happy** - Happy\n- **emoticon-sad** - Sad\n\n### Location & Map\n- **map** - Map\n- **map-marker** - Location pin\n- **navigation** - Navigation\n- **compass** - Compass\n- **earth** - Globe/world\n\n### Calendar & Time\n- **calendar** - Calendar\n- **calendar-today** - Today\n- **calendar-month** - Month view\n- **clock-outline** - Clock\n- **timer** - Timer\n\n### Device & Hardware\n- **laptop** - Laptop\n- **cellphone** - Mobile phone\n- **tablet** - Tablet\n- **desktop-mac** - Desktop\n- **monitor** - Monitor\n- **printer** - Printer\n- **wifi** - WiFi\n- **bluetooth** - Bluetooth\n\n### Weather\n- **weather-sunny** - Sunny\n- **weather-cloudy** - Cloudy\n- **weather-rainy** - Rainy\n- **weather-snowy** - Snowy\n- **weather-night** - Night\n- **white-balance-sunny** - Light mode\n- **weather-night** - Dark mode\n\n## Finding Icons\n\n### Total Available Icons\n**7,447 icons** from Material Design Icons\n\n### Browse All Icons\nVisit: https://pictogrammers.com/library/mdi/\n\n### Search Patterns\nIcons follow naming patterns:\n- Base name: `home`, `account`, `file`\n- Variants: `-outline`, `-filled`, `-off`, `-plus`, `-minus`\n- Combinations: `account-plus`, `file-document-outline`\n\n### Common Suffixes\n- **-outline**: Outline version\n- **-off**: Disabled/off state\n- **-plus**: Add/create\n- **-minus**: Remove/subtract\n- **-edit**: Edit action\n- **-check**: Verified/checked\n- **-alert**: Warning state\n\n## Icon Naming Tips\n\n1. **Be Specific**: Use descriptive names\n - \u2705 `account-circle` for user avatar\n - \u274C `user` (not available)\n\n2. **Check Variants**: Try outline versions\n - `email` and `email-outline`\n - `heart` and `heart-outline`\n\n3. **Common Prefixes**:\n - `account-*`: User-related\n - `file-*`: File-related\n - `folder-*`: Folder-related\n - `arrow-*`: Arrows\n - `chevron-*`: Small arrows\n - `content-*`: Content actions\n\n4. **Use Hyphens**: Icon names use kebab-case\n - \u2705 `arrow-left`\n - \u274C `arrowLeft` or `arrow_left`\n\n## Best Practices\n\n1. **Semantic Meaning**: Choose icons that match their function\n2. **Consistency**: Use the same icon for the same action throughout the app\n3. **Size Appropriately**: Match icon size to context\n4. **Color Purposefully**: Use theme colors for semantic meaning\n5. **Accessibility**: Always provide labels/tooltips for icon-only buttons\n\n## Examples\n\n### Button Icons\n```tsx\n<Button icon=\"content-save\">Save</Button>\n<Button icon=\"delete\" intent=\"error\">Delete</Button>\n<Button icon=\"pencil\">Edit</Button>\n<Button icon=\"plus\">Add New</Button>\n```\n\n### List Icons\n```tsx\n<ListItem label=\"Dashboard\" leading=\"view-dashboard\" />\n<ListItem label=\"Users\" leading=\"account-multiple\" />\n<ListItem label=\"Settings\" leading=\"cog\" />\n<ListItem label=\"Logout\" leading=\"logout\" intent=\"error\" />\n```\n\n### Navigation Icons\n```tsx\n<Button icon=\"arrow-left\" variant=\"text\">Back</Button>\n<Button icon=\"menu\" variant=\"text\">Menu</Button>\n<Button icon=\"close\" variant=\"text\">Close</Button>\n```\n\n### Status Icons\n```tsx\n<Icon name=\"check-circle\" color=\"success\" />\n<Icon name=\"alert-circle\" color=\"warning\" />\n<Icon name=\"close-circle\" color=\"error\" />\n<Icon name=\"information-outline\" color=\"primary\" />\n```\n";
|
|
2
|
+
//# sourceMappingURL=icon-guide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-guide.d.ts","sourceRoot":"","sources":["../../src/data/icon-guide.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,8+OA2RrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-guide.js","sourceRoot":"","sources":["../../src/data/icon-guide.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2RxB,CAAC"}
|