From 19af38fbbf3ae697e2b2d77beb65169ee6e55246 Mon Sep 17 00:00:00 2001 From: Novout Date: Fri, 19 May 2023 00:25:57 -0300 Subject: [PATCH] feat(schemas): templates --- .../graph/schemas/AsideGraphSchemaFolder.vue | 2 +- .../schemas/AsideGraphSchemaListFiles.vue | 8 +- .../AsideGraphSchemaCharactersItem.vue | 2 +- .../header/items/EditorBaseHeaderProject.vue | 9 -- .../project/schemas/EditorSchemasTemplate.vue | 76 +++++++++++++ .../page/editor/provider/ProviderEditor.vue | 5 + packages/app/src/store/absolute.ts | 1 + packages/app/src/store/project.ts | 35 +----- packages/app/src/use/defines.ts | 102 ++++++++++++++++++ packages/app/src/use/generator/transformer.ts | 37 ++++++- packages/app/src/use/project.ts | 2 + packages/app/src/use/schemas.ts | 3 +- packages/app/windi.config.ts | 1 + packages/languages/src/en-US/editor.ts | 11 ++ packages/languages/src/en-US/toast.ts | 1 + packages/languages/src/pt-BR/editor.ts | 11 ++ packages/languages/src/pt-BR/toast.ts | 1 + packages/plugin-characters/src/color.ts | 3 +- packages/types/src/absolute.ts | 1 + 19 files changed, 261 insertions(+), 50 deletions(-) create mode 100644 packages/app/src/components/page/editor/project/schemas/EditorSchemasTemplate.vue diff --git a/packages/app/src/components/page/editor/aside/graph/schemas/AsideGraphSchemaFolder.vue b/packages/app/src/components/page/editor/aside/graph/schemas/AsideGraphSchemaFolder.vue index f0fcbd53..2f73929c 100644 --- a/packages/app/src/components/page/editor/aside/graph/schemas/AsideGraphSchemaFolder.vue +++ b/packages/app/src/components/page/editor/aside/graph/schemas/AsideGraphSchemaFolder.vue @@ -20,7 +20,7 @@ :class="[value ? 'transform rotate-90' : '']" @click.prevent.stop="toggle()" > - + diff --git a/packages/app/src/components/page/editor/aside/graph/schemas/AsideGraphSchemaListFiles.vue b/packages/app/src/components/page/editor/aside/graph/schemas/AsideGraphSchemaListFiles.vue index 0fcb7c9d..14f3e0da 100644 --- a/packages/app/src/components/page/editor/aside/graph/schemas/AsideGraphSchemaListFiles.vue +++ b/packages/app/src/components/page/editor/aside/graph/schemas/AsideGraphSchemaListFiles.vue @@ -17,7 +17,7 @@ > {{ element.fileName }} -
+
@@ -59,6 +59,10 @@

{{ t('editor.characters.item.important') }}

+ +

{{ t('editor.characters.item.disabled') }}

+ +
diff --git a/packages/app/src/components/page/editor/aside/graph/schemas/characters/AsideGraphSchemaCharactersItem.vue b/packages/app/src/components/page/editor/aside/graph/schemas/characters/AsideGraphSchemaCharactersItem.vue index 9f44d84c..2ff4d0c5 100644 --- a/packages/app/src/components/page/editor/aside/graph/schemas/characters/AsideGraphSchemaCharactersItem.vue +++ b/packages/app/src/components/page/editor/aside/graph/schemas/characters/AsideGraphSchemaCharactersItem.vue @@ -1,6 +1,6 @@ diff --git a/packages/app/src/store/absolute.ts b/packages/app/src/store/absolute.ts index c4a98aaf..6e681a39 100644 --- a/packages/app/src/store/absolute.ts +++ b/packages/app/src/store/absolute.ts @@ -56,6 +56,7 @@ export const useAbsoluteStore = defineStore('absolute', { spinner: false, schemas: { create: false, + template: false, }, } }, diff --git a/packages/app/src/store/project.ts b/packages/app/src/store/project.ts index a6b2548d..bda83f61 100644 --- a/packages/app/src/store/project.ts +++ b/packages/app/src/store/project.ts @@ -173,40 +173,7 @@ export const useProjectStore = defineStore('project', { }, ], }, - schemas: options.schemas || [ - { - id: useUtils().id().nano({ prefix: 'schema' }), - type: 'default', - name: 'Lore', - prefix: '#', - customIcon: '📖', - folders: [], - }, - { - id: useUtils().id().nano({ prefix: 'schema' }), - type: 'characters', - name: 'Personagem', - prefix: '@', - customIcon: '🐉', - folders: [], - }, - { - id: useUtils().id().nano({ prefix: 'schema' }), - type: 'default', - name: 'Fio da História', - prefix: '/', - customIcon: '⛰️', - folders: [], - }, - { - id: useUtils().id().nano({ prefix: 'schema' }), - type: 'default', - name: 'Anotações', - prefix: '*', - customIcon: '📂', - folders: [], - }, - ], + schemas: options.schemas || [], } if (this.chapters[0].entities.length === 0) { diff --git a/packages/app/src/use/defines.ts b/packages/app/src/use/defines.ts index bbcec573..85a7e873 100644 --- a/packages/app/src/use/defines.ts +++ b/packages/app/src/use/defines.ts @@ -2,11 +2,14 @@ import { ProjectStateTemplatesSubstitutionsText, ProjectStateTemplatesSubstitutionsItalic, ProjectStateTemplatesSubstitutionsBold, + ProjectStateSchema, } from 'better-write-types' import i18n from '@/lang' +import { useUtils } from './utils' export const useDefines = () => { const { t } = i18n.global + const utils = useUtils() const docx = () => { const flowItemTypes = (): string[] => { @@ -327,6 +330,104 @@ export const useDefines = () => { return { clientStorage } } + const schemas = () => { + const templatesType = () => { + return [ + t('editor.schemas.create.templates.simple.title'), + t('editor.schemas.create.templates.enthusiast.title'), + ] + } + + const template = ( + target: 'simple' | 'enthusiast' + ): ProjectStateSchema[] => { + switch (target) { + case 'simple': + return [ + { + id: utils.id().nano({ prefix: 'schema' }), + type: 'default', + name: t('editor.schemas.defines.annotations'), + prefix: '*', + customIcon: '📂', + folders: [], + }, + ] + case 'enthusiast': { + const charactersSchemaId = utils.id().nano({ prefix: 'schema' }) + const charactersFolderId = utils.id().nano({ prefix: 'folder' }) + const charactersFileId = utils.id().nano({ prefix: 'file' }) + const genNameArr = characters().names() + const genName = + genNameArr[Math.floor(Math.random() * genNameArr.length)] + + return [ + { + id: utils.id().nano({ prefix: 'schema' }), + type: 'default', + name: t('editor.schemas.defines.lore'), + prefix: '#', + customIcon: '📖', + folders: [], + }, + { + id: charactersSchemaId, + type: 'characters', + name: t('editor.schemas.defines.characters'), + prefix: '@', + customIcon: '🐉', + folders: [ + { + id: charactersFolderId, + parentId: charactersSchemaId, + folderName: t('editor.schemas.items.folder'), + files: [ + { + id: charactersFileId, + parentId: charactersSchemaId, + fileName: genName, + milkdownData: {}, + extra: { + id: utils.id().nano({ prefix: 'character' }), + name: genName, + nameCase: 'default', + color: utils.text().randomColor(), + colorAlpha: 0.2, + important: false, + configuration: false, + disabled: false, + }, + customIcon: undefined, + }, + ], + customIcon: undefined, + }, + ], + }, + { + id: utils.id().nano({ prefix: 'schema' }), + type: 'default', + name: t('editor.schemas.defines.timeline'), + prefix: '/', + customIcon: '⛰️', + folders: [], + }, + { + id: utils.id().nano({ prefix: 'schema' }), + type: 'default', + name: t('editor.schemas.defines.annotations'), + prefix: '*', + customIcon: '📂', + folders: [], + }, + ] + } + } + } + + return { templatesType, template } + } + return { docx, pdf, @@ -334,5 +435,6 @@ export const useDefines = () => { characters, presence, configuration, + schemas, } } diff --git a/packages/app/src/use/generator/transformer.ts b/packages/app/src/use/generator/transformer.ts index 7eb8963b..63f69e6f 100644 --- a/packages/app/src/use/generator/transformer.ts +++ b/packages/app/src/use/generator/transformer.ts @@ -234,7 +234,42 @@ export const useTransformer = () => { return value || 'default' } - return { type } + const template = (target: string, focus: 'setter' | 'getter'): string => { + let value: Maybe<'simple' | 'enthusiast'> = null + let __STOP__: boolean = false + + if (focus === 'getter') { + switch (target) { + case 'simple': + return t('editor.schemas.create.templates.simple.title') + case 'enthusiast': + return t('editor.schemas.create.templates.enthusiast.title') + } + } + + availableLocales.forEach((locale: string) => { + if (__STOP__) return + + const { editor } = getLocaleMessage(locale) as any + + switch (target) { + case editor.schemas.create.templates.simple.title: + __STOP__ = true + value = 'simple' + break + case editor.schemas.create.templates.enthusiast.title: + __STOP__ = true + value = 'enthusiast' + break + default: + __STOP__ = false + } + }) + + return value || 'simple' + } + + return { type, template } } return { docx, characters, presence, schemas } diff --git a/packages/app/src/use/project.ts b/packages/app/src/use/project.ts index d6d63829..ee05f93e 100644 --- a/packages/app/src/use/project.ts +++ b/packages/app/src/use/project.ts @@ -95,6 +95,8 @@ export const useProject = () => { target: type === 'creative' ? 1 : 0, position: 'start', }) + + if (type === 'creative') ABSOLUTE.schemas.template = true } return { new: n } diff --git a/packages/app/src/use/schemas.ts b/packages/app/src/use/schemas.ts index 851e060f..39eee6b6 100644 --- a/packages/app/src/use/schemas.ts +++ b/packages/app/src/use/schemas.ts @@ -45,7 +45,8 @@ export const useSchemas = () => { } const onSchemaDelete = (schema: ProjectStateSchemaCreate) => { - plugin.emit('plugin-schemas-delete', schema) + if (confirm(t('toast.project.schemas.schemaDelete'))) + plugin.emit('plugin-schemas-delete', schema) } return { diff --git a/packages/app/windi.config.ts b/packages/app/windi.config.ts index d9903704..5ced694c 100644 --- a/packages/app/windi.config.ts +++ b/packages/app/windi.config.ts @@ -34,6 +34,7 @@ export default defineConfig({ 'wb-scroll': 'scrollbar-thin scrollbar-thumb-theme-editor-scrollbar-thumb scrollbar-track-theme-editor-scrollbar-track', 'wb-screen': 'h-screen wb-scroll overflow-y-auto', 'wb-aside-icon': 'wb-icon w-7 h-7 md:(w-6 h-6) lg:(w-5 h-5)', + 'wb-aside-toggle-icon': 'wb-icon w-8 h-8 md:(w-7 h-7)', 'wb-landing-list': 'text-white font-bold bg-black-opacity border border-black p-4 rounded shadow transition-all hover:shadow-xl' }, theme: { diff --git a/packages/languages/src/en-US/editor.ts b/packages/languages/src/en-US/editor.ts index 81821b78..28376d0d 100644 --- a/packages/languages/src/en-US/editor.ts +++ b/packages/languages/src/en-US/editor.ts @@ -772,6 +772,10 @@ export default { 'Choose a style that is more related to what you are looking for.', button: 'Create', templates: { + title: 'One second...', + description: + 'Optionally, you can choose an additional template to get your project off to a good start!', + button: 'Start', simple: { title: 'Simple', description: @@ -784,6 +788,12 @@ export default { }, }, }, + defines: { + annotations: 'Anotações', + lore: 'Lore', + characters: 'Characters', + timeline: 'Timeline', + }, items: { file: 'New File', folder: 'New Folder', @@ -818,6 +828,7 @@ export default { color: 'Color', colorAlpha: 'Opacity', important: 'Important', + disabled: 'Disabled', }, data: { occurrences: 'Occurrences', diff --git a/packages/languages/src/en-US/toast.ts b/packages/languages/src/en-US/toast.ts index 0cebc41b..1f2016a8 100644 --- a/packages/languages/src/en-US/toast.ts +++ b/packages/languages/src/en-US/toast.ts @@ -72,6 +72,7 @@ export default { schemas: { fileDelete: 'Are you sure you want to delete the file?', folderDelete: 'Are you sure you want to delete the folder?', + schemaDelete: 'Are you sure you want to delete this section?', }, }, dropbox: { diff --git a/packages/languages/src/pt-BR/editor.ts b/packages/languages/src/pt-BR/editor.ts index cca134f2..187bf0e7 100644 --- a/packages/languages/src/pt-BR/editor.ts +++ b/packages/languages/src/pt-BR/editor.ts @@ -776,6 +776,10 @@ export default { 'Escolha um estilo que mais esteja relacionado com o que você busca.', button: 'Criar', templates: { + title: 'Um segundo...', + description: + 'Opcionalmente, você pode escolher um template adicional para começar o seu projeto com o pé direito!', + button: 'Escolher', simple: { title: 'Simples', description: @@ -788,6 +792,12 @@ export default { }, }, }, + defines: { + annotations: 'Anotações', + lore: 'História', + characters: 'Personagens', + timeline: 'Linha do Tempo', + }, items: { file: 'Novo Arquivo', folder: 'Nova Pasta', @@ -823,6 +833,7 @@ export default { color: 'Cor', colorAlpha: 'Opacidade', important: 'Sobrescrever', + disabled: 'Desabilitar', }, data: { occurrences: 'Ocorrências', diff --git a/packages/languages/src/pt-BR/toast.ts b/packages/languages/src/pt-BR/toast.ts index cde45aa1..2523f7fd 100644 --- a/packages/languages/src/pt-BR/toast.ts +++ b/packages/languages/src/pt-BR/toast.ts @@ -73,6 +73,7 @@ export default { schemas: { fileDelete: 'Você tem certeza que deseja deletar o arquivo?', folderDelete: 'Você tem certeza que deseja deletar a pasta?', + schemaDelete: 'Você tem certeza que deseja deletar esta seção?', }, }, dropbox: { diff --git a/packages/plugin-characters/src/color.ts b/packages/plugin-characters/src/color.ts index 389806c8..17261ccf 100644 --- a/packages/plugin-characters/src/color.ts +++ b/packages/plugin-characters/src/color.ts @@ -23,7 +23,8 @@ export const PluginBackgroundColorSet = ( str: string character: ProjectStateSchemaCharacterItem }) => { - if (!hooks.entity.utils().isTextBlock(entity.type)) return + if (!hooks.entity.utils().isTextBlock(entity.type) || character.disabled) + return const text: Maybe = ASTUtils.normalize(str, { type: 'all', diff --git a/packages/types/src/absolute.ts b/packages/types/src/absolute.ts index 584480e0..0c388188 100644 --- a/packages/types/src/absolute.ts +++ b/packages/types/src/absolute.ts @@ -55,6 +55,7 @@ export interface AbsoluteStateGenerator { export interface AbsoluteStateSchemas { create: boolean + template: boolean } export interface AbsoluteState {