├── .earthlyignore ├── .github ├── pull_request_template.md └── workflows │ ├── deploy_production.yml │ ├── deploy_staging.yml │ ├── deployment.yml │ ├── main.yml │ ├── release.yml │ └── release_plz.yml ├── .gitignore ├── .vscode ├── extensions.json ├── launch.json ├── recommendations.json ├── settings.json ├── tasks.json └── tsdoc.yml ├── CHANGELOG.md ├── CNAME ├── CONTRIBUTING.md ├── Cargo.lock ├── Cargo.toml ├── Cross.toml ├── Earthfile ├── LICENSE ├── README.md ├── _config.yml ├── browser ├── .earthlyignore ├── .eslintrc.cjs ├── .gitignore ├── .prettierignore ├── .prettierrc.json ├── CHANGELOG.md ├── CONTRIBUTING.md ├── DOCS.MD ├── Earthfile ├── LICENSE ├── README.md ├── cli │ ├── .gitignore │ ├── package.json │ ├── readme.md │ ├── src │ │ ├── DatatypeToTSTypeMap.ts │ │ ├── PropertyRecord.ts │ │ ├── commands │ │ │ ├── init.ts │ │ │ └── ontologies.ts │ │ ├── config.ts │ │ ├── generateBaseObject.ts │ │ ├── generateClassExports.ts │ │ ├── generateClasses.ts │ │ ├── generateExternals.ts │ │ ├── generateIndex.ts │ │ ├── generateOntology.ts │ │ ├── generatePropTypeMapping.ts │ │ ├── generateSubjectToNameMapping.ts │ │ ├── index.ts │ │ ├── store.ts │ │ ├── usage.ts │ │ ├── utils.ts │ │ └── validateOntologies.ts │ └── tsconfig.json ├── create-template │ ├── .gitignore │ ├── package.json │ ├── readme.md │ ├── src │ │ ├── buildEndUsageString.ts │ │ ├── copyTemplate.ts │ │ ├── createOutputFolder.ts │ │ ├── index.ts │ │ ├── packageManager.ts │ │ ├── postprocess.ts │ │ ├── templates.ts │ │ └── utils.ts │ ├── templates │ │ ├── nextjs-site │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── atomic.config.json │ │ │ ├── eslint.config.mjs │ │ │ ├── next.config.mjs │ │ │ ├── package.json │ │ │ ├── pnpm-lock.yaml │ │ │ ├── src │ │ │ │ ├── app │ │ │ │ │ ├── [[...slug]] │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── context │ │ │ │ │ │ └── CurrentSubjectProvider.tsx │ │ │ │ │ ├── globals.css │ │ │ │ │ ├── layout.module.css │ │ │ │ │ └── layout.tsx │ │ │ │ ├── atomic │ │ │ │ │ ├── getAllBlogposts.ts │ │ │ │ │ └── getCurrentResource.ts │ │ │ │ ├── components │ │ │ │ │ ├── Footer.module.css │ │ │ │ │ ├── Footer.tsx │ │ │ │ │ ├── Icons │ │ │ │ │ │ └── magnifying-glass-solid.svg │ │ │ │ │ ├── Image.tsx │ │ │ │ │ ├── Layout │ │ │ │ │ │ ├── Container.module.css │ │ │ │ │ │ ├── Container.tsx │ │ │ │ │ │ ├── HStack.tsx │ │ │ │ │ │ ├── Stack.module.css │ │ │ │ │ │ └── VStack.tsx │ │ │ │ │ ├── MarkdownContent.tsx │ │ │ │ │ ├── Navbar.module.css │ │ │ │ │ ├── Navbar.tsx │ │ │ │ │ ├── NoSSR.tsx │ │ │ │ │ ├── ProviderWrapper.tsx │ │ │ │ │ ├── Searchbar.module.css │ │ │ │ │ └── Searchbar.tsx │ │ │ │ ├── env.ts │ │ │ │ ├── hooks.ts │ │ │ │ ├── instrumentation.ts │ │ │ │ ├── store.ts │ │ │ │ └── views │ │ │ │ │ ├── Block │ │ │ │ │ ├── BlockView.tsx │ │ │ │ │ ├── ImageGalleryBlock.module.css │ │ │ │ │ ├── ImageGalleryBlock.tsx │ │ │ │ │ ├── TextBlock.module.css │ │ │ │ │ └── TextBlock.tsx │ │ │ │ │ ├── DefaultView.tsx │ │ │ │ │ ├── FullPage │ │ │ │ │ ├── BlogIndexPageFullPage.module.css │ │ │ │ │ ├── BlogIndexPageFullPage.tsx │ │ │ │ │ ├── BlogpostFullPage.module.css │ │ │ │ │ ├── BlogpostFullPage.tsx │ │ │ │ │ ├── DefaultFullPage.tsx │ │ │ │ │ ├── FullPageView.tsx │ │ │ │ │ └── PageFullPage.tsx │ │ │ │ │ ├── ListItem │ │ │ │ │ ├── BlogListItem.module.css │ │ │ │ │ ├── BlogListItem.tsx │ │ │ │ │ └── ListItemView.tsx │ │ │ │ │ └── MenuItem │ │ │ │ │ ├── MenuItem.module.css │ │ │ │ │ ├── MenuItem.tsx │ │ │ │ │ ├── MenuItemLink.module.css │ │ │ │ │ └── MenuItemLink.tsx │ │ │ └── tsconfig.json │ │ └── sveltekit-site │ │ │ ├── .gitignore │ │ │ ├── .npmrc │ │ │ ├── .prettierignore │ │ │ ├── .prettierrc │ │ │ ├── README.md │ │ │ ├── atomic.config.json │ │ │ ├── eslint.config.js │ │ │ ├── package.json │ │ │ ├── src │ │ │ ├── app.d.ts │ │ │ ├── app.html │ │ │ ├── index.test.ts │ │ │ ├── lib │ │ │ │ ├── atomic │ │ │ │ │ ├── getAllBlogposts.ts │ │ │ │ │ ├── getCurrentResource.ts │ │ │ │ │ ├── getStore.ts │ │ │ │ │ └── preloadResources.ts │ │ │ │ ├── components │ │ │ │ │ ├── Footer.svelte │ │ │ │ │ ├── Icons │ │ │ │ │ │ └── FaMagnifyingGlass.svelte │ │ │ │ │ ├── Layout │ │ │ │ │ │ ├── Container.svelte │ │ │ │ │ │ ├── HStack.svelte │ │ │ │ │ │ └── VStack.svelte │ │ │ │ │ ├── Navbar.svelte │ │ │ │ │ ├── Searchbar.svelte │ │ │ │ │ └── SiteWrapper.svelte │ │ │ │ ├── index.ts │ │ │ │ ├── stores │ │ │ │ │ └── appstate.svelte.ts │ │ │ │ ├── utils.ts │ │ │ │ └── views │ │ │ │ │ ├── Block │ │ │ │ │ ├── BlockView.svelte │ │ │ │ │ ├── ImageGalleryBlock.svelte │ │ │ │ │ └── TextBlock.svelte │ │ │ │ │ ├── DefaultView.svelte │ │ │ │ │ ├── FullPage │ │ │ │ │ ├── BlogIndexPageFullPage.svelte │ │ │ │ │ ├── BlogpostFullPage.svelte │ │ │ │ │ ├── DefaultFullPage.svelte │ │ │ │ │ ├── FullPageView.svelte │ │ │ │ │ └── PageFullPage.svelte │ │ │ │ │ ├── ListItem │ │ │ │ │ ├── BlogListItem.svelte │ │ │ │ │ └── ListItemView.svelte │ │ │ │ │ └── MenuItem │ │ │ │ │ ├── MenuItem.svelte │ │ │ │ │ └── MenuItemLink.svelte │ │ │ ├── routes │ │ │ │ ├── +layout.svelte │ │ │ │ ├── +layout.ts │ │ │ │ ├── +page.svelte │ │ │ │ ├── +page.ts │ │ │ │ └── [...path] │ │ │ │ │ ├── +error.svelte │ │ │ │ │ ├── +page.svelte │ │ │ │ │ └── +page.ts │ │ │ └── styles │ │ │ │ └── reset.css │ │ │ ├── static │ │ │ └── favicon.png │ │ │ ├── svelte.config.js │ │ │ ├── tsconfig.json │ │ │ └── vite.config.ts │ └── tsconfig.json ├── data-browser │ ├── README.md │ ├── about.md │ ├── index.html │ ├── logo.svg │ ├── package.json │ ├── public │ │ ├── _config.yml │ │ ├── app_data │ │ │ └── images │ │ │ │ ├── android-chrome-192x192.png │ │ │ │ ├── android-chrome-512x512.png │ │ │ │ ├── apple-touch-icon.png │ │ │ │ ├── default_social_preview.jpg │ │ │ │ ├── favicon-16x16.png │ │ │ │ ├── favicon-32x32.png │ │ │ │ ├── favicon.ico │ │ │ │ ├── icon.png │ │ │ │ ├── mask-icon.svg │ │ │ │ ├── maskable_icon.png │ │ │ │ ├── maskable_icon_x128.png │ │ │ │ ├── maskable_icon_x192.png │ │ │ │ ├── maskable_icon_x384.png │ │ │ │ ├── maskable_icon_x512.png │ │ │ │ ├── mstile-144x144.png │ │ │ │ ├── mstile-150x150.png │ │ │ │ ├── mstile-310x150.png │ │ │ │ ├── mstile-310x310.png │ │ │ │ └── mstile-70x70.png │ │ ├── browserconfig.xml │ │ └── robots.txt │ ├── src │ │ ├── App.tsx │ │ ├── Providers.tsx │ │ ├── chunks │ │ │ ├── CurrencyPicker │ │ │ │ ├── CurrencyPicker.tsx │ │ │ │ ├── currencies.ts │ │ │ │ └── processCurrencyFile.ts │ │ │ ├── EmojiInput │ │ │ │ └── EmojiInput.tsx │ │ │ ├── GraphViewer │ │ │ │ ├── FloatingEdge.tsx │ │ │ │ ├── OntologyGraph.tsx │ │ │ │ ├── buildGraph.ts │ │ │ │ ├── getEdgeParams.ts │ │ │ │ ├── reactFlowOverrides.css │ │ │ │ └── useGraph.ts │ │ │ ├── HighlightedCode │ │ │ │ └── HighlightedCodeBlock.tsx │ │ │ ├── MarkdownEditor │ │ │ │ ├── AsyncMarkdownEditor.tsx │ │ │ │ ├── BubbleMenu.tsx │ │ │ │ ├── EditLinkForm.tsx │ │ │ │ ├── EditorEvents.tsx │ │ │ │ ├── ImagePicker.tsx │ │ │ │ ├── NodeSelectMenu.tsx │ │ │ │ ├── SlashMenu │ │ │ │ │ ├── CommandList.tsx │ │ │ │ │ └── CommandsExtension.ts │ │ │ │ ├── TiptapContext.tsx │ │ │ │ └── ToggleButton.tsx │ │ │ └── PDFViewer │ │ │ │ └── index.tsx │ │ ├── components │ │ │ ├── AllProps.tsx │ │ │ ├── AllPropsSimple.tsx │ │ │ ├── AtomicLink.tsx │ │ │ ├── BetaBadge.tsx │ │ │ ├── Button.tsx │ │ │ ├── ButtonGroup.tsx │ │ │ ├── ButtonLink.tsx │ │ │ ├── Card.tsx │ │ │ ├── ClassDetail.tsx │ │ │ ├── ClassSelectorDialog.tsx │ │ │ ├── CodeBlock.tsx │ │ │ ├── Collapse.tsx │ │ │ ├── CommitDetail.tsx │ │ │ ├── ConfirmationDialog.tsx │ │ │ ├── Containers.tsx │ │ │ ├── Detail.tsx │ │ │ ├── Details.tsx │ │ │ ├── Dialog │ │ │ │ ├── DialogGlobalContextProvider.tsx │ │ │ │ ├── dialogContext.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── useDialog.tsx │ │ │ │ └── waitForActiveDocument.ts │ │ │ ├── Dropdown │ │ │ │ ├── DefaultTrigger.tsx │ │ │ │ ├── DropdownContainer.tsx │ │ │ │ ├── DropdownTrigger.ts │ │ │ │ ├── dropdownContext.ts │ │ │ │ └── index.tsx │ │ │ ├── EditableTitle.tsx │ │ │ ├── ErrorLook.tsx │ │ │ ├── ExternalLink.tsx │ │ │ ├── FilePill.tsx │ │ │ ├── Gutter.tsx │ │ │ ├── HighlightedCodeBlock.tsx │ │ │ ├── HotKeyWrapper.tsx │ │ │ ├── IconButton │ │ │ │ └── IconButton.tsx │ │ │ ├── ImageViewer.tsx │ │ │ ├── InlineFormattedResourceList.tsx │ │ │ ├── InviteForm.tsx │ │ │ ├── Loader.tsx │ │ │ ├── Logo.tsx │ │ │ ├── Main.tsx │ │ │ ├── MetaSetter.tsx │ │ │ ├── NavBarSpacer.tsx │ │ │ ├── NavState.tsx │ │ │ ├── NavStyleButton.tsx │ │ │ ├── Navigation.tsx │ │ │ ├── NetworkIndicator.tsx │ │ │ ├── NewCard.tsx │ │ │ ├── NewInstanceButton │ │ │ │ ├── Base.tsx │ │ │ │ ├── NewInstanceButton.tsx │ │ │ │ └── index.ts │ │ │ ├── OutlinedSection.tsx │ │ │ ├── PalettePicker.tsx │ │ │ ├── Parent.tsx │ │ │ ├── ParentPicker │ │ │ │ ├── ParentPicker.tsx │ │ │ │ ├── ParentPickerDialog.tsx │ │ │ │ └── ParentPickerItem.tsx │ │ │ ├── Popover.tsx │ │ │ ├── ProgressBar.tsx │ │ │ ├── PropVal.tsx │ │ │ ├── ResourceContextMenu │ │ │ │ ├── MenuBarDropdownTrigger.tsx │ │ │ │ └── index.tsx │ │ │ ├── ResourceUsage │ │ │ │ ├── ChildrenUsage.tsx │ │ │ │ ├── ClassUsage.tsx │ │ │ │ ├── PropertyUsage.tsx │ │ │ │ ├── ReferenceUsage.tsx │ │ │ │ ├── ResourceUsage.tsx │ │ │ │ ├── UsageCard.tsx │ │ │ │ ├── UsageRow.tsx │ │ │ │ └── index.tsx │ │ │ ├── Row.tsx │ │ │ ├── ScrollArea.tsx │ │ │ ├── Searchbar │ │ │ │ ├── Searchbar.tsx │ │ │ │ ├── SearchbarInput.tsx │ │ │ │ ├── TagSuggestionOverlay.tsx │ │ │ │ └── searchbarUtils.ts │ │ │ ├── Shortcut.tsx │ │ │ ├── SideBar │ │ │ │ ├── About.tsx │ │ │ │ ├── AppMenu.tsx │ │ │ │ ├── DriveSwitcher.tsx │ │ │ │ ├── OntologySideBar │ │ │ │ │ └── OntologiesPanel.tsx │ │ │ │ ├── OverlapSpacer.tsx │ │ │ │ ├── ResourceSideBar │ │ │ │ │ ├── DropEdge.tsx │ │ │ │ │ ├── FloatingActions.tsx │ │ │ │ │ ├── ResourceSideBar.tsx │ │ │ │ │ ├── SidebarItemTitle.tsx │ │ │ │ │ └── shared.ts │ │ │ │ ├── SideBarDrive.tsx │ │ │ │ ├── SideBarHeader.ts │ │ │ │ ├── SideBarItem.ts │ │ │ │ ├── SideBarMenuItem.tsx │ │ │ │ ├── SideBarPanel.tsx │ │ │ │ ├── SidebarCSSVars.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── usePanelList.ts │ │ │ │ └── useSidebarDnd.ts │ │ │ ├── SignInButton.tsx │ │ │ ├── SkeletonButton.tsx │ │ │ ├── SkipNav.tsx │ │ │ ├── Slot.tsx │ │ │ ├── Spinner.tsx │ │ │ ├── Table.tsx │ │ │ ├── TableEditor │ │ │ │ ├── ActiveCellIndicator.tsx │ │ │ │ ├── Cell.tsx │ │ │ │ ├── DndWrapper.tsx │ │ │ │ ├── ReorderDropArea.tsx │ │ │ │ ├── TableEditor.tsx │ │ │ │ ├── TableEditorContext.tsx │ │ │ │ ├── TableHeader.tsx │ │ │ │ ├── TableHeading.tsx │ │ │ │ ├── TableRow.tsx │ │ │ │ ├── helpers │ │ │ │ │ ├── clipboard.ts │ │ │ │ │ ├── indicatorPosition.ts │ │ │ │ │ ├── keyboardHandlers.ts │ │ │ │ │ ├── reorderArray.test.ts │ │ │ │ │ ├── reorderArray.ts │ │ │ │ │ └── scrollIntoView.ts │ │ │ │ ├── hooks │ │ │ │ │ ├── useCellOptions.ts │ │ │ │ │ ├── useCellSizes.ts │ │ │ │ │ ├── useClearCommands.ts │ │ │ │ │ ├── useCopyCommand.ts │ │ │ │ │ ├── useDragSensors.ts │ │ │ │ │ ├── useGetSelectedCells.ts │ │ │ │ │ ├── usePasteCommand.ts │ │ │ │ │ └── useTableEditorKeyboardNavigation.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts │ │ │ ├── Tabs.tsx │ │ │ ├── Tag │ │ │ │ ├── CreateTagRow.tsx │ │ │ │ ├── Tag.tsx │ │ │ │ ├── TagBar.tsx │ │ │ │ ├── TagSelectPopover.tsx │ │ │ │ ├── index.ts │ │ │ │ └── tagColours.ts │ │ │ ├── Template │ │ │ │ ├── ApplyTemplateDialog.tsx │ │ │ │ ├── TemplateList.tsx │ │ │ │ ├── TemplateListItem.tsx │ │ │ │ ├── template.ts │ │ │ │ └── templates │ │ │ │ │ └── website.tsx │ │ │ ├── Thumbnail.tsx │ │ │ ├── Title.tsx │ │ │ ├── Toaster.tsx │ │ │ ├── UnsavedIndicator.tsx │ │ │ ├── ValueComp.tsx │ │ │ ├── VisuallyHidden.ts │ │ │ ├── WarningBlock.tsx │ │ │ ├── datatypes │ │ │ │ ├── DateTime.tsx │ │ │ │ ├── Markdown.tsx │ │ │ │ ├── NestedResource.tsx │ │ │ │ └── ResourceArray.tsx │ │ │ └── forms │ │ │ │ ├── AtomicSelectInput.tsx │ │ │ │ ├── BasicSelect.tsx │ │ │ │ ├── Checkbox.tsx │ │ │ │ ├── EditFormDialog.tsx │ │ │ │ ├── EmojiInput.tsx │ │ │ │ ├── ErrorChip.ts │ │ │ │ ├── Field.tsx │ │ │ │ ├── FileDropzone │ │ │ │ ├── FileDropzone.tsx │ │ │ │ └── FileDropzoneInput.tsx │ │ │ │ ├── FilePicker │ │ │ │ ├── FilePicker.tsx │ │ │ │ ├── FilePickerButton.tsx │ │ │ │ ├── FilePickerDialog.tsx │ │ │ │ ├── FilePickerItem.tsx │ │ │ │ ├── SelectedFile.tsx │ │ │ │ └── SelectedFileLayout.tsx │ │ │ │ ├── InputBoolean.tsx │ │ │ │ ├── InputDate.tsx │ │ │ │ ├── InputMarkdown.tsx │ │ │ │ ├── InputNumber.tsx │ │ │ │ ├── InputResource.tsx │ │ │ │ ├── InputResourceArray.tsx │ │ │ │ ├── InputSlug.tsx │ │ │ │ ├── InputString.tsx │ │ │ │ ├── InputStyles.tsx │ │ │ │ ├── InputSwitcher.tsx │ │ │ │ ├── InputTimestamp.tsx │ │ │ │ ├── MarkdownInput.tsx │ │ │ │ ├── NewForm │ │ │ │ ├── CustomCreateActions │ │ │ │ │ ├── BasicInstanceHandlers.ts │ │ │ │ │ ├── CustomForms │ │ │ │ │ │ ├── NewArticleDialog.tsx │ │ │ │ │ │ ├── NewBookmarkDialog.tsx │ │ │ │ │ │ ├── NewCollectionDialog.tsx │ │ │ │ │ │ ├── NewDriveDialog.tsx │ │ │ │ │ │ ├── NewOntologyDialog.tsx │ │ │ │ │ │ ├── NewTableDialog.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── NewFormDialog.tsx │ │ │ │ ├── NewFormPage.tsx │ │ │ │ ├── NewFormTitle.tsx │ │ │ │ ├── SubjectField.tsx │ │ │ │ ├── useNewForm.ts │ │ │ │ └── useNewResourceUI.tsx │ │ │ │ ├── RadioInput.tsx │ │ │ │ ├── RangeInput.tsx │ │ │ │ ├── ResourceField.tsx │ │ │ │ ├── ResourceForm.tsx │ │ │ │ ├── ResourceFormContext.tsx │ │ │ │ ├── ResourceSelector │ │ │ │ ├── DropdownInput.tsx │ │ │ │ ├── InlineOverlay.tsx │ │ │ │ ├── ResourceSelector.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── useTitlePropOfClass.ts │ │ │ │ ├── SearchBox │ │ │ │ ├── ResultLine.tsx │ │ │ │ ├── SearchBox.tsx │ │ │ │ ├── SearchBoxButton.tsx │ │ │ │ ├── SearchBoxWindow.tsx │ │ │ │ ├── index.ts │ │ │ │ └── searchboxVars.ts │ │ │ │ ├── UploadForm.tsx │ │ │ │ ├── ValueForm │ │ │ │ ├── ValueForm.tsx │ │ │ │ ├── ValueFormEdit.tsx │ │ │ │ └── index.ts │ │ │ │ ├── formValidation │ │ │ │ ├── FormValidationContextProvider.tsx │ │ │ │ ├── useLifecycleWithDependencies.ts │ │ │ │ └── useValidation.ts │ │ │ │ └── hooks │ │ │ │ ├── useAvailableSpace.ts │ │ │ │ ├── useDateTimeInput.ts │ │ │ │ └── useSaveResource.ts │ │ ├── config.ts │ │ ├── globalCssVars.ts │ │ ├── handlers │ │ │ ├── errorHandler.ts │ │ │ ├── index.ts │ │ │ └── sideBarHandler.ts │ │ ├── helpers │ │ │ ├── AppSettings.tsx │ │ │ ├── CSSVar.ts │ │ │ ├── EventManager.ts │ │ │ ├── ViewTransitionProps.ts │ │ │ ├── addIf.ts │ │ │ ├── agentStorage.ts │ │ │ ├── buildComponentFactory.ts │ │ │ ├── clearData.ts │ │ │ ├── commonAnimations.ts │ │ │ ├── containers.ts │ │ │ ├── dates │ │ │ │ ├── formatDate.ts │ │ │ │ ├── formatters.ts │ │ │ │ └── relativeDate.ts │ │ │ ├── debounce.ts │ │ │ ├── effectTimeout.ts │ │ │ ├── filetypes.ts │ │ │ ├── focusOffsetElement.ts │ │ │ ├── formatTimeAgo.ts │ │ │ ├── genericTypes.ts │ │ │ ├── iconMap.ts │ │ │ ├── isURL.ts │ │ │ ├── loggingHandlers.tsx │ │ │ ├── loopingIndex.ts │ │ │ ├── markdown.ts │ │ │ ├── navigation.tsx │ │ │ ├── randomItem.ts │ │ │ ├── randomString.ts │ │ │ ├── remToPixels.ts │ │ │ ├── serverURLStorage.ts │ │ │ ├── stringToSlug.ts │ │ │ ├── tauri.tsx │ │ │ ├── timeoutEffect.ts │ │ │ ├── toAnchorId.ts │ │ │ ├── transition.ts │ │ │ ├── transitionName.ts │ │ │ ├── useCurrentSubject.tsx │ │ │ ├── useDarkMode.tsx │ │ │ ├── useDebounce.ts │ │ │ ├── useHTMLFormFieldValidation.ts │ │ │ ├── useHover.tsx │ │ │ ├── useLocalSearch.tsx │ │ │ ├── useMedia.tsx │ │ │ ├── useNewRoute.ts │ │ │ └── useOnValueChange.ts │ │ ├── hooks │ │ │ ├── useAddToOntology.ts │ │ │ ├── useClickAwayListener.ts │ │ │ ├── useCombineRefs.ts │ │ │ ├── useControlLock.tsx │ │ │ ├── useCreateAndNavigate.ts │ │ │ ├── useDeferredUpdate.ts │ │ │ ├── useDriveHistory.ts │ │ │ ├── useEffectOnce.ts │ │ │ ├── useFile.ts │ │ │ ├── useFilePreviewSizeLimit.ts │ │ │ ├── useGlobalStylesWhileMounted.ts │ │ │ ├── useIndexDependantCallback.ts │ │ │ ├── useLocalStorage.ts │ │ │ ├── useMediaQuery.ts │ │ │ ├── useNavigateWithTransition.ts │ │ │ ├── useOnline.ts │ │ │ ├── useQueryScope.ts │ │ │ ├── useResizable.ts │ │ │ ├── useSavedDrives.ts │ │ │ ├── useSelectedIndex.ts │ │ │ └── useUpload.ts │ │ ├── index.tsx │ │ ├── ontologies │ │ │ └── atomic-argu.ts │ │ ├── reset.css │ │ ├── routes │ │ │ ├── AboutRoute.tsx │ │ │ ├── AppSettings.tsx │ │ │ ├── DataRoute.tsx │ │ │ ├── EditRoute.tsx │ │ │ ├── History │ │ │ │ ├── HistoryDesktopView.tsx │ │ │ │ ├── HistoryMobileView.tsx │ │ │ │ ├── HistoryRoute.tsx │ │ │ │ ├── HistoryViewProps.ts │ │ │ │ ├── VersionButton.tsx │ │ │ │ ├── VersionScroller.tsx │ │ │ │ ├── VersionTitle.tsx │ │ │ │ ├── useVersions.ts │ │ │ │ └── versionHelpers.ts │ │ │ ├── ImportRoute.tsx │ │ │ ├── NewResource │ │ │ │ ├── BaseButtons.tsx │ │ │ │ ├── ClassButton.tsx │ │ │ │ ├── NewRoute.tsx │ │ │ │ └── OntologySections.tsx │ │ │ ├── PruneTestsRoute.tsx │ │ │ ├── RootRoutes.tsx │ │ │ ├── Router.tsx │ │ │ ├── Sandbox.tsx │ │ │ ├── Search │ │ │ │ ├── SearchRoute.tsx │ │ │ │ └── searchUtils.ts │ │ │ ├── SettingsAgent.tsx │ │ │ ├── SettingsServer │ │ │ │ ├── DriveRow.tsx │ │ │ │ ├── DrivesCard.tsx │ │ │ │ ├── FavoriteButton.tsx │ │ │ │ ├── WSIndicator.tsx │ │ │ │ └── index.tsx │ │ │ ├── Share │ │ │ │ ├── AgentRights.tsx │ │ │ │ ├── PermissionRow.tsx │ │ │ │ ├── ShareRoute.tsx │ │ │ │ ├── useInheritedRights.ts │ │ │ │ └── useRights.ts │ │ │ ├── ShortcutsRoute.tsx │ │ │ ├── ShowRoute.tsx │ │ │ ├── TokenRoute.tsx │ │ │ ├── UnavailableLazyRoute.tsx │ │ │ └── paths.tsx │ │ ├── styling.tsx │ │ └── views │ │ │ ├── AgentPage.tsx │ │ │ ├── Article │ │ │ ├── ArticleCard.tsx │ │ │ ├── ArticleCover.tsx │ │ │ ├── ArticleDescription.tsx │ │ │ ├── ArticlePage.tsx │ │ │ └── index.ts │ │ │ ├── BookmarkPage │ │ │ ├── BookmarkPage.tsx │ │ │ ├── BookmarkPreview.tsx │ │ │ └── usePreview.ts │ │ │ ├── Card │ │ │ ├── BookmarkCard.tsx │ │ │ ├── CardViewProps.tsx │ │ │ ├── CollectionCard.tsx │ │ │ ├── ElementCard.tsx │ │ │ ├── MessageCard.tsx │ │ │ ├── ResourceCard.tsx │ │ │ └── ResourceCardTitle.tsx │ │ │ ├── ChatRoomPage.tsx │ │ │ ├── ClassPage.tsx │ │ │ ├── CodeUsage │ │ │ ├── CodeUsage.tsx │ │ │ ├── PropSelector.tsx │ │ │ ├── ResourceCodeUsage.tsx │ │ │ ├── ResourceCodeUsageDialog.tsx │ │ │ └── generators │ │ │ │ ├── BasicCodeGenerator.ts │ │ │ │ ├── CodeGenerator.ts │ │ │ │ ├── TableCodeGenerator.ts │ │ │ │ └── generatorUtils.ts │ │ │ ├── CollectionPage.tsx │ │ │ ├── CrashPage.tsx │ │ │ ├── DocumentPage.tsx │ │ │ ├── DrivePage.tsx │ │ │ ├── Element.tsx │ │ │ ├── EndpointPage.tsx │ │ │ ├── ErrorPage.tsx │ │ │ ├── File │ │ │ ├── DownloadButton.tsx │ │ │ ├── FileCard.tsx │ │ │ ├── FilePage.tsx │ │ │ ├── FilePreview.tsx │ │ │ ├── FilePreviewThumbnail.tsx │ │ │ ├── TextPreview.tsx │ │ │ ├── displayFileSize.ts │ │ │ ├── fileTypeUtils.ts │ │ │ └── useFileImageTransitionStyles.ts │ │ │ ├── FolderPage │ │ │ ├── DisplayStyleButton.tsx │ │ │ ├── FolderDisplayStyle.ts │ │ │ ├── GridItem │ │ │ │ ├── ArticleGridItem.tsx │ │ │ │ ├── BasicGridItem.tsx │ │ │ │ ├── BookmarkGridItem.tsx │ │ │ │ ├── ChatRoomGridItem.tsx │ │ │ │ ├── DefaultGridItem.tsx │ │ │ │ ├── DocumentGridItem.tsx │ │ │ │ ├── GridItemViewProps.tsx │ │ │ │ ├── ResourceGridItem.tsx │ │ │ │ └── components.tsx │ │ │ ├── GridView.tsx │ │ │ ├── ListView.tsx │ │ │ └── index.tsx │ │ │ ├── ImporterPage.tsx │ │ │ ├── InvitePage.tsx │ │ │ ├── MessagePage.tsx │ │ │ ├── OntologyPage │ │ │ ├── Class │ │ │ │ ├── AddPropertyButton.tsx │ │ │ │ ├── ClassCardRead.tsx │ │ │ │ ├── ClassCardWrite.tsx │ │ │ │ └── NewClassInstanceButton.tsx │ │ │ ├── CreateInstanceButton.tsx │ │ │ ├── DashedButton.tsx │ │ │ ├── Graph.tsx │ │ │ ├── InfoTitle.tsx │ │ │ ├── InlineDatatype.tsx │ │ │ ├── LabelText.tsx │ │ │ ├── NewClassButton.tsx │ │ │ ├── NewPropertyButton.tsx │ │ │ ├── OntologyContext.tsx │ │ │ ├── OntologyDescription.tsx │ │ │ ├── OntologyPage.tsx │ │ │ ├── OntologySidebar.tsx │ │ │ ├── Property │ │ │ │ ├── EnumFormPart.tsx │ │ │ │ ├── PropertyCardRead.tsx │ │ │ │ ├── PropertyCardWrite.tsx │ │ │ │ ├── PropertyFormCommon.tsx │ │ │ │ ├── PropertyLineRead.tsx │ │ │ │ ├── PropertyLineWrite.tsx │ │ │ │ ├── PropertyWriteDialog.tsx │ │ │ │ ├── filterAllowsOnly.ts │ │ │ │ └── useEnumHandlers.ts │ │ │ ├── PropertyDatatypePicker.tsx │ │ │ ├── index.ts │ │ │ ├── ontologyUtils.ts │ │ │ └── sortSubjectList.ts │ │ │ ├── README.md │ │ │ ├── ResourceInline │ │ │ ├── FileInline.tsx │ │ │ ├── ResourceInline.tsx │ │ │ ├── TagInline.tsx │ │ │ └── index.ts │ │ │ ├── ResourceLine.tsx │ │ │ ├── ResourcePage.tsx │ │ │ ├── ResourcePageDefault.tsx │ │ │ ├── TablePage │ │ │ ├── EditorCells │ │ │ │ ├── AtomicURLCell.tsx │ │ │ │ ├── BooleanCell.tsx │ │ │ │ ├── CellComponents.tsx │ │ │ │ ├── DateCell.tsx │ │ │ │ ├── DateTimeCell.tsx │ │ │ │ ├── FileUploadZone.tsx │ │ │ │ ├── FloatCell.tsx │ │ │ │ ├── InputBase.ts │ │ │ │ ├── IntegerCell.tsx │ │ │ │ ├── MultiRelationCell.tsx │ │ │ │ ├── ProgressBar.ts │ │ │ │ ├── ResourceArrayCell.tsx │ │ │ │ ├── ResourceCells │ │ │ │ │ ├── AgentCell.tsx │ │ │ │ │ ├── FileCell.tsx │ │ │ │ │ ├── ResourceCell.tsx │ │ │ │ │ └── SimpleResourceLink.tsx │ │ │ │ ├── SelectCell.tsx │ │ │ │ ├── SlugCell.tsx │ │ │ │ ├── StringCell.tsx │ │ │ │ ├── Type.ts │ │ │ │ └── useResourceSearch.ts │ │ │ ├── ExpandedRowDialog.tsx │ │ │ ├── NewColumnButton.tsx │ │ │ ├── PropertyForm │ │ │ │ ├── CheckboxPropertyForm.tsx │ │ │ │ ├── DatePropertyForm.tsx │ │ │ │ ├── EditPropertyDialog.tsx │ │ │ │ ├── ExternalPropertyDialog.tsx │ │ │ │ ├── FilePropertyForm.tsx │ │ │ │ ├── FormGroupHeading.ts │ │ │ │ ├── Inputs │ │ │ │ │ ├── DateFormatPicker.tsx │ │ │ │ │ ├── DecimalPlacesInput.tsx │ │ │ │ │ └── TableRangeInput.tsx │ │ │ │ ├── NewPropertyDialog.tsx │ │ │ │ ├── NumberPropertyForm.tsx │ │ │ │ ├── PropertyCategoryFormProps.ts │ │ │ │ ├── PropertyForm.tsx │ │ │ │ ├── RelationPropertyForm.tsx │ │ │ │ ├── SelectPropertyForm.tsx │ │ │ │ ├── TextPropertyForm.tsx │ │ │ │ └── categories.tsx │ │ │ ├── TableCell.tsx │ │ │ ├── TableExportDialog.tsx │ │ │ ├── TableHeading.tsx │ │ │ ├── TableHeadingMenu.tsx │ │ │ ├── TablePage.tsx │ │ │ ├── TableRow.tsx │ │ │ ├── dataTypeMaps.ts │ │ │ ├── helpers │ │ │ │ ├── clipboard.ts │ │ │ │ ├── formatNumber.ts │ │ │ │ ├── transformPropertiesPerSubject.ts │ │ │ │ ├── useHandleClearCells.ts │ │ │ │ ├── useHandleColumnResize.ts │ │ │ │ ├── useHandleCopyCommand.ts │ │ │ │ ├── useHandlePaste.ts │ │ │ │ └── useTableHistory.ts │ │ │ ├── index.tsx │ │ │ ├── tablePageContext.ts │ │ │ ├── tableSorting.ts │ │ │ ├── useTableColumns.tsx │ │ │ ├── useTableData.ts │ │ │ └── useTableInvalidation.ts │ │ │ └── TagPage │ │ │ ├── TagPage.tsx │ │ │ └── TagPropertyCard.tsx │ ├── tsconfig.json │ └── vite.config.ts ├── e2e │ ├── README.md │ ├── package.json │ ├── playwright.config.ts │ ├── tests │ │ ├── documents.spec.ts │ │ ├── e2e.spec.ts │ │ ├── e2e.spec.ts-snapshots │ │ │ ├── data-browser-upload-download-1-chromium-darwin copy.png │ │ │ ├── data-browser-upload-download-1-chromium-darwin.png │ │ │ └── data-browser-upload-download-1-chromium-linux.png │ │ ├── filePicker.spec.ts │ │ ├── global.setup.ts │ │ ├── ontology.spec.ts │ │ ├── search.spec.ts │ │ ├── tables.spec.ts │ │ ├── template.spec.ts │ │ ├── test-utils.ts │ │ ├── testFile1.txt │ │ ├── testFile2.md │ │ └── testFile3.txt │ └── tsconfig.json ├── lib │ ├── README.md │ ├── atomic.config.json │ ├── package.json │ ├── src │ │ ├── EventManager.test.ts │ │ ├── EventManager.ts │ │ ├── agent.test.ts │ │ ├── agent.ts │ │ ├── authentication.ts │ │ ├── client.ts │ │ ├── collection.ts │ │ ├── collectionBuilder.ts │ │ ├── commit.test.ts │ │ ├── commit.ts │ │ ├── datatypes.test.ts │ │ ├── datatypes.ts │ │ ├── error.ts │ │ ├── hasBrowserAPI.ts │ │ ├── index.ts │ │ ├── ontologies │ │ │ ├── collections.ts │ │ │ ├── commits.ts │ │ │ ├── core.ts │ │ │ ├── dataBrowser.ts │ │ │ ├── index.ts │ │ │ └── server.ts │ │ ├── ontology.ts │ │ ├── parse.test.ts │ │ ├── parse.ts │ │ ├── resource.test.ts │ │ ├── resource.ts │ │ ├── search.test.ts │ │ ├── search.ts │ │ ├── store.test.ts │ │ ├── store.ts │ │ ├── stringToSlug.ts │ │ ├── truncate.ts │ │ ├── urls.ts │ │ ├── value.ts │ │ └── websockets.ts │ ├── tsconfig.json │ ├── tsup.config.ts │ └── vitest.config.ts ├── logo.svg ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── react │ ├── README.md │ ├── package.json │ ├── src │ │ ├── components │ │ │ └── Image.tsx │ │ ├── helpers │ │ │ └── isDev.ts │ │ ├── hooks.ts │ │ ├── index.ts │ │ ├── useChildren.ts │ │ ├── useCollection.ts │ │ ├── useCollectionPage.ts │ │ ├── useCurrentAgent.ts │ │ ├── useDebounce.ts │ │ ├── useMarkdown.ts │ │ ├── useMemberFromCollection.ts │ │ ├── useServerSearch.tsx │ │ └── useServerURL.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── svelte │ ├── .gitignore │ ├── .npmrc │ ├── .prettierignore │ ├── .prettierrc.json │ ├── README.md │ ├── eslint.config.js │ ├── package.json │ ├── src │ │ ├── app.d.ts │ │ ├── app.html │ │ ├── lib │ │ │ ├── components │ │ │ │ └── Image │ │ │ │ │ ├── Image.svelte │ │ │ │ │ ├── imageHelpers.ts │ │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── stores │ │ │ │ ├── getResource.svelte.test.ts │ │ │ │ ├── getResource.svelte.ts │ │ │ │ └── store.ts │ │ └── routes │ │ │ ├── +layout.svelte │ │ │ ├── +page.svelte │ │ │ └── examples │ │ │ ├── get-resource │ │ │ └── +page.svelte │ │ │ └── image │ │ │ └── +page.svelte │ ├── static │ │ └── favicon.png │ ├── svelte.config.js │ ├── tsconfig.json │ └── vite.config.ts ├── tsconfig.build.json ├── tsconfig.json ├── typedoc.json └── vitest.workspace.js ├── cli ├── .gitignore ├── Cargo.toml ├── README.md ├── src │ ├── commit.rs │ ├── main.rs │ ├── new.rs │ ├── path.rs │ ├── print.rs │ └── search.rs ├── tests │ └── tests.rs ├── wapm.lock └── wapm.toml ├── desktop ├── .gitignore ├── Cargo.toml ├── README.md ├── dist │ └── index.html ├── icons │ ├── 128x128.png │ ├── 128x128@2x.png │ ├── 32x32.png │ ├── Square107x107Logo.png │ ├── Square142x142Logo.png │ ├── Square150x150Logo.png │ ├── Square284x284Logo.png │ ├── Square30x30Logo.png │ ├── Square310x310Logo.png │ ├── Square44x44Logo.png │ ├── Square71x71Logo.png │ ├── Square89x89Logo.png │ ├── StoreLogo.png │ ├── atomic-icon.png │ ├── icon.icns │ ├── icon.ico │ └── icon.png ├── latest-version.json ├── rustfmt.toml ├── src │ ├── build.rs │ ├── main.rs │ ├── menu.rs │ └── system_tray.rs └── tauri.conf.json ├── docker-compose.yml ├── docs ├── .gitignore ├── .prettierrc.json ├── LICENSE ├── README.md ├── atomic.css ├── book.toml ├── discord.js ├── examples │ └── atomic-fs │ │ └── people │ │ ├── john.afd │ │ └── mary.afd ├── src │ ├── 404.md │ ├── SUMMARY.md │ ├── acknowledgements.md │ ├── agents.md │ ├── assets │ │ ├── atomic_data_logo.svg │ │ ├── atomic_data_logo_padded.svg │ │ ├── atomic_data_logo_stroke.svg │ │ ├── ui-guide │ │ │ ├── gui-tables-example.avif │ │ │ └── ui-guide-fresh-install.avif │ │ ├── venn.svg │ │ └── venn_old.svg │ ├── astro-guide │ │ ├── 1-index.md │ │ ├── 10-search.md │ │ ├── 2-setup.md │ │ ├── 3-frontend-setup.md │ │ ├── 4-basic-data-model.md │ │ ├── 5-creating-homepage-data.md │ │ ├── 6-generating-types.md │ │ ├── 7-fetching-data.md │ │ ├── 8-pojects.md │ │ ├── 9-blogs.md │ │ ├── img │ │ │ ├── 3-1.webp │ │ │ ├── 3-2.webp │ │ │ ├── 4-1.webp │ │ │ ├── 5-1.webp │ │ │ ├── 5-2.webp │ │ │ ├── 5-3.webp │ │ │ ├── 7-1.webp │ │ │ ├── 7-2.webp │ │ │ ├── 7-3.webp │ │ │ ├── 8-2.webp │ │ │ ├── 8-3.webp │ │ │ ├── 8-4.webp │ │ │ ├── 9-1.webp │ │ │ ├── 9-2.webp │ │ │ ├── 9-3.webp │ │ │ ├── 9-4.webp │ │ │ ├── 9-5.webp │ │ │ ├── 9-6.webp │ │ │ └── 9-7.webp │ │ └── videos │ │ │ ├── 10-1.mp4 │ │ │ └── 8-1.mp4 │ ├── atomic-data-overview.md │ ├── atomic-server.md │ ├── atomicserver │ │ ├── API.md │ │ ├── after.md │ │ ├── faq.md │ │ ├── gui.md │ │ ├── gui │ │ │ └── tables.md │ │ ├── installation.md │ │ ├── setup.md │ │ └── when-to-use.md │ ├── atomizing.md │ ├── authentication.md │ ├── commits │ │ ├── compare.md │ │ ├── concepts.md │ │ ├── intro.md │ │ ├── ownership.md │ │ ├── suggestions.md │ │ └── versioning.md │ ├── core │ │ ├── concepts.md │ │ ├── json-ad.md │ │ ├── paths.md │ │ ├── querying.md │ │ ├── serialization.md │ │ └── validations.md │ ├── create-json-ad.md │ ├── create-template │ │ └── atomic-template.md │ ├── endpoints.md │ ├── experimental-serialization.md │ ├── extended-table.md │ ├── extended.md │ ├── files.md │ ├── framework.md │ ├── get-involved.md │ ├── get-started.md │ ├── headless-cms.md │ ├── hierarchy.md │ ├── interoperability │ │ ├── git.md │ │ ├── graph-database.md │ │ ├── intro.md │ │ ├── ipfs.md │ │ ├── json.md │ │ ├── privacy.md │ │ ├── rdf.md │ │ ├── solid.md │ │ ├── sql.md │ │ ├── upgrade.md │ │ ├── vc-old.md │ │ └── verifiable-credentials.md │ ├── invitations.md │ ├── js-cli.md │ ├── js-lib │ │ ├── agent.md │ │ ├── collection.md │ │ ├── resource.md │ │ └── store.md │ ├── js-sdks.md │ ├── js.md │ ├── links.md │ ├── motivation.md │ ├── newsletter.md │ ├── plugins.md │ ├── react │ │ ├── Image.md │ │ ├── examples.md │ │ ├── useCanWrite.md │ │ ├── useCollection.md │ │ ├── useCurrentAgent.md │ │ ├── useResource.md │ │ ├── useServerSearch.md │ │ ├── useStore.md │ │ └── useValue.md │ ├── roadmap.md │ ├── runtime.md │ ├── rust-cli.md │ ├── rust-lib.md │ ├── schema │ │ ├── classes.md │ │ ├── collections.md │ │ ├── compare.md │ │ ├── datatypes.md │ │ ├── faq.md │ │ ├── intro.md │ │ ├── migrations.md │ │ └── translations.md │ ├── svelte.md │ ├── svelte │ │ └── image.md │ ├── tooling.md │ ├── trust.md │ ├── usecases │ │ ├── ai.md │ │ ├── crud.md │ │ ├── data-catalog.md │ │ ├── e-commerce.md │ │ ├── education.md │ │ ├── food-labels.md │ │ ├── governmental-open-data.md │ │ ├── headless-cms.md │ │ ├── intro.md │ │ ├── job-matching.md │ │ ├── knowledge-management.md │ │ ├── medical.md │ │ ├── personal-data-store.md │ │ ├── product-lifecyles.md │ │ ├── react.md │ │ ├── science.md │ │ ├── self-integrating-applications.md │ │ ├── self-integrating-systems.md │ │ ├── semantic-web.md │ │ ├── social.md │ │ ├── standardization-bodies.md │ │ ├── surveys.md │ │ ├── verifiable-credentials.md │ │ ├── vocabulary-management.md │ │ └── zettelkasten.md │ ├── websockets.md │ └── when-to-use.md └── theme │ ├── favicon.png │ └── favicon.svg ├── lib ├── .gitignore ├── Cargo.toml ├── README.md ├── benches │ ├── 2022-02-18.md │ └── benchmarks.rs ├── defaults │ ├── chatroom.json │ ├── default_base_models.json │ ├── default_mapping.amp │ ├── default_store.json │ ├── demo_resources.json │ ├── ontologies.json │ └── table.json ├── examples │ ├── basic.rs │ └── try_query.rs ├── src │ ├── agents.rs │ ├── atoms.rs │ ├── authentication.rs │ ├── client │ │ ├── helpers.rs │ │ ├── mod.rs │ │ └── search.rs │ ├── collections.rs │ ├── commit.rs │ ├── config.rs │ ├── datatype.rs │ ├── db.rs │ ├── db │ │ ├── migrations.rs │ │ ├── prop_val_sub_index.rs │ │ ├── query_index.rs │ │ ├── test.rs │ │ ├── trees.rs │ │ └── val_prop_sub_index.rs │ ├── endpoints.rs │ ├── errors.rs │ ├── hierarchy.rs │ ├── lib.rs │ ├── mapping.rs │ ├── parse.rs │ ├── plugins │ │ ├── bookmark.rs │ │ ├── chatroom.rs │ │ ├── export.rs │ │ ├── files.rs │ │ ├── importer.rs │ │ ├── invite.rs │ │ ├── mod.rs │ │ ├── path.rs │ │ ├── prunetests.rs │ │ ├── query.rs │ │ ├── search.rs │ │ └── versioning.rs │ ├── populate.rs │ ├── resources.rs │ ├── schema.rs │ ├── serialize.rs │ ├── store.rs │ ├── storelike.rs │ ├── test_utils.rs │ ├── urls.rs │ ├── utils.rs │ ├── validate.rs │ └── values.rs └── test_files │ └── local_id.json ├── logo.svg └── server ├── .gitignore ├── Cargo.toml ├── README.md ├── STATUS.md ├── benchmark.yml ├── build.rs ├── example_requests.http ├── openapi.yml ├── src ├── actor_messages.rs ├── appstate.rs ├── bin.rs ├── commit_monitor.rs ├── config.rs ├── content_types.rs ├── errors.rs ├── handlers │ ├── commit.rs │ ├── download.rs │ ├── export.rs │ ├── get_resource.rs │ ├── mod.rs │ ├── post_resource.rs │ ├── search.rs │ ├── single_page_app.rs │ ├── upload.rs │ └── web_sockets.rs ├── helpers.rs ├── https.rs ├── jsonerrors.rs ├── lib.rs ├── routes.rs ├── search.rs ├── serve.rs ├── tests.rs └── trace.rs └── tests └── server-cli.rs /.earthlyignore: -------------------------------------------------------------------------------- 1 | target 2 | .dockerignore 3 | .env 4 | .git 5 | **/.temp 6 | .gitignore 7 | Earthfile 8 | */Earthfile 9 | */node_modules 10 | node_modules 11 | */assets_tmp 12 | .earthlyignore 13 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Related Issues 2 | 3 | closes #number 4 | 5 | ## Checklist 6 | - [ ] Add changelog entry linking to issue, describe API changes 7 | - [ ] Add or update tests if needed 8 | - [ ] Update docs if needed 9 | -------------------------------------------------------------------------------- /.github/workflows/deploy_production.yml: -------------------------------------------------------------------------------- 1 | name: Deployment Production 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - "master" 8 | jobs: 9 | deploy-production: 10 | uses: "./.github/workflows/deployment.yml" 11 | with: 12 | environment: production 13 | remote_host: atomicdata.dev 14 | secrets: inherit 15 | -------------------------------------------------------------------------------- /.github/workflows/deploy_staging.yml: -------------------------------------------------------------------------------- 1 | name: Deployment Staging 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - "develop" 8 | jobs: 9 | deploy-staging: 10 | uses: "./.github/workflows/deployment.yml" 11 | with: 12 | environment: staging 13 | remote_host: staging.atomicdata.dev 14 | secrets: inherit 15 | -------------------------------------------------------------------------------- /.github/workflows/release_plz.yml: -------------------------------------------------------------------------------- 1 | name: Release-plz 2 | 3 | permissions: 4 | pull-requests: write 5 | contents: write 6 | 7 | on: 8 | push: 9 | branches: 10 | - main 11 | 12 | jobs: 13 | release-plz: 14 | name: Release-plz 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Checkout repository 18 | uses: actions/checkout@v4 19 | with: 20 | fetch-depth: 0 21 | - name: Install Rust toolchain 22 | uses: dtolnay/rust-toolchain@stable 23 | - name: Run release-plz 24 | uses: MarcoIeni/release-plz-action@v0.5 25 | env: 26 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 27 | CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .env 3 | trace-*.json 4 | **/.temp 5 | .DS_Store 6 | .cargo 7 | .tmp-earthly-out 8 | artifact 9 | server/assets_tmp 10 | .netlify 11 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "swellaby.vscode-rust-test-adapter", 4 | "vadimcn.vscode-lldb", 5 | "rust-lang.rust-analyzer", 6 | "styled-components.vscode-styled-components", 7 | "svelte.svelte-vscode" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/recommendations.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "matklad.rust-analyzer", 4 | "sakamoto66.vscode-playwright-test-runner", 5 | "ms-vscode.vscode-typescript-next", 6 | "dbaeumer.vscode-eslint", 7 | "antfu.vite", 8 | "DavidAnson.vscode-markdownlint", 9 | "ms-playwright.playwright" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | atomicserver.eu -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | resolver = "2" 3 | members = ["server", "cli", "lib"] 4 | # Tauri build is deprecated, see 5 | # https://github.com/atomicdata-dev/atomic-server/issues/718 6 | exclude = ["desktop"] 7 | -------------------------------------------------------------------------------- /Cross.toml: -------------------------------------------------------------------------------- 1 | # [target.aarch64-unknown-linux-gnu] 2 | # pre-build = [ 3 | # "dpkg --add-architecture $CROSS_DEB_ARCH", 4 | # "apt-get update", 5 | # "apt-get install --assume-yes nasm:$CROSS_DEB_ARCH", 6 | # ] 7 | [target.x86_64-unknown-linux-musl] 8 | pre-build = [ 9 | "dpkg --add-architecture $CROSS_DEB_ARCH", 10 | "apt-get update", 11 | "apt-get install --assume-yes nasm", 12 | ] 13 | # [target.armv7-unknown-linux-musleabihf] 14 | # pre-build = [ 15 | # "dpkg --add-architecture $CROSS_DEB_ARCH", 16 | # "apt-get update", 17 | # "apt-get install --assume-yes nasm:$CROSS_DEB_ARCH", 18 | # ] 19 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | plugins: 2 | - jekyll-relative-links 3 | relative_links: 4 | enabled: true 5 | collections: true 6 | include: 7 | - README.md 8 | - LICENSE.md 9 | - CONTRIBUTING.md 10 | exclude: 11 | - browser 12 | - server 13 | - lib 14 | - docs 15 | -------------------------------------------------------------------------------- /browser/.earthlyignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | */node_modules 3 | Earthfile 4 | .earthlyignore 5 | -------------------------------------------------------------------------------- /browser/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | node_modules 3 | docs 4 | publish 5 | .env 6 | .husky 7 | .nohup 8 | .swc 9 | .tsup 10 | */lib 11 | */dist 12 | */dev-dist 13 | */yarn-error.log 14 | test-results 15 | playwright-report 16 | template-tests 17 | */nohup.out 18 | */yarn-error.log 19 | lib/coverage 20 | react/coverage 21 | data-browser/coverage 22 | .yarn/* 23 | !.yarn/cache 24 | !.yarn/patches 25 | !.yarn/plugins 26 | !.yarn/releases 27 | !.yarn/sdks 28 | !.yarn/versions 29 | .DS_Store 30 | **/.trunk/* 31 | 32 | **/tomic-lib-**.tgz 33 | **/tomic-react-**.tgz 34 | **/tomic-svelte-**.tgz 35 | **/tomic-cli-**.tgz 36 | **/tomic-create-template-**.tgz 37 | -------------------------------------------------------------------------------- /browser/.prettierignore: -------------------------------------------------------------------------------- 1 | build 2 | **/node_modules 3 | **/dist 4 | **/package.json 5 | **/yarn.lock 6 | **/package-lock.json 7 | **/.eslintrc.js 8 | **/tsconfig.json 9 | -------------------------------------------------------------------------------- /browser/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "printWidth": 80, 4 | "tabWidth": 2, 5 | "singleQuote": true, 6 | "bracketSpacing": true, 7 | "useTabs": false, 8 | "arrowParens": "avoid", 9 | "jsxSingleQuote": true, 10 | "trailingComma": "all", 11 | "jsdocParser": true 12 | } 13 | -------------------------------------------------------------------------------- /browser/DOCS.MD: -------------------------------------------------------------------------------- 1 | ## Atomic Data Typescript (@tomic) Docs 2 | 3 | Documentation for [`@tomic/lib`](/modules/_tomic_lib) and [`@tomic/react`](/modules/_tomic_react). 4 | 5 | Hosted on [atomic-lib.netlify.app](https://atomic-lib.netlify.app/) 6 | 7 | See [the Github repository](https://github.com/atomicdata-dev/atomic-data-browser) for more information and issues. 8 | -------------------------------------------------------------------------------- /browser/cli/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | -------------------------------------------------------------------------------- /browser/cli/readme.md: -------------------------------------------------------------------------------- 1 | _Check out [the docs here](https://docs.atomicdata.dev/js-cli)._ 2 | 3 | `@tomic/cli` is a command line tool that helps the developer with creating a front-end for their atomic data project by providing typesafety on resources. 4 | In atomic data you can create [ontologies](https://atomicdata.dev/class/ontology) that describe your business model. 5 | You can use `@tomic/cli` to generate Typscript types for these ontologies in your front-end. 6 | 7 | ```typescript 8 | import { type Post } from './ontolgies/blog'; // <--- generated 9 | 10 | const myBlogpost = await store.getResource( 11 | 'https://myblog.com/atomic-is-awesome', 12 | ); 13 | 14 | const comments = myBlogpost.props.comments; // string[] automatically inferred! 15 | 16 | myBlogpost.props.name = 'New title'; 17 | myBlogpost.save(); 18 | ``` 19 | 20 | _Check out [the docs here](https://docs.atomicdata.dev/js-cli)._ 21 | 22 | -------------------------------------------------------------------------------- /browser/cli/src/DatatypeToTSTypeMap.ts: -------------------------------------------------------------------------------- 1 | import { Datatype } from '@tomic/lib'; 2 | 3 | export const DatatypeToTSTypeMap = { 4 | [Datatype.ATOMIC_URL]: 'string', 5 | [Datatype.RESOURCEARRAY]: 'string[]', 6 | [Datatype.BOOLEAN]: 'boolean', 7 | [Datatype.DATE]: 'string', 8 | [Datatype.TIMESTAMP]: 'number', 9 | [Datatype.INTEGER]: 'number', 10 | [Datatype.FLOAT]: 'number', 11 | [Datatype.STRING]: 'string', 12 | [Datatype.SLUG]: 'string', 13 | [Datatype.MARKDOWN]: 'string', 14 | [Datatype.UNKNOWN]: 'JSONValue', 15 | }; 16 | -------------------------------------------------------------------------------- /browser/cli/src/generateSubjectToNameMapping.ts: -------------------------------------------------------------------------------- 1 | import { Resource, core } from '@tomic/lib'; 2 | import { ReverseMapping } from './generateBaseObject.js'; 3 | 4 | export function generateSubjectToNameMapping( 5 | ontology: Resource, 6 | reverseMapping: ReverseMapping, 7 | ) { 8 | const properties = ontology.getArray(core.properties.properties) as string[]; 9 | 10 | const lines = properties 11 | .map(prop => propLine(prop, reverseMapping)) 12 | .filter(line => line); 13 | 14 | return `interface PropSubjectToNameMapping { 15 | ${lines.join('\n')} 16 | }`; 17 | } 18 | 19 | const propLine = (subject: string, reverseMapping: ReverseMapping) => { 20 | const name = reverseMapping[subject]?.split('.')[2]; 21 | 22 | if (!name) { 23 | return undefined; 24 | } 25 | 26 | return `[${reverseMapping[subject]}]: '${name}',`; 27 | }; 28 | -------------------------------------------------------------------------------- /browser/cli/src/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /* eslint-disable no-console */ 3 | 4 | import chalk from 'chalk'; 5 | import { usage } from './usage.js'; 6 | 7 | const command = process.argv[2]; 8 | 9 | const commands = new Map Promise>(); 10 | 11 | commands.set('ontologies', () => 12 | import('./commands/ontologies.js').then(m => 13 | m.ontologiesCommand(process.argv.slice(3)), 14 | ), 15 | ); 16 | 17 | commands.set('init', () => 18 | import('./commands/init.js').then(m => m.initCommand(process.argv.slice(3))), 19 | ); 20 | 21 | if (commands.has(command)) { 22 | commands.get(command)?.(); 23 | } else { 24 | console.error(chalk.red('Unknown command'), chalk.cyan(command ?? '')); 25 | console.log(usage); 26 | } 27 | -------------------------------------------------------------------------------- /browser/cli/src/usage.ts: -------------------------------------------------------------------------------- 1 | export const usage = ` 2 | ad-generate 3 | 4 | Commands: 5 | ontologies Generates typescript files for ontologies specified in the config file. 6 | init Creates a template config file. 7 | `; 8 | -------------------------------------------------------------------------------- /browser/cli/src/utils.ts: -------------------------------------------------------------------------------- 1 | import { getTsconfig } from 'get-tsconfig'; 2 | 3 | export const camelCaseify = (str: string) => 4 | str.replace(/-([a-z0-9])/g, g => { 5 | return g[1].toUpperCase(); 6 | }); 7 | 8 | export const dedupe = (array: T[]): T[] => { 9 | return Array.from(new Set(array)); 10 | }; 11 | 12 | export const getExtension = () => 13 | getTsconfig()?.config.compilerOptions?.moduleResolution === 'Bundler' 14 | ? '' 15 | : '.js'; 16 | -------------------------------------------------------------------------------- /browser/cli/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "./bin", 4 | "rootDir": ".", 5 | "target": "ESNext", 6 | "moduleResolution": "nodeNext", 7 | "module": "nodeNext", 8 | "noImplicitAny": true, 9 | "strictNullChecks": true, 10 | // We don't need type declarations for a cli app. 11 | "declaration": false, 12 | "allowJs": true, 13 | }, 14 | "include": [ 15 | "./src", 16 | ], 17 | "references": [], 18 | } 19 | -------------------------------------------------------------------------------- /browser/create-template/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | 3 | /templates/**/ontologies/**/* 4 | -------------------------------------------------------------------------------- /browser/create-template/readme.md: -------------------------------------------------------------------------------- 1 | # @tomic/template 2 | 3 | ```cli 4 | npm create @tomic/template my-project -- --template