From de2d188c967784059a0f53fa13a2ee29d2b70dc0 Mon Sep 17 00:00:00 2001 From: Arek Nawo Date: Sun, 27 Oct 2024 16:28:43 +0100 Subject: [PATCH] clean slate --- .gitignore | 1 + apps/backend/api/.env.example | 1 - apps/backend/api/Dockerfile | 37 - apps/backend/api/package.json | 22 - apps/backend/api/src/api.ts | 77 - apps/backend/api/src/index.ts | 46 - apps/backend/api/tsconfig.json | 16 - apps/backend/app/.env.example | 1 - apps/backend/app/Dockerfile | 37 - apps/backend/app/package.json | 31 - apps/backend/app/src/app.ts | 105 - apps/backend/app/src/index.ts | 34 - apps/backend/app/tsconfig.json | 16 - apps/backend/assets/.env.example | 1 - apps/backend/assets/Dockerfile | 37 - apps/backend/assets/package.json | 25 - apps/backend/assets/src/assets.ts | 99 - apps/backend/assets/src/index.ts | 17 - apps/backend/assets/tsconfig.json | 16 - apps/backend/collaboration/.env.example | 1 - apps/backend/collaboration/Dockerfile | 37 - apps/backend/collaboration/package.json | 26 - .../collaboration/src/extensions/git-sync.ts | 169 - .../src/extensions/search-indexing.ts | 112 - .../src/extensions/version-history.ts | 166 - apps/backend/collaboration/src/index.ts | 20 - apps/backend/collaboration/src/writing.ts | 166 - apps/backend/collaboration/tsconfig.json | 16 - apps/backend/extensions/.env.example | 1 - apps/backend/extensions/package.json | 49 - apps/backend/extensions/src/extensions.ts | 72 - apps/backend/extensions/src/index.ts | 15 - .../extensions/src/routes/dev/index.ts | 169 - .../extensions/src/routes/dev/transformer.ts | 214 - apps/backend/extensions/src/routes/gpt.ts | 47 - .../extensions/src/routes/hashnode/index.ts | 209 - .../src/routes/hashnode/transformer.ts | 214 - apps/backend/extensions/src/routes/index.ts | 19 - .../extensions/src/routes/mdx/index.ts | 63 - .../src/routes/mdx/input-transformer.ts | 201 - .../src/routes/mdx/output-transformer.ts | 313 - .../extensions/src/routes/medium/index.ts | 165 - .../src/routes/medium/transformer.ts | 162 - apps/backend/extensions/tsconfig.json | 16 - apps/backend/usage-reporting/Dockerfile | 37 - apps/backend/usage-reporting/LICENSE.md | 93 - apps/backend/usage-reporting/package.json | 21 - apps/backend/usage-reporting/src/index.ts | 18 - apps/backend/usage-reporting/tsconfig.json | 16 - apps/docs/.astro/icon.d.ts | 7644 ----------------- apps/docs/.astro/settings.json | 5 - apps/docs/.astro/types.d.ts | 391 - apps/docs/.gitignore | 19 - apps/docs/.vscode/extensions.json | 4 - apps/docs/.vscode/launch.json | 11 - apps/docs/LICENSE.md | 21 - apps/docs/README.md | 20 - apps/docs/astro.config.ts | 146 - apps/docs/package.json | 60 - apps/docs/public/_redirects | 1 - apps/docs/public/favicon.svg | 12 - apps/docs/public/meta-image.png | Bin 231948 -> 0 bytes ...o-latin-ext-variable-wghtOnly-normal.woff2 | Bin 32720 -> 0 bytes ...unito-latin-variable-wghtOnly-normal.woff2 | Bin 35904 -> 0 bytes apps/docs/src/assets/icons/discord.ts | 4 - apps/docs/src/assets/icons/index.ts | 2 - apps/docs/src/assets/icons/logo.ts | 3 - apps/docs/src/assets/json/dark-theme.json | 473 - apps/docs/src/assets/json/light-theme.json | 469 - .../src/components/content/card-grid.astro | 18 - apps/docs/src/components/content/card.astro | 44 - .../endpoint-card/endpoint-card-sections.tsx | 35 - .../content/endpoint-card/endpoint-card.astro | 246 - .../components/content/endpoint-card/index.ts | 3 - .../content/endpoint-card/openapi-spec.ts | 13 - .../endpoint-card/param-description.tsx | 127 - .../content/endpoint-card/rehype-examples.ts | 61 - .../endpoint-card/request-example.astro | 9 - .../endpoint-card/request-examples.tsx | 60 - .../endpoint-card/response-example.astro | 3 - .../components/content/endpoint-card/utils.ts | 58 - .../src/components/content/important.astro | 11 - apps/docs/src/components/content/index.ts | 5 - apps/docs/src/components/content/info.astro | 9 - .../src/components/fragments/analytics.tsx | 21 - .../src/components/fragments/base-head.astro | 55 - apps/docs/src/components/fragments/footer.tsx | 46 - apps/docs/src/components/fragments/header.tsx | 30 - apps/docs/src/components/fragments/index.ts | 10 - .../src/components/fragments/on-this-page.tsx | 110 - .../components/fragments/scrollbar-width.tsx | 22 - .../components/fragments/search-palette.tsx | 337 - .../src/components/fragments/side-bar.tsx | 271 - .../src/components/fragments/svg-defs.tsx | 16 - .../docs/src/components/layouts/default.astro | 139 - apps/docs/src/components/layouts/index.ts | 1 - apps/docs/src/components/primitives/image.tsx | 20 - apps/docs/src/components/primitives/index.tsx | 2 - apps/docs/src/content/api/authentication.md | 12 - apps/docs/src/content/api/content-groups.mdx | 143 - apps/docs/src/content/api/content-pieces.mdx | 253 - apps/docs/src/content/api/extension.mdx | 77 - apps/docs/src/content/api/profile.mdx | 42 - apps/docs/src/content/api/roles.mdx | 141 - apps/docs/src/content/api/search.mdx | 106 - apps/docs/src/content/api/tags.mdx | 130 - apps/docs/src/content/api/transformers.mdx | 82 - apps/docs/src/content/api/user-settings.mdx | 55 - apps/docs/src/content/api/variants.mdx | 102 - apps/docs/src/content/api/webhooks.mdx | 160 - .../src/content/api/workspace-memberships.mdx | 160 - .../src/content/api/workspace-settings.mdx | 100 - apps/docs/src/content/api/workspace.mdx | 32 - apps/docs/src/content/config.ts | 30 - .../content/docs/getting-started/concepts.mdx | 63 - .../docs/getting-started/introduction.mdx | 28 - .../docs/javascript-sdk/javascript-sdk.md | 170 - .../docs/self-hosting/configuration.mdx | 98 - .../src/content/docs/self-hosting/docker.mdx | 31 - .../docs/usage-guide/configuring-vrite.md | 283 - .../docs/usage-guide/content-editor.md | 148 - .../usage-guide/extensions/introduction.mdx | 63 - .../extensions/official-extensions/dev.mdx | 66 - .../extensions/official-extensions/gpt.mdx | 26 - .../official-extensions/hashnode.mdx | 58 - .../extensions/official-extensions/mdx.mdx | 33 - .../extensions/official-extensions/medium.mdx | 54 - .../src/content/docs/usage-guide/metadata.md | 67 - .../usage-guide/navigation/command-palette.md | 54 - .../docs/usage-guide/navigation/dashboard.md | 67 - .../docs/usage-guide/navigation/explorer.md | 39 - .../usage-guide/navigation/navigation.mdx | 65 - apps/docs/src/env.d.ts | 10 - apps/docs/src/lib/state.ts | 5 - apps/docs/src/pages/[...slug].astro | 60 - apps/docs/src/styles/base.css | 239 - apps/docs/src/styles/styles.scss | 454 - apps/docs/tsconfig.json | 20 - apps/docs/unocss-preset-forms.config.js | 306 - apps/docs/unocss.config.js | 27 - apps/landing-page/.astro/settings.json | 5 - apps/landing-page/.env.example | 2 - apps/landing-page/.gitignore | 19 - apps/landing-page/.npmrc | 1 - apps/landing-page/.vscode/extensions.json | 4 - apps/landing-page/.vscode/launch.json | 11 - apps/landing-page/LICENSE.md | 21 - apps/landing-page/README.md | 20 - apps/landing-page/astro.config.mjs | 41 - apps/landing-page/package.json | 41 - apps/landing-page/public/favicon.svg | 12 - apps/landing-page/public/meta-image.png | Bin 716061 -> 0 bytes .../src/assets/images/dark/customize.png | Bin 380158 -> 0 bytes .../src/assets/images/dark/editor.png | Bin 811762 -> 0 bytes .../src/assets/images/dark/explorer.png | Bin 218821 -> 0 bytes .../src/assets/images/dark/extensions.png | Bin 253553 -> 0 bytes .../src/assets/images/dark/hero.png | Bin 859356 -> 0 bytes .../src/assets/images/dark/hybrid-editor.png | Bin 419127 -> 0 bytes .../src/assets/images/dark/kanban-view.png | Bin 588809 -> 0 bytes .../src/assets/images/dark/roles.png | Bin 177788 -> 0 bytes .../src/assets/images/dark/search-small.png | Bin 344119 -> 0 bytes .../src/assets/images/dark/search.png | Bin 896555 -> 0 bytes .../src/assets/images/dark/table-view.png | Bin 920516 -> 0 bytes .../src/assets/images/light/customize.png | Bin 380681 -> 0 bytes .../src/assets/images/light/editor.png | Bin 811916 -> 0 bytes .../src/assets/images/light/explorer.png | Bin 202217 -> 0 bytes .../src/assets/images/light/extensions.png | Bin 248817 -> 0 bytes .../src/assets/images/light/hero.png | Bin 862419 -> 0 bytes .../src/assets/images/light/hybrid-editor.png | Bin 423213 -> 0 bytes .../src/assets/images/light/roles.png | Bin 171282 -> 0 bytes .../src/assets/images/light/search-small.png | Bin 341830 -> 0 bytes .../src/assets/images/light/search.png | Bin 883733 -> 0 bytes .../src/assets/images/light/table-view.png | Bin 917484 -> 0 bytes .../src/components/fragments/analytics.tsx | 21 - .../src/components/fragments/base-head.astro | 50 - .../src/components/fragments/footer.astro | 69 - .../src/components/fragments/header.tsx | 186 - .../src/components/fragments/index.ts | 10 - .../src/components/fragments/observed.tsx | 69 - .../components/fragments/pagination-menu.tsx | 100 - .../components/fragments/parallax-card.tsx | 40 - .../fragments/section-headline.astro | 28 - .../src/components/fragments/section.astro | 3 - .../src/components/fragments/svg-defs.astro | 8 - .../src/components/primitives/image.tsx | 21 - .../src/components/primitives/index.ts | 2 - .../sections/customize/features-grid.tsx | 92 - .../components/sections/customize/index.astro | 15 - .../components/sections/editor/index.astro | 75 - .../sections/get-started/cta-grid.tsx | 63 - .../sections/get-started/index.astro | 15 - .../sections/headless/features-carousel.tsx | 151 - .../components/sections/headless/index.astro | 20 - .../headless/secondary-feature-card.tsx | 38 - .../src/components/sections/hero/index.astro | 103 - .../sections/hero/scroll-indicator.tsx | 28 - .../src/components/sections/index.ts | 8 - .../components/sections/manage/index.astro | 60 - .../components/sections/pricing/index.astro | 35 - .../sections/pricing/pricing-card.tsx | 101 - .../sections/pricing/pricing-plans.tsx | 168 - .../components/sections/search/index.astro | 74 - apps/landing-page/src/env.d.ts | 2 - apps/landing-page/src/icons/javascript.ts | 4 - apps/landing-page/src/icons/linkedin.ts | 4 - apps/landing-page/src/icons/logo.ts | 3 - apps/landing-page/src/icons/open-source.ts | 4 - apps/landing-page/src/icons/sdk.ts | 4 - apps/landing-page/src/lib/email.ts | 58 - apps/landing-page/src/lib/ref.ts | 15 - apps/landing-page/src/lib/utils.ts | 12 - apps/landing-page/src/pages/blog/[slug].astro | 76 - apps/landing-page/src/pages/blog/index.astro | 132 - .../src/pages/blog/page/[page].astro | 145 - apps/landing-page/src/pages/index.astro | 44 - apps/landing-page/src/pages/pricing.astro | 30 - apps/landing-page/src/pages/privacy.astro | 572 -- apps/landing-page/src/pages/tos.astro | 204 - apps/landing-page/src/styles/base.css | 288 - apps/landing-page/src/styles/blog.scss | 352 - apps/landing-page/tsconfig.json | 20 - apps/landing-page/unocss.config.js | 26 - apps/web/index.html | 89 - apps/web/package.json | 75 - apps/web/public/favicon.svg | 12 - apps/web/public/icons/512.png | Bin 54479 -> 0 bytes apps/web/public/icons/favicon.png | Bin 57758 -> 0 bytes .../jetbrains-mono-wghtOnly-normal.woff2 | Bin 114020 -> 0 bytes apps/web/public/manifest.json | 19 - ...o-latin-ext-variable-wghtOnly-normal.woff2 | Bin 32720 -> 0 bytes ...unito-latin-variable-wghtOnly-normal.woff2 | Bin 35904 -> 0 bytes apps/web/public/sandbox.js | 1373 --- apps/web/scripts/sandbox.ts | 284 - apps/web/src/app.tsx | 100 - apps/web/src/assets/icons/api.ts | 4 - apps/web/src/assets/icons/codesandbox.ts | 4 - apps/web/src/assets/icons/discord.ts | 4 - apps/web/src/assets/icons/drag-vertical.ts | 4 - apps/web/src/assets/icons/google.ts | 3 - apps/web/src/assets/icons/hashnode.ts | 4 - apps/web/src/assets/icons/index.ts | 6 - apps/web/src/assets/icons/logo.ts | 3 - apps/web/src/assets/icons/mdx.ts | 3 - apps/web/src/assets/icons/sidebar-collapse.ts | 4 - apps/web/src/assets/json/dark-theme.json | 473 - apps/web/src/assets/json/light-theme.json | 37 - .../fragments/collapsible-section.tsx | 77 - apps/web/src/components/fragments/index.tsx | 7 - .../src/components/fragments/input-field.tsx | 125 - .../components/fragments/mini-code-editor.tsx | 191 - .../src/components/fragments/mini-editor.tsx | 149 - .../components/fragments/scroll-shadow.tsx | 147 - .../fragments/searchable-select.tsx | 240 - .../web/src/components/fragments/svg-defs.tsx | 16 - .../src/components/primitives/draggable.tsx | 0 .../src/components/primitives/droppable.tsx | 0 apps/web/src/components/primitives/index.ts | 2 - .../src/components/primitives/sortable.tsx | 220 - apps/web/src/context/appearance.tsx | 56 - .../src/context/authenticated-user-data.tsx | 264 - apps/web/src/context/client.tsx | 136 - .../web/src/context/command-palette/index.tsx | 808 -- apps/web/src/context/comments.tsx | 212 - apps/web/src/context/confirmation-modal.tsx | 176 - apps/web/src/context/content/actions.ts | 348 - apps/web/src/context/content/index.tsx | 359 - apps/web/src/context/content/loader.ts | 129 - apps/web/src/context/extensions.tsx | 353 - apps/web/src/context/history.tsx | 142 - apps/web/src/context/host-config.tsx | 21 - apps/web/src/context/index.tsx | 13 - apps/web/src/context/local-storage.tsx | 91 - apps/web/src/context/meta.tsx | 38 - apps/web/src/context/notifications.tsx | 91 - apps/web/src/context/shared-state.tsx | 68 - apps/web/src/context/snippets.tsx | 116 - apps/web/src/ee/LICENSE.md | 93 - apps/web/src/ee/index.ts | 2 - .../ee/settings/billing/api-usage-card.tsx | 70 - .../ee/settings/billing/change-plan-card.tsx | 98 - apps/web/src/ee/settings/billing/index.tsx | 152 - .../web/src/ee/settings/billing/price-tag.tsx | 36 - apps/web/src/ee/settings/index.ts | 1 - apps/web/src/ee/subscription-banner.tsx | 89 - apps/web/src/index.tsx | 65 - apps/web/src/layout/bottom-menu.tsx | 224 - apps/web/src/layout/index.ts | 1 - apps/web/src/layout/secured-layout.tsx | 146 - apps/web/src/layout/side-panel-right.tsx | 205 - apps/web/src/layout/side-panel.tsx | 166 - apps/web/src/layout/sidebar-menu.tsx | 535 -- apps/web/src/layout/toolbar/breadcrumb.tsx | 94 - apps/web/src/layout/toolbar/export-menu.tsx | 304 - apps/web/src/layout/toolbar/index.tsx | 307 - .../src/layout/toolbar/restore-version.tsx | 49 - .../src/layout/toolbar/right-panel-menu.tsx | 30 - apps/web/src/layout/toolbar/user-list.tsx | 157 - apps/web/src/layout/walkthrough.tsx | 132 - apps/web/src/lib/code-editor/format.ts | 66 - apps/web/src/lib/code-editor/index.ts | 2 - .../src/lib/code-editor/suggest-language.ts | 47 - apps/web/src/lib/editor/editing.ts | 381 - .../web/src/lib/editor/extensions/auto-dir.ts | 22 - .../extensions/autocomplete/decoration.ts | 104 - .../editor/extensions/autocomplete/index.tsx | 132 - .../lib/editor/extensions/autocomplete/ui.tsx | 88 - .../block-action-menu/component.tsx | 285 - .../extensions/block-action-menu/index.ts | 2 - .../extensions/block-action-menu/options.tsx | 276 - .../extensions/block-action-menu/plugin.tsx | 137 - .../src/lib/editor/extensions/block-paste.ts | 385 - .../lib/editor/extensions/code-block/index.ts | 1 - .../lib/editor/extensions/code-block/menu.tsx | 113 - .../lib/editor/extensions/code-block/node.tsx | 187 - .../lib/editor/extensions/code-block/view.tsx | 431 - .../lib/editor/extensions/collab-cursor.tsx | 249 - .../editor/extensions/collaboration/index.ts | 45 - .../extensions/collaboration/sync-plugin.js | 1222 --- .../extensions/comment-menu/comment-card.tsx | 111 - .../extensions/comment-menu/comment-input.tsx | 100 - .../comment-menu/comment-thread.tsx | 155 - .../extensions/comment-menu/component.tsx | 148 - .../editor/extensions/comment-menu/index.ts | 3 - .../editor/extensions/comment-menu/plugin.tsx | 184 - apps/web/src/lib/editor/extensions/diff.ts | 97 - .../lib/editor/extensions/draggable-text.ts | 90 - .../extensions/element/custom-node-view.tsx | 153 - .../lib/editor/extensions/element/index.ts | 2 - .../lib/editor/extensions/element/node.tsx | 653 -- .../editor/extensions/element/selection.ts | 45 - .../lib/editor/extensions/element/utils.ts | 319 - .../editor/extensions/element/view-manager.ts | 57 - .../extensions/element/xml-node-view.tsx | 200 - .../src/lib/editor/extensions/embed/index.ts | 1 - .../src/lib/editor/extensions/embed/menu.tsx | 50 - .../src/lib/editor/extensions/embed/node.ts | 12 - .../src/lib/editor/extensions/embed/view.tsx | 168 - .../src/lib/editor/extensions/image/index.ts | 1 - .../src/lib/editor/extensions/image/menu.tsx | 170 - .../src/lib/editor/extensions/image/node.ts | 69 - .../src/lib/editor/extensions/image/view.tsx | 342 - apps/web/src/lib/editor/extensions/index.ts | 19 - .../editor/extensions/link-preview/index.ts | 1 - .../editor/extensions/link-preview/plugin.ts | 129 - .../extensions/link-preview/wrapper.tsx | 47 - .../src/lib/editor/extensions/placeholder.ts | 41 - .../src/lib/editor/extensions/shortcuts.ts | 134 - .../extensions/slash-menu/component.tsx | 257 - .../lib/editor/extensions/slash-menu/index.ts | 1 - .../editor/extensions/slash-menu/plugin.ts | 151 - .../extensions/table-menu/component.tsx | 173 - .../lib/editor/extensions/table-menu/index.ts | 1 - .../editor/extensions/table-menu/plugin.tsx | 134 - .../lib/editor/extensions/trailing-node.ts | 67 - .../extensions/xml-node-menu/component.tsx | 116 - .../extensions/xml-node-menu/editor.tsx | 350 - .../editor/extensions/xml-node-menu/index.ts | 1 - .../extensions/xml-node-menu/plugin.tsx | 112 - apps/web/src/lib/editor/index.ts | 2 - .../src/lib/extensions/component-renderer.tsx | 426 - .../extensions/extension-view-renderer.tsx | 186 - apps/web/src/lib/extensions/index.ts | 3 - apps/web/src/lib/extensions/sandbox.ts | 219 - apps/web/src/lib/monaco.ts | 59 - apps/web/src/lib/utils/breakpoints.ts | 5 - apps/web/src/lib/utils/embeds.ts | 36 - apps/web/src/lib/utils/general.ts | 44 - apps/web/src/lib/utils/index.ts | 8 - apps/web/src/lib/utils/ref.ts | 15 - apps/web/src/lib/utils/selection.tsx | 96 - apps/web/src/lib/utils/tags.tsx | 20 - apps/web/src/lib/utils/upload-file.ts | 19 - apps/web/src/lib/utils/validate.ts | 44 - apps/web/src/styles/index.ts | 4 - apps/web/src/styles/styles.css | 195 - apps/web/src/styles/styles.scss | 635 -- apps/web/src/typings.d.ts | 12 - apps/web/src/views/auth/error-messages.tsx | 27 - apps/web/src/views/auth/index.tsx | 1 - apps/web/src/views/auth/magic-link.tsx | 95 - apps/web/src/views/auth/password.tsx | 211 - apps/web/src/views/auth/view.tsx | 251 - apps/web/src/views/comments/index.tsx | 318 - apps/web/src/views/conflict/index.tsx | 137 - .../src/views/content-piece/description.tsx | 31 - apps/web/src/views/content-piece/index.tsx | 315 - .../content-piece/sections/custom-data.tsx | 36 - .../sections/details/canonical-link.tsx | 77 - .../content-piece/sections/details/date.tsx | 95 - .../sections/details/filename.tsx | 42 - .../content-piece/sections/details/index.tsx | 78 - .../sections/details/members-dropdown.tsx | 146 - .../sections/details/members.tsx | 100 - .../content-piece/sections/details/slug.tsx | 48 - .../sections/details/tags-dropdown.tsx | 315 - .../content-piece/sections/details/tags.tsx | 90 - .../content-piece/sections/extensions.tsx | 111 - .../src/views/content-piece/sections/index.ts | 3 - apps/web/src/views/content-piece/title.tsx | 25 - .../src/views/dashboard/dashboard-context.tsx | 43 - apps/web/src/views/dashboard/index.tsx | 76 - .../dashboard/kanban/content-group-column.tsx | 391 - .../dashboard/kanban/content-piece-card.tsx | 158 - apps/web/src/views/dashboard/kanban/index.tsx | 123 - .../dashboard/table/content-piece-group.tsx | 458 - .../dashboard/table/content-piece-row.tsx | 61 - apps/web/src/views/dashboard/table/index.tsx | 128 - .../views/dashboard/table/table-header.tsx | 207 - .../dashboard/table/table-view-context.tsx | 360 - .../src/views/editor/content-piece-editor.tsx | 133 - .../editor/diff-editor/change-indicators.tsx | 76 - .../src/views/editor/diff-editor/index.tsx | 205 - apps/web/src/views/editor/editor.tsx | 413 - apps/web/src/views/editor/index.tsx | 4 - .../src/views/editor/menus/bubble/block.tsx | 48 - .../src/views/editor/menus/bubble/format.tsx | 178 - .../src/views/editor/menus/bubble/index.tsx | 111 - .../src/views/editor/menus/bubble/link.tsx | 296 - .../src/views/editor/menus/bubble/select.tsx | 174 - .../src/views/editor/menus/bubble/table.tsx | 232 - .../src/views/editor/menus/floating/index.tsx | 35 - apps/web/src/views/editor/menus/index.ts | 3 - .../views/editor/menus/link-preview/index.tsx | 147 - apps/web/src/views/editor/snippet-editor.tsx | 151 - apps/web/src/views/editor/version-editor.tsx | 166 - .../src/views/explorer/content-group-row.tsx | 412 - .../src/views/explorer/content-piece-row.tsx | 335 - .../src/views/explorer/explorer-context.tsx | 85 - apps/web/src/views/explorer/index.tsx | 180 - .../src/views/explorer/new-group-button.tsx | 63 - apps/web/src/views/explorer/tree-level.tsx | 402 - apps/web/src/views/extension/index.tsx | 38 - .../src/views/extensions/extension-card.tsx | 80 - .../extension-configuration-view.tsx | 150 - .../src/views/extensions/extension-icon.tsx | 29 - .../views/extensions/extensions-menu-view.tsx | 76 - .../extensions-url-install-view.tsx | 100 - apps/web/src/views/extensions/index.tsx | 177 - apps/web/src/views/getting-started/index.tsx | 143 - apps/web/src/views/git/index.tsx | 229 - apps/web/src/views/git/initial-setup-view.tsx | 46 - .../provider-configuration-view/github.tsx | 432 - .../git/provider-configuration-view/index.tsx | 27 - apps/web/src/views/git/providers.ts | 17 - apps/web/src/views/git/sync-view/index.tsx | 319 - .../web/src/views/history/history-context.tsx | 56 - apps/web/src/views/history/history-entry.tsx | 294 - apps/web/src/views/history/index.tsx | 185 - .../views/settings/api/configure-action.tsx | 128 - .../settings/api/configure-subsection.tsx | 232 - apps/web/src/views/settings/api/index.tsx | 299 - apps/web/src/views/settings/appearance.tsx | 97 - apps/web/src/views/settings/editor/index.tsx | 227 - apps/web/src/views/settings/editor/options.ts | 130 - apps/web/src/views/settings/image-upload.tsx | 91 - apps/web/src/views/settings/index.tsx | 1 - apps/web/src/views/settings/menu.tsx | 56 - apps/web/src/views/settings/metadata.tsx | 152 - apps/web/src/views/settings/profile.tsx | 199 - apps/web/src/views/settings/security.tsx | 144 - .../transformers/configure-subsection.tsx | 128 - .../src/views/settings/transformers/index.tsx | 175 - .../variants/configure-subsection.tsx | 143 - .../web/src/views/settings/variants/index.tsx | 213 - apps/web/src/views/settings/view.tsx | 231 - .../webhooks/configure-webhook-subsection.tsx | 254 - .../web/src/views/settings/webhooks/events.ts | 15 - .../web/src/views/settings/webhooks/index.tsx | 249 - .../workspace/configure-role-subsection.tsx | 217 - .../src/views/settings/workspace/index.tsx | 335 - .../settings/workspace/information-card.tsx | 136 - .../workspace/invite-member-subsection.tsx | 119 - .../views/settings/workspace/members-card.tsx | 284 - .../views/settings/workspace/roles-card.tsx | 173 - apps/web/src/views/snippets/index.tsx | 65 - .../src/views/snippets/new-snippet-button.tsx | 60 - apps/web/src/views/snippets/snippet-entry.tsx | 213 - .../src/views/snippets/snippets-context.tsx | 39 - apps/web/src/views/verify/index.tsx | 192 - .../create-workspace-subsection.tsx | 107 - apps/web/src/views/workspaces/index.tsx | 1 - apps/web/src/views/workspaces/overlay.tsx | 39 - apps/web/src/views/workspaces/view.tsx | 265 - apps/web/tsconfig.json | 18 - apps/web/unocss-preset-forms.config.js | 304 - apps/web/unocss.config.js | 33 - apps/web/vite.config.mts | 46 - packages/backend/package.json | 73 - .../backend/src/assets/initial-content.json | 2025 ----- .../src/collections/comment-threads.ts | 40 - packages/backend/src/collections/comments.ts | 61 - .../backend/src/collections/content-groups.ts | 32 - .../src/collections/content-piece-variants.ts | 65 - .../backend/src/collections/content-pieces.ts | 88 - .../src/collections/content-variants.ts | 20 - .../src/collections/content-versions.ts | 23 - packages/backend/src/collections/contents.ts | 16 - .../backend/src/collections/extensions.ts | 43 - packages/backend/src/collections/git-data.ts | 78 - packages/backend/src/collections/index.ts | 25 - packages/backend/src/collections/roles.ts | 47 - .../src/collections/snippet-contents.ts | 18 - packages/backend/src/collections/snippets.ts | 24 - packages/backend/src/collections/tags.ts | 45 - packages/backend/src/collections/tokens.ts | 55 - .../backend/src/collections/transformers.ts | 27 - .../backend/src/collections/user-settings.ts | 36 - packages/backend/src/collections/users.ts | 71 - packages/backend/src/collections/variants.ts | 29 - packages/backend/src/collections/versions.ts | 59 - packages/backend/src/collections/webhooks.ts | 57 - .../src/collections/workspace-memberships.ts | 47 - .../src/collections/workspace-settings.ts | 120 - .../backend/src/collections/workspaces.ts | 43 - packages/backend/src/ee/LICENSE.md | 93 - packages/backend/src/ee/billing/index.ts | 4 - packages/backend/src/ee/billing/plugin.ts | 507 -- packages/backend/src/ee/billing/route.ts | 72 - packages/backend/src/ee/index.ts | 1 - packages/backend/src/env.ts | 71 - packages/backend/src/events/comment.ts | 34 - packages/backend/src/events/content-group.ts | 32 - packages/backend/src/events/content-piece.ts | 36 - packages/backend/src/events/extension.ts | 22 - packages/backend/src/events/git-data.ts | 31 - packages/backend/src/events/index.ts | 18 - packages/backend/src/events/role.ts | 23 - packages/backend/src/events/snippet.ts | 26 - packages/backend/src/events/tag.ts | 20 - packages/backend/src/events/token.ts | 25 - packages/backend/src/events/transformer.ts | 27 - packages/backend/src/events/user-settings.ts | 19 - packages/backend/src/events/user.ts | 17 - packages/backend/src/events/variant.ts | 31 - packages/backend/src/events/versions.ts | 25 - packages/backend/src/events/webhook.ts | 31 - .../src/events/workspace-membership.ts | 41 - .../backend/src/events/workspace-settings.ts | 24 - packages/backend/src/events/workspace.ts | 21 - packages/backend/src/index.ts | 16 - packages/backend/src/lib/auth.ts | 89 - .../src/lib/content-processing/conversions.ts | 134 - .../src/lib/content-processing/diff.ts | 282 - .../src/lib/content-processing/index.ts | 2 - packages/backend/src/lib/context.ts | 37 - packages/backend/src/lib/errors.ts | 144 - packages/backend/src/lib/git-sync/index.ts | 21 - .../src/lib/git-sync/process-content.ts | 266 - packages/backend/src/lib/git-sync/provider.ts | 82 - .../lib/git-sync/providers/github/commit.ts | 54 - .../lib/git-sync/providers/github/index.ts | 15 - .../git-sync/providers/github/initial-sync.ts | 77 - .../src/lib/git-sync/providers/github/pull.ts | 84 - .../lib/git-sync/providers/github/requests.ts | 225 - .../src/lib/git-sync/providers/index.ts | 1 - packages/backend/src/lib/hash.ts | 19 - packages/backend/src/lib/host-config.ts | 18 - packages/backend/src/lib/middleware.ts | 101 - packages/backend/src/lib/mongo.ts | 11 - packages/backend/src/lib/plugin.ts | 13 - packages/backend/src/lib/pub-sub.ts | 35 - packages/backend/src/lib/session.ts | 269 - packages/backend/src/lib/trpc.ts | 33 - packages/backend/src/lib/utils.ts | 135 - packages/backend/src/lib/workspace.ts | 220 - packages/backend/src/plugins/database.ts | 120 - packages/backend/src/plugins/email.ts | 218 - .../handlers/content-group-created.ts | 32 - .../git-sync/handlers/content-group-moved.ts | 154 - .../handlers/content-group-removed.ts | 34 - .../handlers/content-group-updated.ts | 73 - .../handlers/content-piece-created.ts | 42 - .../git-sync/handlers/content-piece-moved.ts | 112 - .../handlers/content-piece-removed.ts | 24 - .../handlers/content-piece-updated.ts | 108 - .../backend/src/plugins/git-sync/index.ts | 112 - .../backend/src/plugins/git-sync/utils.ts | 122 - packages/backend/src/plugins/host-config.ts | 45 - packages/backend/src/plugins/index.ts | 11 - packages/backend/src/plugins/oauth.ts | 126 - packages/backend/src/plugins/pub-sub.ts | 71 - .../backend/src/plugins/route-callbacks.ts | 67 - packages/backend/src/plugins/s3.ts | 30 - .../src/plugins/search/content/bulk-upsert.ts | 129 - .../src/plugins/search/content/delete.ts | 93 - .../src/plugins/search/content/upsert.ts | 62 - packages/backend/src/plugins/search/index.ts | 370 - packages/backend/src/plugins/search/utils.ts | 295 - packages/backend/src/plugins/session.ts | 77 - packages/backend/src/plugins/trpc.ts | 20 - packages/backend/src/plugins/webhooks.ts | 179 - .../routes/auth/handlers/change-password.ts | 44 - .../routes/auth/handlers/init-two-factor.ts | 33 - .../src/routes/auth/handlers/is-signed-in.ts | 16 - .../backend/src/routes/auth/handlers/login.ts | 39 - .../src/routes/auth/handlers/logout.ts | 12 - .../src/routes/auth/handlers/refresh-token.ts | 21 - .../src/routes/auth/handlers/register.ts | 80 - .../routes/auth/handlers/send-magic-link.ts | 54 - .../routes/auth/handlers/switch-workspace.ts | 26 - packages/backend/src/routes/auth/index.ts | 73 - packages/backend/src/routes/auth/utils.ts | 28 - .../comments/handlers/create-comment.ts | 54 - .../routes/comments/handlers/create-thread.ts | 43 - .../comments/handlers/delete-comment.ts | 43 - .../routes/comments/handlers/delete-thread.ts | 32 - .../routes/comments/handlers/get-thread.ts | 29 - .../routes/comments/handlers/list-comments.ts | 56 - .../routes/comments/handlers/list-threads.ts | 57 - .../comments/handlers/resolve-thread.ts | 39 - .../comments/handlers/update-comment.ts | 43 - packages/backend/src/routes/comments/index.ts | 91 - packages/backend/src/routes/comments/utils.ts | 79 - .../routes/content-groups/handlers/create.ts | 87 - .../routes/content-groups/handlers/delete.ts | 114 - .../src/routes/content-groups/handlers/get.ts | 82 - .../content-groups/handlers/list-ancestors.ts | 36 - .../routes/content-groups/handlers/list.ts | 96 - .../routes/content-groups/handlers/move.ts | 147 - .../routes/content-groups/handlers/reorder.ts | 78 - .../routes/content-groups/handlers/update.ts | 168 - .../src/routes/content-groups/index.ts | 100 - .../src/routes/content-groups/utils.ts | 28 - .../routes/content-pieces/handlers/create.ts | 142 - .../routes/content-pieces/handlers/delete.ts | 88 - .../src/routes/content-pieces/handlers/get.ts | 133 - .../routes/content-pieces/handlers/list.ts | 206 - .../routes/content-pieces/handlers/move.ts | 166 - .../routes/content-pieces/handlers/update.ts | 218 - .../src/routes/content-pieces/index.ts | 85 - .../src/routes/content-pieces/utils.ts | 24 - .../routes/extensions/handlers/configure.ts | 40 - .../routes/extensions/handlers/get-data.ts | 20 - .../src/routes/extensions/handlers/get.ts | 25 - .../src/routes/extensions/handlers/install.ts | 75 - .../src/routes/extensions/handlers/list.ts | 61 - .../routes/extensions/handlers/uninstall.ts | 33 - .../handlers/update-content-piece-data.ts | 64 - .../routes/extensions/handlers/update-data.ts | 25 - .../backend/src/routes/extensions/index.ts | 105 - .../backend/src/routes/git/handlers/commit.ts | 126 - .../src/routes/git/handlers/configure.ts | 79 - .../src/routes/git/handlers/get-config.ts | 33 - .../src/routes/git/handlers/initial-sync.ts | 208 - .../backend/src/routes/git/handlers/pull.ts | 550 -- .../src/routes/git/handlers/reset-config.ts | 17 - .../routes/git/handlers/resolve-conflict.ts | 128 - packages/backend/src/routes/git/index.ts | 90 - packages/backend/src/routes/index.ts | 61 - .../src/routes/roles/handlers/create.ts | 34 - .../src/routes/roles/handlers/delete.ts | 59 - .../backend/src/routes/roles/handlers/get.ts | 53 - .../backend/src/routes/roles/handlers/list.ts | 69 - .../src/routes/roles/handlers/update.ts | 45 - packages/backend/src/routes/roles/index.ts | 71 - .../backend/src/routes/search/handlers/ask.ts | 61 - .../src/routes/search/handlers/search.ts | 67 - packages/backend/src/routes/search/index.ts | 35 - .../src/routes/snippets/handlers/create.ts | 50 - .../src/routes/snippets/handlers/delete.ts | 31 - .../src/routes/snippets/handlers/get.ts | 53 - .../src/routes/snippets/handlers/list.ts | 56 - .../src/routes/snippets/handlers/update.ts | 68 - packages/backend/src/routes/snippets/index.ts | 71 - .../src/routes/tags/handlers/create.ts | 33 - .../src/routes/tags/handlers/delete.ts | 57 - .../backend/src/routes/tags/handlers/get.ts | 28 - .../backend/src/routes/tags/handlers/list.ts | 58 - .../src/routes/tags/handlers/search.ts | 29 - .../src/routes/tags/handlers/update.ts | 41 - packages/backend/src/routes/tags/index.ts | 78 - .../src/routes/tokens/handlers/create.ts | 33 - .../src/routes/tokens/handlers/delete.ts | 26 - .../backend/src/routes/tokens/handlers/get.ts | 29 - .../src/routes/tokens/handlers/list.ts | 74 - .../src/routes/tokens/handlers/regenerate.ts | 44 - .../src/routes/tokens/handlers/update.ts | 36 - packages/backend/src/routes/tokens/index.ts | 69 - .../routes/transformers/handlers/create.ts | 31 - .../routes/transformers/handlers/delete.ts | 33 - .../src/routes/transformers/handlers/list.ts | 38 - .../backend/src/routes/transformers/index.ts | 49 - .../handlers/get-workspace-id.ts | 28 - .../src/routes/user-settings/handlers/get.ts | 22 - .../routes/user-settings/handlers/update.ts | 26 - .../backend/src/routes/user-settings/index.ts | 46 - .../backend/src/routes/users/handlers/get.ts | 37 - .../src/routes/users/handlers/update.ts | 78 - packages/backend/src/routes/users/index.ts | 35 - .../src/routes/utils/handlers/autocomplete.ts | 53 - .../src/routes/utils/handlers/generate-css.ts | 57 - .../src/routes/utils/handlers/host-config.ts | 10 - .../src/routes/utils/handlers/link-preview.ts | 157 - packages/backend/src/routes/utils/index.ts | 36 - .../src/routes/variants/handlers/create.ts | 29 - .../src/routes/variants/handlers/delete.ts | 63 - .../src/routes/variants/handlers/list.ts | 25 - .../src/routes/variants/handlers/update.ts | 25 - packages/backend/src/routes/variants/index.ts | 61 - .../handlers/verify-email-change.ts | 76 - .../verification/handlers/verify-email.ts | 76 - .../handlers/verify-magic-link.ts | 46 - .../handlers/verify-password-change.ts | 59 - .../handlers/verify-workspace-invite.ts | 97 - .../backend/src/routes/verification/index.ts | 44 - .../src/routes/versions/handlers/diff.ts | 104 - .../src/routes/versions/handlers/get.ts | 66 - .../src/routes/versions/handlers/list.ts | 112 - .../src/routes/versions/handlers/restore.ts | 51 - .../src/routes/versions/handlers/update.ts | 49 - packages/backend/src/routes/versions/index.ts | 48 - .../src/routes/webhooks/handlers/create.ts | 40 - .../src/routes/webhooks/handlers/delete.ts | 27 - .../src/routes/webhooks/handlers/get.ts | 48 - .../src/routes/webhooks/handlers/list.ts | 93 - .../routes/webhooks/handlers/reveal-secret.ts | 26 - .../src/routes/webhooks/handlers/update.ts | 47 - packages/backend/src/routes/webhooks/index.ts | 79 - .../workspace-memberships/handlers/delete.ts | 31 - .../workspace-memberships/handlers/get.ts | 37 - .../workspace-memberships/handlers/leave.ts | 26 - .../handlers/list-members.ts | 116 - .../handlers/list-workspaces.ts | 118 - .../handlers/search-members.ts | 60 - .../handlers/send-invite.ts | 75 - .../workspace-memberships/handlers/update.ts | 77 - .../src/routes/workspace-memberships/index.ts | 95 - .../src/routes/workspace-memberships/utils.ts | 57 - .../routes/workspace-settings/handlers/get.ts | 28 - .../handlers/prettier-schema.ts | 11 - .../workspace-settings/handlers/update.ts | 46 - .../src/routes/workspace-settings/index.ts | 45 - .../src/routes/workspaces/handlers/create.ts | 25 - .../src/routes/workspaces/handlers/delete.ts | 17 - .../src/routes/workspaces/handlers/get.ts | 28 - .../src/routes/workspaces/handlers/update.ts | 31 - .../backend/src/routes/workspaces/index.ts | 54 - packages/backend/src/server.ts | 31 - packages/backend/tsconfig.json | 17 - 739 files changed, 1 insertion(+), 79196 deletions(-) delete mode 100644 apps/backend/api/.env.example delete mode 100644 apps/backend/api/Dockerfile delete mode 100644 apps/backend/api/package.json delete mode 100644 apps/backend/api/src/api.ts delete mode 100644 apps/backend/api/src/index.ts delete mode 100644 apps/backend/api/tsconfig.json delete mode 100644 apps/backend/app/.env.example delete mode 100644 apps/backend/app/Dockerfile delete mode 100644 apps/backend/app/package.json delete mode 100644 apps/backend/app/src/app.ts delete mode 100644 apps/backend/app/src/index.ts delete mode 100644 apps/backend/app/tsconfig.json delete mode 100644 apps/backend/assets/.env.example delete mode 100644 apps/backend/assets/Dockerfile delete mode 100644 apps/backend/assets/package.json delete mode 100644 apps/backend/assets/src/assets.ts delete mode 100644 apps/backend/assets/src/index.ts delete mode 100644 apps/backend/assets/tsconfig.json delete mode 100644 apps/backend/collaboration/.env.example delete mode 100644 apps/backend/collaboration/Dockerfile delete mode 100644 apps/backend/collaboration/package.json delete mode 100644 apps/backend/collaboration/src/extensions/git-sync.ts delete mode 100644 apps/backend/collaboration/src/extensions/search-indexing.ts delete mode 100644 apps/backend/collaboration/src/extensions/version-history.ts delete mode 100644 apps/backend/collaboration/src/index.ts delete mode 100644 apps/backend/collaboration/src/writing.ts delete mode 100644 apps/backend/collaboration/tsconfig.json delete mode 100644 apps/backend/extensions/.env.example delete mode 100644 apps/backend/extensions/package.json delete mode 100644 apps/backend/extensions/src/extensions.ts delete mode 100644 apps/backend/extensions/src/index.ts delete mode 100644 apps/backend/extensions/src/routes/dev/index.ts delete mode 100644 apps/backend/extensions/src/routes/dev/transformer.ts delete mode 100644 apps/backend/extensions/src/routes/gpt.ts delete mode 100644 apps/backend/extensions/src/routes/hashnode/index.ts delete mode 100644 apps/backend/extensions/src/routes/hashnode/transformer.ts delete mode 100644 apps/backend/extensions/src/routes/index.ts delete mode 100644 apps/backend/extensions/src/routes/mdx/index.ts delete mode 100644 apps/backend/extensions/src/routes/mdx/input-transformer.ts delete mode 100644 apps/backend/extensions/src/routes/mdx/output-transformer.ts delete mode 100644 apps/backend/extensions/src/routes/medium/index.ts delete mode 100644 apps/backend/extensions/src/routes/medium/transformer.ts delete mode 100644 apps/backend/extensions/tsconfig.json delete mode 100644 apps/backend/usage-reporting/Dockerfile delete mode 100644 apps/backend/usage-reporting/LICENSE.md delete mode 100644 apps/backend/usage-reporting/package.json delete mode 100644 apps/backend/usage-reporting/src/index.ts delete mode 100644 apps/backend/usage-reporting/tsconfig.json delete mode 100644 apps/docs/.astro/icon.d.ts delete mode 100644 apps/docs/.astro/settings.json delete mode 100644 apps/docs/.astro/types.d.ts delete mode 100644 apps/docs/.gitignore delete mode 100644 apps/docs/.vscode/extensions.json delete mode 100644 apps/docs/.vscode/launch.json delete mode 100644 apps/docs/LICENSE.md delete mode 100644 apps/docs/README.md delete mode 100644 apps/docs/astro.config.ts delete mode 100644 apps/docs/package.json delete mode 100644 apps/docs/public/_redirects delete mode 100644 apps/docs/public/favicon.svg delete mode 100644 apps/docs/public/meta-image.png delete mode 100644 apps/docs/public/nunito-latin-ext-variable-wghtOnly-normal.woff2 delete mode 100644 apps/docs/public/nunito-latin-variable-wghtOnly-normal.woff2 delete mode 100644 apps/docs/src/assets/icons/discord.ts delete mode 100644 apps/docs/src/assets/icons/index.ts delete mode 100644 apps/docs/src/assets/icons/logo.ts delete mode 100644 apps/docs/src/assets/json/dark-theme.json delete mode 100644 apps/docs/src/assets/json/light-theme.json delete mode 100644 apps/docs/src/components/content/card-grid.astro delete mode 100644 apps/docs/src/components/content/card.astro delete mode 100644 apps/docs/src/components/content/endpoint-card/endpoint-card-sections.tsx delete mode 100644 apps/docs/src/components/content/endpoint-card/endpoint-card.astro delete mode 100644 apps/docs/src/components/content/endpoint-card/index.ts delete mode 100644 apps/docs/src/components/content/endpoint-card/openapi-spec.ts delete mode 100644 apps/docs/src/components/content/endpoint-card/param-description.tsx delete mode 100644 apps/docs/src/components/content/endpoint-card/rehype-examples.ts delete mode 100644 apps/docs/src/components/content/endpoint-card/request-example.astro delete mode 100644 apps/docs/src/components/content/endpoint-card/request-examples.tsx delete mode 100644 apps/docs/src/components/content/endpoint-card/response-example.astro delete mode 100644 apps/docs/src/components/content/endpoint-card/utils.ts delete mode 100644 apps/docs/src/components/content/important.astro delete mode 100644 apps/docs/src/components/content/index.ts delete mode 100644 apps/docs/src/components/content/info.astro delete mode 100644 apps/docs/src/components/fragments/analytics.tsx delete mode 100644 apps/docs/src/components/fragments/base-head.astro delete mode 100644 apps/docs/src/components/fragments/footer.tsx delete mode 100644 apps/docs/src/components/fragments/header.tsx delete mode 100644 apps/docs/src/components/fragments/index.ts delete mode 100644 apps/docs/src/components/fragments/on-this-page.tsx delete mode 100644 apps/docs/src/components/fragments/scrollbar-width.tsx delete mode 100644 apps/docs/src/components/fragments/search-palette.tsx delete mode 100644 apps/docs/src/components/fragments/side-bar.tsx delete mode 100644 apps/docs/src/components/fragments/svg-defs.tsx delete mode 100644 apps/docs/src/components/layouts/default.astro delete mode 100644 apps/docs/src/components/layouts/index.ts delete mode 100644 apps/docs/src/components/primitives/image.tsx delete mode 100644 apps/docs/src/components/primitives/index.tsx delete mode 100644 apps/docs/src/content/api/authentication.md delete mode 100644 apps/docs/src/content/api/content-groups.mdx delete mode 100644 apps/docs/src/content/api/content-pieces.mdx delete mode 100644 apps/docs/src/content/api/extension.mdx delete mode 100644 apps/docs/src/content/api/profile.mdx delete mode 100644 apps/docs/src/content/api/roles.mdx delete mode 100644 apps/docs/src/content/api/search.mdx delete mode 100644 apps/docs/src/content/api/tags.mdx delete mode 100644 apps/docs/src/content/api/transformers.mdx delete mode 100644 apps/docs/src/content/api/user-settings.mdx delete mode 100644 apps/docs/src/content/api/variants.mdx delete mode 100644 apps/docs/src/content/api/webhooks.mdx delete mode 100644 apps/docs/src/content/api/workspace-memberships.mdx delete mode 100644 apps/docs/src/content/api/workspace-settings.mdx delete mode 100644 apps/docs/src/content/api/workspace.mdx delete mode 100644 apps/docs/src/content/config.ts delete mode 100644 apps/docs/src/content/docs/getting-started/concepts.mdx delete mode 100644 apps/docs/src/content/docs/getting-started/introduction.mdx delete mode 100644 apps/docs/src/content/docs/javascript-sdk/javascript-sdk.md delete mode 100644 apps/docs/src/content/docs/self-hosting/configuration.mdx delete mode 100644 apps/docs/src/content/docs/self-hosting/docker.mdx delete mode 100644 apps/docs/src/content/docs/usage-guide/configuring-vrite.md delete mode 100644 apps/docs/src/content/docs/usage-guide/content-editor.md delete mode 100644 apps/docs/src/content/docs/usage-guide/extensions/introduction.mdx delete mode 100644 apps/docs/src/content/docs/usage-guide/extensions/official-extensions/dev.mdx delete mode 100644 apps/docs/src/content/docs/usage-guide/extensions/official-extensions/gpt.mdx delete mode 100644 apps/docs/src/content/docs/usage-guide/extensions/official-extensions/hashnode.mdx delete mode 100644 apps/docs/src/content/docs/usage-guide/extensions/official-extensions/mdx.mdx delete mode 100644 apps/docs/src/content/docs/usage-guide/extensions/official-extensions/medium.mdx delete mode 100644 apps/docs/src/content/docs/usage-guide/metadata.md delete mode 100644 apps/docs/src/content/docs/usage-guide/navigation/command-palette.md delete mode 100644 apps/docs/src/content/docs/usage-guide/navigation/dashboard.md delete mode 100644 apps/docs/src/content/docs/usage-guide/navigation/explorer.md delete mode 100644 apps/docs/src/content/docs/usage-guide/navigation/navigation.mdx delete mode 100644 apps/docs/src/env.d.ts delete mode 100644 apps/docs/src/lib/state.ts delete mode 100644 apps/docs/src/pages/[...slug].astro delete mode 100644 apps/docs/src/styles/base.css delete mode 100644 apps/docs/src/styles/styles.scss delete mode 100644 apps/docs/tsconfig.json delete mode 100644 apps/docs/unocss-preset-forms.config.js delete mode 100644 apps/docs/unocss.config.js delete mode 100644 apps/landing-page/.astro/settings.json delete mode 100644 apps/landing-page/.env.example delete mode 100644 apps/landing-page/.gitignore delete mode 100644 apps/landing-page/.npmrc delete mode 100644 apps/landing-page/.vscode/extensions.json delete mode 100644 apps/landing-page/.vscode/launch.json delete mode 100644 apps/landing-page/LICENSE.md delete mode 100644 apps/landing-page/README.md delete mode 100644 apps/landing-page/astro.config.mjs delete mode 100644 apps/landing-page/package.json delete mode 100644 apps/landing-page/public/favicon.svg delete mode 100644 apps/landing-page/public/meta-image.png delete mode 100644 apps/landing-page/src/assets/images/dark/customize.png delete mode 100644 apps/landing-page/src/assets/images/dark/editor.png delete mode 100644 apps/landing-page/src/assets/images/dark/explorer.png delete mode 100644 apps/landing-page/src/assets/images/dark/extensions.png delete mode 100644 apps/landing-page/src/assets/images/dark/hero.png delete mode 100644 apps/landing-page/src/assets/images/dark/hybrid-editor.png delete mode 100644 apps/landing-page/src/assets/images/dark/kanban-view.png delete mode 100644 apps/landing-page/src/assets/images/dark/roles.png delete mode 100644 apps/landing-page/src/assets/images/dark/search-small.png delete mode 100644 apps/landing-page/src/assets/images/dark/search.png delete mode 100644 apps/landing-page/src/assets/images/dark/table-view.png delete mode 100644 apps/landing-page/src/assets/images/light/customize.png delete mode 100644 apps/landing-page/src/assets/images/light/editor.png delete mode 100644 apps/landing-page/src/assets/images/light/explorer.png delete mode 100644 apps/landing-page/src/assets/images/light/extensions.png delete mode 100644 apps/landing-page/src/assets/images/light/hero.png delete mode 100644 apps/landing-page/src/assets/images/light/hybrid-editor.png delete mode 100644 apps/landing-page/src/assets/images/light/roles.png delete mode 100644 apps/landing-page/src/assets/images/light/search-small.png delete mode 100644 apps/landing-page/src/assets/images/light/search.png delete mode 100644 apps/landing-page/src/assets/images/light/table-view.png delete mode 100644 apps/landing-page/src/components/fragments/analytics.tsx delete mode 100644 apps/landing-page/src/components/fragments/base-head.astro delete mode 100644 apps/landing-page/src/components/fragments/footer.astro delete mode 100644 apps/landing-page/src/components/fragments/header.tsx delete mode 100644 apps/landing-page/src/components/fragments/index.ts delete mode 100644 apps/landing-page/src/components/fragments/observed.tsx delete mode 100644 apps/landing-page/src/components/fragments/pagination-menu.tsx delete mode 100644 apps/landing-page/src/components/fragments/parallax-card.tsx delete mode 100644 apps/landing-page/src/components/fragments/section-headline.astro delete mode 100644 apps/landing-page/src/components/fragments/section.astro delete mode 100644 apps/landing-page/src/components/fragments/svg-defs.astro delete mode 100644 apps/landing-page/src/components/primitives/image.tsx delete mode 100644 apps/landing-page/src/components/primitives/index.ts delete mode 100644 apps/landing-page/src/components/sections/customize/features-grid.tsx delete mode 100644 apps/landing-page/src/components/sections/customize/index.astro delete mode 100644 apps/landing-page/src/components/sections/editor/index.astro delete mode 100644 apps/landing-page/src/components/sections/get-started/cta-grid.tsx delete mode 100644 apps/landing-page/src/components/sections/get-started/index.astro delete mode 100644 apps/landing-page/src/components/sections/headless/features-carousel.tsx delete mode 100644 apps/landing-page/src/components/sections/headless/index.astro delete mode 100644 apps/landing-page/src/components/sections/headless/secondary-feature-card.tsx delete mode 100644 apps/landing-page/src/components/sections/hero/index.astro delete mode 100644 apps/landing-page/src/components/sections/hero/scroll-indicator.tsx delete mode 100644 apps/landing-page/src/components/sections/index.ts delete mode 100644 apps/landing-page/src/components/sections/manage/index.astro delete mode 100644 apps/landing-page/src/components/sections/pricing/index.astro delete mode 100644 apps/landing-page/src/components/sections/pricing/pricing-card.tsx delete mode 100644 apps/landing-page/src/components/sections/pricing/pricing-plans.tsx delete mode 100644 apps/landing-page/src/components/sections/search/index.astro delete mode 100644 apps/landing-page/src/env.d.ts delete mode 100644 apps/landing-page/src/icons/javascript.ts delete mode 100644 apps/landing-page/src/icons/linkedin.ts delete mode 100644 apps/landing-page/src/icons/logo.ts delete mode 100644 apps/landing-page/src/icons/open-source.ts delete mode 100644 apps/landing-page/src/icons/sdk.ts delete mode 100644 apps/landing-page/src/lib/email.ts delete mode 100644 apps/landing-page/src/lib/ref.ts delete mode 100644 apps/landing-page/src/lib/utils.ts delete mode 100644 apps/landing-page/src/pages/blog/[slug].astro delete mode 100644 apps/landing-page/src/pages/blog/index.astro delete mode 100644 apps/landing-page/src/pages/blog/page/[page].astro delete mode 100644 apps/landing-page/src/pages/index.astro delete mode 100644 apps/landing-page/src/pages/pricing.astro delete mode 100644 apps/landing-page/src/pages/privacy.astro delete mode 100644 apps/landing-page/src/pages/tos.astro delete mode 100644 apps/landing-page/src/styles/base.css delete mode 100644 apps/landing-page/src/styles/blog.scss delete mode 100644 apps/landing-page/tsconfig.json delete mode 100644 apps/landing-page/unocss.config.js delete mode 100644 apps/web/index.html delete mode 100644 apps/web/package.json delete mode 100644 apps/web/public/favicon.svg delete mode 100644 apps/web/public/icons/512.png delete mode 100644 apps/web/public/icons/favicon.png delete mode 100644 apps/web/public/jetbrains-mono-wghtOnly-normal.woff2 delete mode 100644 apps/web/public/manifest.json delete mode 100644 apps/web/public/nunito-latin-ext-variable-wghtOnly-normal.woff2 delete mode 100644 apps/web/public/nunito-latin-variable-wghtOnly-normal.woff2 delete mode 100644 apps/web/public/sandbox.js delete mode 100644 apps/web/scripts/sandbox.ts delete mode 100644 apps/web/src/app.tsx delete mode 100644 apps/web/src/assets/icons/api.ts delete mode 100644 apps/web/src/assets/icons/codesandbox.ts delete mode 100644 apps/web/src/assets/icons/discord.ts delete mode 100644 apps/web/src/assets/icons/drag-vertical.ts delete mode 100644 apps/web/src/assets/icons/google.ts delete mode 100644 apps/web/src/assets/icons/hashnode.ts delete mode 100644 apps/web/src/assets/icons/index.ts delete mode 100644 apps/web/src/assets/icons/logo.ts delete mode 100644 apps/web/src/assets/icons/mdx.ts delete mode 100644 apps/web/src/assets/icons/sidebar-collapse.ts delete mode 100644 apps/web/src/assets/json/dark-theme.json delete mode 100644 apps/web/src/assets/json/light-theme.json delete mode 100644 apps/web/src/components/fragments/collapsible-section.tsx delete mode 100644 apps/web/src/components/fragments/index.tsx delete mode 100644 apps/web/src/components/fragments/input-field.tsx delete mode 100644 apps/web/src/components/fragments/mini-code-editor.tsx delete mode 100644 apps/web/src/components/fragments/mini-editor.tsx delete mode 100644 apps/web/src/components/fragments/scroll-shadow.tsx delete mode 100644 apps/web/src/components/fragments/searchable-select.tsx delete mode 100644 apps/web/src/components/fragments/svg-defs.tsx delete mode 100644 apps/web/src/components/primitives/draggable.tsx delete mode 100644 apps/web/src/components/primitives/droppable.tsx delete mode 100644 apps/web/src/components/primitives/index.ts delete mode 100644 apps/web/src/components/primitives/sortable.tsx delete mode 100644 apps/web/src/context/appearance.tsx delete mode 100644 apps/web/src/context/authenticated-user-data.tsx delete mode 100644 apps/web/src/context/client.tsx delete mode 100644 apps/web/src/context/command-palette/index.tsx delete mode 100644 apps/web/src/context/comments.tsx delete mode 100644 apps/web/src/context/confirmation-modal.tsx delete mode 100644 apps/web/src/context/content/actions.ts delete mode 100644 apps/web/src/context/content/index.tsx delete mode 100644 apps/web/src/context/content/loader.ts delete mode 100644 apps/web/src/context/extensions.tsx delete mode 100644 apps/web/src/context/history.tsx delete mode 100644 apps/web/src/context/host-config.tsx delete mode 100644 apps/web/src/context/index.tsx delete mode 100644 apps/web/src/context/local-storage.tsx delete mode 100644 apps/web/src/context/meta.tsx delete mode 100644 apps/web/src/context/notifications.tsx delete mode 100644 apps/web/src/context/shared-state.tsx delete mode 100644 apps/web/src/context/snippets.tsx delete mode 100644 apps/web/src/ee/LICENSE.md delete mode 100644 apps/web/src/ee/index.ts delete mode 100644 apps/web/src/ee/settings/billing/api-usage-card.tsx delete mode 100644 apps/web/src/ee/settings/billing/change-plan-card.tsx delete mode 100644 apps/web/src/ee/settings/billing/index.tsx delete mode 100644 apps/web/src/ee/settings/billing/price-tag.tsx delete mode 100644 apps/web/src/ee/settings/index.ts delete mode 100644 apps/web/src/ee/subscription-banner.tsx delete mode 100644 apps/web/src/index.tsx delete mode 100644 apps/web/src/layout/bottom-menu.tsx delete mode 100644 apps/web/src/layout/index.ts delete mode 100644 apps/web/src/layout/secured-layout.tsx delete mode 100644 apps/web/src/layout/side-panel-right.tsx delete mode 100644 apps/web/src/layout/side-panel.tsx delete mode 100644 apps/web/src/layout/sidebar-menu.tsx delete mode 100644 apps/web/src/layout/toolbar/breadcrumb.tsx delete mode 100644 apps/web/src/layout/toolbar/export-menu.tsx delete mode 100644 apps/web/src/layout/toolbar/index.tsx delete mode 100644 apps/web/src/layout/toolbar/restore-version.tsx delete mode 100644 apps/web/src/layout/toolbar/right-panel-menu.tsx delete mode 100644 apps/web/src/layout/toolbar/user-list.tsx delete mode 100644 apps/web/src/layout/walkthrough.tsx delete mode 100644 apps/web/src/lib/code-editor/format.ts delete mode 100644 apps/web/src/lib/code-editor/index.ts delete mode 100644 apps/web/src/lib/code-editor/suggest-language.ts delete mode 100644 apps/web/src/lib/editor/editing.ts delete mode 100644 apps/web/src/lib/editor/extensions/auto-dir.ts delete mode 100644 apps/web/src/lib/editor/extensions/autocomplete/decoration.ts delete mode 100644 apps/web/src/lib/editor/extensions/autocomplete/index.tsx delete mode 100644 apps/web/src/lib/editor/extensions/autocomplete/ui.tsx delete mode 100644 apps/web/src/lib/editor/extensions/block-action-menu/component.tsx delete mode 100644 apps/web/src/lib/editor/extensions/block-action-menu/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/block-action-menu/options.tsx delete mode 100644 apps/web/src/lib/editor/extensions/block-action-menu/plugin.tsx delete mode 100644 apps/web/src/lib/editor/extensions/block-paste.ts delete mode 100644 apps/web/src/lib/editor/extensions/code-block/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/code-block/menu.tsx delete mode 100644 apps/web/src/lib/editor/extensions/code-block/node.tsx delete mode 100644 apps/web/src/lib/editor/extensions/code-block/view.tsx delete mode 100644 apps/web/src/lib/editor/extensions/collab-cursor.tsx delete mode 100644 apps/web/src/lib/editor/extensions/collaboration/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/collaboration/sync-plugin.js delete mode 100644 apps/web/src/lib/editor/extensions/comment-menu/comment-card.tsx delete mode 100644 apps/web/src/lib/editor/extensions/comment-menu/comment-input.tsx delete mode 100644 apps/web/src/lib/editor/extensions/comment-menu/comment-thread.tsx delete mode 100644 apps/web/src/lib/editor/extensions/comment-menu/component.tsx delete mode 100644 apps/web/src/lib/editor/extensions/comment-menu/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/comment-menu/plugin.tsx delete mode 100644 apps/web/src/lib/editor/extensions/diff.ts delete mode 100644 apps/web/src/lib/editor/extensions/draggable-text.ts delete mode 100644 apps/web/src/lib/editor/extensions/element/custom-node-view.tsx delete mode 100644 apps/web/src/lib/editor/extensions/element/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/element/node.tsx delete mode 100644 apps/web/src/lib/editor/extensions/element/selection.ts delete mode 100644 apps/web/src/lib/editor/extensions/element/utils.ts delete mode 100644 apps/web/src/lib/editor/extensions/element/view-manager.ts delete mode 100644 apps/web/src/lib/editor/extensions/element/xml-node-view.tsx delete mode 100644 apps/web/src/lib/editor/extensions/embed/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/embed/menu.tsx delete mode 100644 apps/web/src/lib/editor/extensions/embed/node.ts delete mode 100644 apps/web/src/lib/editor/extensions/embed/view.tsx delete mode 100644 apps/web/src/lib/editor/extensions/image/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/image/menu.tsx delete mode 100644 apps/web/src/lib/editor/extensions/image/node.ts delete mode 100644 apps/web/src/lib/editor/extensions/image/view.tsx delete mode 100644 apps/web/src/lib/editor/extensions/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/link-preview/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/link-preview/plugin.ts delete mode 100644 apps/web/src/lib/editor/extensions/link-preview/wrapper.tsx delete mode 100644 apps/web/src/lib/editor/extensions/placeholder.ts delete mode 100644 apps/web/src/lib/editor/extensions/shortcuts.ts delete mode 100644 apps/web/src/lib/editor/extensions/slash-menu/component.tsx delete mode 100644 apps/web/src/lib/editor/extensions/slash-menu/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/slash-menu/plugin.ts delete mode 100644 apps/web/src/lib/editor/extensions/table-menu/component.tsx delete mode 100644 apps/web/src/lib/editor/extensions/table-menu/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/table-menu/plugin.tsx delete mode 100644 apps/web/src/lib/editor/extensions/trailing-node.ts delete mode 100644 apps/web/src/lib/editor/extensions/xml-node-menu/component.tsx delete mode 100644 apps/web/src/lib/editor/extensions/xml-node-menu/editor.tsx delete mode 100644 apps/web/src/lib/editor/extensions/xml-node-menu/index.ts delete mode 100644 apps/web/src/lib/editor/extensions/xml-node-menu/plugin.tsx delete mode 100644 apps/web/src/lib/editor/index.ts delete mode 100644 apps/web/src/lib/extensions/component-renderer.tsx delete mode 100644 apps/web/src/lib/extensions/extension-view-renderer.tsx delete mode 100644 apps/web/src/lib/extensions/index.ts delete mode 100644 apps/web/src/lib/extensions/sandbox.ts delete mode 100644 apps/web/src/lib/monaco.ts delete mode 100644 apps/web/src/lib/utils/breakpoints.ts delete mode 100644 apps/web/src/lib/utils/embeds.ts delete mode 100644 apps/web/src/lib/utils/general.ts delete mode 100644 apps/web/src/lib/utils/index.ts delete mode 100644 apps/web/src/lib/utils/ref.ts delete mode 100644 apps/web/src/lib/utils/selection.tsx delete mode 100644 apps/web/src/lib/utils/tags.tsx delete mode 100644 apps/web/src/lib/utils/upload-file.ts delete mode 100644 apps/web/src/lib/utils/validate.ts delete mode 100644 apps/web/src/styles/index.ts delete mode 100644 apps/web/src/styles/styles.css delete mode 100644 apps/web/src/styles/styles.scss delete mode 100644 apps/web/src/typings.d.ts delete mode 100644 apps/web/src/views/auth/error-messages.tsx delete mode 100644 apps/web/src/views/auth/index.tsx delete mode 100644 apps/web/src/views/auth/magic-link.tsx delete mode 100644 apps/web/src/views/auth/password.tsx delete mode 100644 apps/web/src/views/auth/view.tsx delete mode 100644 apps/web/src/views/comments/index.tsx delete mode 100644 apps/web/src/views/conflict/index.tsx delete mode 100644 apps/web/src/views/content-piece/description.tsx delete mode 100644 apps/web/src/views/content-piece/index.tsx delete mode 100644 apps/web/src/views/content-piece/sections/custom-data.tsx delete mode 100644 apps/web/src/views/content-piece/sections/details/canonical-link.tsx delete mode 100644 apps/web/src/views/content-piece/sections/details/date.tsx delete mode 100644 apps/web/src/views/content-piece/sections/details/filename.tsx delete mode 100644 apps/web/src/views/content-piece/sections/details/index.tsx delete mode 100644 apps/web/src/views/content-piece/sections/details/members-dropdown.tsx delete mode 100644 apps/web/src/views/content-piece/sections/details/members.tsx delete mode 100644 apps/web/src/views/content-piece/sections/details/slug.tsx delete mode 100644 apps/web/src/views/content-piece/sections/details/tags-dropdown.tsx delete mode 100644 apps/web/src/views/content-piece/sections/details/tags.tsx delete mode 100644 apps/web/src/views/content-piece/sections/extensions.tsx delete mode 100644 apps/web/src/views/content-piece/sections/index.ts delete mode 100644 apps/web/src/views/content-piece/title.tsx delete mode 100644 apps/web/src/views/dashboard/dashboard-context.tsx delete mode 100644 apps/web/src/views/dashboard/index.tsx delete mode 100644 apps/web/src/views/dashboard/kanban/content-group-column.tsx delete mode 100644 apps/web/src/views/dashboard/kanban/content-piece-card.tsx delete mode 100644 apps/web/src/views/dashboard/kanban/index.tsx delete mode 100644 apps/web/src/views/dashboard/table/content-piece-group.tsx delete mode 100644 apps/web/src/views/dashboard/table/content-piece-row.tsx delete mode 100644 apps/web/src/views/dashboard/table/index.tsx delete mode 100644 apps/web/src/views/dashboard/table/table-header.tsx delete mode 100644 apps/web/src/views/dashboard/table/table-view-context.tsx delete mode 100644 apps/web/src/views/editor/content-piece-editor.tsx delete mode 100644 apps/web/src/views/editor/diff-editor/change-indicators.tsx delete mode 100644 apps/web/src/views/editor/diff-editor/index.tsx delete mode 100644 apps/web/src/views/editor/editor.tsx delete mode 100644 apps/web/src/views/editor/index.tsx delete mode 100644 apps/web/src/views/editor/menus/bubble/block.tsx delete mode 100644 apps/web/src/views/editor/menus/bubble/format.tsx delete mode 100644 apps/web/src/views/editor/menus/bubble/index.tsx delete mode 100644 apps/web/src/views/editor/menus/bubble/link.tsx delete mode 100644 apps/web/src/views/editor/menus/bubble/select.tsx delete mode 100644 apps/web/src/views/editor/menus/bubble/table.tsx delete mode 100644 apps/web/src/views/editor/menus/floating/index.tsx delete mode 100644 apps/web/src/views/editor/menus/index.ts delete mode 100644 apps/web/src/views/editor/menus/link-preview/index.tsx delete mode 100644 apps/web/src/views/editor/snippet-editor.tsx delete mode 100644 apps/web/src/views/editor/version-editor.tsx delete mode 100644 apps/web/src/views/explorer/content-group-row.tsx delete mode 100644 apps/web/src/views/explorer/content-piece-row.tsx delete mode 100644 apps/web/src/views/explorer/explorer-context.tsx delete mode 100644 apps/web/src/views/explorer/index.tsx delete mode 100644 apps/web/src/views/explorer/new-group-button.tsx delete mode 100644 apps/web/src/views/explorer/tree-level.tsx delete mode 100644 apps/web/src/views/extension/index.tsx delete mode 100644 apps/web/src/views/extensions/extension-card.tsx delete mode 100644 apps/web/src/views/extensions/extension-configuration-view.tsx delete mode 100644 apps/web/src/views/extensions/extension-icon.tsx delete mode 100644 apps/web/src/views/extensions/extensions-menu-view.tsx delete mode 100644 apps/web/src/views/extensions/extensions-url-install-view.tsx delete mode 100644 apps/web/src/views/extensions/index.tsx delete mode 100644 apps/web/src/views/getting-started/index.tsx delete mode 100644 apps/web/src/views/git/index.tsx delete mode 100644 apps/web/src/views/git/initial-setup-view.tsx delete mode 100644 apps/web/src/views/git/provider-configuration-view/github.tsx delete mode 100644 apps/web/src/views/git/provider-configuration-view/index.tsx delete mode 100644 apps/web/src/views/git/providers.ts delete mode 100644 apps/web/src/views/git/sync-view/index.tsx delete mode 100644 apps/web/src/views/history/history-context.tsx delete mode 100644 apps/web/src/views/history/history-entry.tsx delete mode 100644 apps/web/src/views/history/index.tsx delete mode 100644 apps/web/src/views/settings/api/configure-action.tsx delete mode 100644 apps/web/src/views/settings/api/configure-subsection.tsx delete mode 100644 apps/web/src/views/settings/api/index.tsx delete mode 100644 apps/web/src/views/settings/appearance.tsx delete mode 100644 apps/web/src/views/settings/editor/index.tsx delete mode 100644 apps/web/src/views/settings/editor/options.ts delete mode 100644 apps/web/src/views/settings/image-upload.tsx delete mode 100644 apps/web/src/views/settings/index.tsx delete mode 100644 apps/web/src/views/settings/menu.tsx delete mode 100644 apps/web/src/views/settings/metadata.tsx delete mode 100644 apps/web/src/views/settings/profile.tsx delete mode 100644 apps/web/src/views/settings/security.tsx delete mode 100644 apps/web/src/views/settings/transformers/configure-subsection.tsx delete mode 100644 apps/web/src/views/settings/transformers/index.tsx delete mode 100644 apps/web/src/views/settings/variants/configure-subsection.tsx delete mode 100644 apps/web/src/views/settings/variants/index.tsx delete mode 100644 apps/web/src/views/settings/view.tsx delete mode 100644 apps/web/src/views/settings/webhooks/configure-webhook-subsection.tsx delete mode 100644 apps/web/src/views/settings/webhooks/events.ts delete mode 100644 apps/web/src/views/settings/webhooks/index.tsx delete mode 100644 apps/web/src/views/settings/workspace/configure-role-subsection.tsx delete mode 100644 apps/web/src/views/settings/workspace/index.tsx delete mode 100644 apps/web/src/views/settings/workspace/information-card.tsx delete mode 100644 apps/web/src/views/settings/workspace/invite-member-subsection.tsx delete mode 100644 apps/web/src/views/settings/workspace/members-card.tsx delete mode 100644 apps/web/src/views/settings/workspace/roles-card.tsx delete mode 100644 apps/web/src/views/snippets/index.tsx delete mode 100644 apps/web/src/views/snippets/new-snippet-button.tsx delete mode 100644 apps/web/src/views/snippets/snippet-entry.tsx delete mode 100644 apps/web/src/views/snippets/snippets-context.tsx delete mode 100644 apps/web/src/views/verify/index.tsx delete mode 100644 apps/web/src/views/workspaces/create-workspace-subsection.tsx delete mode 100644 apps/web/src/views/workspaces/index.tsx delete mode 100644 apps/web/src/views/workspaces/overlay.tsx delete mode 100644 apps/web/src/views/workspaces/view.tsx delete mode 100644 apps/web/tsconfig.json delete mode 100644 apps/web/unocss-preset-forms.config.js delete mode 100644 apps/web/unocss.config.js delete mode 100644 apps/web/vite.config.mts delete mode 100644 packages/backend/package.json delete mode 100644 packages/backend/src/assets/initial-content.json delete mode 100644 packages/backend/src/collections/comment-threads.ts delete mode 100644 packages/backend/src/collections/comments.ts delete mode 100644 packages/backend/src/collections/content-groups.ts delete mode 100644 packages/backend/src/collections/content-piece-variants.ts delete mode 100644 packages/backend/src/collections/content-pieces.ts delete mode 100644 packages/backend/src/collections/content-variants.ts delete mode 100644 packages/backend/src/collections/content-versions.ts delete mode 100644 packages/backend/src/collections/contents.ts delete mode 100644 packages/backend/src/collections/extensions.ts delete mode 100644 packages/backend/src/collections/git-data.ts delete mode 100644 packages/backend/src/collections/index.ts delete mode 100644 packages/backend/src/collections/roles.ts delete mode 100644 packages/backend/src/collections/snippet-contents.ts delete mode 100644 packages/backend/src/collections/snippets.ts delete mode 100644 packages/backend/src/collections/tags.ts delete mode 100644 packages/backend/src/collections/tokens.ts delete mode 100644 packages/backend/src/collections/transformers.ts delete mode 100644 packages/backend/src/collections/user-settings.ts delete mode 100644 packages/backend/src/collections/users.ts delete mode 100644 packages/backend/src/collections/variants.ts delete mode 100644 packages/backend/src/collections/versions.ts delete mode 100644 packages/backend/src/collections/webhooks.ts delete mode 100644 packages/backend/src/collections/workspace-memberships.ts delete mode 100644 packages/backend/src/collections/workspace-settings.ts delete mode 100644 packages/backend/src/collections/workspaces.ts delete mode 100644 packages/backend/src/ee/LICENSE.md delete mode 100644 packages/backend/src/ee/billing/index.ts delete mode 100644 packages/backend/src/ee/billing/plugin.ts delete mode 100644 packages/backend/src/ee/billing/route.ts delete mode 100644 packages/backend/src/ee/index.ts delete mode 100644 packages/backend/src/env.ts delete mode 100644 packages/backend/src/events/comment.ts delete mode 100644 packages/backend/src/events/content-group.ts delete mode 100644 packages/backend/src/events/content-piece.ts delete mode 100644 packages/backend/src/events/extension.ts delete mode 100644 packages/backend/src/events/git-data.ts delete mode 100644 packages/backend/src/events/index.ts delete mode 100644 packages/backend/src/events/role.ts delete mode 100644 packages/backend/src/events/snippet.ts delete mode 100644 packages/backend/src/events/tag.ts delete mode 100644 packages/backend/src/events/token.ts delete mode 100644 packages/backend/src/events/transformer.ts delete mode 100644 packages/backend/src/events/user-settings.ts delete mode 100644 packages/backend/src/events/user.ts delete mode 100644 packages/backend/src/events/variant.ts delete mode 100644 packages/backend/src/events/versions.ts delete mode 100644 packages/backend/src/events/webhook.ts delete mode 100644 packages/backend/src/events/workspace-membership.ts delete mode 100644 packages/backend/src/events/workspace-settings.ts delete mode 100644 packages/backend/src/events/workspace.ts delete mode 100644 packages/backend/src/index.ts delete mode 100644 packages/backend/src/lib/auth.ts delete mode 100644 packages/backend/src/lib/content-processing/conversions.ts delete mode 100644 packages/backend/src/lib/content-processing/diff.ts delete mode 100644 packages/backend/src/lib/content-processing/index.ts delete mode 100644 packages/backend/src/lib/context.ts delete mode 100644 packages/backend/src/lib/errors.ts delete mode 100644 packages/backend/src/lib/git-sync/index.ts delete mode 100644 packages/backend/src/lib/git-sync/process-content.ts delete mode 100644 packages/backend/src/lib/git-sync/provider.ts delete mode 100644 packages/backend/src/lib/git-sync/providers/github/commit.ts delete mode 100644 packages/backend/src/lib/git-sync/providers/github/index.ts delete mode 100644 packages/backend/src/lib/git-sync/providers/github/initial-sync.ts delete mode 100644 packages/backend/src/lib/git-sync/providers/github/pull.ts delete mode 100644 packages/backend/src/lib/git-sync/providers/github/requests.ts delete mode 100644 packages/backend/src/lib/git-sync/providers/index.ts delete mode 100644 packages/backend/src/lib/hash.ts delete mode 100644 packages/backend/src/lib/host-config.ts delete mode 100644 packages/backend/src/lib/middleware.ts delete mode 100644 packages/backend/src/lib/mongo.ts delete mode 100644 packages/backend/src/lib/plugin.ts delete mode 100644 packages/backend/src/lib/pub-sub.ts delete mode 100644 packages/backend/src/lib/session.ts delete mode 100644 packages/backend/src/lib/trpc.ts delete mode 100644 packages/backend/src/lib/utils.ts delete mode 100644 packages/backend/src/lib/workspace.ts delete mode 100644 packages/backend/src/plugins/database.ts delete mode 100644 packages/backend/src/plugins/email.ts delete mode 100644 packages/backend/src/plugins/git-sync/handlers/content-group-created.ts delete mode 100644 packages/backend/src/plugins/git-sync/handlers/content-group-moved.ts delete mode 100644 packages/backend/src/plugins/git-sync/handlers/content-group-removed.ts delete mode 100644 packages/backend/src/plugins/git-sync/handlers/content-group-updated.ts delete mode 100644 packages/backend/src/plugins/git-sync/handlers/content-piece-created.ts delete mode 100644 packages/backend/src/plugins/git-sync/handlers/content-piece-moved.ts delete mode 100644 packages/backend/src/plugins/git-sync/handlers/content-piece-removed.ts delete mode 100644 packages/backend/src/plugins/git-sync/handlers/content-piece-updated.ts delete mode 100644 packages/backend/src/plugins/git-sync/index.ts delete mode 100644 packages/backend/src/plugins/git-sync/utils.ts delete mode 100644 packages/backend/src/plugins/host-config.ts delete mode 100644 packages/backend/src/plugins/index.ts delete mode 100644 packages/backend/src/plugins/oauth.ts delete mode 100644 packages/backend/src/plugins/pub-sub.ts delete mode 100644 packages/backend/src/plugins/route-callbacks.ts delete mode 100644 packages/backend/src/plugins/s3.ts delete mode 100644 packages/backend/src/plugins/search/content/bulk-upsert.ts delete mode 100644 packages/backend/src/plugins/search/content/delete.ts delete mode 100644 packages/backend/src/plugins/search/content/upsert.ts delete mode 100644 packages/backend/src/plugins/search/index.ts delete mode 100644 packages/backend/src/plugins/search/utils.ts delete mode 100644 packages/backend/src/plugins/session.ts delete mode 100644 packages/backend/src/plugins/trpc.ts delete mode 100644 packages/backend/src/plugins/webhooks.ts delete mode 100644 packages/backend/src/routes/auth/handlers/change-password.ts delete mode 100644 packages/backend/src/routes/auth/handlers/init-two-factor.ts delete mode 100644 packages/backend/src/routes/auth/handlers/is-signed-in.ts delete mode 100644 packages/backend/src/routes/auth/handlers/login.ts delete mode 100644 packages/backend/src/routes/auth/handlers/logout.ts delete mode 100644 packages/backend/src/routes/auth/handlers/refresh-token.ts delete mode 100644 packages/backend/src/routes/auth/handlers/register.ts delete mode 100644 packages/backend/src/routes/auth/handlers/send-magic-link.ts delete mode 100644 packages/backend/src/routes/auth/handlers/switch-workspace.ts delete mode 100644 packages/backend/src/routes/auth/index.ts delete mode 100644 packages/backend/src/routes/auth/utils.ts delete mode 100644 packages/backend/src/routes/comments/handlers/create-comment.ts delete mode 100644 packages/backend/src/routes/comments/handlers/create-thread.ts delete mode 100644 packages/backend/src/routes/comments/handlers/delete-comment.ts delete mode 100644 packages/backend/src/routes/comments/handlers/delete-thread.ts delete mode 100644 packages/backend/src/routes/comments/handlers/get-thread.ts delete mode 100644 packages/backend/src/routes/comments/handlers/list-comments.ts delete mode 100644 packages/backend/src/routes/comments/handlers/list-threads.ts delete mode 100644 packages/backend/src/routes/comments/handlers/resolve-thread.ts delete mode 100644 packages/backend/src/routes/comments/handlers/update-comment.ts delete mode 100644 packages/backend/src/routes/comments/index.ts delete mode 100644 packages/backend/src/routes/comments/utils.ts delete mode 100644 packages/backend/src/routes/content-groups/handlers/create.ts delete mode 100644 packages/backend/src/routes/content-groups/handlers/delete.ts delete mode 100644 packages/backend/src/routes/content-groups/handlers/get.ts delete mode 100644 packages/backend/src/routes/content-groups/handlers/list-ancestors.ts delete mode 100644 packages/backend/src/routes/content-groups/handlers/list.ts delete mode 100644 packages/backend/src/routes/content-groups/handlers/move.ts delete mode 100644 packages/backend/src/routes/content-groups/handlers/reorder.ts delete mode 100644 packages/backend/src/routes/content-groups/handlers/update.ts delete mode 100644 packages/backend/src/routes/content-groups/index.ts delete mode 100644 packages/backend/src/routes/content-groups/utils.ts delete mode 100644 packages/backend/src/routes/content-pieces/handlers/create.ts delete mode 100644 packages/backend/src/routes/content-pieces/handlers/delete.ts delete mode 100644 packages/backend/src/routes/content-pieces/handlers/get.ts delete mode 100644 packages/backend/src/routes/content-pieces/handlers/list.ts delete mode 100644 packages/backend/src/routes/content-pieces/handlers/move.ts delete mode 100644 packages/backend/src/routes/content-pieces/handlers/update.ts delete mode 100644 packages/backend/src/routes/content-pieces/index.ts delete mode 100644 packages/backend/src/routes/content-pieces/utils.ts delete mode 100644 packages/backend/src/routes/extensions/handlers/configure.ts delete mode 100644 packages/backend/src/routes/extensions/handlers/get-data.ts delete mode 100644 packages/backend/src/routes/extensions/handlers/get.ts delete mode 100644 packages/backend/src/routes/extensions/handlers/install.ts delete mode 100644 packages/backend/src/routes/extensions/handlers/list.ts delete mode 100644 packages/backend/src/routes/extensions/handlers/uninstall.ts delete mode 100644 packages/backend/src/routes/extensions/handlers/update-content-piece-data.ts delete mode 100644 packages/backend/src/routes/extensions/handlers/update-data.ts delete mode 100644 packages/backend/src/routes/extensions/index.ts delete mode 100644 packages/backend/src/routes/git/handlers/commit.ts delete mode 100644 packages/backend/src/routes/git/handlers/configure.ts delete mode 100644 packages/backend/src/routes/git/handlers/get-config.ts delete mode 100644 packages/backend/src/routes/git/handlers/initial-sync.ts delete mode 100644 packages/backend/src/routes/git/handlers/pull.ts delete mode 100644 packages/backend/src/routes/git/handlers/reset-config.ts delete mode 100644 packages/backend/src/routes/git/handlers/resolve-conflict.ts delete mode 100644 packages/backend/src/routes/git/index.ts delete mode 100644 packages/backend/src/routes/index.ts delete mode 100644 packages/backend/src/routes/roles/handlers/create.ts delete mode 100644 packages/backend/src/routes/roles/handlers/delete.ts delete mode 100644 packages/backend/src/routes/roles/handlers/get.ts delete mode 100644 packages/backend/src/routes/roles/handlers/list.ts delete mode 100644 packages/backend/src/routes/roles/handlers/update.ts delete mode 100644 packages/backend/src/routes/roles/index.ts delete mode 100644 packages/backend/src/routes/search/handlers/ask.ts delete mode 100644 packages/backend/src/routes/search/handlers/search.ts delete mode 100644 packages/backend/src/routes/search/index.ts delete mode 100644 packages/backend/src/routes/snippets/handlers/create.ts delete mode 100644 packages/backend/src/routes/snippets/handlers/delete.ts delete mode 100644 packages/backend/src/routes/snippets/handlers/get.ts delete mode 100644 packages/backend/src/routes/snippets/handlers/list.ts delete mode 100644 packages/backend/src/routes/snippets/handlers/update.ts delete mode 100644 packages/backend/src/routes/snippets/index.ts delete mode 100644 packages/backend/src/routes/tags/handlers/create.ts delete mode 100644 packages/backend/src/routes/tags/handlers/delete.ts delete mode 100644 packages/backend/src/routes/tags/handlers/get.ts delete mode 100644 packages/backend/src/routes/tags/handlers/list.ts delete mode 100644 packages/backend/src/routes/tags/handlers/search.ts delete mode 100644 packages/backend/src/routes/tags/handlers/update.ts delete mode 100644 packages/backend/src/routes/tags/index.ts delete mode 100644 packages/backend/src/routes/tokens/handlers/create.ts delete mode 100644 packages/backend/src/routes/tokens/handlers/delete.ts delete mode 100644 packages/backend/src/routes/tokens/handlers/get.ts delete mode 100644 packages/backend/src/routes/tokens/handlers/list.ts delete mode 100644 packages/backend/src/routes/tokens/handlers/regenerate.ts delete mode 100644 packages/backend/src/routes/tokens/handlers/update.ts delete mode 100644 packages/backend/src/routes/tokens/index.ts delete mode 100644 packages/backend/src/routes/transformers/handlers/create.ts delete mode 100644 packages/backend/src/routes/transformers/handlers/delete.ts delete mode 100644 packages/backend/src/routes/transformers/handlers/list.ts delete mode 100644 packages/backend/src/routes/transformers/index.ts delete mode 100644 packages/backend/src/routes/user-settings/handlers/get-workspace-id.ts delete mode 100644 packages/backend/src/routes/user-settings/handlers/get.ts delete mode 100644 packages/backend/src/routes/user-settings/handlers/update.ts delete mode 100644 packages/backend/src/routes/user-settings/index.ts delete mode 100644 packages/backend/src/routes/users/handlers/get.ts delete mode 100644 packages/backend/src/routes/users/handlers/update.ts delete mode 100644 packages/backend/src/routes/users/index.ts delete mode 100644 packages/backend/src/routes/utils/handlers/autocomplete.ts delete mode 100644 packages/backend/src/routes/utils/handlers/generate-css.ts delete mode 100644 packages/backend/src/routes/utils/handlers/host-config.ts delete mode 100644 packages/backend/src/routes/utils/handlers/link-preview.ts delete mode 100644 packages/backend/src/routes/utils/index.ts delete mode 100644 packages/backend/src/routes/variants/handlers/create.ts delete mode 100644 packages/backend/src/routes/variants/handlers/delete.ts delete mode 100644 packages/backend/src/routes/variants/handlers/list.ts delete mode 100644 packages/backend/src/routes/variants/handlers/update.ts delete mode 100644 packages/backend/src/routes/variants/index.ts delete mode 100644 packages/backend/src/routes/verification/handlers/verify-email-change.ts delete mode 100644 packages/backend/src/routes/verification/handlers/verify-email.ts delete mode 100644 packages/backend/src/routes/verification/handlers/verify-magic-link.ts delete mode 100644 packages/backend/src/routes/verification/handlers/verify-password-change.ts delete mode 100644 packages/backend/src/routes/verification/handlers/verify-workspace-invite.ts delete mode 100644 packages/backend/src/routes/verification/index.ts delete mode 100644 packages/backend/src/routes/versions/handlers/diff.ts delete mode 100644 packages/backend/src/routes/versions/handlers/get.ts delete mode 100644 packages/backend/src/routes/versions/handlers/list.ts delete mode 100644 packages/backend/src/routes/versions/handlers/restore.ts delete mode 100644 packages/backend/src/routes/versions/handlers/update.ts delete mode 100644 packages/backend/src/routes/versions/index.ts delete mode 100644 packages/backend/src/routes/webhooks/handlers/create.ts delete mode 100644 packages/backend/src/routes/webhooks/handlers/delete.ts delete mode 100644 packages/backend/src/routes/webhooks/handlers/get.ts delete mode 100644 packages/backend/src/routes/webhooks/handlers/list.ts delete mode 100644 packages/backend/src/routes/webhooks/handlers/reveal-secret.ts delete mode 100644 packages/backend/src/routes/webhooks/handlers/update.ts delete mode 100644 packages/backend/src/routes/webhooks/index.ts delete mode 100644 packages/backend/src/routes/workspace-memberships/handlers/delete.ts delete mode 100644 packages/backend/src/routes/workspace-memberships/handlers/get.ts delete mode 100644 packages/backend/src/routes/workspace-memberships/handlers/leave.ts delete mode 100644 packages/backend/src/routes/workspace-memberships/handlers/list-members.ts delete mode 100644 packages/backend/src/routes/workspace-memberships/handlers/list-workspaces.ts delete mode 100644 packages/backend/src/routes/workspace-memberships/handlers/search-members.ts delete mode 100644 packages/backend/src/routes/workspace-memberships/handlers/send-invite.ts delete mode 100644 packages/backend/src/routes/workspace-memberships/handlers/update.ts delete mode 100644 packages/backend/src/routes/workspace-memberships/index.ts delete mode 100644 packages/backend/src/routes/workspace-memberships/utils.ts delete mode 100644 packages/backend/src/routes/workspace-settings/handlers/get.ts delete mode 100644 packages/backend/src/routes/workspace-settings/handlers/prettier-schema.ts delete mode 100644 packages/backend/src/routes/workspace-settings/handlers/update.ts delete mode 100644 packages/backend/src/routes/workspace-settings/index.ts delete mode 100644 packages/backend/src/routes/workspaces/handlers/create.ts delete mode 100644 packages/backend/src/routes/workspaces/handlers/delete.ts delete mode 100644 packages/backend/src/routes/workspaces/handlers/get.ts delete mode 100644 packages/backend/src/routes/workspaces/handlers/update.ts delete mode 100644 packages/backend/src/routes/workspaces/index.ts delete mode 100644 packages/backend/src/server.ts delete mode 100644 packages/backend/tsconfig.json diff --git a/.gitignore b/.gitignore index 8e9a8e70..087b2d68 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ dist # misc .DS_Store *.pem +.temp # debug npm-debug.log* diff --git a/apps/backend/api/.env.example b/apps/backend/api/.env.example deleted file mode 100644 index 37300b8c..00000000 --- a/apps/backend/api/.env.example +++ /dev/null @@ -1 +0,0 @@ -PORT=4444 \ No newline at end of file diff --git a/apps/backend/api/Dockerfile b/apps/backend/api/Dockerfile deleted file mode 100644 index 79256fe7..00000000 --- a/apps/backend/api/Dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -FROM node:18-alpine as base - -FROM base AS builder -WORKDIR /app -RUN apk add --no-cache libc6-compat && npm install -g turbo - -COPY . . - -RUN turbo prune @vrite/api --docker - - -FROM base as installer -WORKDIR /app - -RUN npm install -g pnpm@8.6.0 -RUN npm install -g turbo - -COPY --from=builder /app/out/json/ . -COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml -RUN pnpm i --frozen-lockfile - -COPY --from=builder /app/out/full/ . - -RUN pnpm rebuild -r -RUN turbo run build --filter=@vrite/api - -FROM base AS runner -WORKDIR /app - -# Install extra dependencies -RUN npm install saslprep -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 app - -USER app -COPY --from=installer --chown=app:nodejs /app/apps/backend/api/dist . -CMD node index.js diff --git a/apps/backend/api/package.json b/apps/backend/api/package.json deleted file mode 100644 index ef7a1198..00000000 --- a/apps/backend/api/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "@vrite/api", - "private": true, - "source": "src/index.ts", - "main": "index.ts", - "scripts": { - "dev": "scripts dev-node src/index.ts", - "build": "scripts build-node src/index.ts", - "start": "node ./dist/index.js" - }, - "dependencies": { - "@fastify/cors": "^9.0.1", - "@fastify/rate-limit": "^9.1.0", - "@trpc/server": "^10.45.0", - "@vrite/backend": "workspace:*", - "fastify": "^4.26.0", - "trpc-openapi": "^1.2.0" - }, - "devDependencies": { - "@vrite/scripts": "workspace:*" - } -} diff --git a/apps/backend/api/src/api.ts b/apps/backend/api/src/api.ts deleted file mode 100644 index e325d00a..00000000 --- a/apps/backend/api/src/api.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { createPlugin, appRouter, createContext } from "@vrite/backend"; -import rateLimitPlugin from "@fastify/rate-limit"; -import { - createOpenApiNodeHttpHandler, - CreateOpenApiNodeHttpHandlerOptions -} from "trpc-openapi/dist/adapters/node-http/core"; -import corsPlugin from "@fastify/cors"; -import { OpenApiRouter } from "trpc-openapi"; -import { AnyRouter } from "@trpc/server"; -import { FastifyInstance, FastifyReply, FastifyRequest } from "fastify"; - -type CreateOpenApiFastifyPluginOptions = - CreateOpenApiNodeHttpHandlerOptions & { - basePath?: `/${string}`; - }; - -const fastifyTRPCOpenApiPlugin = ( - fastify: FastifyInstance, - opts: CreateOpenApiFastifyPluginOptions, - done: (err?: Error) => void -): void => { - let prefix = opts.basePath ?? ""; - - if (prefix.endsWith("/")) { - prefix = prefix.slice(0, -1); - } - - const openApiHttpHandler = createOpenApiNodeHttpHandler(opts); - - fastify.route({ - method: ["GET", "DELETE", "PUT", "POST"], - url: `${prefix}/*`, - async handler(request, reply) { - const prefixRemovedFromUrl = request.url.replace(fastify.prefix, "").replace(prefix, ""); - - request.raw.url = prefixRemovedFromUrl; - - return await openApiHttpHandler( - request, - Object.assign(reply, { - setHeader: (key: string, value: string | number | readonly string[]) => { - if (Array.isArray(value)) { - value.forEach((v) => reply.header(key, v)); - - return reply; - } - - return reply.header(key, value); - }, - end: (body: any) => reply.send(body) // eslint-disable-line @typescript-eslint/no-explicit-any - }) - ); - } - }); - done(); -}; -const apiService = createPlugin(async (fastify) => { - await fastify.register(rateLimitPlugin, { - max: 500, - timeWindow: "1 minute", - redis: fastify.redis - }); - await fastify.register(corsPlugin, { - origin: true, - credentials: true, - methods: ["GET", "DELETE", "PUT", "POST"] - }); - await fastify.register(fastifyTRPCOpenApiPlugin, { - basePath: "/", - router: appRouter, - createContext({ req, res }: { req: FastifyRequest; res: FastifyReply }) { - return createContext({ req, res }, fastify); - } - }); -}); - -export { apiService }; diff --git a/apps/backend/api/src/index.ts b/apps/backend/api/src/index.ts deleted file mode 100644 index 67578ad2..00000000 --- a/apps/backend/api/src/index.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { apiService } from "./api"; -import { generateOpenApiDocument } from "trpc-openapi"; -import { - createServer, - appRouter, - OAuthPlugin, - databasePlugin, - emailPlugin, - gitSyncPlugin, - pubSubPlugin, - searchPlugin, - sessionPlugin, - webhooksPlugin, - billingPlugin -} from "@vrite/backend"; - -(async () => { - const server = await createServer(async (server) => { - await server.register(databasePlugin); - await server.register(pubSubPlugin); - await server.register(sessionPlugin).register(OAuthPlugin); - await server.register(emailPlugin); - await server.register(gitSyncPlugin); - await server.register(searchPlugin); - await server.register(webhooksPlugin); - await server.register(billingPlugin); - }); - - await server.register(apiService); - server.get("/swagger.json", (req, res) => { - res.send( - generateOpenApiDocument(appRouter, { - baseUrl: server.config.PUBLIC_API_URL, - title: "Vrite API", - version: "0.4.4" - }) - ); - }); - - return server.listen({ host: server.config.HOST, port: server.config.PORT }, (err) => { - if (err) { - server.log.error(err); - process.exit(1); - } - }); -})(); diff --git a/apps/backend/api/tsconfig.json b/apps/backend/api/tsconfig.json deleted file mode 100644 index 7a2c267b..00000000 --- a/apps/backend/api/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "esModuleInterop": true, - "moduleResolution": "node", - "isolatedModules": true, - "strict": true, - "outDir": "build", - "skipLibCheck": true, - "paths": { - "#*": ["./src/*"] - } - }, - "include": ["src/**/*.ts"] -} diff --git a/apps/backend/app/.env.example b/apps/backend/app/.env.example deleted file mode 100644 index f67ae32f..00000000 --- a/apps/backend/app/.env.example +++ /dev/null @@ -1 +0,0 @@ -PORT=3333 \ No newline at end of file diff --git a/apps/backend/app/Dockerfile b/apps/backend/app/Dockerfile deleted file mode 100644 index dca145d7..00000000 --- a/apps/backend/app/Dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -FROM node:18-alpine as base - -FROM base AS builder -WORKDIR /app -RUN apk add --no-cache libc6-compat && npm install -g turbo - -COPY . . - -RUN turbo prune @vrite/app --docker - - -FROM base as installer -WORKDIR /app - -RUN npm install -g pnpm@8.6.0 -RUN npm install -g turbo - -COPY --from=builder /app/out/json/ . -COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml -RUN pnpm i --frozen-lockfile - -COPY --from=builder /app/out/full/ . - -RUN pnpm rebuild -r -RUN turbo run build --filter=@vrite/app - -FROM base AS runner -WORKDIR /app - -# Install external dependencies -RUN npm install saslprep sharp -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 app - -USER app -COPY --from=installer --chown=app:nodejs /app/apps/backend/app/dist . -CMD node index.js diff --git a/apps/backend/app/package.json b/apps/backend/app/package.json deleted file mode 100644 index 4b29789f..00000000 --- a/apps/backend/app/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@vrite/app", - "private": true, - "source": "src/index.ts", - "main": "index.ts", - "scripts": { - "dev": "scripts dev-node src/index.ts", - "build": "scripts build-node src/index.ts && cp -rf ../../web/dist/ ./dist/public", - "start": "node ./dist/index.js" - }, - "dependencies": { - "@aws-sdk/client-s3": "^3.507.0", - "@fastify/multipart": "^8.1.0", - "@fastify/static": "^7.0.0", - "@fastify/view": "^8.2.0", - "@fastify/websocket": "^8.3.1", - "@types/mime-types": "^2.1.4", - "@vrite/backend": "workspace:*", - "axios": "^1.6.7", - "fastify": "^4.26.0", - "handlebars": "^4.7.8", - "mime-types": "^2.1.35", - "nanoid": "^5.0.5", - "sharp": "^0.33.2" - }, - "devDependencies": { - "@img/sharp-darwin-arm64": "^0.33.2", - "@vrite/scripts": "workspace:*", - "@vrite/web": "workspace:*" - } -} diff --git a/apps/backend/app/src/app.ts b/apps/backend/app/src/app.ts deleted file mode 100644 index 807449b0..00000000 --- a/apps/backend/app/src/app.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { createPlugin, errors, processAuth, trpcPlugin } from "@vrite/backend"; -import staticPlugin from "@fastify/static"; -import websocketPlugin from "@fastify/websocket"; -import viewPlugin from "@fastify/view"; -import handlebars from "handlebars"; -import { FastifyReply } from "fastify"; -import { nanoid } from "nanoid"; -import multipartPlugin from "@fastify/multipart"; -import mime from "mime-types"; -import sharp from "sharp"; -import { PutObjectCommand } from "@aws-sdk/client-s3"; -import path from "path"; - -const appService = createPlugin(async (fastify) => { - const renderPage = async (reply: FastifyReply): Promise => { - return reply.header("X-Frame-Options", "SAMEORIGIN").view("index.html", { - VRITE_CLOUD: process.env.VRITE_CLOUD, - PUBLIC_APP_URL: fastify.config.PUBLIC_APP_URL, - PUBLIC_API_URL: fastify.config.PUBLIC_API_URL, - PUBLIC_COLLAB_URL: fastify.config.PUBLIC_COLLAB_URL, - PUBLIC_ASSETS_URL: fastify.config.PUBLIC_ASSETS_URL, - PUBLIC_POSTHOG_TOKEN: fastify.config.PUBLIC_POSTHOG_TOKEN, - PUBLIC_DISABLE_ANALYTICS: fastify.config.PUBLIC_DISABLE_ANALYTICS - }); - }; - - await fastify.register(multipartPlugin, { - limits: { - fileSize: 10 * 1024 * 1024 - } - }); - await fastify.register(staticPlugin, { - root: path.join(__dirname, "public"), - prefix: "/" - }); - await fastify.register(websocketPlugin, { - options: { maxPayload: 1048576 } - }); - fastify.register(viewPlugin, { - root: path.join(__dirname, "public"), - engine: { - handlebars - }, - viewExt: "html" - }); - await fastify.register(trpcPlugin); - fastify.get("/", async (_request, reply) => { - return renderPage(reply); - }); - fastify.setNotFoundHandler(async (_request, reply) => { - return renderPage(reply); - }); - fastify.post<{ - Body: Buffer; - }>("/upload", async (req, res) => { - if (req.headers.origin) { - res.header("Access-Control-Allow-Origin", fastify.config.PUBLIC_APP_URL); - res.header("Access-Control-Allow-Methods", "GET"); - } else if ( - fastify.config.NODE_ENV !== "development" && - !fastify.config.PUBLIC_APP_URL.includes("localhost") - ) { - return res.status(400).send("Cannot upload from this origin"); - } - - try { - const auth = await processAuth({ db: fastify.mongo.db!, fastify, req, res }); - const data = await req.file(); - - if (!auth) throw errors.unauthorized(); - - const key = `${auth.data.workspaceId}/${nanoid()}.${ - mime.extension(data?.mimetype || "") || "" - }`; - const buffer = await data?.toBuffer(); - - if (!buffer) throw errors.badRequest(); - - const sanitizedBuffer = await sharp(buffer, { - animated: data?.mimetype === "image/gif" - }).toBuffer(); - const command = new PutObjectCommand({ - Bucket: fastify.config.S3_BUCKET, - Body: sanitizedBuffer, - Key: key, - ContentType: data?.mimetype, - CacheControl: "public,max-age=31536000,immutable", - ACL: "public-read" - }); - - await fastify.s3.send(command); - - return { - key - }; - } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - - throw errors.serverError(); - } - }); -}); - -export { appService }; diff --git a/apps/backend/app/src/index.ts b/apps/backend/app/src/index.ts deleted file mode 100644 index 604f0f9a..00000000 --- a/apps/backend/app/src/index.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { appService } from "./app"; -import { billingPlugin, createServer, webhooksPlugin } from "@vrite/backend"; -import { - databasePlugin, - pubSubPlugin, - gitSyncPlugin, - searchPlugin, - s3Plugin, - sessionPlugin, - OAuthPlugin, - emailPlugin -} from "@vrite/backend"; - -(async () => { - const server = await createServer(async (server) => { - await server.register(databasePlugin); - await server.register(pubSubPlugin); - await server.register(sessionPlugin).register(OAuthPlugin); - await server.register(emailPlugin); - await server.register(gitSyncPlugin); - await server.register(searchPlugin); - await server.register(webhooksPlugin); - await server.register(s3Plugin); - await server.register(billingPlugin); - }); - - await server.register(appService); - server.listen({ host: server.config.HOST, port: server.config.PORT }, (err) => { - if (err) { - server.log.error(err); - process.exit(1); - } - }); -})(); diff --git a/apps/backend/app/tsconfig.json b/apps/backend/app/tsconfig.json deleted file mode 100644 index 7a2c267b..00000000 --- a/apps/backend/app/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "esModuleInterop": true, - "moduleResolution": "node", - "isolatedModules": true, - "strict": true, - "outDir": "build", - "skipLibCheck": true, - "paths": { - "#*": ["./src/*"] - } - }, - "include": ["src/**/*.ts"] -} diff --git a/apps/backend/assets/.env.example b/apps/backend/assets/.env.example deleted file mode 100644 index ee3cfec9..00000000 --- a/apps/backend/assets/.env.example +++ /dev/null @@ -1 +0,0 @@ -PORT=8888 \ No newline at end of file diff --git a/apps/backend/assets/Dockerfile b/apps/backend/assets/Dockerfile deleted file mode 100644 index 5c4b1ef3..00000000 --- a/apps/backend/assets/Dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -FROM node:18-alpine as base - -FROM base AS builder -WORKDIR /app -RUN apk add --no-cache libc6-compat && npm install -g turbo - -COPY . . - -RUN turbo prune @vrite/assets --docker - - -FROM base as installer -WORKDIR /app - -RUN npm install -g pnpm@8.6.0 -RUN npm install -g turbo - -COPY --from=builder /app/out/json/ . -COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml -RUN pnpm i --frozen-lockfile - -COPY --from=builder /app/out/full/ . - -RUN pnpm rebuild -r -RUN turbo run build --filter=@vrite/assets - -FROM base AS runner -WORKDIR /app - -# Install extra dependencies -RUN npm install saslprep sharp -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 app - -USER app -COPY --from=installer --chown=app:nodejs /app/apps/backend/assets/dist . -CMD node index.js diff --git a/apps/backend/assets/package.json b/apps/backend/assets/package.json deleted file mode 100644 index 7e797037..00000000 --- a/apps/backend/assets/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "@vrite/assets", - "private": true, - "source": "src/index.ts", - "main": "index.ts", - "scripts": { - "dev": "scripts dev-node src/index.ts", - "build": "scripts build-node src/index.ts", - "start": "node ./dist/index.js" - }, - "dependencies": { - "@aws-sdk/client-s3": "^3.507.0", - "@fastify/rate-limit": "^9.1.0", - "@trpc/server": "^10.45.0", - "@vrite/backend": "workspace:*", - "fastify": "^4.26.0", - "sharp": "^0.33.2", - "trpc-openapi": "^1.2.0", - "zod": "^3.22.4" - }, - "devDependencies": { - "@img/sharp-darwin-arm64": "^0.33.2", - "@vrite/scripts": "workspace:*" - } -} diff --git a/apps/backend/assets/src/assets.ts b/apps/backend/assets/src/assets.ts deleted file mode 100644 index c78dc1ad..00000000 --- a/apps/backend/assets/src/assets.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { createPlugin } from "@vrite/backend"; -import rateLimitPlugin from "@fastify/rate-limit"; -import { GetObjectCommand } from "@aws-sdk/client-s3"; -import { z } from "zod"; -import sharp from "sharp"; - -const imageMimeTypes = { - jpg: "image/jpeg", - jpeg: "image/jpeg", - png: "image/png", - gif: "image/gif", - webp: "image/webp", - tiff: "image/tiff" -}; -const querystring = z.object({ - w: z.number().optional(), - h: z.number().optional(), - fit: z.enum(["cover", "contain", "fill"]).optional(), - format: z.enum(["jpg", "jpeg", "png", "gif", "webp", "tiff"]).optional() -}); -const assetsService = createPlugin(async (fastify) => { - await fastify.register(rateLimitPlugin, { - max: 1000, - timeWindow: "1 minute", - redis: fastify.redis - }); - fastify.get<{ - Params: { - workspaceId: string; - assetId: string; - }; - Querystring: { - w?: string; - h?: string; - fit?: "cover" | "contain" | "fill"; - format?: keyof typeof imageMimeTypes; - }; - }>("/:workspaceId/:assetId", async (req, reply) => { - const command = new GetObjectCommand({ - Bucket: fastify.config.S3_BUCKET, - Key: `${req.params.workspaceId}/${req.params.assetId}` - }); - const sourceResponse = await fastify.s3.send(command); - const sourceAsset = await sourceResponse.Body?.transformToByteArray(); - const sourceContentType = (sourceResponse.ContentType || "").toLowerCase(); - const sendSource = async (): Promise => { - await reply.header("Content-Type", sourceContentType).send(sourceAsset); - }; - - reply.header( - "Access-Control-Allow-Origin", - fastify.config.NODE_ENV === "development" ? "*" : fastify.config.PUBLIC_APP_URL - ); - reply.header("Access-Control-Allow-Methods", "GET"); - - if (!sourceAsset) return reply.status(404).send(); - - if (!Object.values(imageMimeTypes).includes(sourceContentType)) { - return sendSource(); - } - - try { - const options = querystring.parse({ - w: req.query.w ? parseInt(req.query.w) : undefined, - h: req.query.h ? parseInt(req.query.h) : undefined, - fit: req.query.fit, - format: req.query.format - }); - - if (!Object.keys(req.query).length) { - return sendSource(); - } - - const transformer = sharp(sourceAsset, { - animated: sourceContentType === imageMimeTypes.gif - }); - - if (options.w || options.h) { - transformer.resize({ - width: options.w, - height: options.h, - fit: options.fit - }); - } - - if (options.format) { - transformer.toFormat(options.format); - } - - return reply - .header("Content-Type", options.format ? imageMimeTypes[options.format] : sourceContentType) - .send(await transformer.toBuffer()); - } catch (e) { - return sendSource(); - } - }); -}); - -export { assetsService }; diff --git a/apps/backend/assets/src/index.ts b/apps/backend/assets/src/index.ts deleted file mode 100644 index a460fa22..00000000 --- a/apps/backend/assets/src/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { assetsService } from "./assets"; -import { createServer, s3Plugin } from "@vrite/backend"; - -(async () => { - const server = await createServer(async (server) => { - await server.register(s3Plugin); - }); - - await server.register(assetsService); - - return server.listen({ host: server.config.HOST, port: server.config.PORT }, (err) => { - if (err) { - server.log.error(err); - process.exit(1); - } - }); -})(); diff --git a/apps/backend/assets/tsconfig.json b/apps/backend/assets/tsconfig.json deleted file mode 100644 index 7a2c267b..00000000 --- a/apps/backend/assets/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "esModuleInterop": true, - "moduleResolution": "node", - "isolatedModules": true, - "strict": true, - "outDir": "build", - "skipLibCheck": true, - "paths": { - "#*": ["./src/*"] - } - }, - "include": ["src/**/*.ts"] -} diff --git a/apps/backend/collaboration/.env.example b/apps/backend/collaboration/.env.example deleted file mode 100644 index c4c6a53d..00000000 --- a/apps/backend/collaboration/.env.example +++ /dev/null @@ -1 +0,0 @@ -PORT=5555 \ No newline at end of file diff --git a/apps/backend/collaboration/Dockerfile b/apps/backend/collaboration/Dockerfile deleted file mode 100644 index e27da13f..00000000 --- a/apps/backend/collaboration/Dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -FROM node:18-alpine as base - -FROM base AS builder -WORKDIR /app -RUN apk add --no-cache libc6-compat && npm install -g turbo - -COPY . . - -RUN turbo prune @vrite/collaboration --docker - - -FROM base as installer -WORKDIR /app - -RUN npm install -g pnpm@8.6.0 -RUN npm install -g turbo - -COPY --from=builder /app/out/json/ . -COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml -RUN pnpm i --frozen-lockfile - -COPY --from=builder /app/out/full/ . - -RUN pnpm rebuild -r -RUN turbo run build --filter=@vrite/collaboration - -FROM base AS runner -WORKDIR /app - -# Install extra dependencies -RUN npm install saslprep -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 app - -USER app -COPY --from=installer --chown=app:nodejs /app/apps/backend/collaboration/dist . -CMD node index.js diff --git a/apps/backend/collaboration/package.json b/apps/backend/collaboration/package.json deleted file mode 100644 index c12244ab..00000000 --- a/apps/backend/collaboration/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "@vrite/collaboration", - "private": true, - "source": "src/index.ts", - "main": "index.ts", - "scripts": { - "dev": "scripts dev-node src/index.ts", - "build": "scripts build-node src/index.ts", - "start": "node ./dist/index.js" - }, - "dependencies": { - "@hocuspocus/extension-database": "^2.11.3", - "@hocuspocus/extension-redis": "^2.11.3", - "@hocuspocus/server": "^2.11.3", - "@vrite/backend": "workspace:*", - "@vrite/sdk": "workspace:*", - "dayjs": "^1.11.10", - "fastify": "^4.26.0", - "mongodb": "^6.3.0", - "y-protocols": "^1.0.6", - "yjs": "^13.6.11" - }, - "devDependencies": { - "@vrite/scripts": "workspace:*" - } -} diff --git a/apps/backend/collaboration/src/extensions/git-sync.ts b/apps/backend/collaboration/src/extensions/git-sync.ts deleted file mode 100644 index b691e9a6..00000000 --- a/apps/backend/collaboration/src/extensions/git-sync.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { Extension, onChangePayload, onDisconnectPayload } from "@hocuspocus/server"; -import { - createOutputContentProcessor, - docToJSON, - getContentPieceVariantsCollection, - getContentPiecesCollection, - getGitDataCollection, - jsonToBuffer, - publishGitDataEvent, - useGitProvider -} from "@vrite/backend"; -import { FastifyInstance } from "fastify"; -import { ObjectId } from "mongodb"; -import crypto from "node:crypto"; - -interface Configuration { - debounce: number | false | null; - debounceMaxWait: number; -} - -class GitSync implements Extension { - private configuration: Configuration = { - debounce: 2500, - debounceMaxWait: 10000 - }; - - private fastify: FastifyInstance; - - private gitDataCollection: ReturnType; - - private contentPiecesCollection: ReturnType; - - private contentPieceVariantsCollection: ReturnType; - - private debounced: Map = new Map(); - - public constructor(fastify: FastifyInstance, configuration?: Partial) { - this.fastify = fastify; - this.configuration = { - ...this.configuration, - ...configuration - }; - this.gitDataCollection = getGitDataCollection(fastify.mongo.db!); - this.contentPiecesCollection = getContentPiecesCollection(fastify.mongo.db!); - this.contentPieceVariantsCollection = getContentPieceVariantsCollection(fastify.mongo.db!); - } - - public async onDisconnect({ - documentName, - document, - context - }: onDisconnectPayload): Promise { - return this.debounceUpdate({ documentName, document, context }); - } - - public async onChange({ documentName, document, context }: onChangePayload): Promise { - return this.debounceUpdate({ documentName, document, context }); - } - - private debounceUpdate({ - documentName, - context, - document - }: Pick): void { - if ( - documentName.startsWith("workspace:") || - documentName.startsWith("snippet:") || - documentName.startsWith("version:") - ) { - return; - } - - const [contentPieceId, variantId = null] = documentName.split(":"); - const update = (): void => { - this.updateGitRecord(contentPieceId, variantId, { - context, - document - }); - }; - - this.debounce(documentName, update); - } - - private async updateGitRecord( - contentPieceId: string, - variantId: string | null, - details: Pick - ): Promise { - if (variantId) return; - - const ctx = { - db: this.fastify.mongo.db!, - auth: { - workspaceId: new ObjectId(`${details.context.workspaceId}`), - userId: new ObjectId(`${details.context.userId}`) - } - }; - const gitData = await this.gitDataCollection.findOne({ - workspaceId: new ObjectId(`${details.context.workspaceId}`) - }); - const gitProvider = useGitProvider(ctx, gitData); - - if (!gitData || !gitProvider) return; - - const contentPiece = await this.contentPiecesCollection.findOne({ - _id: new ObjectId(contentPieceId), - workspaceId: new ObjectId(`${details.context.workspaceId}`) - }); - - if (!contentPiece) return; - - const json = docToJSON(details.document); - const outputContentProcessor = await createOutputContentProcessor( - ctx, - gitProvider.data.transformer - ); - const output = await outputContentProcessor.process({ - buffer: jsonToBuffer(json), - contentPiece - }); - const currentHash = crypto.createHash("md5").update(output).digest("hex"); - - await this.gitDataCollection.updateOne( - { - "workspaceId": new ObjectId(details.context.workspaceId), - "records.contentPieceId": new ObjectId(contentPieceId) - }, - { - $set: { - "records.$.currentHash": currentHash - } - } - ); - publishGitDataEvent({ fastify: this.fastify }, `${details.context.workspaceId}`, { - action: "update", - data: { - records: gitData.records.map((record: any) => { - if (record.contentPieceId.toString() === contentPieceId) { - return { - ...record, - currentHash - }; - } - - return record; - }) - } - }); - } - - private debounce(id: string, func: Function): void { - const old = this.debounced.get(id); - const start = old?.start || Date.now(); - const run = (): void => { - this.debounced.delete(id); - func(); - }; - - if (old?.timeout) clearTimeout(old.timeout); - if (Date.now() - start >= this.configuration.debounceMaxWait) return run(); - - this.debounced.set(id, { - start, - timeout: setTimeout(run, this.configuration.debounce as number) - }); - } -} - -export { GitSync }; diff --git a/apps/backend/collaboration/src/extensions/search-indexing.ts b/apps/backend/collaboration/src/extensions/search-indexing.ts deleted file mode 100644 index a25e7841..00000000 --- a/apps/backend/collaboration/src/extensions/search-indexing.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { Extension, onChangePayload, onDisconnectPayload } from "@hocuspocus/server"; -import { docToBuffer, getContentPiecesCollection } from "@vrite/backend"; -import { FastifyInstance } from "fastify"; -import { ObjectId } from "mongodb"; - -interface Configuration { - debounce: number | false | null; - debounceMaxWait: number; -} -class SearchIndexing implements Extension { - private configuration: Configuration = { - debounce: 15000, - debounceMaxWait: 60000 - }; - - private fastify: FastifyInstance; - - private contentPiecesCollection: ReturnType; - - private debounced: Map = new Map(); - - public constructor(fastify: FastifyInstance, configuration?: Partial) { - this.fastify = fastify; - this.configuration = { - ...this.configuration, - ...configuration - }; - this.contentPiecesCollection = getContentPiecesCollection(fastify.mongo.db!); - } - - public async onDisconnect({ - documentName, - document, - context - }: onDisconnectPayload): Promise { - return this.debounceUpdate({ documentName, document, context }); - } - - public async onChange({ documentName, document, context }: onChangePayload): Promise { - return this.debounceUpdate({ documentName, document, context }); - } - - private debounceUpdate({ - documentName, - document, - context - }: Pick): void { - if ( - documentName.startsWith("workspace:") || - documentName.startsWith("snippet:") || - documentName.startsWith("version:") - ) { - return; - } - - const [contentPieceId, variantId] = documentName.split(":"); - const state = docToBuffer(document); - const update = (): void => { - this.upsertSearchContent(contentPieceId, { - workspaceId: context.workspaceId, - contentBuffer: state, - variantId - }); - }; - - this.debounce(documentName, update); - } - - private async upsertSearchContent( - contentPieceId: string, - details: { - contentBuffer: Buffer; - workspaceId: string; - variantId?: string; - } - ): Promise { - if (!this.fastify.hostConfig.search) return; - - const contentPiece = await this.contentPiecesCollection.findOne({ - _id: new ObjectId(contentPieceId), - workspaceId: new ObjectId(details.workspaceId) - }); - - if (!contentPiece) return; - - await this.fastify.search.content.upsert({ - contentPiece, - content: details.contentBuffer, - variantId: details.variantId, - workspaceId: details.workspaceId - }); - } - - private debounce(id: string, func: Function): void { - const old = this.debounced.get(id); - const start = old?.start || Date.now(); - const run = (): void => { - this.debounced.delete(id); - func(); - }; - - if (old?.timeout) clearTimeout(old.timeout); - if (Date.now() - start >= this.configuration.debounceMaxWait) return run(); - - this.debounced.set(id, { - start, - timeout: setTimeout(run, this.configuration.debounce as number) - }); - } -} - -export { SearchIndexing }; diff --git a/apps/backend/collaboration/src/extensions/version-history.ts b/apps/backend/collaboration/src/extensions/version-history.ts deleted file mode 100644 index 3c1b4bd6..00000000 --- a/apps/backend/collaboration/src/extensions/version-history.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { Extension, onChangePayload } from "@hocuspocus/server"; -import { - docToJSON, - getContentVersionsCollection, - getVersionsCollection, - jsonToBuffer, - publishVersionEvent, - fetchEntryMembers, - DocJSON -} from "@vrite/backend"; -import { FastifyInstance } from "fastify"; -import { Binary, ObjectId } from "mongodb"; -import dayjs from "dayjs"; - -interface Configuration { - debounce: number | false | null; -} - -class VersionHistory implements Extension { - private configuration: Configuration = { - debounce: 45000 - }; - - private fastify: FastifyInstance; - - private versionsCollection: ReturnType; - - private contentVersionsCollection: ReturnType; - - private debounced: Map = - new Map(); - - public constructor(fastify: FastifyInstance, configuration?: Partial) { - this.fastify = fastify; - this.configuration = { - ...this.configuration, - ...configuration - }; - this.versionsCollection = getVersionsCollection(fastify.mongo.db!); - this.contentVersionsCollection = getContentVersionsCollection(fastify.mongo.db!); - } - - public async onChange({ documentName, document, context }: onChangePayload): Promise { - return this.debounceUpdate({ documentName, document, context }); - } - - private debounceUpdate({ - documentName, - context, - document - }: Pick): void { - if ( - documentName.startsWith("workspace:") || - documentName.startsWith("snippet:") || - documentName.startsWith("version:") - ) { - return; - } - - const [contentPieceId, variantId = null] = documentName.split(":"); - const update = (): void => { - const debouncedData = this.debounced.get(documentName); - - this.createVersion({ - contentPieceId, - variantId, - members: debouncedData?.members || [], - json: docToJSON(document), - userId: `${context.userId}`, - workspaceId: `${context.workspaceId}` - }); - }; - - this.debounce( - documentName, - update, - [...document.awareness.getStates().values()] - .map((state) => state.user.membershipId) - .filter(Boolean) - ); - } - - private async createVersion(details: { - contentPieceId: string; - workspaceId: string; - userId: string; - variantId: string | null; - members: string[]; - json: DocJSON; - }): Promise { - const [previousVersionContent] = await this.contentVersionsCollection - .find({ - contentPieceId: new ObjectId(details.contentPieceId), - variantId: details.variantId ? new ObjectId(details.variantId) : null - }) - .sort({ _id: -1 }) - .limit(1) - .toArray(); - const ctx = { - db: this.fastify.mongo.db!, - auth: { - workspaceId: new ObjectId(`${details.workspaceId}`), - userId: new ObjectId(`${details.userId}`) - } - }; - const buffer = jsonToBuffer(details.json); - - if (previousVersionContent && buffer.equals(previousVersionContent.content.buffer)) { - return; - } - - const versionId = new ObjectId(); - const date = new Date(); - const version = { - _id: versionId, - date, - contentPieceId: new ObjectId(details.contentPieceId), - ...(details.variantId ? { variantId: new ObjectId(details.variantId) } : {}), - members: details.members.map((id) => new ObjectId(id)), - workspaceId: ctx.auth.workspaceId, - expiresAt: dayjs(date).add(31, "days").toDate() - }; - - await this.versionsCollection.insertOne(version); - await this.contentVersionsCollection.insertOne({ - _id: new ObjectId(), - contentPieceId: new ObjectId(details.contentPieceId), - versionId, - ...(details.variantId ? { variantId: new ObjectId(details.variantId) } : {}), - content: new Binary(buffer), - expiresAt: dayjs(date).add(31, "days").toDate() - }); - publishVersionEvent({ fastify: this.fastify }, `${details.workspaceId}`, { - action: "create", - userId: `${details.userId}`, - data: { - id: `${versionId}`, - date: date.toISOString(), - contentPieceId: `${details.contentPieceId}`, - variantId: details.variantId ? `${details.variantId}` : null, - members: await fetchEntryMembers(ctx.db, version), - workspaceId: `${ctx.auth.workspaceId}`, - expiresAt: version.expiresAt?.toISOString() - } - }); - } - - private debounce(id: string, func: Function, members: string[]): void { - const old = this.debounced.get(id); - const start = old?.start || Date.now(); - const run = (): void => { - func(); - this.debounced.delete(id); - }; - - if (old?.timeout) clearTimeout(old.timeout); - - this.debounced.set(id, { - start, - timeout: setTimeout(run, this.configuration.debounce as number), - members: [...new Set([...(old?.members || []), ...members])] - }); - } -} - -export { VersionHistory }; diff --git a/apps/backend/collaboration/src/index.ts b/apps/backend/collaboration/src/index.ts deleted file mode 100644 index 0a5207f2..00000000 --- a/apps/backend/collaboration/src/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { writingPlugin } from "./writing"; -import { - OAuthPlugin, - createServer, - databasePlugin, - pubSubPlugin, - searchPlugin, - sessionPlugin -} from "@vrite/backend"; - -(async () => { - const server = await createServer(async (server) => { - await server.register(databasePlugin); - await server.register(pubSubPlugin); - await server.register(sessionPlugin).register(OAuthPlugin); - await server.register(searchPlugin); - }); - - await server.register(writingPlugin); -})(); diff --git a/apps/backend/collaboration/src/writing.ts b/apps/backend/collaboration/src/writing.ts deleted file mode 100644 index 71c71219..00000000 --- a/apps/backend/collaboration/src/writing.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { - createPlugin, - getContentsCollection, - getContentVariantsCollection, - errors, - SessionData, - getSnippetContentsCollection, - getContentVersionsCollection -} from "@vrite/backend"; -import { Server } from "@hocuspocus/server"; -import { Database } from "@hocuspocus/extension-database"; -import { Redis } from "@hocuspocus/extension-redis"; -import { ObjectId, Binary } from "mongodb"; -import { SearchIndexing } from "#extensions/search-indexing"; -import { GitSync } from "#extensions/git-sync"; -import { VersionHistory } from "#extensions/version-history"; - -const writingPlugin = createPlugin(async (fastify) => { - const snippetContentsCollection = getSnippetContentsCollection(fastify.mongo.db!); - const contentVersionsCollection = getContentVersionsCollection(fastify.mongo.db!); - const contentsCollection = getContentsCollection(fastify.mongo.db!); - const contentVariantsCollection = getContentVariantsCollection(fastify.mongo.db!); - const server = Server.configure({ - port: fastify.config.PORT, - address: fastify.config.HOST, - async onAuthenticate(data) { - const cookies = fastify.parseCookie(data.requestHeaders.cookie || ""); - - if (!cookies.accessToken) { - throw errors.unauthorized(); - } - - const token = fastify.unsignCookie(cookies.accessToken || "")?.value || ""; - - if (!token) { - throw errors.unauthorized(); - } - - const { sessionId } = fastify.jwt.verify<{ sessionId: string }>(token); - const sessionCache = await fastify.redis.get(`session:${sessionId}`); - const sessionData = JSON.parse(sessionCache || "{}") as SessionData; - - if (sessionData.baseType !== "admin" && !sessionData.permissions.includes("editContent")) { - data.connection.readOnly = true; - } - - if (fastify.hostConfig.billing && !sessionData.subscriptionPlan) { - data.connection.readOnly = true; - } - - return sessionData; - }, - extensions: [ - new Redis({ redis: fastify.redis }), - new Database({ - async fetch({ documentName }) { - if (documentName.startsWith("workspace:")) { - return null; - } - - if (documentName.startsWith("version:")) { - const contentVersion = await contentVersionsCollection.findOne({ - versionId: new ObjectId(documentName.split(":")[1]) - }); - - if (contentVersion && contentVersion.content) { - return new Uint8Array(contentVersion.content.buffer); - } - - return null; - } - - if (documentName.startsWith("snippet:")) { - const snippetContent = await snippetContentsCollection.findOne({ - snippetId: new ObjectId(documentName.split(":")[1]) - }); - - if (snippetContent && snippetContent.content) { - return new Uint8Array(snippetContent.content.buffer); - } - - return null; - } - - const [contentPieceId, variantId] = documentName.split(":"); - - if (variantId) { - const contentVariant = await contentVariantsCollection.findOne({ - contentPieceId: new ObjectId(contentPieceId), - variantId: new ObjectId(variantId) - }); - - if (contentVariant && contentVariant.content) { - return new Uint8Array(contentVariant.content.buffer); - } - } - - const content = await contentsCollection.findOne({ - contentPieceId: new ObjectId(contentPieceId) - }); - - if (content && content.content) { - return new Uint8Array(content.content.buffer); - } - - return null; - }, - async store({ documentName, state, ...details }) { - if (documentName.startsWith("workspace:") || documentName.startsWith("version:")) { - return; - } - - if (documentName.startsWith("snippet:")) { - const snippetId = documentName.split(":")[1] || ""; - - if (state) { - await snippetContentsCollection?.updateOne( - { - snippetId: new ObjectId(snippetId) - }, - { $set: { content: new Binary(state) } }, - { upsert: true } - ); - - return; - } - } - - const [contentPieceId, variantId] = documentName.split(":"); - - if (state) { - if (!(details as { update?: any }).update) { - return; - } - - if (variantId) { - await contentVariantsCollection?.updateOne( - { - contentPieceId: new ObjectId(contentPieceId), - variantId: new ObjectId(variantId) - }, - { $set: { content: new Binary(state) } }, - { upsert: true } - ); - - return; - } - - await contentsCollection?.updateOne( - { contentPieceId: new ObjectId(contentPieceId) }, - { $set: { content: new Binary(state) } }, - { upsert: true } - ); - } - } - }), - new SearchIndexing(fastify), - new GitSync(fastify), - new VersionHistory(fastify) - ] - }); - - server.listen(); -}); - -export { writingPlugin }; diff --git a/apps/backend/collaboration/tsconfig.json b/apps/backend/collaboration/tsconfig.json deleted file mode 100644 index 7a2c267b..00000000 --- a/apps/backend/collaboration/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "esModuleInterop": true, - "moduleResolution": "node", - "isolatedModules": true, - "strict": true, - "outDir": "build", - "skipLibCheck": true, - "paths": { - "#*": ["./src/*"] - } - }, - "include": ["src/**/*.ts"] -} diff --git a/apps/backend/extensions/.env.example b/apps/backend/extensions/.env.example deleted file mode 100644 index f150515a..00000000 --- a/apps/backend/extensions/.env.example +++ /dev/null @@ -1 +0,0 @@ -PORT=7777 \ No newline at end of file diff --git a/apps/backend/extensions/package.json b/apps/backend/extensions/package.json deleted file mode 100644 index 22a02771..00000000 --- a/apps/backend/extensions/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "@vrite/extensions-backend", - "private": true, - "source": "src/index.ts", - "main": "index.ts", - "scripts": { - "dev": "scripts dev-node src/index.ts", - "build": "scripts build-node src/index.ts", - "start": "node ./dist/index.js" - }, - "dependencies": { - "@fastify/cors": "^9.0.1", - "@prettier/sync": "^0.5.1", - "@trpc/server": "^10.45.0", - "@types/hast": "^3.0.4", - "@types/html-to-text": "^9.0.4", - "@types/js-yaml": "^4.0.9", - "@types/mdast": "^4.0.3", - "@vrite/backend": "workspace:*", - "@vrite/sdk": "workspace:*", - "dayjs": "^1.11.10", - "fastify": "^4.26.0", - "hast-util-from-html": "^2.0.1", - "hast-util-to-html": "^9.0.0", - "hast-util-to-mdast": "^10.1.0", - "html-to-text": "^9.0.5", - "js-yaml": "^4.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-frontmatter": "^2.0.1", - "mdast-util-gfm": "^3.0.0", - "mdast-util-mdx": "^3.0.0", - "mdast-util-to-hast": "^13.1.0", - "mdast-util-to-markdown": "^2.1.0", - "micromark-extension-frontmatter": "^2.0.0", - "micromark-extension-gfm": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0", - "openai": "^4.26.1", - "prettier": "^3.2.5", - "remark": "^15.0.1", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "trpc-openapi": "^1.2.0", - "unist-util-visit": "^5.0.0", - "zod": "^3.22.4" - }, - "devDependencies": { - "@vrite/scripts": "workspace:*" - } -} diff --git a/apps/backend/extensions/src/extensions.ts b/apps/backend/extensions/src/extensions.ts deleted file mode 100644 index 7f85a215..00000000 --- a/apps/backend/extensions/src/extensions.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { extensionsRouter } from "./routes"; -import { createPlugin, createFastifyContext } from "@vrite/backend"; -import { - createOpenApiNodeHttpHandler, - CreateOpenApiNodeHttpHandlerOptions -} from "trpc-openapi/dist/adapters/node-http/core"; -import { OpenApiRouter } from "trpc-openapi"; -import { AnyRouter } from "@trpc/server"; -import { FastifyInstance, FastifyReply, FastifyRequest } from "fastify"; -import corsPlugin from "@fastify/cors"; - -type CreateOpenApiFastifyPluginOptions = - CreateOpenApiNodeHttpHandlerOptions & { - basePath?: `/${string}`; - }; - -const fastifyTRPCOpenApiPlugin = ( - fastify: FastifyInstance, - opts: CreateOpenApiFastifyPluginOptions, - done: (err?: Error) => void -): void => { - let prefix = opts.basePath ?? ""; - - if (prefix.endsWith("/")) { - prefix = prefix.slice(0, -1); - } - - const openApiHttpHandler = createOpenApiNodeHttpHandler(opts); - - fastify.route({ - method: ["GET", "DELETE", "PUT", "POST"], - url: `${prefix}/*`, - async handler(request, reply) { - const prefixRemovedFromUrl = request.url.replace(fastify.prefix, "").replace(prefix, ""); - - request.raw.url = prefixRemovedFromUrl; - - return await openApiHttpHandler( - request, - Object.assign(reply, { - setHeader: (key: string, value: string | number | readonly string[]) => { - if (Array.isArray(value)) { - value.forEach((v) => reply.header(key, v)); - - return reply; - } - - return reply.header(key, value); - }, - end: (body: any) => reply.send(body) // eslint-disable-line @typescript-eslint/no-explicit-any - }) - ); - } - }); - done(); -}; -const extensionsService = createPlugin(async (fastify) => { - await fastify.register(corsPlugin, { - methods: ["GET", "DELETE", "PUT", "POST"], - credentials: true, - origin: true - }); - await fastify.register(fastifyTRPCOpenApiPlugin, { - basePath: "/", - router: extensionsRouter, - createContext({ req, res }: { req: FastifyRequest; res: FastifyReply }) { - return createFastifyContext({ req, res }, fastify); - } - }); -}); - -export { extensionsService }; diff --git a/apps/backend/extensions/src/index.ts b/apps/backend/extensions/src/index.ts deleted file mode 100644 index 44f1c9d5..00000000 --- a/apps/backend/extensions/src/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { extensionsService } from "./extensions"; -import { createServer } from "@vrite/backend"; - -(async () => { - const server = await createServer(); - - await server.register(extensionsService); - - return server.listen({ host: server.config.HOST, port: server.config.PORT }, (err) => { - if (err) { - server.log.error(err); - process.exit(1); - } - }); -})(); diff --git a/apps/backend/extensions/src/routes/dev/index.ts b/apps/backend/extensions/src/routes/dev/index.ts deleted file mode 100644 index 23152d98..00000000 --- a/apps/backend/extensions/src/routes/dev/index.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { devOutputTransformer } from "./transformer"; -import { procedure, router, zodId, errors } from "@vrite/backend"; -import { - JSONContent, - createClient, - ContentPieceWithAdditionalData, - Extension -} from "@vrite/sdk/api"; -import { z } from "zod"; - -const processContent = (content: JSONContent): string => { - return devOutputTransformer(content); -}; -const basePath = "/dev"; -const publishToDEV = async ( - contentPiece: ContentPieceWithAdditionalData, true>, - extension: Partial -): Promise<{ devId: string }> => { - const contentType = "application/json"; - const contentPieceData = contentPiece.customData?.__extensions__?.[extension.name || ""] || {}; - const article = { - title: contentPiece.title, - body_markdown: processContent(contentPiece.content), - description: contentPiece.description || undefined, - tags: contentPiece.tags - .map((tag) => tag.label?.toLowerCase().replace(/\s/g, "")) - .filter(Boolean), - canonical_url: contentPiece.canonicalLink || undefined, - published: true, - series: contentPieceData?.devSeries || undefined, - main_image: contentPiece.coverUrl || undefined - }; - - if (!extension.config) throw errors.notFound("extension"); - - if (typeof contentPieceData?.draft === "boolean") { - article.published = !contentPieceData.draft; - } else if (typeof extension.config.draft === "boolean") { - article.published = !extension.config.draft; - } - - if (contentPieceData?.devId) { - try { - const response = await fetch(`https://dev.to/api/articles/${contentPieceData.devId}`, { - method: "PUT", - headers: { - "api-key": `${extension.config.apiKey}`, - "Accept": "application/vnd.forem.api-v1+json", - "content-type": contentType - }, - body: JSON.stringify({ - article - }) - }); - const data: { error?: string; id?: string } = await response.json(); - - if (data.error) { - // eslint-disable-next-line no-console - console.error(data.error); - throw errors.serverError(); - } - - return { devId: `${data.id || ""}` }; - } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - throw errors.serverError(); - } - } else { - try { - const response = await fetch(`https://dev.to/api/articles`, { - method: "POST", - body: JSON.stringify({ article }), - headers: { - "api-key": `${extension.config.apiKey}`, - "Accept": "application/vnd.forem.api-v1+json", - "content-type": contentType - } - }); - const data: { error?: string; id?: string } = await response.json(); - - if (data.error) { - // eslint-disable-next-line no-console - console.error(data.error); - throw errors.serverError(); - } - - return { devId: `${data.id || ""}` }; - } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - throw errors.serverError(); - } - } -}; -const devRouter = router({ - publish: procedure - .meta({ - openapi: { method: "POST", path: `${basePath}` } - }) - .input( - z.object({ - contentPieceId: zodId() - }) - ) - .output(z.object({ devId: z.string() })) - .mutation(async ({ ctx, input }) => { - const token = ctx.req.headers.authorization?.replace("Bearer ", ""); - const extensionId = ctx.req.headers["x-vrite-extension-id"] as string | undefined; - - if (!token || !extensionId) throw errors.unauthorized(); - - const client = createClient({ - token, - extensionId - }); - const extension = await client.extension.get(); - const contentPiece = await client.contentPieces.get({ - id: input.contentPieceId, - content: true, - description: "text" - }); - - return await publishToDEV(contentPiece, extension); - }), - webhook: procedure - .meta({ openapi: { method: "POST", path: `${basePath}/webhook` } }) - .input( - z.object({ - id: zodId() - }) - ) - .output(z.void()) - .mutation(async ({ ctx, input }) => { - const extensionId = ctx.req.headers["x-vrite-extension-id"] as string | undefined; - - if (!extensionId) throw errors.unauthorized(); - - const client = createClient({ - token: "", - extensionId - }); - const extension = await client.extension.get(); - - if (!extension.token) throw errors.unauthorized(); - - client.reconfigure({ token: extension.token }); - - const contentPiece = await client.contentPieces.get({ - id: input.id, - content: true, - description: "text" - }); - const contentPieceData = - contentPiece.customData?.__extensions__?.[extension.name || ""] || {}; - - if (contentPieceData.autoPublish === false) return; - if (extension.config?.requireCanonicalLink && !contentPiece.canonicalLink) return; - - const { devId } = await publishToDEV(contentPiece, extension); - - await client.extension.updateContentPieceData({ - contentPieceId: input.id, - data: { ...contentPiece.customData?.__extensions__?.[extension.name || ""], devId } - }); - }) -}); - -export { devRouter }; diff --git a/apps/backend/extensions/src/routes/dev/transformer.ts b/apps/backend/extensions/src/routes/dev/transformer.ts deleted file mode 100644 index 46773de8..00000000 --- a/apps/backend/extensions/src/routes/dev/transformer.ts +++ /dev/null @@ -1,214 +0,0 @@ -/* eslint-disable no-use-before-define */ -import { - createOutputTransformer, - createContentWalker, - JSONContentNodeWalker, - JSONContentNode -} from "@vrite/sdk/transformers"; - -const devOutputTransformer = createOutputTransformer((contentNode) => { - const contentWalker = createContentWalker(contentNode); - const matchers = { - youtube: - /^ *https?:\/\/(?:www\.)?youtu\.?be(?:.com)?\/(?:watch\?v=|embed\/)?(.+?)(?:[ &/?].*)*$/i, - codepen: /^ *https?:\/\/(?:www\.)?codepen\.io\/.+?\/(?:embed|pen)?\/(.+?)(?:[ &/?].*)*$/i, - codesandbox: /^ *https?:\/\/(?:www\.)?codesandbox\.io\/(?:s|embed)\/(.+?)(?:[ &/?].*)*$/i - }; - const getEmbedId = (value: string, embedType: keyof typeof matchers): string => { - const matcher = matchers[embedType]; - const match = matcher.exec(value); - - if (match) { - return match[1]; - } - - return value; - }; - const transformEmbed = (attrs: JSONContentNode["embed"]["attrs"]): string => { - switch (attrs?.embed) { - case "codepen": - return `\n{% codepen https://codepen.io/codepen/embed/${getEmbedId( - `${attrs.src}`, - "codepen" - )} %}\n`; - case "codesandbox": - return `\n{% codesandbox ${getEmbedId(`${attrs.src}`, "codesandbox")} %}\n`; - case "youtube": - return `\n{% youtube ${getEmbedId(`${attrs.src}`, "youtube")} %}\n`; - default: - return ""; - } - }; - const transformText = (textWalker: JSONContentNodeWalker): string => { - let output = ""; - - if (textWalker.node.type === "text") { - output = textWalker.node.text; - textWalker.node.marks?.forEach((mark) => { - switch (mark.type) { - case "link": - output = `[${output}](${mark.attrs.href})`; - break; - case "bold": - output = `**${output}**`; - break; - case "code": - output = `\`${output}\``; - break; - case "italic": - output = `_${output}_`; - break; - case "strike": - output = `~~${output}~~`; - break; - default: - break; - } - }); - } - - return output; - }; - const transformTextNode = ( - paragraphWalker: JSONContentNodeWalker - ): string => { - return `${paragraphWalker.children - .map((child) => { - if (child.node.type === "text") { - return transformText(child as JSONContentNodeWalker); - } - - return "\n"; - }) - .join("")}`; - }; - const transformTable = (tableWalker: JSONContentNodeWalker): string => { - let output = ""; - - tableWalker.children.forEach((tableRowWalker, rowIndex) => { - let isHeader = false; - - const columns = tableRowWalker.children.map((tableCellWalker) => { - if (tableCellWalker.node.type === "tableHeader") { - isHeader = true; - } - - return tableCellWalker.children.map(transformTextNode).join("\n"); - }); - - if (rowIndex === tableWalker.children.length - 1) { - output += `| ${columns.map((row) => row.replace(/\n/g, " ")).join(" | ")} |`; - } else { - output += `| ${columns.map((row) => row.replace(/\n/g, " ")).join(" | ")} |\n`; - } - - if (isHeader && rowIndex === 0) { - output += `| ${columns.map(() => "---").join(" | ")} |\n`; - } - }); - - return output; - }; - const transformContentNode = ( - nodeWalker: JSONContentNodeWalker< - JSONContentNode["listItem" | "blockquote" | "doc" | "element"] - > - ): string => { - return nodeWalker.children - .map((child) => { - const nodeType = child.node.type; - const previousSibling = child.previousSibling(); - const isPreviousSiblingList = ["bulletList", "orderedList"].includes( - previousSibling?.node.type || "" - ); - - switch (nodeType) { - case "paragraph": - return `\n${transformTextNode( - child as JSONContentNodeWalker - )}\n`; - case "bulletList": - case "orderedList": - return `${isPreviousSiblingList ? "\n" : ""}${transformList( - child as JSONContentNodeWalker - )}\n`; - case "table": - return `\n${transformTable( - child as JSONContentNodeWalker - )}\n`; - case "horizontalRule": - return "\n---\n"; - case "image": - return `\n![${child.node.attrs?.alt || ""}](${child.node.attrs?.src || ""})\n`; - case "embed": - return `\n${transformEmbed(child.node.attrs)}\n`; - case "heading": - return `\n${"#".repeat(child.node.attrs?.level || 1)} ${transformTextNode( - child as JSONContentNodeWalker - )}\n`; - case "codeBlock": - return `\n\`\`\`${child.node.attrs?.lang || ""}\n${transformTextNode( - child as JSONContentNodeWalker - )}\n\`\`\`\n`; - case "element": - return `\n${transformContentNode( - child as JSONContentNodeWalker - )}\n`; - case "blockquote": - return `\n${transformContentNode( - child as JSONContentNodeWalker - ) - .split("\n") - .map((line) => `> ${line}`) - .join("\n")}\n`; - default: - return ""; - } - }) - .join("") - .trim(); - }; - const transformList = ( - listWalker: JSONContentNodeWalker - ): string => { - return listWalker.children - .map((nodeWalker) => { - return { - content: transformContentNode(nodeWalker), - node: nodeWalker.node - }; - }) - .map(({ content, node }, index) => { - let prefix = ""; - let indent = 0; - - if (listWalker.node.type === "orderedList") { - const start = listWalker.node.attrs?.start || 1; - - prefix = `${start + index}. `; - indent = prefix.length; - } - - if (listWalker.node.type === "bulletList") { - prefix = "- "; - indent = prefix.length; - } - - return content - .split("\n") - .map((line, lineIndex) => { - if (lineIndex === 0) { - return `${prefix}${line}`; - } - - return `${" ".repeat(indent)}${line}`; - }) - .join("\n"); - }) - .join("\n"); - }; - - return transformContentNode(contentWalker as JSONContentNodeWalker); -}); - -export { devOutputTransformer }; diff --git a/apps/backend/extensions/src/routes/gpt.ts b/apps/backend/extensions/src/routes/gpt.ts deleted file mode 100644 index 21bd93ba..00000000 --- a/apps/backend/extensions/src/routes/gpt.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { procedure, router } from "@vrite/backend"; -import { OpenAI } from "openai"; -import { z } from "zod"; - -const basePath = "/gpt"; -const gptRouter = router({ - prompt: procedure - .meta({ - openapi: { - method: "POST", - path: `${basePath}` - } - }) - .input(z.object({ prompt: z.string() })) - .output(z.void()) - .mutation(async ({ ctx, input }) => { - const openai = new OpenAI({ - apiKey: ctx.fastify.config.OPENAI_API_KEY, - organization: ctx.fastify.config.OPENAI_ORGANIZATION - }); - const responseStream = await openai.chat.completions.create({ - model: "gpt-3.5-turbo", - stream: true, - messages: [{ role: "user", content: input.prompt }] - }); - - ctx.res.raw.writeHead(200, { - ...ctx.res.getHeaders(), - "content-type": "text/event-stream", - "cache-control": "no-cache", - "connection": "keep-alive" - }); - - for await (const part of responseStream) { - const content = part.choices[0].delta.content || ""; - - if (content) { - ctx.res.raw.write(`data: ${encodeURIComponent(content)}`); - ctx.res.raw.write("\n\n"); - } - } - - ctx.res.raw.end(); - }) -}); - -export { gptRouter }; diff --git a/apps/backend/extensions/src/routes/hashnode/index.ts b/apps/backend/extensions/src/routes/hashnode/index.ts deleted file mode 100644 index 9491a51f..00000000 --- a/apps/backend/extensions/src/routes/hashnode/index.ts +++ /dev/null @@ -1,209 +0,0 @@ -import { hashnodeOutputTransformer } from "./transformer"; -import { procedure, router, zodId, errors } from "@vrite/backend"; -import { - JSONContent, - createClient, - ContentPieceWithAdditionalData, - Extension -} from "@vrite/sdk/api"; -import { z } from "zod"; - -const processContent = (content: JSONContent): string => { - return hashnodeOutputTransformer(content); -}; -const basePath = "/hashnode"; -const publishToHashnode = async ( - contentPiece: ContentPieceWithAdditionalData, true>, - extension: Partial -): Promise<{ hashnodeId: string }> => { - const contentType = "application/json"; - const contentPieceData = contentPiece.customData?.__extensions__?.[extension.name || ""] || {}; - - if (!extension.config) throw errors.notFound("extension"); - - const articleInput = { - title: contentPiece.title, - slug: contentPiece.slug, - contentMarkdown: processContent(contentPiece.content), - tags: contentPiece.tags.map((tag) => ({ - slug: (tag.label || "").toLowerCase(), - name: (tag.label || "").toLowerCase(), - id: "" - })), - publicationId: extension.config!.publicationId, - ...(contentPiece.coverUrl && { coverImageOptions: { coverImageURL: contentPiece.coverUrl } }), - ...(contentPiece.canonicalLink && { - originalArticleURL: contentPiece.canonicalLink - }) - }; - - if (contentPieceData?.hashnodeId) { - try { - const response = await fetch("https://gql.hashnode.com/", { - method: "POST", - headers: { - "Authorization": `${extension.config.accessToken}`, - "Accept": contentType, - "content-type": contentType, - "User-Agent": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)" - }, - body: JSON.stringify({ - query: `mutation ($postId:String!, $input: UpdatePostInput!) { - updatePost(input: $input) { - post { - id - } - } - }`, - variables: { - input: { id: contentPieceData.hashnodeId, ...articleInput } - } - }) - }); - const json: { - errors?: Array<{ - message: string; - extensions: Record; - locations: Array<{ line: number; column: number }>; - }>; - data?: { - updatePost: { - post: { id: string }; - }; - }; - } = await response.json(); - - if (json.errors) { - // eslint-disable-next-line no-console - console.error(json.errors); - throw errors.serverError(); - } - - return { hashnodeId: `${json.data?.updatePost.post.id || ""}` }; - } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - throw errors.serverError(); - } - } else { - try { - const response = await fetch("https://api.hashnode.com/", { - method: "POST", - headers: { - "Authorization": `${extension.config.accessToken}`, - "Accept": contentType, - "content-type": contentType, - "User-Agent": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)" - }, - body: JSON.stringify({ - query: `mutation ($input: PublishPostInput!) { - publishPost(input: $input) { - post { - id - } - } - }`, - variables: { input: articleInput } - }) - }); - const json: { - errors?: Array<{ - message: string; - extensions: Record; - locations: Array<{ line: number; column: number }>; - }>; - data?: { - publishPost: { - post: { id: string }; - }; - }; - } = await response.json(); - - if (json.errors) { - // eslint-disable-next-line no-console - console.error(json.errors); - throw errors.serverError(); - } - - return { hashnodeId: `${json.data?.publishPost.post.id || ""}` }; - } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - throw errors.serverError(); - } - } -}; -const hashnodeRouter = router({ - publish: procedure - .meta({ - openapi: { method: "POST", path: `${basePath}` } - }) - .input( - z.object({ - contentPieceId: zodId() - }) - ) - .output(z.object({ hashnodeId: z.string() })) - .mutation(async ({ ctx, input }) => { - const token = ctx.req.headers.authorization?.replace("Bearer ", ""); - const extensionId = ctx.req.headers["x-vrite-extension-id"] as string | undefined; - - if (!token || !extensionId) throw errors.unauthorized(); - - const client = createClient({ - token, - extensionId - }); - const extension = await client.extension.get(); - const contentPiece = await client.contentPieces.get({ - id: input.contentPieceId, - content: true, - description: "text" - }); - - return await publishToHashnode(contentPiece, extension); - }), - webhook: procedure - .meta({ openapi: { method: "POST", path: `${basePath}/webhook` } }) - .input( - z.object({ - id: zodId() - }) - ) - .output(z.void()) - .mutation(async ({ ctx, input }) => { - const extensionId = ctx.req.headers["x-vrite-extension-id"] as string | undefined; - - if (!extensionId) throw errors.unauthorized(); - - const client = createClient({ - token: "", - extensionId - }); - const extension = await client.extension.get(); - - if (!extension.token) throw errors.unauthorized(); - - client.reconfigure({ token: extension.token }); - - const contentPiece = await client.contentPieces.get({ - id: input.id, - content: true, - description: "text" - }); - const contentPieceData = - contentPiece.customData?.__extensions__?.[extension.name || ""] || {}; - - if (contentPieceData.autoPublish === false) return; - if (extension.config?.requireCanonicalLink && !contentPiece.canonicalLink) return; - - const { hashnodeId } = await publishToHashnode(contentPiece, extension); - - await client.extension.updateContentPieceData({ - contentPieceId: input.id, - data: { ...contentPiece.customData?.__extensions__?.[extension.name || ""], hashnodeId } - }); - }) -}); - -export { hashnodeRouter }; diff --git a/apps/backend/extensions/src/routes/hashnode/transformer.ts b/apps/backend/extensions/src/routes/hashnode/transformer.ts deleted file mode 100644 index 736218db..00000000 --- a/apps/backend/extensions/src/routes/hashnode/transformer.ts +++ /dev/null @@ -1,214 +0,0 @@ -/* eslint-disable no-use-before-define */ -import { - createOutputTransformer, - createContentWalker, - JSONContentNodeWalker, - JSONContentNode -} from "@vrite/sdk/transformers"; - -const hashnodeOutputTransformer = createOutputTransformer((contentNode) => { - const matchers = { - youtube: - /^ *https?:\/\/(?:www\.)?youtu\.?be(?:.com)?\/(?:watch\?v=|embed\/)?(.+?)(?:[ &/?].*)*$/i, - codepen: /^ *https?:\/\/(?:www\.)?codepen\.io\/.+?\/(?:embed|pen)?\/(.+?)(?:[ &/?].*)*$/i, - codesandbox: /^ *https?:\/\/(?:www\.)?codesandbox\.io\/(?:s|embed)\/(.+?)(?:[ &/?].*)*$/i - }; - const getEmbedId = (value: string, embedType: keyof typeof matchers): string => { - const matcher = matchers[embedType]; - const match = matcher.exec(value); - - if (match) { - return match[1]; - } - - return value; - }; - const transformEmbed = (attrs: JSONContentNode["embed"]["attrs"]): string => { - switch (attrs?.embed) { - case "codepen": - return `\n%[https://codepen.io/codepen/embed/${getEmbedId(`${attrs.src}`, "codepen")}]\n`; - case "codesandbox": - return `\n%[https://codesandbox.io/s/${getEmbedId(`${attrs.src}`, "codesandbox")}]\n`; - case "youtube": - return `\n%[https://www.youtube.com/watch?v=${getEmbedId(`${attrs.src}`, "youtube")}]\n`; - default: - return ""; - } - }; - const contentWalker = createContentWalker(contentNode); - const transformText = (textWalker: JSONContentNodeWalker): string => { - let output = ""; - - if (textWalker.node.type === "text") { - output = textWalker.node.text; - textWalker.node.marks?.forEach((mark) => { - switch (mark.type) { - case "link": - output = `[${output}](${mark.attrs.href})`; - break; - case "bold": - output = `**${output}**`; - break; - case "code": - output = `\`${output}\``; - break; - case "italic": - output = `_${output}_`; - break; - case "strike": - output = `${output}`; - break; - case "highlight": - output = `${output}`; - break; - default: - break; - } - }); - } - - return output; - }; - const transformTextNode = ( - paragraphWalker: JSONContentNodeWalker - ): string => { - return `${paragraphWalker.children - .map((child) => { - if (child.node.type === "text") { - return transformText(child as JSONContentNodeWalker); - } - - return "\n"; - }) - .join("")}`; - }; - const transformTable = (tableWalker: JSONContentNodeWalker): string => { - let output = ""; - - tableWalker.children.forEach((tableRowWalker, rowIndex) => { - let isHeader = false; - - const columns = tableRowWalker.children.map((tableCellWalker) => { - if (tableCellWalker.node.type === "tableHeader") { - isHeader = true; - } - - return tableCellWalker.children.map(transformTextNode).join("\n"); - }); - - if (rowIndex === tableWalker.children.length - 1) { - output += `| ${columns.map((row) => row.replace(/\n/g, " ")).join(" | ")} |`; - } else { - output += `| ${columns.map((row) => row.replace(/\n/g, " ")).join(" | ")} |\n`; - } - - if (isHeader && rowIndex === 0) { - output += `| ${columns.map(() => "---").join(" | ")} |\n`; - } - }); - - return output; - }; - const transformContentNode = ( - nodeWalker: JSONContentNodeWalker< - JSONContentNode["listItem" | "blockquote" | "doc" | "element"] - > - ): string => { - return nodeWalker.children - .map((child) => { - const nodeType = child.node.type; - const previousSibling = child.previousSibling(); - const isPreviousSiblingList = ["bulletList", "orderedList"].includes( - previousSibling?.node.type || "" - ); - - switch (nodeType) { - case "paragraph": - return `\n${transformTextNode( - child as JSONContentNodeWalker - )}\n`; - case "bulletList": - case "orderedList": - return `${isPreviousSiblingList ? "\n" : ""}${transformList( - child as JSONContentNodeWalker - )}\n`; - case "table": - return `\n${transformTable( - child as JSONContentNodeWalker - )}\n`; - case "horizontalRule": - return "\n---\n"; - case "image": - return `\n![${child.node.attrs?.alt || ""}](${child.node.attrs?.src || ""})\n`; - case "embed": - return `\n${transformEmbed(child.node.attrs)}\n`; - case "heading": - return `\n${"#".repeat(child.node.attrs?.level || 1)} ${transformTextNode( - child as JSONContentNodeWalker - )}\n`; - case "codeBlock": - return `\n\`\`\`${child.node.attrs?.lang || ""}\n${transformTextNode( - child as JSONContentNodeWalker - )}\n\`\`\`\n`; - case "element": - return `\n${transformContentNode( - child as JSONContentNodeWalker - )}\n`; - case "blockquote": - return `\n${transformContentNode( - child as JSONContentNodeWalker - ) - .split("\n") - .map((line) => `> ${line}`) - .join("\n")}\n`; - default: - return ""; - } - }) - .join("") - .trim(); - }; - const transformList = ( - listWalker: JSONContentNodeWalker - ): string => { - return listWalker.children - .map((nodeWalker) => { - return { - content: transformContentNode(nodeWalker), - node: nodeWalker.node - }; - }) - .map(({ content, node }, index) => { - let prefix = ""; - let indent = 0; - - if (listWalker.node.type === "orderedList") { - const start = listWalker.node.attrs?.start || 1; - - prefix = `${start + index}. `; - indent = prefix.length; - } - - if (listWalker.node.type === "bulletList") { - prefix = "- "; - indent = prefix.length; - } - - return content - .split("\n") - .map((line, lineIndex) => { - if (lineIndex === 0) { - return `${prefix}${line}`; - } - - return `${" ".repeat(indent)}${line}`; - }) - .join("\n"); - }) - .join("\n"); - }; - - return transformContentNode(contentWalker as JSONContentNodeWalker); -}); - -export { hashnodeOutputTransformer }; diff --git a/apps/backend/extensions/src/routes/index.ts b/apps/backend/extensions/src/routes/index.ts deleted file mode 100644 index 2db5eef6..00000000 --- a/apps/backend/extensions/src/routes/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { devRouter } from "./dev"; -import { hashnodeRouter } from "./hashnode"; -import { gptRouter } from "./gpt"; -import { mediumRouter } from "./medium"; -import { mdxRouter } from "./mdx"; -import { router } from "@vrite/backend"; - -const extensionsRouter = router({ - dev: devRouter, - hashnode: hashnodeRouter, - medium: mediumRouter, - gpt: gptRouter, - mdx: mdxRouter -}); - -type Router = typeof extensionsRouter; - -export { extensionsRouter }; -export type { Router }; diff --git a/apps/backend/extensions/src/routes/mdx/index.ts b/apps/backend/extensions/src/routes/mdx/index.ts deleted file mode 100644 index 3bb1553e..00000000 --- a/apps/backend/extensions/src/routes/mdx/index.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { mdxAsyncInputTransformer } from "./input-transformer"; -import { mdxAsyncOutputTransformer } from "./output-transformer"; -import { procedure, router } from "@vrite/backend"; -import { InputTransformer } from "@vrite/sdk/transformers"; -import { z } from "zod"; - -const basePath = "/mdx"; -const mdxRouter = router({ - input: procedure - .meta({ - openapi: { - method: "POST", - path: `${basePath}/input` - } - }) - .input(z.object({ data: z.array(z.string()) })) - .output( - z.array( - z.object({ - content: z.string(), - contentPiece: z.any() - }) - ) - ) - .mutation(async ({ input }) => { - const output: Array> = []; - - for await (const content of input.data) { - output.push(await mdxAsyncInputTransformer(content)); - } - - return output; - }), - output: procedure - .meta({ - openapi: { - method: "POST", - path: `${basePath}/output` - } - }) - .input( - z.object({ - data: z.array( - z.object({ - content: z.any(), - metadata: z.any() - }) - ) - }) - ) - .output(z.array(z.string())) - .mutation(async ({ ctx, input }) => { - const output: string[] = []; - - for await (const { content, metadata } of input.data) { - output.push(await mdxAsyncOutputTransformer(content, metadata)); - } - - return output; - }) -}); - -export { mdxRouter }; diff --git a/apps/backend/extensions/src/routes/mdx/input-transformer.ts b/apps/backend/extensions/src/routes/mdx/input-transformer.ts deleted file mode 100644 index 5edc0a1e..00000000 --- a/apps/backend/extensions/src/routes/mdx/input-transformer.ts +++ /dev/null @@ -1,201 +0,0 @@ -import { InputTransformer } from "@vrite/sdk/transformers"; -import { mdxjs } from "micromark-extension-mdxjs"; -import { fromMarkdown } from "mdast-util-from-markdown"; -import { MdxJsxAttribute, MdxJsxExpressionAttribute, mdxFromMarkdown } from "mdast-util-mdx"; -import { frontmatter } from "micromark-extension-frontmatter"; -import { frontmatterFromMarkdown } from "mdast-util-frontmatter"; -import { gfmFromMarkdown } from "mdast-util-gfm"; -import { gfm } from "micromark-extension-gfm"; -import { toHtml } from "hast-util-to-html"; -import { toHast, defaultHandlers } from "mdast-util-to-hast"; -import babelPlugin from "prettier/plugins/babel"; -import estreePlugin from "prettier/plugins/estree"; -import { format } from "prettier/standalone"; -import { load } from "js-yaml"; -import dayjs from "dayjs"; -import type { Plugin } from "prettier"; -import type { RootContentMap } from "mdast"; -import type { Element, Text } from "hast"; - -const attributeProcessingPromises: Array> = []; -const processAttribute = async (value: string): Promise => { - try { - const processedValue = await format(value, { - parser: "json-stringify", - plugins: [babelPlugin, estreePlugin as Plugin] - }); - - return JSON.parse(processedValue); - } catch (error) { - try { - return JSON.parse(value); - } catch (error) { - return value; - } - } -}; -const attributesToJSON = async ( - attributes: Array -): Promise> => { - const output: Record = {}; - - for await (const attribute of attributes) { - if (attribute.type === "mdxJsxAttribute") { - if (typeof attribute.value === "string") { - output[attribute.name] = attribute.value; - } else if (attribute.value === null) { - output[attribute.name] = true; - } else if (attribute.value?.value) { - const value = await processAttribute(attribute.value.value); - - output[attribute.name] = value; - } - } - } - - return output; -}; -const mdxAsyncInputTransformer = async (input: string): Promise> => { - const mdast = fromMarkdown(input, { - extensions: [gfm(), frontmatter(), mdxjs()], - mdastExtensions: [gfmFromMarkdown(), frontmatterFromMarkdown(), mdxFromMarkdown()] - }); - const hast = toHast(mdast, { - handlers: { - mdxjsEsm(state, node: RootContentMap["mdxjsEsm"]) { - const result: Element = { - tagName: "div", - type: "element", - properties: { - "data-element": "true", - "data-type": "Import" - }, - children: state.all({ - children: [{ type: "code", lang: "mdx", value: node.value.trim() }], - type: "root" - }) - }; - - state.patch(node, result); - - return state.applyData(node, result); - }, - paragraph(state, node: RootContentMap["paragraph"]) { - if (node.children.length === 1 && node.children[0].type === "image") { - return defaultHandlers.image(state, node.children[0]); - } else if (node.children.length === 1 && node.children[0].type === "mdxJsxTextElement") { - return state.all({ type: "root", children: [node.children[0]] })[0]; - } - - return defaultHandlers.paragraph(state, node); - }, - code(state, node: RootContentMap["code"]) { - const result = defaultHandlers.code(state, { ...node, value: node.value.trim() }); - const meta: string[] = []; - - let title = ""; - - (node.meta || "").split(" ").forEach((item) => { - if (item.startsWith("title=")) { - const match = item.match(/title="(.+?)"/); - - if (match) { - title = match[1] || title; - } - } else { - meta.push(item); - } - }); - - const codeElement = result.children[0] as Element; - const textElement = codeElement.children[0] as Text; - - result.properties["data-title"] = title; - result.properties["data-meta"] = meta.join(" "); - textElement.value = textElement.value.trim(); - - return result; - }, - list(state, node: RootContentMap["list"]) { - const result = defaultHandlers.list(state, node); - const className = `${result.properties.className || ""}`; - - if (className.includes("contains-task-list")) { - result.properties.className = className.replace("contains-task-list", "").trim(); - if (!result.properties.className) delete result.properties.className; - - result.properties["data-type"] = "taskList"; - } - - return result; - }, - mdxFlowExpression() { - return undefined; - }, - mdxJsxTextElement(state, node: RootContentMap["mdxJsxTextElement"], parent) { - if (parent?.children.length === 1) { - return state.all({ - type: "root", - children: [ - { - type: "mdxJsxFlowElement", - name: node.name, - attributes: node.attributes, - children: [{ type: "paragraph", children: node.children }] - } - ] - })[0]; - } - - return undefined; - }, - mdxTextExpression() { - return undefined; - }, - mdxJsxFlowElement(state, node: RootContentMap["mdxJsxFlowElement"]) { - const result: Element = { - tagName: "div", - type: "element", - properties: { - "data-element": "true", - "data-type": node.name - }, - children: state.all(node) - }; - const promise = attributesToJSON(node.attributes).then((attributes) => { - result.properties["data-props"] = JSON.stringify(attributes); - }); - - attributeProcessingPromises.push(promise); - state.patch(node, result); - - return state.applyData(node, result); - } - } - }); - const frontmatterYAML = mdast.children.find( - (child) => child.type === "yaml" - ) as RootContentMap["yaml"]; - const { canonicalLink, coverUrl, description, date, slug, title, ...customData } = ( - frontmatterYAML ? load(frontmatterYAML.value) : {} - ) as Record; - - await Promise.all(attributeProcessingPromises); - - const content = toHtml(hast); - - return { - content, - contentPiece: { - ...(canonicalLink && { canonicalLink }), - ...(coverUrl && { coverUrl }), - ...(description && { description: `

${description}

` }), - ...(date && { date: dayjs(date).toISOString() }), - ...(slug && { slug }), - ...(title && { title }), - customData - } - }; -}; - -export { mdxAsyncInputTransformer }; diff --git a/apps/backend/extensions/src/routes/mdx/output-transformer.ts b/apps/backend/extensions/src/routes/mdx/output-transformer.ts deleted file mode 100644 index f4bd87ca..00000000 --- a/apps/backend/extensions/src/routes/mdx/output-transformer.ts +++ /dev/null @@ -1,313 +0,0 @@ -/* eslint-disable no-use-before-define */ -import { - createContentWalker, - JSONContentNodeWalker, - JSONContentNode, - GenericJSONContentNode -} from "@vrite/sdk/transformers"; -import { format } from "prettier/standalone"; -import babelPlugin from "prettier/plugins/babel"; -import estreePlugin from "prettier/plugins/estree"; -import markdownPlugin from "prettier/plugins/markdown"; -import { ContentPiece } from "@vrite/sdk/api"; -import { htmlOutputTransformer } from "@vrite/sdk/transformers"; -import { convert as convertToText } from "html-to-text"; -import { dump } from "js-yaml"; -import dayjs from "dayjs"; -import { fromHtml } from "hast-util-from-html"; -import { toMdast } from "hast-util-to-mdast"; -import { toMarkdown } from "mdast-util-to-markdown"; -import { gfmToMarkdown } from "mdast-util-gfm"; -import { mdxToMarkdown } from "mdast-util-mdx"; -import type { Plugin } from "prettier"; - -const processCode = async (code: string, hasContent?: boolean): Promise => { - const codeTagClosed = code?.trim().replace(/>$/, "/>") || ""; - const formattedCode = await format(codeTagClosed, { - parser: "babel-ts", - plugins: [babelPlugin, estreePlugin as Plugin], - printWidth: 60, - trailingComma: "none", - singleQuote: false - }); - - return formattedCode.replace(/ *?\/>;/gm, hasContent ? ">" : "/>").trim(); -}; -const mdxAsyncOutputTransformer = async ( - contentNode: GenericJSONContentNode, - contentPiece?: Pick< - ContentPiece>, - | "date" - | "title" - | "description" - | "tags" - | "members" - | "slug" - | "filename" - | "coverUrl" - | "coverAlt" - | "customData" - | "canonicalLink" - | "coverWidth" - > -): Promise => { - const contentWalker = createContentWalker(contentNode); - const transformText = (textWalker: JSONContentNodeWalker): string => { - let output = ""; - - if (textWalker.node.type === "text") { - output = textWalker.node.text; - textWalker.node.marks?.forEach((mark) => { - switch (mark.type) { - case "link": - output = `[${output}](${mark.attrs.href})`; - break; - case "bold": - output = `**${output}**`; - break; - case "code": - output = `\`${output}\``; - break; - case "italic": - output = `_${output}_`; - break; - case "strike": - output = `~~${output}~~`; - break; - default: - break; - } - }); - } - - return output; - }; - const transformTextNode = ( - paragraphWalker: JSONContentNodeWalker - ): string => { - return `${paragraphWalker.children - .map((child) => { - if (child.node.type === "text") { - return transformText(child as JSONContentNodeWalker); - } - - return "\n"; - }) - .join("")}`; - }; - const transformTable = (tableWalker: JSONContentNodeWalker): string => { - const html = htmlOutputTransformer(tableWalker.node); - const hast = fromHtml(html, { fragment: true }); - const mdast = toMdast(hast); - - return toMarkdown(mdast, { extensions: [gfmToMarkdown(), mdxToMarkdown()] }); - }; - const transformCodeBlock = ( - codeBlockWalker: JSONContentNodeWalker - ): string => { - const attrs = codeBlockWalker.node.attrs || {}; - - let openingTag = `${attrs?.lang || ""}`; - - if (attrs?.title) { - openingTag += ` title="${attrs.title}"`; - } - - if (attrs?.meta) { - openingTag += ` ${attrs.meta}`; - } - - return `\`\`\`${openingTag}\n${transformTextNode(codeBlockWalker)}\n\`\`\``; - }; - const transformElement = async ( - elementWalker: JSONContentNodeWalker - ): Promise => { - const { attrs } = elementWalker.node; - - if (attrs.type === "Import" && elementWalker.children[0]?.node?.type === "codeBlock") { - return `${transformTextNode( - elementWalker.children[0] as JSONContentNodeWalker - ).trim()}`; - } - - const keyValueProps = Object.entries(attrs.props).map(([key, value]) => { - if (value === true) return key; - - const useBrackets = typeof value !== "string" || value.includes("\n") || value.includes(`"`); - - return `${key}=${useBrackets ? "{" : ""}${JSON.stringify(value)}${useBrackets ? "}" : ""}`; - }); - const openingTag = await processCode( - `<${attrs.type}${keyValueProps.length ? " " : ""}${keyValueProps.join(" ")}>`, - elementWalker.children.length > 0 - ); - - if (elementWalker.children.length > 0) { - const addSpace = - elementWalker.children.length > 1 || - ["orderedList", "bulletList", "taskList", "table"].includes( - elementWalker.children[0].node.type - ); - - return `${openingTag}\n${addSpace ? "\n" : ""}${( - await transformContentNode( - elementWalker as JSONContentNodeWalker - ) - ) - .split("\n") - .map((line) => ` ${line}`) - .join("\n")}${addSpace ? "\n" : ""}\n`; - } - - return openingTag; - }; - const transformContentNode = async ( - nodeWalker: JSONContentNodeWalker< - JSONContentNode["listItem" | "taskItem" | "blockquote" | "doc" | "element"] - > - ): Promise => { - const output: string[] = []; - - for await (const child of nodeWalker.children) { - const processChildNode = async (): Promise => { - const nodeType = child.node.type; - const previousSibling = child.previousSibling(); - const isPreviousSiblingList = ["bulletList", "orderedList", "taskList"].includes( - previousSibling?.node.type || "" - ); - - switch (nodeType) { - case "paragraph": - return `\n${transformTextNode( - child as JSONContentNodeWalker - )}\n`; - case "bulletList": - case "orderedList": - case "taskList": - return `${isPreviousSiblingList ? "\n" : ""}${await transformList( - child as JSONContentNodeWalker< - JSONContentNode["bulletList" | "orderedList" | "taskList"] - > - )}\n`; - case "table": - return `\n${transformTable( - child as JSONContentNodeWalker - )}\n`; - case "horizontalRule": - return "\n---\n"; - case "image": - return `\n![${child.node.attrs?.alt || ""}](${child.node.attrs?.src || ""})\n`; - case "heading": - return `\n${"#".repeat(child.node.attrs?.level || 1)} ${transformTextNode( - child as JSONContentNodeWalker - )}\n`; - case "codeBlock": - return `\n${transformCodeBlock( - child as JSONContentNodeWalker - )}\n`; - case "element": - return `${child.node.attrs.type === "Import" ? "" : "\n"}${await transformElement( - child as JSONContentNodeWalker - )}\n`; - case "blockquote": - return `\n${( - await transformContentNode( - child as JSONContentNodeWalker - ) - ) - .split("\n") - .map((line) => `> ${line}`) - .join("\n")}\n`; - default: - return ""; - } - }; - - output.push(await processChildNode()); - } - - return output.join("").trim(); - }; - const transformList = async ( - listWalker: JSONContentNodeWalker - ): Promise => { - const listItems: Array<{ content: string; node: JSONContentNode["listItem" | "taskItem"] }> = - []; - - for await (const nodeWalker of listWalker.children) { - listItems.push({ - content: await transformContentNode(nodeWalker), - node: nodeWalker.node - }); - } - - return listItems - .map(({ content, node }, index) => { - let prefix = ""; - let indent = 0; - - if (listWalker.node.type === "taskList" && node.type === "taskItem") { - prefix = `${node.attrs?.checked ? "- [x] " : "- [ ] "} `; - indent = 2; - } - - if (listWalker.node.type === "orderedList") { - const start = listWalker.node.attrs?.start || 1; - - prefix = `${start + index}. `; - indent = prefix.length; - } - - if (listWalker.node.type === "bulletList") { - prefix = "- "; - indent = prefix.length; - } - - return content - .split("\n") - .map((line, lineIndex) => { - if (lineIndex === 0) { - return `${prefix}${line}`; - } - - return `${" ".repeat(indent)}${line}`; - }) - .join("\n"); - }) - .join("\n"); - }; - const content = await transformContentNode( - contentWalker as JSONContentNodeWalker - ); - const { __extensions__, ...customData } = contentPiece?.customData || {}; - - let frontmatter = dump( - { - ...(contentPiece?.canonicalLink && { canonicalLink: contentPiece.canonicalLink }), - ...(contentPiece?.coverUrl && { coverUrl: contentPiece.coverUrl }), - ...(contentPiece?.description && { - description: convertToText(contentPiece.description, { wordwrap: false }) - }), - ...(contentPiece?.date && { date: dayjs(contentPiece.date).format("YYYY-MM-DD") }), - ...(contentPiece?.slug && { slug: contentPiece.slug }), - ...(contentPiece?.title && { title: contentPiece.title }), - ...customData - }, - { skipInvalid: true, forceQuotes: true, quotingType: '"' } - ); - - if (frontmatter.trim() === "{}") { - frontmatter = ""; - } - - return ( - await format( - `${frontmatter ? "---" : ""}\n${frontmatter.trim()}\n${ - frontmatter ? "---" : "" - }\n\n${content.trim()}`, - { plugins: [markdownPlugin], parser: "mdx" } - ) - ).trim(); -}; - -export { mdxAsyncOutputTransformer }; diff --git a/apps/backend/extensions/src/routes/medium/index.ts b/apps/backend/extensions/src/routes/medium/index.ts deleted file mode 100644 index be9cf0c4..00000000 --- a/apps/backend/extensions/src/routes/medium/index.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { mediumOutputTransformer } from "./transformer"; -import { procedure, router, zodId, errors } from "@vrite/backend"; -import { - JSONContent, - createClient, - ContentPieceWithAdditionalData, - Extension -} from "@vrite/sdk/api"; -import { z } from "zod"; - -const processContent = (content: JSONContent): string => { - return mediumOutputTransformer(content); -}; -const basePath = "/medium"; -const getAuthorId = async (token: string): Promise => { - const contentType = "application/json"; - - try { - const response = await fetch("https://api.medium.com/v1/me", { - method: "GET", - headers: { - "Authorization": `Bearer ${token}`, - "Accept": contentType, - "content-type": contentType - } - }); - const json: { data?: { id: string } } = await response.json(); - - if (!json.data?.id) throw errors.serverError(); - - return json.data?.id || ""; - } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - throw errors.serverError(); - } -}; -const publishToMedium = async ( - contentPiece: ContentPieceWithAdditionalData, true>, - extension: Partial -): Promise<{ mediumId: string }> => { - const contentType = "application/json"; - const contentPieceData = contentPiece.customData?.__extensions__?.[extension.name || ""] || {}; - const article = { - title: contentPiece.title, - content: [ - `# ${contentPiece.title}`, - contentPiece.coverUrl && `![${contentPiece.coverAlt || ""}](${contentPiece.coverUrl || ""})`, - `${processContent(contentPiece.content)}` - ] - .filter(Boolean) - .join("\n"), - contentFormat: "markdown", - tags: contentPiece.tags - .map((tag) => tag.label?.toLowerCase().replace(/\s/g, "")) - .filter(Boolean), - canonicalUrl: contentPiece.canonicalLink || undefined, - publishStatus: "public" - }; - - if (!extension.config) throw errors.notFound("extension"); - - if (typeof contentPieceData?.draft === "boolean") { - article.publishStatus = contentPieceData.draft ? "draft" : "public"; - } else if (typeof extension.config.draft === "boolean") { - article.publishStatus = extension.config.draft ? "draft" : "public"; - } - - try { - const authorId = await getAuthorId(`${extension.config.token}`); - const response = await fetch(`https://api.medium.com/v1/users/${authorId}/posts`, { - method: "POST", - headers: { - "Authorization": `Bearer ${extension.config.token}`, - "Accept": contentType, - "content-type": contentType - }, - body: JSON.stringify(article) - }); - const json: { data?: { id: string } } = await response.json(); - - if (!json.data?.id) throw errors.serverError(); - - return { mediumId: `${json.data?.id || ""}` }; - } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - throw errors.serverError(); - } -}; -const mediumRouter = router({ - publish: procedure - .meta({ - openapi: { method: "POST", path: `${basePath}` } - }) - .input( - z.object({ - contentPieceId: zodId() - }) - ) - .output(z.object({ mediumId: z.string() })) - .mutation(async ({ ctx, input }) => { - const token = ctx.req.headers.authorization?.replace("Bearer ", ""); - const extensionId = ctx.req.headers["x-vrite-extension-id"] as string | undefined; - - if (!token || !extensionId) throw errors.unauthorized(); - - const client = createClient({ - token, - extensionId - }); - const extension = await client.extension.get(); - const contentPiece = await client.contentPieces.get({ - id: input.contentPieceId, - content: true, - description: "text" - }); - - return await publishToMedium(contentPiece, extension); - }), - webhook: procedure - .meta({ openapi: { method: "POST", path: `${basePath}/webhook` } }) - .input( - z.object({ - id: zodId() - }) - ) - .output(z.void()) - .mutation(async ({ ctx, input }) => { - const extensionId = ctx.req.headers["x-vrite-extension-id"] as string | undefined; - - if (!extensionId) throw errors.unauthorized(); - - const client = createClient({ - token: "", - extensionId - }); - const extension = await client.extension.get(); - - if (!extension.token) throw errors.unauthorized(); - - client.reconfigure({ token: extension.token }); - - const contentPiece = await client.contentPieces.get({ - id: input.id, - content: true, - description: "text" - }); - const contentPieceData = - contentPiece.customData?.__extensions__?.[extension.name || ""] || {}; - - if (contentPieceData.autoPublish === false) return; - if (contentPieceData.mediumId) return; - if (extension.config?.requireCanonicalLink && !contentPiece.canonicalLink) return; - - const { mediumId } = await publishToMedium(contentPiece, extension); - - await client.extension.updateContentPieceData({ - contentPieceId: input.id, - data: { ...contentPiece.customData?.__extensions__?.[extension.name || ""], mediumId } - }); - }) -}); - -export { mediumRouter }; diff --git a/apps/backend/extensions/src/routes/medium/transformer.ts b/apps/backend/extensions/src/routes/medium/transformer.ts deleted file mode 100644 index 838b3155..00000000 --- a/apps/backend/extensions/src/routes/medium/transformer.ts +++ /dev/null @@ -1,162 +0,0 @@ -/* eslint-disable no-use-before-define */ -import { - createOutputTransformer, - createContentWalker, - JSONContentNodeWalker, - JSONContentNode -} from "@vrite/sdk/transformers"; - -const mediumOutputTransformer = createOutputTransformer((contentNode) => { - const contentWalker = createContentWalker(contentNode); - const transformText = (textWalker: JSONContentNodeWalker): string => { - let output = ""; - - if (textWalker.node.type === "text") { - output = textWalker.node.text; - textWalker.node.marks?.forEach((mark) => { - switch (mark.type) { - case "link": - output = `[${output}](${mark.attrs.href})`; - break; - case "bold": - output = `**${output}**`; - break; - case "code": - output = `\`${output}\``; - break; - case "italic": - output = `_${output}_`; - break; - default: - break; - } - }); - } - - return output; - }; - const transformTextNode = ( - paragraphWalker: JSONContentNodeWalker - ): string => { - return `${paragraphWalker.children - .map((child) => { - if (child.node.type === "text") { - return transformText(child as JSONContentNodeWalker); - } - - return "\n"; - }) - .join("")}`; - }; - const transformHeading = ( - nodeWalker: JSONContentNodeWalker - ): string => { - const level = `${nodeWalker.node.attrs?.level || 1}`; - const content = transformTextNode( - nodeWalker as JSONContentNodeWalker - ); - - if (["1", "2"].includes(level)) return `# ${content}`; - if (["3", "4"].includes(level)) return `## ${content}`; - - return `**${content}**`; - }; - const transformContentNode = ( - nodeWalker: JSONContentNodeWalker< - JSONContentNode["listItem" | "blockquote" | "doc" | "element"] - > - ): string => { - return nodeWalker.children - .map((child) => { - const nodeType = child.node.type; - const previousSibling = child.previousSibling(); - const isPreviousSiblingList = ["bulletList", "orderedList"].includes( - previousSibling?.node.type || "" - ); - - switch (nodeType) { - case "paragraph": - return `\n${transformTextNode( - child as JSONContentNodeWalker - )}\n`; - case "bulletList": - case "orderedList": - return `${isPreviousSiblingList ? "\n" : ""}${transformList( - child as JSONContentNodeWalker - )}\n`; - case "horizontalRule": - return "\n---\n"; - case "image": - return `\n![${child.node.attrs?.alt || ""}](${child.node.attrs?.src || ""})\n`; - case "embed": - return `\n${child.node.attrs?.src || ""}\n`; - case "heading": - return `\n${transformHeading( - child as JSONContentNodeWalker - )}\n`; - case "codeBlock": - return `\n\`\`\`${child.node.attrs?.lang || ""}\n${transformTextNode( - child as JSONContentNodeWalker - )}\n\`\`\`\n`; - case "element": - return `\n${transformContentNode( - child as JSONContentNodeWalker - )}\n`; - case "blockquote": - return `\n${transformContentNode( - child as JSONContentNodeWalker - ) - .split("\n") - .map((line) => `> ${line}`) - .join("\n")}\n`; - default: - return ""; - } - }) - .join("") - .trim(); - }; - const transformList = ( - listWalker: JSONContentNodeWalker - ): string => { - return listWalker.children - .map((nodeWalker) => { - return { - content: transformContentNode(nodeWalker), - node: nodeWalker.node - }; - }) - .map(({ content, node }, index) => { - let prefix = ""; - let indent = 0; - - if (listWalker.node.type === "orderedList") { - const start = listWalker.node.attrs?.start || 1; - - prefix = `${start + index}. `; - indent = prefix.length; - } - - if (listWalker.node.type === "bulletList") { - prefix = "- "; - indent = prefix.length; - } - - return content - .split("\n") - .map((line, lineIndex) => { - if (lineIndex === 0) { - return `${prefix}${line}`; - } - - return `${" ".repeat(indent)}${line}`; - }) - .join("\n"); - }) - .join("\n"); - }; - - return transformContentNode(contentWalker as JSONContentNodeWalker); -}); - -export { mediumOutputTransformer }; diff --git a/apps/backend/extensions/tsconfig.json b/apps/backend/extensions/tsconfig.json deleted file mode 100644 index 7a2c267b..00000000 --- a/apps/backend/extensions/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "esModuleInterop": true, - "moduleResolution": "node", - "isolatedModules": true, - "strict": true, - "outDir": "build", - "skipLibCheck": true, - "paths": { - "#*": ["./src/*"] - } - }, - "include": ["src/**/*.ts"] -} diff --git a/apps/backend/usage-reporting/Dockerfile b/apps/backend/usage-reporting/Dockerfile deleted file mode 100644 index 9d29bd53..00000000 --- a/apps/backend/usage-reporting/Dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -FROM node:18-alpine as base - -FROM base AS builder -WORKDIR /app -RUN apk add --no-cache libc6-compat && npm install -g turbo - -COPY . . - -RUN turbo prune @vrite/usage-reporting --docker - - -FROM base as installer -WORKDIR /app - -RUN npm install -g pnpm@8.6.0 -RUN npm install -g turbo - -COPY --from=builder /app/out/json/ . -COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml -RUN pnpm i --frozen-lockfile - -COPY --from=builder /app/out/full/ . - -RUN pnpm rebuild -r -RUN turbo run build --filter=@vrite/usage-reporting - -FROM base AS runner -WORKDIR /app - -# Install extra dependencies -RUN npm install saslprep -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 app - -USER app -COPY --from=installer --chown=app:nodejs /app/apps/backend/usage-reporting/dist . -CMD node index.js diff --git a/apps/backend/usage-reporting/LICENSE.md b/apps/backend/usage-reporting/LICENSE.md deleted file mode 100644 index 6087761e..00000000 --- a/apps/backend/usage-reporting/LICENSE.md +++ /dev/null @@ -1,93 +0,0 @@ -Copyright (c) 2024 Vrite, Inc. - -Elastic License 2.0 - -## Acceptance - -By using the software, you agree to all of the terms and conditions below. - -## Copyright License - -The licensor grants you a non-exclusive, royalty-free, worldwide, -non-sublicensable, non-transferable license to use, copy, distribute, make -available, and prepare derivative works of the software, in each case subject to -the limitations and conditions below. - -## Limitations - -You may not provide the software to third parties as a hosted or managed -service, where the service provides users with access to any substantial set of -the features or functionality of the software. - -You may not move, change, disable, or circumvent the license key functionality -in the software, and you may not remove or obscure any functionality in the -software that is protected by the license key. - -You may not alter, remove, or obscure any licensing, copyright, or other notices -of the licensor in the software. Any use of the licensor’s trademarks is subject -to applicable law. - -## Patents - -The licensor grants you a license, under any patent claims the licensor can -license, or becomes able to license, to make, have made, use, sell, offer for -sale, import and have imported the software, in each case subject to the -limitations and conditions in this license. This license does not cover any -patent claims that you cause to be infringed by modifications or additions to -the software. If you or your company make any written claim that the software -infringes or contributes to infringement of any patent, your patent license for -the software granted under these terms ends immediately. If your company makes -such a claim, your patent license ends immediately for work on behalf of your -company. - -## Notices - -You must ensure that anyone who gets a copy of any part of the software from you -also gets a copy of these terms. - -If you modify the software, you must include in any modified copies of the -software prominent notices stating that you have modified the software. - -## No Other Rights - -These terms do not imply any licenses other than those expressly granted in -these terms. - -## Termination - -If you use the software in violation of these terms, such use is not licensed, -and your licenses will automatically terminate. If the licensor provides you -with a notice of your violation, and you cease all violation of this license no -later than 30 days after you receive that notice, your licenses will be -reinstated retroactively. However, if you violate these terms after such -reinstatement, any additional violation of these terms will cause your licenses -to terminate automatically and permanently. - -## No Liability - -_As far as the law allows, the software comes as is, without any warranty or -condition, and the licensor will not be liable to you for any damages arising -out of these terms or the use or nature of the software, under any kind of -legal claim._ - -## Definitions - -The **licensor** is the entity offering these terms, and the **software** is the -software the licensor makes available under these terms, including any portion -of it. - -**you** refers to the individual or entity agreeing to these terms. - -**your company** is any legal entity, sole proprietorship, or other kind of -organization that you work for, plus all organizations that have control over, -are under the control of, or are under common control with that -organization. **control** means ownership of substantially all the assets of an -entity, or the power to direct its management and policies by vote, contract, or -otherwise. Control can be direct or indirect. - -**your licenses** are all the licenses granted to you for the software under -these terms. - -**use** means anything you do with the software requiring one of your licenses. - -**trademark** means trademarks, service marks, and similar rights. diff --git a/apps/backend/usage-reporting/package.json b/apps/backend/usage-reporting/package.json deleted file mode 100644 index 45c2e487..00000000 --- a/apps/backend/usage-reporting/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "@vrite/usage-reporting", - "private": true, - "source": "src/index.ts", - "main": "index.ts", - "scripts": { - "build": "scripts build-node src/index.ts", - "start": "node ./dist/index.js" - }, - "dependencies": { - "@fastify/cors": "^9.0.1", - "@fastify/rate-limit": "^9.1.0", - "@trpc/server": "^10.45.0", - "@vrite/backend": "workspace:*", - "fastify": "^4.26.0", - "trpc-openapi": "^1.2.0" - }, - "devDependencies": { - "@vrite/scripts": "workspace:*" - } -} diff --git a/apps/backend/usage-reporting/src/index.ts b/apps/backend/usage-reporting/src/index.ts deleted file mode 100644 index 6b6aa740..00000000 --- a/apps/backend/usage-reporting/src/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { createServer, databasePlugin, pubSubPlugin, billingPlugin } from "@vrite/backend"; - -(async () => { - await createServer(async (server) => { - await server.register(databasePlugin); - await server.register(pubSubPlugin); - await server.register(billingPlugin); - - const usageLogs = await server.billing.usage.getLogs(); - - await Promise.all( - Object.keys(usageLogs).map(async (workspaceId) => { - await server.billing.usage.record(workspaceId); - }) - ); - process.exit(0); - }); -})(); diff --git a/apps/backend/usage-reporting/tsconfig.json b/apps/backend/usage-reporting/tsconfig.json deleted file mode 100644 index 7a2c267b..00000000 --- a/apps/backend/usage-reporting/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "esModuleInterop": true, - "moduleResolution": "node", - "isolatedModules": true, - "strict": true, - "outDir": "build", - "skipLibCheck": true, - "paths": { - "#*": ["./src/*"] - } - }, - "include": ["src/**/*.ts"] -} diff --git a/apps/docs/.astro/icon.d.ts b/apps/docs/.astro/icon.d.ts deleted file mode 100644 index a3e32f4c..00000000 --- a/apps/docs/.astro/icon.d.ts +++ /dev/null @@ -1,7644 +0,0 @@ -// Automatically generated by astro-icon -// ebad3f9537b7471de86e2619b0d04d99c3d417237a2d24c71aae0ab3c91ca4f0 - -declare module 'virtual:astro-icon' { - export type Icon = - | "mdi:ab-testing" - | "mdi:abacus" - | "mdi:abjad-arabic" - | "mdi:abjad-hebrew" - | "mdi:abugida-devanagari" - | "mdi:abugida-thai" - | "mdi:access-point" - | "mdi:access-point-check" - | "mdi:access-point-minus" - | "mdi:access-point-network" - | "mdi:access-point-network-off" - | "mdi:access-point-off" - | "mdi:access-point-plus" - | "mdi:access-point-remove" - | "mdi:account" - | "mdi:account-alert" - | "mdi:account-alert-outline" - | "mdi:account-arrow-down" - | "mdi:account-arrow-down-outline" - | "mdi:account-arrow-left" - | "mdi:account-arrow-left-outline" - | "mdi:account-arrow-right" - | "mdi:account-arrow-right-outline" - | "mdi:account-arrow-up" - | "mdi:account-arrow-up-outline" - | "mdi:account-badge" - | "mdi:account-badge-outline" - | "mdi:account-box" - | "mdi:account-box-edit-outline" - | "mdi:account-box-minus-outline" - | "mdi:account-box-multiple" - | "mdi:account-box-multiple-outline" - | "mdi:account-box-outline" - | "mdi:account-box-plus-outline" - | "mdi:account-cancel" - | "mdi:account-cancel-outline" - | "mdi:account-card" - | "mdi:account-card-outline" - | "mdi:account-cash" - | "mdi:account-cash-outline" - | "mdi:account-check" - | "mdi:account-check-outline" - | "mdi:account-child" - | "mdi:account-child-circle" - | "mdi:account-child-outline" - | "mdi:account-circle" - | "mdi:account-circle-outline" - | "mdi:account-clock" - | "mdi:account-clock-outline" - | "mdi:account-cog" - | "mdi:account-cog-outline" - | "mdi:account-convert" - | "mdi:account-convert-outline" - | "mdi:account-cowboy-hat" - | "mdi:account-cowboy-hat-outline" - | "mdi:account-credit-card" - | "mdi:account-credit-card-outline" - | "mdi:account-details" - | "mdi:account-details-outline" - | "mdi:account-edit" - | "mdi:account-edit-outline" - | "mdi:account-eye" - | "mdi:account-eye-outline" - | "mdi:account-file" - | "mdi:account-file-outline" - | "mdi:account-file-text" - | "mdi:account-file-text-outline" - | "mdi:account-filter" - | "mdi:account-filter-outline" - | "mdi:account-group" - | "mdi:account-group-outline" - | "mdi:account-hard-hat" - | "mdi:account-hard-hat-outline" - | "mdi:account-heart" - | "mdi:account-heart-outline" - | "mdi:account-injury" - | "mdi:account-injury-outline" - | "mdi:account-key" - | "mdi:account-key-outline" - | "mdi:account-lock" - | "mdi:account-lock-open" - | "mdi:account-lock-open-outline" - | "mdi:account-lock-outline" - | "mdi:account-minus" - | "mdi:account-minus-outline" - | "mdi:account-multiple" - | "mdi:account-multiple-check" - | "mdi:account-multiple-check-outline" - | "mdi:account-multiple-minus" - | "mdi:account-multiple-minus-outline" - | "mdi:account-multiple-outline" - | "mdi:account-multiple-plus" - | "mdi:account-multiple-plus-outline" - | "mdi:account-multiple-remove" - | "mdi:account-multiple-remove-outline" - | "mdi:account-music" - | "mdi:account-music-outline" - | "mdi:account-network" - | "mdi:account-network-off" - | "mdi:account-network-off-outline" - | "mdi:account-network-outline" - | "mdi:account-off" - | "mdi:account-off-outline" - | "mdi:account-outline" - | "mdi:account-plus" - | "mdi:account-plus-outline" - | "mdi:account-question" - | "mdi:account-question-outline" - | "mdi:account-reactivate" - | "mdi:account-reactivate-outline" - | "mdi:account-remove" - | "mdi:account-remove-outline" - | "mdi:account-school" - | "mdi:account-school-outline" - | "mdi:account-search" - | "mdi:account-search-outline" - | "mdi:account-settings" - | "mdi:account-settings-outline" - | "mdi:account-settings-variant" - | "mdi:account-star" - | "mdi:account-star-outline" - | "mdi:account-supervisor" - | "mdi:account-supervisor-circle" - | "mdi:account-supervisor-circle-outline" - | "mdi:account-supervisor-outline" - | "mdi:account-switch" - | "mdi:account-switch-outline" - | "mdi:account-sync" - | "mdi:account-sync-outline" - | "mdi:account-tag" - | "mdi:account-tag-outline" - | "mdi:account-tie" - | "mdi:account-tie-hat" - | "mdi:account-tie-hat-outline" - | "mdi:account-tie-outline" - | "mdi:account-tie-voice" - | "mdi:account-tie-voice-off" - | "mdi:account-tie-voice-off-outline" - | "mdi:account-tie-voice-outline" - | "mdi:account-tie-woman" - | "mdi:account-voice" - | "mdi:account-voice-off" - | "mdi:account-wrench" - | "mdi:account-wrench-outline" - | "mdi:accusoft" - | "mdi:ad-choices" - | "mdi:adchoices" - | "mdi:adjust" - | "mdi:adobe" - | "mdi:advertisements" - | "mdi:advertisements-off" - | "mdi:air-conditioner" - | "mdi:air-filter" - | "mdi:air-horn" - | "mdi:air-humidifier" - | "mdi:air-humidifier-off" - | "mdi:air-purifier" - | "mdi:air-purifier-off" - | "mdi:airbag" - | "mdi:airballoon" - | "mdi:airballoon-outline" - | "mdi:airplane" - | "mdi:airplane-alert" - | "mdi:airplane-check" - | "mdi:airplane-clock" - | "mdi:airplane-cog" - | "mdi:airplane-edit" - | "mdi:airplane-landing" - | "mdi:airplane-marker" - | "mdi:airplane-minus" - | "mdi:airplane-off" - | "mdi:airplane-plus" - | "mdi:airplane-remove" - | "mdi:airplane-search" - | "mdi:airplane-settings" - | "mdi:airplane-takeoff" - | "mdi:airport" - | "mdi:alarm" - | "mdi:alarm-bell" - | "mdi:alarm-check" - | "mdi:alarm-light" - | "mdi:alarm-light-off" - | "mdi:alarm-light-off-outline" - | "mdi:alarm-light-outline" - | "mdi:alarm-multiple" - | "mdi:alarm-note" - | "mdi:alarm-note-off" - | "mdi:alarm-off" - | "mdi:alarm-panel" - | "mdi:alarm-panel-outline" - | "mdi:alarm-plus" - | "mdi:alarm-snooze" - | "mdi:album" - | "mdi:alert" - | "mdi:alert-box" - | "mdi:alert-box-outline" - | "mdi:alert-circle" - | "mdi:alert-circle-check" - | "mdi:alert-circle-check-outline" - | "mdi:alert-circle-outline" - | "mdi:alert-decagram" - | "mdi:alert-decagram-outline" - | "mdi:alert-minus" - | "mdi:alert-minus-outline" - | "mdi:alert-octagon" - | "mdi:alert-octagon-outline" - | "mdi:alert-octagram" - | "mdi:alert-octagram-outline" - | "mdi:alert-outline" - | "mdi:alert-plus" - | "mdi:alert-plus-outline" - | "mdi:alert-remove" - | "mdi:alert-remove-outline" - | "mdi:alert-rhombus" - | "mdi:alert-rhombus-outline" - | "mdi:alien" - | "mdi:alien-outline" - | "mdi:align-horizontal-center" - | "mdi:align-horizontal-distribute" - | "mdi:align-horizontal-left" - | "mdi:align-horizontal-right" - | "mdi:align-vertical-bottom" - | "mdi:align-vertical-center" - | "mdi:align-vertical-distribute" - | "mdi:align-vertical-top" - | "mdi:all-inclusive" - | "mdi:all-inclusive-box" - | "mdi:all-inclusive-box-outline" - | "mdi:allergy" - | "mdi:allo" - | "mdi:alpha" - | "mdi:alpha-a" - | "mdi:alpha-a-box" - | "mdi:alpha-a-box-outline" - | "mdi:alpha-a-circle" - | "mdi:alpha-a-circle-outline" - | "mdi:alpha-b" - | "mdi:alpha-b-box" - | "mdi:alpha-b-box-outline" - | "mdi:alpha-b-circle" - | "mdi:alpha-b-circle-outline" - | "mdi:alpha-c" - | "mdi:alpha-c-box" - | "mdi:alpha-c-box-outline" - | "mdi:alpha-c-circle" - | "mdi:alpha-c-circle-outline" - | "mdi:alpha-d" - | "mdi:alpha-d-box" - | "mdi:alpha-d-box-outline" - | "mdi:alpha-d-circle" - | "mdi:alpha-d-circle-outline" - | "mdi:alpha-e" - | "mdi:alpha-e-box" - | "mdi:alpha-e-box-outline" - | "mdi:alpha-e-circle" - | "mdi:alpha-e-circle-outline" - | "mdi:alpha-f" - | "mdi:alpha-f-box" - | "mdi:alpha-f-box-outline" - | "mdi:alpha-f-circle" - | "mdi:alpha-f-circle-outline" - | "mdi:alpha-g" - | "mdi:alpha-g-box" - | "mdi:alpha-g-box-outline" - | "mdi:alpha-g-circle" - | "mdi:alpha-g-circle-outline" - | "mdi:alpha-h" - | "mdi:alpha-h-box" - | "mdi:alpha-h-box-outline" - | "mdi:alpha-h-circle" - | "mdi:alpha-h-circle-outline" - | "mdi:alpha-i" - | "mdi:alpha-i-box" - | "mdi:alpha-i-box-outline" - | "mdi:alpha-i-circle" - | "mdi:alpha-i-circle-outline" - | "mdi:alpha-j" - | "mdi:alpha-j-box" - | "mdi:alpha-j-box-outline" - | "mdi:alpha-j-circle" - | "mdi:alpha-j-circle-outline" - | "mdi:alpha-k" - | "mdi:alpha-k-box" - | "mdi:alpha-k-box-outline" - | "mdi:alpha-k-circle" - | "mdi:alpha-k-circle-outline" - | "mdi:alpha-l" - | "mdi:alpha-l-box" - | "mdi:alpha-l-box-outline" - | "mdi:alpha-l-circle" - | "mdi:alpha-l-circle-outline" - | "mdi:alpha-m" - | "mdi:alpha-m-box" - | "mdi:alpha-m-box-outline" - | "mdi:alpha-m-circle" - | "mdi:alpha-m-circle-outline" - | "mdi:alpha-n" - | "mdi:alpha-n-box" - | "mdi:alpha-n-box-outline" - | "mdi:alpha-n-circle" - | "mdi:alpha-n-circle-outline" - | "mdi:alpha-o" - | "mdi:alpha-o-box" - | "mdi:alpha-o-box-outline" - | "mdi:alpha-o-circle" - | "mdi:alpha-o-circle-outline" - | "mdi:alpha-p" - | "mdi:alpha-p-box" - | "mdi:alpha-p-box-outline" - | "mdi:alpha-p-circle" - | "mdi:alpha-p-circle-outline" - | "mdi:alpha-q" - | "mdi:alpha-q-box" - | "mdi:alpha-q-box-outline" - | "mdi:alpha-q-circle" - | "mdi:alpha-q-circle-outline" - | "mdi:alpha-r" - | "mdi:alpha-r-box" - | "mdi:alpha-r-box-outline" - | "mdi:alpha-r-circle" - | "mdi:alpha-r-circle-outline" - | "mdi:alpha-s" - | "mdi:alpha-s-box" - | "mdi:alpha-s-box-outline" - | "mdi:alpha-s-circle" - | "mdi:alpha-s-circle-outline" - | "mdi:alpha-t" - | "mdi:alpha-t-box" - | "mdi:alpha-t-box-outline" - | "mdi:alpha-t-circle" - | "mdi:alpha-t-circle-outline" - | "mdi:alpha-u" - | "mdi:alpha-u-box" - | "mdi:alpha-u-box-outline" - | "mdi:alpha-u-circle" - | "mdi:alpha-u-circle-outline" - | "mdi:alpha-v" - | "mdi:alpha-v-box" - | "mdi:alpha-v-box-outline" - | "mdi:alpha-v-circle" - | "mdi:alpha-v-circle-outline" - | "mdi:alpha-w" - | "mdi:alpha-w-box" - | "mdi:alpha-w-box-outline" - | "mdi:alpha-w-circle" - | "mdi:alpha-w-circle-outline" - | "mdi:alpha-x" - | "mdi:alpha-x-box" - | "mdi:alpha-x-box-outline" - | "mdi:alpha-x-circle" - | "mdi:alpha-x-circle-outline" - | "mdi:alpha-y" - | "mdi:alpha-y-box" - | "mdi:alpha-y-box-outline" - | "mdi:alpha-y-circle" - | "mdi:alpha-y-circle-outline" - | "mdi:alpha-z" - | "mdi:alpha-z-box" - | "mdi:alpha-z-box-outline" - | "mdi:alpha-z-circle" - | "mdi:alpha-z-circle-outline" - | "mdi:alphabet-aurebesh" - | "mdi:alphabet-cyrillic" - | "mdi:alphabet-greek" - | "mdi:alphabet-latin" - | "mdi:alphabet-piqad" - | "mdi:alphabet-tengwar" - | "mdi:alphabetical" - | "mdi:alphabetical-off" - | "mdi:alphabetical-variant" - | "mdi:alphabetical-variant-off" - | "mdi:altimeter" - | "mdi:amazon" - | "mdi:amazon-alexa" - | "mdi:amazon-drive" - | "mdi:ambulance" - | "mdi:ammunition" - | "mdi:ampersand" - | "mdi:amplifier" - | "mdi:amplifier-off" - | "mdi:anchor" - | "mdi:android" - | "mdi:android-auto" - | "mdi:android-debug-bridge" - | "mdi:android-head" - | "mdi:android-messages" - | "mdi:android-studio" - | "mdi:angle-acute" - | "mdi:angle-obtuse" - | "mdi:angle-right" - | "mdi:angular" - | "mdi:angularjs" - | "mdi:animation" - | "mdi:animation-outline" - | "mdi:animation-play" - | "mdi:animation-play-outline" - | "mdi:ansible" - | "mdi:antenna" - | "mdi:anvil" - | "mdi:apache-kafka" - | "mdi:api" - | "mdi:api-off" - | "mdi:apple" - | "mdi:apple-finder" - | "mdi:apple-icloud" - | "mdi:apple-ios" - | "mdi:apple-keyboard-caps" - | "mdi:apple-keyboard-command" - | "mdi:apple-keyboard-control" - | "mdi:apple-keyboard-option" - | "mdi:apple-keyboard-shift" - | "mdi:apple-safari" - | "mdi:application" - | "mdi:application-array" - | "mdi:application-array-outline" - | "mdi:application-braces" - | "mdi:application-braces-outline" - | "mdi:application-brackets" - | "mdi:application-brackets-outline" - | "mdi:application-cog" - | "mdi:application-cog-outline" - | "mdi:application-edit" - | "mdi:application-edit-outline" - | "mdi:application-export" - | "mdi:application-import" - | "mdi:application-outline" - | "mdi:application-parentheses" - | "mdi:application-parentheses-outline" - | "mdi:application-settings" - | "mdi:application-settings-outline" - | "mdi:application-variable" - | "mdi:application-variable-outline" - | "mdi:appnet" - | "mdi:approximately-equal" - | "mdi:approximately-equal-box" - | "mdi:apps" - | "mdi:apps-box" - | "mdi:arch" - | "mdi:archive" - | "mdi:archive-alert" - | "mdi:archive-alert-outline" - | "mdi:archive-arrow-down" - | "mdi:archive-arrow-down-outline" - | "mdi:archive-arrow-up" - | "mdi:archive-arrow-up-outline" - | "mdi:archive-cancel" - | "mdi:archive-cancel-outline" - | "mdi:archive-check" - | "mdi:archive-check-outline" - | "mdi:archive-clock" - | "mdi:archive-clock-outline" - | "mdi:archive-cog" - | "mdi:archive-cog-outline" - | "mdi:archive-edit" - | "mdi:archive-edit-outline" - | "mdi:archive-eye" - | "mdi:archive-eye-outline" - | "mdi:archive-lock" - | "mdi:archive-lock-open" - | "mdi:archive-lock-open-outline" - | "mdi:archive-lock-outline" - | "mdi:archive-marker" - | "mdi:archive-marker-outline" - | "mdi:archive-minus" - | "mdi:archive-minus-outline" - | "mdi:archive-music" - | "mdi:archive-music-outline" - | "mdi:archive-off" - | "mdi:archive-off-outline" - | "mdi:archive-outline" - | "mdi:archive-plus" - | "mdi:archive-plus-outline" - | "mdi:archive-refresh" - | "mdi:archive-refresh-outline" - | "mdi:archive-remove" - | "mdi:archive-remove-outline" - | "mdi:archive-search" - | "mdi:archive-search-outline" - | "mdi:archive-settings" - | "mdi:archive-settings-outline" - | "mdi:archive-star" - | "mdi:archive-star-outline" - | "mdi:archive-sync" - | "mdi:archive-sync-outline" - | "mdi:arm-flex" - | "mdi:arm-flex-outline" - | "mdi:arrange-bring-forward" - | "mdi:arrange-bring-to-front" - | "mdi:arrange-send-backward" - | "mdi:arrange-send-to-back" - | "mdi:arrow-all" - | "mdi:arrow-bottom-left" - | "mdi:arrow-bottom-left-bold-box" - | "mdi:arrow-bottom-left-bold-box-outline" - | "mdi:arrow-bottom-left-bold-outline" - | "mdi:arrow-bottom-left-thick" - | "mdi:arrow-bottom-left-thin" - | "mdi:arrow-bottom-left-thin-circle-outline" - | "mdi:arrow-bottom-right" - | "mdi:arrow-bottom-right-bold-box" - | "mdi:arrow-bottom-right-bold-box-outline" - | "mdi:arrow-bottom-right-bold-outline" - | "mdi:arrow-bottom-right-thick" - | "mdi:arrow-bottom-right-thin" - | "mdi:arrow-bottom-right-thin-circle-outline" - | "mdi:arrow-collapse" - | "mdi:arrow-collapse-all" - | "mdi:arrow-collapse-down" - | "mdi:arrow-collapse-horizontal" - | "mdi:arrow-collapse-left" - | "mdi:arrow-collapse-right" - | "mdi:arrow-collapse-up" - | "mdi:arrow-collapse-vertical" - | "mdi:arrow-decision" - | "mdi:arrow-decision-auto" - | "mdi:arrow-decision-auto-outline" - | "mdi:arrow-decision-outline" - | "mdi:arrow-down" - | "mdi:arrow-down-bold" - | "mdi:arrow-down-bold-box" - | "mdi:arrow-down-bold-box-outline" - | "mdi:arrow-down-bold-circle" - | "mdi:arrow-down-bold-circle-outline" - | "mdi:arrow-down-bold-hexagon-outline" - | "mdi:arrow-down-bold-outline" - | "mdi:arrow-down-box" - | "mdi:arrow-down-circle" - | "mdi:arrow-down-circle-outline" - | "mdi:arrow-down-drop-circle" - | "mdi:arrow-down-drop-circle-outline" - | "mdi:arrow-down-left" - | "mdi:arrow-down-left-bold" - | "mdi:arrow-down-right" - | "mdi:arrow-down-right-bold" - | "mdi:arrow-down-thick" - | "mdi:arrow-down-thin" - | "mdi:arrow-down-thin-circle-outline" - | "mdi:arrow-expand" - | "mdi:arrow-expand-all" - | "mdi:arrow-expand-down" - | "mdi:arrow-expand-horizontal" - | "mdi:arrow-expand-left" - | "mdi:arrow-expand-right" - | "mdi:arrow-expand-up" - | "mdi:arrow-expand-vertical" - | "mdi:arrow-horizontal-lock" - | "mdi:arrow-left" - | "mdi:arrow-left-bold" - | "mdi:arrow-left-bold-box" - | "mdi:arrow-left-bold-box-outline" - | "mdi:arrow-left-bold-circle" - | "mdi:arrow-left-bold-circle-outline" - | "mdi:arrow-left-bold-hexagon-outline" - | "mdi:arrow-left-bold-outline" - | "mdi:arrow-left-bottom" - | "mdi:arrow-left-bottom-bold" - | "mdi:arrow-left-box" - | "mdi:arrow-left-circle" - | "mdi:arrow-left-circle-outline" - | "mdi:arrow-left-drop-circle" - | "mdi:arrow-left-drop-circle-outline" - | "mdi:arrow-left-right" - | "mdi:arrow-left-right-bold" - | "mdi:arrow-left-right-bold-outline" - | "mdi:arrow-left-thick" - | "mdi:arrow-left-thin" - | "mdi:arrow-left-thin-circle-outline" - | "mdi:arrow-left-top" - | "mdi:arrow-left-top-bold" - | "mdi:arrow-oscillating" - | "mdi:arrow-oscillating-off" - | "mdi:arrow-projectile" - | "mdi:arrow-projectile-multiple" - | "mdi:arrow-right" - | "mdi:arrow-right-bold" - | "mdi:arrow-right-bold-box" - | "mdi:arrow-right-bold-box-outline" - | "mdi:arrow-right-bold-circle" - | "mdi:arrow-right-bold-circle-outline" - | "mdi:arrow-right-bold-hexagon-outline" - | "mdi:arrow-right-bold-outline" - | "mdi:arrow-right-bottom" - | "mdi:arrow-right-bottom-bold" - | "mdi:arrow-right-box" - | "mdi:arrow-right-circle" - | "mdi:arrow-right-circle-outline" - | "mdi:arrow-right-drop-circle" - | "mdi:arrow-right-drop-circle-outline" - | "mdi:arrow-right-thick" - | "mdi:arrow-right-thin" - | "mdi:arrow-right-thin-circle-outline" - | "mdi:arrow-right-top" - | "mdi:arrow-right-top-bold" - | "mdi:arrow-split-horizontal" - | "mdi:arrow-split-vertical" - | "mdi:arrow-top-left" - | "mdi:arrow-top-left-bold-box" - | "mdi:arrow-top-left-bold-box-outline" - | "mdi:arrow-top-left-bold-outline" - | "mdi:arrow-top-left-bottom-right" - | "mdi:arrow-top-left-bottom-right-bold" - | "mdi:arrow-top-left-thick" - | "mdi:arrow-top-left-thin" - | "mdi:arrow-top-left-thin-circle-outline" - | "mdi:arrow-top-right" - | "mdi:arrow-top-right-bold-box" - | "mdi:arrow-top-right-bold-box-outline" - | "mdi:arrow-top-right-bold-outline" - | "mdi:arrow-top-right-bottom-left" - | "mdi:arrow-top-right-bottom-left-bold" - | "mdi:arrow-top-right-thick" - | "mdi:arrow-top-right-thin" - | "mdi:arrow-top-right-thin-circle-outline" - | "mdi:arrow-u-down-left" - | "mdi:arrow-u-down-left-bold" - | "mdi:arrow-u-down-right" - | "mdi:arrow-u-down-right-bold" - | "mdi:arrow-u-left-bottom" - | "mdi:arrow-u-left-bottom-bold" - | "mdi:arrow-u-left-top" - | "mdi:arrow-u-left-top-bold" - | "mdi:arrow-u-right-bottom" - | "mdi:arrow-u-right-bottom-bold" - | "mdi:arrow-u-right-top" - | "mdi:arrow-u-right-top-bold" - | "mdi:arrow-u-up-left" - | "mdi:arrow-u-up-left-bold" - | "mdi:arrow-u-up-right" - | "mdi:arrow-u-up-right-bold" - | "mdi:arrow-up" - | "mdi:arrow-up-bold" - | "mdi:arrow-up-bold-box" - | "mdi:arrow-up-bold-box-outline" - | "mdi:arrow-up-bold-circle" - | "mdi:arrow-up-bold-circle-outline" - | "mdi:arrow-up-bold-hexagon-outline" - | "mdi:arrow-up-bold-outline" - | "mdi:arrow-up-box" - | "mdi:arrow-up-circle" - | "mdi:arrow-up-circle-outline" - | "mdi:arrow-up-down" - | "mdi:arrow-up-down-bold" - | "mdi:arrow-up-down-bold-outline" - | "mdi:arrow-up-drop-circle" - | "mdi:arrow-up-drop-circle-outline" - | "mdi:arrow-up-left" - | "mdi:arrow-up-left-bold" - | "mdi:arrow-up-right" - | "mdi:arrow-up-right-bold" - | "mdi:arrow-up-thick" - | "mdi:arrow-up-thin" - | "mdi:arrow-up-thin-circle-outline" - | "mdi:arrow-vertical-lock" - | "mdi:artboard" - | "mdi:artstation" - | "mdi:aspect-ratio" - | "mdi:assistant" - | "mdi:asterisk" - | "mdi:asterisk-circle-outline" - | "mdi:at" - | "mdi:atlassian" - | "mdi:atm" - | "mdi:atom" - | "mdi:atom-variant" - | "mdi:attachment" - | "mdi:attachment-check" - | "mdi:attachment-lock" - | "mdi:attachment-minus" - | "mdi:attachment-off" - | "mdi:attachment-plus" - | "mdi:attachment-remove" - | "mdi:atv" - | "mdi:audio-input-rca" - | "mdi:audio-input-stereo-minijack" - | "mdi:audio-input-xlr" - | "mdi:audio-video" - | "mdi:audio-video-off" - | "mdi:augmented-reality" - | "mdi:aurora" - | "mdi:auto-download" - | "mdi:auto-fix" - | "mdi:auto-mode" - | "mdi:auto-upload" - | "mdi:autorenew" - | "mdi:autorenew-off" - | "mdi:av-timer" - | "mdi:awning" - | "mdi:awning-outline" - | "mdi:aws" - | "mdi:axe" - | "mdi:axe-battle" - | "mdi:axis" - | "mdi:axis-arrow" - | "mdi:axis-arrow-info" - | "mdi:axis-arrow-lock" - | "mdi:axis-lock" - | "mdi:axis-x-arrow" - | "mdi:axis-x-arrow-lock" - | "mdi:axis-x-rotate-clockwise" - | "mdi:axis-x-rotate-counterclockwise" - | "mdi:axis-x-y-arrow-lock" - | "mdi:axis-y-arrow" - | "mdi:axis-y-arrow-lock" - | "mdi:axis-y-rotate-clockwise" - | "mdi:axis-y-rotate-counterclockwise" - | "mdi:axis-z-arrow" - | "mdi:axis-z-arrow-lock" - | "mdi:axis-z-rotate-clockwise" - | "mdi:axis-z-rotate-counterclockwise" - | "mdi:babel" - | "mdi:baby" - | "mdi:baby-bottle" - | "mdi:baby-bottle-outline" - | "mdi:baby-buggy" - | "mdi:baby-buggy-off" - | "mdi:baby-carriage" - | "mdi:baby-carriage-off" - | "mdi:baby-face" - | "mdi:baby-face-outline" - | "mdi:backburger" - | "mdi:backspace" - | "mdi:backspace-outline" - | "mdi:backspace-reverse" - | "mdi:backspace-reverse-outline" - | "mdi:backup-restore" - | "mdi:bacteria" - | "mdi:bacteria-outline" - | "mdi:badge-account" - | "mdi:badge-account-alert" - | "mdi:badge-account-alert-outline" - | "mdi:badge-account-horizontal" - | "mdi:badge-account-horizontal-outline" - | "mdi:badge-account-outline" - | "mdi:badminton" - | "mdi:bag-carry-on" - | "mdi:bag-carry-on-check" - | "mdi:bag-carry-on-off" - | "mdi:bag-checked" - | "mdi:bag-personal" - | "mdi:bag-personal-off" - | "mdi:bag-personal-off-outline" - | "mdi:bag-personal-outline" - | "mdi:bag-personal-plus" - | "mdi:bag-personal-plus-outline" - | "mdi:bag-personal-tag" - | "mdi:bag-personal-tag-outline" - | "mdi:bag-suitcase" - | "mdi:bag-suitcase-off" - | "mdi:bag-suitcase-off-outline" - | "mdi:bag-suitcase-outline" - | "mdi:baguette" - | "mdi:balcony" - | "mdi:balloon" - | "mdi:ballot" - | "mdi:ballot-outline" - | "mdi:ballot-recount" - | "mdi:ballot-recount-outline" - | "mdi:bandage" - | "mdi:bandcamp" - | "mdi:bank" - | "mdi:bank-check" - | "mdi:bank-circle" - | "mdi:bank-circle-outline" - | "mdi:bank-minus" - | "mdi:bank-off" - | "mdi:bank-off-outline" - | "mdi:bank-outline" - | "mdi:bank-plus" - | "mdi:bank-remove" - | "mdi:bank-transfer" - | "mdi:bank-transfer-in" - | "mdi:bank-transfer-out" - | "mdi:barcode" - | "mdi:barcode-off" - | "mdi:barcode-scan" - | "mdi:barley" - | "mdi:barley-off" - | "mdi:barn" - | "mdi:barrel" - | "mdi:barrel-outline" - | "mdi:baseball" - | "mdi:baseball-bat" - | "mdi:baseball-diamond" - | "mdi:baseball-diamond-outline" - | "mdi:baseball-outline" - | "mdi:basecamp" - | "mdi:bash" - | "mdi:basket" - | "mdi:basket-check" - | "mdi:basket-check-outline" - | "mdi:basket-fill" - | "mdi:basket-minus" - | "mdi:basket-minus-outline" - | "mdi:basket-off" - | "mdi:basket-off-outline" - | "mdi:basket-outline" - | "mdi:basket-plus" - | "mdi:basket-plus-outline" - | "mdi:basket-remove" - | "mdi:basket-remove-outline" - | "mdi:basket-unfill" - | "mdi:basketball" - | "mdi:basketball-hoop" - | "mdi:basketball-hoop-outline" - | "mdi:bat" - | "mdi:bathtub" - | "mdi:bathtub-outline" - | "mdi:battery" - | "mdi:battery-10" - | "mdi:battery-10-bluetooth" - | "mdi:battery-20" - | "mdi:battery-20-bluetooth" - | "mdi:battery-30" - | "mdi:battery-30-bluetooth" - | "mdi:battery-40" - | "mdi:battery-40-bluetooth" - | "mdi:battery-50" - | "mdi:battery-50-bluetooth" - | "mdi:battery-60" - | "mdi:battery-60-bluetooth" - | "mdi:battery-70" - | "mdi:battery-70-bluetooth" - | "mdi:battery-80" - | "mdi:battery-80-bluetooth" - | "mdi:battery-90" - | "mdi:battery-90-bluetooth" - | "mdi:battery-alert" - | "mdi:battery-alert-bluetooth" - | "mdi:battery-alert-variant" - | "mdi:battery-alert-variant-outline" - | "mdi:battery-arrow-down" - | "mdi:battery-arrow-down-outline" - | "mdi:battery-arrow-up" - | "mdi:battery-arrow-up-outline" - | "mdi:battery-bluetooth" - | "mdi:battery-bluetooth-variant" - | "mdi:battery-charging" - | "mdi:battery-charging-10" - | "mdi:battery-charging-100" - | "mdi:battery-charging-20" - | "mdi:battery-charging-30" - | "mdi:battery-charging-40" - | "mdi:battery-charging-50" - | "mdi:battery-charging-60" - | "mdi:battery-charging-70" - | "mdi:battery-charging-80" - | "mdi:battery-charging-90" - | "mdi:battery-charging-high" - | "mdi:battery-charging-low" - | "mdi:battery-charging-medium" - | "mdi:battery-charging-outline" - | "mdi:battery-charging-wireless" - | "mdi:battery-charging-wireless-10" - | "mdi:battery-charging-wireless-20" - | "mdi:battery-charging-wireless-30" - | "mdi:battery-charging-wireless-40" - | "mdi:battery-charging-wireless-50" - | "mdi:battery-charging-wireless-60" - | "mdi:battery-charging-wireless-70" - | "mdi:battery-charging-wireless-80" - | "mdi:battery-charging-wireless-90" - | "mdi:battery-charging-wireless-alert" - | "mdi:battery-charging-wireless-outline" - | "mdi:battery-check" - | "mdi:battery-check-outline" - | "mdi:battery-clock" - | "mdi:battery-clock-outline" - | "mdi:battery-heart" - | "mdi:battery-heart-outline" - | "mdi:battery-heart-variant" - | "mdi:battery-high" - | "mdi:battery-lock" - | "mdi:battery-lock-open" - | "mdi:battery-low" - | "mdi:battery-medium" - | "mdi:battery-minus" - | "mdi:battery-minus-outline" - | "mdi:battery-minus-variant" - | "mdi:battery-negative" - | "mdi:battery-off" - | "mdi:battery-off-outline" - | "mdi:battery-outline" - | "mdi:battery-plus" - | "mdi:battery-plus-outline" - | "mdi:battery-plus-variant" - | "mdi:battery-positive" - | "mdi:battery-remove" - | "mdi:battery-remove-outline" - | "mdi:battery-standard" - | "mdi:battery-sync" - | "mdi:battery-sync-outline" - | "mdi:battery-unknown" - | "mdi:battery-unknown-bluetooth" - | "mdi:battlenet" - | "mdi:beach" - | "mdi:beaker" - | "mdi:beaker-alert" - | "mdi:beaker-alert-outline" - | "mdi:beaker-check" - | "mdi:beaker-check-outline" - | "mdi:beaker-minus" - | "mdi:beaker-minus-outline" - | "mdi:beaker-outline" - | "mdi:beaker-plus" - | "mdi:beaker-plus-outline" - | "mdi:beaker-question" - | "mdi:beaker-question-outline" - | "mdi:beaker-remove" - | "mdi:beaker-remove-outline" - | "mdi:beam" - | "mdi:beats" - | "mdi:bed" - | "mdi:bed-clock" - | "mdi:bed-double" - | "mdi:bed-double-outline" - | "mdi:bed-empty" - | "mdi:bed-king" - | "mdi:bed-king-outline" - | "mdi:bed-outline" - | "mdi:bed-queen" - | "mdi:bed-queen-outline" - | "mdi:bed-single" - | "mdi:bed-single-outline" - | "mdi:bee" - | "mdi:bee-flower" - | "mdi:beehive-off-outline" - | "mdi:beehive-outline" - | "mdi:beekeeper" - | "mdi:beer" - | "mdi:beer-outline" - | "mdi:behance" - | "mdi:bell" - | "mdi:bell-alert" - | "mdi:bell-alert-outline" - | "mdi:bell-badge" - | "mdi:bell-badge-outline" - | "mdi:bell-cancel" - | "mdi:bell-cancel-outline" - | "mdi:bell-check" - | "mdi:bell-check-outline" - | "mdi:bell-circle" - | "mdi:bell-circle-outline" - | "mdi:bell-cog" - | "mdi:bell-cog-outline" - | "mdi:bell-minus" - | "mdi:bell-minus-outline" - | "mdi:bell-off" - | "mdi:bell-off-outline" - | "mdi:bell-outline" - | "mdi:bell-plus" - | "mdi:bell-plus-outline" - | "mdi:bell-remove" - | "mdi:bell-remove-outline" - | "mdi:bell-ring" - | "mdi:bell-ring-outline" - | "mdi:bell-sleep" - | "mdi:bell-sleep-outline" - | "mdi:bench" - | "mdi:bench-back" - | "mdi:beta" - | "mdi:betamax" - | "mdi:biathlon" - | "mdi:bicycle" - | "mdi:bicycle-basket" - | "mdi:bicycle-cargo" - | "mdi:bicycle-electric" - | "mdi:bicycle-penny-farthing" - | "mdi:bike" - | "mdi:bike-fast" - | "mdi:bike-pedal" - | "mdi:bike-pedal-clipless" - | "mdi:bike-pedal-mountain" - | "mdi:billboard" - | "mdi:billiards" - | "mdi:billiards-rack" - | "mdi:binoculars" - | "mdi:bio" - | "mdi:biohazard" - | "mdi:bird" - | "mdi:bitbucket" - | "mdi:bitcoin" - | "mdi:black-mesa" - | "mdi:blackberry" - | "mdi:blender" - | "mdi:blender-outline" - | "mdi:blender-software" - | "mdi:blinds" - | "mdi:blinds-horizontal" - | "mdi:blinds-horizontal-closed" - | "mdi:blinds-open" - | "mdi:blinds-vertical" - | "mdi:blinds-vertical-closed" - | "mdi:block-helper" - | "mdi:blogger" - | "mdi:blood-bag" - | "mdi:bluetooth" - | "mdi:bluetooth-audio" - | "mdi:bluetooth-connect" - | "mdi:bluetooth-off" - | "mdi:bluetooth-settings" - | "mdi:bluetooth-transfer" - | "mdi:blur" - | "mdi:blur-linear" - | "mdi:blur-off" - | "mdi:blur-radial" - | "mdi:bolt" - | "mdi:bomb" - | "mdi:bomb-off" - | "mdi:bone" - | "mdi:bone-off" - | "mdi:book" - | "mdi:book-account" - | "mdi:book-account-outline" - | "mdi:book-alert" - | "mdi:book-alert-outline" - | "mdi:book-alphabet" - | "mdi:book-arrow-down" - | "mdi:book-arrow-down-outline" - | "mdi:book-arrow-left" - | "mdi:book-arrow-left-outline" - | "mdi:book-arrow-right" - | "mdi:book-arrow-right-outline" - | "mdi:book-arrow-up" - | "mdi:book-arrow-up-outline" - | "mdi:book-cancel" - | "mdi:book-cancel-outline" - | "mdi:book-check" - | "mdi:book-check-outline" - | "mdi:book-clock" - | "mdi:book-clock-outline" - | "mdi:book-cog" - | "mdi:book-cog-outline" - | "mdi:book-cross" - | "mdi:book-edit" - | "mdi:book-edit-outline" - | "mdi:book-education" - | "mdi:book-education-outline" - | "mdi:book-heart" - | "mdi:book-heart-outline" - | "mdi:book-information-variant" - | "mdi:book-lock" - | "mdi:book-lock-open" - | "mdi:book-lock-open-outline" - | "mdi:book-lock-outline" - | "mdi:book-marker" - | "mdi:book-marker-outline" - | "mdi:book-minus" - | "mdi:book-minus-multiple" - | "mdi:book-minus-multiple-outline" - | "mdi:book-minus-outline" - | "mdi:book-multiple" - | "mdi:book-multiple-minus" - | "mdi:book-multiple-outline" - | "mdi:book-multiple-plus" - | "mdi:book-multiple-remove" - | "mdi:book-multiple-variant" - | "mdi:book-music" - | "mdi:book-music-outline" - | "mdi:book-off" - | "mdi:book-off-outline" - | "mdi:book-open" - | "mdi:book-open-blank-variant" - | "mdi:book-open-blank-variant-outline" - | "mdi:book-open-outline" - | "mdi:book-open-page-variant" - | "mdi:book-open-page-variant-outline" - | "mdi:book-open-variant" - | "mdi:book-open-variant-outline" - | "mdi:book-outline" - | "mdi:book-play" - | "mdi:book-play-outline" - | "mdi:book-plus" - | "mdi:book-plus-multiple" - | "mdi:book-plus-multiple-outline" - | "mdi:book-plus-outline" - | "mdi:book-refresh" - | "mdi:book-refresh-outline" - | "mdi:book-remove" - | "mdi:book-remove-multiple" - | "mdi:book-remove-multiple-outline" - | "mdi:book-remove-outline" - | "mdi:book-search" - | "mdi:book-search-outline" - | "mdi:book-settings" - | "mdi:book-settings-outline" - | "mdi:book-sync" - | "mdi:book-sync-outline" - | "mdi:book-variant" - | "mdi:book-variant-multiple" - | "mdi:bookmark" - | "mdi:bookmark-box" - | "mdi:bookmark-box-multiple" - | "mdi:bookmark-box-multiple-outline" - | "mdi:bookmark-box-outline" - | "mdi:bookmark-check" - | "mdi:bookmark-check-outline" - | "mdi:bookmark-minus" - | "mdi:bookmark-minus-outline" - | "mdi:bookmark-multiple" - | "mdi:bookmark-multiple-outline" - | "mdi:bookmark-music" - | "mdi:bookmark-music-outline" - | "mdi:bookmark-off" - | "mdi:bookmark-off-outline" - | "mdi:bookmark-outline" - | "mdi:bookmark-plus" - | "mdi:bookmark-plus-outline" - | "mdi:bookmark-remove" - | "mdi:bookmark-remove-outline" - | "mdi:bookshelf" - | "mdi:boom-gate" - | "mdi:boom-gate-alert" - | "mdi:boom-gate-alert-outline" - | "mdi:boom-gate-arrow-down" - | "mdi:boom-gate-arrow-down-outline" - | "mdi:boom-gate-arrow-up" - | "mdi:boom-gate-arrow-up-outline" - | "mdi:boom-gate-outline" - | "mdi:boom-gate-up" - | "mdi:boom-gate-up-outline" - | "mdi:boombox" - | "mdi:boomerang" - | "mdi:bootstrap" - | "mdi:border-all" - | "mdi:border-all-variant" - | "mdi:border-bottom" - | "mdi:border-bottom-variant" - | "mdi:border-color" - | "mdi:border-horizontal" - | "mdi:border-inside" - | "mdi:border-left" - | "mdi:border-left-variant" - | "mdi:border-none" - | "mdi:border-none-variant" - | "mdi:border-outside" - | "mdi:border-radius" - | "mdi:border-right" - | "mdi:border-right-variant" - | "mdi:border-style" - | "mdi:border-top" - | "mdi:border-top-variant" - | "mdi:border-vertical" - | "mdi:bottle-soda" - | "mdi:bottle-soda-classic" - | "mdi:bottle-soda-classic-outline" - | "mdi:bottle-soda-outline" - | "mdi:bottle-tonic" - | "mdi:bottle-tonic-outline" - | "mdi:bottle-tonic-plus" - | "mdi:bottle-tonic-plus-outline" - | "mdi:bottle-tonic-skull" - | "mdi:bottle-tonic-skull-outline" - | "mdi:bottle-wine" - | "mdi:bottle-wine-outline" - | "mdi:bow-arrow" - | "mdi:bow-tie" - | "mdi:bowl" - | "mdi:bowl-mix" - | "mdi:bowl-mix-outline" - | "mdi:bowl-outline" - | "mdi:bowling" - | "mdi:box" - | "mdi:box-cutter" - | "mdi:box-cutter-off" - | "mdi:box-download" - | "mdi:box-shadow" - | "mdi:box-upload" - | "mdi:boxing-glove" - | "mdi:boxing-gloves" - | "mdi:braille" - | "mdi:brain" - | "mdi:bread-slice" - | "mdi:bread-slice-outline" - | "mdi:bridge" - | "mdi:briefcase" - | "mdi:briefcase-account" - | "mdi:briefcase-account-outline" - | "mdi:briefcase-arrow-left-right" - | "mdi:briefcase-arrow-left-right-outline" - | "mdi:briefcase-arrow-up-down" - | "mdi:briefcase-arrow-up-down-outline" - | "mdi:briefcase-check" - | "mdi:briefcase-check-outline" - | "mdi:briefcase-clock" - | "mdi:briefcase-clock-outline" - | "mdi:briefcase-download" - | "mdi:briefcase-download-outline" - | "mdi:briefcase-edit" - | "mdi:briefcase-edit-outline" - | "mdi:briefcase-eye" - | "mdi:briefcase-eye-outline" - | "mdi:briefcase-minus" - | "mdi:briefcase-minus-outline" - | "mdi:briefcase-off" - | "mdi:briefcase-off-outline" - | "mdi:briefcase-outline" - | "mdi:briefcase-plus" - | "mdi:briefcase-plus-outline" - | "mdi:briefcase-remove" - | "mdi:briefcase-remove-outline" - | "mdi:briefcase-search" - | "mdi:briefcase-search-outline" - | "mdi:briefcase-upload" - | "mdi:briefcase-upload-outline" - | "mdi:briefcase-variant" - | "mdi:briefcase-variant-off" - | "mdi:briefcase-variant-off-outline" - | "mdi:briefcase-variant-outline" - | "mdi:brightness" - | "mdi:brightness-1" - | "mdi:brightness-2" - | "mdi:brightness-3" - | "mdi:brightness-4" - | "mdi:brightness-5" - | "mdi:brightness-6" - | "mdi:brightness-7" - | "mdi:brightness-auto" - | "mdi:brightness-percent" - | "mdi:broadcast" - | "mdi:broadcast-off" - | "mdi:broom" - | "mdi:brush" - | "mdi:brush-off" - | "mdi:brush-outline" - | "mdi:brush-variant" - | "mdi:bucket" - | "mdi:bucket-outline" - | "mdi:buffer" - | "mdi:buffet" - | "mdi:bug" - | "mdi:bug-check" - | "mdi:bug-check-outline" - | "mdi:bug-outline" - | "mdi:bug-pause" - | "mdi:bug-pause-outline" - | "mdi:bug-play" - | "mdi:bug-play-outline" - | "mdi:bug-stop" - | "mdi:bug-stop-outline" - | "mdi:bugle" - | "mdi:bulkhead-light" - | "mdi:bulldozer" - | "mdi:bullet" - | "mdi:bulletin-board" - | "mdi:bullhorn" - | "mdi:bullhorn-outline" - | "mdi:bullhorn-variant" - | "mdi:bullhorn-variant-outline" - | "mdi:bullseye" - | "mdi:bullseye-arrow" - | "mdi:bulma" - | "mdi:bunk-bed" - | "mdi:bunk-bed-outline" - | "mdi:bus" - | "mdi:bus-alert" - | "mdi:bus-articulated-end" - | "mdi:bus-articulated-front" - | "mdi:bus-clock" - | "mdi:bus-double-decker" - | "mdi:bus-electric" - | "mdi:bus-marker" - | "mdi:bus-multiple" - | "mdi:bus-school" - | "mdi:bus-side" - | "mdi:bus-sign" - | "mdi:bus-stop" - | "mdi:bus-stop-covered" - | "mdi:bus-stop-uncovered" - | "mdi:bus-wrench" - | "mdi:butterfly" - | "mdi:butterfly-outline" - | "mdi:button-cursor" - | "mdi:button-pointer" - | "mdi:cabin-a-frame" - | "mdi:cable-data" - | "mdi:cached" - | "mdi:cactus" - | "mdi:cake" - | "mdi:cake-layered" - | "mdi:cake-variant" - | "mdi:cake-variant-outline" - | "mdi:calculator" - | "mdi:calculator-off" - | "mdi:calculator-variant" - | "mdi:calculator-variant-outline" - | "mdi:calendar" - | "mdi:calendar-account" - | "mdi:calendar-account-outline" - | "mdi:calendar-alert" - | "mdi:calendar-alert-outline" - | "mdi:calendar-arrow-left" - | "mdi:calendar-arrow-right" - | "mdi:calendar-badge" - | "mdi:calendar-badge-outline" - | "mdi:calendar-blank" - | "mdi:calendar-blank-multiple" - | "mdi:calendar-blank-outline" - | "mdi:calendar-check" - | "mdi:calendar-check-outline" - | "mdi:calendar-clock" - | "mdi:calendar-clock-outline" - | "mdi:calendar-collapse-horizontal" - | "mdi:calendar-collapse-horizontal-outline" - | "mdi:calendar-cursor" - | "mdi:calendar-cursor-outline" - | "mdi:calendar-edit" - | "mdi:calendar-edit-outline" - | "mdi:calendar-end" - | "mdi:calendar-end-outline" - | "mdi:calendar-expand-horizontal" - | "mdi:calendar-expand-horizontal-outline" - | "mdi:calendar-export" - | "mdi:calendar-export-outline" - | "mdi:calendar-filter" - | "mdi:calendar-filter-outline" - | "mdi:calendar-heart" - | "mdi:calendar-heart-outline" - | "mdi:calendar-import" - | "mdi:calendar-import-outline" - | "mdi:calendar-lock" - | "mdi:calendar-lock-open" - | "mdi:calendar-lock-open-outline" - | "mdi:calendar-lock-outline" - | "mdi:calendar-minus" - | "mdi:calendar-minus-outline" - | "mdi:calendar-month" - | "mdi:calendar-month-outline" - | "mdi:calendar-multiple" - | "mdi:calendar-multiple-check" - | "mdi:calendar-multiselect" - | "mdi:calendar-multiselect-outline" - | "mdi:calendar-outline" - | "mdi:calendar-plus" - | "mdi:calendar-plus-outline" - | "mdi:calendar-question" - | "mdi:calendar-question-outline" - | "mdi:calendar-range" - | "mdi:calendar-range-outline" - | "mdi:calendar-refresh" - | "mdi:calendar-refresh-outline" - | "mdi:calendar-remove" - | "mdi:calendar-remove-outline" - | "mdi:calendar-search" - | "mdi:calendar-search-outline" - | "mdi:calendar-select" - | "mdi:calendar-star" - | "mdi:calendar-star-four-points" - | "mdi:calendar-star-outline" - | "mdi:calendar-start" - | "mdi:calendar-start-outline" - | "mdi:calendar-sync" - | "mdi:calendar-sync-outline" - | "mdi:calendar-text" - | "mdi:calendar-text-outline" - | "mdi:calendar-today" - | "mdi:calendar-today-outline" - | "mdi:calendar-week" - | "mdi:calendar-week-begin" - | "mdi:calendar-week-begin-outline" - | "mdi:calendar-week-end" - | "mdi:calendar-week-end-outline" - | "mdi:calendar-week-outline" - | "mdi:calendar-weekend" - | "mdi:calendar-weekend-outline" - | "mdi:call-made" - | "mdi:call-merge" - | "mdi:call-missed" - | "mdi:call-received" - | "mdi:call-split" - | "mdi:camcorder" - | "mdi:camcorder-off" - | "mdi:camera" - | "mdi:camera-account" - | "mdi:camera-burst" - | "mdi:camera-control" - | "mdi:camera-document" - | "mdi:camera-document-off" - | "mdi:camera-enhance" - | "mdi:camera-enhance-outline" - | "mdi:camera-flip" - | "mdi:camera-flip-outline" - | "mdi:camera-focus" - | "mdi:camera-front" - | "mdi:camera-front-variant" - | "mdi:camera-gopro" - | "mdi:camera-image" - | "mdi:camera-iris" - | "mdi:camera-lock" - | "mdi:camera-lock-open" - | "mdi:camera-lock-open-outline" - | "mdi:camera-lock-outline" - | "mdi:camera-marker" - | "mdi:camera-marker-outline" - | "mdi:camera-metering-center" - | "mdi:camera-metering-matrix" - | "mdi:camera-metering-partial" - | "mdi:camera-metering-spot" - | "mdi:camera-off" - | "mdi:camera-off-outline" - | "mdi:camera-outline" - | "mdi:camera-party-mode" - | "mdi:camera-plus" - | "mdi:camera-plus-outline" - | "mdi:camera-rear" - | "mdi:camera-rear-variant" - | "mdi:camera-retake" - | "mdi:camera-retake-outline" - | "mdi:camera-switch" - | "mdi:camera-switch-outline" - | "mdi:camera-timer" - | "mdi:camera-wireless" - | "mdi:camera-wireless-outline" - | "mdi:campfire" - | "mdi:cancel" - | "mdi:candelabra" - | "mdi:candelabra-fire" - | "mdi:candle" - | "mdi:candy" - | "mdi:candy-off" - | "mdi:candy-off-outline" - | "mdi:candy-outline" - | "mdi:candycane" - | "mdi:cannabis" - | "mdi:cannabis-off" - | "mdi:caps-lock" - | "mdi:car" - | "mdi:car-2-plus" - | "mdi:car-3-plus" - | "mdi:car-arrow-left" - | "mdi:car-arrow-right" - | "mdi:car-back" - | "mdi:car-battery" - | "mdi:car-brake-abs" - | "mdi:car-brake-alert" - | "mdi:car-brake-fluid-level" - | "mdi:car-brake-hold" - | "mdi:car-brake-low-pressure" - | "mdi:car-brake-parking" - | "mdi:car-brake-retarder" - | "mdi:car-brake-temperature" - | "mdi:car-brake-worn-linings" - | "mdi:car-child-seat" - | "mdi:car-clock" - | "mdi:car-clutch" - | "mdi:car-cog" - | "mdi:car-connected" - | "mdi:car-convertable" - | "mdi:car-convertible" - | "mdi:car-coolant-level" - | "mdi:car-cruise-control" - | "mdi:car-defrost-front" - | "mdi:car-defrost-rear" - | "mdi:car-door" - | "mdi:car-door-lock" - | "mdi:car-door-lock-open" - | "mdi:car-electric" - | "mdi:car-electric-outline" - | "mdi:car-emergency" - | "mdi:car-esp" - | "mdi:car-estate" - | "mdi:car-hatchback" - | "mdi:car-info" - | "mdi:car-key" - | "mdi:car-lifted-pickup" - | "mdi:car-light-alert" - | "mdi:car-light-dimmed" - | "mdi:car-light-fog" - | "mdi:car-light-high" - | "mdi:car-limousine" - | "mdi:car-multiple" - | "mdi:car-off" - | "mdi:car-outline" - | "mdi:car-parking-lights" - | "mdi:car-pickup" - | "mdi:car-search" - | "mdi:car-search-outline" - | "mdi:car-seat" - | "mdi:car-seat-cooler" - | "mdi:car-seat-heater" - | "mdi:car-select" - | "mdi:car-settings" - | "mdi:car-shift-pattern" - | "mdi:car-side" - | "mdi:car-speed-limiter" - | "mdi:car-sports" - | "mdi:car-tire-alert" - | "mdi:car-traction-control" - | "mdi:car-turbocharger" - | "mdi:car-wash" - | "mdi:car-windshield" - | "mdi:car-windshield-outline" - | "mdi:car-wireless" - | "mdi:car-wrench" - | "mdi:carabiner" - | "mdi:caravan" - | "mdi:card" - | "mdi:card-account-details" - | "mdi:card-account-details-outline" - | "mdi:card-account-details-star" - | "mdi:card-account-details-star-outline" - | "mdi:card-account-mail" - | "mdi:card-account-mail-outline" - | "mdi:card-account-phone" - | "mdi:card-account-phone-outline" - | "mdi:card-bulleted" - | "mdi:card-bulleted-off" - | "mdi:card-bulleted-off-outline" - | "mdi:card-bulleted-outline" - | "mdi:card-bulleted-settings" - | "mdi:card-bulleted-settings-outline" - | "mdi:card-minus" - | "mdi:card-minus-outline" - | "mdi:card-multiple" - | "mdi:card-multiple-outline" - | "mdi:card-off" - | "mdi:card-off-outline" - | "mdi:card-outline" - | "mdi:card-plus" - | "mdi:card-plus-outline" - | "mdi:card-remove" - | "mdi:card-remove-outline" - | "mdi:card-search" - | "mdi:card-search-outline" - | "mdi:card-text" - | "mdi:card-text-outline" - | "mdi:cards" - | "mdi:cards-club" - | "mdi:cards-club-outline" - | "mdi:cards-diamond" - | "mdi:cards-diamond-outline" - | "mdi:cards-heart" - | "mdi:cards-heart-outline" - | "mdi:cards-outline" - | "mdi:cards-playing" - | "mdi:cards-playing-club" - | "mdi:cards-playing-club-multiple" - | "mdi:cards-playing-club-multiple-outline" - | "mdi:cards-playing-club-outline" - | "mdi:cards-playing-diamond" - | "mdi:cards-playing-diamond-multiple" - | "mdi:cards-playing-diamond-multiple-outline" - | "mdi:cards-playing-diamond-outline" - | "mdi:cards-playing-heart" - | "mdi:cards-playing-heart-multiple" - | "mdi:cards-playing-heart-multiple-outline" - | "mdi:cards-playing-heart-outline" - | "mdi:cards-playing-outline" - | "mdi:cards-playing-spade" - | "mdi:cards-playing-spade-multiple" - | "mdi:cards-playing-spade-multiple-outline" - | "mdi:cards-playing-spade-outline" - | "mdi:cards-spade" - | "mdi:cards-spade-outline" - | "mdi:cards-variant" - | "mdi:carrot" - | "mdi:cart" - | "mdi:cart-arrow-down" - | "mdi:cart-arrow-right" - | "mdi:cart-arrow-up" - | "mdi:cart-check" - | "mdi:cart-heart" - | "mdi:cart-minus" - | "mdi:cart-off" - | "mdi:cart-outline" - | "mdi:cart-percent" - | "mdi:cart-plus" - | "mdi:cart-remove" - | "mdi:cart-variant" - | "mdi:case-sensitive-alt" - | "mdi:cash" - | "mdi:cash-100" - | "mdi:cash-check" - | "mdi:cash-clock" - | "mdi:cash-edit" - | "mdi:cash-fast" - | "mdi:cash-lock" - | "mdi:cash-lock-open" - | "mdi:cash-marker" - | "mdi:cash-minus" - | "mdi:cash-multiple" - | "mdi:cash-off" - | "mdi:cash-plus" - | "mdi:cash-refund" - | "mdi:cash-register" - | "mdi:cash-remove" - | "mdi:cash-sync" - | "mdi:cash-usd" - | "mdi:cash-usd-outline" - | "mdi:cassette" - | "mdi:cast" - | "mdi:cast-audio" - | "mdi:cast-audio-variant" - | "mdi:cast-connected" - | "mdi:cast-education" - | "mdi:cast-off" - | "mdi:cast-variant" - | "mdi:castle" - | "mdi:cat" - | "mdi:cctv" - | "mdi:cctv-off" - | "mdi:ceiling-fan" - | "mdi:ceiling-fan-light" - | "mdi:ceiling-light" - | "mdi:ceiling-light-multiple" - | "mdi:ceiling-light-multiple-outline" - | "mdi:ceiling-light-outline" - | "mdi:cellphone" - | "mdi:cellphone-android" - | "mdi:cellphone-arrow-down" - | "mdi:cellphone-arrow-down-variant" - | "mdi:cellphone-basic" - | "mdi:cellphone-charging" - | "mdi:cellphone-check" - | "mdi:cellphone-cog" - | "mdi:cellphone-dock" - | "mdi:cellphone-information" - | "mdi:cellphone-iphone" - | "mdi:cellphone-key" - | "mdi:cellphone-link" - | "mdi:cellphone-link-off" - | "mdi:cellphone-lock" - | "mdi:cellphone-marker" - | "mdi:cellphone-message" - | "mdi:cellphone-message-off" - | "mdi:cellphone-nfc" - | "mdi:cellphone-nfc-off" - | "mdi:cellphone-off" - | "mdi:cellphone-play" - | "mdi:cellphone-remove" - | "mdi:cellphone-screenshot" - | "mdi:cellphone-settings" - | "mdi:cellphone-sound" - | "mdi:cellphone-text" - | "mdi:cellphone-wireless" - | "mdi:centos" - | "mdi:certificate" - | "mdi:certificate-outline" - | "mdi:chair-rolling" - | "mdi:chair-school" - | "mdi:chandelier" - | "mdi:charity" - | "mdi:charity-search" - | "mdi:chart-arc" - | "mdi:chart-areaspline" - | "mdi:chart-areaspline-variant" - | "mdi:chart-bar" - | "mdi:chart-bar-stacked" - | "mdi:chart-bell-curve" - | "mdi:chart-bell-curve-cumulative" - | "mdi:chart-box" - | "mdi:chart-box-multiple" - | "mdi:chart-box-multiple-outline" - | "mdi:chart-box-outline" - | "mdi:chart-box-plus-outline" - | "mdi:chart-bubble" - | "mdi:chart-donut" - | "mdi:chart-donut-variant" - | "mdi:chart-gantt" - | "mdi:chart-histogram" - | "mdi:chart-line" - | "mdi:chart-line-stacked" - | "mdi:chart-line-variant" - | "mdi:chart-multiline" - | "mdi:chart-multiple" - | "mdi:chart-pie" - | "mdi:chart-pie-outline" - | "mdi:chart-ppf" - | "mdi:chart-sankey" - | "mdi:chart-sankey-variant" - | "mdi:chart-scatter-plot" - | "mdi:chart-scatter-plot-hexbin" - | "mdi:chart-timeline" - | "mdi:chart-timeline-variant" - | "mdi:chart-timeline-variant-shimmer" - | "mdi:chart-tree" - | "mdi:chart-waterfall" - | "mdi:chat" - | "mdi:chat-alert" - | "mdi:chat-alert-outline" - | "mdi:chat-minus" - | "mdi:chat-minus-outline" - | "mdi:chat-outline" - | "mdi:chat-plus" - | "mdi:chat-plus-outline" - | "mdi:chat-processing" - | "mdi:chat-processing-outline" - | "mdi:chat-question" - | "mdi:chat-question-outline" - | "mdi:chat-remove" - | "mdi:chat-remove-outline" - | "mdi:chat-sleep" - | "mdi:chat-sleep-outline" - | "mdi:check" - | "mdi:check-all" - | "mdi:check-bold" - | "mdi:check-bookmark" - | "mdi:check-circle" - | "mdi:check-circle-outline" - | "mdi:check-decagram" - | "mdi:check-decagram-outline" - | "mdi:check-network" - | "mdi:check-network-outline" - | "mdi:check-outline" - | "mdi:check-underline" - | "mdi:check-underline-circle" - | "mdi:check-underline-circle-outline" - | "mdi:checkbook" - | "mdi:checkbook-arrow-left" - | "mdi:checkbook-arrow-right" - | "mdi:checkbox-blank" - | "mdi:checkbox-blank-badge" - | "mdi:checkbox-blank-badge-outline" - | "mdi:checkbox-blank-circle" - | "mdi:checkbox-blank-circle-outline" - | "mdi:checkbox-blank-off" - | "mdi:checkbox-blank-off-outline" - | "mdi:checkbox-blank-outline" - | "mdi:checkbox-intermediate" - | "mdi:checkbox-intermediate-variant" - | "mdi:checkbox-marked" - | "mdi:checkbox-marked-circle" - | "mdi:checkbox-marked-circle-auto-outline" - | "mdi:checkbox-marked-circle-minus-outline" - | "mdi:checkbox-marked-circle-outline" - | "mdi:checkbox-marked-circle-plus-outline" - | "mdi:checkbox-marked-outline" - | "mdi:checkbox-multiple-blank" - | "mdi:checkbox-multiple-blank-circle" - | "mdi:checkbox-multiple-blank-circle-outline" - | "mdi:checkbox-multiple-blank-outline" - | "mdi:checkbox-multiple-marked" - | "mdi:checkbox-multiple-marked-circle" - | "mdi:checkbox-multiple-marked-circle-outline" - | "mdi:checkbox-multiple-marked-outline" - | "mdi:checkbox-multiple-outline" - | "mdi:checkbox-outline" - | "mdi:checkerboard" - | "mdi:checkerboard-minus" - | "mdi:checkerboard-plus" - | "mdi:checkerboard-remove" - | "mdi:cheese" - | "mdi:cheese-off" - | "mdi:chef-hat" - | "mdi:chemical-weapon" - | "mdi:chess-bishop" - | "mdi:chess-king" - | "mdi:chess-knight" - | "mdi:chess-pawn" - | "mdi:chess-queen" - | "mdi:chess-rook" - | "mdi:chevron-double-down" - | "mdi:chevron-double-left" - | "mdi:chevron-double-right" - | "mdi:chevron-double-up" - | "mdi:chevron-down" - | "mdi:chevron-down-box" - | "mdi:chevron-down-box-outline" - | "mdi:chevron-down-circle" - | "mdi:chevron-down-circle-outline" - | "mdi:chevron-left" - | "mdi:chevron-left-box" - | "mdi:chevron-left-box-outline" - | "mdi:chevron-left-circle" - | "mdi:chevron-left-circle-outline" - | "mdi:chevron-right" - | "mdi:chevron-right-box" - | "mdi:chevron-right-box-outline" - | "mdi:chevron-right-circle" - | "mdi:chevron-right-circle-outline" - | "mdi:chevron-triple-down" - | "mdi:chevron-triple-left" - | "mdi:chevron-triple-right" - | "mdi:chevron-triple-up" - | "mdi:chevron-up" - | "mdi:chevron-up-box" - | "mdi:chevron-up-box-outline" - | "mdi:chevron-up-circle" - | "mdi:chevron-up-circle-outline" - | "mdi:chili-alert" - | "mdi:chili-alert-outline" - | "mdi:chili-hot" - | "mdi:chili-hot-outline" - | "mdi:chili-medium" - | "mdi:chili-medium-outline" - | "mdi:chili-mild" - | "mdi:chili-mild-outline" - | "mdi:chili-off" - | "mdi:chili-off-outline" - | "mdi:chip" - | "mdi:church" - | "mdi:church-outline" - | "mdi:cigar" - | "mdi:cigar-off" - | "mdi:circle" - | "mdi:circle-box" - | "mdi:circle-box-outline" - | "mdi:circle-double" - | "mdi:circle-edit-outline" - | "mdi:circle-expand" - | "mdi:circle-half" - | "mdi:circle-half-full" - | "mdi:circle-medium" - | "mdi:circle-multiple" - | "mdi:circle-multiple-outline" - | "mdi:circle-off-outline" - | "mdi:circle-opacity" - | "mdi:circle-outline" - | "mdi:circle-slice-1" - | "mdi:circle-slice-2" - | "mdi:circle-slice-3" - | "mdi:circle-slice-4" - | "mdi:circle-slice-5" - | "mdi:circle-slice-6" - | "mdi:circle-slice-7" - | "mdi:circle-slice-8" - | "mdi:circle-small" - | "mdi:circular-saw" - | "mdi:cisco-webex" - | "mdi:city" - | "mdi:city-switch" - | "mdi:city-variant" - | "mdi:city-variant-outline" - | "mdi:clipboard" - | "mdi:clipboard-account" - | "mdi:clipboard-account-outline" - | "mdi:clipboard-alert" - | "mdi:clipboard-alert-outline" - | "mdi:clipboard-arrow-down" - | "mdi:clipboard-arrow-down-outline" - | "mdi:clipboard-arrow-left" - | "mdi:clipboard-arrow-left-outline" - | "mdi:clipboard-arrow-right" - | "mdi:clipboard-arrow-right-outline" - | "mdi:clipboard-arrow-up" - | "mdi:clipboard-arrow-up-outline" - | "mdi:clipboard-check" - | "mdi:clipboard-check-multiple" - | "mdi:clipboard-check-multiple-outline" - | "mdi:clipboard-check-outline" - | "mdi:clipboard-clock" - | "mdi:clipboard-clock-outline" - | "mdi:clipboard-edit" - | "mdi:clipboard-edit-outline" - | "mdi:clipboard-file" - | "mdi:clipboard-file-outline" - | "mdi:clipboard-flow" - | "mdi:clipboard-flow-outline" - | "mdi:clipboard-list" - | "mdi:clipboard-list-outline" - | "mdi:clipboard-minus" - | "mdi:clipboard-minus-outline" - | "mdi:clipboard-multiple" - | "mdi:clipboard-multiple-outline" - | "mdi:clipboard-off" - | "mdi:clipboard-off-outline" - | "mdi:clipboard-outline" - | "mdi:clipboard-play" - | "mdi:clipboard-play-multiple" - | "mdi:clipboard-play-multiple-outline" - | "mdi:clipboard-play-outline" - | "mdi:clipboard-plus" - | "mdi:clipboard-plus-outline" - | "mdi:clipboard-pulse" - | "mdi:clipboard-pulse-outline" - | "mdi:clipboard-remove" - | "mdi:clipboard-remove-outline" - | "mdi:clipboard-search" - | "mdi:clipboard-search-outline" - | "mdi:clipboard-text" - | "mdi:clipboard-text-clock" - | "mdi:clipboard-text-clock-outline" - | "mdi:clipboard-text-multiple" - | "mdi:clipboard-text-multiple-outline" - | "mdi:clipboard-text-off" - | "mdi:clipboard-text-off-outline" - | "mdi:clipboard-text-outline" - | "mdi:clipboard-text-play" - | "mdi:clipboard-text-play-outline" - | "mdi:clipboard-text-search" - | "mdi:clipboard-text-search-outline" - | "mdi:clippy" - | "mdi:clock" - | "mdi:clock-alert" - | "mdi:clock-alert-outline" - | "mdi:clock-check" - | "mdi:clock-check-outline" - | "mdi:clock-digital" - | "mdi:clock-edit" - | "mdi:clock-edit-outline" - | "mdi:clock-end" - | "mdi:clock-fast" - | "mdi:clock-in" - | "mdi:clock-minus" - | "mdi:clock-minus-outline" - | "mdi:clock-out" - | "mdi:clock-outline" - | "mdi:clock-plus" - | "mdi:clock-plus-outline" - | "mdi:clock-remove" - | "mdi:clock-remove-outline" - | "mdi:clock-star-four-points" - | "mdi:clock-star-four-points-outline" - | "mdi:clock-start" - | "mdi:clock-time-eight" - | "mdi:clock-time-eight-outline" - | "mdi:clock-time-eleven" - | "mdi:clock-time-eleven-outline" - | "mdi:clock-time-five" - | "mdi:clock-time-five-outline" - | "mdi:clock-time-four" - | "mdi:clock-time-four-outline" - | "mdi:clock-time-nine" - | "mdi:clock-time-nine-outline" - | "mdi:clock-time-one" - | "mdi:clock-time-one-outline" - | "mdi:clock-time-seven" - | "mdi:clock-time-seven-outline" - | "mdi:clock-time-six" - | "mdi:clock-time-six-outline" - | "mdi:clock-time-ten" - | "mdi:clock-time-ten-outline" - | "mdi:clock-time-three" - | "mdi:clock-time-three-outline" - | "mdi:clock-time-twelve" - | "mdi:clock-time-twelve-outline" - | "mdi:clock-time-two" - | "mdi:clock-time-two-outline" - | "mdi:close" - | "mdi:close-box" - | "mdi:close-box-multiple" - | "mdi:close-box-multiple-outline" - | "mdi:close-box-outline" - | "mdi:close-circle" - | "mdi:close-circle-multiple" - | "mdi:close-circle-multiple-outline" - | "mdi:close-circle-outline" - | "mdi:close-network" - | "mdi:close-network-outline" - | "mdi:close-octagon" - | "mdi:close-octagon-outline" - | "mdi:close-outline" - | "mdi:close-thick" - | "mdi:closed-caption" - | "mdi:closed-caption-outline" - | "mdi:cloud" - | "mdi:cloud-alert" - | "mdi:cloud-alert-outline" - | "mdi:cloud-arrow-down" - | "mdi:cloud-arrow-down-outline" - | "mdi:cloud-arrow-left" - | "mdi:cloud-arrow-left-outline" - | "mdi:cloud-arrow-right" - | "mdi:cloud-arrow-right-outline" - | "mdi:cloud-arrow-up" - | "mdi:cloud-arrow-up-outline" - | "mdi:cloud-braces" - | "mdi:cloud-cancel" - | "mdi:cloud-cancel-outline" - | "mdi:cloud-check" - | "mdi:cloud-check-outline" - | "mdi:cloud-check-variant" - | "mdi:cloud-check-variant-outline" - | "mdi:cloud-circle" - | "mdi:cloud-circle-outline" - | "mdi:cloud-clock" - | "mdi:cloud-clock-outline" - | "mdi:cloud-cog" - | "mdi:cloud-cog-outline" - | "mdi:cloud-download" - | "mdi:cloud-download-outline" - | "mdi:cloud-key" - | "mdi:cloud-key-outline" - | "mdi:cloud-lock" - | "mdi:cloud-lock-open" - | "mdi:cloud-lock-open-outline" - | "mdi:cloud-lock-outline" - | "mdi:cloud-minus" - | "mdi:cloud-minus-outline" - | "mdi:cloud-off" - | "mdi:cloud-off-outline" - | "mdi:cloud-outline" - | "mdi:cloud-percent" - | "mdi:cloud-percent-outline" - | "mdi:cloud-plus" - | "mdi:cloud-plus-outline" - | "mdi:cloud-print" - | "mdi:cloud-print-outline" - | "mdi:cloud-question" - | "mdi:cloud-question-outline" - | "mdi:cloud-refresh" - | "mdi:cloud-refresh-outline" - | "mdi:cloud-refresh-variant" - | "mdi:cloud-refresh-variant-outline" - | "mdi:cloud-remove" - | "mdi:cloud-remove-outline" - | "mdi:cloud-search" - | "mdi:cloud-search-outline" - | "mdi:cloud-sync" - | "mdi:cloud-sync-outline" - | "mdi:cloud-tags" - | "mdi:cloud-upload" - | "mdi:cloud-upload-outline" - | "mdi:clouds" - | "mdi:clover" - | "mdi:clover-outline" - | "mdi:coach-lamp" - | "mdi:coach-lamp-variant" - | "mdi:coat-rack" - | "mdi:code-array" - | "mdi:code-block-braces" - | "mdi:code-block-brackets" - | "mdi:code-block-parentheses" - | "mdi:code-block-tags" - | "mdi:code-braces" - | "mdi:code-braces-box" - | "mdi:code-brackets" - | "mdi:code-equal" - | "mdi:code-greater-than" - | "mdi:code-greater-than-or-equal" - | "mdi:code-json" - | "mdi:code-less-than" - | "mdi:code-less-than-or-equal" - | "mdi:code-not-equal" - | "mdi:code-not-equal-variant" - | "mdi:code-parentheses" - | "mdi:code-parentheses-box" - | "mdi:code-string" - | "mdi:code-tags" - | "mdi:code-tags-check" - | "mdi:codepen" - | "mdi:coffee" - | "mdi:coffee-maker" - | "mdi:coffee-maker-check" - | "mdi:coffee-maker-check-outline" - | "mdi:coffee-maker-outline" - | "mdi:coffee-off" - | "mdi:coffee-off-outline" - | "mdi:coffee-outline" - | "mdi:coffee-to-go" - | "mdi:coffee-to-go-outline" - | "mdi:coffin" - | "mdi:cog" - | "mdi:cog-box" - | "mdi:cog-clockwise" - | "mdi:cog-counterclockwise" - | "mdi:cog-off" - | "mdi:cog-off-outline" - | "mdi:cog-outline" - | "mdi:cog-pause" - | "mdi:cog-pause-outline" - | "mdi:cog-play" - | "mdi:cog-play-outline" - | "mdi:cog-refresh" - | "mdi:cog-refresh-outline" - | "mdi:cog-stop" - | "mdi:cog-stop-outline" - | "mdi:cog-sync" - | "mdi:cog-sync-outline" - | "mdi:cog-transfer" - | "mdi:cog-transfer-outline" - | "mdi:cogs" - | "mdi:collage" - | "mdi:collapse-all" - | "mdi:collapse-all-outline" - | "mdi:color-helper" - | "mdi:comma" - | "mdi:comma-box" - | "mdi:comma-box-outline" - | "mdi:comma-circle" - | "mdi:comma-circle-outline" - | "mdi:comment" - | "mdi:comment-account" - | "mdi:comment-account-outline" - | "mdi:comment-alert" - | "mdi:comment-alert-outline" - | "mdi:comment-arrow-left" - | "mdi:comment-arrow-left-outline" - | "mdi:comment-arrow-right" - | "mdi:comment-arrow-right-outline" - | "mdi:comment-bookmark" - | "mdi:comment-bookmark-outline" - | "mdi:comment-check" - | "mdi:comment-check-outline" - | "mdi:comment-edit" - | "mdi:comment-edit-outline" - | "mdi:comment-eye" - | "mdi:comment-eye-outline" - | "mdi:comment-flash" - | "mdi:comment-flash-outline" - | "mdi:comment-minus" - | "mdi:comment-minus-outline" - | "mdi:comment-multiple" - | "mdi:comment-multiple-outline" - | "mdi:comment-off" - | "mdi:comment-off-outline" - | "mdi:comment-outline" - | "mdi:comment-plus" - | "mdi:comment-plus-outline" - | "mdi:comment-processing" - | "mdi:comment-processing-outline" - | "mdi:comment-question" - | "mdi:comment-question-outline" - | "mdi:comment-quote" - | "mdi:comment-quote-outline" - | "mdi:comment-remove" - | "mdi:comment-remove-outline" - | "mdi:comment-search" - | "mdi:comment-search-outline" - | "mdi:comment-text" - | "mdi:comment-text-multiple" - | "mdi:comment-text-multiple-outline" - | "mdi:comment-text-outline" - | "mdi:compare" - | "mdi:compare-horizontal" - | "mdi:compare-remove" - | "mdi:compare-vertical" - | "mdi:compass" - | "mdi:compass-off" - | "mdi:compass-off-outline" - | "mdi:compass-outline" - | "mdi:compass-rose" - | "mdi:compost" - | "mdi:concourse-ci" - | "mdi:cone" - | "mdi:cone-off" - | "mdi:connection" - | "mdi:console" - | "mdi:console-line" - | "mdi:console-network" - | "mdi:console-network-outline" - | "mdi:consolidate" - | "mdi:contactless-payment" - | "mdi:contactless-payment-circle" - | "mdi:contactless-payment-circle-outline" - | "mdi:contacts" - | "mdi:contacts-outline" - | "mdi:contain" - | "mdi:contain-end" - | "mdi:contain-start" - | "mdi:content-copy" - | "mdi:content-cut" - | "mdi:content-duplicate" - | "mdi:content-paste" - | "mdi:content-save" - | "mdi:content-save-alert" - | "mdi:content-save-alert-outline" - | "mdi:content-save-all" - | "mdi:content-save-all-outline" - | "mdi:content-save-check" - | "mdi:content-save-check-outline" - | "mdi:content-save-cog" - | "mdi:content-save-cog-outline" - | "mdi:content-save-edit" - | "mdi:content-save-edit-outline" - | "mdi:content-save-minus" - | "mdi:content-save-minus-outline" - | "mdi:content-save-move" - | "mdi:content-save-move-outline" - | "mdi:content-save-off" - | "mdi:content-save-off-outline" - | "mdi:content-save-outline" - | "mdi:content-save-plus" - | "mdi:content-save-plus-outline" - | "mdi:content-save-settings" - | "mdi:content-save-settings-outline" - | "mdi:contrast" - | "mdi:contrast-box" - | "mdi:contrast-circle" - | "mdi:controller" - | "mdi:controller-classic" - | "mdi:controller-classic-outline" - | "mdi:controller-off" - | "mdi:controller-xbox" - | "mdi:cookie" - | "mdi:cookie-alert" - | "mdi:cookie-alert-outline" - | "mdi:cookie-check" - | "mdi:cookie-check-outline" - | "mdi:cookie-clock" - | "mdi:cookie-clock-outline" - | "mdi:cookie-cog" - | "mdi:cookie-cog-outline" - | "mdi:cookie-edit" - | "mdi:cookie-edit-outline" - | "mdi:cookie-lock" - | "mdi:cookie-lock-outline" - | "mdi:cookie-minus" - | "mdi:cookie-minus-outline" - | "mdi:cookie-off" - | "mdi:cookie-off-outline" - | "mdi:cookie-outline" - | "mdi:cookie-plus" - | "mdi:cookie-plus-outline" - | "mdi:cookie-refresh" - | "mdi:cookie-refresh-outline" - | "mdi:cookie-remove" - | "mdi:cookie-remove-outline" - | "mdi:cookie-settings" - | "mdi:cookie-settings-outline" - | "mdi:coolant-temperature" - | "mdi:copyleft" - | "mdi:copyright" - | "mdi:cordova" - | "mdi:corn" - | "mdi:corn-off" - | "mdi:cosine-wave" - | "mdi:counter" - | "mdi:countertop" - | "mdi:countertop-outline" - | "mdi:cow" - | "mdi:cow-off" - | "mdi:cpu-32-bit" - | "mdi:cpu-64-bit" - | "mdi:cradle" - | "mdi:cradle-outline" - | "mdi:crane" - | "mdi:creation" - | "mdi:creation-outline" - | "mdi:creative-commons" - | "mdi:credit-card" - | "mdi:credit-card-check" - | "mdi:credit-card-check-outline" - | "mdi:credit-card-chip" - | "mdi:credit-card-chip-outline" - | "mdi:credit-card-clock" - | "mdi:credit-card-clock-outline" - | "mdi:credit-card-edit" - | "mdi:credit-card-edit-outline" - | "mdi:credit-card-fast" - | "mdi:credit-card-fast-outline" - | "mdi:credit-card-lock" - | "mdi:credit-card-lock-outline" - | "mdi:credit-card-marker" - | "mdi:credit-card-marker-outline" - | "mdi:credit-card-minus" - | "mdi:credit-card-minus-outline" - | "mdi:credit-card-multiple" - | "mdi:credit-card-multiple-outline" - | "mdi:credit-card-off" - | "mdi:credit-card-off-outline" - | "mdi:credit-card-outline" - | "mdi:credit-card-plus" - | "mdi:credit-card-plus-outline" - | "mdi:credit-card-refresh" - | "mdi:credit-card-refresh-outline" - | "mdi:credit-card-refund" - | "mdi:credit-card-refund-outline" - | "mdi:credit-card-remove" - | "mdi:credit-card-remove-outline" - | "mdi:credit-card-scan" - | "mdi:credit-card-scan-outline" - | "mdi:credit-card-search" - | "mdi:credit-card-search-outline" - | "mdi:credit-card-settings" - | "mdi:credit-card-settings-outline" - | "mdi:credit-card-sync" - | "mdi:credit-card-sync-outline" - | "mdi:credit-card-wireless" - | "mdi:credit-card-wireless-off" - | "mdi:credit-card-wireless-off-outline" - | "mdi:credit-card-wireless-outline" - | "mdi:cricket" - | "mdi:crop" - | "mdi:crop-free" - | "mdi:crop-landscape" - | "mdi:crop-portrait" - | "mdi:crop-rotate" - | "mdi:crop-square" - | "mdi:cross" - | "mdi:cross-bolnisi" - | "mdi:cross-celtic" - | "mdi:cross-outline" - | "mdi:crosshairs" - | "mdi:crosshairs-gps" - | "mdi:crosshairs-off" - | "mdi:crosshairs-question" - | "mdi:crowd" - | "mdi:crown" - | "mdi:crown-circle" - | "mdi:crown-circle-outline" - | "mdi:crown-outline" - | "mdi:cryengine" - | "mdi:crystal-ball" - | "mdi:cube" - | "mdi:cube-off" - | "mdi:cube-off-outline" - | "mdi:cube-outline" - | "mdi:cube-scan" - | "mdi:cube-send" - | "mdi:cube-unfolded" - | "mdi:cup" - | "mdi:cup-off" - | "mdi:cup-off-outline" - | "mdi:cup-outline" - | "mdi:cup-water" - | "mdi:cupboard" - | "mdi:cupboard-outline" - | "mdi:cupcake" - | "mdi:curling" - | "mdi:currency-bdt" - | "mdi:currency-brl" - | "mdi:currency-btc" - | "mdi:currency-chf" - | "mdi:currency-cny" - | "mdi:currency-eth" - | "mdi:currency-eur" - | "mdi:currency-eur-off" - | "mdi:currency-fra" - | "mdi:currency-gbp" - | "mdi:currency-ils" - | "mdi:currency-inr" - | "mdi:currency-jpy" - | "mdi:currency-krw" - | "mdi:currency-kzt" - | "mdi:currency-mnt" - | "mdi:currency-ngn" - | "mdi:currency-php" - | "mdi:currency-rial" - | "mdi:currency-rub" - | "mdi:currency-rupee" - | "mdi:currency-sign" - | "mdi:currency-thb" - | "mdi:currency-try" - | "mdi:currency-twd" - | "mdi:currency-uah" - | "mdi:currency-usd" - | "mdi:currency-usd-circle" - | "mdi:currency-usd-circle-outline" - | "mdi:currency-usd-off" - | "mdi:current-ac" - | "mdi:current-dc" - | "mdi:cursor-default" - | "mdi:cursor-default-click" - | "mdi:cursor-default-click-outline" - | "mdi:cursor-default-gesture" - | "mdi:cursor-default-gesture-outline" - | "mdi:cursor-default-outline" - | "mdi:cursor-move" - | "mdi:cursor-pointer" - | "mdi:cursor-text" - | "mdi:curtains" - | "mdi:curtains-closed" - | "mdi:cylinder" - | "mdi:cylinder-off" - | "mdi:dance-ballroom" - | "mdi:dance-pole" - | "mdi:data" - | "mdi:data-matrix" - | "mdi:data-matrix-edit" - | "mdi:data-matrix-minus" - | "mdi:data-matrix-plus" - | "mdi:data-matrix-remove" - | "mdi:data-matrix-scan" - | "mdi:database" - | "mdi:database-alert" - | "mdi:database-alert-outline" - | "mdi:database-arrow-down" - | "mdi:database-arrow-down-outline" - | "mdi:database-arrow-left" - | "mdi:database-arrow-left-outline" - | "mdi:database-arrow-right" - | "mdi:database-arrow-right-outline" - | "mdi:database-arrow-up" - | "mdi:database-arrow-up-outline" - | "mdi:database-check" - | "mdi:database-check-outline" - | "mdi:database-clock" - | "mdi:database-clock-outline" - | "mdi:database-cog" - | "mdi:database-cog-outline" - | "mdi:database-edit" - | "mdi:database-edit-outline" - | "mdi:database-export" - | "mdi:database-export-outline" - | "mdi:database-eye" - | "mdi:database-eye-off" - | "mdi:database-eye-off-outline" - | "mdi:database-eye-outline" - | "mdi:database-import" - | "mdi:database-import-outline" - | "mdi:database-lock" - | "mdi:database-lock-outline" - | "mdi:database-marker" - | "mdi:database-marker-outline" - | "mdi:database-minus" - | "mdi:database-minus-outline" - | "mdi:database-off" - | "mdi:database-off-outline" - | "mdi:database-outline" - | "mdi:database-plus" - | "mdi:database-plus-outline" - | "mdi:database-refresh" - | "mdi:database-refresh-outline" - | "mdi:database-remove" - | "mdi:database-remove-outline" - | "mdi:database-search" - | "mdi:database-search-outline" - | "mdi:database-settings" - | "mdi:database-settings-outline" - | "mdi:database-sync" - | "mdi:database-sync-outline" - | "mdi:death-star" - | "mdi:death-star-variant" - | "mdi:deathly-hallows" - | "mdi:debian" - | "mdi:debug-step-into" - | "mdi:debug-step-out" - | "mdi:debug-step-over" - | "mdi:decagram" - | "mdi:decagram-outline" - | "mdi:decimal" - | "mdi:decimal-comma" - | "mdi:decimal-comma-decrease" - | "mdi:decimal-comma-increase" - | "mdi:decimal-decrease" - | "mdi:decimal-increase" - | "mdi:delete" - | "mdi:delete-alert" - | "mdi:delete-alert-outline" - | "mdi:delete-circle" - | "mdi:delete-circle-outline" - | "mdi:delete-clock" - | "mdi:delete-clock-outline" - | "mdi:delete-empty" - | "mdi:delete-empty-outline" - | "mdi:delete-forever" - | "mdi:delete-forever-outline" - | "mdi:delete-off" - | "mdi:delete-off-outline" - | "mdi:delete-outline" - | "mdi:delete-restore" - | "mdi:delete-sweep" - | "mdi:delete-sweep-outline" - | "mdi:delete-variant" - | "mdi:delta" - | "mdi:desk" - | "mdi:desk-lamp" - | "mdi:desk-lamp-off" - | "mdi:desk-lamp-on" - | "mdi:deskphone" - | "mdi:desktop-classic" - | "mdi:desktop-mac" - | "mdi:desktop-mac-dashboard" - | "mdi:desktop-tower" - | "mdi:desktop-tower-monitor" - | "mdi:details" - | "mdi:dev-to" - | "mdi:developer-board" - | "mdi:deviantart" - | "mdi:devices" - | "mdi:dharmachakra" - | "mdi:diabetes" - | "mdi:dialpad" - | "mdi:diameter" - | "mdi:diameter-outline" - | "mdi:diameter-variant" - | "mdi:diamond" - | "mdi:diamond-outline" - | "mdi:diamond-stone" - | "mdi:diaper-outline" - | "mdi:dice" - | "mdi:dice-1" - | "mdi:dice-1-outline" - | "mdi:dice-2" - | "mdi:dice-2-outline" - | "mdi:dice-3" - | "mdi:dice-3-outline" - | "mdi:dice-4" - | "mdi:dice-4-outline" - | "mdi:dice-5" - | "mdi:dice-5-outline" - | "mdi:dice-6" - | "mdi:dice-6-outline" - | "mdi:dice-d10" - | "mdi:dice-d10-outline" - | "mdi:dice-d12" - | "mdi:dice-d12-outline" - | "mdi:dice-d20" - | "mdi:dice-d20-outline" - | "mdi:dice-d4" - | "mdi:dice-d4-outline" - | "mdi:dice-d6" - | "mdi:dice-d6-outline" - | "mdi:dice-d8" - | "mdi:dice-d8-outline" - | "mdi:dice-multiple" - | "mdi:dice-multiple-outline" - | "mdi:digital-ocean" - | "mdi:dip-switch" - | "mdi:directions" - | "mdi:directions-fork" - | "mdi:disc" - | "mdi:disc-alert" - | "mdi:disc-player" - | "mdi:discord" - | "mdi:dishwasher" - | "mdi:dishwasher-alert" - | "mdi:dishwasher-off" - | "mdi:disk" - | "mdi:disk-alert" - | "mdi:disk-player" - | "mdi:disqus" - | "mdi:disqus-outline" - | "mdi:distribute-horizontal-center" - | "mdi:distribute-horizontal-left" - | "mdi:distribute-horizontal-right" - | "mdi:distribute-vertical-bottom" - | "mdi:distribute-vertical-center" - | "mdi:distribute-vertical-top" - | "mdi:diversify" - | "mdi:diving" - | "mdi:diving-flippers" - | "mdi:diving-helmet" - | "mdi:diving-scuba" - | "mdi:diving-scuba-flag" - | "mdi:diving-scuba-mask" - | "mdi:diving-scuba-tank" - | "mdi:diving-scuba-tank-multiple" - | "mdi:diving-snorkel" - | "mdi:division" - | "mdi:division-box" - | "mdi:dlna" - | "mdi:dna" - | "mdi:dns" - | "mdi:dns-outline" - | "mdi:do-not-disturb" - | "mdi:dock-bottom" - | "mdi:dock-left" - | "mdi:dock-right" - | "mdi:dock-top" - | "mdi:dock-window" - | "mdi:docker" - | "mdi:doctor" - | "mdi:document" - | "mdi:dog" - | "mdi:dog-service" - | "mdi:dog-side" - | "mdi:dog-side-off" - | "mdi:dolby" - | "mdi:dolly" - | "mdi:dolphin" - | "mdi:domain" - | "mdi:domain-off" - | "mdi:domain-plus" - | "mdi:domain-remove" - | "mdi:domain-switch" - | "mdi:dome-light" - | "mdi:domino-mask" - | "mdi:donkey" - | "mdi:door" - | "mdi:door-closed" - | "mdi:door-closed-cancel" - | "mdi:door-closed-lock" - | "mdi:door-open" - | "mdi:door-sliding" - | "mdi:door-sliding-lock" - | "mdi:door-sliding-open" - | "mdi:doorbell" - | "mdi:doorbell-video" - | "mdi:dot-net" - | "mdi:dots-circle" - | "mdi:dots-grid" - | "mdi:dots-hexagon" - | "mdi:dots-horizontal" - | "mdi:dots-horizontal-circle" - | "mdi:dots-horizontal-circle-outline" - | "mdi:dots-square" - | "mdi:dots-triangle" - | "mdi:dots-vertical" - | "mdi:dots-vertical-circle" - | "mdi:dots-vertical-circle-outline" - | "mdi:douban" - | "mdi:download" - | "mdi:download-box" - | "mdi:download-box-outline" - | "mdi:download-circle" - | "mdi:download-circle-outline" - | "mdi:download-lock" - | "mdi:download-lock-outline" - | "mdi:download-multiple" - | "mdi:download-multiple-outline" - | "mdi:download-network" - | "mdi:download-network-outline" - | "mdi:download-off" - | "mdi:download-off-outline" - | "mdi:download-outline" - | "mdi:drag" - | "mdi:drag-horizontal" - | "mdi:drag-horizontal-variant" - | "mdi:drag-variant" - | "mdi:drag-vertical" - | "mdi:drag-vertical-variant" - | "mdi:drama-masks" - | "mdi:draw" - | "mdi:draw-pen" - | "mdi:drawing" - | "mdi:drawing-box" - | "mdi:dresser" - | "mdi:dresser-outline" - | "mdi:dribbble" - | "mdi:dribbble-box" - | "mdi:drone" - | "mdi:dropbox" - | "mdi:drupal" - | "mdi:duck" - | "mdi:dumbbell" - | "mdi:dump-truck" - | "mdi:ear-hearing" - | "mdi:ear-hearing-loop" - | "mdi:ear-hearing-off" - | "mdi:earbuds" - | "mdi:earbuds-off" - | "mdi:earbuds-off-outline" - | "mdi:earbuds-outline" - | "mdi:earth" - | "mdi:earth-arrow-down" - | "mdi:earth-arrow-left" - | "mdi:earth-arrow-right" - | "mdi:earth-arrow-up" - | "mdi:earth-box" - | "mdi:earth-box-minus" - | "mdi:earth-box-off" - | "mdi:earth-box-plus" - | "mdi:earth-box-remove" - | "mdi:earth-minus" - | "mdi:earth-off" - | "mdi:earth-plus" - | "mdi:earth-remove" - | "mdi:ebay" - | "mdi:egg" - | "mdi:egg-easter" - | "mdi:egg-fried" - | "mdi:egg-off" - | "mdi:egg-off-outline" - | "mdi:egg-outline" - | "mdi:eiffel-tower" - | "mdi:eight-track" - | "mdi:eject" - | "mdi:eject-circle" - | "mdi:eject-circle-outline" - | "mdi:eject-outline" - | "mdi:electric-switch" - | "mdi:electric-switch-closed" - | "mdi:electron-framework" - | "mdi:elephant" - | "mdi:elevation-decline" - | "mdi:elevation-rise" - | "mdi:elevator" - | "mdi:elevator-down" - | "mdi:elevator-passenger" - | "mdi:elevator-passenger-off" - | "mdi:elevator-passenger-off-outline" - | "mdi:elevator-passenger-outline" - | "mdi:elevator-up" - | "mdi:ellipse" - | "mdi:ellipse-outline" - | "mdi:email" - | "mdi:email-alert" - | "mdi:email-alert-outline" - | "mdi:email-arrow-left" - | "mdi:email-arrow-left-outline" - | "mdi:email-arrow-right" - | "mdi:email-arrow-right-outline" - | "mdi:email-box" - | "mdi:email-check" - | "mdi:email-check-outline" - | "mdi:email-edit" - | "mdi:email-edit-outline" - | "mdi:email-fast" - | "mdi:email-fast-outline" - | "mdi:email-heart-outline" - | "mdi:email-lock" - | "mdi:email-lock-outline" - | "mdi:email-mark-as-unread" - | "mdi:email-minus" - | "mdi:email-minus-outline" - | "mdi:email-multiple" - | "mdi:email-multiple-outline" - | "mdi:email-newsletter" - | "mdi:email-off" - | "mdi:email-off-outline" - | "mdi:email-open" - | "mdi:email-open-heart-outline" - | "mdi:email-open-multiple" - | "mdi:email-open-multiple-outline" - | "mdi:email-open-outline" - | "mdi:email-outline" - | "mdi:email-plus" - | "mdi:email-plus-outline" - | "mdi:email-remove" - | "mdi:email-remove-outline" - | "mdi:email-seal" - | "mdi:email-seal-outline" - | "mdi:email-search" - | "mdi:email-search-outline" - | "mdi:email-sync" - | "mdi:email-sync-outline" - | "mdi:email-variant" - | "mdi:ember" - | "mdi:emby" - | "mdi:emoticon" - | "mdi:emoticon-angry" - | "mdi:emoticon-angry-outline" - | "mdi:emoticon-confused" - | "mdi:emoticon-confused-outline" - | "mdi:emoticon-cool" - | "mdi:emoticon-cool-outline" - | "mdi:emoticon-cry" - | "mdi:emoticon-cry-outline" - | "mdi:emoticon-dead" - | "mdi:emoticon-dead-outline" - | "mdi:emoticon-devil" - | "mdi:emoticon-devil-outline" - | "mdi:emoticon-excited" - | "mdi:emoticon-excited-outline" - | "mdi:emoticon-frown" - | "mdi:emoticon-frown-outline" - | "mdi:emoticon-happy" - | "mdi:emoticon-happy-outline" - | "mdi:emoticon-kiss" - | "mdi:emoticon-kiss-outline" - | "mdi:emoticon-lol" - | "mdi:emoticon-lol-outline" - | "mdi:emoticon-minus" - | "mdi:emoticon-minus-outline" - | "mdi:emoticon-neutral" - | "mdi:emoticon-neutral-outline" - | "mdi:emoticon-outline" - | "mdi:emoticon-plus" - | "mdi:emoticon-plus-outline" - | "mdi:emoticon-poop" - | "mdi:emoticon-poop-outline" - | "mdi:emoticon-remove" - | "mdi:emoticon-remove-outline" - | "mdi:emoticon-sad" - | "mdi:emoticon-sad-outline" - | "mdi:emoticon-sick" - | "mdi:emoticon-sick-outline" - | "mdi:emoticon-tongue" - | "mdi:emoticon-tongue-outline" - | "mdi:emoticon-wink" - | "mdi:emoticon-wink-outline" - | "mdi:engine" - | "mdi:engine-off" - | "mdi:engine-off-outline" - | "mdi:engine-outline" - | "mdi:epsilon" - | "mdi:equal" - | "mdi:equal-box" - | "mdi:equalizer" - | "mdi:equalizer-outline" - | "mdi:eraser" - | "mdi:eraser-variant" - | "mdi:escalator" - | "mdi:escalator-box" - | "mdi:escalator-down" - | "mdi:escalator-up" - | "mdi:eslint" - | "mdi:et" - | "mdi:ethereum" - | "mdi:ethernet" - | "mdi:ethernet-cable" - | "mdi:ethernet-cable-off" - | "mdi:ethernet-off" - | "mdi:etsy" - | "mdi:ev-plug-ccs1" - | "mdi:ev-plug-ccs2" - | "mdi:ev-plug-chademo" - | "mdi:ev-plug-tesla" - | "mdi:ev-plug-type1" - | "mdi:ev-plug-type2" - | "mdi:ev-station" - | "mdi:eventbrite" - | "mdi:evernote" - | "mdi:excavator" - | "mdi:exclamation" - | "mdi:exclamation-thick" - | "mdi:exit-run" - | "mdi:exit-to-app" - | "mdi:expand-all" - | "mdi:expand-all-outline" - | "mdi:expansion-card" - | "mdi:expansion-card-variant" - | "mdi:exponent" - | "mdi:exponent-box" - | "mdi:export" - | "mdi:export-variant" - | "mdi:eye" - | "mdi:eye-arrow-left" - | "mdi:eye-arrow-left-outline" - | "mdi:eye-arrow-right" - | "mdi:eye-arrow-right-outline" - | "mdi:eye-check" - | "mdi:eye-check-outline" - | "mdi:eye-circle" - | "mdi:eye-circle-outline" - | "mdi:eye-closed" - | "mdi:eye-lock" - | "mdi:eye-lock-open" - | "mdi:eye-lock-open-outline" - | "mdi:eye-lock-outline" - | "mdi:eye-minus" - | "mdi:eye-minus-outline" - | "mdi:eye-off" - | "mdi:eye-off-outline" - | "mdi:eye-outline" - | "mdi:eye-plus" - | "mdi:eye-plus-outline" - | "mdi:eye-refresh" - | "mdi:eye-refresh-outline" - | "mdi:eye-remove" - | "mdi:eye-remove-outline" - | "mdi:eye-settings" - | "mdi:eye-settings-outline" - | "mdi:eyedropper" - | "mdi:eyedropper-minus" - | "mdi:eyedropper-off" - | "mdi:eyedropper-plus" - | "mdi:eyedropper-remove" - | "mdi:eyedropper-variant" - | "mdi:face-agent" - | "mdi:face-man" - | "mdi:face-man-outline" - | "mdi:face-man-profile" - | "mdi:face-man-shimmer" - | "mdi:face-man-shimmer-outline" - | "mdi:face-mask" - | "mdi:face-mask-outline" - | "mdi:face-recognition" - | "mdi:face-woman" - | "mdi:face-woman-outline" - | "mdi:face-woman-profile" - | "mdi:face-woman-shimmer" - | "mdi:face-woman-shimmer-outline" - | "mdi:facebook" - | "mdi:facebook-box" - | "mdi:facebook-gaming" - | "mdi:facebook-messenger" - | "mdi:facebook-workplace" - | "mdi:factory" - | "mdi:family-tree" - | "mdi:fan" - | "mdi:fan-alert" - | "mdi:fan-auto" - | "mdi:fan-chevron-down" - | "mdi:fan-chevron-up" - | "mdi:fan-clock" - | "mdi:fan-minus" - | "mdi:fan-off" - | "mdi:fan-plus" - | "mdi:fan-remove" - | "mdi:fan-speed-1" - | "mdi:fan-speed-2" - | "mdi:fan-speed-3" - | "mdi:fast-forward" - | "mdi:fast-forward-10" - | "mdi:fast-forward-15" - | "mdi:fast-forward-30" - | "mdi:fast-forward-45" - | "mdi:fast-forward-5" - | "mdi:fast-forward-60" - | "mdi:fast-forward-outline" - | "mdi:faucet" - | "mdi:faucet-variant" - | "mdi:fax" - | "mdi:feather" - | "mdi:feature-search" - | "mdi:feature-search-outline" - | "mdi:fedora" - | "mdi:fence" - | "mdi:fence-electric" - | "mdi:fencing" - | "mdi:ferris-wheel" - | "mdi:ferry" - | "mdi:file" - | "mdi:file-account" - | "mdi:file-account-outline" - | "mdi:file-alert" - | "mdi:file-alert-outline" - | "mdi:file-arrow-left-right" - | "mdi:file-arrow-left-right-outline" - | "mdi:file-arrow-up-down" - | "mdi:file-arrow-up-down-outline" - | "mdi:file-cabinet" - | "mdi:file-cad" - | "mdi:file-cad-box" - | "mdi:file-cancel" - | "mdi:file-cancel-outline" - | "mdi:file-certificate" - | "mdi:file-certificate-outline" - | "mdi:file-chart" - | "mdi:file-chart-check" - | "mdi:file-chart-check-outline" - | "mdi:file-chart-outline" - | "mdi:file-check" - | "mdi:file-check-outline" - | "mdi:file-clock" - | "mdi:file-clock-outline" - | "mdi:file-cloud" - | "mdi:file-cloud-outline" - | "mdi:file-code" - | "mdi:file-code-outline" - | "mdi:file-cog" - | "mdi:file-cog-outline" - | "mdi:file-compare" - | "mdi:file-delimited" - | "mdi:file-delimited-outline" - | "mdi:file-document" - | "mdi:file-document-alert" - | "mdi:file-document-alert-outline" - | "mdi:file-document-arrow-right" - | "mdi:file-document-arrow-right-outline" - | "mdi:file-document-check" - | "mdi:file-document-check-outline" - | "mdi:file-document-edit" - | "mdi:file-document-edit-outline" - | "mdi:file-document-minus" - | "mdi:file-document-minus-outline" - | "mdi:file-document-multiple" - | "mdi:file-document-multiple-outline" - | "mdi:file-document-outline" - | "mdi:file-document-plus" - | "mdi:file-document-plus-outline" - | "mdi:file-document-refresh" - | "mdi:file-document-refresh-outline" - | "mdi:file-document-remove" - | "mdi:file-document-remove-outline" - | "mdi:file-download" - | "mdi:file-download-outline" - | "mdi:file-edit" - | "mdi:file-edit-outline" - | "mdi:file-excel" - | "mdi:file-excel-box" - | "mdi:file-excel-box-outline" - | "mdi:file-excel-outline" - | "mdi:file-export" - | "mdi:file-export-outline" - | "mdi:file-eye" - | "mdi:file-eye-outline" - | "mdi:file-find" - | "mdi:file-find-outline" - | "mdi:file-gif-box" - | "mdi:file-hidden" - | "mdi:file-image" - | "mdi:file-image-box" - | "mdi:file-image-marker" - | "mdi:file-image-marker-outline" - | "mdi:file-image-minus" - | "mdi:file-image-minus-outline" - | "mdi:file-image-outline" - | "mdi:file-image-plus" - | "mdi:file-image-plus-outline" - | "mdi:file-image-remove" - | "mdi:file-image-remove-outline" - | "mdi:file-import" - | "mdi:file-import-outline" - | "mdi:file-jpg-box" - | "mdi:file-key" - | "mdi:file-key-outline" - | "mdi:file-link" - | "mdi:file-link-outline" - | "mdi:file-lock" - | "mdi:file-lock-open" - | "mdi:file-lock-open-outline" - | "mdi:file-lock-outline" - | "mdi:file-marker" - | "mdi:file-marker-outline" - | "mdi:file-minus" - | "mdi:file-minus-outline" - | "mdi:file-move" - | "mdi:file-move-outline" - | "mdi:file-multiple" - | "mdi:file-multiple-outline" - | "mdi:file-music" - | "mdi:file-music-outline" - | "mdi:file-outline" - | "mdi:file-pdf" - | "mdi:file-pdf-box" - | "mdi:file-pdf-box-outline" - | "mdi:file-pdf-outline" - | "mdi:file-percent" - | "mdi:file-percent-outline" - | "mdi:file-phone" - | "mdi:file-phone-outline" - | "mdi:file-plus" - | "mdi:file-plus-outline" - | "mdi:file-png-box" - | "mdi:file-powerpoint" - | "mdi:file-powerpoint-box" - | "mdi:file-powerpoint-box-outline" - | "mdi:file-powerpoint-outline" - | "mdi:file-presentation-box" - | "mdi:file-question" - | "mdi:file-question-outline" - | "mdi:file-refresh" - | "mdi:file-refresh-outline" - | "mdi:file-remove" - | "mdi:file-remove-outline" - | "mdi:file-replace" - | "mdi:file-replace-outline" - | "mdi:file-restore" - | "mdi:file-restore-outline" - | "mdi:file-rotate-left" - | "mdi:file-rotate-left-outline" - | "mdi:file-rotate-right" - | "mdi:file-rotate-right-outline" - | "mdi:file-search" - | "mdi:file-search-outline" - | "mdi:file-send" - | "mdi:file-send-outline" - | "mdi:file-settings" - | "mdi:file-settings-outline" - | "mdi:file-sign" - | "mdi:file-star" - | "mdi:file-star-four-points" - | "mdi:file-star-four-points-outline" - | "mdi:file-star-outline" - | "mdi:file-swap" - | "mdi:file-swap-outline" - | "mdi:file-sync" - | "mdi:file-sync-outline" - | "mdi:file-table" - | "mdi:file-table-box" - | "mdi:file-table-box-multiple" - | "mdi:file-table-box-multiple-outline" - | "mdi:file-table-box-outline" - | "mdi:file-table-outline" - | "mdi:file-tree" - | "mdi:file-tree-outline" - | "mdi:file-undo" - | "mdi:file-undo-outline" - | "mdi:file-upload" - | "mdi:file-upload-outline" - | "mdi:file-video" - | "mdi:file-video-outline" - | "mdi:file-word" - | "mdi:file-word-box" - | "mdi:file-word-box-outline" - | "mdi:file-word-outline" - | "mdi:file-xml" - | "mdi:file-xml-box" - | "mdi:fill" - | "mdi:film" - | "mdi:filmstrip" - | "mdi:filmstrip-box" - | "mdi:filmstrip-box-multiple" - | "mdi:filmstrip-off" - | "mdi:filter" - | "mdi:filter-check" - | "mdi:filter-check-outline" - | "mdi:filter-cog" - | "mdi:filter-cog-outline" - | "mdi:filter-menu" - | "mdi:filter-menu-outline" - | "mdi:filter-minus" - | "mdi:filter-minus-outline" - | "mdi:filter-multiple" - | "mdi:filter-multiple-outline" - | "mdi:filter-off" - | "mdi:filter-off-outline" - | "mdi:filter-outline" - | "mdi:filter-plus" - | "mdi:filter-plus-outline" - | "mdi:filter-remove" - | "mdi:filter-remove-outline" - | "mdi:filter-settings" - | "mdi:filter-settings-outline" - | "mdi:filter-variant" - | "mdi:filter-variant-minus" - | "mdi:filter-variant-plus" - | "mdi:filter-variant-remove" - | "mdi:finance" - | "mdi:find-replace" - | "mdi:fingerprint" - | "mdi:fingerprint-off" - | "mdi:fire" - | "mdi:fire-alert" - | "mdi:fire-circle" - | "mdi:fire-extinguisher" - | "mdi:fire-hydrant" - | "mdi:fire-hydrant-alert" - | "mdi:fire-hydrant-off" - | "mdi:fire-off" - | "mdi:fire-station" - | "mdi:fire-truck" - | "mdi:firebase" - | "mdi:firefox" - | "mdi:fireplace" - | "mdi:fireplace-off" - | "mdi:firewire" - | "mdi:firework" - | "mdi:firework-off" - | "mdi:fish" - | "mdi:fish-off" - | "mdi:fishbowl" - | "mdi:fishbowl-outline" - | "mdi:fit-to-page" - | "mdi:fit-to-page-outline" - | "mdi:fit-to-screen" - | "mdi:fit-to-screen-outline" - | "mdi:flag" - | "mdi:flag-checkered" - | "mdi:flag-checkered-variant" - | "mdi:flag-minus" - | "mdi:flag-minus-outline" - | "mdi:flag-off" - | "mdi:flag-off-outline" - | "mdi:flag-outline" - | "mdi:flag-outline-variant" - | "mdi:flag-plus" - | "mdi:flag-plus-outline" - | "mdi:flag-remove" - | "mdi:flag-remove-outline" - | "mdi:flag-triangle" - | "mdi:flag-variant" - | "mdi:flag-variant-minus" - | "mdi:flag-variant-minus-outline" - | "mdi:flag-variant-off" - | "mdi:flag-variant-off-outline" - | "mdi:flag-variant-outline" - | "mdi:flag-variant-plus" - | "mdi:flag-variant-plus-outline" - | "mdi:flag-variant-remove" - | "mdi:flag-variant-remove-outline" - | "mdi:flare" - | "mdi:flash" - | "mdi:flash-alert" - | "mdi:flash-alert-outline" - | "mdi:flash-auto" - | "mdi:flash-off" - | "mdi:flash-off-outline" - | "mdi:flash-outline" - | "mdi:flash-red-eye" - | "mdi:flash-triangle" - | "mdi:flash-triangle-outline" - | "mdi:flashlight" - | "mdi:flashlight-off" - | "mdi:flask" - | "mdi:flask-empty" - | "mdi:flask-empty-minus" - | "mdi:flask-empty-minus-outline" - | "mdi:flask-empty-off" - | "mdi:flask-empty-off-outline" - | "mdi:flask-empty-outline" - | "mdi:flask-empty-plus" - | "mdi:flask-empty-plus-outline" - | "mdi:flask-empty-remove" - | "mdi:flask-empty-remove-outline" - | "mdi:flask-minus" - | "mdi:flask-minus-outline" - | "mdi:flask-off" - | "mdi:flask-off-outline" - | "mdi:flask-outline" - | "mdi:flask-plus" - | "mdi:flask-plus-outline" - | "mdi:flask-remove" - | "mdi:flask-remove-outline" - | "mdi:flask-round-bottom" - | "mdi:flask-round-bottom-empty" - | "mdi:flask-round-bottom-empty-outline" - | "mdi:flask-round-bottom-outline" - | "mdi:flattr" - | "mdi:fleur-de-lis" - | "mdi:flickr" - | "mdi:flickr-after" - | "mdi:flickr-before" - | "mdi:flip-horizontal" - | "mdi:flip-to-back" - | "mdi:flip-to-front" - | "mdi:flip-vertical" - | "mdi:floor-1" - | "mdi:floor-2" - | "mdi:floor-3" - | "mdi:floor-a" - | "mdi:floor-b" - | "mdi:floor-g" - | "mdi:floor-l" - | "mdi:floor-lamp" - | "mdi:floor-lamp-dual" - | "mdi:floor-lamp-dual-outline" - | "mdi:floor-lamp-outline" - | "mdi:floor-lamp-torchiere" - | "mdi:floor-lamp-torchiere-outline" - | "mdi:floor-lamp-torchiere-variant" - | "mdi:floor-lamp-torchiere-variant-outline" - | "mdi:floor-plan" - | "mdi:floppy" - | "mdi:floppy-variant" - | "mdi:flower" - | "mdi:flower-outline" - | "mdi:flower-pollen" - | "mdi:flower-pollen-outline" - | "mdi:flower-poppy" - | "mdi:flower-tulip" - | "mdi:flower-tulip-outline" - | "mdi:focus-auto" - | "mdi:focus-field" - | "mdi:focus-field-horizontal" - | "mdi:focus-field-vertical" - | "mdi:folder" - | "mdi:folder-account" - | "mdi:folder-account-outline" - | "mdi:folder-alert" - | "mdi:folder-alert-outline" - | "mdi:folder-arrow-down" - | "mdi:folder-arrow-down-outline" - | "mdi:folder-arrow-left" - | "mdi:folder-arrow-left-outline" - | "mdi:folder-arrow-left-right" - | "mdi:folder-arrow-left-right-outline" - | "mdi:folder-arrow-right" - | "mdi:folder-arrow-right-outline" - | "mdi:folder-arrow-up" - | "mdi:folder-arrow-up-down" - | "mdi:folder-arrow-up-down-outline" - | "mdi:folder-arrow-up-outline" - | "mdi:folder-cancel" - | "mdi:folder-cancel-outline" - | "mdi:folder-check" - | "mdi:folder-check-outline" - | "mdi:folder-clock" - | "mdi:folder-clock-outline" - | "mdi:folder-cog" - | "mdi:folder-cog-outline" - | "mdi:folder-download" - | "mdi:folder-download-outline" - | "mdi:folder-edit" - | "mdi:folder-edit-outline" - | "mdi:folder-eye" - | "mdi:folder-eye-outline" - | "mdi:folder-file" - | "mdi:folder-file-outline" - | "mdi:folder-google-drive" - | "mdi:folder-heart" - | "mdi:folder-heart-outline" - | "mdi:folder-hidden" - | "mdi:folder-home" - | "mdi:folder-home-outline" - | "mdi:folder-image" - | "mdi:folder-information" - | "mdi:folder-information-outline" - | "mdi:folder-key" - | "mdi:folder-key-network" - | "mdi:folder-key-network-outline" - | "mdi:folder-key-outline" - | "mdi:folder-lock" - | "mdi:folder-lock-open" - | "mdi:folder-lock-open-outline" - | "mdi:folder-lock-outline" - | "mdi:folder-marker" - | "mdi:folder-marker-outline" - | "mdi:folder-minus" - | "mdi:folder-minus-outline" - | "mdi:folder-move" - | "mdi:folder-move-outline" - | "mdi:folder-multiple" - | "mdi:folder-multiple-image" - | "mdi:folder-multiple-outline" - | "mdi:folder-multiple-plus" - | "mdi:folder-multiple-plus-outline" - | "mdi:folder-music" - | "mdi:folder-music-outline" - | "mdi:folder-network" - | "mdi:folder-network-outline" - | "mdi:folder-off" - | "mdi:folder-off-outline" - | "mdi:folder-open" - | "mdi:folder-open-outline" - | "mdi:folder-outline" - | "mdi:folder-outline-lock" - | "mdi:folder-play" - | "mdi:folder-play-outline" - | "mdi:folder-plus" - | "mdi:folder-plus-outline" - | "mdi:folder-pound" - | "mdi:folder-pound-outline" - | "mdi:folder-question" - | "mdi:folder-question-outline" - | "mdi:folder-refresh" - | "mdi:folder-refresh-outline" - | "mdi:folder-remove" - | "mdi:folder-remove-outline" - | "mdi:folder-search" - | "mdi:folder-search-outline" - | "mdi:folder-settings" - | "mdi:folder-settings-outline" - | "mdi:folder-star" - | "mdi:folder-star-multiple" - | "mdi:folder-star-multiple-outline" - | "mdi:folder-star-outline" - | "mdi:folder-swap" - | "mdi:folder-swap-outline" - | "mdi:folder-sync" - | "mdi:folder-sync-outline" - | "mdi:folder-table" - | "mdi:folder-table-outline" - | "mdi:folder-text" - | "mdi:folder-text-outline" - | "mdi:folder-upload" - | "mdi:folder-upload-outline" - | "mdi:folder-wrench" - | "mdi:folder-wrench-outline" - | "mdi:folder-zip" - | "mdi:folder-zip-outline" - | "mdi:font-awesome" - | "mdi:food" - | "mdi:food-apple" - | "mdi:food-apple-outline" - | "mdi:food-croissant" - | "mdi:food-drumstick" - | "mdi:food-drumstick-off" - | "mdi:food-drumstick-off-outline" - | "mdi:food-drumstick-outline" - | "mdi:food-fork-drink" - | "mdi:food-halal" - | "mdi:food-hot-dog" - | "mdi:food-kosher" - | "mdi:food-off" - | "mdi:food-off-outline" - | "mdi:food-outline" - | "mdi:food-steak" - | "mdi:food-steak-off" - | "mdi:food-takeout-box" - | "mdi:food-takeout-box-outline" - | "mdi:food-turkey" - | "mdi:food-variant" - | "mdi:food-variant-off" - | "mdi:foot-print" - | "mdi:football" - | "mdi:football-australian" - | "mdi:football-helmet" - | "mdi:footer" - | "mdi:forest" - | "mdi:forest-outline" - | "mdi:forklift" - | "mdi:form-dropdown" - | "mdi:form-select" - | "mdi:form-textarea" - | "mdi:form-textbox" - | "mdi:form-textbox-lock" - | "mdi:form-textbox-password" - | "mdi:format-align-bottom" - | "mdi:format-align-center" - | "mdi:format-align-justify" - | "mdi:format-align-left" - | "mdi:format-align-middle" - | "mdi:format-align-right" - | "mdi:format-align-top" - | "mdi:format-annotation-minus" - | "mdi:format-annotation-plus" - | "mdi:format-bold" - | "mdi:format-clear" - | "mdi:format-color" - | "mdi:format-color-fill" - | "mdi:format-color-highlight" - | "mdi:format-color-marker-cancel" - | "mdi:format-color-text" - | "mdi:format-columns" - | "mdi:format-float-center" - | "mdi:format-float-left" - | "mdi:format-float-none" - | "mdi:format-float-right" - | "mdi:format-font" - | "mdi:format-font-size-decrease" - | "mdi:format-font-size-increase" - | "mdi:format-header-1" - | "mdi:format-header-2" - | "mdi:format-header-3" - | "mdi:format-header-4" - | "mdi:format-header-5" - | "mdi:format-header-6" - | "mdi:format-header-decrease" - | "mdi:format-header-down" - | "mdi:format-header-equal" - | "mdi:format-header-increase" - | "mdi:format-header-pound" - | "mdi:format-header-up" - | "mdi:format-horizontal-align-center" - | "mdi:format-horizontal-align-left" - | "mdi:format-horizontal-align-right" - | "mdi:format-indent-decrease" - | "mdi:format-indent-increase" - | "mdi:format-italic" - | "mdi:format-letter-case" - | "mdi:format-letter-case-lower" - | "mdi:format-letter-case-upper" - | "mdi:format-letter-ends-with" - | "mdi:format-letter-matches" - | "mdi:format-letter-spacing" - | "mdi:format-letter-spacing-variant" - | "mdi:format-letter-starts-with" - | "mdi:format-line-height" - | "mdi:format-line-spacing" - | "mdi:format-line-style" - | "mdi:format-line-weight" - | "mdi:format-list-bulleted" - | "mdi:format-list-bulleted-square" - | "mdi:format-list-bulleted-triangle" - | "mdi:format-list-bulleted-type" - | "mdi:format-list-checkbox" - | "mdi:format-list-checks" - | "mdi:format-list-group" - | "mdi:format-list-group-plus" - | "mdi:format-list-numbered" - | "mdi:format-list-numbered-rtl" - | "mdi:format-list-text" - | "mdi:format-list-triangle" - | "mdi:format-overline" - | "mdi:format-page-break" - | "mdi:format-page-split" - | "mdi:format-paint" - | "mdi:format-paragraph" - | "mdi:format-paragraph-spacing" - | "mdi:format-pilcrow" - | "mdi:format-pilcrow-arrow-left" - | "mdi:format-pilcrow-arrow-right" - | "mdi:format-quote-close" - | "mdi:format-quote-close-outline" - | "mdi:format-quote-open" - | "mdi:format-quote-open-outline" - | "mdi:format-rotate-90" - | "mdi:format-section" - | "mdi:format-size" - | "mdi:format-strikethrough" - | "mdi:format-strikethrough-variant" - | "mdi:format-subscript" - | "mdi:format-superscript" - | "mdi:format-text" - | "mdi:format-text-rotation-angle-down" - | "mdi:format-text-rotation-angle-up" - | "mdi:format-text-rotation-down" - | "mdi:format-text-rotation-down-vertical" - | "mdi:format-text-rotation-none" - | "mdi:format-text-rotation-up" - | "mdi:format-text-rotation-vertical" - | "mdi:format-text-variant" - | "mdi:format-text-variant-outline" - | "mdi:format-text-wrapping-clip" - | "mdi:format-text-wrapping-overflow" - | "mdi:format-text-wrapping-wrap" - | "mdi:format-textbox" - | "mdi:format-title" - | "mdi:format-underline" - | "mdi:format-underline-wavy" - | "mdi:format-vertical-align-bottom" - | "mdi:format-vertical-align-center" - | "mdi:format-vertical-align-top" - | "mdi:format-wrap-inline" - | "mdi:format-wrap-square" - | "mdi:format-wrap-tight" - | "mdi:format-wrap-top-bottom" - | "mdi:forum" - | "mdi:forum-minus" - | "mdi:forum-minus-outline" - | "mdi:forum-outline" - | "mdi:forum-plus" - | "mdi:forum-plus-outline" - | "mdi:forum-remove" - | "mdi:forum-remove-outline" - | "mdi:forward" - | "mdi:forwardburger" - | "mdi:fountain" - | "mdi:fountain-pen" - | "mdi:fountain-pen-tip" - | "mdi:foursquare" - | "mdi:fraction-one-half" - | "mdi:freebsd" - | "mdi:french-fries" - | "mdi:frequently-asked-questions" - | "mdi:fridge" - | "mdi:fridge-alert" - | "mdi:fridge-alert-outline" - | "mdi:fridge-bottom" - | "mdi:fridge-industrial" - | "mdi:fridge-industrial-alert" - | "mdi:fridge-industrial-alert-outline" - | "mdi:fridge-industrial-off" - | "mdi:fridge-industrial-off-outline" - | "mdi:fridge-industrial-outline" - | "mdi:fridge-off" - | "mdi:fridge-off-outline" - | "mdi:fridge-outline" - | "mdi:fridge-top" - | "mdi:fridge-variant" - | "mdi:fridge-variant-alert" - | "mdi:fridge-variant-alert-outline" - | "mdi:fridge-variant-off" - | "mdi:fridge-variant-off-outline" - | "mdi:fridge-variant-outline" - | "mdi:fruit-cherries" - | "mdi:fruit-cherries-off" - | "mdi:fruit-citrus" - | "mdi:fruit-citrus-off" - | "mdi:fruit-grapes" - | "mdi:fruit-grapes-outline" - | "mdi:fruit-pear" - | "mdi:fruit-pineapple" - | "mdi:fruit-watermelon" - | "mdi:fuel" - | "mdi:fuel-cell" - | "mdi:fullscreen" - | "mdi:fullscreen-exit" - | "mdi:function" - | "mdi:function-variant" - | "mdi:furigana-horizontal" - | "mdi:furigana-vertical" - | "mdi:fuse" - | "mdi:fuse-alert" - | "mdi:fuse-blade" - | "mdi:fuse-off" - | "mdi:gamepad" - | "mdi:gamepad-circle" - | "mdi:gamepad-circle-down" - | "mdi:gamepad-circle-left" - | "mdi:gamepad-circle-outline" - | "mdi:gamepad-circle-right" - | "mdi:gamepad-circle-up" - | "mdi:gamepad-down" - | "mdi:gamepad-left" - | "mdi:gamepad-outline" - | "mdi:gamepad-right" - | "mdi:gamepad-round" - | "mdi:gamepad-round-down" - | "mdi:gamepad-round-left" - | "mdi:gamepad-round-outline" - | "mdi:gamepad-round-right" - | "mdi:gamepad-round-up" - | "mdi:gamepad-square" - | "mdi:gamepad-square-outline" - | "mdi:gamepad-up" - | "mdi:gamepad-variant" - | "mdi:gamepad-variant-outline" - | "mdi:gamma" - | "mdi:gantry-crane" - | "mdi:garage" - | "mdi:garage-alert" - | "mdi:garage-alert-variant" - | "mdi:garage-lock" - | "mdi:garage-open" - | "mdi:garage-open-variant" - | "mdi:garage-variant" - | "mdi:garage-variant-lock" - | "mdi:gas-burner" - | "mdi:gas-cylinder" - | "mdi:gas-station" - | "mdi:gas-station-in-use" - | "mdi:gas-station-in-use-outline" - | "mdi:gas-station-off" - | "mdi:gas-station-off-outline" - | "mdi:gas-station-outline" - | "mdi:gate" - | "mdi:gate-alert" - | "mdi:gate-and" - | "mdi:gate-arrow-left" - | "mdi:gate-arrow-right" - | "mdi:gate-buffer" - | "mdi:gate-nand" - | "mdi:gate-nor" - | "mdi:gate-not" - | "mdi:gate-open" - | "mdi:gate-or" - | "mdi:gate-xnor" - | "mdi:gate-xor" - | "mdi:gatsby" - | "mdi:gauge" - | "mdi:gauge-empty" - | "mdi:gauge-full" - | "mdi:gauge-low" - | "mdi:gavel" - | "mdi:gender-female" - | "mdi:gender-male" - | "mdi:gender-male-female" - | "mdi:gender-male-female-variant" - | "mdi:gender-non-binary" - | "mdi:gender-transgender" - | "mdi:generator-mobile" - | "mdi:generator-portable" - | "mdi:generator-stationary" - | "mdi:gentoo" - | "mdi:gesture" - | "mdi:gesture-double-tap" - | "mdi:gesture-pinch" - | "mdi:gesture-spread" - | "mdi:gesture-swipe" - | "mdi:gesture-swipe-down" - | "mdi:gesture-swipe-horizontal" - | "mdi:gesture-swipe-left" - | "mdi:gesture-swipe-right" - | "mdi:gesture-swipe-up" - | "mdi:gesture-swipe-vertical" - | "mdi:gesture-tap" - | "mdi:gesture-tap-box" - | "mdi:gesture-tap-button" - | "mdi:gesture-tap-hold" - | "mdi:gesture-two-double-tap" - | "mdi:gesture-two-tap" - | "mdi:ghost" - | "mdi:ghost-off" - | "mdi:ghost-off-outline" - | "mdi:ghost-outline" - | "mdi:gif" - | "mdi:gift" - | "mdi:gift-off" - | "mdi:gift-off-outline" - | "mdi:gift-open" - | "mdi:gift-open-outline" - | "mdi:gift-outline" - | "mdi:git" - | "mdi:github" - | "mdi:github-box" - | "mdi:github-face" - | "mdi:gitlab" - | "mdi:glass-cocktail" - | "mdi:glass-cocktail-off" - | "mdi:glass-flute" - | "mdi:glass-fragile" - | "mdi:glass-mug" - | "mdi:glass-mug-off" - | "mdi:glass-mug-variant" - | "mdi:glass-mug-variant-off" - | "mdi:glass-pint-outline" - | "mdi:glass-stange" - | "mdi:glass-tulip" - | "mdi:glass-wine" - | "mdi:glassdoor" - | "mdi:glasses" - | "mdi:globe-light" - | "mdi:globe-light-outline" - | "mdi:globe-model" - | "mdi:gmail" - | "mdi:gnome" - | "mdi:go-kart" - | "mdi:go-kart-track" - | "mdi:gog" - | "mdi:gold" - | "mdi:golf" - | "mdi:golf-cart" - | "mdi:golf-tee" - | "mdi:gondola" - | "mdi:goodreads" - | "mdi:google" - | "mdi:google-ads" - | "mdi:google-allo" - | "mdi:google-analytics" - | "mdi:google-assistant" - | "mdi:google-cardboard" - | "mdi:google-chrome" - | "mdi:google-circles" - | "mdi:google-circles-communities" - | "mdi:google-circles-extended" - | "mdi:google-circles-group" - | "mdi:google-classroom" - | "mdi:google-cloud" - | "mdi:google-downasaur" - | "mdi:google-drive" - | "mdi:google-earth" - | "mdi:google-fit" - | "mdi:google-glass" - | "mdi:google-hangouts" - | "mdi:google-home" - | "mdi:google-keep" - | "mdi:google-lens" - | "mdi:google-maps" - | "mdi:google-my-business" - | "mdi:google-nearby" - | "mdi:google-pages" - | "mdi:google-photos" - | "mdi:google-physical-web" - | "mdi:google-play" - | "mdi:google-plus" - | "mdi:google-plus-box" - | "mdi:google-podcast" - | "mdi:google-spreadsheet" - | "mdi:google-street-view" - | "mdi:google-translate" - | "mdi:google-wallet" - | "mdi:gradient-horizontal" - | "mdi:gradient-vertical" - | "mdi:grain" - | "mdi:graph" - | "mdi:graph-outline" - | "mdi:graphql" - | "mdi:grass" - | "mdi:grave-stone" - | "mdi:grease-pencil" - | "mdi:greater-than" - | "mdi:greater-than-or-equal" - | "mdi:greenhouse" - | "mdi:grid" - | "mdi:grid-large" - | "mdi:grid-off" - | "mdi:grill" - | "mdi:grill-outline" - | "mdi:group" - | "mdi:guitar-acoustic" - | "mdi:guitar-electric" - | "mdi:guitar-pick" - | "mdi:guitar-pick-outline" - | "mdi:guy-fawkes-mask" - | "mdi:gymnastics" - | "mdi:hail" - | "mdi:hair-dryer" - | "mdi:hair-dryer-outline" - | "mdi:halloween" - | "mdi:hamburger" - | "mdi:hamburger-check" - | "mdi:hamburger-minus" - | "mdi:hamburger-off" - | "mdi:hamburger-plus" - | "mdi:hamburger-remove" - | "mdi:hammer" - | "mdi:hammer-screwdriver" - | "mdi:hammer-sickle" - | "mdi:hammer-wrench" - | "mdi:hand-back-left" - | "mdi:hand-back-left-off" - | "mdi:hand-back-left-off-outline" - | "mdi:hand-back-left-outline" - | "mdi:hand-back-right" - | "mdi:hand-back-right-off" - | "mdi:hand-back-right-off-outline" - | "mdi:hand-back-right-outline" - | "mdi:hand-clap" - | "mdi:hand-clap-off" - | "mdi:hand-coin" - | "mdi:hand-coin-outline" - | "mdi:hand-cycle" - | "mdi:hand-extended" - | "mdi:hand-extended-outline" - | "mdi:hand-front-left" - | "mdi:hand-front-left-outline" - | "mdi:hand-front-right" - | "mdi:hand-front-right-outline" - | "mdi:hand-heart" - | "mdi:hand-heart-outline" - | "mdi:hand-left" - | "mdi:hand-okay" - | "mdi:hand-peace" - | "mdi:hand-peace-variant" - | "mdi:hand-pointing-down" - | "mdi:hand-pointing-left" - | "mdi:hand-pointing-right" - | "mdi:hand-pointing-up" - | "mdi:hand-right" - | "mdi:hand-saw" - | "mdi:hand-wash" - | "mdi:hand-wash-outline" - | "mdi:hand-water" - | "mdi:hand-wave" - | "mdi:hand-wave-outline" - | "mdi:handball" - | "mdi:handcuffs" - | "mdi:hands-pray" - | "mdi:handshake" - | "mdi:handshake-outline" - | "mdi:hanger" - | "mdi:hangouts" - | "mdi:hard-hat" - | "mdi:harddisk" - | "mdi:harddisk-plus" - | "mdi:harddisk-remove" - | "mdi:hat-fedora" - | "mdi:hazard-lights" - | "mdi:hdmi-port" - | "mdi:hdr" - | "mdi:hdr-off" - | "mdi:head" - | "mdi:head-alert" - | "mdi:head-alert-outline" - | "mdi:head-check" - | "mdi:head-check-outline" - | "mdi:head-cog" - | "mdi:head-cog-outline" - | "mdi:head-dots-horizontal" - | "mdi:head-dots-horizontal-outline" - | "mdi:head-flash" - | "mdi:head-flash-outline" - | "mdi:head-heart" - | "mdi:head-heart-outline" - | "mdi:head-lightbulb" - | "mdi:head-lightbulb-outline" - | "mdi:head-minus" - | "mdi:head-minus-outline" - | "mdi:head-outline" - | "mdi:head-plus" - | "mdi:head-plus-outline" - | "mdi:head-question" - | "mdi:head-question-outline" - | "mdi:head-remove" - | "mdi:head-remove-outline" - | "mdi:head-snowflake" - | "mdi:head-snowflake-outline" - | "mdi:head-sync" - | "mdi:head-sync-outline" - | "mdi:headphones" - | "mdi:headphones-bluetooth" - | "mdi:headphones-box" - | "mdi:headphones-off" - | "mdi:headphones-settings" - | "mdi:headset" - | "mdi:headset-dock" - | "mdi:headset-off" - | "mdi:heart" - | "mdi:heart-box" - | "mdi:heart-box-outline" - | "mdi:heart-broken" - | "mdi:heart-broken-outline" - | "mdi:heart-circle" - | "mdi:heart-circle-outline" - | "mdi:heart-cog" - | "mdi:heart-cog-outline" - | "mdi:heart-flash" - | "mdi:heart-half" - | "mdi:heart-half-full" - | "mdi:heart-half-outline" - | "mdi:heart-minus" - | "mdi:heart-minus-outline" - | "mdi:heart-multiple" - | "mdi:heart-multiple-outline" - | "mdi:heart-off" - | "mdi:heart-off-outline" - | "mdi:heart-outline" - | "mdi:heart-plus" - | "mdi:heart-plus-outline" - | "mdi:heart-pulse" - | "mdi:heart-remove" - | "mdi:heart-remove-outline" - | "mdi:heart-search" - | "mdi:heart-settings" - | "mdi:heart-settings-outline" - | "mdi:heat-pump" - | "mdi:heat-pump-outline" - | "mdi:heat-wave" - | "mdi:heating-coil" - | "mdi:helicopter" - | "mdi:help" - | "mdi:help-box" - | "mdi:help-box-multiple" - | "mdi:help-box-multiple-outline" - | "mdi:help-box-outline" - | "mdi:help-circle" - | "mdi:help-circle-outline" - | "mdi:help-network" - | "mdi:help-network-outline" - | "mdi:help-rhombus" - | "mdi:help-rhombus-outline" - | "mdi:hexadecimal" - | "mdi:hexagon" - | "mdi:hexagon-multiple" - | "mdi:hexagon-multiple-outline" - | "mdi:hexagon-outline" - | "mdi:hexagon-slice-1" - | "mdi:hexagon-slice-2" - | "mdi:hexagon-slice-3" - | "mdi:hexagon-slice-4" - | "mdi:hexagon-slice-5" - | "mdi:hexagon-slice-6" - | "mdi:hexagram" - | "mdi:hexagram-outline" - | "mdi:high-definition" - | "mdi:high-definition-box" - | "mdi:highway" - | "mdi:hiking" - | "mdi:history" - | "mdi:hockey-puck" - | "mdi:hockey-sticks" - | "mdi:hololens" - | "mdi:home" - | "mdi:home-account" - | "mdi:home-alert" - | "mdi:home-alert-outline" - | "mdi:home-analytics" - | "mdi:home-assistant" - | "mdi:home-automation" - | "mdi:home-battery" - | "mdi:home-battery-outline" - | "mdi:home-circle" - | "mdi:home-circle-outline" - | "mdi:home-city" - | "mdi:home-city-outline" - | "mdi:home-clock" - | "mdi:home-clock-outline" - | "mdi:home-currency-usd" - | "mdi:home-edit" - | "mdi:home-edit-outline" - | "mdi:home-export-outline" - | "mdi:home-flood" - | "mdi:home-floor-0" - | "mdi:home-floor-1" - | "mdi:home-floor-2" - | "mdi:home-floor-3" - | "mdi:home-floor-a" - | "mdi:home-floor-b" - | "mdi:home-floor-g" - | "mdi:home-floor-l" - | "mdi:home-floor-negative-1" - | "mdi:home-group" - | "mdi:home-group-minus" - | "mdi:home-group-plus" - | "mdi:home-group-remove" - | "mdi:home-heart" - | "mdi:home-import-outline" - | "mdi:home-lightbulb" - | "mdi:home-lightbulb-outline" - | "mdi:home-lightning-bolt" - | "mdi:home-lightning-bolt-outline" - | "mdi:home-lock" - | "mdi:home-lock-open" - | "mdi:home-map-marker" - | "mdi:home-minus" - | "mdi:home-minus-outline" - | "mdi:home-modern" - | "mdi:home-off" - | "mdi:home-off-outline" - | "mdi:home-outline" - | "mdi:home-percent" - | "mdi:home-percent-outline" - | "mdi:home-plus" - | "mdi:home-plus-outline" - | "mdi:home-remove" - | "mdi:home-remove-outline" - | "mdi:home-roof" - | "mdi:home-search" - | "mdi:home-search-outline" - | "mdi:home-silo" - | "mdi:home-silo-outline" - | "mdi:home-sound-in" - | "mdi:home-sound-in-outline" - | "mdi:home-sound-out" - | "mdi:home-sound-out-outline" - | "mdi:home-switch" - | "mdi:home-switch-outline" - | "mdi:home-thermometer" - | "mdi:home-thermometer-outline" - | "mdi:home-variant" - | "mdi:home-variant-outline" - | "mdi:hook" - | "mdi:hook-off" - | "mdi:hoop-house" - | "mdi:hops" - | "mdi:horizontal-rotate-clockwise" - | "mdi:horizontal-rotate-counterclockwise" - | "mdi:horse" - | "mdi:horse-human" - | "mdi:horse-variant" - | "mdi:horse-variant-fast" - | "mdi:horseshoe" - | "mdi:hospital" - | "mdi:hospital-box" - | "mdi:hospital-box-outline" - | "mdi:hospital-building" - | "mdi:hospital-marker" - | "mdi:hot-tub" - | "mdi:hours-12" - | "mdi:hours-24" - | "mdi:houzz" - | "mdi:houzz-box" - | "mdi:hub" - | "mdi:hub-outline" - | "mdi:hubspot" - | "mdi:hulu" - | "mdi:human" - | "mdi:human-baby-changing-table" - | "mdi:human-cane" - | "mdi:human-capacity-decrease" - | "mdi:human-capacity-increase" - | "mdi:human-child" - | "mdi:human-dolly" - | "mdi:human-edit" - | "mdi:human-female" - | "mdi:human-female-boy" - | "mdi:human-female-dance" - | "mdi:human-female-female" - | "mdi:human-female-female-child" - | "mdi:human-female-girl" - | "mdi:human-greeting" - | "mdi:human-greeting-proximity" - | "mdi:human-greeting-variant" - | "mdi:human-handsdown" - | "mdi:human-handsup" - | "mdi:human-male" - | "mdi:human-male-board" - | "mdi:human-male-board-poll" - | "mdi:human-male-boy" - | "mdi:human-male-child" - | "mdi:human-male-female" - | "mdi:human-male-female-child" - | "mdi:human-male-girl" - | "mdi:human-male-height" - | "mdi:human-male-height-variant" - | "mdi:human-male-male" - | "mdi:human-male-male-child" - | "mdi:human-non-binary" - | "mdi:human-pregnant" - | "mdi:human-queue" - | "mdi:human-scooter" - | "mdi:human-walker" - | "mdi:human-wheelchair" - | "mdi:human-white-cane" - | "mdi:humble-bundle" - | "mdi:hurricane" - | "mdi:hvac" - | "mdi:hvac-off" - | "mdi:hydraulic-oil-level" - | "mdi:hydraulic-oil-temperature" - | "mdi:hydro-power" - | "mdi:hydrogen-station" - | "mdi:ice-cream" - | "mdi:ice-cream-off" - | "mdi:ice-pop" - | "mdi:id-card" - | "mdi:identifier" - | "mdi:ideogram-cjk" - | "mdi:ideogram-cjk-variant" - | "mdi:image" - | "mdi:image-album" - | "mdi:image-area" - | "mdi:image-area-close" - | "mdi:image-auto-adjust" - | "mdi:image-broken" - | "mdi:image-broken-variant" - | "mdi:image-check" - | "mdi:image-check-outline" - | "mdi:image-edit" - | "mdi:image-edit-outline" - | "mdi:image-filter-black-white" - | "mdi:image-filter-center-focus" - | "mdi:image-filter-center-focus-strong" - | "mdi:image-filter-center-focus-strong-outline" - | "mdi:image-filter-center-focus-weak" - | "mdi:image-filter-drama" - | "mdi:image-filter-drama-outline" - | "mdi:image-filter-frames" - | "mdi:image-filter-hdr" - | "mdi:image-filter-hdr-outline" - | "mdi:image-filter-none" - | "mdi:image-filter-tilt-shift" - | "mdi:image-filter-vintage" - | "mdi:image-frame" - | "mdi:image-lock" - | "mdi:image-lock-outline" - | "mdi:image-marker" - | "mdi:image-marker-outline" - | "mdi:image-minus" - | "mdi:image-minus-outline" - | "mdi:image-move" - | "mdi:image-multiple" - | "mdi:image-multiple-outline" - | "mdi:image-off" - | "mdi:image-off-outline" - | "mdi:image-outline" - | "mdi:image-plus" - | "mdi:image-plus-outline" - | "mdi:image-refresh" - | "mdi:image-refresh-outline" - | "mdi:image-remove" - | "mdi:image-remove-outline" - | "mdi:image-search" - | "mdi:image-search-outline" - | "mdi:image-size-select-actual" - | "mdi:image-size-select-large" - | "mdi:image-size-select-small" - | "mdi:image-sync" - | "mdi:image-sync-outline" - | "mdi:image-text" - | "mdi:import" - | "mdi:inbox" - | "mdi:inbox-arrow-down" - | "mdi:inbox-arrow-down-outline" - | "mdi:inbox-arrow-up" - | "mdi:inbox-arrow-up-outline" - | "mdi:inbox-full" - | "mdi:inbox-full-outline" - | "mdi:inbox-multiple" - | "mdi:inbox-multiple-outline" - | "mdi:inbox-outline" - | "mdi:inbox-remove" - | "mdi:inbox-remove-outline" - | "mdi:incognito" - | "mdi:incognito-circle" - | "mdi:incognito-circle-off" - | "mdi:incognito-off" - | "mdi:indent" - | "mdi:induction" - | "mdi:infinity" - | "mdi:information" - | "mdi:information-box" - | "mdi:information-box-outline" - | "mdi:information-off" - | "mdi:information-off-outline" - | "mdi:information-outline" - | "mdi:information-slab-box" - | "mdi:information-slab-box-outline" - | "mdi:information-slab-circle" - | "mdi:information-slab-circle-outline" - | "mdi:information-slab-symbol" - | "mdi:information-symbol" - | "mdi:information-variant" - | "mdi:information-variant-box" - | "mdi:information-variant-box-outline" - | "mdi:information-variant-circle" - | "mdi:information-variant-circle-outline" - | "mdi:instagram" - | "mdi:instapaper" - | "mdi:instrument-triangle" - | "mdi:integrated-circuit-chip" - | "mdi:invert-colors" - | "mdi:invert-colors-off" - | "mdi:invoice" - | "mdi:invoice-arrow-left" - | "mdi:invoice-arrow-left-outline" - | "mdi:invoice-arrow-right" - | "mdi:invoice-arrow-right-outline" - | "mdi:invoice-check" - | "mdi:invoice-check-outline" - | "mdi:invoice-clock" - | "mdi:invoice-clock-outline" - | "mdi:invoice-edit" - | "mdi:invoice-edit-outline" - | "mdi:invoice-export-outline" - | "mdi:invoice-fast" - | "mdi:invoice-fast-outline" - | "mdi:invoice-import" - | "mdi:invoice-import-outline" - | "mdi:invoice-list" - | "mdi:invoice-list-outline" - | "mdi:invoice-minus" - | "mdi:invoice-minus-outline" - | "mdi:invoice-multiple" - | "mdi:invoice-multiple-outline" - | "mdi:invoice-outline" - | "mdi:invoice-plus" - | "mdi:invoice-plus-outline" - | "mdi:invoice-remove" - | "mdi:invoice-remove-outline" - | "mdi:invoice-send" - | "mdi:invoice-send-outline" - | "mdi:invoice-text" - | "mdi:invoice-text-arrow-left" - | "mdi:invoice-text-arrow-left-outline" - | "mdi:invoice-text-arrow-right" - | "mdi:invoice-text-arrow-right-outline" - | "mdi:invoice-text-check" - | "mdi:invoice-text-check-outline" - | "mdi:invoice-text-clock" - | "mdi:invoice-text-clock-outline" - | "mdi:invoice-text-edit" - | "mdi:invoice-text-edit-outline" - | "mdi:invoice-text-fast" - | "mdi:invoice-text-fast-outline" - | "mdi:invoice-text-minus" - | "mdi:invoice-text-minus-outline" - | "mdi:invoice-text-multiple" - | "mdi:invoice-text-multiple-outline" - | "mdi:invoice-text-outline" - | "mdi:invoice-text-plus" - | "mdi:invoice-text-plus-outline" - | "mdi:invoice-text-remove" - | "mdi:invoice-text-remove-outline" - | "mdi:invoice-text-send" - | "mdi:invoice-text-send-outline" - | "mdi:iobroker" - | "mdi:ip" - | "mdi:ip-network" - | "mdi:ip-network-outline" - | "mdi:ip-outline" - | "mdi:ipod" - | "mdi:iron" - | "mdi:iron-board" - | "mdi:iron-outline" - | "mdi:island" - | "mdi:island-variant" - | "mdi:itunes" - | "mdi:iv-bag" - | "mdi:jabber" - | "mdi:jeepney" - | "mdi:jellyfish" - | "mdi:jellyfish-outline" - | "mdi:jira" - | "mdi:jquery" - | "mdi:jsfiddle" - | "mdi:jump-rope" - | "mdi:kabaddi" - | "mdi:kangaroo" - | "mdi:karate" - | "mdi:kayaking" - | "mdi:keg" - | "mdi:kettle" - | "mdi:kettle-alert" - | "mdi:kettle-alert-outline" - | "mdi:kettle-off" - | "mdi:kettle-off-outline" - | "mdi:kettle-outline" - | "mdi:kettle-pour-over" - | "mdi:kettle-steam" - | "mdi:kettle-steam-outline" - | "mdi:kettlebell" - | "mdi:key" - | "mdi:key-alert" - | "mdi:key-alert-outline" - | "mdi:key-arrow-right" - | "mdi:key-chain" - | "mdi:key-chain-variant" - | "mdi:key-change" - | "mdi:key-link" - | "mdi:key-minus" - | "mdi:key-outline" - | "mdi:key-plus" - | "mdi:key-remove" - | "mdi:key-star" - | "mdi:key-variant" - | "mdi:key-wireless" - | "mdi:keyboard" - | "mdi:keyboard-backspace" - | "mdi:keyboard-caps" - | "mdi:keyboard-close" - | "mdi:keyboard-close-outline" - | "mdi:keyboard-esc" - | "mdi:keyboard-f1" - | "mdi:keyboard-f10" - | "mdi:keyboard-f11" - | "mdi:keyboard-f12" - | "mdi:keyboard-f2" - | "mdi:keyboard-f3" - | "mdi:keyboard-f4" - | "mdi:keyboard-f5" - | "mdi:keyboard-f6" - | "mdi:keyboard-f7" - | "mdi:keyboard-f8" - | "mdi:keyboard-f9" - | "mdi:keyboard-off" - | "mdi:keyboard-off-outline" - | "mdi:keyboard-outline" - | "mdi:keyboard-return" - | "mdi:keyboard-settings" - | "mdi:keyboard-settings-outline" - | "mdi:keyboard-space" - | "mdi:keyboard-tab" - | "mdi:keyboard-tab-reverse" - | "mdi:keyboard-variant" - | "mdi:khanda" - | "mdi:kickstarter" - | "mdi:kite" - | "mdi:kite-outline" - | "mdi:kitesurfing" - | "mdi:klingon" - | "mdi:knife" - | "mdi:knife-military" - | "mdi:knob" - | "mdi:koala" - | "mdi:kodi" - | "mdi:kubernetes" - | "mdi:label" - | "mdi:label-multiple" - | "mdi:label-multiple-outline" - | "mdi:label-off" - | "mdi:label-off-outline" - | "mdi:label-outline" - | "mdi:label-percent" - | "mdi:label-percent-outline" - | "mdi:label-variant" - | "mdi:label-variant-outline" - | "mdi:ladder" - | "mdi:ladybug" - | "mdi:lambda" - | "mdi:lamp" - | "mdi:lamp-outline" - | "mdi:lamps" - | "mdi:lamps-outline" - | "mdi:lan" - | "mdi:lan-check" - | "mdi:lan-connect" - | "mdi:lan-disconnect" - | "mdi:lan-pending" - | "mdi:land-fields" - | "mdi:land-plots" - | "mdi:land-plots-circle" - | "mdi:land-plots-circle-variant" - | "mdi:land-plots-marker" - | "mdi:land-rows-horizontal" - | "mdi:land-rows-vertical" - | "mdi:landslide" - | "mdi:landslide-outline" - | "mdi:language-c" - | "mdi:language-cpp" - | "mdi:language-csharp" - | "mdi:language-css3" - | "mdi:language-fortran" - | "mdi:language-go" - | "mdi:language-haskell" - | "mdi:language-html5" - | "mdi:language-java" - | "mdi:language-javascript" - | "mdi:language-jsx" - | "mdi:language-kotlin" - | "mdi:language-lua" - | "mdi:language-markdown" - | "mdi:language-markdown-outline" - | "mdi:language-php" - | "mdi:language-python" - | "mdi:language-python-text" - | "mdi:language-r" - | "mdi:language-ruby" - | "mdi:language-ruby-on-rails" - | "mdi:language-rust" - | "mdi:language-swift" - | "mdi:language-typescript" - | "mdi:language-xaml" - | "mdi:laptop" - | "mdi:laptop-account" - | "mdi:laptop-chromebook" - | "mdi:laptop-mac" - | "mdi:laptop-off" - | "mdi:laptop-windows" - | "mdi:laravel" - | "mdi:laser-pointer" - | "mdi:lasso" - | "mdi:lastfm" - | "mdi:lastpass" - | "mdi:latitude" - | "mdi:launch" - | "mdi:lava-lamp" - | "mdi:layers" - | "mdi:layers-edit" - | "mdi:layers-minus" - | "mdi:layers-off" - | "mdi:layers-off-outline" - | "mdi:layers-outline" - | "mdi:layers-plus" - | "mdi:layers-remove" - | "mdi:layers-search" - | "mdi:layers-search-outline" - | "mdi:layers-triple" - | "mdi:layers-triple-outline" - | "mdi:lead-pencil" - | "mdi:leaf" - | "mdi:leaf-circle" - | "mdi:leaf-circle-outline" - | "mdi:leaf-maple" - | "mdi:leaf-maple-off" - | "mdi:leaf-off" - | "mdi:leak" - | "mdi:leak-off" - | "mdi:lectern" - | "mdi:led-off" - | "mdi:led-on" - | "mdi:led-outline" - | "mdi:led-strip" - | "mdi:led-strip-variant" - | "mdi:led-strip-variant-off" - | "mdi:led-variant-off" - | "mdi:led-variant-on" - | "mdi:led-variant-outline" - | "mdi:leek" - | "mdi:less-than" - | "mdi:less-than-or-equal" - | "mdi:library" - | "mdi:library-books" - | "mdi:library-outline" - | "mdi:library-shelves" - | "mdi:license" - | "mdi:lifebuoy" - | "mdi:light-flood-down" - | "mdi:light-flood-up" - | "mdi:light-recessed" - | "mdi:light-switch" - | "mdi:light-switch-off" - | "mdi:lightbulb" - | "mdi:lightbulb-alert" - | "mdi:lightbulb-alert-outline" - | "mdi:lightbulb-auto" - | "mdi:lightbulb-auto-outline" - | "mdi:lightbulb-cfl" - | "mdi:lightbulb-cfl-off" - | "mdi:lightbulb-cfl-spiral" - | "mdi:lightbulb-cfl-spiral-off" - | "mdi:lightbulb-fluorescent-tube" - | "mdi:lightbulb-fluorescent-tube-outline" - | "mdi:lightbulb-group" - | "mdi:lightbulb-group-off" - | "mdi:lightbulb-group-off-outline" - | "mdi:lightbulb-group-outline" - | "mdi:lightbulb-multiple" - | "mdi:lightbulb-multiple-off" - | "mdi:lightbulb-multiple-off-outline" - | "mdi:lightbulb-multiple-outline" - | "mdi:lightbulb-night" - | "mdi:lightbulb-night-outline" - | "mdi:lightbulb-off" - | "mdi:lightbulb-off-outline" - | "mdi:lightbulb-on" - | "mdi:lightbulb-on-10" - | "mdi:lightbulb-on-20" - | "mdi:lightbulb-on-30" - | "mdi:lightbulb-on-40" - | "mdi:lightbulb-on-50" - | "mdi:lightbulb-on-60" - | "mdi:lightbulb-on-70" - | "mdi:lightbulb-on-80" - | "mdi:lightbulb-on-90" - | "mdi:lightbulb-on-outline" - | "mdi:lightbulb-outline" - | "mdi:lightbulb-question" - | "mdi:lightbulb-question-outline" - | "mdi:lightbulb-spot" - | "mdi:lightbulb-spot-off" - | "mdi:lightbulb-variant" - | "mdi:lightbulb-variant-outline" - | "mdi:lighthouse" - | "mdi:lighthouse-on" - | "mdi:lightning-bolt" - | "mdi:lightning-bolt-circle" - | "mdi:lightning-bolt-outline" - | "mdi:line-scan" - | "mdi:lingerie" - | "mdi:link" - | "mdi:link-box" - | "mdi:link-box-outline" - | "mdi:link-box-variant" - | "mdi:link-box-variant-outline" - | "mdi:link-circle" - | "mdi:link-circle-outline" - | "mdi:link-edit" - | "mdi:link-lock" - | "mdi:link-off" - | "mdi:link-plus" - | "mdi:link-variant" - | "mdi:link-variant-minus" - | "mdi:link-variant-off" - | "mdi:link-variant-plus" - | "mdi:link-variant-remove" - | "mdi:linkedin" - | "mdi:linode" - | "mdi:linux" - | "mdi:linux-mint" - | "mdi:lipstick" - | "mdi:liquid-spot" - | "mdi:liquor" - | "mdi:list-box" - | "mdi:list-box-outline" - | "mdi:list-status" - | "mdi:litecoin" - | "mdi:loading" - | "mdi:location-enter" - | "mdi:location-exit" - | "mdi:lock" - | "mdi:lock-alert" - | "mdi:lock-alert-outline" - | "mdi:lock-check" - | "mdi:lock-check-outline" - | "mdi:lock-clock" - | "mdi:lock-minus" - | "mdi:lock-minus-outline" - | "mdi:lock-off" - | "mdi:lock-off-outline" - | "mdi:lock-open" - | "mdi:lock-open-alert" - | "mdi:lock-open-alert-outline" - | "mdi:lock-open-check" - | "mdi:lock-open-check-outline" - | "mdi:lock-open-minus" - | "mdi:lock-open-minus-outline" - | "mdi:lock-open-outline" - | "mdi:lock-open-plus" - | "mdi:lock-open-plus-outline" - | "mdi:lock-open-remove" - | "mdi:lock-open-remove-outline" - | "mdi:lock-open-variant" - | "mdi:lock-open-variant-outline" - | "mdi:lock-outline" - | "mdi:lock-pattern" - | "mdi:lock-percent" - | "mdi:lock-percent-open" - | "mdi:lock-percent-open-outline" - | "mdi:lock-percent-open-variant" - | "mdi:lock-percent-open-variant-outline" - | "mdi:lock-percent-outline" - | "mdi:lock-plus" - | "mdi:lock-plus-outline" - | "mdi:lock-question" - | "mdi:lock-remove" - | "mdi:lock-remove-outline" - | "mdi:lock-reset" - | "mdi:lock-smart" - | "mdi:locker" - | "mdi:locker-multiple" - | "mdi:login" - | "mdi:login-variant" - | "mdi:logout" - | "mdi:logout-variant" - | "mdi:longitude" - | "mdi:looks" - | "mdi:lotion" - | "mdi:lotion-outline" - | "mdi:lotion-plus" - | "mdi:lotion-plus-outline" - | "mdi:loupe" - | "mdi:lumx" - | "mdi:lungs" - | "mdi:lyft" - | "mdi:mace" - | "mdi:magazine-pistol" - | "mdi:magazine-rifle" - | "mdi:magic-staff" - | "mdi:magnet" - | "mdi:magnet-on" - | "mdi:magnify" - | "mdi:magnify-close" - | "mdi:magnify-expand" - | "mdi:magnify-minus" - | "mdi:magnify-minus-cursor" - | "mdi:magnify-minus-outline" - | "mdi:magnify-plus" - | "mdi:magnify-plus-cursor" - | "mdi:magnify-plus-outline" - | "mdi:magnify-remove-cursor" - | "mdi:magnify-remove-outline" - | "mdi:magnify-scan" - | "mdi:mail" - | "mdi:mail-ru" - | "mdi:mailbox" - | "mdi:mailbox-open" - | "mdi:mailbox-open-outline" - | "mdi:mailbox-open-up" - | "mdi:mailbox-open-up-outline" - | "mdi:mailbox-outline" - | "mdi:mailbox-up" - | "mdi:mailbox-up-outline" - | "mdi:manjaro" - | "mdi:map" - | "mdi:map-check" - | "mdi:map-check-outline" - | "mdi:map-clock" - | "mdi:map-clock-outline" - | "mdi:map-legend" - | "mdi:map-marker" - | "mdi:map-marker-account" - | "mdi:map-marker-account-outline" - | "mdi:map-marker-alert" - | "mdi:map-marker-alert-outline" - | "mdi:map-marker-check" - | "mdi:map-marker-check-outline" - | "mdi:map-marker-circle" - | "mdi:map-marker-distance" - | "mdi:map-marker-down" - | "mdi:map-marker-left" - | "mdi:map-marker-left-outline" - | "mdi:map-marker-minus" - | "mdi:map-marker-minus-outline" - | "mdi:map-marker-multiple" - | "mdi:map-marker-multiple-outline" - | "mdi:map-marker-off" - | "mdi:map-marker-off-outline" - | "mdi:map-marker-outline" - | "mdi:map-marker-path" - | "mdi:map-marker-plus" - | "mdi:map-marker-plus-outline" - | "mdi:map-marker-question" - | "mdi:map-marker-question-outline" - | "mdi:map-marker-radius" - | "mdi:map-marker-radius-outline" - | "mdi:map-marker-remove" - | "mdi:map-marker-remove-outline" - | "mdi:map-marker-remove-variant" - | "mdi:map-marker-right" - | "mdi:map-marker-right-outline" - | "mdi:map-marker-star" - | "mdi:map-marker-star-outline" - | "mdi:map-marker-up" - | "mdi:map-minus" - | "mdi:map-outline" - | "mdi:map-plus" - | "mdi:map-search" - | "mdi:map-search-outline" - | "mdi:mapbox" - | "mdi:margin" - | "mdi:marker" - | "mdi:marker-cancel" - | "mdi:marker-check" - | "mdi:mastodon" - | "mdi:mastodon-variant" - | "mdi:material-design" - | "mdi:material-ui" - | "mdi:math-compass" - | "mdi:math-cos" - | "mdi:math-integral" - | "mdi:math-integral-box" - | "mdi:math-log" - | "mdi:math-norm" - | "mdi:math-norm-box" - | "mdi:math-sin" - | "mdi:math-tan" - | "mdi:matrix" - | "mdi:maxcdn" - | "mdi:medal" - | "mdi:medal-outline" - | "mdi:medical-bag" - | "mdi:medical-cotton-swab" - | "mdi:medication" - | "mdi:medication-outline" - | "mdi:meditation" - | "mdi:medium" - | "mdi:meetup" - | "mdi:memory" - | "mdi:memory-arrow-down" - | "mdi:menorah" - | "mdi:menorah-fire" - | "mdi:menu" - | "mdi:menu-close" - | "mdi:menu-down" - | "mdi:menu-down-outline" - | "mdi:menu-left" - | "mdi:menu-left-outline" - | "mdi:menu-open" - | "mdi:menu-right" - | "mdi:menu-right-outline" - | "mdi:menu-swap" - | "mdi:menu-swap-outline" - | "mdi:menu-up" - | "mdi:menu-up-outline" - | "mdi:merge" - | "mdi:message" - | "mdi:message-alert" - | "mdi:message-alert-outline" - | "mdi:message-arrow-left" - | "mdi:message-arrow-left-outline" - | "mdi:message-arrow-right" - | "mdi:message-arrow-right-outline" - | "mdi:message-badge" - | "mdi:message-badge-outline" - | "mdi:message-bookmark" - | "mdi:message-bookmark-outline" - | "mdi:message-bulleted" - | "mdi:message-bulleted-off" - | "mdi:message-check" - | "mdi:message-check-outline" - | "mdi:message-cog" - | "mdi:message-cog-outline" - | "mdi:message-draw" - | "mdi:message-fast" - | "mdi:message-fast-outline" - | "mdi:message-flash" - | "mdi:message-flash-outline" - | "mdi:message-image" - | "mdi:message-image-outline" - | "mdi:message-lock" - | "mdi:message-lock-outline" - | "mdi:message-minus" - | "mdi:message-minus-outline" - | "mdi:message-off" - | "mdi:message-off-outline" - | "mdi:message-outline" - | "mdi:message-plus" - | "mdi:message-plus-outline" - | "mdi:message-processing" - | "mdi:message-processing-outline" - | "mdi:message-question" - | "mdi:message-question-outline" - | "mdi:message-reply" - | "mdi:message-reply-outline" - | "mdi:message-reply-text" - | "mdi:message-reply-text-outline" - | "mdi:message-settings" - | "mdi:message-settings-outline" - | "mdi:message-star" - | "mdi:message-star-outline" - | "mdi:message-text" - | "mdi:message-text-clock" - | "mdi:message-text-clock-outline" - | "mdi:message-text-fast" - | "mdi:message-text-fast-outline" - | "mdi:message-text-lock" - | "mdi:message-text-lock-outline" - | "mdi:message-text-outline" - | "mdi:message-video" - | "mdi:meteor" - | "mdi:meter-electric" - | "mdi:meter-electric-outline" - | "mdi:meter-gas" - | "mdi:meter-gas-outline" - | "mdi:metronome" - | "mdi:metronome-tick" - | "mdi:micro-sd" - | "mdi:microphone" - | "mdi:microphone-message" - | "mdi:microphone-message-off" - | "mdi:microphone-minus" - | "mdi:microphone-off" - | "mdi:microphone-outline" - | "mdi:microphone-plus" - | "mdi:microphone-question" - | "mdi:microphone-question-outline" - | "mdi:microphone-settings" - | "mdi:microphone-variant" - | "mdi:microphone-variant-off" - | "mdi:microscope" - | "mdi:microsoft" - | "mdi:microsoft-access" - | "mdi:microsoft-azure" - | "mdi:microsoft-azure-devops" - | "mdi:microsoft-bing" - | "mdi:microsoft-dynamics-365" - | "mdi:microsoft-edge" - | "mdi:microsoft-edge-legacy" - | "mdi:microsoft-excel" - | "mdi:microsoft-internet-explorer" - | "mdi:microsoft-office" - | "mdi:microsoft-onedrive" - | "mdi:microsoft-onenote" - | "mdi:microsoft-outlook" - | "mdi:microsoft-powerpoint" - | "mdi:microsoft-sharepoint" - | "mdi:microsoft-teams" - | "mdi:microsoft-visual-studio" - | "mdi:microsoft-visual-studio-code" - | "mdi:microsoft-windows" - | "mdi:microsoft-windows-classic" - | "mdi:microsoft-word" - | "mdi:microsoft-xbox" - | "mdi:microsoft-xbox-controller" - | "mdi:microsoft-xbox-controller-battery-alert" - | "mdi:microsoft-xbox-controller-battery-charging" - | "mdi:microsoft-xbox-controller-battery-empty" - | "mdi:microsoft-xbox-controller-battery-full" - | "mdi:microsoft-xbox-controller-battery-low" - | "mdi:microsoft-xbox-controller-battery-medium" - | "mdi:microsoft-xbox-controller-battery-unknown" - | "mdi:microsoft-xbox-controller-menu" - | "mdi:microsoft-xbox-controller-off" - | "mdi:microsoft-xbox-controller-view" - | "mdi:microsoft-yammer" - | "mdi:microwave" - | "mdi:microwave-off" - | "mdi:middleware" - | "mdi:middleware-outline" - | "mdi:midi" - | "mdi:midi-input" - | "mdi:midi-port" - | "mdi:mine" - | "mdi:minecraft" - | "mdi:mini-sd" - | "mdi:minidisc" - | "mdi:minus" - | "mdi:minus-box" - | "mdi:minus-box-multiple" - | "mdi:minus-box-multiple-outline" - | "mdi:minus-box-outline" - | "mdi:minus-circle" - | "mdi:minus-circle-multiple" - | "mdi:minus-circle-multiple-outline" - | "mdi:minus-circle-off" - | "mdi:minus-circle-off-outline" - | "mdi:minus-circle-outline" - | "mdi:minus-network" - | "mdi:minus-network-outline" - | "mdi:minus-thick" - | "mdi:mirror" - | "mdi:mirror-rectangle" - | "mdi:mirror-variant" - | "mdi:mixcloud" - | "mdi:mixed-martial-arts" - | "mdi:mixed-reality" - | "mdi:mixer" - | "mdi:molecule" - | "mdi:molecule-co" - | "mdi:molecule-co2" - | "mdi:monitor" - | "mdi:monitor-account" - | "mdi:monitor-arrow-down" - | "mdi:monitor-arrow-down-variant" - | "mdi:monitor-cellphone" - | "mdi:monitor-cellphone-star" - | "mdi:monitor-dashboard" - | "mdi:monitor-edit" - | "mdi:monitor-eye" - | "mdi:monitor-lock" - | "mdi:monitor-multiple" - | "mdi:monitor-off" - | "mdi:monitor-screenshot" - | "mdi:monitor-share" - | "mdi:monitor-shimmer" - | "mdi:monitor-small" - | "mdi:monitor-speaker" - | "mdi:monitor-speaker-off" - | "mdi:monitor-star" - | "mdi:monitor-vertical" - | "mdi:moon-first-quarter" - | "mdi:moon-full" - | "mdi:moon-last-quarter" - | "mdi:moon-new" - | "mdi:moon-waning-crescent" - | "mdi:moon-waning-gibbous" - | "mdi:moon-waxing-crescent" - | "mdi:moon-waxing-gibbous" - | "mdi:moped" - | "mdi:moped-electric" - | "mdi:moped-electric-outline" - | "mdi:moped-outline" - | "mdi:more" - | "mdi:mortar-pestle" - | "mdi:mortar-pestle-plus" - | "mdi:mosque" - | "mdi:mosque-outline" - | "mdi:mother-heart" - | "mdi:mother-nurse" - | "mdi:motion" - | "mdi:motion-outline" - | "mdi:motion-pause" - | "mdi:motion-pause-outline" - | "mdi:motion-play" - | "mdi:motion-play-outline" - | "mdi:motion-sensor" - | "mdi:motion-sensor-off" - | "mdi:motorbike" - | "mdi:motorbike-electric" - | "mdi:motorbike-off" - | "mdi:mouse" - | "mdi:mouse-bluetooth" - | "mdi:mouse-left-click" - | "mdi:mouse-left-click-outline" - | "mdi:mouse-move-down" - | "mdi:mouse-move-up" - | "mdi:mouse-move-vertical" - | "mdi:mouse-off" - | "mdi:mouse-outline" - | "mdi:mouse-right-click" - | "mdi:mouse-right-click-outline" - | "mdi:mouse-scroll-wheel" - | "mdi:mouse-variant" - | "mdi:mouse-variant-off" - | "mdi:move-resize" - | "mdi:move-resize-variant" - | "mdi:movie" - | "mdi:movie-check" - | "mdi:movie-check-outline" - | "mdi:movie-cog" - | "mdi:movie-cog-outline" - | "mdi:movie-edit" - | "mdi:movie-edit-outline" - | "mdi:movie-filter" - | "mdi:movie-filter-outline" - | "mdi:movie-minus" - | "mdi:movie-minus-outline" - | "mdi:movie-off" - | "mdi:movie-off-outline" - | "mdi:movie-open" - | "mdi:movie-open-check" - | "mdi:movie-open-check-outline" - | "mdi:movie-open-cog" - | "mdi:movie-open-cog-outline" - | "mdi:movie-open-edit" - | "mdi:movie-open-edit-outline" - | "mdi:movie-open-minus" - | "mdi:movie-open-minus-outline" - | "mdi:movie-open-off" - | "mdi:movie-open-off-outline" - | "mdi:movie-open-outline" - | "mdi:movie-open-play" - | "mdi:movie-open-play-outline" - | "mdi:movie-open-plus" - | "mdi:movie-open-plus-outline" - | "mdi:movie-open-remove" - | "mdi:movie-open-remove-outline" - | "mdi:movie-open-settings" - | "mdi:movie-open-settings-outline" - | "mdi:movie-open-star" - | "mdi:movie-open-star-outline" - | "mdi:movie-outline" - | "mdi:movie-play" - | "mdi:movie-play-outline" - | "mdi:movie-plus" - | "mdi:movie-plus-outline" - | "mdi:movie-remove" - | "mdi:movie-remove-outline" - | "mdi:movie-roll" - | "mdi:movie-search" - | "mdi:movie-search-outline" - | "mdi:movie-settings" - | "mdi:movie-settings-outline" - | "mdi:movie-star" - | "mdi:movie-star-outline" - | "mdi:mower" - | "mdi:mower-bag" - | "mdi:mower-bag-on" - | "mdi:mower-on" - | "mdi:muffin" - | "mdi:multicast" - | "mdi:multimedia" - | "mdi:multiplication" - | "mdi:multiplication-box" - | "mdi:mushroom" - | "mdi:mushroom-off" - | "mdi:mushroom-off-outline" - | "mdi:mushroom-outline" - | "mdi:music" - | "mdi:music-accidental-double-flat" - | "mdi:music-accidental-double-sharp" - | "mdi:music-accidental-flat" - | "mdi:music-accidental-natural" - | "mdi:music-accidental-sharp" - | "mdi:music-box" - | "mdi:music-box-multiple" - | "mdi:music-box-multiple-outline" - | "mdi:music-box-outline" - | "mdi:music-circle" - | "mdi:music-circle-outline" - | "mdi:music-clef-alto" - | "mdi:music-clef-bass" - | "mdi:music-clef-treble" - | "mdi:music-note" - | "mdi:music-note-bluetooth" - | "mdi:music-note-bluetooth-off" - | "mdi:music-note-eighth" - | "mdi:music-note-eighth-dotted" - | "mdi:music-note-half" - | "mdi:music-note-half-dotted" - | "mdi:music-note-minus" - | "mdi:music-note-off" - | "mdi:music-note-off-outline" - | "mdi:music-note-outline" - | "mdi:music-note-plus" - | "mdi:music-note-quarter" - | "mdi:music-note-quarter-dotted" - | "mdi:music-note-sixteenth" - | "mdi:music-note-sixteenth-dotted" - | "mdi:music-note-whole" - | "mdi:music-note-whole-dotted" - | "mdi:music-off" - | "mdi:music-rest-eighth" - | "mdi:music-rest-half" - | "mdi:music-rest-quarter" - | "mdi:music-rest-sixteenth" - | "mdi:music-rest-whole" - | "mdi:mustache" - | "mdi:nail" - | "mdi:nas" - | "mdi:nativescript" - | "mdi:nature" - | "mdi:nature-outline" - | "mdi:nature-people" - | "mdi:nature-people-outline" - | "mdi:navigation" - | "mdi:navigation-outline" - | "mdi:navigation-variant" - | "mdi:navigation-variant-outline" - | "mdi:near-me" - | "mdi:necklace" - | "mdi:needle" - | "mdi:needle-off" - | "mdi:nest-thermostat" - | "mdi:netflix" - | "mdi:network" - | "mdi:network-off" - | "mdi:network-off-outline" - | "mdi:network-outline" - | "mdi:network-pos" - | "mdi:network-strength-1" - | "mdi:network-strength-1-alert" - | "mdi:network-strength-2" - | "mdi:network-strength-2-alert" - | "mdi:network-strength-3" - | "mdi:network-strength-3-alert" - | "mdi:network-strength-4" - | "mdi:network-strength-4-alert" - | "mdi:network-strength-4-cog" - | "mdi:network-strength-alert" - | "mdi:network-strength-alert-outline" - | "mdi:network-strength-off" - | "mdi:network-strength-off-outline" - | "mdi:network-strength-outline" - | "mdi:new-box" - | "mdi:newspaper" - | "mdi:newspaper-check" - | "mdi:newspaper-minus" - | "mdi:newspaper-plus" - | "mdi:newspaper-remove" - | "mdi:newspaper-variant" - | "mdi:newspaper-variant-multiple" - | "mdi:newspaper-variant-multiple-outline" - | "mdi:newspaper-variant-outline" - | "mdi:nfc" - | "mdi:nfc-off" - | "mdi:nfc-search-variant" - | "mdi:nfc-tap" - | "mdi:nfc-variant" - | "mdi:nfc-variant-off" - | "mdi:ninja" - | "mdi:nintendo-game-boy" - | "mdi:nintendo-switch" - | "mdi:nintendo-wii" - | "mdi:nintendo-wiiu" - | "mdi:nix" - | "mdi:nodejs" - | "mdi:noodles" - | "mdi:not-equal" - | "mdi:not-equal-variant" - | "mdi:note" - | "mdi:note-alert" - | "mdi:note-alert-outline" - | "mdi:note-check" - | "mdi:note-check-outline" - | "mdi:note-edit" - | "mdi:note-edit-outline" - | "mdi:note-minus" - | "mdi:note-minus-outline" - | "mdi:note-multiple" - | "mdi:note-multiple-outline" - | "mdi:note-off" - | "mdi:note-off-outline" - | "mdi:note-outline" - | "mdi:note-plus" - | "mdi:note-plus-outline" - | "mdi:note-remove" - | "mdi:note-remove-outline" - | "mdi:note-search" - | "mdi:note-search-outline" - | "mdi:note-text" - | "mdi:note-text-outline" - | "mdi:notebook" - | "mdi:notebook-check" - | "mdi:notebook-check-outline" - | "mdi:notebook-edit" - | "mdi:notebook-edit-outline" - | "mdi:notebook-heart" - | "mdi:notebook-heart-outline" - | "mdi:notebook-minus" - | "mdi:notebook-minus-outline" - | "mdi:notebook-multiple" - | "mdi:notebook-outline" - | "mdi:notebook-plus" - | "mdi:notebook-plus-outline" - | "mdi:notebook-remove" - | "mdi:notebook-remove-outline" - | "mdi:notification-clear-all" - | "mdi:npm" - | "mdi:npm-variant" - | "mdi:npm-variant-outline" - | "mdi:nuke" - | "mdi:null" - | "mdi:numeric" - | "mdi:numeric-0" - | "mdi:numeric-0-box" - | "mdi:numeric-0-box-multiple" - | "mdi:numeric-0-box-multiple-outline" - | "mdi:numeric-0-box-outline" - | "mdi:numeric-0-circle" - | "mdi:numeric-0-circle-outline" - | "mdi:numeric-1" - | "mdi:numeric-1-box" - | "mdi:numeric-1-box-multiple" - | "mdi:numeric-1-box-multiple-outline" - | "mdi:numeric-1-box-outline" - | "mdi:numeric-1-circle" - | "mdi:numeric-1-circle-outline" - | "mdi:numeric-10" - | "mdi:numeric-10-box" - | "mdi:numeric-10-box-multiple" - | "mdi:numeric-10-box-multiple-outline" - | "mdi:numeric-10-box-outline" - | "mdi:numeric-10-circle" - | "mdi:numeric-10-circle-outline" - | "mdi:numeric-2" - | "mdi:numeric-2-box" - | "mdi:numeric-2-box-multiple" - | "mdi:numeric-2-box-multiple-outline" - | "mdi:numeric-2-box-outline" - | "mdi:numeric-2-circle" - | "mdi:numeric-2-circle-outline" - | "mdi:numeric-3" - | "mdi:numeric-3-box" - | "mdi:numeric-3-box-multiple" - | "mdi:numeric-3-box-multiple-outline" - | "mdi:numeric-3-box-outline" - | "mdi:numeric-3-circle" - | "mdi:numeric-3-circle-outline" - | "mdi:numeric-4" - | "mdi:numeric-4-box" - | "mdi:numeric-4-box-multiple" - | "mdi:numeric-4-box-multiple-outline" - | "mdi:numeric-4-box-outline" - | "mdi:numeric-4-circle" - | "mdi:numeric-4-circle-outline" - | "mdi:numeric-5" - | "mdi:numeric-5-box" - | "mdi:numeric-5-box-multiple" - | "mdi:numeric-5-box-multiple-outline" - | "mdi:numeric-5-box-outline" - | "mdi:numeric-5-circle" - | "mdi:numeric-5-circle-outline" - | "mdi:numeric-6" - | "mdi:numeric-6-box" - | "mdi:numeric-6-box-multiple" - | "mdi:numeric-6-box-multiple-outline" - | "mdi:numeric-6-box-outline" - | "mdi:numeric-6-circle" - | "mdi:numeric-6-circle-outline" - | "mdi:numeric-7" - | "mdi:numeric-7-box" - | "mdi:numeric-7-box-multiple" - | "mdi:numeric-7-box-multiple-outline" - | "mdi:numeric-7-box-outline" - | "mdi:numeric-7-circle" - | "mdi:numeric-7-circle-outline" - | "mdi:numeric-8" - | "mdi:numeric-8-box" - | "mdi:numeric-8-box-multiple" - | "mdi:numeric-8-box-multiple-outline" - | "mdi:numeric-8-box-outline" - | "mdi:numeric-8-circle" - | "mdi:numeric-8-circle-outline" - | "mdi:numeric-9" - | "mdi:numeric-9-box" - | "mdi:numeric-9-box-multiple" - | "mdi:numeric-9-box-multiple-outline" - | "mdi:numeric-9-box-outline" - | "mdi:numeric-9-circle" - | "mdi:numeric-9-circle-outline" - | "mdi:numeric-9-plus" - | "mdi:numeric-9-plus-box" - | "mdi:numeric-9-plus-box-multiple" - | "mdi:numeric-9-plus-box-multiple-outline" - | "mdi:numeric-9-plus-box-outline" - | "mdi:numeric-9-plus-circle" - | "mdi:numeric-9-plus-circle-outline" - | "mdi:numeric-negative-1" - | "mdi:numeric-off" - | "mdi:numeric-positive-1" - | "mdi:nut" - | "mdi:nutrition" - | "mdi:nuxt" - | "mdi:oar" - | "mdi:ocarina" - | "mdi:oci" - | "mdi:ocr" - | "mdi:octagon" - | "mdi:octagon-outline" - | "mdi:octagram" - | "mdi:octagram-edit" - | "mdi:octagram-edit-outline" - | "mdi:octagram-minus" - | "mdi:octagram-minus-outline" - | "mdi:octagram-outline" - | "mdi:octagram-plus" - | "mdi:octagram-plus-outline" - | "mdi:octahedron" - | "mdi:octahedron-off" - | "mdi:odnoklassniki" - | "mdi:offer" - | "mdi:office-building" - | "mdi:office-building-cog" - | "mdi:office-building-cog-outline" - | "mdi:office-building-marker" - | "mdi:office-building-marker-outline" - | "mdi:office-building-minus" - | "mdi:office-building-minus-outline" - | "mdi:office-building-outline" - | "mdi:office-building-plus" - | "mdi:office-building-plus-outline" - | "mdi:office-building-remove" - | "mdi:office-building-remove-outline" - | "mdi:oil" - | "mdi:oil-lamp" - | "mdi:oil-level" - | "mdi:oil-temperature" - | "mdi:om" - | "mdi:omega" - | "mdi:one-up" - | "mdi:onedrive" - | "mdi:onenote" - | "mdi:onepassword" - | "mdi:opacity" - | "mdi:open-in-app" - | "mdi:open-in-new" - | "mdi:open-source-initiative" - | "mdi:openid" - | "mdi:opera" - | "mdi:orbit" - | "mdi:orbit-variant" - | "mdi:order-alphabetical-ascending" - | "mdi:order-alphabetical-descending" - | "mdi:order-bool-ascending" - | "mdi:order-bool-ascending-variant" - | "mdi:order-bool-descending" - | "mdi:order-bool-descending-variant" - | "mdi:order-numeric-ascending" - | "mdi:order-numeric-descending" - | "mdi:origin" - | "mdi:ornament" - | "mdi:ornament-variant" - | "mdi:outbox" - | "mdi:outdent" - | "mdi:outdoor-lamp" - | "mdi:outlook" - | "mdi:overscan" - | "mdi:owl" - | "mdi:pac-man" - | "mdi:package" - | "mdi:package-check" - | "mdi:package-down" - | "mdi:package-up" - | "mdi:package-variant" - | "mdi:package-variant-closed" - | "mdi:package-variant-closed-check" - | "mdi:package-variant-closed-minus" - | "mdi:package-variant-closed-plus" - | "mdi:package-variant-closed-remove" - | "mdi:package-variant-minus" - | "mdi:package-variant-plus" - | "mdi:package-variant-remove" - | "mdi:page-first" - | "mdi:page-last" - | "mdi:page-layout-body" - | "mdi:page-layout-footer" - | "mdi:page-layout-header" - | "mdi:page-layout-header-footer" - | "mdi:page-layout-sidebar-left" - | "mdi:page-layout-sidebar-right" - | "mdi:page-next" - | "mdi:page-next-outline" - | "mdi:page-previous" - | "mdi:page-previous-outline" - | "mdi:pail" - | "mdi:pail-minus" - | "mdi:pail-minus-outline" - | "mdi:pail-off" - | "mdi:pail-off-outline" - | "mdi:pail-outline" - | "mdi:pail-plus" - | "mdi:pail-plus-outline" - | "mdi:pail-remove" - | "mdi:pail-remove-outline" - | "mdi:palette" - | "mdi:palette-advanced" - | "mdi:palette-outline" - | "mdi:palette-swatch" - | "mdi:palette-swatch-outline" - | "mdi:palette-swatch-variant" - | "mdi:palm-tree" - | "mdi:pan" - | "mdi:pan-bottom-left" - | "mdi:pan-bottom-right" - | "mdi:pan-down" - | "mdi:pan-horizontal" - | "mdi:pan-left" - | "mdi:pan-right" - | "mdi:pan-top-left" - | "mdi:pan-top-right" - | "mdi:pan-up" - | "mdi:pan-vertical" - | "mdi:panda" - | "mdi:pandora" - | "mdi:panorama" - | "mdi:panorama-fisheye" - | "mdi:panorama-horizontal" - | "mdi:panorama-horizontal-outline" - | "mdi:panorama-outline" - | "mdi:panorama-sphere" - | "mdi:panorama-sphere-outline" - | "mdi:panorama-variant" - | "mdi:panorama-variant-outline" - | "mdi:panorama-vertical" - | "mdi:panorama-vertical-outline" - | "mdi:panorama-wide-angle" - | "mdi:panorama-wide-angle-outline" - | "mdi:paper-cut-vertical" - | "mdi:paper-roll" - | "mdi:paper-roll-outline" - | "mdi:paperclip" - | "mdi:paperclip-check" - | "mdi:paperclip-lock" - | "mdi:paperclip-minus" - | "mdi:paperclip-off" - | "mdi:paperclip-plus" - | "mdi:paperclip-remove" - | "mdi:parachute" - | "mdi:parachute-outline" - | "mdi:paragliding" - | "mdi:parking" - | "mdi:party-popper" - | "mdi:passport" - | "mdi:passport-alert" - | "mdi:passport-biometric" - | "mdi:passport-cancel" - | "mdi:passport-check" - | "mdi:passport-minus" - | "mdi:passport-plus" - | "mdi:passport-remove" - | "mdi:pasta" - | "mdi:patio-heater" - | "mdi:patreon" - | "mdi:pause" - | "mdi:pause-box" - | "mdi:pause-box-outline" - | "mdi:pause-circle" - | "mdi:pause-circle-outline" - | "mdi:pause-octagon" - | "mdi:pause-octagon-outline" - | "mdi:paw" - | "mdi:paw-off" - | "mdi:paw-off-outline" - | "mdi:paw-outline" - | "mdi:paypal" - | "mdi:peace" - | "mdi:peanut" - | "mdi:peanut-off" - | "mdi:peanut-off-outline" - | "mdi:peanut-outline" - | "mdi:pen" - | "mdi:pen-lock" - | "mdi:pen-minus" - | "mdi:pen-off" - | "mdi:pen-plus" - | "mdi:pen-remove" - | "mdi:pencil" - | "mdi:pencil-box" - | "mdi:pencil-box-multiple" - | "mdi:pencil-box-multiple-outline" - | "mdi:pencil-box-outline" - | "mdi:pencil-circle" - | "mdi:pencil-circle-outline" - | "mdi:pencil-lock" - | "mdi:pencil-lock-outline" - | "mdi:pencil-minus" - | "mdi:pencil-minus-outline" - | "mdi:pencil-off" - | "mdi:pencil-off-outline" - | "mdi:pencil-outline" - | "mdi:pencil-plus" - | "mdi:pencil-plus-outline" - | "mdi:pencil-remove" - | "mdi:pencil-remove-outline" - | "mdi:pencil-ruler" - | "mdi:pencil-ruler-outline" - | "mdi:penguin" - | "mdi:pentagon" - | "mdi:pentagon-outline" - | "mdi:pentagram" - | "mdi:percent" - | "mdi:percent-box" - | "mdi:percent-box-outline" - | "mdi:percent-circle" - | "mdi:percent-circle-outline" - | "mdi:percent-outline" - | "mdi:periodic-table" - | "mdi:periscope" - | "mdi:perspective-less" - | "mdi:perspective-more" - | "mdi:ph" - | "mdi:phone" - | "mdi:phone-alert" - | "mdi:phone-alert-outline" - | "mdi:phone-bluetooth" - | "mdi:phone-bluetooth-outline" - | "mdi:phone-cancel" - | "mdi:phone-cancel-outline" - | "mdi:phone-check" - | "mdi:phone-check-outline" - | "mdi:phone-classic" - | "mdi:phone-classic-off" - | "mdi:phone-clock" - | "mdi:phone-dial" - | "mdi:phone-dial-outline" - | "mdi:phone-forward" - | "mdi:phone-forward-outline" - | "mdi:phone-hangup" - | "mdi:phone-hangup-outline" - | "mdi:phone-in-talk" - | "mdi:phone-in-talk-outline" - | "mdi:phone-incoming" - | "mdi:phone-incoming-outgoing" - | "mdi:phone-incoming-outgoing-outline" - | "mdi:phone-incoming-outline" - | "mdi:phone-lock" - | "mdi:phone-lock-outline" - | "mdi:phone-log" - | "mdi:phone-log-outline" - | "mdi:phone-message" - | "mdi:phone-message-outline" - | "mdi:phone-minus" - | "mdi:phone-minus-outline" - | "mdi:phone-missed" - | "mdi:phone-missed-outline" - | "mdi:phone-off" - | "mdi:phone-off-outline" - | "mdi:phone-outgoing" - | "mdi:phone-outgoing-outline" - | "mdi:phone-outline" - | "mdi:phone-paused" - | "mdi:phone-paused-outline" - | "mdi:phone-plus" - | "mdi:phone-plus-outline" - | "mdi:phone-refresh" - | "mdi:phone-refresh-outline" - | "mdi:phone-remove" - | "mdi:phone-remove-outline" - | "mdi:phone-return" - | "mdi:phone-return-outline" - | "mdi:phone-ring" - | "mdi:phone-ring-outline" - | "mdi:phone-rotate-landscape" - | "mdi:phone-rotate-portrait" - | "mdi:phone-settings" - | "mdi:phone-settings-outline" - | "mdi:phone-sync" - | "mdi:phone-sync-outline" - | "mdi:phone-voip" - | "mdi:pi" - | "mdi:pi-box" - | "mdi:pi-hole" - | "mdi:piano" - | "mdi:piano-off" - | "mdi:pickaxe" - | "mdi:picture-in-picture-bottom-right" - | "mdi:picture-in-picture-bottom-right-outline" - | "mdi:picture-in-picture-top-right" - | "mdi:picture-in-picture-top-right-outline" - | "mdi:pier" - | "mdi:pier-crane" - | "mdi:pig" - | "mdi:pig-variant" - | "mdi:pig-variant-outline" - | "mdi:piggy-bank" - | "mdi:piggy-bank-outline" - | "mdi:pill" - | "mdi:pill-multiple" - | "mdi:pill-off" - | "mdi:pillar" - | "mdi:pin" - | "mdi:pin-off" - | "mdi:pin-off-outline" - | "mdi:pin-outline" - | "mdi:pine-tree" - | "mdi:pine-tree-box" - | "mdi:pine-tree-fire" - | "mdi:pine-tree-variant" - | "mdi:pine-tree-variant-outline" - | "mdi:pinterest" - | "mdi:pinterest-box" - | "mdi:pinwheel" - | "mdi:pinwheel-outline" - | "mdi:pipe" - | "mdi:pipe-disconnected" - | "mdi:pipe-leak" - | "mdi:pipe-valve" - | "mdi:pipe-wrench" - | "mdi:pirate" - | "mdi:pistol" - | "mdi:piston" - | "mdi:pitchfork" - | "mdi:pizza" - | "mdi:plane-car" - | "mdi:plane-train" - | "mdi:play" - | "mdi:play-box" - | "mdi:play-box-edit-outline" - | "mdi:play-box-lock" - | "mdi:play-box-lock-open" - | "mdi:play-box-lock-open-outline" - | "mdi:play-box-lock-outline" - | "mdi:play-box-multiple" - | "mdi:play-box-multiple-outline" - | "mdi:play-box-outline" - | "mdi:play-circle" - | "mdi:play-circle-outline" - | "mdi:play-network" - | "mdi:play-network-outline" - | "mdi:play-outline" - | "mdi:play-pause" - | "mdi:play-protected-content" - | "mdi:play-speed" - | "mdi:playlist-check" - | "mdi:playlist-edit" - | "mdi:playlist-minus" - | "mdi:playlist-music" - | "mdi:playlist-music-outline" - | "mdi:playlist-play" - | "mdi:playlist-plus" - | "mdi:playlist-remove" - | "mdi:playlist-star" - | "mdi:plex" - | "mdi:pliers" - | "mdi:plus" - | "mdi:plus-box" - | "mdi:plus-box-multiple" - | "mdi:plus-box-multiple-outline" - | "mdi:plus-box-outline" - | "mdi:plus-circle" - | "mdi:plus-circle-multiple" - | "mdi:plus-circle-multiple-outline" - | "mdi:plus-circle-outline" - | "mdi:plus-lock" - | "mdi:plus-lock-open" - | "mdi:plus-minus" - | "mdi:plus-minus-box" - | "mdi:plus-minus-variant" - | "mdi:plus-network" - | "mdi:plus-network-outline" - | "mdi:plus-outline" - | "mdi:plus-thick" - | "mdi:pocket" - | "mdi:podcast" - | "mdi:podium" - | "mdi:podium-bronze" - | "mdi:podium-gold" - | "mdi:podium-silver" - | "mdi:point-of-sale" - | "mdi:pokeball" - | "mdi:pokemon-go" - | "mdi:poker-chip" - | "mdi:polaroid" - | "mdi:police-badge" - | "mdi:police-badge-outline" - | "mdi:police-station" - | "mdi:poll" - | "mdi:polo" - | "mdi:polymer" - | "mdi:pool" - | "mdi:pool-thermometer" - | "mdi:popcorn" - | "mdi:post" - | "mdi:post-lamp" - | "mdi:post-outline" - | "mdi:postage-stamp" - | "mdi:pot" - | "mdi:pot-mix" - | "mdi:pot-mix-outline" - | "mdi:pot-outline" - | "mdi:pot-steam" - | "mdi:pot-steam-outline" - | "mdi:pound" - | "mdi:pound-box" - | "mdi:pound-box-outline" - | "mdi:power" - | "mdi:power-cycle" - | "mdi:power-off" - | "mdi:power-on" - | "mdi:power-plug" - | "mdi:power-plug-battery" - | "mdi:power-plug-battery-outline" - | "mdi:power-plug-off" - | "mdi:power-plug-off-outline" - | "mdi:power-plug-outline" - | "mdi:power-settings" - | "mdi:power-sleep" - | "mdi:power-socket" - | "mdi:power-socket-au" - | "mdi:power-socket-ch" - | "mdi:power-socket-de" - | "mdi:power-socket-eu" - | "mdi:power-socket-fr" - | "mdi:power-socket-it" - | "mdi:power-socket-jp" - | "mdi:power-socket-uk" - | "mdi:power-socket-us" - | "mdi:power-standby" - | "mdi:powershell" - | "mdi:prescription" - | "mdi:presentation" - | "mdi:presentation-play" - | "mdi:pretzel" - | "mdi:prezi" - | "mdi:printer" - | "mdi:printer-3d" - | "mdi:printer-3d-nozzle" - | "mdi:printer-3d-nozzle-alert" - | "mdi:printer-3d-nozzle-alert-outline" - | "mdi:printer-3d-nozzle-heat" - | "mdi:printer-3d-nozzle-heat-outline" - | "mdi:printer-3d-nozzle-off" - | "mdi:printer-3d-nozzle-off-outline" - | "mdi:printer-3d-nozzle-outline" - | "mdi:printer-3d-off" - | "mdi:printer-alert" - | "mdi:printer-check" - | "mdi:printer-eye" - | "mdi:printer-off" - | "mdi:printer-off-outline" - | "mdi:printer-outline" - | "mdi:printer-pos" - | "mdi:printer-pos-alert" - | "mdi:printer-pos-alert-outline" - | "mdi:printer-pos-cancel" - | "mdi:printer-pos-cancel-outline" - | "mdi:printer-pos-check" - | "mdi:printer-pos-check-outline" - | "mdi:printer-pos-cog" - | "mdi:printer-pos-cog-outline" - | "mdi:printer-pos-edit" - | "mdi:printer-pos-edit-outline" - | "mdi:printer-pos-minus" - | "mdi:printer-pos-minus-outline" - | "mdi:printer-pos-network" - | "mdi:printer-pos-network-outline" - | "mdi:printer-pos-off" - | "mdi:printer-pos-off-outline" - | "mdi:printer-pos-outline" - | "mdi:printer-pos-pause" - | "mdi:printer-pos-pause-outline" - | "mdi:printer-pos-play" - | "mdi:printer-pos-play-outline" - | "mdi:printer-pos-plus" - | "mdi:printer-pos-plus-outline" - | "mdi:printer-pos-refresh" - | "mdi:printer-pos-refresh-outline" - | "mdi:printer-pos-remove" - | "mdi:printer-pos-remove-outline" - | "mdi:printer-pos-star" - | "mdi:printer-pos-star-outline" - | "mdi:printer-pos-stop" - | "mdi:printer-pos-stop-outline" - | "mdi:printer-pos-sync" - | "mdi:printer-pos-sync-outline" - | "mdi:printer-pos-wrench" - | "mdi:printer-pos-wrench-outline" - | "mdi:printer-search" - | "mdi:printer-settings" - | "mdi:printer-wireless" - | "mdi:priority-high" - | "mdi:priority-low" - | "mdi:professional-hexagon" - | "mdi:progress-alert" - | "mdi:progress-check" - | "mdi:progress-clock" - | "mdi:progress-close" - | "mdi:progress-download" - | "mdi:progress-helper" - | "mdi:progress-pencil" - | "mdi:progress-question" - | "mdi:progress-star" - | "mdi:progress-star-four-points" - | "mdi:progress-tag" - | "mdi:progress-upload" - | "mdi:progress-wrench" - | "mdi:projector" - | "mdi:projector-off" - | "mdi:projector-screen" - | "mdi:projector-screen-off" - | "mdi:projector-screen-off-outline" - | "mdi:projector-screen-outline" - | "mdi:projector-screen-variant" - | "mdi:projector-screen-variant-off" - | "mdi:projector-screen-variant-off-outline" - | "mdi:projector-screen-variant-outline" - | "mdi:propane-tank" - | "mdi:propane-tank-outline" - | "mdi:protocol" - | "mdi:publish" - | "mdi:publish-off" - | "mdi:pulse" - | "mdi:pump" - | "mdi:pump-off" - | "mdi:pumpkin" - | "mdi:purse" - | "mdi:purse-outline" - | "mdi:puzzle" - | "mdi:puzzle-check" - | "mdi:puzzle-check-outline" - | "mdi:puzzle-edit" - | "mdi:puzzle-edit-outline" - | "mdi:puzzle-heart" - | "mdi:puzzle-heart-outline" - | "mdi:puzzle-minus" - | "mdi:puzzle-minus-outline" - | "mdi:puzzle-outline" - | "mdi:puzzle-plus" - | "mdi:puzzle-plus-outline" - | "mdi:puzzle-remove" - | "mdi:puzzle-remove-outline" - | "mdi:puzzle-star" - | "mdi:puzzle-star-outline" - | "mdi:pyramid" - | "mdi:pyramid-off" - | "mdi:qi" - | "mdi:qqchat" - | "mdi:qrcode" - | "mdi:qrcode-edit" - | "mdi:qrcode-minus" - | "mdi:qrcode-plus" - | "mdi:qrcode-remove" - | "mdi:qrcode-scan" - | "mdi:quadcopter" - | "mdi:quality-high" - | "mdi:quality-low" - | "mdi:quality-medium" - | "mdi:queue-first-in-last-out" - | "mdi:quick-reply" - | "mdi:quicktime" - | "mdi:quora" - | "mdi:rabbit" - | "mdi:rabbit-variant" - | "mdi:rabbit-variant-outline" - | "mdi:racing-helmet" - | "mdi:racquetball" - | "mdi:radar" - | "mdi:radiator" - | "mdi:radiator-disabled" - | "mdi:radiator-off" - | "mdi:radio" - | "mdi:radio-am" - | "mdi:radio-fm" - | "mdi:radio-handheld" - | "mdi:radio-off" - | "mdi:radio-tower" - | "mdi:radioactive" - | "mdi:radioactive-circle" - | "mdi:radioactive-circle-outline" - | "mdi:radioactive-off" - | "mdi:radiobox-blank" - | "mdi:radiobox-indeterminate-variant" - | "mdi:radiobox-marked" - | "mdi:radiology-box" - | "mdi:radiology-box-outline" - | "mdi:radius" - | "mdi:radius-outline" - | "mdi:railroad-light" - | "mdi:rake" - | "mdi:raspberry-pi" - | "mdi:raw" - | "mdi:raw-off" - | "mdi:ray-end" - | "mdi:ray-end-arrow" - | "mdi:ray-start" - | "mdi:ray-start-arrow" - | "mdi:ray-start-end" - | "mdi:ray-start-vertex-end" - | "mdi:ray-vertex" - | "mdi:razor-double-edge" - | "mdi:razor-single-edge" - | "mdi:rdio" - | "mdi:react" - | "mdi:read" - | "mdi:receipt" - | "mdi:receipt-clock" - | "mdi:receipt-clock-outline" - | "mdi:receipt-outline" - | "mdi:receipt-send" - | "mdi:receipt-send-outline" - | "mdi:receipt-text" - | "mdi:receipt-text-arrow-left" - | "mdi:receipt-text-arrow-left-outline" - | "mdi:receipt-text-arrow-right" - | "mdi:receipt-text-arrow-right-outline" - | "mdi:receipt-text-check" - | "mdi:receipt-text-check-outline" - | "mdi:receipt-text-clock" - | "mdi:receipt-text-clock-outline" - | "mdi:receipt-text-edit" - | "mdi:receipt-text-edit-outline" - | "mdi:receipt-text-minus" - | "mdi:receipt-text-minus-outline" - | "mdi:receipt-text-outline" - | "mdi:receipt-text-plus" - | "mdi:receipt-text-plus-outline" - | "mdi:receipt-text-remove" - | "mdi:receipt-text-remove-outline" - | "mdi:receipt-text-send" - | "mdi:receipt-text-send-outline" - | "mdi:record" - | "mdi:record-circle" - | "mdi:record-circle-outline" - | "mdi:record-player" - | "mdi:record-rec" - | "mdi:rectangle" - | "mdi:rectangle-outline" - | "mdi:recycle" - | "mdi:recycle-variant" - | "mdi:reddit" - | "mdi:redhat" - | "mdi:redo" - | "mdi:redo-variant" - | "mdi:reflect-horizontal" - | "mdi:reflect-vertical" - | "mdi:refresh" - | "mdi:refresh-auto" - | "mdi:refresh-circle" - | "mdi:regex" - | "mdi:registered-trademark" - | "mdi:reiterate" - | "mdi:relation-many-to-many" - | "mdi:relation-many-to-one" - | "mdi:relation-many-to-one-or-many" - | "mdi:relation-many-to-only-one" - | "mdi:relation-many-to-zero-or-many" - | "mdi:relation-many-to-zero-or-one" - | "mdi:relation-one-or-many-to-many" - | "mdi:relation-one-or-many-to-one" - | "mdi:relation-one-or-many-to-one-or-many" - | "mdi:relation-one-or-many-to-only-one" - | "mdi:relation-one-or-many-to-zero-or-many" - | "mdi:relation-one-or-many-to-zero-or-one" - | "mdi:relation-one-to-many" - | "mdi:relation-one-to-one" - | "mdi:relation-one-to-one-or-many" - | "mdi:relation-one-to-only-one" - | "mdi:relation-one-to-zero-or-many" - | "mdi:relation-one-to-zero-or-one" - | "mdi:relation-only-one-to-many" - | "mdi:relation-only-one-to-one" - | "mdi:relation-only-one-to-one-or-many" - | "mdi:relation-only-one-to-only-one" - | "mdi:relation-only-one-to-zero-or-many" - | "mdi:relation-only-one-to-zero-or-one" - | "mdi:relation-zero-or-many-to-many" - | "mdi:relation-zero-or-many-to-one" - | "mdi:relation-zero-or-many-to-one-or-many" - | "mdi:relation-zero-or-many-to-only-one" - | "mdi:relation-zero-or-many-to-zero-or-many" - | "mdi:relation-zero-or-many-to-zero-or-one" - | "mdi:relation-zero-or-one-to-many" - | "mdi:relation-zero-or-one-to-one" - | "mdi:relation-zero-or-one-to-one-or-many" - | "mdi:relation-zero-or-one-to-only-one" - | "mdi:relation-zero-or-one-to-zero-or-many" - | "mdi:relation-zero-or-one-to-zero-or-one" - | "mdi:relative-scale" - | "mdi:reload" - | "mdi:reload-alert" - | "mdi:reminder" - | "mdi:remote" - | "mdi:remote-desktop" - | "mdi:remote-off" - | "mdi:remote-tv" - | "mdi:remote-tv-off" - | "mdi:rename" - | "mdi:rename-box" - | "mdi:rename-box-outline" - | "mdi:rename-outline" - | "mdi:reorder-horizontal" - | "mdi:reorder-vertical" - | "mdi:repeat" - | "mdi:repeat-off" - | "mdi:repeat-once" - | "mdi:repeat-variant" - | "mdi:replay" - | "mdi:reply" - | "mdi:reply-all" - | "mdi:reply-all-outline" - | "mdi:reply-circle" - | "mdi:reply-outline" - | "mdi:reproduction" - | "mdi:resistor" - | "mdi:resistor-nodes" - | "mdi:resize" - | "mdi:resize-bottom-right" - | "mdi:responsive" - | "mdi:restart" - | "mdi:restart-alert" - | "mdi:restart-off" - | "mdi:restore" - | "mdi:restore-alert" - | "mdi:rewind" - | "mdi:rewind-10" - | "mdi:rewind-15" - | "mdi:rewind-30" - | "mdi:rewind-45" - | "mdi:rewind-5" - | "mdi:rewind-60" - | "mdi:rewind-outline" - | "mdi:rhombus" - | "mdi:rhombus-medium" - | "mdi:rhombus-medium-outline" - | "mdi:rhombus-outline" - | "mdi:rhombus-split" - | "mdi:rhombus-split-outline" - | "mdi:ribbon" - | "mdi:rice" - | "mdi:rickshaw" - | "mdi:rickshaw-electric" - | "mdi:ring" - | "mdi:rivet" - | "mdi:road" - | "mdi:road-variant" - | "mdi:robber" - | "mdi:robot" - | "mdi:robot-angry" - | "mdi:robot-angry-outline" - | "mdi:robot-confused" - | "mdi:robot-confused-outline" - | "mdi:robot-dead" - | "mdi:robot-dead-outline" - | "mdi:robot-excited" - | "mdi:robot-excited-outline" - | "mdi:robot-happy" - | "mdi:robot-happy-outline" - | "mdi:robot-industrial" - | "mdi:robot-industrial-outline" - | "mdi:robot-love" - | "mdi:robot-love-outline" - | "mdi:robot-mower" - | "mdi:robot-mower-outline" - | "mdi:robot-off" - | "mdi:robot-off-outline" - | "mdi:robot-outline" - | "mdi:robot-vacuum" - | "mdi:robot-vacuum-alert" - | "mdi:robot-vacuum-off" - | "mdi:robot-vacuum-variant" - | "mdi:robot-vacuum-variant-alert" - | "mdi:robot-vacuum-variant-off" - | "mdi:rocket" - | "mdi:rocket-launch" - | "mdi:rocket-launch-outline" - | "mdi:rocket-outline" - | "mdi:rodent" - | "mdi:roller-shade" - | "mdi:roller-shade-closed" - | "mdi:roller-skate" - | "mdi:roller-skate-off" - | "mdi:rollerblade" - | "mdi:rollerblade-off" - | "mdi:rollupjs" - | "mdi:rolodex" - | "mdi:rolodex-outline" - | "mdi:roman-numeral-1" - | "mdi:roman-numeral-10" - | "mdi:roman-numeral-2" - | "mdi:roman-numeral-3" - | "mdi:roman-numeral-4" - | "mdi:roman-numeral-5" - | "mdi:roman-numeral-6" - | "mdi:roman-numeral-7" - | "mdi:roman-numeral-8" - | "mdi:roman-numeral-9" - | "mdi:room-service" - | "mdi:room-service-outline" - | "mdi:rotate-360" - | "mdi:rotate-3d" - | "mdi:rotate-3d-variant" - | "mdi:rotate-left" - | "mdi:rotate-left-variant" - | "mdi:rotate-orbit" - | "mdi:rotate-right" - | "mdi:rotate-right-variant" - | "mdi:rounded-corner" - | "mdi:router" - | "mdi:router-network" - | "mdi:router-network-wireless" - | "mdi:router-wireless" - | "mdi:router-wireless-off" - | "mdi:router-wireless-settings" - | "mdi:routes" - | "mdi:routes-clock" - | "mdi:rowing" - | "mdi:rss" - | "mdi:rss-box" - | "mdi:rss-off" - | "mdi:rug" - | "mdi:rugby" - | "mdi:ruler" - | "mdi:ruler-square" - | "mdi:ruler-square-compass" - | "mdi:run" - | "mdi:run-fast" - | "mdi:rv-truck" - | "mdi:sack" - | "mdi:sack-outline" - | "mdi:sack-percent" - | "mdi:safe" - | "mdi:safe-square" - | "mdi:safe-square-outline" - | "mdi:safety-goggles" - | "mdi:safety-googles" - | "mdi:sail-boat" - | "mdi:sail-boat-sink" - | "mdi:sale" - | "mdi:sale-outline" - | "mdi:salesforce" - | "mdi:sass" - | "mdi:satellite" - | "mdi:satellite-uplink" - | "mdi:satellite-variant" - | "mdi:sausage" - | "mdi:sausage-off" - | "mdi:saw-blade" - | "mdi:sawtooth-wave" - | "mdi:saxophone" - | "mdi:scale" - | "mdi:scale-balance" - | "mdi:scale-bathroom" - | "mdi:scale-off" - | "mdi:scale-unbalanced" - | "mdi:scan-helper" - | "mdi:scanner" - | "mdi:scanner-off" - | "mdi:scatter-plot" - | "mdi:scatter-plot-outline" - | "mdi:scent" - | "mdi:scent-off" - | "mdi:school" - | "mdi:school-outline" - | "mdi:scissors-cutting" - | "mdi:scooter" - | "mdi:scooter-electric" - | "mdi:scoreboard" - | "mdi:scoreboard-outline" - | "mdi:screen-rotation" - | "mdi:screen-rotation-lock" - | "mdi:screw-flat-top" - | "mdi:screw-lag" - | "mdi:screw-machine-flat-top" - | "mdi:screw-machine-round-top" - | "mdi:screw-round-top" - | "mdi:screwdriver" - | "mdi:script" - | "mdi:script-outline" - | "mdi:script-text" - | "mdi:script-text-key" - | "mdi:script-text-key-outline" - | "mdi:script-text-outline" - | "mdi:script-text-play" - | "mdi:script-text-play-outline" - | "mdi:sd" - | "mdi:seal" - | "mdi:seal-variant" - | "mdi:search-web" - | "mdi:seat" - | "mdi:seat-flat" - | "mdi:seat-flat-angled" - | "mdi:seat-individual-suite" - | "mdi:seat-legroom-extra" - | "mdi:seat-legroom-normal" - | "mdi:seat-legroom-reduced" - | "mdi:seat-outline" - | "mdi:seat-passenger" - | "mdi:seat-recline-extra" - | "mdi:seat-recline-normal" - | "mdi:seatbelt" - | "mdi:security" - | "mdi:security-close" - | "mdi:security-network" - | "mdi:seed" - | "mdi:seed-off" - | "mdi:seed-off-outline" - | "mdi:seed-outline" - | "mdi:seed-plus" - | "mdi:seed-plus-outline" - | "mdi:seesaw" - | "mdi:segment" - | "mdi:select" - | "mdi:select-all" - | "mdi:select-arrow-down" - | "mdi:select-arrow-up" - | "mdi:select-color" - | "mdi:select-compare" - | "mdi:select-drag" - | "mdi:select-group" - | "mdi:select-inverse" - | "mdi:select-marker" - | "mdi:select-multiple" - | "mdi:select-multiple-marker" - | "mdi:select-off" - | "mdi:select-place" - | "mdi:select-remove" - | "mdi:select-search" - | "mdi:selection" - | "mdi:selection-drag" - | "mdi:selection-ellipse" - | "mdi:selection-ellipse-arrow-inside" - | "mdi:selection-ellipse-remove" - | "mdi:selection-lasso" - | "mdi:selection-marker" - | "mdi:selection-multiple" - | "mdi:selection-multiple-marker" - | "mdi:selection-off" - | "mdi:selection-remove" - | "mdi:selection-search" - | "mdi:semantic-web" - | "mdi:send" - | "mdi:send-check" - | "mdi:send-check-outline" - | "mdi:send-circle" - | "mdi:send-circle-outline" - | "mdi:send-clock" - | "mdi:send-clock-outline" - | "mdi:send-lock" - | "mdi:send-lock-outline" - | "mdi:send-outline" - | "mdi:send-variant" - | "mdi:send-variant-clock" - | "mdi:send-variant-clock-outline" - | "mdi:send-variant-outline" - | "mdi:serial-port" - | "mdi:server" - | "mdi:server-minus" - | "mdi:server-minus-outline" - | "mdi:server-network" - | "mdi:server-network-off" - | "mdi:server-network-outline" - | "mdi:server-off" - | "mdi:server-outline" - | "mdi:server-plus" - | "mdi:server-plus-outline" - | "mdi:server-remove" - | "mdi:server-security" - | "mdi:set-all" - | "mdi:set-center" - | "mdi:set-center-right" - | "mdi:set-left" - | "mdi:set-left-center" - | "mdi:set-left-right" - | "mdi:set-merge" - | "mdi:set-none" - | "mdi:set-right" - | "mdi:set-split" - | "mdi:set-square" - | "mdi:set-top-box" - | "mdi:settings-helper" - | "mdi:shaker" - | "mdi:shaker-outline" - | "mdi:shape" - | "mdi:shape-circle-plus" - | "mdi:shape-outline" - | "mdi:shape-oval-plus" - | "mdi:shape-plus" - | "mdi:shape-plus-outline" - | "mdi:shape-polygon-plus" - | "mdi:shape-rectangle-plus" - | "mdi:shape-square-plus" - | "mdi:shape-square-rounded-plus" - | "mdi:share" - | "mdi:share-all" - | "mdi:share-all-outline" - | "mdi:share-circle" - | "mdi:share-off" - | "mdi:share-off-outline" - | "mdi:share-outline" - | "mdi:share-variant" - | "mdi:share-variant-outline" - | "mdi:shark" - | "mdi:shark-fin" - | "mdi:shark-fin-outline" - | "mdi:shark-off" - | "mdi:sheep" - | "mdi:shield" - | "mdi:shield-account" - | "mdi:shield-account-outline" - | "mdi:shield-account-variant" - | "mdi:shield-account-variant-outline" - | "mdi:shield-airplane" - | "mdi:shield-airplane-outline" - | "mdi:shield-alert" - | "mdi:shield-alert-outline" - | "mdi:shield-bug" - | "mdi:shield-bug-outline" - | "mdi:shield-car" - | "mdi:shield-check" - | "mdi:shield-check-outline" - | "mdi:shield-cross" - | "mdi:shield-cross-outline" - | "mdi:shield-crown" - | "mdi:shield-crown-outline" - | "mdi:shield-edit" - | "mdi:shield-edit-outline" - | "mdi:shield-half" - | "mdi:shield-half-full" - | "mdi:shield-home" - | "mdi:shield-home-outline" - | "mdi:shield-key" - | "mdi:shield-key-outline" - | "mdi:shield-link-variant" - | "mdi:shield-link-variant-outline" - | "mdi:shield-lock" - | "mdi:shield-lock-open" - | "mdi:shield-lock-open-outline" - | "mdi:shield-lock-outline" - | "mdi:shield-moon" - | "mdi:shield-moon-outline" - | "mdi:shield-off" - | "mdi:shield-off-outline" - | "mdi:shield-outline" - | "mdi:shield-plus" - | "mdi:shield-plus-outline" - | "mdi:shield-refresh" - | "mdi:shield-refresh-outline" - | "mdi:shield-remove" - | "mdi:shield-remove-outline" - | "mdi:shield-search" - | "mdi:shield-star" - | "mdi:shield-star-outline" - | "mdi:shield-sun" - | "mdi:shield-sun-outline" - | "mdi:shield-sword" - | "mdi:shield-sword-outline" - | "mdi:shield-sync" - | "mdi:shield-sync-outline" - | "mdi:shimmer" - | "mdi:ship-wheel" - | "mdi:shipping-pallet" - | "mdi:shoe-ballet" - | "mdi:shoe-cleat" - | "mdi:shoe-formal" - | "mdi:shoe-heel" - | "mdi:shoe-print" - | "mdi:shoe-sneaker" - | "mdi:shopify" - | "mdi:shopping" - | "mdi:shopping-music" - | "mdi:shopping-outline" - | "mdi:shopping-search" - | "mdi:shopping-search-outline" - | "mdi:shore" - | "mdi:shovel" - | "mdi:shovel-off" - | "mdi:shower" - | "mdi:shower-head" - | "mdi:shredder" - | "mdi:shuffle" - | "mdi:shuffle-disabled" - | "mdi:shuffle-variant" - | "mdi:shuriken" - | "mdi:sickle" - | "mdi:sigma" - | "mdi:sigma-lower" - | "mdi:sign-caution" - | "mdi:sign-direction" - | "mdi:sign-direction-minus" - | "mdi:sign-direction-plus" - | "mdi:sign-direction-remove" - | "mdi:sign-language" - | "mdi:sign-language-outline" - | "mdi:sign-pole" - | "mdi:sign-real-estate" - | "mdi:sign-text" - | "mdi:sign-yield" - | "mdi:signal" - | "mdi:signal-2g" - | "mdi:signal-3g" - | "mdi:signal-4g" - | "mdi:signal-5g" - | "mdi:signal-cellular-1" - | "mdi:signal-cellular-2" - | "mdi:signal-cellular-3" - | "mdi:signal-cellular-outline" - | "mdi:signal-distance-variant" - | "mdi:signal-hspa" - | "mdi:signal-hspa-plus" - | "mdi:signal-off" - | "mdi:signal-variant" - | "mdi:signature" - | "mdi:signature-freehand" - | "mdi:signature-image" - | "mdi:signature-text" - | "mdi:silo" - | "mdi:silo-outline" - | "mdi:silverware" - | "mdi:silverware-clean" - | "mdi:silverware-fork" - | "mdi:silverware-fork-knife" - | "mdi:silverware-spoon" - | "mdi:silverware-variant" - | "mdi:sim" - | "mdi:sim-alert" - | "mdi:sim-alert-outline" - | "mdi:sim-off" - | "mdi:sim-off-outline" - | "mdi:sim-outline" - | "mdi:simple-icons" - | "mdi:sina-weibo" - | "mdi:sine-wave" - | "mdi:sitemap" - | "mdi:sitemap-outline" - | "mdi:size-l" - | "mdi:size-m" - | "mdi:size-s" - | "mdi:size-xl" - | "mdi:size-xs" - | "mdi:size-xxl" - | "mdi:size-xxs" - | "mdi:size-xxxl" - | "mdi:skate" - | "mdi:skate-off" - | "mdi:skateboard" - | "mdi:skateboarding" - | "mdi:skew-less" - | "mdi:skew-more" - | "mdi:ski" - | "mdi:ski-cross-country" - | "mdi:ski-water" - | "mdi:skip-backward" - | "mdi:skip-backward-outline" - | "mdi:skip-forward" - | "mdi:skip-forward-outline" - | "mdi:skip-next" - | "mdi:skip-next-circle" - | "mdi:skip-next-circle-outline" - | "mdi:skip-next-outline" - | "mdi:skip-previous" - | "mdi:skip-previous-circle" - | "mdi:skip-previous-circle-outline" - | "mdi:skip-previous-outline" - | "mdi:skull" - | "mdi:skull-crossbones" - | "mdi:skull-crossbones-outline" - | "mdi:skull-outline" - | "mdi:skull-scan" - | "mdi:skull-scan-outline" - | "mdi:skype" - | "mdi:skype-business" - | "mdi:slack" - | "mdi:slackware" - | "mdi:slash-forward" - | "mdi:slash-forward-box" - | "mdi:sledding" - | "mdi:sleep" - | "mdi:sleep-off" - | "mdi:slide" - | "mdi:slope-downhill" - | "mdi:slope-uphill" - | "mdi:slot-machine" - | "mdi:slot-machine-outline" - | "mdi:smart-card" - | "mdi:smart-card-off" - | "mdi:smart-card-off-outline" - | "mdi:smart-card-outline" - | "mdi:smart-card-reader" - | "mdi:smart-card-reader-outline" - | "mdi:smog" - | "mdi:smoke" - | "mdi:smoke-detector" - | "mdi:smoke-detector-alert" - | "mdi:smoke-detector-alert-outline" - | "mdi:smoke-detector-off" - | "mdi:smoke-detector-off-outline" - | "mdi:smoke-detector-outline" - | "mdi:smoke-detector-variant" - | "mdi:smoke-detector-variant-alert" - | "mdi:smoke-detector-variant-off" - | "mdi:smoking" - | "mdi:smoking-off" - | "mdi:smoking-pipe" - | "mdi:smoking-pipe-off" - | "mdi:snail" - | "mdi:snake" - | "mdi:snapchat" - | "mdi:snowboard" - | "mdi:snowflake" - | "mdi:snowflake-alert" - | "mdi:snowflake-check" - | "mdi:snowflake-melt" - | "mdi:snowflake-off" - | "mdi:snowflake-thermometer" - | "mdi:snowflake-variant" - | "mdi:snowman" - | "mdi:snowmobile" - | "mdi:snowshoeing" - | "mdi:soccer" - | "mdi:soccer-field" - | "mdi:social-distance-2-meters" - | "mdi:social-distance-6-feet" - | "mdi:sofa" - | "mdi:sofa-outline" - | "mdi:sofa-single" - | "mdi:sofa-single-outline" - | "mdi:solar-panel" - | "mdi:solar-panel-large" - | "mdi:solar-power" - | "mdi:solar-power-variant" - | "mdi:solar-power-variant-outline" - | "mdi:soldering-iron" - | "mdi:solid" - | "mdi:sony-playstation" - | "mdi:sort" - | "mdi:sort-alphabetical-ascending" - | "mdi:sort-alphabetical-ascending-variant" - | "mdi:sort-alphabetical-descending" - | "mdi:sort-alphabetical-descending-variant" - | "mdi:sort-alphabetical-variant" - | "mdi:sort-ascending" - | "mdi:sort-bool-ascending" - | "mdi:sort-bool-ascending-variant" - | "mdi:sort-bool-descending" - | "mdi:sort-bool-descending-variant" - | "mdi:sort-calendar-ascending" - | "mdi:sort-calendar-descending" - | "mdi:sort-clock-ascending" - | "mdi:sort-clock-ascending-outline" - | "mdi:sort-clock-descending" - | "mdi:sort-clock-descending-outline" - | "mdi:sort-descending" - | "mdi:sort-numeric-ascending" - | "mdi:sort-numeric-ascending-variant" - | "mdi:sort-numeric-descending" - | "mdi:sort-numeric-descending-variant" - | "mdi:sort-numeric-variant" - | "mdi:sort-reverse-variant" - | "mdi:sort-variant" - | "mdi:sort-variant-lock" - | "mdi:sort-variant-lock-open" - | "mdi:sort-variant-off" - | "mdi:sort-variant-remove" - | "mdi:soundbar" - | "mdi:soundcloud" - | "mdi:source-branch" - | "mdi:source-branch-check" - | "mdi:source-branch-minus" - | "mdi:source-branch-plus" - | "mdi:source-branch-refresh" - | "mdi:source-branch-remove" - | "mdi:source-branch-sync" - | "mdi:source-commit" - | "mdi:source-commit-end" - | "mdi:source-commit-end-local" - | "mdi:source-commit-local" - | "mdi:source-commit-next-local" - | "mdi:source-commit-start" - | "mdi:source-commit-start-next-local" - | "mdi:source-fork" - | "mdi:source-merge" - | "mdi:source-pull" - | "mdi:source-repository" - | "mdi:source-repository-multiple" - | "mdi:soy-sauce" - | "mdi:soy-sauce-off" - | "mdi:spa" - | "mdi:spa-outline" - | "mdi:space-invaders" - | "mdi:space-station" - | "mdi:spade" - | "mdi:speaker" - | "mdi:speaker-bluetooth" - | "mdi:speaker-message" - | "mdi:speaker-multiple" - | "mdi:speaker-off" - | "mdi:speaker-pause" - | "mdi:speaker-play" - | "mdi:speaker-stop" - | "mdi:speaker-wireless" - | "mdi:spear" - | "mdi:speedometer" - | "mdi:speedometer-medium" - | "mdi:speedometer-slow" - | "mdi:spellcheck" - | "mdi:sphere" - | "mdi:sphere-off" - | "mdi:spider" - | "mdi:spider-outline" - | "mdi:spider-thread" - | "mdi:spider-web" - | "mdi:spirit-level" - | "mdi:split-horizontal" - | "mdi:split-vertical" - | "mdi:spoon-sugar" - | "mdi:spotify" - | "mdi:spotlight" - | "mdi:spotlight-beam" - | "mdi:spray" - | "mdi:spray-bottle" - | "mdi:spreadsheet" - | "mdi:sprinkler" - | "mdi:sprinkler-fire" - | "mdi:sprinkler-variant" - | "mdi:sprout" - | "mdi:sprout-outline" - | "mdi:square" - | "mdi:square-circle" - | "mdi:square-circle-outline" - | "mdi:square-edit-outline" - | "mdi:square-inc" - | "mdi:square-inc-cash" - | "mdi:square-medium" - | "mdi:square-medium-outline" - | "mdi:square-off" - | "mdi:square-off-outline" - | "mdi:square-opacity" - | "mdi:square-outline" - | "mdi:square-root" - | "mdi:square-root-box" - | "mdi:square-rounded" - | "mdi:square-rounded-badge" - | "mdi:square-rounded-badge-outline" - | "mdi:square-rounded-outline" - | "mdi:square-small" - | "mdi:square-wave" - | "mdi:squeegee" - | "mdi:ssh" - | "mdi:stack-exchange" - | "mdi:stack-overflow" - | "mdi:stackpath" - | "mdi:stadium" - | "mdi:stadium-outline" - | "mdi:stadium-variant" - | "mdi:stairs" - | "mdi:stairs-box" - | "mdi:stairs-down" - | "mdi:stairs-up" - | "mdi:stamper" - | "mdi:standard-definition" - | "mdi:star" - | "mdi:star-box" - | "mdi:star-box-multiple" - | "mdi:star-box-multiple-outline" - | "mdi:star-box-outline" - | "mdi:star-check" - | "mdi:star-check-outline" - | "mdi:star-circle" - | "mdi:star-circle-outline" - | "mdi:star-cog" - | "mdi:star-cog-outline" - | "mdi:star-crescent" - | "mdi:star-david" - | "mdi:star-face" - | "mdi:star-four-points" - | "mdi:star-four-points-box" - | "mdi:star-four-points-box-outline" - | "mdi:star-four-points-circle" - | "mdi:star-four-points-circle-outline" - | "mdi:star-four-points-outline" - | "mdi:star-four-points-small" - | "mdi:star-half" - | "mdi:star-half-full" - | "mdi:star-minus" - | "mdi:star-minus-outline" - | "mdi:star-off" - | "mdi:star-off-outline" - | "mdi:star-outline" - | "mdi:star-plus" - | "mdi:star-plus-outline" - | "mdi:star-remove" - | "mdi:star-remove-outline" - | "mdi:star-settings" - | "mdi:star-settings-outline" - | "mdi:star-shooting" - | "mdi:star-shooting-outline" - | "mdi:star-three-points" - | "mdi:star-three-points-outline" - | "mdi:state-machine" - | "mdi:steam" - | "mdi:steam-box" - | "mdi:steering" - | "mdi:steering-off" - | "mdi:step-backward" - | "mdi:step-backward-2" - | "mdi:step-forward" - | "mdi:step-forward-2" - | "mdi:stethoscope" - | "mdi:sticker" - | "mdi:sticker-alert" - | "mdi:sticker-alert-outline" - | "mdi:sticker-check" - | "mdi:sticker-check-outline" - | "mdi:sticker-circle-outline" - | "mdi:sticker-emoji" - | "mdi:sticker-minus" - | "mdi:sticker-minus-outline" - | "mdi:sticker-outline" - | "mdi:sticker-plus" - | "mdi:sticker-plus-outline" - | "mdi:sticker-remove" - | "mdi:sticker-remove-outline" - | "mdi:sticker-text" - | "mdi:sticker-text-outline" - | "mdi:stocking" - | "mdi:stomach" - | "mdi:stool" - | "mdi:stool-outline" - | "mdi:stop" - | "mdi:stop-circle" - | "mdi:stop-circle-outline" - | "mdi:storage-tank" - | "mdi:storage-tank-outline" - | "mdi:store" - | "mdi:store-24-hour" - | "mdi:store-alert" - | "mdi:store-alert-outline" - | "mdi:store-check" - | "mdi:store-check-outline" - | "mdi:store-clock" - | "mdi:store-clock-outline" - | "mdi:store-cog" - | "mdi:store-cog-outline" - | "mdi:store-edit" - | "mdi:store-edit-outline" - | "mdi:store-marker" - | "mdi:store-marker-outline" - | "mdi:store-minus" - | "mdi:store-minus-outline" - | "mdi:store-off" - | "mdi:store-off-outline" - | "mdi:store-outline" - | "mdi:store-plus" - | "mdi:store-plus-outline" - | "mdi:store-remove" - | "mdi:store-remove-outline" - | "mdi:store-search" - | "mdi:store-search-outline" - | "mdi:store-settings" - | "mdi:store-settings-outline" - | "mdi:storefront" - | "mdi:storefront-check" - | "mdi:storefront-check-outline" - | "mdi:storefront-edit" - | "mdi:storefront-edit-outline" - | "mdi:storefront-minus" - | "mdi:storefront-minus-outline" - | "mdi:storefront-outline" - | "mdi:storefront-plus" - | "mdi:storefront-plus-outline" - | "mdi:storefront-remove" - | "mdi:storefront-remove-outline" - | "mdi:stove" - | "mdi:strategy" - | "mdi:strava" - | "mdi:stretch-to-page" - | "mdi:stretch-to-page-outline" - | "mdi:string-lights" - | "mdi:string-lights-off" - | "mdi:subdirectory-arrow-left" - | "mdi:subdirectory-arrow-right" - | "mdi:submarine" - | "mdi:subtitles" - | "mdi:subtitles-outline" - | "mdi:subway" - | "mdi:subway-alert-variant" - | "mdi:subway-variant" - | "mdi:summit" - | "mdi:sun-angle" - | "mdi:sun-angle-outline" - | "mdi:sun-clock" - | "mdi:sun-clock-outline" - | "mdi:sun-compass" - | "mdi:sun-snowflake" - | "mdi:sun-snowflake-variant" - | "mdi:sun-thermometer" - | "mdi:sun-thermometer-outline" - | "mdi:sun-wireless" - | "mdi:sun-wireless-outline" - | "mdi:sunglasses" - | "mdi:surfing" - | "mdi:surround-sound" - | "mdi:surround-sound-2-0" - | "mdi:surround-sound-2-1" - | "mdi:surround-sound-3-1" - | "mdi:surround-sound-5-1" - | "mdi:surround-sound-5-1-2" - | "mdi:surround-sound-7-1" - | "mdi:svg" - | "mdi:swap-horizontal" - | "mdi:swap-horizontal-bold" - | "mdi:swap-horizontal-circle" - | "mdi:swap-horizontal-circle-outline" - | "mdi:swap-horizontal-hidden" - | "mdi:swap-horizontal-variant" - | "mdi:swap-vertical" - | "mdi:swap-vertical-bold" - | "mdi:swap-vertical-circle" - | "mdi:swap-vertical-circle-outline" - | "mdi:swap-vertical-variant" - | "mdi:swim" - | "mdi:switch" - | "mdi:sword" - | "mdi:sword-cross" - | "mdi:syllabary-hangul" - | "mdi:syllabary-hiragana" - | "mdi:syllabary-katakana" - | "mdi:syllabary-katakana-halfwidth" - | "mdi:symbol" - | "mdi:symfony" - | "mdi:synagogue" - | "mdi:synagogue-outline" - | "mdi:sync" - | "mdi:sync-alert" - | "mdi:sync-circle" - | "mdi:sync-off" - | "mdi:tab" - | "mdi:tab-minus" - | "mdi:tab-plus" - | "mdi:tab-remove" - | "mdi:tab-search" - | "mdi:tab-unselected" - | "mdi:table" - | "mdi:table-account" - | "mdi:table-alert" - | "mdi:table-arrow-down" - | "mdi:table-arrow-left" - | "mdi:table-arrow-right" - | "mdi:table-arrow-up" - | "mdi:table-border" - | "mdi:table-cancel" - | "mdi:table-chair" - | "mdi:table-check" - | "mdi:table-clock" - | "mdi:table-cog" - | "mdi:table-column" - | "mdi:table-column-plus-after" - | "mdi:table-column-plus-before" - | "mdi:table-column-remove" - | "mdi:table-column-width" - | "mdi:table-edit" - | "mdi:table-eye" - | "mdi:table-eye-off" - | "mdi:table-filter" - | "mdi:table-furniture" - | "mdi:table-headers-eye" - | "mdi:table-headers-eye-off" - | "mdi:table-heart" - | "mdi:table-key" - | "mdi:table-large" - | "mdi:table-large-plus" - | "mdi:table-large-remove" - | "mdi:table-lock" - | "mdi:table-merge-cells" - | "mdi:table-minus" - | "mdi:table-multiple" - | "mdi:table-network" - | "mdi:table-of-contents" - | "mdi:table-off" - | "mdi:table-picnic" - | "mdi:table-pivot" - | "mdi:table-plus" - | "mdi:table-question" - | "mdi:table-refresh" - | "mdi:table-remove" - | "mdi:table-row" - | "mdi:table-row-height" - | "mdi:table-row-plus-after" - | "mdi:table-row-plus-before" - | "mdi:table-row-remove" - | "mdi:table-search" - | "mdi:table-settings" - | "mdi:table-split-cell" - | "mdi:table-star" - | "mdi:table-sync" - | "mdi:table-tennis" - | "mdi:tablet" - | "mdi:tablet-android" - | "mdi:tablet-cellphone" - | "mdi:tablet-dashboard" - | "mdi:tablet-ipad" - | "mdi:taco" - | "mdi:tag" - | "mdi:tag-arrow-down" - | "mdi:tag-arrow-down-outline" - | "mdi:tag-arrow-left" - | "mdi:tag-arrow-left-outline" - | "mdi:tag-arrow-right" - | "mdi:tag-arrow-right-outline" - | "mdi:tag-arrow-up" - | "mdi:tag-arrow-up-outline" - | "mdi:tag-check" - | "mdi:tag-check-outline" - | "mdi:tag-edit" - | "mdi:tag-edit-outline" - | "mdi:tag-faces" - | "mdi:tag-heart" - | "mdi:tag-heart-outline" - | "mdi:tag-hidden" - | "mdi:tag-minus" - | "mdi:tag-minus-outline" - | "mdi:tag-multiple" - | "mdi:tag-multiple-outline" - | "mdi:tag-off" - | "mdi:tag-off-outline" - | "mdi:tag-outline" - | "mdi:tag-plus" - | "mdi:tag-plus-outline" - | "mdi:tag-remove" - | "mdi:tag-remove-outline" - | "mdi:tag-search" - | "mdi:tag-search-outline" - | "mdi:tag-text" - | "mdi:tag-text-outline" - | "mdi:tailwind" - | "mdi:tally-mark-1" - | "mdi:tally-mark-2" - | "mdi:tally-mark-3" - | "mdi:tally-mark-4" - | "mdi:tally-mark-5" - | "mdi:tangram" - | "mdi:tank" - | "mdi:tanker-truck" - | "mdi:tape-drive" - | "mdi:tape-measure" - | "mdi:target" - | "mdi:target-account" - | "mdi:target-variant" - | "mdi:taxi" - | "mdi:tea" - | "mdi:tea-outline" - | "mdi:teamspeak" - | "mdi:teamviewer" - | "mdi:teddy-bear" - | "mdi:telegram" - | "mdi:telescope" - | "mdi:television" - | "mdi:television-ambient-light" - | "mdi:television-box" - | "mdi:television-classic" - | "mdi:television-classic-off" - | "mdi:television-guide" - | "mdi:television-off" - | "mdi:television-pause" - | "mdi:television-play" - | "mdi:television-shimmer" - | "mdi:television-speaker" - | "mdi:television-speaker-off" - | "mdi:television-stop" - | "mdi:temperature-celsius" - | "mdi:temperature-fahrenheit" - | "mdi:temperature-kelvin" - | "mdi:temple-buddhist" - | "mdi:temple-buddhist-outline" - | "mdi:temple-hindu" - | "mdi:temple-hindu-outline" - | "mdi:tennis" - | "mdi:tennis-ball" - | "mdi:tennis-ball-outline" - | "mdi:tent" - | "mdi:terraform" - | "mdi:terrain" - | "mdi:test-tube" - | "mdi:test-tube-empty" - | "mdi:test-tube-off" - | "mdi:text" - | "mdi:text-account" - | "mdi:text-box" - | "mdi:text-box-check" - | "mdi:text-box-check-outline" - | "mdi:text-box-edit" - | "mdi:text-box-edit-outline" - | "mdi:text-box-minus" - | "mdi:text-box-minus-outline" - | "mdi:text-box-multiple" - | "mdi:text-box-multiple-outline" - | "mdi:text-box-outline" - | "mdi:text-box-plus" - | "mdi:text-box-plus-outline" - | "mdi:text-box-remove" - | "mdi:text-box-remove-outline" - | "mdi:text-box-search" - | "mdi:text-box-search-outline" - | "mdi:text-long" - | "mdi:text-recognition" - | "mdi:text-search" - | "mdi:text-search-variant" - | "mdi:text-shadow" - | "mdi:text-short" - | "mdi:texture" - | "mdi:texture-box" - | "mdi:theater" - | "mdi:theme-light-dark" - | "mdi:thermometer" - | "mdi:thermometer-alert" - | "mdi:thermometer-auto" - | "mdi:thermometer-bluetooth" - | "mdi:thermometer-check" - | "mdi:thermometer-chevron-down" - | "mdi:thermometer-chevron-up" - | "mdi:thermometer-high" - | "mdi:thermometer-lines" - | "mdi:thermometer-low" - | "mdi:thermometer-minus" - | "mdi:thermometer-off" - | "mdi:thermometer-plus" - | "mdi:thermometer-probe" - | "mdi:thermometer-probe-off" - | "mdi:thermometer-water" - | "mdi:thermostat" - | "mdi:thermostat-auto" - | "mdi:thermostat-box" - | "mdi:thermostat-box-auto" - | "mdi:thermostat-cog" - | "mdi:thought-bubble" - | "mdi:thought-bubble-outline" - | "mdi:thumb-down" - | "mdi:thumb-down-outline" - | "mdi:thumb-up" - | "mdi:thumb-up-outline" - | "mdi:thumbs-up-down" - | "mdi:thumbs-up-down-outline" - | "mdi:ticket" - | "mdi:ticket-account" - | "mdi:ticket-confirmation" - | "mdi:ticket-confirmation-outline" - | "mdi:ticket-outline" - | "mdi:ticket-percent" - | "mdi:ticket-percent-outline" - | "mdi:tie" - | "mdi:tilde" - | "mdi:tilde-off" - | "mdi:timelapse" - | "mdi:timeline" - | "mdi:timeline-alert" - | "mdi:timeline-alert-outline" - | "mdi:timeline-check" - | "mdi:timeline-check-outline" - | "mdi:timeline-clock" - | "mdi:timeline-clock-outline" - | "mdi:timeline-minus" - | "mdi:timeline-minus-outline" - | "mdi:timeline-outline" - | "mdi:timeline-plus" - | "mdi:timeline-plus-outline" - | "mdi:timeline-question" - | "mdi:timeline-question-outline" - | "mdi:timeline-remove" - | "mdi:timeline-remove-outline" - | "mdi:timeline-text" - | "mdi:timeline-text-outline" - | "mdi:timer" - | "mdi:timer-10" - | "mdi:timer-3" - | "mdi:timer-alert" - | "mdi:timer-alert-outline" - | "mdi:timer-cancel" - | "mdi:timer-cancel-outline" - | "mdi:timer-check" - | "mdi:timer-check-outline" - | "mdi:timer-cog" - | "mdi:timer-cog-outline" - | "mdi:timer-edit" - | "mdi:timer-edit-outline" - | "mdi:timer-lock" - | "mdi:timer-lock-open" - | "mdi:timer-lock-open-outline" - | "mdi:timer-lock-outline" - | "mdi:timer-marker" - | "mdi:timer-marker-outline" - | "mdi:timer-minus" - | "mdi:timer-minus-outline" - | "mdi:timer-music" - | "mdi:timer-music-outline" - | "mdi:timer-off" - | "mdi:timer-off-outline" - | "mdi:timer-outline" - | "mdi:timer-pause" - | "mdi:timer-pause-outline" - | "mdi:timer-play" - | "mdi:timer-play-outline" - | "mdi:timer-plus" - | "mdi:timer-plus-outline" - | "mdi:timer-refresh" - | "mdi:timer-refresh-outline" - | "mdi:timer-remove" - | "mdi:timer-remove-outline" - | "mdi:timer-sand" - | "mdi:timer-sand-complete" - | "mdi:timer-sand-empty" - | "mdi:timer-sand-full" - | "mdi:timer-sand-paused" - | "mdi:timer-settings" - | "mdi:timer-settings-outline" - | "mdi:timer-star" - | "mdi:timer-star-outline" - | "mdi:timer-stop" - | "mdi:timer-stop-outline" - | "mdi:timer-sync" - | "mdi:timer-sync-outline" - | "mdi:timetable" - | "mdi:tire" - | "mdi:toaster" - | "mdi:toaster-off" - | "mdi:toaster-oven" - | "mdi:toggle-switch" - | "mdi:toggle-switch-off" - | "mdi:toggle-switch-off-outline" - | "mdi:toggle-switch-outline" - | "mdi:toggle-switch-variant" - | "mdi:toggle-switch-variant-off" - | "mdi:toilet" - | "mdi:toolbox" - | "mdi:toolbox-outline" - | "mdi:tools" - | "mdi:tooltip" - | "mdi:tooltip-account" - | "mdi:tooltip-cellphone" - | "mdi:tooltip-check" - | "mdi:tooltip-check-outline" - | "mdi:tooltip-edit" - | "mdi:tooltip-edit-outline" - | "mdi:tooltip-image" - | "mdi:tooltip-image-outline" - | "mdi:tooltip-minus" - | "mdi:tooltip-minus-outline" - | "mdi:tooltip-outline" - | "mdi:tooltip-plus" - | "mdi:tooltip-plus-outline" - | "mdi:tooltip-question" - | "mdi:tooltip-question-outline" - | "mdi:tooltip-remove" - | "mdi:tooltip-remove-outline" - | "mdi:tooltip-text" - | "mdi:tooltip-text-outline" - | "mdi:tooth" - | "mdi:tooth-outline" - | "mdi:toothbrush" - | "mdi:toothbrush-electric" - | "mdi:toothbrush-paste" - | "mdi:tor" - | "mdi:torch" - | "mdi:tortoise" - | "mdi:toslink" - | "mdi:touch-text-outline" - | "mdi:tournament" - | "mdi:tow-truck" - | "mdi:tower-beach" - | "mdi:tower-fire" - | "mdi:town-hall" - | "mdi:toy-brick" - | "mdi:toy-brick-marker" - | "mdi:toy-brick-marker-outline" - | "mdi:toy-brick-minus" - | "mdi:toy-brick-minus-outline" - | "mdi:toy-brick-outline" - | "mdi:toy-brick-plus" - | "mdi:toy-brick-plus-outline" - | "mdi:toy-brick-remove" - | "mdi:toy-brick-remove-outline" - | "mdi:toy-brick-search" - | "mdi:toy-brick-search-outline" - | "mdi:track-light" - | "mdi:track-light-off" - | "mdi:trackpad" - | "mdi:trackpad-lock" - | "mdi:tractor" - | "mdi:tractor-variant" - | "mdi:trademark" - | "mdi:traffic-cone" - | "mdi:traffic-light" - | "mdi:traffic-light-outline" - | "mdi:train" - | "mdi:train-bus" - | "mdi:train-car" - | "mdi:train-car-autorack" - | "mdi:train-car-box" - | "mdi:train-car-box-full" - | "mdi:train-car-box-open" - | "mdi:train-car-caboose" - | "mdi:train-car-centerbeam" - | "mdi:train-car-centerbeam-full" - | "mdi:train-car-container" - | "mdi:train-car-flatbed" - | "mdi:train-car-flatbed-car" - | "mdi:train-car-flatbed-tank" - | "mdi:train-car-gondola" - | "mdi:train-car-gondola-full" - | "mdi:train-car-hopper" - | "mdi:train-car-hopper-covered" - | "mdi:train-car-hopper-full" - | "mdi:train-car-intermodal" - | "mdi:train-car-passenger" - | "mdi:train-car-passenger-door" - | "mdi:train-car-passenger-door-open" - | "mdi:train-car-passenger-variant" - | "mdi:train-car-tank" - | "mdi:train-variant" - | "mdi:tram" - | "mdi:tram-side" - | "mdi:transcribe" - | "mdi:transcribe-close" - | "mdi:transfer" - | "mdi:transfer-down" - | "mdi:transfer-left" - | "mdi:transfer-right" - | "mdi:transfer-up" - | "mdi:transit-connection" - | "mdi:transit-connection-horizontal" - | "mdi:transit-connection-variant" - | "mdi:transit-detour" - | "mdi:transit-skip" - | "mdi:transit-transfer" - | "mdi:transition" - | "mdi:transition-masked" - | "mdi:translate" - | "mdi:translate-off" - | "mdi:translate-variant" - | "mdi:transmission-tower" - | "mdi:transmission-tower-export" - | "mdi:transmission-tower-import" - | "mdi:transmission-tower-off" - | "mdi:trash-can" - | "mdi:trash-can-outline" - | "mdi:tray" - | "mdi:tray-alert" - | "mdi:tray-arrow-down" - | "mdi:tray-arrow-up" - | "mdi:tray-full" - | "mdi:tray-minus" - | "mdi:tray-plus" - | "mdi:tray-remove" - | "mdi:treasure-chest" - | "mdi:treasure-chest-outline" - | "mdi:tree" - | "mdi:tree-outline" - | "mdi:trello" - | "mdi:trending-down" - | "mdi:trending-neutral" - | "mdi:trending-up" - | "mdi:triangle" - | "mdi:triangle-down" - | "mdi:triangle-down-outline" - | "mdi:triangle-outline" - | "mdi:triangle-small-down" - | "mdi:triangle-small-up" - | "mdi:triangle-wave" - | "mdi:triforce" - | "mdi:trophy" - | "mdi:trophy-award" - | "mdi:trophy-broken" - | "mdi:trophy-outline" - | "mdi:trophy-variant" - | "mdi:trophy-variant-outline" - | "mdi:truck" - | "mdi:truck-alert" - | "mdi:truck-alert-outline" - | "mdi:truck-cargo-container" - | "mdi:truck-check" - | "mdi:truck-check-outline" - | "mdi:truck-delivery" - | "mdi:truck-delivery-outline" - | "mdi:truck-fast" - | "mdi:truck-fast-outline" - | "mdi:truck-flatbed" - | "mdi:truck-minus" - | "mdi:truck-minus-outline" - | "mdi:truck-off-road" - | "mdi:truck-off-road-off" - | "mdi:truck-outline" - | "mdi:truck-plus" - | "mdi:truck-plus-outline" - | "mdi:truck-remove" - | "mdi:truck-remove-outline" - | "mdi:truck-snowflake" - | "mdi:truck-trailer" - | "mdi:trumpet" - | "mdi:tshirt-crew" - | "mdi:tshirt-crew-outline" - | "mdi:tshirt-v" - | "mdi:tshirt-v-outline" - | "mdi:tsunami" - | "mdi:tumble-dryer" - | "mdi:tumble-dryer-alert" - | "mdi:tumble-dryer-off" - | "mdi:tumblr" - | "mdi:tumblr-box" - | "mdi:tumblr-reblog" - | "mdi:tune" - | "mdi:tune-variant" - | "mdi:tune-vertical" - | "mdi:tune-vertical-variant" - | "mdi:tunnel" - | "mdi:tunnel-outline" - | "mdi:turbine" - | "mdi:turkey" - | "mdi:turnstile" - | "mdi:turnstile-outline" - | "mdi:turtle" - | "mdi:twitch" - | "mdi:twitter" - | "mdi:twitter-box" - | "mdi:twitter-circle" - | "mdi:two-factor-authentication" - | "mdi:typewriter" - | "mdi:uber" - | "mdi:ubisoft" - | "mdi:ubuntu" - | "mdi:ufo" - | "mdi:ufo-outline" - | "mdi:ultra-high-definition" - | "mdi:umbraco" - | "mdi:umbrella" - | "mdi:umbrella-beach" - | "mdi:umbrella-beach-outline" - | "mdi:umbrella-closed" - | "mdi:umbrella-closed-outline" - | "mdi:umbrella-closed-variant" - | "mdi:umbrella-outline" - | "mdi:underwear-outline" - | "mdi:undo" - | "mdi:undo-variant" - | "mdi:unfold-less-horizontal" - | "mdi:unfold-less-vertical" - | "mdi:unfold-more-horizontal" - | "mdi:unfold-more-vertical" - | "mdi:ungroup" - | "mdi:unicode" - | "mdi:unicorn" - | "mdi:unicorn-variant" - | "mdi:unicycle" - | "mdi:unity" - | "mdi:unreal" - | "mdi:untappd" - | "mdi:update" - | "mdi:upload" - | "mdi:upload-box" - | "mdi:upload-box-outline" - | "mdi:upload-circle" - | "mdi:upload-circle-outline" - | "mdi:upload-lock" - | "mdi:upload-lock-outline" - | "mdi:upload-multiple" - | "mdi:upload-multiple-outline" - | "mdi:upload-network" - | "mdi:upload-network-outline" - | "mdi:upload-off" - | "mdi:upload-off-outline" - | "mdi:upload-outline" - | "mdi:usb" - | "mdi:usb-c-port" - | "mdi:usb-flash-drive" - | "mdi:usb-flash-drive-outline" - | "mdi:usb-port" - | "mdi:vacuum" - | "mdi:vacuum-outline" - | "mdi:valve" - | "mdi:valve-closed" - | "mdi:valve-open" - | "mdi:van-passenger" - | "mdi:van-utility" - | "mdi:vanish" - | "mdi:vanish-quarter" - | "mdi:vanity-light" - | "mdi:variable" - | "mdi:variable-box" - | "mdi:vector-arrange-above" - | "mdi:vector-arrange-below" - | "mdi:vector-bezier" - | "mdi:vector-circle" - | "mdi:vector-circle-variant" - | "mdi:vector-combine" - | "mdi:vector-curve" - | "mdi:vector-difference" - | "mdi:vector-difference-ab" - | "mdi:vector-difference-ba" - | "mdi:vector-ellipse" - | "mdi:vector-intersection" - | "mdi:vector-line" - | "mdi:vector-link" - | "mdi:vector-point" - | "mdi:vector-point-edit" - | "mdi:vector-point-minus" - | "mdi:vector-point-plus" - | "mdi:vector-point-select" - | "mdi:vector-polygon" - | "mdi:vector-polygon-variant" - | "mdi:vector-polyline" - | "mdi:vector-polyline-edit" - | "mdi:vector-polyline-minus" - | "mdi:vector-polyline-plus" - | "mdi:vector-polyline-remove" - | "mdi:vector-radius" - | "mdi:vector-rectangle" - | "mdi:vector-selection" - | "mdi:vector-square" - | "mdi:vector-square-close" - | "mdi:vector-square-edit" - | "mdi:vector-square-minus" - | "mdi:vector-square-open" - | "mdi:vector-square-plus" - | "mdi:vector-square-remove" - | "mdi:vector-triangle" - | "mdi:vector-union" - | "mdi:venmo" - | "mdi:vhs" - | "mdi:vibrate" - | "mdi:vibrate-off" - | "mdi:video" - | "mdi:video-2d" - | "mdi:video-3d" - | "mdi:video-3d-off" - | "mdi:video-3d-variant" - | "mdi:video-4k-box" - | "mdi:video-account" - | "mdi:video-box" - | "mdi:video-box-off" - | "mdi:video-check" - | "mdi:video-check-outline" - | "mdi:video-high-definition" - | "mdi:video-image" - | "mdi:video-input-antenna" - | "mdi:video-input-component" - | "mdi:video-input-hdmi" - | "mdi:video-input-scart" - | "mdi:video-input-svideo" - | "mdi:video-marker" - | "mdi:video-marker-outline" - | "mdi:video-minus" - | "mdi:video-minus-outline" - | "mdi:video-off" - | "mdi:video-off-outline" - | "mdi:video-outline" - | "mdi:video-plus" - | "mdi:video-plus-outline" - | "mdi:video-stabilization" - | "mdi:video-standard-definition" - | "mdi:video-switch" - | "mdi:video-switch-outline" - | "mdi:video-vintage" - | "mdi:video-wireless" - | "mdi:video-wireless-outline" - | "mdi:view-agenda" - | "mdi:view-agenda-outline" - | "mdi:view-array" - | "mdi:view-array-outline" - | "mdi:view-carousel" - | "mdi:view-carousel-outline" - | "mdi:view-column" - | "mdi:view-column-outline" - | "mdi:view-comfy" - | "mdi:view-comfy-outline" - | "mdi:view-compact" - | "mdi:view-compact-outline" - | "mdi:view-dashboard" - | "mdi:view-dashboard-edit" - | "mdi:view-dashboard-edit-outline" - | "mdi:view-dashboard-outline" - | "mdi:view-dashboard-variant" - | "mdi:view-dashboard-variant-outline" - | "mdi:view-day" - | "mdi:view-day-outline" - | "mdi:view-gallery" - | "mdi:view-gallery-outline" - | "mdi:view-grid" - | "mdi:view-grid-compact" - | "mdi:view-grid-outline" - | "mdi:view-grid-plus" - | "mdi:view-grid-plus-outline" - | "mdi:view-headline" - | "mdi:view-list" - | "mdi:view-list-outline" - | "mdi:view-module" - | "mdi:view-module-outline" - | "mdi:view-parallel" - | "mdi:view-parallel-outline" - | "mdi:view-quilt" - | "mdi:view-quilt-outline" - | "mdi:view-sequential" - | "mdi:view-sequential-outline" - | "mdi:view-split-horizontal" - | "mdi:view-split-vertical" - | "mdi:view-stream" - | "mdi:view-stream-outline" - | "mdi:view-week" - | "mdi:view-week-outline" - | "mdi:vimeo" - | "mdi:vine" - | "mdi:violin" - | "mdi:virtual-reality" - | "mdi:virus" - | "mdi:virus-off" - | "mdi:virus-off-outline" - | "mdi:virus-outline" - | "mdi:vk" - | "mdi:vk-box" - | "mdi:vk-circle" - | "mdi:vlc" - | "mdi:voicemail" - | "mdi:volcano" - | "mdi:volcano-outline" - | "mdi:volleyball" - | "mdi:volume" - | "mdi:volume-equal" - | "mdi:volume-high" - | "mdi:volume-low" - | "mdi:volume-medium" - | "mdi:volume-minus" - | "mdi:volume-mute" - | "mdi:volume-off" - | "mdi:volume-plus" - | "mdi:volume-source" - | "mdi:volume-variant-off" - | "mdi:volume-vibrate" - | "mdi:vote" - | "mdi:vote-outline" - | "mdi:vpn" - | "mdi:vuejs" - | "mdi:vuetify" - | "mdi:walk" - | "mdi:wall" - | "mdi:wall-fire" - | "mdi:wall-sconce" - | "mdi:wall-sconce-flat" - | "mdi:wall-sconce-flat-outline" - | "mdi:wall-sconce-flat-variant" - | "mdi:wall-sconce-flat-variant-outline" - | "mdi:wall-sconce-outline" - | "mdi:wall-sconce-round" - | "mdi:wall-sconce-round-outline" - | "mdi:wall-sconce-round-variant" - | "mdi:wall-sconce-round-variant-outline" - | "mdi:wall-sconce-variant" - | "mdi:wallet" - | "mdi:wallet-bifold" - | "mdi:wallet-bifold-outline" - | "mdi:wallet-giftcard" - | "mdi:wallet-membership" - | "mdi:wallet-outline" - | "mdi:wallet-plus" - | "mdi:wallet-plus-outline" - | "mdi:wallet-travel" - | "mdi:wallpaper" - | "mdi:wan" - | "mdi:wardrobe" - | "mdi:wardrobe-outline" - | "mdi:warehouse" - | "mdi:washing-machine" - | "mdi:washing-machine-alert" - | "mdi:washing-machine-off" - | "mdi:watch" - | "mdi:watch-export" - | "mdi:watch-export-variant" - | "mdi:watch-import" - | "mdi:watch-import-variant" - | "mdi:watch-variant" - | "mdi:watch-vibrate" - | "mdi:watch-vibrate-off" - | "mdi:water" - | "mdi:water-alert" - | "mdi:water-alert-outline" - | "mdi:water-boiler" - | "mdi:water-boiler-alert" - | "mdi:water-boiler-auto" - | "mdi:water-boiler-off" - | "mdi:water-check" - | "mdi:water-check-outline" - | "mdi:water-circle" - | "mdi:water-minus" - | "mdi:water-minus-outline" - | "mdi:water-off" - | "mdi:water-off-outline" - | "mdi:water-opacity" - | "mdi:water-outline" - | "mdi:water-percent" - | "mdi:water-percent-alert" - | "mdi:water-plus" - | "mdi:water-plus-outline" - | "mdi:water-polo" - | "mdi:water-pump" - | "mdi:water-pump-off" - | "mdi:water-remove" - | "mdi:water-remove-outline" - | "mdi:water-sync" - | "mdi:water-thermometer" - | "mdi:water-thermometer-outline" - | "mdi:water-well" - | "mdi:water-well-outline" - | "mdi:waterfall" - | "mdi:watering-can" - | "mdi:watering-can-outline" - | "mdi:watermark" - | "mdi:wave" - | "mdi:wave-arrow-down" - | "mdi:wave-arrow-up" - | "mdi:wave-undercurrent" - | "mdi:waveform" - | "mdi:waves" - | "mdi:waves-arrow-left" - | "mdi:waves-arrow-right" - | "mdi:waves-arrow-up" - | "mdi:waze" - | "mdi:weather-cloudy" - | "mdi:weather-cloudy-alert" - | "mdi:weather-cloudy-arrow-right" - | "mdi:weather-cloudy-clock" - | "mdi:weather-dust" - | "mdi:weather-fog" - | "mdi:weather-hail" - | "mdi:weather-hazy" - | "mdi:weather-hurricane" - | "mdi:weather-hurricane-outline" - | "mdi:weather-lightning" - | "mdi:weather-lightning-rainy" - | "mdi:weather-moonset" - | "mdi:weather-moonset-down" - | "mdi:weather-moonset-up" - | "mdi:weather-night" - | "mdi:weather-night-partly-cloudy" - | "mdi:weather-partly-cloudy" - | "mdi:weather-partly-lightning" - | "mdi:weather-partly-rainy" - | "mdi:weather-partly-snowy" - | "mdi:weather-partly-snowy-rainy" - | "mdi:weather-pouring" - | "mdi:weather-rainy" - | "mdi:weather-snowy" - | "mdi:weather-snowy-heavy" - | "mdi:weather-snowy-rainy" - | "mdi:weather-sunny" - | "mdi:weather-sunny-alert" - | "mdi:weather-sunny-off" - | "mdi:weather-sunset" - | "mdi:weather-sunset-down" - | "mdi:weather-sunset-up" - | "mdi:weather-tornado" - | "mdi:weather-windy" - | "mdi:weather-windy-variant" - | "mdi:web" - | "mdi:web-box" - | "mdi:web-cancel" - | "mdi:web-check" - | "mdi:web-clock" - | "mdi:web-minus" - | "mdi:web-off" - | "mdi:web-plus" - | "mdi:web-refresh" - | "mdi:web-remove" - | "mdi:web-sync" - | "mdi:webcam" - | "mdi:webcam-off" - | "mdi:webhook" - | "mdi:webpack" - | "mdi:webrtc" - | "mdi:wechat" - | "mdi:weight" - | "mdi:weight-gram" - | "mdi:weight-kilogram" - | "mdi:weight-lifter" - | "mdi:weight-pound" - | "mdi:whatsapp" - | "mdi:wheel-barrow" - | "mdi:wheelchair" - | "mdi:wheelchair-accessibility" - | "mdi:whistle" - | "mdi:whistle-outline" - | "mdi:white-balance-auto" - | "mdi:white-balance-incandescent" - | "mdi:white-balance-iridescent" - | "mdi:white-balance-sunny" - | "mdi:widgets" - | "mdi:widgets-outline" - | "mdi:wifi" - | "mdi:wifi-alert" - | "mdi:wifi-arrow-down" - | "mdi:wifi-arrow-left" - | "mdi:wifi-arrow-left-right" - | "mdi:wifi-arrow-right" - | "mdi:wifi-arrow-up" - | "mdi:wifi-arrow-up-down" - | "mdi:wifi-cancel" - | "mdi:wifi-check" - | "mdi:wifi-cog" - | "mdi:wifi-lock" - | "mdi:wifi-lock-open" - | "mdi:wifi-marker" - | "mdi:wifi-minus" - | "mdi:wifi-off" - | "mdi:wifi-plus" - | "mdi:wifi-refresh" - | "mdi:wifi-remove" - | "mdi:wifi-settings" - | "mdi:wifi-star" - | "mdi:wifi-strength-1" - | "mdi:wifi-strength-1-alert" - | "mdi:wifi-strength-1-lock" - | "mdi:wifi-strength-1-lock-open" - | "mdi:wifi-strength-2" - | "mdi:wifi-strength-2-alert" - | "mdi:wifi-strength-2-lock" - | "mdi:wifi-strength-2-lock-open" - | "mdi:wifi-strength-3" - | "mdi:wifi-strength-3-alert" - | "mdi:wifi-strength-3-lock" - | "mdi:wifi-strength-3-lock-open" - | "mdi:wifi-strength-4" - | "mdi:wifi-strength-4-alert" - | "mdi:wifi-strength-4-lock" - | "mdi:wifi-strength-4-lock-open" - | "mdi:wifi-strength-alert-outline" - | "mdi:wifi-strength-lock-open-outline" - | "mdi:wifi-strength-lock-outline" - | "mdi:wifi-strength-off" - | "mdi:wifi-strength-off-outline" - | "mdi:wifi-strength-outline" - | "mdi:wifi-sync" - | "mdi:wikipedia" - | "mdi:wind-power" - | "mdi:wind-power-outline" - | "mdi:wind-turbine" - | "mdi:wind-turbine-alert" - | "mdi:wind-turbine-check" - | "mdi:window-close" - | "mdi:window-closed" - | "mdi:window-closed-variant" - | "mdi:window-maximize" - | "mdi:window-minimize" - | "mdi:window-open" - | "mdi:window-open-variant" - | "mdi:window-restore" - | "mdi:window-shutter" - | "mdi:window-shutter-alert" - | "mdi:window-shutter-auto" - | "mdi:window-shutter-cog" - | "mdi:window-shutter-open" - | "mdi:window-shutter-settings" - | "mdi:windsock" - | "mdi:wiper" - | "mdi:wiper-wash" - | "mdi:wiper-wash-alert" - | "mdi:wizard-hat" - | "mdi:wordpress" - | "mdi:wrap" - | "mdi:wrap-disabled" - | "mdi:wrench" - | "mdi:wrench-check" - | "mdi:wrench-check-outline" - | "mdi:wrench-clock" - | "mdi:wrench-clock-outline" - | "mdi:wrench-cog" - | "mdi:wrench-cog-outline" - | "mdi:wrench-outline" - | "mdi:wunderlist" - | "mdi:xamarin" - | "mdi:xamarin-outline" - | "mdi:xda" - | "mdi:xing" - | "mdi:xing-circle" - | "mdi:xml" - | "mdi:xmpp" - | "mdi:y-combinator" - | "mdi:yahoo" - | "mdi:yammer" - | "mdi:yeast" - | "mdi:yelp" - | "mdi:yin-yang" - | "mdi:yoga" - | "mdi:youtube" - | "mdi:youtube-gaming" - | "mdi:youtube-studio" - | "mdi:youtube-subscription" - | "mdi:youtube-tv" - | "mdi:yurt" - | "mdi:z-wave" - | "mdi:zend" - | "mdi:zigbee" - | "mdi:zip-box" - | "mdi:zip-box-outline" - | "mdi:zip-disk" - | "mdi:zodiac-aquarius" - | "mdi:zodiac-aries" - | "mdi:zodiac-cancer" - | "mdi:zodiac-capricorn" - | "mdi:zodiac-gemini" - | "mdi:zodiac-leo" - | "mdi:zodiac-libra" - | "mdi:zodiac-pisces" - | "mdi:zodiac-sagittarius" - | "mdi:zodiac-scorpio" - | "mdi:zodiac-taurus" - | "mdi:zodiac-virgo"; -} \ No newline at end of file diff --git a/apps/docs/.astro/settings.json b/apps/docs/.astro/settings.json deleted file mode 100644 index f11d74d8..00000000 --- a/apps/docs/.astro/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "_variables": { - "lastUpdateCheck": 1729878860068 - } -} \ No newline at end of file diff --git a/apps/docs/.astro/types.d.ts b/apps/docs/.astro/types.d.ts deleted file mode 100644 index 4731630d..00000000 --- a/apps/docs/.astro/types.d.ts +++ /dev/null @@ -1,391 +0,0 @@ -declare module 'astro:content' { - interface Render { - '.mdx': Promise<{ - Content: import('astro').MarkdownInstance<{}>['Content']; - headings: import('astro').MarkdownHeading[]; - remarkPluginFrontmatter: Record; - }>; - } -} - -declare module 'astro:content' { - interface Render { - '.md': Promise<{ - Content: import('astro').MarkdownInstance<{}>['Content']; - headings: import('astro').MarkdownHeading[]; - remarkPluginFrontmatter: Record; - }>; - } -} - -declare module 'astro:content' { - type Flatten = T extends { [K: string]: infer U } ? U : never; - - export type CollectionKey = keyof AnyEntryMap; - export type CollectionEntry = Flatten; - - export type ContentCollectionKey = keyof ContentEntryMap; - export type DataCollectionKey = keyof DataEntryMap; - - type AllValuesOf = T extends any ? T[keyof T] : never; - type ValidContentEntrySlug = AllValuesOf< - ContentEntryMap[C] - >['slug']; - - export function getEntryBySlug< - C extends keyof ContentEntryMap, - E extends ValidContentEntrySlug | (string & {}), - >( - collection: C, - // Note that this has to accept a regular string too, for SSR - entrySlug: E - ): E extends ValidContentEntrySlug - ? Promise> - : Promise | undefined>; - - export function getDataEntryById( - collection: C, - entryId: E - ): Promise>; - - export function getCollection>( - collection: C, - filter?: (entry: CollectionEntry) => entry is E - ): Promise; - export function getCollection( - collection: C, - filter?: (entry: CollectionEntry) => unknown - ): Promise[]>; - - export function getEntry< - C extends keyof ContentEntryMap, - E extends ValidContentEntrySlug | (string & {}), - >(entry: { - collection: C; - slug: E; - }): E extends ValidContentEntrySlug - ? Promise> - : Promise | undefined>; - export function getEntry< - C extends keyof DataEntryMap, - E extends keyof DataEntryMap[C] | (string & {}), - >(entry: { - collection: C; - id: E; - }): E extends keyof DataEntryMap[C] - ? Promise - : Promise | undefined>; - export function getEntry< - C extends keyof ContentEntryMap, - E extends ValidContentEntrySlug | (string & {}), - >( - collection: C, - slug: E - ): E extends ValidContentEntrySlug - ? Promise> - : Promise | undefined>; - export function getEntry< - C extends keyof DataEntryMap, - E extends keyof DataEntryMap[C] | (string & {}), - >( - collection: C, - id: E - ): E extends keyof DataEntryMap[C] - ? Promise - : Promise | undefined>; - - /** Resolve an array of entry references from the same collection */ - export function getEntries( - entries: { - collection: C; - slug: ValidContentEntrySlug; - }[] - ): Promise[]>; - export function getEntries( - entries: { - collection: C; - id: keyof DataEntryMap[C]; - }[] - ): Promise[]>; - - export function reference( - collection: C - ): import('astro/zod').ZodEffects< - import('astro/zod').ZodString, - C extends keyof ContentEntryMap - ? { - collection: C; - slug: ValidContentEntrySlug; - } - : { - collection: C; - id: keyof DataEntryMap[C]; - } - >; - // Allow generic `string` to avoid excessive type errors in the config - // if `dev` is not running to update as you edit. - // Invalid collection names will be caught at build time. - export function reference( - collection: C - ): import('astro/zod').ZodEffects; - - type ReturnTypeOrOriginal = T extends (...args: any[]) => infer R ? R : T; - type InferEntrySchema = import('astro/zod').infer< - ReturnTypeOrOriginal['schema']> - >; - - type ContentEntryMap = { - "api": { -"authentication.md": { - id: "authentication.md"; - slug: "api/authentication"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".md"] }; -"content-groups.mdx": { - id: "content-groups.mdx"; - slug: "api/content-groups"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"content-pieces.mdx": { - id: "content-pieces.mdx"; - slug: "api/content-pieces"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"extension.mdx": { - id: "extension.mdx"; - slug: "api/extension"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"profile.mdx": { - id: "profile.mdx"; - slug: "api/profile"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"roles.mdx": { - id: "roles.mdx"; - slug: "api/roles"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"search.mdx": { - id: "search.mdx"; - slug: "api/search"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"tags.mdx": { - id: "tags.mdx"; - slug: "api/tags"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"transformers.mdx": { - id: "transformers.mdx"; - slug: "api/transformers"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"user-settings.mdx": { - id: "user-settings.mdx"; - slug: "api/user-settings"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"variants.mdx": { - id: "variants.mdx"; - slug: "api/variants"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"webhooks.mdx": { - id: "webhooks.mdx"; - slug: "api/webhooks"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"workspace-memberships.mdx": { - id: "workspace-memberships.mdx"; - slug: "api/workspace-memberships"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"workspace-settings.mdx": { - id: "workspace-settings.mdx"; - slug: "api/workspace-settings"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -"workspace.mdx": { - id: "workspace.mdx"; - slug: "api/workspace"; - body: string; - collection: "api"; - data: InferEntrySchema<"api"> -} & { render(): Render[".mdx"] }; -}; -"docs": { -"getting-started/concepts.mdx": { - id: "getting-started/concepts.mdx"; - slug: "getting-started/concepts"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"getting-started/introduction.mdx": { - id: "getting-started/introduction.mdx"; - slug: "getting-started/introduction"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"javascript-sdk/javascript-sdk.md": { - id: "javascript-sdk/javascript-sdk.md"; - slug: "javascript-sdk/introduction"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"self-hosting/configuration.mdx": { - id: "self-hosting/configuration.mdx"; - slug: "self-hosting/configuration"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"self-hosting/docker.mdx": { - id: "self-hosting/docker.mdx"; - slug: "self-hosting/docker"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"usage-guide/configuring-vrite.md": { - id: "usage-guide/configuring-vrite.md"; - slug: "usage-guide/configuring-vrite"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"usage-guide/content-editor.md": { - id: "usage-guide/content-editor.md"; - slug: "usage-guide/content-editor"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"usage-guide/extensions/introduction.mdx": { - id: "usage-guide/extensions/introduction.mdx"; - slug: "usage-guide/extensions/introduction"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"usage-guide/extensions/official-extensions/dev.mdx": { - id: "usage-guide/extensions/official-extensions/dev.mdx"; - slug: "usage-guide/extensions/official/dev"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"usage-guide/extensions/official-extensions/gpt.mdx": { - id: "usage-guide/extensions/official-extensions/gpt.mdx"; - slug: "usage-guide/extensions/official/gpt"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"usage-guide/extensions/official-extensions/hashnode.mdx": { - id: "usage-guide/extensions/official-extensions/hashnode.mdx"; - slug: "usage-guide/extensions/official/hashnode"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"usage-guide/extensions/official-extensions/mdx.mdx": { - id: "usage-guide/extensions/official-extensions/mdx.mdx"; - slug: "usage-guide/extensions/official/mdx"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"usage-guide/extensions/official-extensions/medium.mdx": { - id: "usage-guide/extensions/official-extensions/medium.mdx"; - slug: "usage-guide/extensions/official/medium"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"usage-guide/metadata.md": { - id: "usage-guide/metadata.md"; - slug: "usage-guide/metadata"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"usage-guide/navigation/command-palette.md": { - id: "usage-guide/navigation/command-palette.md"; - slug: "usage-guide/navigation/command-palette"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"usage-guide/navigation/dashboard.md": { - id: "usage-guide/navigation/dashboard.md"; - slug: "usage-guide/navigation/dashboard"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"usage-guide/navigation/explorer.md": { - id: "usage-guide/navigation/explorer.md"; - slug: "usage-guide/navigation/explorer"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"usage-guide/navigation/navigation.mdx": { - id: "usage-guide/navigation/navigation.mdx"; - slug: "usage-guide/navigation/introduction"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -}; -"recipes": Record; - render(): Render[".md"]; -}>; - - }; - - type DataEntryMap = { - - }; - - type AnyEntryMap = ContentEntryMap & DataEntryMap; - - export type ContentConfig = typeof import("../src/content/config.js"); -} diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore deleted file mode 100644 index e27b6ebb..00000000 --- a/apps/docs/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# build output -dist/ - -# dependencies -node_modules/ - -# logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - - -# environment variables -.env -.env.production - -# macOS-specific files -.DS_Store \ No newline at end of file diff --git a/apps/docs/.vscode/extensions.json b/apps/docs/.vscode/extensions.json deleted file mode 100644 index 22a15055..00000000 --- a/apps/docs/.vscode/extensions.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "recommendations": ["astro-build.astro-vscode"], - "unwantedRecommendations": [] -} diff --git a/apps/docs/.vscode/launch.json b/apps/docs/.vscode/launch.json deleted file mode 100644 index d6422097..00000000 --- a/apps/docs/.vscode/launch.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "command": "./node_modules/.bin/astro dev", - "name": "Development server", - "request": "launch", - "type": "node-terminal" - } - ] -} diff --git a/apps/docs/LICENSE.md b/apps/docs/LICENSE.md deleted file mode 100644 index 2af969c3..00000000 --- a/apps/docs/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 Vrite - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/apps/docs/README.md b/apps/docs/README.md deleted file mode 100644 index f805bd99..00000000 --- a/apps/docs/README.md +++ /dev/null @@ -1,20 +0,0 @@ -![Cover image](public/meta-image.png) - -# Vrite landing page - -This is the source code for the official landing page and blog for Vrite at https://vrite.io. - -The stack used: - -- **Astro** (SSG/SSR framework) -- **Solid.js** (for all the interactive UI components) -- **Vrite CMS & SDK** (powering the blog) - -## Quick start - -First install dependencies and start the dev server: - -``` -pnpm install -pnpm dev -``` diff --git a/apps/docs/astro.config.ts b/apps/docs/astro.config.ts deleted file mode 100644 index a340ec4d..00000000 --- a/apps/docs/astro.config.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { discordIcon } from "./src/assets/icons"; -import { defineConfig } from "astro/config"; -import solidJs from "@astrojs/solid-js"; -import unocss from "unocss/astro"; -import robotsTxt from "astro-robots-txt"; -import mdx from "@astrojs/mdx"; -import icon from "astro-icon"; -import { content, vritePages } from "@vrite/pages"; -import { mdiBookOpenBlankVariant, mdiConsoleLine, mdiGithub } from "@mdi/js"; - -export default defineConfig({ - markdown: { - shikiConfig: { - theme: "github-dark" - } - }, - integrations: [ - unocss({ injectReset: true }), - solidJs(), - robotsTxt({ - policy: [ - { - userAgent: "*" - } - ] - }), - icon(), - vritePages({ - source: content({ - groups: { - docs: { - data: { - label: "Documentation", - url: "/getting-started/introduction", - icon: mdiBookOpenBlankVariant - }, - collection: "docs", - tree: { - branches: [ - { - branchName: "Getting Started", - contentSlugs: ["getting-started/introduction", "getting-started/concepts"] - }, - { - branchName: "Usage Guide", - contentSlugs: ["usage-guide/configuring-vrite"], - branches: [ - { - branchName: "Navigation", - contentSlugs: [ - "usage-guide/navigation/introduction", - "usage-guide/navigation/dashboard", - "usage-guide/navigation/explorer", - "usage-guide/navigation/command-palette" - ] - }, - { - branchName: "Content Editing", - contentSlugs: ["usage-guide/content-editor", "usage-guide/metadata"] - }, - { - branchName: "Vrite Extensions", - contentSlugs: [ - "usage-guide/extensions/introduction", - "usage-guide/extensions/official/dev", - "usage-guide/extensions/official/hashnode", - "usage-guide/extensions/official/medium", - "usage-guide/extensions/official/gpt", - "usage-guide/extensions/official/mdx" - ] - } - ] - }, - { - branchName: "JavaScript SDK", - contentSlugs: ["javascript-sdk/introduction"] - }, - { - branchName: "Self-Hosting", - contentSlugs: ["self-hosting/docker", "self-hosting/configuration"] - } - ] - } - }, - api: { - data: { - label: "API Reference", - url: "/api/authentication", - icon: mdiConsoleLine - }, - collection: "api", - tree: { - branches: [ - { branchName: "Getting Started", contentSlugs: ["api/authentication"] }, - { - branchName: "Endpoints", - contentSlugs: [ - "api/content-groups", - "api/content-pieces", - "api/tags", - "api/profile", - "api/search", - "api/variants", - "api/webhooks", - "api/user-settings", - "api/roles", - "api/workspace", - "api/workspace-memberships", - "api/workspace-settings", - "api/transformers", - "api/extension" - ] - } - ] - } - } - } - }), - config: { - title: "Vrite Documentation", - description: "", - links: [ - { - label: "GitHub", - url: "https://github.com/vriteio/vrite", - icon: mdiGithub - }, - { - label: "Community", - url: "https://discord.gg/yYqDWyKnqE", - icon: discordIcon - } - ] - } - }), - mdx() - ], - build: { - redirects: false - }, - site: "https://docs.vrite.io", - server: { - port: 3000, - host: true - } -}); diff --git a/apps/docs/package.json b/apps/docs/package.json deleted file mode 100644 index 1daf1c6d..00000000 --- a/apps/docs/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "@vrite/docs", - "type": "module", - "version": "1.0.0", - "private": true, - "scripts": { - "dev": "astro dev", - "start": "astro preview", - "build": "astro build", - "preview": "astro preview", - "astro": "astro" - }, - "dependencies": { - "@astrojs/mdx": "^1.1.1", - "@astrojs/sitemap": "^3.0.0", - "@astrojs/solid-js": "^3.0.1", - "@iconify-json/mdi": "^1.1.64", - "@mdi/js": "^7.2.96", - "@solid-primitives/scheduled": "^1.4.0", - "@types/hast": "^3.0.4", - "@types/marked": "^5.0.1", - "@unocss/reset": "^0.59.0", - "@vrite/components": "workspace:*", - "@vrite/pages": "workspace:*", - "@vrite/sdk": "workspace:*", - "@vrite/solid-ui": "workspace:*", - "astro": "^4.13.1", - "astro-auto-import": "^0.3.1", - "astro-icon": "^1.1.0", - "clsx": "^2.0.0", - "curl-string": "^3.1.0", - "hast-util-select": "^6.0.2", - "hast-util-to-html": "^9.0.0", - "marked": "^9.0.0", - "mini-svg-data-uri": "^1.4.4", - "nanoid": "^5.0.1", - "oas": "^24.1.0", - "plausible-tracker": "^0.3.8", - "rehype": "^13.0.1", - "seamless-scroll-polyfill": "^2.3.4", - "shiki": "^0.14.4", - "solid-js": "^1.8.11", - "tinykeys": "^2.1.0", - "typescript": "^5.2.2", - "unist-util-visit": "^5.0.0", - "unocss": "^0.59.0", - "url-slug": "^4.0.1", - "vfile": "^6.0.1", - "vite": "^4.4.9" - }, - "devDependencies": { - "@astrojs/node": "^6.0.0", - "astro-robots-txt": "^1.0.0", - "hastscript": "^9.0.0", - "json-schema": "^0.4.0", - "openapi-types": "^12.1.3", - "saas": "^1.0.0", - "sass": "^1.64.1" - } -} diff --git a/apps/docs/public/_redirects b/apps/docs/public/_redirects deleted file mode 100644 index b50f660c..00000000 --- a/apps/docs/public/_redirects +++ /dev/null @@ -1 +0,0 @@ -/ /getting-started/introduction/ \ No newline at end of file diff --git a/apps/docs/public/favicon.svg b/apps/docs/public/favicon.svg deleted file mode 100644 index 9ea9a4b5..00000000 --- a/apps/docs/public/favicon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/apps/docs/public/meta-image.png b/apps/docs/public/meta-image.png deleted file mode 100644 index 1d84aa7d81a4fbd8c7cb673bda5b1fd44b02d243..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231948 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

1W%-mx~|#jW?{-Zcxrk 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

iPO4nNRZlfE}}r6zrIr7_qApdSY95 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 z

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 diff --git a/apps/docs/public/nunito-latin-ext-variable-wghtOnly-normal.woff2 b/apps/docs/public/nunito-latin-ext-variable-wghtOnly-normal.woff2 deleted file mode 100644 index de24d9493d2349d27ce84c844698c654a02ee960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32720 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 ljK8>!G6!PMN{ba59~Lp41UzKOg)p> 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