@materi.ai/frame 1.0.0-rc.1
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.
Potentially problematic release.
This version of @materi.ai/frame might be problematic. Click here for more details.
- package/CHANGELOG.md +330 -0
- package/LICENSE +21 -0
- package/README.md +1124 -0
- package/dist/api/client.d.ts +66 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +112 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/endpoints/index.d.ts +186 -0
- package/dist/api/endpoints/index.d.ts.map +1 -0
- package/dist/api/endpoints/index.js +141 -0
- package/dist/api/endpoints/index.js.map +1 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +7 -0
- package/dist/api/index.js.map +1 -0
- package/dist/core/auth/index.d.ts +71 -0
- package/dist/core/auth/index.d.ts.map +1 -0
- package/dist/core/auth/index.js +189 -0
- package/dist/core/auth/index.js.map +1 -0
- package/dist/core/commands/index.d.ts +115 -0
- package/dist/core/commands/index.d.ts.map +1 -0
- package/dist/core/commands/index.js +321 -0
- package/dist/core/commands/index.js.map +1 -0
- package/dist/core/editors/index.d.ts +8 -0
- package/dist/core/editors/index.d.ts.map +1 -0
- package/dist/core/editors/index.js +8 -0
- package/dist/core/editors/index.js.map +1 -0
- package/dist/core/editors/presentation.d.ts +150 -0
- package/dist/core/editors/presentation.d.ts.map +1 -0
- package/dist/core/editors/presentation.js +255 -0
- package/dist/core/editors/presentation.js.map +1 -0
- package/dist/core/editors/rich-text.d.ts +93 -0
- package/dist/core/editors/rich-text.d.ts.map +1 -0
- package/dist/core/editors/rich-text.js +222 -0
- package/dist/core/editors/rich-text.js.map +1 -0
- package/dist/core/editors/spreadsheet.d.ts +108 -0
- package/dist/core/editors/spreadsheet.d.ts.map +1 -0
- package/dist/core/editors/spreadsheet.js +251 -0
- package/dist/core/editors/spreadsheet.js.map +1 -0
- package/dist/core/formula/index.d.ts +144 -0
- package/dist/core/formula/index.d.ts.map +1 -0
- package/dist/core/formula/index.js +269 -0
- package/dist/core/formula/index.js.map +1 -0
- package/dist/core/generated/index.d.ts +35 -0
- package/dist/core/generated/index.d.ts.map +1 -0
- package/dist/core/generated/index.js +41 -0
- package/dist/core/generated/index.js.map +1 -0
- package/dist/core/generated/manuscript/domains/aria/domains/aria/v1.d.ts +75 -0
- package/dist/core/generated/manuscript/domains/aria/domains/aria/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/aria/domains/aria/v1.js +304 -0
- package/dist/core/generated/manuscript/domains/aria/domains/aria/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/descriptor.d.ts +1340 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/descriptor.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/descriptor.js +2965 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/descriptor.js.map +1 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/struct.d.ts +131 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/struct.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/struct.js +308 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/struct.js.map +1 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/timestamp.d.ts +133 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/timestamp.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/timestamp.js +41 -0
- package/dist/core/generated/manuscript/domains/aria/google/protobuf/timestamp.js.map +1 -0
- package/dist/core/generated/manuscript/domains/aria/shared/v1.d.ts +132 -0
- package/dist/core/generated/manuscript/domains/aria/shared/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/aria/shared/v1.js +431 -0
- package/dist/core/generated/manuscript/domains/aria/shared/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/audit/domains/audit/v1.d.ts +56 -0
- package/dist/core/generated/manuscript/domains/audit/domains/audit/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/audit/domains/audit/v1.js +207 -0
- package/dist/core/generated/manuscript/domains/audit/domains/audit/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/descriptor.d.ts +1340 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/descriptor.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/descriptor.js +2965 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/descriptor.js.map +1 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/struct.d.ts +131 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/struct.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/struct.js +308 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/struct.js.map +1 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/timestamp.d.ts +133 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/timestamp.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/timestamp.js +41 -0
- package/dist/core/generated/manuscript/domains/audit/google/protobuf/timestamp.js.map +1 -0
- package/dist/core/generated/manuscript/domains/audit/shared/v1.d.ts +132 -0
- package/dist/core/generated/manuscript/domains/audit/shared/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/audit/shared/v1.js +431 -0
- package/dist/core/generated/manuscript/domains/audit/shared/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/collaboration/domains/collaboration/v1.d.ts +71 -0
- package/dist/core/generated/manuscript/domains/collaboration/domains/collaboration/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/collaboration/domains/collaboration/v1.js +270 -0
- package/dist/core/generated/manuscript/domains/collaboration/domains/collaboration/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/descriptor.d.ts +1340 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/descriptor.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/descriptor.js +2965 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/descriptor.js.map +1 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/struct.d.ts +131 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/struct.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/struct.js +308 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/struct.js.map +1 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/timestamp.d.ts +133 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/timestamp.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/timestamp.js +41 -0
- package/dist/core/generated/manuscript/domains/collaboration/google/protobuf/timestamp.js.map +1 -0
- package/dist/core/generated/manuscript/domains/collaboration/shared/v1.d.ts +132 -0
- package/dist/core/generated/manuscript/domains/collaboration/shared/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/collaboration/shared/v1.js +431 -0
- package/dist/core/generated/manuscript/domains/collaboration/shared/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/document/domains/document/v1.d.ts +61 -0
- package/dist/core/generated/manuscript/domains/document/domains/document/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/document/domains/document/v1.js +213 -0
- package/dist/core/generated/manuscript/domains/document/domains/document/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/descriptor.d.ts +1340 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/descriptor.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/descriptor.js +2965 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/descriptor.js.map +1 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/struct.d.ts +131 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/struct.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/struct.js +308 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/struct.js.map +1 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/timestamp.d.ts +133 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/timestamp.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/timestamp.js +41 -0
- package/dist/core/generated/manuscript/domains/document/google/protobuf/timestamp.js.map +1 -0
- package/dist/core/generated/manuscript/domains/document/shared/v1.d.ts +132 -0
- package/dist/core/generated/manuscript/domains/document/shared/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/document/shared/v1.js +431 -0
- package/dist/core/generated/manuscript/domains/document/shared/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/envelope/domains/envelope/v1.d.ts +202 -0
- package/dist/core/generated/manuscript/domains/envelope/domains/envelope/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/envelope/domains/envelope/v1.js +199 -0
- package/dist/core/generated/manuscript/domains/envelope/domains/envelope/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/descriptor.d.ts +1340 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/descriptor.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/descriptor.js +2965 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/descriptor.js.map +1 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/struct.d.ts +131 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/struct.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/struct.js +308 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/struct.js.map +1 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/timestamp.d.ts +133 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/timestamp.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/timestamp.js +41 -0
- package/dist/core/generated/manuscript/domains/envelope/google/protobuf/timestamp.js.map +1 -0
- package/dist/core/generated/manuscript/domains/envelope/shared/v1.d.ts +132 -0
- package/dist/core/generated/manuscript/domains/envelope/shared/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/envelope/shared/v1.js +431 -0
- package/dist/core/generated/manuscript/domains/envelope/shared/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/notification/domains/notification/v1.d.ts +60 -0
- package/dist/core/generated/manuscript/domains/notification/domains/notification/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/notification/domains/notification/v1.js +224 -0
- package/dist/core/generated/manuscript/domains/notification/domains/notification/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/descriptor.d.ts +1340 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/descriptor.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/descriptor.js +2965 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/descriptor.js.map +1 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/struct.d.ts +131 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/struct.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/struct.js +308 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/struct.js.map +1 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/timestamp.d.ts +133 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/timestamp.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/timestamp.js +41 -0
- package/dist/core/generated/manuscript/domains/notification/google/protobuf/timestamp.js.map +1 -0
- package/dist/core/generated/manuscript/domains/notification/shared/v1.d.ts +132 -0
- package/dist/core/generated/manuscript/domains/notification/shared/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/notification/shared/v1.js +431 -0
- package/dist/core/generated/manuscript/domains/notification/shared/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/user/domains/user/v1.d.ts +196 -0
- package/dist/core/generated/manuscript/domains/user/domains/user/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/user/domains/user/v1.js +471 -0
- package/dist/core/generated/manuscript/domains/user/domains/user/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/descriptor.d.ts +1340 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/descriptor.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/descriptor.js +2965 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/descriptor.js.map +1 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/struct.d.ts +131 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/struct.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/struct.js +308 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/struct.js.map +1 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/timestamp.d.ts +133 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/timestamp.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/timestamp.js +41 -0
- package/dist/core/generated/manuscript/domains/user/google/protobuf/timestamp.js.map +1 -0
- package/dist/core/generated/manuscript/domains/user/shared/v1.d.ts +132 -0
- package/dist/core/generated/manuscript/domains/user/shared/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/user/shared/v1.js +431 -0
- package/dist/core/generated/manuscript/domains/user/shared/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/workspace/domains/workspace/v1.d.ts +68 -0
- package/dist/core/generated/manuscript/domains/workspace/domains/workspace/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/workspace/domains/workspace/v1.js +241 -0
- package/dist/core/generated/manuscript/domains/workspace/domains/workspace/v1.js.map +1 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/descriptor.d.ts +1340 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/descriptor.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/descriptor.js +2965 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/descriptor.js.map +1 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/struct.d.ts +131 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/struct.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/struct.js +308 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/struct.js.map +1 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/timestamp.d.ts +133 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/timestamp.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/timestamp.js +41 -0
- package/dist/core/generated/manuscript/domains/workspace/google/protobuf/timestamp.js.map +1 -0
- package/dist/core/generated/manuscript/domains/workspace/shared/v1.d.ts +132 -0
- package/dist/core/generated/manuscript/domains/workspace/shared/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/domains/workspace/shared/v1.js +431 -0
- package/dist/core/generated/manuscript/domains/workspace/shared/v1.js.map +1 -0
- package/dist/core/generated/manuscript/shared/google/protobuf/descriptor.d.ts +1340 -0
- package/dist/core/generated/manuscript/shared/google/protobuf/descriptor.d.ts.map +1 -0
- package/dist/core/generated/manuscript/shared/google/protobuf/descriptor.js +2965 -0
- package/dist/core/generated/manuscript/shared/google/protobuf/descriptor.js.map +1 -0
- package/dist/core/generated/manuscript/shared/shared/v1.d.ts +132 -0
- package/dist/core/generated/manuscript/shared/shared/v1.d.ts.map +1 -0
- package/dist/core/generated/manuscript/shared/shared/v1.js +431 -0
- package/dist/core/generated/manuscript/shared/shared/v1.js.map +1 -0
- package/dist/core/generated/shared/base_event.d.ts +82 -0
- package/dist/core/generated/shared/base_event.d.ts.map +1 -0
- package/dist/core/generated/shared/base_event.js +261 -0
- package/dist/core/generated/shared/base_event.js.map +1 -0
- package/dist/core/generated/shared/collaboration_events.d.ts +226 -0
- package/dist/core/generated/shared/collaboration_events.d.ts.map +1 -0
- package/dist/core/generated/shared/collaboration_events.js +990 -0
- package/dist/core/generated/shared/collaboration_events.js.map +1 -0
- package/dist/core/generated/shared/document_events.d.ts +189 -0
- package/dist/core/generated/shared/document_events.d.ts.map +1 -0
- package/dist/core/generated/shared/document_events.js +808 -0
- package/dist/core/generated/shared/document_events.js.map +1 -0
- package/dist/core/generated/shared/google/protobuf/timestamp.d.ts +133 -0
- package/dist/core/generated/shared/google/protobuf/timestamp.d.ts.map +1 -0
- package/dist/core/generated/shared/google/protobuf/timestamp.js +41 -0
- package/dist/core/generated/shared/google/protobuf/timestamp.js.map +1 -0
- package/dist/core/generated/shared/user_events.d.ts +137 -0
- package/dist/core/generated/shared/user_events.d.ts.map +1 -0
- package/dist/core/generated/shared/user_events.js +55 -0
- package/dist/core/generated/shared/user_events.js.map +1 -0
- package/dist/core/generated/shared/workspace_events.d.ts +144 -0
- package/dist/core/generated/shared/workspace_events.d.ts.map +1 -0
- package/dist/core/generated/shared/workspace_events.js +61 -0
- package/dist/core/generated/shared/workspace_events.js.map +1 -0
- package/dist/core/index.d.ts +20 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +45 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/ot/index.d.ts +106 -0
- package/dist/core/ot/index.d.ts.map +1 -0
- package/dist/core/ot/index.js +293 -0
- package/dist/core/ot/index.js.map +1 -0
- package/dist/core/presence/index.d.ts +195 -0
- package/dist/core/presence/index.d.ts.map +1 -0
- package/dist/core/presence/index.js +364 -0
- package/dist/core/presence/index.js.map +1 -0
- package/dist/core/search/index.d.ts +103 -0
- package/dist/core/search/index.d.ts.map +1 -0
- package/dist/core/search/index.js +268 -0
- package/dist/core/search/index.js.map +1 -0
- package/dist/core/types/index.d.ts +389 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +113 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/undo/commands.d.ts +109 -0
- package/dist/core/undo/commands.d.ts.map +1 -0
- package/dist/core/undo/commands.js +219 -0
- package/dist/core/undo/commands.js.map +1 -0
- package/dist/core/undo/index.d.ts +6 -0
- package/dist/core/undo/index.d.ts.map +1 -0
- package/dist/core/undo/index.js +6 -0
- package/dist/core/undo/index.js.map +1 -0
- package/dist/core/undo/manager.d.ts +94 -0
- package/dist/core/undo/manager.d.ts.map +1 -0
- package/dist/core/undo/manager.js +215 -0
- package/dist/core/undo/manager.js.map +1 -0
- package/dist/core/websocket/index.d.ts +105 -0
- package/dist/core/websocket/index.d.ts.map +1 -0
- package/dist/core/websocket/index.js +268 -0
- package/dist/core/websocket/index.js.map +1 -0
- package/dist/hooks/api/index.d.ts +18 -0
- package/dist/hooks/api/index.d.ts.map +1 -0
- package/dist/hooks/api/index.js +11 -0
- package/dist/hooks/api/index.js.map +1 -0
- package/dist/hooks/api/types.d.ts +70 -0
- package/dist/hooks/api/types.d.ts.map +1 -0
- package/dist/hooks/api/types.js +6 -0
- package/dist/hooks/api/types.js.map +1 -0
- package/dist/hooks/api/useDocument.d.ts +16 -0
- package/dist/hooks/api/useDocument.d.ts.map +1 -0
- package/dist/hooks/api/useDocument.js +81 -0
- package/dist/hooks/api/useDocument.js.map +1 -0
- package/dist/hooks/api/useFetch.d.ts +20 -0
- package/dist/hooks/api/useFetch.d.ts.map +1 -0
- package/dist/hooks/api/useFetch.js +69 -0
- package/dist/hooks/api/useFetch.js.map +1 -0
- package/dist/hooks/api/useForm.d.ts +30 -0
- package/dist/hooks/api/useForm.d.ts.map +1 -0
- package/dist/hooks/api/useForm.js +86 -0
- package/dist/hooks/api/useForm.js.map +1 -0
- package/dist/hooks/api/usePagination.d.ts +19 -0
- package/dist/hooks/api/usePagination.d.ts.map +1 -0
- package/dist/hooks/api/usePagination.js +60 -0
- package/dist/hooks/api/usePagination.js.map +1 -0
- package/dist/hooks/api/useSearch.d.ts +23 -0
- package/dist/hooks/api/useSearch.d.ts.map +1 -0
- package/dist/hooks/api/useSearch.js +44 -0
- package/dist/hooks/api/useSearch.js.map +1 -0
- package/dist/hooks/api/useUser.d.ts +15 -0
- package/dist/hooks/api/useUser.d.ts.map +1 -0
- package/dist/hooks/api/useUser.js +64 -0
- package/dist/hooks/api/useUser.js.map +1 -0
- package/dist/hooks/aria/index.d.ts +14 -0
- package/dist/hooks/aria/index.d.ts.map +1 -0
- package/dist/hooks/aria/index.js +9 -0
- package/dist/hooks/aria/index.js.map +1 -0
- package/dist/hooks/aria/types.d.ts +41 -0
- package/dist/hooks/aria/types.d.ts.map +1 -0
- package/dist/hooks/aria/types.js +6 -0
- package/dist/hooks/aria/types.js.map +1 -0
- package/dist/hooks/aria/useAI.d.ts +17 -0
- package/dist/hooks/aria/useAI.d.ts.map +1 -0
- package/dist/hooks/aria/useAI.js +40 -0
- package/dist/hooks/aria/useAI.js.map +1 -0
- package/dist/hooks/aria/useAIAnalysis.d.ts +13 -0
- package/dist/hooks/aria/useAIAnalysis.d.ts.map +1 -0
- package/dist/hooks/aria/useAIAnalysis.js +43 -0
- package/dist/hooks/aria/useAIAnalysis.js.map +1 -0
- package/dist/hooks/aria/useAIGrading.d.ts +13 -0
- package/dist/hooks/aria/useAIGrading.d.ts.map +1 -0
- package/dist/hooks/aria/useAIGrading.js +43 -0
- package/dist/hooks/aria/useAIGrading.js.map +1 -0
- package/dist/hooks/aria/useAISuggestions.d.ts +13 -0
- package/dist/hooks/aria/useAISuggestions.d.ts.map +1 -0
- package/dist/hooks/aria/useAISuggestions.js +39 -0
- package/dist/hooks/aria/useAISuggestions.js.map +1 -0
- package/dist/hooks/constants.d.ts +29 -0
- package/dist/hooks/constants.d.ts.map +1 -0
- package/dist/hooks/constants.js +29 -0
- package/dist/hooks/constants.js.map +1 -0
- package/dist/hooks/context/index.d.ts +32 -0
- package/dist/hooks/context/index.d.ts.map +1 -0
- package/dist/hooks/context/index.js +87 -0
- package/dist/hooks/context/index.js.map +1 -0
- package/dist/hooks/errors.d.ts +27 -0
- package/dist/hooks/errors.d.ts.map +1 -0
- package/dist/hooks/errors.js +45 -0
- package/dist/hooks/errors.js.map +1 -0
- package/dist/hooks/folio/index.d.ts +16 -0
- package/dist/hooks/folio/index.d.ts.map +1 -0
- package/dist/hooks/folio/index.js +10 -0
- package/dist/hooks/folio/index.js.map +1 -0
- package/dist/hooks/folio/types.d.ts +67 -0
- package/dist/hooks/folio/types.d.ts.map +1 -0
- package/dist/hooks/folio/types.js +6 -0
- package/dist/hooks/folio/types.js.map +1 -0
- package/dist/hooks/folio/useAnomalyDetection.d.ts +14 -0
- package/dist/hooks/folio/useAnomalyDetection.d.ts.map +1 -0
- package/dist/hooks/folio/useAnomalyDetection.js +40 -0
- package/dist/hooks/folio/useAnomalyDetection.js.map +1 -0
- package/dist/hooks/folio/useErrorTracking.d.ts +13 -0
- package/dist/hooks/folio/useErrorTracking.d.ts.map +1 -0
- package/dist/hooks/folio/useErrorTracking.js +36 -0
- package/dist/hooks/folio/useErrorTracking.js.map +1 -0
- package/dist/hooks/folio/useHealthCheck.d.ts +13 -0
- package/dist/hooks/folio/useHealthCheck.d.ts.map +1 -0
- package/dist/hooks/folio/useHealthCheck.js +50 -0
- package/dist/hooks/folio/useHealthCheck.js.map +1 -0
- package/dist/hooks/folio/useMetrics.d.ts +14 -0
- package/dist/hooks/folio/useMetrics.d.ts.map +1 -0
- package/dist/hooks/folio/useMetrics.js +54 -0
- package/dist/hooks/folio/useMetrics.js.map +1 -0
- package/dist/hooks/folio/usePerformance.d.ts +16 -0
- package/dist/hooks/folio/usePerformance.d.ts.map +1 -0
- package/dist/hooks/folio/usePerformance.js +64 -0
- package/dist/hooks/folio/usePerformance.js.map +1 -0
- package/dist/hooks/index.d.ts +32 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +50 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/relay/index.d.ts +16 -0
- package/dist/hooks/relay/index.d.ts.map +1 -0
- package/dist/hooks/relay/index.js +10 -0
- package/dist/hooks/relay/index.js.map +1 -0
- package/dist/hooks/relay/types.d.ts +77 -0
- package/dist/hooks/relay/types.d.ts.map +1 -0
- package/dist/hooks/relay/types.js +6 -0
- package/dist/hooks/relay/types.js.map +1 -0
- package/dist/hooks/relay/useCollaboration.d.ts +16 -0
- package/dist/hooks/relay/useCollaboration.d.ts.map +1 -0
- package/dist/hooks/relay/useCollaboration.js +41 -0
- package/dist/hooks/relay/useCollaboration.js.map +1 -0
- package/dist/hooks/relay/useOT.d.ts +8 -0
- package/dist/hooks/relay/useOT.d.ts.map +1 -0
- package/dist/hooks/relay/useOT.js +67 -0
- package/dist/hooks/relay/useOT.js.map +1 -0
- package/dist/hooks/relay/useOTSync.d.ts +8 -0
- package/dist/hooks/relay/useOTSync.d.ts.map +1 -0
- package/dist/hooks/relay/useOTSync.js +57 -0
- package/dist/hooks/relay/useOTSync.js.map +1 -0
- package/dist/hooks/relay/usePresence.d.ts +8 -0
- package/dist/hooks/relay/usePresence.d.ts.map +1 -0
- package/dist/hooks/relay/usePresence.js +36 -0
- package/dist/hooks/relay/usePresence.js.map +1 -0
- package/dist/hooks/relay/useWebSocket.d.ts +14 -0
- package/dist/hooks/relay/useWebSocket.d.ts.map +1 -0
- package/dist/hooks/relay/useWebSocket.js +89 -0
- package/dist/hooks/relay/useWebSocket.js.map +1 -0
- package/dist/hooks/services/ApiClient.d.ts +69 -0
- package/dist/hooks/services/ApiClient.d.ts.map +1 -0
- package/dist/hooks/services/ApiClient.js +182 -0
- package/dist/hooks/services/ApiClient.js.map +1 -0
- package/dist/hooks/services/AriaClient.d.ts +51 -0
- package/dist/hooks/services/AriaClient.d.ts.map +1 -0
- package/dist/hooks/services/AriaClient.js +172 -0
- package/dist/hooks/services/AriaClient.js.map +1 -0
- package/dist/hooks/services/FolioClient.d.ts +73 -0
- package/dist/hooks/services/FolioClient.d.ts.map +1 -0
- package/dist/hooks/services/FolioClient.js +241 -0
- package/dist/hooks/services/FolioClient.js.map +1 -0
- package/dist/hooks/services/RelayClient.d.ts +50 -0
- package/dist/hooks/services/RelayClient.d.ts.map +1 -0
- package/dist/hooks/services/RelayClient.js +241 -0
- package/dist/hooks/services/RelayClient.js.map +1 -0
- package/dist/hooks/services/ShieldClient.d.ts +76 -0
- package/dist/hooks/services/ShieldClient.d.ts.map +1 -0
- package/dist/hooks/services/ShieldClient.js +267 -0
- package/dist/hooks/services/ShieldClient.js.map +1 -0
- package/dist/hooks/services/index.d.ts +10 -0
- package/dist/hooks/services/index.d.ts.map +1 -0
- package/dist/hooks/services/index.js +10 -0
- package/dist/hooks/services/index.js.map +1 -0
- package/dist/hooks/shield/index.d.ts +16 -0
- package/dist/hooks/shield/index.d.ts.map +1 -0
- package/dist/hooks/shield/index.js +10 -0
- package/dist/hooks/shield/index.js.map +1 -0
- package/dist/hooks/shield/types.d.ts +66 -0
- package/dist/hooks/shield/types.d.ts.map +1 -0
- package/dist/hooks/shield/types.js +6 -0
- package/dist/hooks/shield/types.js.map +1 -0
- package/dist/hooks/shield/useAdmin.d.ts +16 -0
- package/dist/hooks/shield/useAdmin.d.ts.map +1 -0
- package/dist/hooks/shield/useAdmin.js +35 -0
- package/dist/hooks/shield/useAdmin.js.map +1 -0
- package/dist/hooks/shield/useAuth.d.ts +16 -0
- package/dist/hooks/shield/useAuth.d.ts.map +1 -0
- package/dist/hooks/shield/useAuth.js +64 -0
- package/dist/hooks/shield/useAuth.js.map +1 -0
- package/dist/hooks/shield/useOrganization.d.ts +15 -0
- package/dist/hooks/shield/useOrganization.d.ts.map +1 -0
- package/dist/hooks/shield/useOrganization.js +64 -0
- package/dist/hooks/shield/useOrganization.js.map +1 -0
- package/dist/hooks/shield/usePermissions.d.ts +14 -0
- package/dist/hooks/shield/usePermissions.d.ts.map +1 -0
- package/dist/hooks/shield/usePermissions.js +43 -0
- package/dist/hooks/shield/usePermissions.js.map +1 -0
- package/dist/hooks/shield/useWorkspace.d.ts +15 -0
- package/dist/hooks/shield/useWorkspace.d.ts.map +1 -0
- package/dist/hooks/shield/useWorkspace.js +64 -0
- package/dist/hooks/shield/useWorkspace.js.map +1 -0
- package/dist/hooks/types.d.ts +33 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +7 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/hooks/utils/index.d.ts +20 -0
- package/dist/hooks/utils/index.d.ts.map +1 -0
- package/dist/hooks/utils/index.js +12 -0
- package/dist/hooks/utils/index.js.map +1 -0
- package/dist/hooks/utils/types.d.ts +45 -0
- package/dist/hooks/utils/types.d.ts.map +1 -0
- package/dist/hooks/utils/types.js +6 -0
- package/dist/hooks/utils/types.js.map +1 -0
- package/dist/hooks/utils/useAsync.d.ts +13 -0
- package/dist/hooks/utils/useAsync.d.ts.map +1 -0
- package/dist/hooks/utils/useAsync.js +36 -0
- package/dist/hooks/utils/useAsync.js.map +1 -0
- package/dist/hooks/utils/useCommandPalette.d.ts +8 -0
- package/dist/hooks/utils/useCommandPalette.d.ts.map +1 -0
- package/dist/hooks/utils/useCommandPalette.js +40 -0
- package/dist/hooks/utils/useCommandPalette.js.map +1 -0
- package/dist/hooks/utils/useDebounce.d.ts +8 -0
- package/dist/hooks/utils/useDebounce.d.ts.map +1 -0
- package/dist/hooks/utils/useDebounce.js +25 -0
- package/dist/hooks/utils/useDebounce.js.map +1 -0
- package/dist/hooks/utils/useLocalStorage.d.ts +12 -0
- package/dist/hooks/utils/useLocalStorage.d.ts.map +1 -0
- package/dist/hooks/utils/useLocalStorage.js +51 -0
- package/dist/hooks/utils/useLocalStorage.js.map +1 -0
- package/dist/hooks/utils/useOnClickOutside.d.ts +8 -0
- package/dist/hooks/utils/useOnClickOutside.d.ts.map +1 -0
- package/dist/hooks/utils/useOnClickOutside.js +17 -0
- package/dist/hooks/utils/useOnClickOutside.js.map +1 -0
- package/dist/hooks/utils/useThrottle.d.ts +8 -0
- package/dist/hooks/utils/useThrottle.d.ts.map +1 -0
- package/dist/hooks/utils/useThrottle.js +35 -0
- package/dist/hooks/utils/useThrottle.js.map +1 -0
- package/dist/hooks/utils/useUndoRedo.d.ts +20 -0
- package/dist/hooks/utils/useUndoRedo.d.ts.map +1 -0
- package/dist/hooks/utils/useUndoRedo.js +58 -0
- package/dist/hooks/utils/useUndoRedo.js.map +1 -0
- package/dist/hooks/utils/useWindowResize.d.ts +8 -0
- package/dist/hooks/utils/useWindowResize.d.ts.map +1 -0
- package/dist/hooks/utils/useWindowResize.js +16 -0
- package/dist/hooks/utils/useWindowResize.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/ui/index.d.ts +11 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +14 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/primitives/accordion/Accordion.d.ts +40 -0
- package/dist/ui/primitives/accordion/Accordion.d.ts.map +1 -0
- package/dist/ui/primitives/accordion/Accordion.js +47 -0
- package/dist/ui/primitives/accordion/Accordion.js.map +1 -0
- package/dist/ui/primitives/accordion/index.d.ts +3 -0
- package/dist/ui/primitives/accordion/index.d.ts.map +1 -0
- package/dist/ui/primitives/accordion/index.js +2 -0
- package/dist/ui/primitives/accordion/index.js.map +1 -0
- package/dist/ui/primitives/alert/Alert.d.ts +37 -0
- package/dist/ui/primitives/alert/Alert.d.ts.map +1 -0
- package/dist/ui/primitives/alert/Alert.js +52 -0
- package/dist/ui/primitives/alert/Alert.js.map +1 -0
- package/dist/ui/primitives/alert/index.d.ts +3 -0
- package/dist/ui/primitives/alert/index.d.ts.map +1 -0
- package/dist/ui/primitives/alert/index.js +2 -0
- package/dist/ui/primitives/alert/index.js.map +1 -0
- package/dist/ui/primitives/badge/Badge.d.ts +29 -0
- package/dist/ui/primitives/badge/Badge.d.ts.map +1 -0
- package/dist/ui/primitives/badge/Badge.js +36 -0
- package/dist/ui/primitives/badge/Badge.js.map +1 -0
- package/dist/ui/primitives/badge/index.d.ts +3 -0
- package/dist/ui/primitives/badge/index.d.ts.map +1 -0
- package/dist/ui/primitives/badge/index.js +2 -0
- package/dist/ui/primitives/badge/index.js.map +1 -0
- package/dist/ui/primitives/button/Button.d.ts +31 -0
- package/dist/ui/primitives/button/Button.d.ts.map +1 -0
- package/dist/ui/primitives/button/Button.js +26 -0
- package/dist/ui/primitives/button/Button.js.map +1 -0
- package/dist/ui/primitives/button/index.d.ts +3 -0
- package/dist/ui/primitives/button/index.d.ts.map +1 -0
- package/dist/ui/primitives/button/index.js +2 -0
- package/dist/ui/primitives/button/index.js.map +1 -0
- package/dist/ui/primitives/card/Card.d.ts +34 -0
- package/dist/ui/primitives/card/Card.d.ts.map +1 -0
- package/dist/ui/primitives/card/Card.js +28 -0
- package/dist/ui/primitives/card/Card.js.map +1 -0
- package/dist/ui/primitives/card/index.d.ts +3 -0
- package/dist/ui/primitives/card/index.d.ts.map +1 -0
- package/dist/ui/primitives/card/index.js +2 -0
- package/dist/ui/primitives/card/index.js.map +1 -0
- package/dist/ui/primitives/checkbox/Checkbox.d.ts +26 -0
- package/dist/ui/primitives/checkbox/Checkbox.d.ts.map +1 -0
- package/dist/ui/primitives/checkbox/Checkbox.js +31 -0
- package/dist/ui/primitives/checkbox/Checkbox.js.map +1 -0
- package/dist/ui/primitives/checkbox/index.d.ts +3 -0
- package/dist/ui/primitives/checkbox/index.d.ts.map +1 -0
- package/dist/ui/primitives/checkbox/index.js +2 -0
- package/dist/ui/primitives/checkbox/index.js.map +1 -0
- package/dist/ui/primitives/dialog/Dialog.d.ts +57 -0
- package/dist/ui/primitives/dialog/Dialog.d.ts.map +1 -0
- package/dist/ui/primitives/dialog/Dialog.js +60 -0
- package/dist/ui/primitives/dialog/Dialog.js.map +1 -0
- package/dist/ui/primitives/dialog/index.d.ts +3 -0
- package/dist/ui/primitives/dialog/index.d.ts.map +1 -0
- package/dist/ui/primitives/dialog/index.js +2 -0
- package/dist/ui/primitives/dialog/index.js.map +1 -0
- package/dist/ui/primitives/dropdown/Dropdown.d.ts +43 -0
- package/dist/ui/primitives/dropdown/Dropdown.d.ts.map +1 -0
- package/dist/ui/primitives/dropdown/Dropdown.js +60 -0
- package/dist/ui/primitives/dropdown/Dropdown.js.map +1 -0
- package/dist/ui/primitives/dropdown/index.d.ts +3 -0
- package/dist/ui/primitives/dropdown/index.d.ts.map +1 -0
- package/dist/ui/primitives/dropdown/index.js +2 -0
- package/dist/ui/primitives/dropdown/index.js.map +1 -0
- package/dist/ui/primitives/index.d.ts +46 -0
- package/dist/ui/primitives/index.d.ts.map +1 -0
- package/dist/ui/primitives/index.js +34 -0
- package/dist/ui/primitives/index.js.map +1 -0
- package/dist/ui/primitives/input/Input.d.ts +47 -0
- package/dist/ui/primitives/input/Input.d.ts.map +1 -0
- package/dist/ui/primitives/input/Input.js +36 -0
- package/dist/ui/primitives/input/Input.js.map +1 -0
- package/dist/ui/primitives/input/index.d.ts +3 -0
- package/dist/ui/primitives/input/index.d.ts.map +1 -0
- package/dist/ui/primitives/input/index.js +2 -0
- package/dist/ui/primitives/input/index.js.map +1 -0
- package/dist/ui/primitives/label/Label.d.ts +22 -0
- package/dist/ui/primitives/label/Label.d.ts.map +1 -0
- package/dist/ui/primitives/label/Label.js +23 -0
- package/dist/ui/primitives/label/Label.js.map +1 -0
- package/dist/ui/primitives/label/index.d.ts +3 -0
- package/dist/ui/primitives/label/index.d.ts.map +1 -0
- package/dist/ui/primitives/label/index.js +2 -0
- package/dist/ui/primitives/label/index.js.map +1 -0
- package/dist/ui/primitives/popover/Popover.d.ts +39 -0
- package/dist/ui/primitives/popover/Popover.d.ts.map +1 -0
- package/dist/ui/primitives/popover/Popover.js +53 -0
- package/dist/ui/primitives/popover/Popover.js.map +1 -0
- package/dist/ui/primitives/popover/index.d.ts +3 -0
- package/dist/ui/primitives/popover/index.d.ts.map +1 -0
- package/dist/ui/primitives/popover/index.js +2 -0
- package/dist/ui/primitives/popover/index.js.map +1 -0
- package/dist/ui/primitives/radio/Radio.d.ts +22 -0
- package/dist/ui/primitives/radio/Radio.d.ts.map +1 -0
- package/dist/ui/primitives/radio/Radio.js +24 -0
- package/dist/ui/primitives/radio/Radio.js.map +1 -0
- package/dist/ui/primitives/radio/index.d.ts +3 -0
- package/dist/ui/primitives/radio/index.d.ts.map +1 -0
- package/dist/ui/primitives/radio/index.js +2 -0
- package/dist/ui/primitives/radio/index.js.map +1 -0
- package/dist/ui/primitives/select/Select.d.ts +41 -0
- package/dist/ui/primitives/select/Select.d.ts.map +1 -0
- package/dist/ui/primitives/select/Select.js +31 -0
- package/dist/ui/primitives/select/Select.js.map +1 -0
- package/dist/ui/primitives/select/index.d.ts +3 -0
- package/dist/ui/primitives/select/index.d.ts.map +1 -0
- package/dist/ui/primitives/select/index.js +2 -0
- package/dist/ui/primitives/select/index.js.map +1 -0
- package/dist/ui/primitives/spinner/Spinner.d.ts +26 -0
- package/dist/ui/primitives/spinner/Spinner.d.ts.map +1 -0
- package/dist/ui/primitives/spinner/Spinner.js +30 -0
- package/dist/ui/primitives/spinner/Spinner.js.map +1 -0
- package/dist/ui/primitives/spinner/index.d.ts +3 -0
- package/dist/ui/primitives/spinner/index.d.ts.map +1 -0
- package/dist/ui/primitives/spinner/index.js +2 -0
- package/dist/ui/primitives/spinner/index.js.map +1 -0
- package/dist/ui/primitives/switch/Switch.d.ts +22 -0
- package/dist/ui/primitives/switch/Switch.d.ts.map +1 -0
- package/dist/ui/primitives/switch/Switch.js +27 -0
- package/dist/ui/primitives/switch/Switch.js.map +1 -0
- package/dist/ui/primitives/switch/index.d.ts +3 -0
- package/dist/ui/primitives/switch/index.d.ts.map +1 -0
- package/dist/ui/primitives/switch/index.js +2 -0
- package/dist/ui/primitives/switch/index.js.map +1 -0
- package/dist/ui/primitives/tabs/Tabs.d.ts +37 -0
- package/dist/ui/primitives/tabs/Tabs.d.ts.map +1 -0
- package/dist/ui/primitives/tabs/Tabs.js +36 -0
- package/dist/ui/primitives/tabs/Tabs.js.map +1 -0
- package/dist/ui/primitives/tabs/index.d.ts +3 -0
- package/dist/ui/primitives/tabs/index.d.ts.map +1 -0
- package/dist/ui/primitives/tabs/index.js +2 -0
- package/dist/ui/primitives/tabs/index.js.map +1 -0
- package/dist/ui/primitives/textarea/TextArea.d.ts +40 -0
- package/dist/ui/primitives/textarea/TextArea.d.ts.map +1 -0
- package/dist/ui/primitives/textarea/TextArea.js +32 -0
- package/dist/ui/primitives/textarea/TextArea.js.map +1 -0
- package/dist/ui/primitives/textarea/index.d.ts +3 -0
- package/dist/ui/primitives/textarea/index.d.ts.map +1 -0
- package/dist/ui/primitives/textarea/index.js +2 -0
- package/dist/ui/primitives/textarea/index.js.map +1 -0
- package/dist/ui/primitives/toast/Toast.d.ts +48 -0
- package/dist/ui/primitives/toast/Toast.d.ts.map +1 -0
- package/dist/ui/primitives/toast/Toast.js +87 -0
- package/dist/ui/primitives/toast/Toast.js.map +1 -0
- package/dist/ui/primitives/toast/index.d.ts +3 -0
- package/dist/ui/primitives/toast/index.d.ts.map +1 -0
- package/dist/ui/primitives/toast/index.js +2 -0
- package/dist/ui/primitives/toast/index.js.map +1 -0
- package/dist/ui/styles/index.css +193 -0
- package/dist/ui/tokens/design-tokens.d.ts +509 -0
- package/dist/ui/tokens/design-tokens.d.ts.map +1 -0
- package/dist/ui/tokens/design-tokens.js +300 -0
- package/dist/ui/tokens/design-tokens.js.map +1 -0
- package/dist/ui/tokens/index.d.ts +9 -0
- package/dist/ui/tokens/index.d.ts.map +1 -0
- package/dist/ui/tokens/index.js +12 -0
- package/dist/ui/tokens/index.js.map +1 -0
- package/package.json +212 -0
package/README.md
ADDED
|
@@ -0,0 +1,1124 @@
|
|
|
1
|
+
# `@materi.ai/frame`
|
|
2
|
+
|
|
3
|
+
**Complete collaborative document editing framework** with production-ready operational transformation, formula engine, design system, and React hooks. Embed rich document experiences into your application in minutes.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@materi.ai/frame) [](https://www.typescriptlang.org/) [](https://reactjs.org/) [](https://nodejs.org/) [](LICENSE) [](https://bundlephobia.com/package/@materi.ai/frame)
|
|
6
|
+
|
|
7
|
+
## 🎯 Overview
|
|
8
|
+
|
|
9
|
+
`@materi.ai/frame` is a monorepo containing four specialized, composable packages designed to work together seamlessly:
|
|
10
|
+
|
|
11
|
+
- **`@materi.ai/core`** — Business logic, algorithms, and types (OT, formula engine, auth, presence, WebSocket)
|
|
12
|
+
- **`@materi.ai/ui`** — Production-ready design system with tokens, primitives, and components
|
|
13
|
+
- **`@materi.ai/hooks`** — Reusable React hooks for document, collaboration, auth, and WebSocket
|
|
14
|
+
- **`@materi.ai/api`** — HTTP client layer with typed endpoint definitions
|
|
15
|
+
|
|
16
|
+
All packages are fully typed, tree-shakeable, and optimized for modern bundlers. Zero runtime dependencies (except React).
|
|
17
|
+
|
|
18
|
+
## 📖 Table of Contents
|
|
19
|
+
|
|
20
|
+
- [Installation](#-installation)
|
|
21
|
+
- [Quick Start](#-quick-start)
|
|
22
|
+
- [Documentation](#-documentation)
|
|
23
|
+
- [Tutorials](#-tutorials)
|
|
24
|
+
- [Examples](#-examples)
|
|
25
|
+
- [API Reference](#-api-reference)
|
|
26
|
+
- [Contributing](#-contributing)
|
|
27
|
+
- [License](#-license)
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 📦 Installation
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install @materi.ai/frame
|
|
35
|
+
# or
|
|
36
|
+
pnpm add @materi.ai/frame
|
|
37
|
+
# or
|
|
38
|
+
yarn add @materi.ai/frame
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Peer Dependencies
|
|
42
|
+
|
|
43
|
+
- **React**: `^19.0.0`
|
|
44
|
+
- **React DOM**: `^19.0.0`
|
|
45
|
+
|
|
46
|
+
Ensure you have React and React DOM installed in your project:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npm install react react-dom
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 🚀 Quick Start
|
|
55
|
+
|
|
56
|
+
### Basic Setup
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
import React, { useState, useEffect } from 'react';
|
|
60
|
+
import { useOT, useWebSocket } from '@materi.ai/frame/hooks';
|
|
61
|
+
import { colors, spacing } from '@materi.ai/frame/ui';
|
|
62
|
+
|
|
63
|
+
export default function DocumentEditor() {
|
|
64
|
+
const [document, setDocument] = useState({ content: '', version: 0 });
|
|
65
|
+
|
|
66
|
+
const { applyOperation, createOperation } = useOT({
|
|
67
|
+
initialDocument: document,
|
|
68
|
+
onUpdate: (newDoc) => setDocument(newDoc),
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const { connect, disconnect, isConnected, send } = useWebSocket({
|
|
72
|
+
url: 'wss://your-server.com/collaborate',
|
|
73
|
+
onMessage: (message) => {
|
|
74
|
+
if (message.type === 'operation') {
|
|
75
|
+
applyOperation(message.data);
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const handleTextChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {
|
|
81
|
+
const newContent = event.target.value;
|
|
82
|
+
const operation = createOperation(document.content, newContent);
|
|
83
|
+
|
|
84
|
+
setDocument((prev) => ({ ...prev, content: newContent, version: prev.version + 1 }));
|
|
85
|
+
|
|
86
|
+
if (isConnected) {
|
|
87
|
+
send({ type: 'operation', data: operation });
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
useEffect(() => {
|
|
92
|
+
connect();
|
|
93
|
+
return () => disconnect();
|
|
94
|
+
}, [connect, disconnect]);
|
|
95
|
+
|
|
96
|
+
return (
|
|
97
|
+
<div style={{ padding: spacing.lg }}>
|
|
98
|
+
<div style={{ color: isConnected ? colors.success : colors.warning }}>
|
|
99
|
+
{isConnected ? '🟢 Connected' : '🟡 Connecting...'}
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
<textarea
|
|
103
|
+
value={document.content}
|
|
104
|
+
onChange={handleTextChange}
|
|
105
|
+
placeholder="Start typing to collaborate..."
|
|
106
|
+
style={{
|
|
107
|
+
width: '100%',
|
|
108
|
+
height: '300px',
|
|
109
|
+
padding: spacing.md,
|
|
110
|
+
border: `1px solid ${colors.border}`,
|
|
111
|
+
borderRadius: '4px',
|
|
112
|
+
}}
|
|
113
|
+
/>
|
|
114
|
+
</div>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 📚 Documentation
|
|
122
|
+
|
|
123
|
+
`@materi.ai/frame` includes comprehensive documentation to get you from installation to production deployment:
|
|
124
|
+
|
|
125
|
+
### 🚀 Getting Started
|
|
126
|
+
|
|
127
|
+
- **[Quick Start Guide](./docs/GETTING_STARTED_COMPREHENSIVE.md)** — Complete 15-minute setup tutorial with working examples
|
|
128
|
+
- **[Installation & Setup](./docs/GETTING_STARTED_COMPREHENSIVE.md#installation)** — Package installation and bundler configuration
|
|
129
|
+
- **[Performance Optimization](./docs/GETTING_STARTED_COMPREHENSIVE.md#performance-optimization)** — Bundle size optimization and tree-shaking guide
|
|
130
|
+
|
|
131
|
+
### 📖 Tutorials
|
|
132
|
+
|
|
133
|
+
**Progressive learning path from beginner to advanced:**
|
|
134
|
+
|
|
135
|
+
- **[Tutorial Index](./docs/tutorials/README.md)** — Complete tutorial series overview
|
|
136
|
+
|
|
137
|
+
#### Beginner Level (🟢)
|
|
138
|
+
|
|
139
|
+
1. **[Building Your First Document Editor](./docs/tutorials/01-document-editor.md)** — 45-minute collaborative text editor tutorial with operational transformation
|
|
140
|
+
2. **[Adding Formula Support](./docs/tutorials/02-formula-engine.md)** — Integrating spreadsheet calculations and formula evaluation
|
|
141
|
+
3. **[UI Components Guide](./docs/tutorials/03-ui-components.md)** — Design system usage and theming patterns
|
|
142
|
+
|
|
143
|
+
#### Intermediate Level (🟡)
|
|
144
|
+
|
|
145
|
+
4. **[Real-time Collaboration](./docs/tutorials/04-collaboration.md)** — Multi-user editing with presence indicators
|
|
146
|
+
5. **[Authentication Flow](./docs/tutorials/05-auth-flow.md)** — User management and security integration
|
|
147
|
+
6. **[API Integration](./docs/tutorials/06-api-integration.md)** — Backend connectivity and data synchronization
|
|
148
|
+
|
|
149
|
+
#### Advanced Level (🔴)
|
|
150
|
+
|
|
151
|
+
7. **[Performance Optimization](./docs/tutorials/07-performance.md)** — Bundle optimization and production deployment
|
|
152
|
+
8. **[Custom Components](./docs/tutorials/08-custom-components.md)** — Extending the design system
|
|
153
|
+
9. **[Production Deployment](./docs/tutorials/09-deployment.md)** — Scalable deployment strategies and monitoring
|
|
154
|
+
|
|
155
|
+
### 💡 Examples
|
|
156
|
+
|
|
157
|
+
**Real-world application examples with complete source code:**
|
|
158
|
+
|
|
159
|
+
- **[Examples Overview](./examples/README.md)** — Gallery of example applications
|
|
160
|
+
- **[Collaborative Editor](./examples/collaborative-editor/README.md)** — Complete collaborative text editor with WebSocket integration
|
|
161
|
+
- **[Spreadsheet Calculator](./examples/spreadsheet-calculator/README.md)** — Formula engine demonstration with live calculations
|
|
162
|
+
- **[Component Showcase](./examples/component-showcase/README.md)** — Interactive gallery of all UI components
|
|
163
|
+
|
|
164
|
+
### 📋 API Reference
|
|
165
|
+
|
|
166
|
+
**Comprehensive API documentation:**
|
|
167
|
+
|
|
168
|
+
- **[TypeDoc API Reference](./docs/api/README.md)** — Auto-generated API documentation from TypeScript source
|
|
169
|
+
- **[Core Package API](./docs/api/modules/core.md)** — Operational transformation, formula engine, auth, WebSocket
|
|
170
|
+
- **[UI Package API](./docs/api/modules/ui.md)** — Design system components, tokens, and themes
|
|
171
|
+
- **[Hooks Package API](./docs/api/modules/hooks.md)** — React hooks for collaboration and data management
|
|
172
|
+
- **[API Package Reference](./docs/api/modules/api.md)** — HTTP client and endpoint definitions
|
|
173
|
+
|
|
174
|
+
### 🛠️ Development
|
|
175
|
+
|
|
176
|
+
**Contributing and development guides:**
|
|
177
|
+
|
|
178
|
+
- **[Contributing Guidelines](./CONTRIBUTING.md)** — Complete development setup and contribution workflow
|
|
179
|
+
- **[Code Standards](./CONTRIBUTING.md#code-standards)** — TypeScript, React, and CSS guidelines
|
|
180
|
+
- **[Testing Requirements](./CONTRIBUTING.md#testing)** — Unit, integration, and E2E testing guidelines
|
|
181
|
+
- **[CI/CD Setup](./docs/CI-CD-SETUP.md)** — Automated testing, building, and deployment pipeline
|
|
182
|
+
|
|
183
|
+
### 🌐 Documentation Site
|
|
184
|
+
|
|
185
|
+
**Professional documentation site with search and navigation:**
|
|
186
|
+
|
|
187
|
+
- **[Documentation Homepage](./docs/index.md)** — Complete documentation portal with organized navigation
|
|
188
|
+
- **[Site Setup Guide](./docs/DOCUMENTATION_SITE.md)** — Deploy your own documentation site
|
|
189
|
+
- **Search functionality** — Full-text search across all documentation
|
|
190
|
+
- **Mobile responsive** — Optimized for all devices and screen sizes
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### 🧩 Individual Packages
|
|
195
|
+
|
|
196
|
+
Import specific packages directly:
|
|
197
|
+
|
|
198
|
+
```tsx
|
|
199
|
+
// Core algorithms and types
|
|
200
|
+
import { EventPriority, BaseEvents } from '@materi.ai/frame/core';
|
|
201
|
+
import { applyOp, transform } from '@materi.ai/frame/core/ot';
|
|
202
|
+
import { evaluate } from '@materi.ai/frame/core/formula';
|
|
203
|
+
|
|
204
|
+
// Design system tokens and primitives
|
|
205
|
+
import { colors, spacing, typography } from '@materi.ai/frame/ui';
|
|
206
|
+
import { Button, Card, Dialog } from '@materi.ai/frame/ui/primitives';
|
|
207
|
+
|
|
208
|
+
// React hooks (organized by service)
|
|
209
|
+
import { useAuth, useWorkspace } from '@materi.ai/frame/hooks'; // Shield service
|
|
210
|
+
import { useDocument, useSearch } from '@materi.ai/frame/hooks'; // API service
|
|
211
|
+
import { useOT, useWebSocket } from '@materi.ai/frame/hooks'; // Relay service
|
|
212
|
+
|
|
213
|
+
// HTTP client and endpoints
|
|
214
|
+
import { createHTTPClient, apiClient } from '@materi.ai/frame/api';
|
|
215
|
+
import { userAPI, documentAPI } from '@materi.ai/frame/api';
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 📚 Packages
|
|
221
|
+
|
|
222
|
+
### `@materi.ai/core`
|
|
223
|
+
|
|
224
|
+
Core business logic including:
|
|
225
|
+
|
|
226
|
+
- **OT Algorithms** (`/ot`) — Operational transformation for real-time collaboration
|
|
227
|
+
- **Formula Engine** (`/formula`) — Parse, evaluate, and transform spreadsheet formulas
|
|
228
|
+
- **Type System** (`/types`) — Shared TypeScript type definitions
|
|
229
|
+
- **Auth** (`/auth`) — Authentication and permission models
|
|
230
|
+
- **WebSocket** (`/websocket`) — Real-time connection management
|
|
231
|
+
- **Presence** (`/presence`) — User presence and cursor tracking
|
|
232
|
+
- **Undo/Redo** (`/undo`) — Command-based undo/redo manager
|
|
233
|
+
- **Search** (`/search`) — Full-text search infrastructure
|
|
234
|
+
|
|
235
|
+
#### Usage
|
|
236
|
+
|
|
237
|
+
```tsx
|
|
238
|
+
import { OTEngine, applyOp, transform } from '@materi.ai/core/ot';
|
|
239
|
+
import { parseFormula, evaluateFormula } from '@materi.ai/core/formula';
|
|
240
|
+
import { createAuthContext } from '@materi.ai/core/auth';
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### `@materi.ai/ui`
|
|
244
|
+
|
|
245
|
+
Production-ready design system:
|
|
246
|
+
|
|
247
|
+
- **Tokens** — Color, typography, spacing, shadows, borders
|
|
248
|
+
- **Primitives** — Accessible, unstyled base components (Button, Input, Dialog, Select, etc.)
|
|
249
|
+
- **Components** — Materi-branded higher-level components
|
|
250
|
+
- **Themes** — Light/dark mode support with semantic tokens
|
|
251
|
+
- **Styles** — Global CSS with resets and utilities
|
|
252
|
+
|
|
253
|
+
#### Usage
|
|
254
|
+
|
|
255
|
+
```tsx
|
|
256
|
+
import { Button, Input, Tabs, Dialog } from '@materi.ai/frame/ui';
|
|
257
|
+
import { tokens } from '@materi.ai/frame/ui/tokens';
|
|
258
|
+
import { useTheme } from '@materi.ai/frame/ui/themes';
|
|
259
|
+
import '@materi.ai/frame/ui/styles.css';
|
|
260
|
+
|
|
261
|
+
// Access tokens programmatically
|
|
262
|
+
const { colors, spacing, typography } = tokens;
|
|
263
|
+
|
|
264
|
+
// Use theme hook for dynamic theming
|
|
265
|
+
const { theme, setTheme } = useTheme();
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### `@materi.ai/hooks`
|
|
269
|
+
|
|
270
|
+
Reusable React hooks for collaborative features:
|
|
271
|
+
|
|
272
|
+
- **`useOT()`** — Manage operational transformation state and operations
|
|
273
|
+
- **`useWebSocket()`** — Connect to WebSocket server, handle messages
|
|
274
|
+
- **`useAuth()`** — Authentication state and user session
|
|
275
|
+
- **`useFetch()`** — Type-safe HTTP requests with caching
|
|
276
|
+
- **`useCommandPalette()`** — Command palette UI state
|
|
277
|
+
- **`useUndoRedo()`** — Undo/redo command management
|
|
278
|
+
- **`useLocalStorage()`** — Persistent local state
|
|
279
|
+
- **`useForm()`** — Form state and validation
|
|
280
|
+
- **`usePerformance()`** — Performance monitoring and profiling
|
|
281
|
+
|
|
282
|
+
#### Usage
|
|
283
|
+
|
|
284
|
+
```tsx
|
|
285
|
+
import { useOT, useWebSocket, useAuth } from '@materi.ai/frame/hooks';
|
|
286
|
+
|
|
287
|
+
export function MyComponent() {
|
|
288
|
+
const { state, applyOp } = useOT();
|
|
289
|
+
const { connect, isConnected, send } = useWebSocket();
|
|
290
|
+
const { user, logout } = useAuth();
|
|
291
|
+
|
|
292
|
+
// Your component logic
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### `@materi.ai/api`
|
|
297
|
+
|
|
298
|
+
Typed HTTP client and endpoint definitions:
|
|
299
|
+
|
|
300
|
+
- **Client** — Lightweight HTTP client with interceptors
|
|
301
|
+
- **Endpoints** — Pre-defined API routes with TypeScript inference
|
|
302
|
+
- **Result** — Type-safe result handling (success/error)
|
|
303
|
+
|
|
304
|
+
#### Usage
|
|
305
|
+
|
|
306
|
+
```tsx
|
|
307
|
+
import { createClient } from '@materi.ai/frame/api';
|
|
308
|
+
import { endpoints } from '@materi.ai/frame/api/endpoints';
|
|
309
|
+
|
|
310
|
+
const client = createClient({
|
|
311
|
+
baseURL: 'https://api.example.com',
|
|
312
|
+
headers: {
|
|
313
|
+
Authorization: `Bearer ${token}`,
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
// Type-safe calls
|
|
318
|
+
const result = await client.get(endpoints.documents.list());
|
|
319
|
+
if (result.ok) {
|
|
320
|
+
console.log(result.data);
|
|
321
|
+
} else {
|
|
322
|
+
console.error(result.error);
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## 🏗️ Architecture Highlights
|
|
329
|
+
|
|
330
|
+
### Monorepo Structure
|
|
331
|
+
|
|
332
|
+
```
|
|
333
|
+
frame/
|
|
334
|
+
├── core/ # Business logic, algorithms, types
|
|
335
|
+
├── ui/ # Design system, components
|
|
336
|
+
├── hooks/ # React hooks
|
|
337
|
+
├── api/ # HTTP client
|
|
338
|
+
├── package.json # Root workspace config
|
|
339
|
+
└── turbo.json # Build orchestration
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### Build Strategy
|
|
343
|
+
|
|
344
|
+
- **TypeScript Compilation** — Each package compiles to CommonJS + ESM
|
|
345
|
+
- **Turbo Caching** — Fast, cached builds across the monorepo
|
|
346
|
+
- **Zero Runtime Dependencies** — Only React as peer dependency
|
|
347
|
+
- **Tree Shakeable** — Unused code is eliminated by bundlers
|
|
348
|
+
- **Distributed Types** — Full `.d.ts` generation for IDE support
|
|
349
|
+
|
|
350
|
+
### Publishing
|
|
351
|
+
|
|
352
|
+
- **NPM Package** — Published as `@materi.ai/frame`
|
|
353
|
+
- **Subpath Exports** — Import packages as `@materi.ai/frame/core`, `@materi.ai/frame/ui`, etc.
|
|
354
|
+
- **Source Maps** — Full source map support for debugging
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## 🛠️ Development
|
|
359
|
+
|
|
360
|
+
### Setup
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
# Install dependencies
|
|
364
|
+
pnpm install
|
|
365
|
+
|
|
366
|
+
# Build all packages
|
|
367
|
+
pnpm build
|
|
368
|
+
|
|
369
|
+
# Build a specific package
|
|
370
|
+
pnpm build:core
|
|
371
|
+
pnpm build:ui
|
|
372
|
+
pnpm build:hooks
|
|
373
|
+
pnpm build:api
|
|
374
|
+
|
|
375
|
+
# Type check
|
|
376
|
+
pnpm type-check
|
|
377
|
+
|
|
378
|
+
# Run tests
|
|
379
|
+
pnpm test
|
|
380
|
+
pnpm test:watch
|
|
381
|
+
pnpm test:coverage
|
|
382
|
+
|
|
383
|
+
# Lint
|
|
384
|
+
pnpm lint
|
|
385
|
+
|
|
386
|
+
# Format
|
|
387
|
+
pnpm format
|
|
388
|
+
|
|
389
|
+
# Clean build artifacts
|
|
390
|
+
pnpm clean
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Development Workflow
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
# Watch all packages (from frame directory)
|
|
397
|
+
pnpm build:watch
|
|
398
|
+
|
|
399
|
+
# Run tests in watch mode
|
|
400
|
+
pnpm test:watch
|
|
401
|
+
|
|
402
|
+
# Type check continuously
|
|
403
|
+
pnpm type-check
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Testing
|
|
407
|
+
|
|
408
|
+
Each package includes a `__tests__/` directory with Vitest specs:
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
# Run all tests
|
|
412
|
+
pnpm test
|
|
413
|
+
|
|
414
|
+
# Run tests for a specific package
|
|
415
|
+
pnpm -F @materi.ai/core test
|
|
416
|
+
|
|
417
|
+
# Generate coverage report
|
|
418
|
+
pnpm test:coverage
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## 📖 API Documentation
|
|
424
|
+
|
|
425
|
+
### Core Types
|
|
426
|
+
|
|
427
|
+
All packages export comprehensive TypeScript types. For IDE autocomplete, ensure your `tsconfig.json` includes:
|
|
428
|
+
|
|
429
|
+
```json
|
|
430
|
+
{
|
|
431
|
+
"compilerOptions": {
|
|
432
|
+
"strict": true,
|
|
433
|
+
"skipLibCheck": true,
|
|
434
|
+
"declaration": true
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### Package Exports
|
|
440
|
+
|
|
441
|
+
#### `@materi.ai/frame` (Main Entry)
|
|
442
|
+
|
|
443
|
+
```tsx
|
|
444
|
+
import {} from /* all named exports from all subpackages */ '@materi.ai/frame';
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
#### `@materi.ai/frame/core`
|
|
448
|
+
|
|
449
|
+
```tsx
|
|
450
|
+
import {
|
|
451
|
+
OTEngine,
|
|
452
|
+
FormulaEngine,
|
|
453
|
+
createAuthContext,
|
|
454
|
+
WebSocketManager,
|
|
455
|
+
// ... and more
|
|
456
|
+
} from '@materi.ai/frame/core';
|
|
457
|
+
|
|
458
|
+
// Subpackage imports
|
|
459
|
+
import { applyOp, transform } from '@materi.ai/frame/core/ot';
|
|
460
|
+
import { parseFormula, evaluateFormula } from '@materi.ai/frame/core/formula';
|
|
461
|
+
import { types, interfaces } from '@materi.ai/frame/core/types';
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
#### `@materi.ai/frame/ui`
|
|
465
|
+
|
|
466
|
+
```tsx
|
|
467
|
+
import {
|
|
468
|
+
Button,
|
|
469
|
+
Input,
|
|
470
|
+
Dialog,
|
|
471
|
+
Tabs,
|
|
472
|
+
// ... primitives and components
|
|
473
|
+
} from '@materi.ai/frame/ui';
|
|
474
|
+
|
|
475
|
+
import { tokens } from '@materi.ai/frame/ui/tokens';
|
|
476
|
+
import { useTheme } from '@materi.ai/frame/ui/themes';
|
|
477
|
+
import '@materi.ai/frame/ui/styles.css';
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
#### `@materi.ai/frame/hooks`
|
|
481
|
+
|
|
482
|
+
```tsx
|
|
483
|
+
import {
|
|
484
|
+
useOT,
|
|
485
|
+
useWebSocket,
|
|
486
|
+
useAuth,
|
|
487
|
+
useFetch,
|
|
488
|
+
useCommandPalette,
|
|
489
|
+
useUndoRedo,
|
|
490
|
+
// ... and more
|
|
491
|
+
} from '@materi.ai/frame/hooks';
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
#### `@materi.ai/frame/api`
|
|
495
|
+
|
|
496
|
+
```tsx
|
|
497
|
+
import { createClient } from '@materi.ai/frame/api';
|
|
498
|
+
import { endpoints } from '@materi.ai/frame/api/endpoints';
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
## 🎨 Design System Features
|
|
504
|
+
|
|
505
|
+
### Tokens
|
|
506
|
+
|
|
507
|
+
Comprehensive design tokens for:
|
|
508
|
+
|
|
509
|
+
- **Colors** — Semantic and raw color palette
|
|
510
|
+
- **Typography** — Font families, sizes, weights, line heights
|
|
511
|
+
- **Spacing** — Consistent spacing scale
|
|
512
|
+
- **Shadows** — Elevation system
|
|
513
|
+
- **Borders** — Radius and border styles
|
|
514
|
+
- **Transitions** — Animation timing functions
|
|
515
|
+
|
|
516
|
+
### Components
|
|
517
|
+
|
|
518
|
+
All components are:
|
|
519
|
+
|
|
520
|
+
- ✅ **Accessible** — ARIA attributes, keyboard navigation
|
|
521
|
+
- ✅ **Unstyled** — Compose with Tailwind, CSS-in-JS, or vanilla CSS
|
|
522
|
+
- ✅ **Controlled & Uncontrolled** — Both patterns supported
|
|
523
|
+
- ✅ **Tested** — Comprehensive test coverage
|
|
524
|
+
- ✅ **Type Safe** — Full TypeScript support
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
## 🔐 Security Considerations
|
|
529
|
+
|
|
530
|
+
- All packages are built with strict TypeScript (`strict: true`)
|
|
531
|
+
- No eval() or dynamic code execution
|
|
532
|
+
- Sanitized formula parsing (no injection vectors)
|
|
533
|
+
- CSRF protection in API client
|
|
534
|
+
- WebSocket message validation
|
|
535
|
+
|
|
536
|
+
---
|
|
537
|
+
|
|
538
|
+
## 📊 Performance
|
|
539
|
+
|
|
540
|
+
- **Zero Runtime Dependencies** — Minimal bundle size
|
|
541
|
+
- **Tree Shakeable** — Only bundle what you use
|
|
542
|
+
- **Code Splitting** — Subpath exports enable granular loading
|
|
543
|
+
- **Lazy Loading** — Component and hook patterns support code splitting
|
|
544
|
+
- **Caching** — Built-in HTTP caching strategies
|
|
545
|
+
|
|
546
|
+
### Bundle Size Estimates
|
|
547
|
+
|
|
548
|
+
| Package | Gzipped |
|
|
549
|
+
| --------------- | ----------- |
|
|
550
|
+
| `@materi.ai/core` | ~45 KB |
|
|
551
|
+
| `@materi.ai/ui` | ~35 KB |
|
|
552
|
+
| `@materi.ai/hooks` | ~12 KB |
|
|
553
|
+
| `@materi.ai/api` | ~8 KB |
|
|
554
|
+
| **Total** | **~100 KB** |
|
|
555
|
+
|
|
556
|
+
---
|
|
557
|
+
|
|
558
|
+
## 📋 API Reference
|
|
559
|
+
|
|
560
|
+
**Complete TypeDoc API Documentation:**
|
|
561
|
+
|
|
562
|
+
- **[TypeDoc API Reference](./docs/api/)** — Auto-generated API documentation with search and cross-references
|
|
563
|
+
- **[Getting Started](./docs/GETTING_STARTED_COMPREHENSIVE.md)** — Complete setup guide with examples
|
|
564
|
+
- **[Tutorials](./docs/tutorials/README.md)** — Step-by-step learning path from beginner to advanced
|
|
565
|
+
- **[Examples](./examples/README.md)** — Working example applications with full source code
|
|
566
|
+
|
|
567
|
+
### Package-Specific Documentation
|
|
568
|
+
|
|
569
|
+
- **[Core Package](./docs/api/modules/core.md)** — Operational transformation, formula engine, auth, WebSocket management
|
|
570
|
+
- **[UI Package](./docs/api/modules/ui.md)** — Design system components, tokens, themes, and styling
|
|
571
|
+
- **[Hooks Package](./docs/api/modules/hooks.md)** — React hooks for collaboration, authentication, and data management
|
|
572
|
+
- **[API Package](./docs/api/modules/api.md)** — HTTP client, endpoint definitions, and request management
|
|
573
|
+
|
|
574
|
+
### Quick Reference
|
|
575
|
+
|
|
576
|
+
```typescript
|
|
577
|
+
// Core types and algorithms
|
|
578
|
+
import { BaseEvents, EventPriority } from '@materi.ai/frame/core';
|
|
579
|
+
import { applyOp, transform } from '@materi.ai/frame/core/ot';
|
|
580
|
+
import { evaluate } from '@materi.ai/frame/core/formula';
|
|
581
|
+
|
|
582
|
+
// UI components and tokens
|
|
583
|
+
import { colors, spacing } from '@materi.ai/frame/ui';
|
|
584
|
+
import { Button, Card } from '@materi.ai/frame/ui/primitives';
|
|
585
|
+
|
|
586
|
+
// React hooks by service
|
|
587
|
+
import { useAuth, useWorkspace } from '@materi.ai/frame/hooks'; // Shield
|
|
588
|
+
import { useDocument, useSearch } from '@materi.ai/frame/hooks'; // API
|
|
589
|
+
import { useOT, useWebSocket } from '@materi.ai/frame/hooks'; // Relay
|
|
590
|
+
|
|
591
|
+
// HTTP client
|
|
592
|
+
import { createHTTPClient, userAPI } from '@materi.ai/frame/api';
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
---
|
|
596
|
+
|
|
597
|
+
## � Examples
|
|
598
|
+
|
|
599
|
+
`@materi.ai/frame` includes comprehensive example applications and tutorials for every skill level:
|
|
600
|
+
|
|
601
|
+
### 🚀 Complete Example Applications
|
|
602
|
+
|
|
603
|
+
**Real-world applications with full source code:**
|
|
604
|
+
|
|
605
|
+
- **[Collaborative Editor](./examples/collaborative-editor/README.md)** — Complete multi-user text editor
|
|
606
|
+
- Real-time operational transformation
|
|
607
|
+
- WebSocket integration with presence indicators
|
|
608
|
+
- Undo/redo with conflict resolution
|
|
609
|
+
- Production-ready server-side OT logic
|
|
610
|
+
|
|
611
|
+
- **[Spreadsheet Calculator](./examples/spreadsheet-calculator/README.md)** — Interactive spreadsheet
|
|
612
|
+
- Formula engine with 50+ functions
|
|
613
|
+
- Cell dependencies and live recalculation
|
|
614
|
+
- Import/export with Excel compatibility
|
|
615
|
+
- Performance optimization for large datasets
|
|
616
|
+
|
|
617
|
+
- **[Component Showcase](./examples/component-showcase/README.md)** — Interactive UI gallery
|
|
618
|
+
- All design system components
|
|
619
|
+
- Live playground and customization
|
|
620
|
+
- Theme switching and dark mode
|
|
621
|
+
- Accessibility testing tools
|
|
622
|
+
|
|
623
|
+
### 📚 Step-by-Step Tutorials
|
|
624
|
+
|
|
625
|
+
**Progressive learning path with difficulty levels:**
|
|
626
|
+
|
|
627
|
+
#### Beginner (🟢) — 30-45 minutes each
|
|
628
|
+
|
|
629
|
+
- **[Document Editor Tutorial](./docs/tutorials/01-document-editor.md)** — Build your first collaborative editor
|
|
630
|
+
- **[Formula Engine Guide](./docs/tutorials/02-formula-engine.md)** — Add calculation capabilities
|
|
631
|
+
- **[UI Components](./docs/tutorials/03-ui-components.md)** — Master the design system
|
|
632
|
+
|
|
633
|
+
#### Intermediate (🟡) — 45-60 minutes each
|
|
634
|
+
|
|
635
|
+
- **[Real-time Collaboration](./docs/tutorials/04-collaboration.md)** — Multi-user editing with presence
|
|
636
|
+
- **[Authentication Integration](./docs/tutorials/05-auth-flow.md)** — User management and security
|
|
637
|
+
- **[Backend API Integration](./docs/tutorials/06-api-integration.md)** — Connect to your services
|
|
638
|
+
|
|
639
|
+
#### Advanced (🔴) — 60-90 minutes each
|
|
640
|
+
|
|
641
|
+
- **[Performance Optimization](./docs/tutorials/07-performance.md)** — Bundle size and runtime optimization
|
|
642
|
+
- **[Custom Components](./docs/tutorials/08-custom-components.md)** — Extend the design system
|
|
643
|
+
- **[Production Deployment](./docs/tutorials/09-deployment.md)** — Scalable deployment strategies
|
|
644
|
+
|
|
645
|
+
### 🏃♂️ Quick Code Examples
|
|
646
|
+
|
|
647
|
+
#### Operational Transformation
|
|
648
|
+
|
|
649
|
+
```typescript
|
|
650
|
+
import { applyOp, transform } from '@materi.ai/frame/core/ot';
|
|
651
|
+
|
|
652
|
+
// Apply operation to document content
|
|
653
|
+
const content = 'Hello world';
|
|
654
|
+
const operation = { type: 'insert', position: 5, text: ' beautiful' };
|
|
655
|
+
const result = applyOp(content, operation);
|
|
656
|
+
console.log(result); // "Hello beautiful world"
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
#### Formula Engine
|
|
660
|
+
|
|
661
|
+
```typescript
|
|
662
|
+
import { evaluate } from '@materi.ai/frame/core/formula';
|
|
663
|
+
|
|
664
|
+
// Spreadsheet-style calculations
|
|
665
|
+
const result = evaluate('SUM(A1:A10) + AVERAGE(B1:B5)', {
|
|
666
|
+
A1: 10,
|
|
667
|
+
A2: 20,
|
|
668
|
+
A3: 30 /* ... more cells */,
|
|
669
|
+
B1: 5,
|
|
670
|
+
B2: 15,
|
|
671
|
+
B3: 25,
|
|
672
|
+
B4: 35,
|
|
673
|
+
B5: 45,
|
|
674
|
+
});
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
#### React Hooks Integration
|
|
678
|
+
|
|
679
|
+
```typescript
|
|
680
|
+
import { useOT, useWebSocket } from '@materi.ai/frame/hooks';
|
|
681
|
+
|
|
682
|
+
function CollaborativeEditor() {
|
|
683
|
+
const { document, applyOperation } = useOT({
|
|
684
|
+
initialDocument: { content: '', version: 0 },
|
|
685
|
+
});
|
|
686
|
+
|
|
687
|
+
const { send, isConnected } = useWebSocket({
|
|
688
|
+
url: 'wss://your-server.com/collaborate',
|
|
689
|
+
onMessage: (msg) => {
|
|
690
|
+
if (msg.type === 'operation') {
|
|
691
|
+
applyOperation(msg.data);
|
|
692
|
+
}
|
|
693
|
+
},
|
|
694
|
+
});
|
|
695
|
+
|
|
696
|
+
// Real-time collaboration ready!
|
|
697
|
+
}
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
#### Design System Usage
|
|
701
|
+
|
|
702
|
+
```typescript
|
|
703
|
+
import { Button, Card, Dialog } from '@materi.ai/frame/ui';
|
|
704
|
+
import { colors, spacing } from '@materi.ai/frame/ui/tokens';
|
|
705
|
+
|
|
706
|
+
function UserInterface() {
|
|
707
|
+
return (
|
|
708
|
+
<Card padding="lg" style={{ margin: spacing.md }}>
|
|
709
|
+
<Button
|
|
710
|
+
variant="primary"
|
|
711
|
+
onClick={() => console.log('Interactive!')}
|
|
712
|
+
>
|
|
713
|
+
Click me
|
|
714
|
+
</Button>
|
|
715
|
+
</Card>
|
|
716
|
+
);
|
|
717
|
+
}
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
### 📱 Live Demos
|
|
721
|
+
|
|
722
|
+
**Try the examples online:**
|
|
723
|
+
|
|
724
|
+
- **[Collaborative Editor Demo](https://materi-frame-editor.vercel.app)** — Multi-user editing in your browser
|
|
725
|
+
- **[Component Playground](https://materi-frame-components.vercel.app)** — Interactive design system showcase
|
|
726
|
+
- **[Formula Calculator](https://materi-frame-formulas.vercel.app)** — Spreadsheet engine demonstration
|
|
727
|
+
|
|
728
|
+
**Getting Started:**
|
|
729
|
+
|
|
730
|
+
1. Choose an example that matches your needs
|
|
731
|
+
2. Follow the step-by-step README instructions
|
|
732
|
+
3. Copy and adapt the code for your project
|
|
733
|
+
4. Check the tutorials for deeper understanding
|
|
734
|
+
|
|
735
|
+
---
|
|
736
|
+
|
|
737
|
+
---
|
|
738
|
+
|
|
739
|
+
## 📚 Tutorials
|
|
740
|
+
|
|
741
|
+
**Step-by-step learning path from beginner to production deployment:**
|
|
742
|
+
|
|
743
|
+
### 🎯 Tutorial Series Overview
|
|
744
|
+
|
|
745
|
+
Our comprehensive tutorial series takes you from basic setup to advanced production patterns. Each tutorial builds on previous knowledge and includes:
|
|
746
|
+
|
|
747
|
+
- **Complete working code** — Copy-paste ready examples
|
|
748
|
+
- **Step-by-step explanations** — Understand every line
|
|
749
|
+
- **Best practices** — Production-ready patterns
|
|
750
|
+
- **Troubleshooting guides** — Common issues and solutions
|
|
751
|
+
|
|
752
|
+
**Time Investment:** 6-8 hours total (can be completed over several sessions)
|
|
753
|
+
**Prerequisites:** Basic React and TypeScript knowledge
|
|
754
|
+
|
|
755
|
+
### 🟢 Beginner Level (Start Here)
|
|
756
|
+
|
|
757
|
+
#### [Tutorial 1: Building Your First Document Editor](./docs/tutorials/01-document-editor.md)
|
|
758
|
+
|
|
759
|
+
**Duration:** 45 minutes | **Difficulty:** Easy
|
|
760
|
+
|
|
761
|
+
Build a complete collaborative text editor with operational transformation:
|
|
762
|
+
|
|
763
|
+
```typescript
|
|
764
|
+
// What you'll build
|
|
765
|
+
function DocumentEditor() {
|
|
766
|
+
const { content, applyOperation, undo, redo } = useDocument();
|
|
767
|
+
const { send, isConnected } = useWebSocket('ws://localhost:8080');
|
|
768
|
+
|
|
769
|
+
return (
|
|
770
|
+
<div>
|
|
771
|
+
<Toolbar onUndo={undo} onRedo={redo} connected={isConnected} />
|
|
772
|
+
<Editor content={content} onChange={applyOperation} />
|
|
773
|
+
</div>
|
|
774
|
+
);
|
|
775
|
+
}
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
**You'll learn:** OT basics, hooks usage, real-time updates, undo/redo
|
|
779
|
+
|
|
780
|
+
#### [Tutorial 2: Adding Formula Support](./docs/tutorials/02-formula-engine.md)
|
|
781
|
+
|
|
782
|
+
**Duration:** 35 minutes | **Difficulty:** Easy-Medium
|
|
783
|
+
|
|
784
|
+
Integrate spreadsheet-style calculations into your editor:
|
|
785
|
+
|
|
786
|
+
```typescript
|
|
787
|
+
// Add formula evaluation to cells
|
|
788
|
+
const cellValue = evaluate('=SUM(A1:A10) + AVERAGE(B1:B5)', cellData);
|
|
789
|
+
const dependencies = getDependencies('=A1*B1+C1'); // ['A1', 'B1', 'C1']
|
|
790
|
+
```
|
|
791
|
+
|
|
792
|
+
**You'll learn:** Formula parsing, dependency tracking, live recalculation
|
|
793
|
+
|
|
794
|
+
#### [Tutorial 3: UI Components & Theming](./docs/tutorials/03-ui-components.md)
|
|
795
|
+
|
|
796
|
+
**Duration:** 30 minutes | **Difficulty:** Easy
|
|
797
|
+
|
|
798
|
+
Master the design system and create beautiful interfaces:
|
|
799
|
+
|
|
800
|
+
```typescript
|
|
801
|
+
// Professional UI in minutes
|
|
802
|
+
<Card padding="lg" shadow="md">
|
|
803
|
+
<Button variant="primary" size="md" onClick={handleSave}>
|
|
804
|
+
Save Document
|
|
805
|
+
</Button>
|
|
806
|
+
<Button variant="secondary" size="md" onClick={handleCancel}>
|
|
807
|
+
Cancel
|
|
808
|
+
</Button>
|
|
809
|
+
</Card>
|
|
810
|
+
```
|
|
811
|
+
|
|
812
|
+
**You'll learn:** Design tokens, component composition, theming, accessibility
|
|
813
|
+
|
|
814
|
+
### 🟡 Intermediate Level
|
|
815
|
+
|
|
816
|
+
#### [Tutorial 4: Real-time Collaboration](./docs/tutorials/04-collaboration.md)
|
|
817
|
+
|
|
818
|
+
**Duration:** 60 minutes | **Difficulty:** Medium
|
|
819
|
+
|
|
820
|
+
Add multi-user editing with presence indicators:
|
|
821
|
+
|
|
822
|
+
```typescript
|
|
823
|
+
// Multi-user collaboration
|
|
824
|
+
const { users, cursors } = usePresence();
|
|
825
|
+
const { document, applyRemoteOp } = useOT({
|
|
826
|
+
onRemoteOperation: (op) => broadcastToUsers(op),
|
|
827
|
+
onConflict: (local, remote) => transform(local, remote),
|
|
828
|
+
});
|
|
829
|
+
```
|
|
830
|
+
|
|
831
|
+
**You'll learn:** Presence tracking, conflict resolution, cursor synchronization
|
|
832
|
+
|
|
833
|
+
#### [Tutorial 5: Authentication & Security](./docs/tutorials/05-auth-flow.md)
|
|
834
|
+
|
|
835
|
+
**Duration:** 45 minutes | **Difficulty:** Medium
|
|
836
|
+
|
|
837
|
+
Secure your application with authentication:
|
|
838
|
+
|
|
839
|
+
```typescript
|
|
840
|
+
// Complete auth flow
|
|
841
|
+
const { user, login, logout, permissions } = useAuth();
|
|
842
|
+
const { documents } = useWorkspace(user.workspaceId);
|
|
843
|
+
|
|
844
|
+
// Permission-based UI
|
|
845
|
+
{permissions.canEdit && <EditButton />}
|
|
846
|
+
```
|
|
847
|
+
|
|
848
|
+
**You'll learn:** JWT tokens, permission systems, secure WebSocket connections
|
|
849
|
+
|
|
850
|
+
#### [Tutorial 6: Backend Integration](./docs/tutorials/06-api-integration.md)
|
|
851
|
+
|
|
852
|
+
**Duration:** 50 minutes | **Difficulty:** Medium
|
|
853
|
+
|
|
854
|
+
Connect to your backend services:
|
|
855
|
+
|
|
856
|
+
```typescript
|
|
857
|
+
// Typed API integration
|
|
858
|
+
const { data, loading, error } = useFetch('/api/documents', {
|
|
859
|
+
params: { userId: user.id },
|
|
860
|
+
cache: '5m',
|
|
861
|
+
});
|
|
862
|
+
|
|
863
|
+
const { mutate } = useAPI(documentAPI.updateDocument);
|
|
864
|
+
```
|
|
865
|
+
|
|
866
|
+
**You'll learn:** HTTP client usage, caching strategies, error handling
|
|
867
|
+
|
|
868
|
+
### 🔴 Advanced Level
|
|
869
|
+
|
|
870
|
+
#### [Tutorial 7: Performance Optimization](./docs/tutorials/07-performance.md)
|
|
871
|
+
|
|
872
|
+
**Duration:** 75 minutes | **Difficulty:** Hard
|
|
873
|
+
|
|
874
|
+
Optimize for production performance:
|
|
875
|
+
|
|
876
|
+
```typescript
|
|
877
|
+
// Bundle size optimization
|
|
878
|
+
import { applyOp } from '@materi.ai/frame/core/ot'; // ✅ 2KB
|
|
879
|
+
import { Button } from '@materi.ai/frame/ui/primitives'; // ✅ 5KB
|
|
880
|
+
|
|
881
|
+
// Runtime optimization
|
|
882
|
+
const MemoizedEditor = memo(Editor);
|
|
883
|
+
const { content, loading } = useSuspenseDocument(documentId);
|
|
884
|
+
```
|
|
885
|
+
|
|
886
|
+
**You'll learn:** Tree-shaking, code splitting, runtime optimization, monitoring
|
|
887
|
+
|
|
888
|
+
#### [Tutorial 8: Custom Components](./docs/tutorials/08-custom-components.md)
|
|
889
|
+
|
|
890
|
+
**Duration:** 60 minutes | **Difficulty:** Hard
|
|
891
|
+
|
|
892
|
+
Extend the design system with custom components:
|
|
893
|
+
|
|
894
|
+
```typescript
|
|
895
|
+
// Create custom components that integrate seamlessly
|
|
896
|
+
const CustomToolbar = forwardRef<HTMLDivElement, ToolbarProps>(
|
|
897
|
+
({ variant, children, ...props }, ref) => {
|
|
898
|
+
const { colors, spacing } = useTokens();
|
|
899
|
+
return (
|
|
900
|
+
<div ref={ref} className="custom-toolbar" {...props}>
|
|
901
|
+
{children}
|
|
902
|
+
</div>
|
|
903
|
+
);
|
|
904
|
+
}
|
|
905
|
+
);
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
**You'll learn:** Design system extension, accessibility patterns, TypeScript integration
|
|
909
|
+
|
|
910
|
+
#### [Tutorial 9: Production Deployment](./docs/tutorials/09-deployment.md)
|
|
911
|
+
|
|
912
|
+
**Duration:** 90 minutes | **Difficulty:** Hard
|
|
913
|
+
|
|
914
|
+
Deploy scalable, production-ready applications:
|
|
915
|
+
|
|
916
|
+
```bash
|
|
917
|
+
# Production deployment pipeline
|
|
918
|
+
pnpm build # Optimized build
|
|
919
|
+
pnpm test:e2e # End-to-end tests
|
|
920
|
+
docker build -t app . # Container packaging
|
|
921
|
+
kubectl apply -f k8s/ # Kubernetes deployment
|
|
922
|
+
```
|
|
923
|
+
|
|
924
|
+
**You'll learn:** CI/CD pipelines, monitoring, scaling, error tracking
|
|
925
|
+
|
|
926
|
+
### 🎓 Tutorial Completion
|
|
927
|
+
|
|
928
|
+
**After completing all tutorials, you'll be able to:**
|
|
929
|
+
|
|
930
|
+
- ✅ Build production-ready collaborative applications
|
|
931
|
+
- ✅ Implement real-time editing with operational transformation
|
|
932
|
+
- ✅ Create beautiful, accessible user interfaces
|
|
933
|
+
- ✅ Integrate authentication and authorization
|
|
934
|
+
- ✅ Optimize performance and bundle sizes
|
|
935
|
+
- ✅ Deploy scalable applications to production
|
|
936
|
+
- ✅ Extend and customize the framework
|
|
937
|
+
|
|
938
|
+
**Next Steps:**
|
|
939
|
+
|
|
940
|
+
- Browse [Example Applications](./examples/README.md) for advanced patterns
|
|
941
|
+
- Check [API Reference](./docs/api/README.md) for detailed documentation
|
|
942
|
+
- Join our community and contribute back!
|
|
943
|
+
|
|
944
|
+
---
|
|
945
|
+
|
|
946
|
+
## 🔧 Troubleshooting
|
|
947
|
+
|
|
948
|
+
### Installation Issues
|
|
949
|
+
|
|
950
|
+
**"Cannot find module '@materi.ai/frame'"**
|
|
951
|
+
|
|
952
|
+
```bash
|
|
953
|
+
# Ensure package is installed
|
|
954
|
+
npm install @materi.ai/frame
|
|
955
|
+
|
|
956
|
+
# Clear cache if needed
|
|
957
|
+
npm cache clean --force
|
|
958
|
+
rm -rf node_modules package-lock.json
|
|
959
|
+
npm install
|
|
960
|
+
```
|
|
961
|
+
|
|
962
|
+
**TypeScript import errors**
|
|
963
|
+
|
|
964
|
+
Ensure `moduleResolution` is set correctly:
|
|
965
|
+
|
|
966
|
+
```json
|
|
967
|
+
{
|
|
968
|
+
"compilerOptions": {
|
|
969
|
+
"moduleResolution": "bundler", // or "node16"
|
|
970
|
+
"allowSyntheticDefaultImports": true,
|
|
971
|
+
"esModuleInterop": true
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
```
|
|
975
|
+
|
|
976
|
+
### Runtime Issues
|
|
977
|
+
|
|
978
|
+
**"React hooks error"**
|
|
979
|
+
|
|
980
|
+
Ensure React 19+ is installed:
|
|
981
|
+
|
|
982
|
+
```bash
|
|
983
|
+
npm install react@^19.0.0 react-dom@^19.0.0
|
|
984
|
+
```
|
|
985
|
+
|
|
986
|
+
**"WebSocket connection failed"**
|
|
987
|
+
|
|
988
|
+
1. Check server is running: `curl -I http://your-server.com`
|
|
989
|
+
2. Verify WebSocket endpoint: `wscat -c wss://your-server.com/ws`
|
|
990
|
+
3. Check CORS headers for cross-origin requests
|
|
991
|
+
4. Verify network/proxy settings allow WebSocket upgrades
|
|
992
|
+
|
|
993
|
+
**"Operation transform conflicts"**
|
|
994
|
+
|
|
995
|
+
- Ensure all clients use same document version
|
|
996
|
+
- Check operation ordering (use vector clocks)
|
|
997
|
+
- Verify server properly sequences operations
|
|
998
|
+
|
|
999
|
+
### Development Issues
|
|
1000
|
+
|
|
1001
|
+
**Bundle size too large**
|
|
1002
|
+
|
|
1003
|
+
```typescript
|
|
1004
|
+
// Import only what you need
|
|
1005
|
+
import { colors } from '@materi.ai/frame/ui'; // ✅ Specific import
|
|
1006
|
+
import * as ui from '@materi.ai/frame/ui'; // ❌ Imports everything
|
|
1007
|
+
|
|
1008
|
+
// Use individual package imports for better tree-shaking
|
|
1009
|
+
import { useAuth } from '@materi.ai/frame/hooks'; // ✅ Tree-shakeable
|
|
1010
|
+
```
|
|
1011
|
+
|
|
1012
|
+
**Slow TypeScript compilation**
|
|
1013
|
+
|
|
1014
|
+
```json
|
|
1015
|
+
{
|
|
1016
|
+
"compilerOptions": {
|
|
1017
|
+
"incremental": true,
|
|
1018
|
+
"composite": true
|
|
1019
|
+
},
|
|
1020
|
+
"include": ["src/**/*"],
|
|
1021
|
+
"exclude": ["node_modules", "dist"]
|
|
1022
|
+
}
|
|
1023
|
+
```
|
|
1024
|
+
|
|
1025
|
+
### Getting Help
|
|
1026
|
+
|
|
1027
|
+
1. **Check the examples**: [`./examples/`](./examples/)
|
|
1028
|
+
2. **Read the API docs**: [`./docs/API.md`](./docs/API.md)
|
|
1029
|
+
3. **Search issues**: [GitHub Issues](https://github.com/materi-ai/frame/issues)
|
|
1030
|
+
4. **Create an issue**: Include version, error message, and minimal reproduction
|
|
1031
|
+
|
|
1032
|
+
**Debugging checklist:**
|
|
1033
|
+
|
|
1034
|
+
- ☐ Latest version of `@materi.ai/frame`?
|
|
1035
|
+
- ☐ React 19+ installed?
|
|
1036
|
+
- ☐ TypeScript 5.6+ (if using TypeScript)?
|
|
1037
|
+
- ☐ Node.js 18+?
|
|
1038
|
+
- ☐ Modern bundler (Vite 5+, Webpack 5+)?
|
|
1039
|
+
|
|
1040
|
+
---
|
|
1041
|
+
|
|
1042
|
+
## � Migration Guide
|
|
1043
|
+
|
|
1044
|
+
Upgrading from internal packages or older versions?
|
|
1045
|
+
|
|
1046
|
+
**[Migration Guide](./docs/MIGRATION.md)** — Step-by-step migration instructions
|
|
1047
|
+
|
|
1048
|
+
Key changes:
|
|
1049
|
+
|
|
1050
|
+
- Single package install: `npm install @materi.ai/frame`
|
|
1051
|
+
- Subpath exports: `@materi.ai/frame/core`, `@materi.ai/frame/ui`
|
|
1052
|
+
- Improved hook organization by service (Shield, API, Relay)
|
|
1053
|
+
- `Result<T>` return types for better error handling
|
|
1054
|
+
|
|
1055
|
+
---
|
|
1056
|
+
|
|
1057
|
+
## 📄 Documentation
|
|
1058
|
+
|
|
1059
|
+
- **[Getting Started](./docs/GETTING_STARTED.md)** — Complete tutorial with working examples
|
|
1060
|
+
- **[API Reference](./docs/API.md)** — Full documentation of all exports
|
|
1061
|
+
- **[Migration Guide](./docs/MIGRATION.md)** — Upgrade from internal packages
|
|
1062
|
+
- **[Examples](./examples/)** — Copy-paste code samples
|
|
1063
|
+
- **[CHANGELOG](./CHANGELOG.md)** — Release notes and version history
|
|
1064
|
+
|
|
1065
|
+
---
|
|
1066
|
+
|
|
1067
|
+
## 👥 Contributing
|
|
1068
|
+
|
|
1069
|
+
We welcome contributions! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
|
|
1070
|
+
|
|
1071
|
+
**Quick start for contributors:**
|
|
1072
|
+
|
|
1073
|
+
```bash
|
|
1074
|
+
# Clone and install
|
|
1075
|
+
git clone https://github.com/materi-ai/frame.git
|
|
1076
|
+
cd frame
|
|
1077
|
+
pnpm install
|
|
1078
|
+
|
|
1079
|
+
# Run tests
|
|
1080
|
+
pnpm test
|
|
1081
|
+
|
|
1082
|
+
# Build packages
|
|
1083
|
+
pnpm build
|
|
1084
|
+
```
|
|
1085
|
+
|
|
1086
|
+
---
|
|
1087
|
+
|
|
1088
|
+
MIT © Materi
|
|
1089
|
+
|
|
1090
|
+
---
|
|
1091
|
+
|
|
1092
|
+
## 🤝 Contributing
|
|
1093
|
+
|
|
1094
|
+
Contributions are welcome! Please ensure:
|
|
1095
|
+
|
|
1096
|
+
1. All tests pass: `pnpm test`
|
|
1097
|
+
2. Code is formatted: `pnpm format`
|
|
1098
|
+
3. Types are correct: `pnpm type-check`
|
|
1099
|
+
4. Linter passes: `pnpm lint`
|
|
1100
|
+
|
|
1101
|
+
---
|
|
1102
|
+
|
|
1103
|
+
## 📚 Resources
|
|
1104
|
+
|
|
1105
|
+
- [React Documentation](https://react.dev)
|
|
1106
|
+
- [TypeScript Handbook](https://www.typescriptlang.org/docs/)
|
|
1107
|
+
- [Operational Transformation](https://en.wikipedia.org/wiki/Operational_transformation)
|
|
1108
|
+
- [Accessible Rich Internet Applications (ARIA)](https://www.w3.org/WAI/ARIA/apg/)
|
|
1109
|
+
|
|
1110
|
+
---
|
|
1111
|
+
|
|
1112
|
+
## 🎯 Roadmap
|
|
1113
|
+
|
|
1114
|
+
- [ ] Official storybook components gallery
|
|
1115
|
+
- [ ] GraphQL client integration
|
|
1116
|
+
- [ ] Offline-first synchronization
|
|
1117
|
+
- [ ] Advanced formula functions (financial, statistical)
|
|
1118
|
+
- [ ] Rich text editor with collaborative cursors
|
|
1119
|
+
- [ ] E2E encryption support
|
|
1120
|
+
- [ ] Performance monitoring dashboard
|
|
1121
|
+
|
|
1122
|
+
---
|
|
1123
|
+
|
|
1124
|
+
**Built with ❤️ by Materi Engineering**
|