@cratis/screenplay-language 5.3.2 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles/compiler/Parsing/CommandParser.js +1 -1
- package/dist/bundles/compiler/Parsing/CommandParser.js.map +1 -1
- package/dist/bundles/compiler/Parsing/MisplacedRuleHint.js +2 -0
- package/dist/bundles/compiler/Parsing/MisplacedRuleHint.js.map +1 -0
- package/dist/bundles/compiler/Parsing/PublicEventUsageValidator.js +1 -1
- package/dist/bundles/compiler/Parsing/PublicEventUsageValidator.js.map +1 -1
- package/dist/bundles/compiler/Parsing/ScreenplayParser.js +1 -1
- package/dist/bundles/compiler/Parsing/ScreenplayParser.js.map +1 -1
- package/dist/bundles/compiler/Parsing/SpecificationParser.js +1 -1
- package/dist/bundles/compiler/Parsing/SpecificationParser.js.map +1 -1
- package/dist/bundles/compiler/Syntax/SyntaxCollections.js +1 -1
- package/dist/bundles/compiler/Syntax/SyntaxCollections.js.map +1 -1
- package/dist/bundles/completion-planner.js +2 -2
- package/dist/bundles/completion-planner.js.map +1 -1
- package/dist/bundles/scope-items.js +2 -2
- package/dist/bundles/scope-items.js.map +1 -1
- package/dist/completion-planner.d.ts.map +1 -1
- package/dist/scope-items.d.ts +1 -0
- package/dist/scope-items.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion-planner.js","names":["items.moduleItems","items.featureItems","items.sliceItemsFor","items.typeItems","items.commandItems","items.eventItems","scope.readModelItems","scope.reducerItems","scope.formItems","scope.contributeItems","scope.behaviorItems","scope.personaItems","items.applicationContextItems","scope.profileIdentityItems","items.identityItems","scope.authenticationItems","scope.onboardingItems","scope.inviteMemberItems","scope.legalTermsItems","scope.emailItems","scope.seedItems","scope.themeItems","scope.uiProfileItems","scope.profileRootTemplateItems","scope.profileAppearanceItems","scope.profileSampleDataItems","scope.sampleDataItems","scope.sampleShapeItems","scope.outcomeItems","scope.layoutItems","scope.navigationItems","scope.toolbarItems","items.stateMachineItems","items.stateItems","items.workflowItems","items.operationItems","items.operationPhaseItems","items.producesItems","items.handlerItems","items.implementationItems","items.operationImplementationItems","items.queryItems","items.performerItems","items.constraintItems","items.reactionItems","items.invocationItems","items.triggerItems","items.reactionTriggerItems","items.specificationItems","items.policyItems","items.validateItems","items.actionItems","items.tableItems","scope.templateItems","items.screenItems","items.actionSubjectValueItems","items.actionSubjectItems","items.guardedActionItems","items.actionArgumentItems","items.interactionChoiceItems","items.interactionActionItems","items.refusalItems","items.namedRuleImplementationItems","items.commandRuleItems","items.optionalTypeItems","items.specificationStepItems","items.inlineEventItems","items.ruleItems","productionRouteItem","RULE_LINE_PATTERN","document","keyword","line","singularDeclarations","topLevelItems","item","header","relative","text","index","indent","indentOf","construct","chain","where","subLanguage","getSubLanguage","purposeItems","moduleScopeItems","featureScopeItems","sliceItemsFor","conceptItems","typeItems","commandItems","eventItems","readModelItems","reducerItems","formItems","contributeItems","behaviorItems","personaItems","applicationContextItems","profileIdentityItems","identityItems","authenticationItems","onboardingItems","inviteMemberItems","legalTermsItems","emailItems","seedItems","themeItems","uiProfileItems","profileRootTemplateItems","profileAppearanceItems","profileSampleDataItems","sampleDataItems","sampleShapeItems","outcomeItems","layoutItems","navigationItems","toolbarItems","stateMachineItems","stateItems","workflowItems","operationItems","operationPhaseItems","producesItems","handlerItems","implementationItems","operationImplementationItems","queryItems","performerItems","constraintItems","reactionItems","invocationItems","triggerItems","reactionTriggerItems","specificationItems","policyItems","validateItems","actionItems","tableItems","templateItems","screenItems","candidate","scanDocument","lines","fences","fenceMap","lineIndex","withoutComment","textBefore","marker","generationChain","enclosingChain","inConcept","nearestEnclosingLine","generationEntries","generationCompletions","scope","category","continuationEntries","continuationResponseCompletions","symbols","responseEntries","exampleCompletions","responseCompletions","readEntries","commandReadCompletions","keyEntries","readModelKeyCompletions","dependencyEntries","dependencyTargetCompletions","importPath","refusal","refusalContext","member","contextVariableMatch","currentLine","effectiveIndent","subjectHeader","suffix","actionSubjectValueItems","actionSubjectItems","parentIndent","guarded","parent","guardedActionItems","actionArgumentItems","interactionChoiceItems","interactionActionItems","refusalItems","ruleContext","namedRuleContext","namedRuleImplementationItems","commandRuleItems","propertyOwner","propertyName","reservedProperty","match","afterPropertyType","afterQueryType","subjectModifier","subjectConcept","concept","subjectType","subjectTarget","attribute","afterSubjectType","keyModifier","modifierEntries","optionalTypeItems","step","specificationStepItems","enclosingLine","inlineEventItems","ruleItems","headers","enclosingHeaders","entries","expansion","structureCompletion"],"sources":["../../completion-planner.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { enclosingChain, enclosingHeaders, fenceMap, indentOf, nearestEnclosingLine, withoutComment } from './document-context';\nimport { refusalContext } from './refusal-context';\nimport { generationCompletions } from './generation-completions';\nimport { namedRuleContext } from './named-rule-context';\nimport { continuationResponseCompletions } from './continuation-responses';\nimport { responseCompletions } from './response-completions';\nimport { dependencyTargetCompletions } from './dependency-completions';\nimport { exampleCompletions } from './example-authoring';\nimport { DocumentSymbols, scanDocument } from './symbols';\nimport { structureCompletion } from './structure-completions';\nimport { getSubLanguage } from './sub-language-registry';\nimport * as items from './completion-items';\nimport * as scope from './scope-items';\nimport { CompletionEntry } from './completion-items';\nimport { purposeItems } from './purpose-items';\nimport { readModelKeyCompletions } from './read-model-key-completions';\nimport { commandReadCompletions } from './command-read-completions';\n\n// Matches a validation rule line ending in \"rule <Name>\" (optionally followed by a\n// message clause) - both the command form (\"<property> rule <Name>\") and the\n// concept implied-subject form (\"rule <Name>\"). Its first word is the property\n// name, not \"rule\", so it can't be recognized through the chain[0] keyword switch\n// the way \"on <EventType>\" or \"handler\" are - hence the dedicated regex check.\nconst productionRouteItem = { label: 'stream', insertText: 'stream ${1:Source.Stream}', documentation: 'Replace the whole command route for this event production. ESM v10.' };\n\nconst RULE_LINE_PATTERN = /(?:^|\\s)rule\\s+[A-Za-z_]\\w*(?:\\s+severity\\s+(?:information|warning|error))?(?:\\s+message\\s+.*)?$/;\n\nexport type CompletionPlan =\n | { kind: 'none' }\n | { kind: 'entries'; entries: CompletionEntry[] }\n | { kind: 'contextVariables'; replaceLength: number }\n | { kind: 'playFiles'; replaceLength: number }\n | { kind: 'policies' }\n | { kind: 'events' }\n | { kind: 'triggers' }\n | { kind: 'commands' }\n | { kind: 'producesTargets' }\n | { kind: 'screens' }\n | { kind: 'queries' }\n | { kind: 'types' };\n\n// What the position sits inside, beyond the keyword chain: the whole header of each enclosing block, so a\n// slice's type and a template's kind are known, and the document's own lines, so a declaration that may\n// appear once is not offered again.\nexport interface CompletionScope {\n headers: readonly string[];\n document: readonly string[];\n}\n\nconst declaredIn = (document: readonly string[], keyword: string) => document.some(line => new RegExp(`^${keyword}\\\\b`).test(line));\n\nfunction topLevelEntries(document: readonly string[]): CompletionEntry[] {\n const singularDeclarations = ['domain', 'authentication', 'onboarding', 'identity', 'context'];\n return items.topLevelItems.filter(item => !singularDeclarations.includes(item.label) || !declaredIn(document, item.label));\n}\n\nconst isTemplate = (header: string | undefined) => /^(?:screen|dialog)\\s+template\\b/.test(header ?? '');\n\n// A whole block as one completion entry. Continuation lines are indented relative to the line it is inserted on,\n// which is how the editors indent a multi-line snippet.\nfunction expansionEntry(text: string, indent: number): CompletionEntry {\n const relative = text.split('\\n').map((line, index) => (index === 0 ? line : line.slice(Math.min(indent, indentOf(line))))).join('\\n');\n const label = text.split('\\n')[0].trim();\n return { label, insertText: relative.replace(/[$}\\\\]/g, '\\\\$&'), documentation: 'Expands the whole block from what the command and its events declare.' };\n}\n\nexport function completionEntriesFor(chain: string[], where: CompletionScope = { headers: [], document: [] }): CompletionEntry[] {\n const construct = chain[0];\n if (construct === undefined || construct === 'domain') return topLevelEntries(where.document);\n const subLanguage = getSubLanguage(construct);\n if (subLanguage) return subLanguage.completions ?? [];\n const header = where.headers[0];\n switch (construct) {\n case 'purpose':\n return purposeItems;\n case 'module':\n return items.moduleItems;\n case 'feature':\n return items.featureItems;\n case 'slice':\n return items.sliceItemsFor(header?.split(/\\s+/)[1]);\n case 'concept':\n return /:\\s*Enum\\b/.test(header ?? '') ? [...items.conceptItems.filter(item => item.label !== 'validate checksum'), { label: 'enum member (numbered)', insertText: '${1:value} = ${2:0}', documentation: 'Every member must declare a unique int32 number. Keep published numbers unchanged; specifications name members, not numbers.' }] : items.conceptItems.filter(item => item.label !== 'validate checksum' || /:\\s*String\\b/.test(header ?? ''));\n case 'type':\n return items.typeItems;\n case 'command':\n return items.commandItems;\n case 'public':\n case 'event':\n return items.eventItems;\n case 'readmodel':\n return scope.readModelItems;\n case 'reducer':\n return scope.reducerItems;\n case 'form':\n return scope.formItems;\n case 'contribute':\n return scope.contributeItems;\n case 'behavior':\n return scope.behaviorItems;\n case 'persona':\n return scope.personaItems;\n case 'context':\n return items.applicationContextItems;\n case 'identity':\n return chain.includes('ui') ? scope.profileIdentityItems : items.identityItems;\n case 'authentication':\n return scope.authenticationItems;\n case 'onboarding':\n return scope.onboardingItems;\n case 'invite':\n return scope.inviteMemberItems;\n case 'legal':\n return scope.legalTermsItems;\n case 'emails':\n return scope.emailItems;\n case 'seed':\n return scope.seedItems;\n case 'theme':\n return scope.themeItems;\n case 'ui':\n return scope.uiProfileItems;\n case 'root':\n return chain.includes('ui') ? scope.profileRootTemplateItems : [];\n case 'appearance':\n return chain.includes('ui') ? scope.profileAppearanceItems : [];\n case 'sample':\n return chain.includes('ui') ? scope.profileSampleDataItems : scope.sampleDataItems;\n case 'shape':\n return chain[1] === 'sample' ? scope.sampleShapeItems : [];\n case 'on':\n case 'success':\n case 'failure':\n case 'confirm':\n return scope.outcomeItems;\n case 'layout':\n return scope.layoutItems;\n case 'navigation':\n return scope.navigationItems;\n case 'toolbar':\n return scope.toolbarItems;\n case 'statemachine':\n return items.stateMachineItems;\n case 'state':\n return items.stateItems;\n case 'workflow':\n return items.workflowItems;\n case 'system':\n return items.operationItems.filter(item => item.label === 'description');\n case 'operation':\n return items.operationItems;\n case 'execute':\n case 'compensate':\n return items.operationPhaseItems;\n case 'produces':\n return chain.includes('command') ? [...items.producesItems, productionRouteItem] : items.producesItems;\n case 'handler':\n return items.handlerItems;\n case 'implementation':\n return chain[1] === 'handler' ? items.implementationItems : ['execute', 'compensate'].includes(chain[1]) ? items.operationImplementationItems : [];\n case 'reads':\n return [{ label: 'by parts', insertText: 'by\\n ${1:part} = ${2:source}\\n ${3:part} = ${4:source}', documentation: 'Supply every composite read-model key part by name.' }];\n case 'query':\n return items.queryItems;\n case 'performer':\n return items.performerItems;\n case 'constraint':\n return items.constraintItems;\n case 'reaction':\n return items.reactionItems;\n case 'invokes':\n return chain.includes('reaction') ? items.invocationItems : [];\n case 'trigger':\n return items.triggerItems;\n case 'when':\n case 'every':\n case 'at':\n return chain.includes('reaction') ? items.reactionTriggerItems : [];\n case 'specification':\n return items.specificationItems;\n case 'policy':\n return items.policyItems;\n case 'validate':\n return chain.includes('concept') && /:\\s*String\\b/.test(where.headers.find(header => /^concept\\s/.test(header)) ?? '')\n ? [...items.validateItems, { label: 'checksum', insertText: 'checksum ${1|luhn,mod11,mod97|}', documentation: 'Exact trailing check digits over preceding ASCII digits. String concepts only; also validates inputs and stored values.' }]\n : items.validateItems;\n case 'action':\n return items.actionItems;\n case 'table':\n case 'summary':\n return items.tableItems;\n case 'screen':\n return isTemplate(header) ? scope.templateItems : items.screenItems;\n case 'dialog':\n return scope.templateItems;\n default:\n if (isTemplate(where.headers.find(candidate => isTemplate(candidate)))) return scope.templateItems;\n // Sections inside a screen expose the screen vocabulary.\n if (chain.includes('screen') || construct === 'section') return items.screenItems;\n if (chain.includes('produces')) return chain.includes('command') ? [...items.producesItems, productionRouteItem] : items.producesItems;\n return [];\n }\n}\n\n// Decides what to complete at a position, without any editor dependency — the\n// Monaco service and the VSCode extension both materialize the plan into items.\nexport function planCompletions(\n lines: string[],\n lineIndex: number,\n textBefore: string,\n symbols: DocumentSymbols = scanDocument(lines),\n): CompletionPlan {\n const fences = fenceMap(lines);\n if (fences[lineIndex] || withoutComment(textBefore).length < textBefore.length) return { kind: 'none' };\n if (/^\\s*concept\\s+[\\p{L}\\p{Mn}\\p{Nd}\\p{Pc}]+\\s*:\\s*\\w+\\s+(?:(?:pii|personal|secret)\\s+)*\\w*$/u.test(textBefore)) {\n return { kind: 'entries', entries: ['pii', 'secret'].filter(marker => !new RegExp(`\\\\b${marker}\\\\b`).test(textBefore)).map(marker => ({ label: marker, insertText: marker, documentation: marker === 'pii' ? 'personal data (GDPR Art. 4(1)); renders Chronicle [PII]' : 'Operational secret; renders [Encrypted] + [NotAudited].' })) };\n }\n const generationChain = enclosingChain(lines, fences, lineIndex, indentOf(textBefore));\n const inConcept = generationChain[0] === 'concept';\n if (generationChain[0] === 'generate' && generationChain[1] === 'concept' && /^generate\\s+rule\\s+/.test((nearestEnclosingLine(lines, fences, lineIndex, indentOf(textBefore)) ?? '').trim())) {\n return { kind: 'entries', entries: [\n { label: 'file', insertText: 'file ${1:Generator.cs}', documentation: 'The sole ValueGeneration source. Receives the provider-bound GenerationContext (Now, Tenant); returns String.' },\n { label: 'csharp', insertText: '```csharp\\n${1:return value;}\\n```', documentation: 'The sole ValueGeneration body. Reference execution requires fixtures; it never invokes this code.' },\n ] };\n }\n const generationEntries = inConcept || (generationChain[0] === 'validate' && generationChain[1] === 'concept') ? generationCompletions(lines, lineIndex, textBefore) : null;\n if (generationEntries !== null) return { kind: 'entries', entries: generationEntries };\n if (inConcept && /^\\s*(?:secret|sensitive|@sensitive)\\s+scope\\s+\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: ['subject', 'namespace', 'global'].map(scope => ({ label: scope, insertText: scope, documentation: 'Explicit secret encryption scope.' })) };\n }\n if (inConcept && /^\\s*(?:pii|personal|@pii)\\s+special\\s+\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: ['racialOrEthnicOrigin', 'politicalOpinions', 'religiousOrPhilosophicalBeliefs', 'tradeUnionMembership', 'genetic', 'biometric', 'health', 'sexLifeOrSexualOrientation'].map(category => ({ label: category, insertText: category, documentation: 'GDPR Art. 9(1) special category.' })) };\n }\n const continuationEntries = continuationResponseCompletions(lines, lineIndex, textBefore, symbols);\n if (continuationEntries !== null) return { kind: 'entries', entries: continuationEntries };\n const responseEntries = exampleCompletions(lines, lineIndex, textBefore) ?? responseCompletions(lines, lineIndex, textBefore, scanDocument(lines));\n if (responseEntries !== null) return { kind: 'entries', entries: responseEntries };\n const readEntries = commandReadCompletions(lines, lineIndex, textBefore, symbols);\n if (readEntries !== null) return { kind: 'entries', entries: readEntries };\n const keyEntries = readModelKeyCompletions(lines, lineIndex, textBefore, symbols);\n if (keyEntries !== null) return { kind: 'entries', entries: keyEntries };\n const dependencyEntries = dependencyTargetCompletions(lines, lineIndex, textBefore, symbols);\n if (dependencyEntries !== null) return { kind: 'entries', entries: dependencyEntries };\n\n // Inside the quotes of a file import, what is wanted is a path - replacing what has been typed so far.\n const importPath = textBefore.match(/^\\s*import\\s+\"([^\"]*)$/);\n if (importPath) {\n return { kind: 'playFiles', replaceLength: importPath[1].length };\n }\n\n // A quote or a slash only asks for a completion inside an import path.\n if (/[\"/]$/.test(textBefore)) return { kind: 'none' };\n\n const refusal = refusalContext(lines, lineIndex, indentOf(lines[lineIndex] ?? textBefore));\n if (/\\$refusal\\.\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: refusal === undefined ? [] : ['reason', 'message', ...(/^on\\s+refused\\s+by\\s+constraint(?:\\s|$)/.test(refusal) ? ['constraint'] : [])].map(member => ({ label: member, insertText: member, documentation: 'String refusal value in branch event mappings; executable from ESM v19. Constraint is available only in a by constraint branch.' })) };\n }\n const contextVariableMatch = textBefore.match(/\\$[\\w.]*$/);\n if (contextVariableMatch) {\n return { kind: 'contextVariables', replaceLength: contextVariableMatch[0].length };\n }\n\n const currentLine = lines[lineIndex] ?? '';\n const effectiveIndent =\n textBefore.trim().length === 0 ? textBefore.length : indentOf(currentLine);\n const chain = enclosingChain(lines, fences, lineIndex, effectiveIndent);\n if (chain.includes('screen')) {\n const subjectHeader = /^\\s*(?:action\\s+(?:\"(?:[^\"\\\\]|\\\\.)*\"|\\$strings\\.[\\w.]+|[\\w.]+)|item\\s+\\w+\\s+action\\s+[\\w.]+)\\s+/;\n if (subjectHeader.test(textBefore)) {\n const suffix = textBefore.replace(subjectHeader, '');\n if (/^for\\s+\\w*$/.test(suffix)) return { kind: 'entries', entries: items.actionSubjectValueItems };\n if (/^(?:f|fo|for)?$/.test(suffix)) return { kind: 'entries', entries: items.actionSubjectItems };\n }\n let parentIndent = effectiveIndent;\n let guarded = false;\n for (let index = lineIndex - 1; index >= 0; index--) {\n if (fences[index]) continue;\n const parent = withoutComment(lines[index]);\n if (parent.trim().length === 0 || indentOf(parent) >= parentIndent) continue;\n parentIndent = indentOf(parent);\n if (/^\\s*action\\s+(?:\"|\\$strings\\.)/.test(parent)) { guarded = true; break; }\n if (/^\\s*screen\\b/.test(parent)) break;\n }\n if (guarded) {\n if (/^\\s*(?:when\\b.*|otherwise)\\s+execute\\s+[\\w.]*$/.test(textBefore)) return { kind: 'commands' };\n if (chain[0] === 'action') return { kind: 'entries', entries: items.guardedActionItems };\n if (['when', 'otherwise'].includes(chain[0])) {\n const parent = nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? '';\n return { kind: 'entries', entries: /\\bexecute\\s+[\\w.]+$/.test(parent) ? items.actionArgumentItems : [] };\n }\n }\n }\n if (['on', 'when', 'otherwise'].includes(chain[0])) {\n let parentIndent = effectiveIndent;\n for (let index = lineIndex - 1; index >= 0; index--) {\n if (fences[index]) continue;\n const parent = withoutComment(lines[index]);\n if (parent.trim().length === 0 || indentOf(parent) >= parentIndent) continue;\n parentIndent = indentOf(parent);\n if (/^\\s*on\\s+(?:click|double click|select|change)\\s*$/.test(parent)) {\n return { kind: 'entries', entries: chain[0] === 'on' ? items.interactionChoiceItems : items.interactionActionItems };\n }\n if (/^\\s*(?:screen|behavior|specification|reaction)\\b/.test(parent)) break;\n }\n }\n if (chain[0] === 'on' && refusal !== undefined) return { kind: 'entries', entries: items.refusalItems };\n const ruleContext = namedRuleContext(lines, lineIndex, effectiveIndent);\n if (ruleContext === 'implementation') return { kind: 'entries', entries: items.namedRuleImplementationItems };\n if (ruleContext === 'rule') return { kind: 'entries', entries: items.commandRuleItems };\n\n const propertyOwner = ['public', 'event', 'command', 'type', 'readmodel', 'trigger', 'when', 'every', 'at'].includes(chain[0]) ||\n (chain[0] === 'produces' && /^produces\\s+event\\b/.test(nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? ''));\n const propertyName = textBefore.trimStart().split(/\\s+/)[0];\n const reservedProperty = (chain[0] === 'command' && ['reads', 'authorize', 'produces'].includes(propertyName)) ||\n (chain[0] === 'event' && propertyName === 'tag') ||\n (['trigger', 'when', 'every', 'at'].includes(chain[0]) && ['description', 'file', 'reads', 'produces', 'invokes'].includes(propertyName));\n const optionalPrefix = (match: RegExpMatchArray | null) => match !== null && 'optional'.startsWith(match[1]);\n const afterPropertyType = propertyOwner && !reservedProperty && optionalPrefix(textBefore.match(/^\\s*@?[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+(\\w*)$/));\n const afterQueryType = (chain[0] === 'query' && optionalPrefix(textBefore.match(/^\\s*(?:by|filter)\\s+[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+(\\w*)$/))) ||\n optionalPrefix(textBefore.match(/^\\s*query\\s+[A-Za-z_]\\w*\\s*=>\\s*(?:observable\\s+)?[\\w.]+(?:\\[\\])?\\s+(\\w*)$/));\n const eventPropertyOwner = chain[0] === 'event' || (chain[0] === 'produces' && /^produces\\s+event\\b/.test(nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? ''));\n const subjectModifier = eventPropertyOwner && !reservedProperty ? textBefore.match(/^\\s*@?[a-z_]\\w*\\s+([\\w.]+)\\s+(\\w*)$/) : null;\n const subjectConcept = symbols.concepts.find(concept => concept.name === subjectModifier?.[1]);\n const subjectType = subjectConcept?.primitive ?? subjectModifier?.[1];\n const subjectTarget = (subjectType === 'String' || subjectType === 'Uuid' || (subjectType === 'Int' && subjectConcept !== undefined)) &&\n !subjectConcept?.attributes.some(attribute => ['pii', 'personal', 'secret', 'sensitive'].includes(attribute.replace(/^@/, '')));\n const afterSubjectType = subjectModifier !== null && subjectTarget && 'subject'.startsWith(subjectModifier[2]);\n const keyModifier = chain[0] === 'readmodel' ? textBefore.match(/^\\s*@?[a-z_]\\w*\\s+[\\w.]+\\s+(\\w*)$/) : null;\n const modifierEntries = [\n ...(keyModifier && 'key'.startsWith(keyModifier[1]) ? [{ label: 'key', insertText: 'key', documentation: 'Declares a required scalar read-model key part. Explicit keys replace inference. Supply every part by name when looking up one instance.' }] : []),\n ...((afterPropertyType || afterQueryType) && !/=>\\s*observable\\s+$/.test(textBefore) ? items.optionalTypeItems : []),\n ...(afterSubjectType ? [{ label: 'subject', insertText: 'subject', documentation: 'One required scalar event data-subject identity; not pii or secret. Report-only lineage metadata (PLAY0270), no ESM or provider output yet.' }] : []),\n ];\n if (modifierEntries.length > 0) return { kind: 'entries', entries: modifierEntries };\n\n if (/\\bauthorize\\s+[\\w\\s]*$/.test(textBefore) || chain[0] === 'authorize') {\n return { kind: 'policies' };\n }\n if (/\\bwhen\\s+\\w*$/.test(textBefore) && chain.includes('reaction')) {\n return { kind: 'triggers' };\n }\n if (/\\bon\\s+\\w*$/.test(textBefore) && chain.includes('constraint')) {\n return { kind: 'events' };\n }\n if (/\\binvokes\\s+\\w*$/.test(textBefore) && chain.includes('reaction')) {\n return { kind: 'commands' };\n }\n if (/\\b(?:on|unique\\s+event)\\s+\\w*$/.test(textBefore) && chain[0] === 'constraint') {\n return { kind: 'events' };\n }\n if (/\\bproduces\\s+\\w*$/.test(textBefore)) {\n return { kind: 'producesTargets' };\n }\n if (/\\bnavigate\\s+to\\s+\\w*$/.test(textBefore)) {\n return { kind: 'screens' };\n }\n if (chain[0] === 'specification') {\n if (/^\\s*when\\s+query\\s+[\\w.]*$/.test(textBefore)) return { kind: 'queries' };\n const step = textBefore.match(/^\\s*(given|when|then)\\s+\\w*$/);\n if (step) return { kind: 'entries', entries: items.specificationStepItems[step[1] as 'given' | 'when' | 'then'] };\n }\n if (/\\b(?:via|then)\\s+query\\s+[\\w.]*$/.test(textBefore)) {\n return { kind: 'queries' };\n }\n if (\n (chain[0] === 'event' || chain[0] === 'command' || chain[0] === 'type') &&\n /^\\s+[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)\n ) {\n return { kind: 'types' };\n }\n if (chain[0] === 'query' && /^\\s+(?:by|filter)\\s+[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)) {\n return { kind: 'types' };\n }\n\n const enclosingLine = nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent);\n if (enclosingLine && /^produces\\s+operation\\b/.test(enclosingLine)) return { kind: 'entries', entries: items.operationItems };\n if (enclosingLine && /^produces\\s+event\\b/.test(enclosingLine)) {\n if (/^\\s+@?[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)) return { kind: 'types' };\n return { kind: 'entries', entries: chain.includes('command') ? [...items.inlineEventItems, productionRouteItem] : items.inlineEventItems };\n }\n if (enclosingLine && RULE_LINE_PATTERN.test(enclosingLine)) {\n return { kind: 'entries', entries: items.ruleItems };\n }\n\n const headers = enclosingHeaders(lines, fences, lineIndex, effectiveIndent);\n if (chain[0] === 'for' && chain.includes('seed')) return { kind: 'events' };\n const entries = completionEntriesFor(chain, { headers, document: lines });\n const expansion = chain[0] === 'command' ? structureCompletion(lines, lineIndex, ' '.repeat(effectiveIndent), '', symbols) : null;\n return { kind: 'entries', entries: expansion ? [expansionEntry(expansion.text, effectiveIndent), ...entries] : entries };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"completion-planner.js","names":["scope.sampleRowItems","scope.sampleShapeItems","items.moduleItems","items.featureItems","items.sliceItemsFor","items.typeItems","items.commandItems","items.eventItems","scope.readModelItems","scope.reducerItems","scope.formItems","scope.contributeItems","scope.behaviorItems","scope.personaItems","items.applicationContextItems","scope.profileIdentityItems","items.identityItems","scope.authenticationItems","scope.onboardingItems","scope.inviteMemberItems","scope.legalTermsItems","scope.emailItems","scope.seedItems","scope.themeItems","scope.uiProfileItems","scope.profileRootTemplateItems","scope.profileAppearanceItems","scope.profileSampleDataItems","scope.sampleDataItems","scope.outcomeItems","scope.layoutItems","scope.navigationItems","scope.toolbarItems","items.stateMachineItems","items.stateItems","items.workflowItems","items.operationItems","items.operationPhaseItems","items.producesItems","items.handlerItems","items.implementationItems","items.operationImplementationItems","items.queryItems","items.performerItems","items.constraintItems","items.reactionItems","items.invocationItems","items.triggerItems","items.reactionTriggerItems","items.specificationItems","items.policyItems","items.validateItems","items.actionItems","items.tableItems","scope.templateItems","items.screenItems","items.actionSubjectValueItems","items.actionSubjectItems","items.guardedActionItems","items.actionArgumentItems","items.interactionChoiceItems","items.interactionActionItems","items.refusalItems","items.namedRuleImplementationItems","items.commandRuleItems","items.optionalTypeItems","items.specificationStepItems","items.inlineEventItems","items.ruleItems","productionRouteItem","RULE_LINE_PATTERN","document","keyword","line","singularDeclarations","topLevelItems","item","header","relative","text","index","indent","indentOf","construct","chain","where","sampleRowItems","sampleShapeItems","subLanguage","getSubLanguage","purposeItems","moduleScopeItems","featureScopeItems","sliceItemsFor","conceptItems","typeItems","commandItems","eventItems","readModelItems","reducerItems","formItems","contributeItems","behaviorItems","personaItems","applicationContextItems","profileIdentityItems","identityItems","authenticationItems","onboardingItems","inviteMemberItems","legalTermsItems","emailItems","seedItems","themeItems","uiProfileItems","profileRootTemplateItems","profileAppearanceItems","profileSampleDataItems","sampleDataItems","outcomeItems","layoutItems","navigationItems","toolbarItems","stateMachineItems","stateItems","workflowItems","operationItems","operationPhaseItems","producesItems","handlerItems","implementationItems","operationImplementationItems","queryItems","performerItems","constraintItems","reactionItems","invocationItems","triggerItems","reactionTriggerItems","specificationItems","policyItems","validateItems","actionItems","tableItems","templateItems","screenItems","candidate","scanDocument","lines","fences","fenceMap","lineIndex","withoutComment","textBefore","marker","generationChain","enclosingChain","inConcept","nearestEnclosingLine","generationEntries","generationCompletions","scope","category","continuationEntries","continuationResponseCompletions","symbols","responseEntries","exampleCompletions","responseCompletions","readEntries","commandReadCompletions","keyEntries","readModelKeyCompletions","dependencyEntries","dependencyTargetCompletions","importPath","refusal","refusalContext","member","contextVariableMatch","currentLine","effectiveIndent","subjectHeader","suffix","actionSubjectValueItems","actionSubjectItems","parentIndent","guarded","parent","guardedActionItems","actionArgumentItems","interactionChoiceItems","interactionActionItems","refusalItems","ruleContext","namedRuleContext","namedRuleImplementationItems","commandRuleItems","propertyOwner","propertyName","reservedProperty","match","afterPropertyType","afterQueryType","subjectModifier","subjectConcept","concept","subjectType","subjectTarget","attribute","afterSubjectType","keyModifier","modifierEntries","optionalTypeItems","step","specificationStepItems","enclosingLine","inlineEventItems","ruleItems","headers","enclosingHeaders","entries","expansion","structureCompletion"],"sources":["../../completion-planner.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { enclosingChain, enclosingHeaders, fenceMap, indentOf, nearestEnclosingLine, withoutComment } from './document-context';\nimport { refusalContext } from './refusal-context';\nimport { generationCompletions } from './generation-completions';\nimport { namedRuleContext } from './named-rule-context';\nimport { continuationResponseCompletions } from './continuation-responses';\nimport { responseCompletions } from './response-completions';\nimport { dependencyTargetCompletions } from './dependency-completions';\nimport { exampleCompletions } from './example-authoring';\nimport { DocumentSymbols, scanDocument } from './symbols';\nimport { structureCompletion } from './structure-completions';\nimport { getSubLanguage } from './sub-language-registry';\nimport * as items from './completion-items';\nimport * as scope from './scope-items';\nimport { CompletionEntry } from './completion-items';\nimport { purposeItems } from './purpose-items';\nimport { readModelKeyCompletions } from './read-model-key-completions';\nimport { commandReadCompletions } from './command-read-completions';\n\n// Matches a validation rule line ending in \"rule <Name>\" (optionally followed by a\n// message clause) - both the command form (\"<property> rule <Name>\") and the\n// concept implied-subject form (\"rule <Name>\"). Its first word is the property\n// name, not \"rule\", so it can't be recognized through the chain[0] keyword switch\n// the way \"on <EventType>\" or \"handler\" are - hence the dedicated regex check.\nconst productionRouteItem = { label: 'stream', insertText: 'stream ${1:Source.Stream}', documentation: 'Replace the whole command route for this event production. ESM v10.' };\n\nconst RULE_LINE_PATTERN = /(?:^|\\s)rule\\s+[A-Za-z_]\\w*(?:\\s+severity\\s+(?:information|warning|error))?(?:\\s+message\\s+.*)?$/;\n\nexport type CompletionPlan =\n | { kind: 'none' }\n | { kind: 'entries'; entries: CompletionEntry[] }\n | { kind: 'contextVariables'; replaceLength: number }\n | { kind: 'playFiles'; replaceLength: number }\n | { kind: 'policies' }\n | { kind: 'events' }\n | { kind: 'triggers' }\n | { kind: 'commands' }\n | { kind: 'producesTargets' }\n | { kind: 'screens' }\n | { kind: 'queries' }\n | { kind: 'types' };\n\n// What the position sits inside, beyond the keyword chain: the whole header of each enclosing block, so a\n// slice's type and a template's kind are known, and the document's own lines, so a declaration that may\n// appear once is not offered again.\nexport interface CompletionScope {\n headers: readonly string[];\n document: readonly string[];\n}\n\nconst declaredIn = (document: readonly string[], keyword: string) => document.some(line => new RegExp(`^${keyword}\\\\b`).test(line));\n\nfunction topLevelEntries(document: readonly string[]): CompletionEntry[] {\n const singularDeclarations = ['domain', 'authentication', 'onboarding', 'identity', 'context'];\n return items.topLevelItems.filter(item => !singularDeclarations.includes(item.label) || !declaredIn(document, item.label));\n}\n\nconst isTemplate = (header: string | undefined) => /^(?:screen|dialog)\\s+template\\b/.test(header ?? '');\n\n// A whole block as one completion entry. Continuation lines are indented relative to the line it is inserted on,\n// which is how the editors indent a multi-line snippet.\nfunction expansionEntry(text: string, indent: number): CompletionEntry {\n const relative = text.split('\\n').map((line, index) => (index === 0 ? line : line.slice(Math.min(indent, indentOf(line))))).join('\\n');\n const label = text.split('\\n')[0].trim();\n return { label, insertText: relative.replace(/[$}\\\\]/g, '\\\\$&'), documentation: 'Expands the whole block from what the command and its events declare.' };\n}\n\nexport function completionEntriesFor(chain: string[], where: CompletionScope = { headers: [], document: [] }): CompletionEntry[] {\n const construct = chain[0];\n if (construct === undefined || construct === 'domain') return topLevelEntries(where.document);\n if (chain.includes('sample') && !chain.includes('ui')) {\n if (construct === 'row') return scope.sampleRowItems;\n if (chain[1] === 'row' && /^[A-Za-z_]\\w*$/.test(where.headers[0] ?? construct)) return scope.sampleShapeItems;\n }\n const subLanguage = getSubLanguage(construct);\n if (subLanguage) return subLanguage.completions ?? [];\n const header = where.headers[0];\n switch (construct) {\n case 'purpose':\n return purposeItems;\n case 'module':\n return items.moduleItems;\n case 'feature':\n return items.featureItems;\n case 'slice':\n return items.sliceItemsFor(header?.split(/\\s+/)[1]);\n case 'concept':\n return /:\\s*Enum\\b/.test(header ?? '') ? [...items.conceptItems.filter(item => item.label !== 'validate checksum'), { label: 'enum member (numbered)', insertText: '${1:value} = ${2:0}', documentation: 'Every member must declare a unique int32 number. Keep published numbers unchanged; specifications name members, not numbers.' }] : items.conceptItems.filter(item => item.label !== 'validate checksum' || /:\\s*String\\b/.test(header ?? ''));\n case 'type':\n return items.typeItems;\n case 'command':\n return items.commandItems;\n case 'public':\n case 'event':\n return items.eventItems;\n case 'readmodel':\n return scope.readModelItems;\n case 'reducer':\n return scope.reducerItems;\n case 'form':\n return scope.formItems;\n case 'contribute':\n return scope.contributeItems;\n case 'behavior':\n return scope.behaviorItems;\n case 'persona':\n return scope.personaItems;\n case 'context':\n return items.applicationContextItems;\n case 'identity':\n return chain.includes('ui') ? scope.profileIdentityItems : items.identityItems;\n case 'authentication':\n return scope.authenticationItems;\n case 'onboarding':\n return scope.onboardingItems;\n case 'invite':\n return scope.inviteMemberItems;\n case 'legal':\n return scope.legalTermsItems;\n case 'emails':\n return scope.emailItems;\n case 'seed':\n return scope.seedItems;\n case 'theme':\n return scope.themeItems;\n case 'ui':\n return scope.uiProfileItems;\n case 'root':\n return chain.includes('ui') ? scope.profileRootTemplateItems : [];\n case 'appearance':\n return chain.includes('ui') ? scope.profileAppearanceItems : [];\n case 'sample':\n return chain.includes('ui') ? scope.profileSampleDataItems : scope.sampleDataItems;\n case 'shape':\n return chain[1] === 'sample' ? scope.sampleShapeItems : [];\n case 'on':\n case 'success':\n case 'failure':\n case 'confirm':\n return scope.outcomeItems;\n case 'layout':\n return scope.layoutItems;\n case 'navigation':\n return scope.navigationItems;\n case 'toolbar':\n return scope.toolbarItems;\n case 'statemachine':\n return items.stateMachineItems;\n case 'state':\n return items.stateItems;\n case 'workflow':\n return items.workflowItems;\n case 'system':\n return items.operationItems.filter(item => item.label === 'description');\n case 'operation':\n return items.operationItems;\n case 'execute':\n case 'compensate':\n return items.operationPhaseItems;\n case 'produces':\n return chain.includes('command') ? [...items.producesItems, productionRouteItem] : items.producesItems;\n case 'handler':\n return items.handlerItems;\n case 'implementation':\n return chain[1] === 'handler' ? items.implementationItems : ['execute', 'compensate'].includes(chain[1]) ? items.operationImplementationItems : [];\n case 'reads':\n return [{ label: 'by parts', insertText: 'by\\n ${1:part} = ${2:source}\\n ${3:part} = ${4:source}', documentation: 'Supply every composite read-model key part by name.' }];\n case 'query':\n return items.queryItems;\n case 'performer':\n return items.performerItems;\n case 'constraint':\n return items.constraintItems;\n case 'reaction':\n return items.reactionItems;\n case 'invokes':\n return chain.includes('reaction') ? items.invocationItems : [];\n case 'trigger':\n return items.triggerItems;\n case 'when':\n case 'every':\n case 'at':\n return chain.includes('reaction') ? items.reactionTriggerItems : [];\n case 'specification':\n return items.specificationItems;\n case 'policy':\n return items.policyItems;\n case 'validate':\n return chain.includes('concept') && /:\\s*String\\b/.test(where.headers.find(header => /^concept\\s/.test(header)) ?? '')\n ? [...items.validateItems, { label: 'checksum', insertText: 'checksum ${1|luhn,mod11,mod97|}', documentation: 'Exact trailing check digits over preceding ASCII digits. String concepts only; also validates inputs and stored values.' }]\n : items.validateItems;\n case 'action':\n return items.actionItems;\n case 'table':\n case 'summary':\n return items.tableItems;\n case 'screen':\n return isTemplate(header) ? scope.templateItems : items.screenItems;\n case 'dialog':\n return scope.templateItems;\n default:\n if (isTemplate(where.headers.find(candidate => isTemplate(candidate)))) return scope.templateItems;\n // Sections inside a screen expose the screen vocabulary.\n if (chain.includes('screen') || construct === 'section') return items.screenItems;\n if (chain.includes('produces')) return chain.includes('command') ? [...items.producesItems, productionRouteItem] : items.producesItems;\n return [];\n }\n}\n\n// Decides what to complete at a position, without any editor dependency — the\n// Monaco service and the VSCode extension both materialize the plan into items.\nexport function planCompletions(\n lines: string[],\n lineIndex: number,\n textBefore: string,\n symbols: DocumentSymbols = scanDocument(lines),\n): CompletionPlan {\n const fences = fenceMap(lines);\n if (fences[lineIndex] || withoutComment(textBefore).length < textBefore.length) return { kind: 'none' };\n if (/^\\s*concept\\s+[\\p{L}\\p{Mn}\\p{Nd}\\p{Pc}]+\\s*:\\s*\\w+\\s+(?:(?:pii|personal|secret)\\s+)*\\w*$/u.test(textBefore)) {\n return { kind: 'entries', entries: ['pii', 'secret'].filter(marker => !new RegExp(`\\\\b${marker}\\\\b`).test(textBefore)).map(marker => ({ label: marker, insertText: marker, documentation: marker === 'pii' ? 'personal data (GDPR Art. 4(1)); renders Chronicle [PII]' : 'Operational secret; renders [Encrypted] + [NotAudited].' })) };\n }\n const generationChain = enclosingChain(lines, fences, lineIndex, indentOf(textBefore));\n const inConcept = generationChain[0] === 'concept';\n if (generationChain[0] === 'generate' && generationChain[1] === 'concept' && /^generate\\s+rule\\s+/.test((nearestEnclosingLine(lines, fences, lineIndex, indentOf(textBefore)) ?? '').trim())) {\n return { kind: 'entries', entries: [\n { label: 'file', insertText: 'file ${1:Generator.cs}', documentation: 'The sole ValueGeneration source. Receives the provider-bound GenerationContext (Now, Tenant); returns String.' },\n { label: 'csharp', insertText: '```csharp\\n${1:return value;}\\n```', documentation: 'The sole ValueGeneration body. Reference execution requires fixtures; it never invokes this code.' },\n ] };\n }\n const generationEntries = inConcept || (generationChain[0] === 'validate' && generationChain[1] === 'concept') ? generationCompletions(lines, lineIndex, textBefore) : null;\n if (generationEntries !== null) return { kind: 'entries', entries: generationEntries };\n if (inConcept && /^\\s*(?:secret|sensitive|@sensitive)\\s+scope\\s+\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: ['subject', 'namespace', 'global'].map(scope => ({ label: scope, insertText: scope, documentation: 'Explicit secret encryption scope.' })) };\n }\n if (inConcept && /^\\s*(?:pii|personal|@pii)\\s+special\\s+\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: ['racialOrEthnicOrigin', 'politicalOpinions', 'religiousOrPhilosophicalBeliefs', 'tradeUnionMembership', 'genetic', 'biometric', 'health', 'sexLifeOrSexualOrientation'].map(category => ({ label: category, insertText: category, documentation: 'GDPR Art. 9(1) special category.' })) };\n }\n const continuationEntries = continuationResponseCompletions(lines, lineIndex, textBefore, symbols);\n if (continuationEntries !== null) return { kind: 'entries', entries: continuationEntries };\n const responseEntries = exampleCompletions(lines, lineIndex, textBefore) ?? responseCompletions(lines, lineIndex, textBefore, scanDocument(lines));\n if (responseEntries !== null) return { kind: 'entries', entries: responseEntries };\n const readEntries = commandReadCompletions(lines, lineIndex, textBefore, symbols);\n if (readEntries !== null) return { kind: 'entries', entries: readEntries };\n const keyEntries = readModelKeyCompletions(lines, lineIndex, textBefore, symbols);\n if (keyEntries !== null) return { kind: 'entries', entries: keyEntries };\n const dependencyEntries = dependencyTargetCompletions(lines, lineIndex, textBefore, symbols);\n if (dependencyEntries !== null) return { kind: 'entries', entries: dependencyEntries };\n\n // Inside the quotes of a file import, what is wanted is a path - replacing what has been typed so far.\n const importPath = textBefore.match(/^\\s*import\\s+\"([^\"]*)$/);\n if (importPath) {\n return { kind: 'playFiles', replaceLength: importPath[1].length };\n }\n\n // A quote or a slash only asks for a completion inside an import path.\n if (/[\"/]$/.test(textBefore)) return { kind: 'none' };\n\n const refusal = refusalContext(lines, lineIndex, indentOf(lines[lineIndex] ?? textBefore));\n if (/\\$refusal\\.\\w*$/.test(textBefore)) {\n return { kind: 'entries', entries: refusal === undefined ? [] : ['reason', 'message', ...(/^on\\s+refused\\s+by\\s+constraint(?:\\s|$)/.test(refusal) ? ['constraint'] : [])].map(member => ({ label: member, insertText: member, documentation: 'String refusal value in branch event mappings; executable from ESM v19. Constraint is available only in a by constraint branch.' })) };\n }\n const contextVariableMatch = textBefore.match(/\\$[\\w.]*$/);\n if (contextVariableMatch) {\n return { kind: 'contextVariables', replaceLength: contextVariableMatch[0].length };\n }\n\n const currentLine = lines[lineIndex] ?? '';\n const effectiveIndent =\n textBefore.trim().length === 0 ? textBefore.length : indentOf(currentLine);\n const chain = enclosingChain(lines, fences, lineIndex, effectiveIndent);\n if (chain.includes('screen')) {\n const subjectHeader = /^\\s*(?:action\\s+(?:\"(?:[^\"\\\\]|\\\\.)*\"|\\$strings\\.[\\w.]+|[\\w.]+)|item\\s+\\w+\\s+action\\s+[\\w.]+)\\s+/;\n if (subjectHeader.test(textBefore)) {\n const suffix = textBefore.replace(subjectHeader, '');\n if (/^for\\s+\\w*$/.test(suffix)) return { kind: 'entries', entries: items.actionSubjectValueItems };\n if (/^(?:f|fo|for)?$/.test(suffix)) return { kind: 'entries', entries: items.actionSubjectItems };\n }\n let parentIndent = effectiveIndent;\n let guarded = false;\n for (let index = lineIndex - 1; index >= 0; index--) {\n if (fences[index]) continue;\n const parent = withoutComment(lines[index]);\n if (parent.trim().length === 0 || indentOf(parent) >= parentIndent) continue;\n parentIndent = indentOf(parent);\n if (/^\\s*action\\s+(?:\"|\\$strings\\.)/.test(parent)) { guarded = true; break; }\n if (/^\\s*screen\\b/.test(parent)) break;\n }\n if (guarded) {\n if (/^\\s*(?:when\\b.*|otherwise)\\s+execute\\s+[\\w.]*$/.test(textBefore)) return { kind: 'commands' };\n if (chain[0] === 'action') return { kind: 'entries', entries: items.guardedActionItems };\n if (['when', 'otherwise'].includes(chain[0])) {\n const parent = nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? '';\n return { kind: 'entries', entries: /\\bexecute\\s+[\\w.]+$/.test(parent) ? items.actionArgumentItems : [] };\n }\n }\n }\n if (['on', 'when', 'otherwise'].includes(chain[0])) {\n let parentIndent = effectiveIndent;\n for (let index = lineIndex - 1; index >= 0; index--) {\n if (fences[index]) continue;\n const parent = withoutComment(lines[index]);\n if (parent.trim().length === 0 || indentOf(parent) >= parentIndent) continue;\n parentIndent = indentOf(parent);\n if (/^\\s*on\\s+(?:click|double click|select|change)\\s*$/.test(parent)) {\n return { kind: 'entries', entries: chain[0] === 'on' ? items.interactionChoiceItems : items.interactionActionItems };\n }\n if (/^\\s*(?:screen|behavior|specification|reaction)\\b/.test(parent)) break;\n }\n }\n if (chain[0] === 'on' && refusal !== undefined) return { kind: 'entries', entries: items.refusalItems };\n const ruleContext = namedRuleContext(lines, lineIndex, effectiveIndent);\n if (ruleContext === 'implementation') return { kind: 'entries', entries: items.namedRuleImplementationItems };\n if (ruleContext === 'rule') return { kind: 'entries', entries: items.commandRuleItems };\n\n const propertyOwner = ['public', 'event', 'command', 'type', 'readmodel', 'trigger', 'when', 'every', 'at'].includes(chain[0]) ||\n (chain[0] === 'produces' && /^produces\\s+event\\b/.test(nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? ''));\n const propertyName = textBefore.trimStart().split(/\\s+/)[0];\n const reservedProperty = (chain[0] === 'command' && ['reads', 'authorize', 'produces'].includes(propertyName)) ||\n (chain[0] === 'event' && propertyName === 'tag') ||\n (['trigger', 'when', 'every', 'at'].includes(chain[0]) && ['description', 'file', 'reads', 'produces', 'invokes'].includes(propertyName));\n const optionalPrefix = (match: RegExpMatchArray | null) => match !== null && 'optional'.startsWith(match[1]);\n const afterPropertyType = propertyOwner && !reservedProperty && optionalPrefix(textBefore.match(/^\\s*@?[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+(\\w*)$/));\n const afterQueryType = (chain[0] === 'query' && optionalPrefix(textBefore.match(/^\\s*(?:by|filter)\\s+[a-z_]\\w*\\s+[\\w.]+(?:\\[\\])?\\s+(\\w*)$/))) ||\n optionalPrefix(textBefore.match(/^\\s*query\\s+[A-Za-z_]\\w*\\s*=>\\s*(?:observable\\s+)?[\\w.]+(?:\\[\\])?\\s+(\\w*)$/));\n const eventPropertyOwner = chain[0] === 'event' || (chain[0] === 'produces' && /^produces\\s+event\\b/.test(nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent) ?? ''));\n const subjectModifier = eventPropertyOwner && !reservedProperty ? textBefore.match(/^\\s*@?[a-z_]\\w*\\s+([\\w.]+)\\s+(\\w*)$/) : null;\n const subjectConcept = symbols.concepts.find(concept => concept.name === subjectModifier?.[1]);\n const subjectType = subjectConcept?.primitive ?? subjectModifier?.[1];\n const subjectTarget = (subjectType === 'String' || subjectType === 'Uuid' || (subjectType === 'Int' && subjectConcept !== undefined)) &&\n !subjectConcept?.attributes.some(attribute => ['pii', 'personal', 'secret', 'sensitive'].includes(attribute.replace(/^@/, '')));\n const afterSubjectType = subjectModifier !== null && subjectTarget && 'subject'.startsWith(subjectModifier[2]);\n const keyModifier = chain[0] === 'readmodel' ? textBefore.match(/^\\s*@?[a-z_]\\w*\\s+[\\w.]+\\s+(\\w*)$/) : null;\n const modifierEntries = [\n ...(keyModifier && 'key'.startsWith(keyModifier[1]) ? [{ label: 'key', insertText: 'key', documentation: 'Declares a required scalar read-model key part. Explicit keys replace inference. Supply every part by name when looking up one instance.' }] : []),\n ...((afterPropertyType || afterQueryType) && !/=>\\s*observable\\s+$/.test(textBefore) ? items.optionalTypeItems : []),\n ...(afterSubjectType ? [{ label: 'subject', insertText: 'subject', documentation: 'One required scalar event data-subject identity; not pii or secret. Report-only lineage metadata (PLAY0270), no ESM or provider output yet.' }] : []),\n ];\n if (modifierEntries.length > 0) return { kind: 'entries', entries: modifierEntries };\n\n if (/\\bauthorize\\s+[\\w\\s]*$/.test(textBefore) || chain[0] === 'authorize') {\n return { kind: 'policies' };\n }\n if (/\\bwhen\\s+\\w*$/.test(textBefore) && chain.includes('reaction')) {\n return { kind: 'triggers' };\n }\n if (/\\bon\\s+\\w*$/.test(textBefore) && chain.includes('constraint')) {\n return { kind: 'events' };\n }\n if (/\\binvokes\\s+\\w*$/.test(textBefore) && chain.includes('reaction')) {\n return { kind: 'commands' };\n }\n if (/\\b(?:on|unique\\s+event)\\s+\\w*$/.test(textBefore) && chain[0] === 'constraint') {\n return { kind: 'events' };\n }\n if (/\\bproduces\\s+\\w*$/.test(textBefore)) {\n return { kind: 'producesTargets' };\n }\n if (/\\bnavigate\\s+to\\s+\\w*$/.test(textBefore)) {\n return { kind: 'screens' };\n }\n if (chain[0] === 'specification') {\n if (/^\\s*when\\s+query\\s+[\\w.]*$/.test(textBefore)) return { kind: 'queries' };\n const step = textBefore.match(/^\\s*(given|when|then)\\s+\\w*$/);\n if (step) return { kind: 'entries', entries: items.specificationStepItems[step[1] as 'given' | 'when' | 'then'] };\n }\n if (/\\b(?:via|then)\\s+query\\s+[\\w.]*$/.test(textBefore)) {\n return { kind: 'queries' };\n }\n if (\n (chain[0] === 'event' || chain[0] === 'command' || chain[0] === 'type') &&\n /^\\s+[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)\n ) {\n return { kind: 'types' };\n }\n if (chain[0] === 'query' && /^\\s+(?:by|filter)\\s+[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)) {\n return { kind: 'types' };\n }\n\n const enclosingLine = nearestEnclosingLine(lines, fences, lineIndex, effectiveIndent);\n if (enclosingLine && /^produces\\s+operation\\b/.test(enclosingLine)) return { kind: 'entries', entries: items.operationItems };\n if (enclosingLine && /^produces\\s+event\\b/.test(enclosingLine)) {\n if (/^\\s+@?[a-z_]\\w*\\s+[\\w[\\]?]*$/.test(textBefore)) return { kind: 'types' };\n return { kind: 'entries', entries: chain.includes('command') ? [...items.inlineEventItems, productionRouteItem] : items.inlineEventItems };\n }\n if (enclosingLine && RULE_LINE_PATTERN.test(enclosingLine)) {\n return { kind: 'entries', entries: items.ruleItems };\n }\n\n const headers = enclosingHeaders(lines, fences, lineIndex, effectiveIndent);\n if (chain[0] === 'for' && chain.includes('seed')) return { kind: 'events' };\n const entries = completionEntriesFor(chain, { headers, document: lines });\n const expansion = chain[0] === 'command' ? structureCompletion(lines, lineIndex, ' '.repeat(effectiveIndent), '', symbols) : null;\n return { kind: 'entries', entries: expansion ? [expansionEntry(expansion.text, effectiveIndent), ...entries] : entries };\n}\n"],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ import"./_virtual/_virtual/_rolldown/runtime.js";import{exampleDeclarationItems
|
|
|
26
26
|
accent "\${2:#4f46e5}"
|
|
27
27
|
corners \${3|sharp,default,round|}
|
|
28
28
|
font \${4:inter}`,documentation:`How the application looks regardless of the shell: colour scheme, accent colour, corners and font.`},{label:`new screens use template`,insertText:"new screens use template ${1:Template}",documentation:`The template a new screen starts from in the designer.`},{label:`sample data`,insertText:`sample data
|
|
29
|
-
active \${1:Pack}`,documentation:`The sample data the whole application previews with, chosen once here.`}],S=[{label:`option`,insertText:"option ${1:name} ${2:value}",documentation:"Sets one of the shell's own options, for example `option navigationMode slim`. The value is a word, a quoted string, a number, `true` or `false`."}],C=[{label:`color scheme`,insertText:"color scheme ${1|light,dark,system|}",documentation:`The colour scheme of the application: light, dark or follow the system.`},{label:`accent`,insertText:'accent "${1:#4f46e5}"',documentation:`The accent colour of the application.`},{label:`corners`,insertText:"corners ${1|sharp,default,round|}",documentation:`How rounded the application's corners are: sharp, default or round.`},{label:`font`,insertText:"font ${1|inter,ibm-plex-sans,source-serif-4,system-ui|}",documentation:`The font of the application, an id from Scene's font catalog.`}],w=[{label:`name`,insertText:'name "${1:Name}"',documentation:`What the application calls itself in its shell; leave it out to take the application's own name.`},{label:`logo initials`,insertText:'logo initials "${1:AB}"',documentation:`A logo drawn from one or two characters.`},{label:`logo icon`,insertText:"logo icon ${1|box,layers,home,users,receipt,package,database,palette|}",documentation:`A logo drawn from one of Scene's logo icons.`},{label:`logo image`,insertText:'logo image "data:image/svg+xml;base64,${1}"',documentation:`A logo image (PNG, JPG, SVG or WebP, up to 400 KB) as a base64 data URI.`},{label:`show name`,insertText:"show name ${1|true,false|}",documentation:`Whether the name is drawn beside the logo.`}],T=[{label:`active`,insertText:"active ${1:Pack}",documentation:"The active sample data pack of the whole application: one declared in the document, or `blueprint <id>`."},{label:`shape maps to`,insertText:"shape ${1:Shape} maps to ${2:ReadModel}",documentation:`Maps a sample data shape to the read model it supplies rows for.`},{label:`bind`,insertText:"bind ${1:ReadModel} to ${2:Pack}",documentation:`A rare override: binds one read model to a pack.`}],E=[{label:`title`,insertText:'title "${1:Title}"',documentation:`The display title of the pack.`},{label:`locale`,insertText:"locale ${1:en-GB}",documentation:`The BCP 47 locale tag of the data.`},{label:`shape`,insertText:'shape ${1:ReadModel}\n row\n ${2:field} = ${3:"value"}',documentation:`The rows for one shape: the read model of the same name, or the one a ui profile maps it to.`}],D=[{label:`row`,insertText:'row\n ${1:field} = ${2:"value"}',documentation:`One row of the shape.`}],O=[{label:`slot`,insertText:"${1:slot}",documentation:`A named slot of the shell.`},{label:`slot contributes`,insertText:"${1:slot} contributes ${2:Name}",documentation:"A slot other declarations contribute to, such as `navigation contributes Navigation`."},{label:`navigation topbar`,insertText:'navigation ${1|topbar,sidebar|}\n logo image "${2:/logo.svg}" title "${3:Application}"\n item ${4:id} title "${5:Title}" target ${6:Module}',documentation:`The application's navigation region: a logo and items that target a module or feature.`},{label:`arrangement`,insertText:`arrangement flow
|
|
29
|
+
active \${1:Pack}`,documentation:`The sample data the whole application previews with, chosen once here.`}],S=[{label:`option`,insertText:"option ${1:name} ${2:value}",documentation:"Sets one of the shell's own options, for example `option navigationMode slim`. The value is a word, a quoted string, a number, `true` or `false`."}],C=[{label:`color scheme`,insertText:"color scheme ${1|light,dark,system|}",documentation:`The colour scheme of the application: light, dark or follow the system.`},{label:`accent`,insertText:'accent "${1:#4f46e5}"',documentation:`The accent colour of the application.`},{label:`corners`,insertText:"corners ${1|sharp,default,round|}",documentation:`How rounded the application's corners are: sharp, default or round.`},{label:`font`,insertText:"font ${1|inter,ibm-plex-sans,source-serif-4,system-ui|}",documentation:`The font of the application, an id from Scene's font catalog.`}],w=[{label:`name`,insertText:'name "${1:Name}"',documentation:`What the application calls itself in its shell; leave it out to take the application's own name.`},{label:`logo initials`,insertText:'logo initials "${1:AB}"',documentation:`A logo drawn from one or two characters.`},{label:`logo icon`,insertText:"logo icon ${1|box,layers,home,users,receipt,package,database,palette|}",documentation:`A logo drawn from one of Scene's logo icons.`},{label:`logo image`,insertText:'logo image "data:image/svg+xml;base64,${1}"',documentation:`A logo image (PNG, JPG, SVG or WebP, up to 400 KB) as a base64 data URI.`},{label:`show name`,insertText:"show name ${1|true,false|}",documentation:`Whether the name is drawn beside the logo.`}],T=[{label:`active`,insertText:"active ${1:Pack}",documentation:"The active sample data pack of the whole application: one declared in the document, or `blueprint <id>`."},{label:`shape maps to`,insertText:"shape ${1:Shape} maps to ${2:ReadModel}",documentation:`Maps a sample data shape to the read model it supplies rows for.`},{label:`bind`,insertText:"bind ${1:ReadModel} to ${2:Pack}",documentation:`A rare override: binds one read model to a pack.`}],E=[{label:`title`,insertText:'title "${1:Title}"',documentation:`The display title of the pack.`},{label:`locale`,insertText:"locale ${1:en-GB}",documentation:`The BCP 47 locale tag of the data.`},{label:`shape`,insertText:'shape ${1:ReadModel}\n row\n ${2:field} = ${3:"value"}',documentation:`The rows for one shape: the read model of the same name, or the one a ui profile maps it to.`}],D=[{label:`row`,insertText:'row\n ${1:field} = ${2:"value"}',documentation:`One row of the shape.`}],O=[{label:`field`,insertText:'${1:field} = ${2:"value"}',documentation:`One literal field of the row.`},{label:`collection`,insertText:'${1:field}\n row\n ${2:field} = ${3:"value"}',documentation:`Explicit rows for a composite collection. A bare field without rows is an empty list.`}],k=[{label:`slot`,insertText:"${1:slot}",documentation:`A named slot of the shell.`},{label:`slot contributes`,insertText:"${1:slot} contributes ${2:Name}",documentation:"A slot other declarations contribute to, such as `navigation contributes Navigation`."},{label:`navigation topbar`,insertText:'navigation ${1|topbar,sidebar|}\n logo image "${2:/logo.svg}" title "${3:Application}"\n item ${4:id} title "${5:Title}" target ${6:Module}',documentation:`The application's navigation region: a logo and items that target a module or feature.`},{label:`arrangement`,insertText:`arrangement flow
|
|
30
30
|
column
|
|
31
|
-
\${1:slot}`,documentation:`How the slots are placed.`}],
|
|
31
|
+
\${1:slot}`,documentation:`How the slots are placed.`}],A=[{label:`button`,insertText:'button ${1:id} title "${2:Title}" slice ${3:Module.Feature.Slice}',documentation:`A button that invokes a State Change slice. The slice names the command and the dialog it opens over the page.`},{label:`button (with emphasis)`,insertText:'button ${1:id} title "${2:Title}" slice ${3:Module.Feature.Slice} emphasis ${4|primary,secondary,quiet|} icon ${5:icon}',documentation:`A toolbar button with an emphasis and an icon.`},{label:`item action`,insertText:"item ${1:name} action ${2:Command}",documentation:`A toolbar entry that runs a command.`},{label:`item navigate`,insertText:"item ${1:name} navigate to ${2:Screen}",documentation:`A toolbar entry that navigates to a screen.`}],j=[{label:`logo`,insertText:'logo image "${1:/logo.svg}" title "${2:Application}"',documentation:`The application logo. Declared once, in a layout.`},{label:`item`,insertText:'item ${1:id} title "${2:Title}" target ${3:Module.Feature}',documentation:"A navigation item with a title, an optional `icon`, a `target` module or feature and an optional rendering `slot`. Sidebar items may nest `item` lines."},{label:`item (with slot)`,insertText:'item ${1:id} title "${2:Title}" icon ${3:icon} target ${4:Module.Feature} slot ${5:content}',documentation:`A navigation item that renders its target into a named layout slot.`}],M=[{label:`fits slot`,insertText:"fits slot ${1:content}",documentation:`The slot of the shell the template fits.`},...k,{label:`on`,insertText:"on ${1|enter,leave,load,unload|}\n ${2:refresh query}",documentation:`Wires what happens on an interaction.`}];export{d as actionStepItems,m as authenticationItems,u as behaviorItems,l as contributeItems,v as emailItems,a as featureScopeItems,c as formItems,g as inviteMemberItems,k as layoutItems,_ as legalTermsItems,i as moduleScopeItems,j as navigationItems,h as onboardingItems,f as outcomeItems,p as personaItems,C as profileAppearanceItems,w as profileIdentityItems,S as profileRootTemplateItems,T as profileSampleDataItems,o as readModelItems,s as reducerItems,E as sampleDataItems,O as sampleRowItems,D as sampleShapeItems,y as seedItems,M as templateItems,b as themeItems,A as toolbarItems,x as uiProfileItems};
|
|
32
32
|
//# sourceMappingURL=scope-items.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-items.js","names":["interactionItems","moduleScopeItems","purposeReferenceItem","documentationItem","exampleDeclarationItems","featureScopeItems","readModelItems","reducerItems","formItems","contributeItems","behaviorItems","actionStepItems","outcomeItems","personaItems","authenticationItems","onboardingItems","inviteMemberItems","legalTermsItems","emailItems","seedItems","themeItems","uiProfileItems","profileRootTemplateItems","profileAppearanceItems","profileIdentityItems","profileSampleDataItems","sampleDataItems","sampleShapeItems","layoutItems","toolbarItems","navigationItems","templateItems"],"sources":["../../scope-items.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { CompletionEntry } from './completion-items';\nimport { exampleDeclarationItems } from './example-declaration-items';\nimport { documentationItem } from './documentation-item';\nimport { purposeReferenceItem } from './purpose-items';\n\nconst interactions = ['click', 'double click', 'select', 'submit', 'change', 'load', 'unload', 'enter', 'leave'];\n\nconst interactionItems: CompletionEntry[] = [\n { label: 'on', insertText: 'on ${1|click,select,submit,change,load,unload,enter,leave|}\\n ${2:execute command}', documentation: 'Wires what happens on an interaction - a click, a submit, entering or leaving the screen.' },\n { label: 'uses', insertText: 'uses ${1:Behavior}', documentation: 'Attaches a named behavior declared at the top level.' },\n];\n\nexport const moduleScopeItems: CompletionEntry[] = [\n purposeReferenceItem,\n documentationItem,\n ...exampleDeclarationItems,\n { label: 'description', insertText: 'description \"${1:what this module is for}\"', documentation: 'A human-readable description.' },\n { label: 'authorize', insertText: 'authorize ${1:PolicyName}', documentation: 'Policies that must pass for everything in the module.' },\n { label: 'depends on', insertText: 'depends on ${1:Name}', documentation: 'Declares an allowed module or feature dependency. Opts this container into independent explicit-reference checks.' },\n { label: 'import \"…\"', insertText: 'import \"${1:*/*.play}\"', documentation: 'Imports `.play` files into this module — their top level is the module\\'s body.' },\n { label: 'feature', insertText: 'feature ${1:Name}\\n ', documentation: 'Groups related slices into a vertical feature.' },\n { label: 'screen', insertText: 'screen ${1:Name}\\n data ${2:ReadModel} via query ${3:QueryName}', documentation: 'Declares a module-level UI screen.' },\n { label: 'screen template', insertText: 'screen template ${1:Name}\\n fits slot ${2:content}\\n\\n ${3:slot}', documentation: 'Declares a reusable screen shape that fits a slot of the shell.' },\n { label: 'dialog template', insertText: 'dialog template ${1:Name}\\n ${2:body}\\n ${3:actions}', documentation: 'Declares a reusable dialog shape that opens over the shell.' },\n { label: 'form', insertText: 'form ${1:Name} for ${2:Command}\\n field ${3:property} label \"${4:Label}\"', documentation: 'Declares a form bound to a command.' },\n { label: 'contribute', insertText: 'contribute to ${1:Navigation}\\n navigate to ${2:Screen}\\n label \"${3:Label}\"', documentation: 'Contributes an entry to a slot of the shell, such as navigation.' },\n { label: 'navigation sidebar extends', insertText: 'navigation ${1|sidebar,topbar|} ${2|extends,overrides,inherits|}\\n item ${3:id} title \"${4:Title}\" target ${5:Module.Feature}', documentation: 'Changes a navigation region for this module: `extends` adds items after the application\\'s, `overrides` replaces them, `inherits` shows the application\\'s.' },\n ...interactionItems,\n];\n\nexport const featureScopeItems: CompletionEntry[] = [\n purposeReferenceItem,\n documentationItem,\n ...exampleDeclarationItems,\n { label: 'description', insertText: 'description \"${1:what this feature is for}\"', documentation: 'A human-readable description.' },\n { label: 'authorize', insertText: 'authorize ${1:PolicyName}', documentation: 'Policies that must pass for everything in the feature.' },\n { label: 'depends on', insertText: 'depends on ${1:Name}', documentation: 'Declares an allowed module or feature dependency. Sibling feature names resolve before module names.' },\n { label: 'import \"…\"', insertText: 'import \"${1:*.play}\"', documentation: 'Imports `.play` files into this feature — their top level is the feature\\'s body.' },\n { label: 'feature', insertText: 'feature ${1:Name}\\n ', documentation: 'Declares a nested sub-feature.' },\n { label: 'slice StateChange', insertText: 'slice StateChange ${1:Name}\\n ', documentation: 'A command → events flow; something that changes the system.' },\n { label: 'slice StateView', insertText: 'slice StateView ${1:Name}\\n ', documentation: 'A query + projection + screen; something that reads the system.' },\n { label: 'slice Automation', insertText: 'slice Automation ${1:Name}\\n ', documentation: 'A reaction or reducer; something that runs when something happens.' },\n { label: 'slice Translate', insertText: 'slice Translate ${1:Name}\\n ', documentation: 'A capture; converts external data into events.' },\n { label: 'contribute', insertText: 'contribute to ${1:Navigation}\\n navigate to ${2:Screen}\\n label \"${3:Label}\"', documentation: 'Contributes an entry to a slot of the shell, such as navigation.' },\n ...interactionItems,\n];\n\nexport const readModelItems: CompletionEntry[] = [\n documentationItem,\n { label: 'passive', insertText: 'passive', documentation: 'Opts into replay on demand for command decisions, not materialization. Default active, never inferred; queries and screens cannot observe this model.' },\n { label: 'description', insertText: 'description \"${1:what one instance holds}\"', documentation: 'A human-readable description.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the file this read model is realized by.' },\n { label: 'property', insertText: '${1:property} ${2:Type}', documentation: 'A property of the read model — a name and a type reference.' },\n];\n\nexport const reducerItems: CompletionEntry[] = [\n { label: 'from', insertText: 'from ${1:Source.Stream}', documentation: 'Observe matching routed facts only, without filtering stream ids. ESM v10.' },\n { label: 'description', insertText: 'description \"${1:what the reducer does}\"', documentation: 'A human-readable description.' },\n { label: 'on', insertText: 'on ${1:EventType}\\n ```csharp\\n ${2}\\n ```', documentation: 'A rule applied when the event occurs, in code or from a file.' },\n];\n\nexport const formItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:input surface intent}\"', documentation: 'Report-only description of the form.' },\n { label: 'populate via query', insertText: 'populate via query ${1:Query} by ${2:parameter}', documentation: 'Fills the form from a query before it is shown.' },\n { label: 'populate from item', insertText: 'populate from item', documentation: 'Fills the form from the item the screen was opened for.' },\n { label: 'field', insertText: 'field ${1:property} label \"${2:Label}\"', documentation: 'A form field bound to a command property.' },\n ...interactionItems,\n];\n\nexport const contributeItems: CompletionEntry[] = [\n { label: 'navigate to', insertText: 'navigate to ${1:Screen}', documentation: 'The screen the entry opens.' },\n { label: 'label', insertText: 'label \"${1:Label}\"', documentation: 'The text of the entry.' },\n { label: 'order', insertText: 'order ${1:10}', documentation: 'Where the entry sits among the others; lower comes first.' },\n];\n\nexport const behaviorItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:what the behavior does}\"', documentation: 'A human-readable description.' },\n { label: 'parameter', insertText: 'parameter ${1:name} ${2:Type}', documentation: 'A value the behavior is given where it is attached.' },\n { label: 'order', insertText: 'order ${1:10}', documentation: 'The order behaviors attached to the same element run in.' },\n { label: 'on', insertText: 'on ${1|click,select,submit,change,load,unload,enter,leave|}\\n ${2:execute command}', documentation: 'Wires what happens on an interaction.' },\n];\n\nconst step = (label: string, insertText: string, documentation: string): CompletionEntry => ({ label, insertText, documentation });\n\n// What an interaction does, and what can follow an action's outcome.\nexport const actionStepItems: CompletionEntry[] = [\n step('execute', 'execute ${1:command}', 'Runs a command.'),\n step('navigate to', 'navigate to ${1:Screen}', 'Opens a screen.'),\n step('open', 'open ${1:Dialog}', 'Opens a dialog.'),\n step('close', 'close', 'Closes the dialog.'),\n step('refresh', 'refresh ${1:query}', 'Reloads a query.'),\n step('set', 'set ${1:name} ${2:value}', 'Sets a value.'),\n step('notify', 'notify ${1|info,warning,error|} \"${2:message}\"', 'Shows a notification.'),\n step('confirm', 'confirm ${1:message}\\n on success\\n ${2:execute command}', 'Asks before continuing.'),\n step('raise', 'raise ${1:Trigger}', 'Raises a trigger.'),\n];\n\nexport const outcomeItems: CompletionEntry[] = [\n step('on success', 'on success\\n ${1:notify info \"Done\"}', 'What happens when it succeeds.'),\n step('on failure', 'on failure\\n ${1:notify error \"Failed\"}', 'What happens when it fails.'),\n ...actionStepItems,\n];\n\nexport const personaItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:who they are}\"', documentation: 'A human-readable description.' },\n { label: 'goal', insertText: 'goal \"${1:what they want to achieve}\"', documentation: 'A goal of this persona.' },\n { label: 'policy', insertText: 'policy ${1:PolicyName}', documentation: 'A policy this persona holds.' },\n { label: 'position', insertText: 'position ${1:0} ${2:0}', documentation: 'Where the persona sits on the personas canvas.' },\n { label: 'size', insertText: 'size ${1:300} ${2:180}', documentation: 'How big the persona is on the personas canvas.' },\n];\n\nexport const authenticationItems: CompletionEntry[] = [\n { label: 'provider', insertText: 'provider ${1:Name}', documentation: 'An identity provider.' },\n { label: 'provider (named)', insertText: 'provider ${1:Kind} name ${2:Name}', documentation: 'An identity provider of a kind, under its own name.' },\n];\n\nexport const onboardingItems: CompletionEntry[] = [\n { label: 'signup (creates tenant)', insertText: 'signup open creates tenant', documentation: 'Turns self-signup on; a sign-up creates a tenant for the person signing up.' },\n { label: 'signup (joins tenant)', insertText: 'signup open joins tenant', documentation: 'Turns self-signup on; a sign-up asks to join an existing tenant.' },\n { label: 'invite tenant', insertText: 'invite tenant as ${1:Persona}', documentation: 'An invitation that creates a tenant for the invitee, who becomes the persona.' },\n { label: 'invite member', insertText: 'invite member\\n by ${1:Persona}\\n grant ${2:Persona}', documentation: 'An invitation into an existing tenant: who may send it and which personas it grants.' },\n { label: 'legal terms', insertText: 'legal terms\\n file ${1:Legal/terms-of-service.md}', documentation: 'The documents a newcomer must accept, as files relative to the repository root.' },\n { label: 'offering', insertText: 'offering ${1:Name}', documentation: 'The offering a new tenant starts on. The name is opaque to the model.' },\n { label: 'emails', insertText: 'emails\\n invitation file ${1:Emails/invitation.html}\\n welcome file ${2:Emails/welcome.html}\\n images ${3:Emails/Images}', documentation: 'A template file per onboarding email and the folder holding their images.' },\n];\n\nexport const inviteMemberItems: CompletionEntry[] = [\n { label: 'by', insertText: 'by ${1:Persona}', documentation: 'The personas that may send the invitation.' },\n { label: 'grant', insertText: 'grant ${1:Persona}', documentation: 'The personas the invitation gives the invitee.' },\n];\n\nexport const legalTermsItems: CompletionEntry[] = [\n { label: 'file', insertText: 'file ${1:Legal/terms-of-service.md}', documentation: 'A document the newcomer must accept, relative to the repository root.' },\n];\n\nexport const emailItems: CompletionEntry[] = [\n { label: 'invitation', insertText: 'invitation file ${1:Emails/invitation.html}', documentation: 'The template of the invitation email.' },\n { label: 'welcome', insertText: 'welcome file ${1:Emails/welcome.html}', documentation: 'The template of the welcome email.' },\n { label: 'signupDeclined', insertText: 'signupDeclined file ${1:Emails/signup-declined.html}', documentation: 'The template of the email sent when a sign-up is declined.' },\n { label: 'images', insertText: 'images ${1:Emails/Images}', documentation: 'The folder, relative to the repository root, holding the images the templates use.' },\n];\n\nexport const seedItems: CompletionEntry[] = [\n { label: 'for', insertText: 'for ${1:\"event-source-id\"}\\n ${2:EventType}\\n ${3:property} = ${4:value}', documentation: 'Events to seed for one event source id.' },\n { label: 'position', insertText: 'position ${1:0} ${2:0}', documentation: 'Where the seed data sits on the seed data canvas.' },\n];\n\nexport const themeItems: CompletionEntry[] = [\n { label: 'compatible with', insertText: 'compatible with ${1:Package}', documentation: 'A component package the theme is compatible with.' },\n];\n\nexport const uiProfileItems: CompletionEntry[] = [\n { label: 'target platform', insertText: 'target platform ${1:web}', documentation: 'The platforms the profile is for.' },\n { label: 'target size', insertText: 'target size ${1|compact,regular|}', documentation: 'The screen sizes the profile is for.' },\n { label: 'packages', insertText: 'packages\\n ${1:Package}', documentation: 'The component packages the profile uses.' },\n { label: 'layout', insertText: 'layout ${1:Layout}', documentation: 'The layout of the profile. Older form of `root template`; prefer `root template`.' },\n { label: 'theme', insertText: 'theme ${1:Theme}', documentation: 'The theme of the profile, named by a declared theme\\'s identifier.' },\n { label: 'theme (package-provided)', insertText: 'theme \"${1:Scene Default Light}\"', documentation: 'The theme of the profile, named by the quoted display name of a theme a component package provides.' },\n { label: 'root template', insertText: 'root template ${1:Template}\\n option ${2:navigationMode} ${3:slim}', documentation: 'The template the whole application is drawn in: an own template, or `blueprint <Blueprint> <Name> [version \"<range>\"]`, with the options the shell exposes.' },\n { label: 'root template blueprint', insertText: 'root template blueprint ${1:Blueprint} ${2:Template} version \"${3:^1.0}\"', documentation: 'A root template a blueprint package ships, pinned to a semver range.' },\n { label: 'identity', insertText: 'identity\\n name \"${1:Name}\"\\n logo ${2|initials \"AB\",icon box,image \"data:image/svg+xml;base64,...\"|}\\n show name ${3|true,false|}', documentation: 'What the application calls itself and the mark it wears: `name`, `logo initials|icon|image` and `show name`.' },\n { label: 'appearance', insertText: 'appearance\\n color scheme ${1|light,dark,system|}\\n accent \"${2:#4f46e5}\"\\n corners ${3|sharp,default,round|}\\n font ${4:inter}', documentation: 'How the application looks regardless of the shell: colour scheme, accent colour, corners and font.' },\n { label: 'new screens use template', insertText: 'new screens use template ${1:Template}', documentation: 'The template a new screen starts from in the designer.' },\n { label: 'sample data', insertText: 'sample data\\n active ${1:Pack}', documentation: 'The sample data the whole application previews with, chosen once here.' },\n];\n\nexport const profileRootTemplateItems: CompletionEntry[] = [\n { label: 'option', insertText: 'option ${1:name} ${2:value}', documentation: 'Sets one of the shell\\'s own options, for example `option navigationMode slim`. The value is a word, a quoted string, a number, `true` or `false`.' },\n];\n\nexport const profileAppearanceItems: CompletionEntry[] = [\n { label: 'color scheme', insertText: 'color scheme ${1|light,dark,system|}', documentation: 'The colour scheme of the application: light, dark or follow the system.' },\n { label: 'accent', insertText: 'accent \"${1:#4f46e5}\"', documentation: 'The accent colour of the application.' },\n { label: 'corners', insertText: 'corners ${1|sharp,default,round|}', documentation: 'How rounded the application\\'s corners are: sharp, default or round.' },\n { label: 'font', insertText: 'font ${1|inter,ibm-plex-sans,source-serif-4,system-ui|}', documentation: 'The font of the application, an id from Scene\\'s font catalog.' },\n];\n\nexport const profileIdentityItems: CompletionEntry[] = [\n { label: 'name', insertText: 'name \"${1:Name}\"', documentation: 'What the application calls itself in its shell; leave it out to take the application\\'s own name.' },\n { label: 'logo initials', insertText: 'logo initials \"${1:AB}\"', documentation: 'A logo drawn from one or two characters.' },\n { label: 'logo icon', insertText: 'logo icon ${1|box,layers,home,users,receipt,package,database,palette|}', documentation: 'A logo drawn from one of Scene\\'s logo icons.' },\n { label: 'logo image', insertText: 'logo image \"data:image/svg+xml;base64,${1}\"', documentation: 'A logo image (PNG, JPG, SVG or WebP, up to 400 KB) as a base64 data URI.' },\n { label: 'show name', insertText: 'show name ${1|true,false|}', documentation: 'Whether the name is drawn beside the logo.' },\n];\n\nexport const profileSampleDataItems: CompletionEntry[] = [\n { label: 'active', insertText: 'active ${1:Pack}', documentation: 'The active sample data pack of the whole application: one declared in the document, or `blueprint <id>`.' },\n { label: 'shape maps to', insertText: 'shape ${1:Shape} maps to ${2:ReadModel}', documentation: 'Maps a sample data shape to the read model it supplies rows for.' },\n { label: 'bind', insertText: 'bind ${1:ReadModel} to ${2:Pack}', documentation: 'A rare override: binds one read model to a pack.' },\n];\n\nexport const sampleDataItems: CompletionEntry[] = [\n { label: 'title', insertText: 'title \"${1:Title}\"', documentation: 'The display title of the pack.' },\n { label: 'locale', insertText: 'locale ${1:en-GB}', documentation: 'The BCP 47 locale tag of the data.' },\n { label: 'shape', insertText: 'shape ${1:ReadModel}\\n row\\n ${2:field} = ${3:\"value\"}', documentation: 'The rows for one shape: the read model of the same name, or the one a ui profile maps it to.' },\n];\n\nexport const sampleShapeItems: CompletionEntry[] = [\n { label: 'row', insertText: 'row\\n ${1:field} = ${2:\"value\"}', documentation: 'One row of the shape.' },\n];\n\nexport const layoutItems: CompletionEntry[] = [\n { label: 'slot', insertText: '${1:slot}', documentation: 'A named slot of the shell.' },\n { label: 'slot contributes', insertText: '${1:slot} contributes ${2:Name}', documentation: 'A slot other declarations contribute to, such as `navigation contributes Navigation`.' },\n { label: 'navigation topbar', insertText: 'navigation ${1|topbar,sidebar|}\\n logo image \"${2:/logo.svg}\" title \"${3:Application}\"\\n item ${4:id} title \"${5:Title}\" target ${6:Module}', documentation: 'The application\\'s navigation region: a logo and items that target a module or feature.' },\n { label: 'arrangement', insertText: 'arrangement flow\\n column\\n ${1:slot}', documentation: 'How the slots are placed.' },\n];\n\nexport const toolbarItems: CompletionEntry[] = [\n { label: 'button', insertText: 'button ${1:id} title \"${2:Title}\" slice ${3:Module.Feature.Slice}', documentation: 'A button that invokes a State Change slice. The slice names the command and the dialog it opens over the page.' },\n { label: 'button (with emphasis)', insertText: 'button ${1:id} title \"${2:Title}\" slice ${3:Module.Feature.Slice} emphasis ${4|primary,secondary,quiet|} icon ${5:icon}', documentation: 'A toolbar button with an emphasis and an icon.' },\n { label: 'item action', insertText: 'item ${1:name} action ${2:Command}', documentation: 'A toolbar entry that runs a command.' },\n { label: 'item navigate', insertText: 'item ${1:name} navigate to ${2:Screen}', documentation: 'A toolbar entry that navigates to a screen.' },\n];\n\nexport const navigationItems: CompletionEntry[] = [\n { label: 'logo', insertText: 'logo image \"${1:/logo.svg}\" title \"${2:Application}\"', documentation: 'The application logo. Declared once, in a layout.' },\n { label: 'item', insertText: 'item ${1:id} title \"${2:Title}\" target ${3:Module.Feature}', documentation: 'A navigation item with a title, an optional `icon`, a `target` module or feature and an optional rendering `slot`. Sidebar items may nest `item` lines.' },\n { label: 'item (with slot)', insertText: 'item ${1:id} title \"${2:Title}\" icon ${3:icon} target ${4:Module.Feature} slot ${5:content}', documentation: 'A navigation item that renders its target into a named layout slot.' },\n];\n\nexport const templateItems: CompletionEntry[] = [\n { label: 'fits slot', insertText: 'fits slot ${1:content}', documentation: 'The slot of the shell the template fits.' },\n ...layoutItems,\n { label: 'on', insertText: 'on ${1|enter,leave,load,unload|}\\n ${2:refresh query}', documentation: 'Wires what happens on an interaction.' },\n];\n\nexport const interactionNames = interactions;\n"],"mappings":"A,gPAUA,MAAMA,EAAsC,CACxC,CAAE,MAAO,KAAM,WAAY,wFAAyF,cAAe,2FAA4F,EAC/N,CAAE,MAAO,OAAQ,WAAY,qBAAsB,cAAe,sDAAuD,CAC7H,EAEaC,EAAsC,CAC/CC,EACAC,EACA,GAAGC,EACH,CAAE,MAAO,cAAe,WAAY,6CAA8C,cAAe,+BAAgC,EACjI,CAAE,MAAO,YAAa,WAAY,4BAA6B,cAAe,uDAAwD,EACtI,CAAE,MAAO,aAAc,WAAY,uBAAwB,cAAe,mHAAoH,EAC9L,CAAE,MAAO,aAAc,WAAY,yBAA0B,cAAe,gFAAkF,EAC9J,CAAE,MAAO,UAAW,WAAY;MAA2B,cAAe,gDAAiD,EAC3H,CAAE,MAAO,SAAU,WAAY,qEAAsE,cAAe,oCAAqC,EACzJ,CAAE,MAAO,kBAAmB,WAAY;;;gBAA0E,cAAe,iEAAkE,EACnM,CAAE,MAAO,kBAAmB,WAAY,6DAA8D,cAAe,6DAA8D,EACnL,CAAE,MAAO,OAAQ,WAAY,8EAA+E,cAAe,qCAAsC,EACjK,CAAE,MAAO,aAAc,WAAY,qFAAsF,cAAe,kEAAmE,EAC3M,CAAE,MAAO,6BAA8B,WAAY,mIAAoI,cAAe,2JAA8J,EACpW,GAAGJ,CACP,EAEaK,EAAuC,CAChDH,EACAC,EACA,GAAGC,EACH,CAAE,MAAO,cAAe,WAAY,8CAA+C,cAAe,+BAAgC,EAClI,CAAE,MAAO,YAAa,WAAY,4BAA6B,cAAe,wDAAyD,EACvI,CAAE,MAAO,aAAc,WAAY,uBAAwB,cAAe,sGAAuG,EACjL,CAAE,MAAO,aAAc,WAAY,uBAAwB,cAAe,kFAAoF,EAC9J,CAAE,MAAO,UAAW,WAAY;MAA2B,cAAe,gCAAiC,EAC3G,CAAE,MAAO,oBAAqB,WAAY;MAAqC,cAAe,6DAA8D,EAC5J,CAAE,MAAO,kBAAmB,WAAY;MAAmC,cAAe,iEAAkE,EAC5J,CAAE,MAAO,mBAAoB,WAAY;MAAoC,cAAe,oEAAqE,EACjK,CAAE,MAAO,kBAAmB,WAAY;MAAmC,cAAe,gDAAiD,EAC3I,CAAE,MAAO,aAAc,WAAY,qFAAsF,cAAe,kEAAmE,EAC3M,GAAGJ,CACP,EAEaM,EAAoC,CAC7CH,EACA,CAAE,MAAO,UAAW,WAAY,UAAW,cAAe,uJAAwJ,EAClN,CAAE,MAAO,cAAe,WAAY,6CAA8C,cAAe,+BAAgC,EACjI,CAAE,MAAO,OAAQ,WAAY,iBAAkB,cAAe,gDAAiD,EAC/G,CAAE,MAAO,WAAY,WAAY,0BAA2B,cAAe,6DAA8D,CAC7I,EAEaI,EAAkC,CAC3C,CAAE,MAAO,OAAQ,WAAY,0BAA2B,cAAe,4EAA6E,EACpJ,CAAE,MAAO,cAAe,WAAY,2CAA4C,cAAe,+BAAgC,EAC/H,CAAE,MAAO,KAAM,WAAY,sDAAuD,cAAe,+DAAgE,CACrK,EAEaC,EAA+B,CACxC,CAAE,MAAO,cAAe,WAAY,0CAA2C,cAAe,sCAAuC,EACrI,CAAE,MAAO,qBAAsB,WAAY,kDAAmD,cAAe,iDAAkD,EAC/J,CAAE,MAAO,qBAAsB,WAAY,qBAAsB,cAAe,yDAA0D,EAC1I,CAAE,MAAO,QAAS,WAAY,yCAA0C,cAAe,2CAA4C,EACnI,GAAGR,CACP,EAEaS,EAAqC,CAC9C,CAAE,MAAO,cAAe,WAAY,0BAA2B,cAAe,6BAA8B,EAC5G,CAAE,MAAO,QAAS,WAAY,qBAAsB,cAAe,wBAAyB,EAC5F,CAAE,MAAO,QAAS,WAAY,gBAAiB,cAAe,2DAA4D,CAC9H,EAEaC,EAAmC,CAC5C,CAAE,MAAO,cAAe,WAAY,4CAA6C,cAAe,+BAAgC,EAChI,CAAE,MAAO,YAAa,WAAY,gCAAiC,cAAe,qDAAsD,EACxI,CAAE,MAAO,QAAS,WAAY,gBAAiB,cAAe,0DAA2D,EACzH,CAAE,MAAO,KAAM,WAAY,wFAAyF,cAAe,uCAAwC,CAC/K,EAEM,MAAQ,EAAe,EAAoB,KAA4C,CAAE,QAAO,aAAY,eAAc,GAGnHC,EAAqC,CAC9C,KAAK,UAAW,uBAAwB,iBAAiB,EACzD,KAAK,cAAe,0BAA2B,iBAAiB,EAChE,KAAK,OAAQ,mBAAoB,iBAAiB,EAClD,KAAK,QAAS,QAAS,oBAAoB,EAC3C,KAAK,UAAW,qBAAsB,kBAAkB,EACxD,KAAK,MAAO,2BAA4B,eAAe,EACvD,KAAK,SAAU,iDAAkD,uBAAuB,EACxF,KAAK,UAAW;;+BAAsE,yBAAyB,EAC/G,KAAK,QAAS,qBAAsB,mBAAmB,CAC3D,EAEaC,EAAkC,CAC3C,KAAK,aAAc;8BAA2C,gCAAgC,EAC9F,KAAK,aAAc;iCAA8C,6BAA6B,EAC9F,GAAGD,CACP,EAEaE,EAAkC,CAC3C,CAAE,MAAO,cAAe,WAAY,kCAAmC,cAAe,+BAAgC,EACtH,CAAE,MAAO,OAAQ,WAAY,wCAAyC,cAAe,yBAA0B,EAC/G,CAAE,MAAO,SAAU,WAAY,yBAA0B,cAAe,8BAA+B,EACvG,CAAE,MAAO,WAAY,WAAY,yBAA0B,cAAe,gDAAiD,EAC3H,CAAE,MAAO,OAAQ,WAAY,yBAA0B,cAAe,gDAAiD,CAC3H,EAEaC,EAAyC,CAClD,CAAE,MAAO,WAAY,WAAY,qBAAsB,cAAe,uBAAwB,EAC9F,CAAE,MAAO,mBAAoB,WAAY,oCAAqC,cAAe,qDAAsD,CACvJ,EAEaC,EAAqC,CAC9C,CAAE,MAAO,0BAA2B,WAAY,6BAA8B,cAAe,6EAA8E,EAC3K,CAAE,MAAO,wBAAyB,WAAY,2BAA4B,cAAe,kEAAmE,EAC5J,CAAE,MAAO,gBAAiB,WAAY,gCAAiC,cAAe,+EAAgF,EACtK,CAAE,MAAO,gBAAiB,WAAY;;yBAA8D,cAAe,sFAAuF,EAC1M,CAAE,MAAO,cAAe,WAAY;0CAAwD,cAAe,iFAAkF,EAC7L,CAAE,MAAO,WAAY,WAAY,qBAAsB,cAAe,uEAAwE,EAC9I,CAAE,MAAO,SAAU,WAAY;;;gCAAqI,cAAe,2EAA4E,CACnQ,EAEaC,EAAuC,CAChD,CAAE,MAAO,KAAM,WAAY,kBAAmB,cAAe,4CAA6C,EAC1G,CAAE,MAAO,QAAS,WAAY,qBAAsB,cAAe,gDAAiD,CACxH,EAEaC,EAAqC,CAC9C,CAAE,MAAO,OAAQ,WAAY,sCAAuC,cAAe,uEAAwE,CAC/J,EAEaC,EAAgC,CACzC,CAAE,MAAO,aAAc,WAAY,8CAA+C,cAAe,uCAAwC,EACzI,CAAE,MAAO,UAAW,WAAY,wCAAyC,cAAe,oCAAqC,EAC7H,CAAE,MAAO,iBAAkB,WAAY,uDAAwD,cAAe,4DAA6D,EAC3K,CAAE,MAAO,SAAU,WAAY,4BAA6B,cAAe,oFAAqF,CACpK,EAEaC,EAA+B,CACxC,CAAE,MAAO,MAAO,WAAY,qFAAsF,cAAe,yCAA0C,EAC3K,CAAE,MAAO,WAAY,WAAY,yBAA0B,cAAe,mDAAoD,CAClI,EAEaC,EAAgC,CACzC,CAAE,MAAO,kBAAmB,WAAY,+BAAgC,cAAe,mDAAoD,CAC/I,EAEaC,EAAoC,CAC7C,CAAE,MAAO,kBAAmB,WAAY,2BAA4B,cAAe,mCAAoC,EACvH,CAAE,MAAO,cAAe,WAAY,oCAAqC,cAAe,sCAAuC,EAC/H,CAAE,MAAO,WAAY,WAAY;mBAA8B,cAAe,0CAA2C,EACzH,CAAE,MAAO,SAAU,WAAY,qBAAsB,cAAe,mFAAoF,EACxJ,CAAE,MAAO,QAAS,WAAY,mBAAoB,cAAe,mEAAqE,EACtI,CAAE,MAAO,2BAA4B,WAAY,mCAAoC,cAAe,qGAAsG,EAC1M,CAAE,MAAO,gBAAiB,WAAY,wEAAyE,cAAe,6JAA8J,EAC5R,CAAE,MAAO,0BAA2B,WAAY,2EAA4E,cAAe,sEAAuE,EAClN,CAAE,MAAO,WAAY,WAAY;;;iCAA+I,cAAe,8GAA+G,EAC9S,CAAE,MAAO,aAAc,WAAY;;;;sBAA+I,cAAe,oGAAqG,EACtS,CAAE,MAAO,2BAA4B,WAAY,yCAA0C,cAAe,wDAAyD,EACnK,CAAE,MAAO,cAAe,WAAY;uBAAqC,cAAe,wEAAyE,CACrK,EAEaC,EAA8C,CACvD,CAAE,MAAO,SAAU,WAAY,8BAA+B,cAAe,mJAAqJ,CACtO,EAEaC,EAA4C,CACrD,CAAE,MAAO,eAAgB,WAAY,uCAAwC,cAAe,yEAA0E,EACtK,CAAE,MAAO,SAAU,WAAY,wBAAyB,cAAe,uCAAwC,EAC/G,CAAE,MAAO,UAAW,WAAY,oCAAqC,cAAe,qEAAuE,EAC3J,CAAE,MAAO,OAAQ,WAAY,0DAA2D,cAAe,+DAAiE,CAC5K,EAEaC,EAA0C,CACnD,CAAE,MAAO,OAAQ,WAAY,mBAAoB,cAAe,kGAAoG,EACpK,CAAE,MAAO,gBAAiB,WAAY,0BAA2B,cAAe,0CAA2C,EAC3H,CAAE,MAAO,YAAa,WAAY,yEAA0E,cAAe,8CAAgD,EAC3K,CAAE,MAAO,aAAc,WAAY,8CAA+C,cAAe,0EAA2E,EAC5K,CAAE,MAAO,YAAa,WAAY,6BAA8B,cAAe,4CAA6C,CAChI,EAEaC,EAA4C,CACrD,CAAE,MAAO,SAAU,WAAY,mBAAoB,cAAe,0GAA2G,EAC7K,CAAE,MAAO,gBAAiB,WAAY,0CAA2C,cAAe,kEAAmE,EACnK,CAAE,MAAO,OAAQ,WAAY,mCAAoC,cAAe,kDAAmD,CACvI,EAEaC,EAAqC,CAC9C,CAAE,MAAO,QAAS,WAAY,qBAAsB,cAAe,gCAAiC,EACpG,CAAE,MAAO,SAAU,WAAY,oBAAqB,cAAe,oCAAqC,EACxG,CAAE,MAAO,QAAS,WAAY,mEAAoE,cAAe,8FAA+F,CACpN,EAEaC,EAAsC,CAC/C,CAAE,MAAO,MAAO,WAAY,qCAAsC,cAAe,uBAAwB,CAC7G,EAEaC,EAAiC,CAC1C,CAAE,MAAO,OAAQ,WAAY,YAAa,cAAe,4BAA6B,EACtF,CAAE,MAAO,mBAAoB,WAAY,kCAAmC,cAAe,uFAAwF,EACnL,CAAE,MAAO,oBAAqB,WAAY,oJAAqJ,cAAe,wFAA0F,EACxS,CAAE,MAAO,cAAe,WAAY;;oBAAmD,cAAe,2BAA4B,CACtI,EAEaC,EAAkC,CAC3C,CAAE,MAAO,SAAU,WAAY,oEAAqE,cAAe,gHAAiH,EACpO,CAAE,MAAO,yBAA0B,WAAY,0HAA2H,cAAe,gDAAiD,EAC1O,CAAE,MAAO,cAAe,WAAY,qCAAsC,cAAe,sCAAuC,EAChI,CAAE,MAAO,gBAAiB,WAAY,yCAA0C,cAAe,6CAA8C,CACjJ,EAEaC,EAAqC,CAC9C,CAAE,MAAO,OAAQ,WAAY,uDAAwD,cAAe,mDAAoD,EACxJ,CAAE,MAAO,OAAQ,WAAY,6DAA8D,cAAe,yJAA0J,EACpQ,CAAE,MAAO,mBAAoB,WAAY,8FAA+F,cAAe,qEAAsE,CACjO,EAEaC,EAAmC,CAC5C,CAAE,MAAO,YAAa,WAAY,yBAA0B,cAAe,0CAA2C,EACtH,GAAGH,EACH,CAAE,MAAO,KAAM,WAAY,2DAA4D,cAAe,uCAAwC,CAClJ,E"}
|
|
1
|
+
{"version":3,"file":"scope-items.js","names":["interactionItems","moduleScopeItems","purposeReferenceItem","documentationItem","exampleDeclarationItems","featureScopeItems","readModelItems","reducerItems","formItems","contributeItems","behaviorItems","actionStepItems","outcomeItems","personaItems","authenticationItems","onboardingItems","inviteMemberItems","legalTermsItems","emailItems","seedItems","themeItems","uiProfileItems","profileRootTemplateItems","profileAppearanceItems","profileIdentityItems","profileSampleDataItems","sampleDataItems","sampleShapeItems","sampleRowItems","layoutItems","toolbarItems","navigationItems","templateItems"],"sources":["../../scope-items.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { CompletionEntry } from './completion-items';\nimport { exampleDeclarationItems } from './example-declaration-items';\nimport { documentationItem } from './documentation-item';\nimport { purposeReferenceItem } from './purpose-items';\n\nconst interactions = ['click', 'double click', 'select', 'submit', 'change', 'load', 'unload', 'enter', 'leave'];\n\nconst interactionItems: CompletionEntry[] = [\n { label: 'on', insertText: 'on ${1|click,select,submit,change,load,unload,enter,leave|}\\n ${2:execute command}', documentation: 'Wires what happens on an interaction - a click, a submit, entering or leaving the screen.' },\n { label: 'uses', insertText: 'uses ${1:Behavior}', documentation: 'Attaches a named behavior declared at the top level.' },\n];\n\nexport const moduleScopeItems: CompletionEntry[] = [\n purposeReferenceItem,\n documentationItem,\n ...exampleDeclarationItems,\n { label: 'description', insertText: 'description \"${1:what this module is for}\"', documentation: 'A human-readable description.' },\n { label: 'authorize', insertText: 'authorize ${1:PolicyName}', documentation: 'Policies that must pass for everything in the module.' },\n { label: 'depends on', insertText: 'depends on ${1:Name}', documentation: 'Declares an allowed module or feature dependency. Opts this container into independent explicit-reference checks.' },\n { label: 'import \"…\"', insertText: 'import \"${1:*/*.play}\"', documentation: 'Imports `.play` files into this module — their top level is the module\\'s body.' },\n { label: 'feature', insertText: 'feature ${1:Name}\\n ', documentation: 'Groups related slices into a vertical feature.' },\n { label: 'screen', insertText: 'screen ${1:Name}\\n data ${2:ReadModel} via query ${3:QueryName}', documentation: 'Declares a module-level UI screen.' },\n { label: 'screen template', insertText: 'screen template ${1:Name}\\n fits slot ${2:content}\\n\\n ${3:slot}', documentation: 'Declares a reusable screen shape that fits a slot of the shell.' },\n { label: 'dialog template', insertText: 'dialog template ${1:Name}\\n ${2:body}\\n ${3:actions}', documentation: 'Declares a reusable dialog shape that opens over the shell.' },\n { label: 'form', insertText: 'form ${1:Name} for ${2:Command}\\n field ${3:property} label \"${4:Label}\"', documentation: 'Declares a form bound to a command.' },\n { label: 'contribute', insertText: 'contribute to ${1:Navigation}\\n navigate to ${2:Screen}\\n label \"${3:Label}\"', documentation: 'Contributes an entry to a slot of the shell, such as navigation.' },\n { label: 'navigation sidebar extends', insertText: 'navigation ${1|sidebar,topbar|} ${2|extends,overrides,inherits|}\\n item ${3:id} title \"${4:Title}\" target ${5:Module.Feature}', documentation: 'Changes a navigation region for this module: `extends` adds items after the application\\'s, `overrides` replaces them, `inherits` shows the application\\'s.' },\n ...interactionItems,\n];\n\nexport const featureScopeItems: CompletionEntry[] = [\n purposeReferenceItem,\n documentationItem,\n ...exampleDeclarationItems,\n { label: 'description', insertText: 'description \"${1:what this feature is for}\"', documentation: 'A human-readable description.' },\n { label: 'authorize', insertText: 'authorize ${1:PolicyName}', documentation: 'Policies that must pass for everything in the feature.' },\n { label: 'depends on', insertText: 'depends on ${1:Name}', documentation: 'Declares an allowed module or feature dependency. Sibling feature names resolve before module names.' },\n { label: 'import \"…\"', insertText: 'import \"${1:*.play}\"', documentation: 'Imports `.play` files into this feature — their top level is the feature\\'s body.' },\n { label: 'feature', insertText: 'feature ${1:Name}\\n ', documentation: 'Declares a nested sub-feature.' },\n { label: 'slice StateChange', insertText: 'slice StateChange ${1:Name}\\n ', documentation: 'A command → events flow; something that changes the system.' },\n { label: 'slice StateView', insertText: 'slice StateView ${1:Name}\\n ', documentation: 'A query + projection + screen; something that reads the system.' },\n { label: 'slice Automation', insertText: 'slice Automation ${1:Name}\\n ', documentation: 'A reaction or reducer; something that runs when something happens.' },\n { label: 'slice Translate', insertText: 'slice Translate ${1:Name}\\n ', documentation: 'A capture; converts external data into events.' },\n { label: 'contribute', insertText: 'contribute to ${1:Navigation}\\n navigate to ${2:Screen}\\n label \"${3:Label}\"', documentation: 'Contributes an entry to a slot of the shell, such as navigation.' },\n ...interactionItems,\n];\n\nexport const readModelItems: CompletionEntry[] = [\n documentationItem,\n { label: 'passive', insertText: 'passive', documentation: 'Opts into replay on demand for command decisions, not materialization. Default active, never inferred; queries and screens cannot observe this model.' },\n { label: 'description', insertText: 'description \"${1:what one instance holds}\"', documentation: 'A human-readable description.' },\n { label: 'file', insertText: 'file ${1:Path}', documentation: 'Names the file this read model is realized by.' },\n { label: 'property', insertText: '${1:property} ${2:Type}', documentation: 'A property of the read model — a name and a type reference.' },\n];\n\nexport const reducerItems: CompletionEntry[] = [\n { label: 'from', insertText: 'from ${1:Source.Stream}', documentation: 'Observe matching routed facts only, without filtering stream ids. ESM v10.' },\n { label: 'description', insertText: 'description \"${1:what the reducer does}\"', documentation: 'A human-readable description.' },\n { label: 'on', insertText: 'on ${1:EventType}\\n ```csharp\\n ${2}\\n ```', documentation: 'A rule applied when the event occurs, in code or from a file.' },\n];\n\nexport const formItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:input surface intent}\"', documentation: 'Report-only description of the form.' },\n { label: 'populate via query', insertText: 'populate via query ${1:Query} by ${2:parameter}', documentation: 'Fills the form from a query before it is shown.' },\n { label: 'populate from item', insertText: 'populate from item', documentation: 'Fills the form from the item the screen was opened for.' },\n { label: 'field', insertText: 'field ${1:property} label \"${2:Label}\"', documentation: 'A form field bound to a command property.' },\n ...interactionItems,\n];\n\nexport const contributeItems: CompletionEntry[] = [\n { label: 'navigate to', insertText: 'navigate to ${1:Screen}', documentation: 'The screen the entry opens.' },\n { label: 'label', insertText: 'label \"${1:Label}\"', documentation: 'The text of the entry.' },\n { label: 'order', insertText: 'order ${1:10}', documentation: 'Where the entry sits among the others; lower comes first.' },\n];\n\nexport const behaviorItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:what the behavior does}\"', documentation: 'A human-readable description.' },\n { label: 'parameter', insertText: 'parameter ${1:name} ${2:Type}', documentation: 'A value the behavior is given where it is attached.' },\n { label: 'order', insertText: 'order ${1:10}', documentation: 'The order behaviors attached to the same element run in.' },\n { label: 'on', insertText: 'on ${1|click,select,submit,change,load,unload,enter,leave|}\\n ${2:execute command}', documentation: 'Wires what happens on an interaction.' },\n];\n\nconst step = (label: string, insertText: string, documentation: string): CompletionEntry => ({ label, insertText, documentation });\n\n// What an interaction does, and what can follow an action's outcome.\nexport const actionStepItems: CompletionEntry[] = [\n step('execute', 'execute ${1:command}', 'Runs a command.'),\n step('navigate to', 'navigate to ${1:Screen}', 'Opens a screen.'),\n step('open', 'open ${1:Dialog}', 'Opens a dialog.'),\n step('close', 'close', 'Closes the dialog.'),\n step('refresh', 'refresh ${1:query}', 'Reloads a query.'),\n step('set', 'set ${1:name} ${2:value}', 'Sets a value.'),\n step('notify', 'notify ${1|info,warning,error|} \"${2:message}\"', 'Shows a notification.'),\n step('confirm', 'confirm ${1:message}\\n on success\\n ${2:execute command}', 'Asks before continuing.'),\n step('raise', 'raise ${1:Trigger}', 'Raises a trigger.'),\n];\n\nexport const outcomeItems: CompletionEntry[] = [\n step('on success', 'on success\\n ${1:notify info \"Done\"}', 'What happens when it succeeds.'),\n step('on failure', 'on failure\\n ${1:notify error \"Failed\"}', 'What happens when it fails.'),\n ...actionStepItems,\n];\n\nexport const personaItems: CompletionEntry[] = [\n { label: 'description', insertText: 'description \"${1:who they are}\"', documentation: 'A human-readable description.' },\n { label: 'goal', insertText: 'goal \"${1:what they want to achieve}\"', documentation: 'A goal of this persona.' },\n { label: 'policy', insertText: 'policy ${1:PolicyName}', documentation: 'A policy this persona holds.' },\n { label: 'position', insertText: 'position ${1:0} ${2:0}', documentation: 'Where the persona sits on the personas canvas.' },\n { label: 'size', insertText: 'size ${1:300} ${2:180}', documentation: 'How big the persona is on the personas canvas.' },\n];\n\nexport const authenticationItems: CompletionEntry[] = [\n { label: 'provider', insertText: 'provider ${1:Name}', documentation: 'An identity provider.' },\n { label: 'provider (named)', insertText: 'provider ${1:Kind} name ${2:Name}', documentation: 'An identity provider of a kind, under its own name.' },\n];\n\nexport const onboardingItems: CompletionEntry[] = [\n { label: 'signup (creates tenant)', insertText: 'signup open creates tenant', documentation: 'Turns self-signup on; a sign-up creates a tenant for the person signing up.' },\n { label: 'signup (joins tenant)', insertText: 'signup open joins tenant', documentation: 'Turns self-signup on; a sign-up asks to join an existing tenant.' },\n { label: 'invite tenant', insertText: 'invite tenant as ${1:Persona}', documentation: 'An invitation that creates a tenant for the invitee, who becomes the persona.' },\n { label: 'invite member', insertText: 'invite member\\n by ${1:Persona}\\n grant ${2:Persona}', documentation: 'An invitation into an existing tenant: who may send it and which personas it grants.' },\n { label: 'legal terms', insertText: 'legal terms\\n file ${1:Legal/terms-of-service.md}', documentation: 'The documents a newcomer must accept, as files relative to the repository root.' },\n { label: 'offering', insertText: 'offering ${1:Name}', documentation: 'The offering a new tenant starts on. The name is opaque to the model.' },\n { label: 'emails', insertText: 'emails\\n invitation file ${1:Emails/invitation.html}\\n welcome file ${2:Emails/welcome.html}\\n images ${3:Emails/Images}', documentation: 'A template file per onboarding email and the folder holding their images.' },\n];\n\nexport const inviteMemberItems: CompletionEntry[] = [\n { label: 'by', insertText: 'by ${1:Persona}', documentation: 'The personas that may send the invitation.' },\n { label: 'grant', insertText: 'grant ${1:Persona}', documentation: 'The personas the invitation gives the invitee.' },\n];\n\nexport const legalTermsItems: CompletionEntry[] = [\n { label: 'file', insertText: 'file ${1:Legal/terms-of-service.md}', documentation: 'A document the newcomer must accept, relative to the repository root.' },\n];\n\nexport const emailItems: CompletionEntry[] = [\n { label: 'invitation', insertText: 'invitation file ${1:Emails/invitation.html}', documentation: 'The template of the invitation email.' },\n { label: 'welcome', insertText: 'welcome file ${1:Emails/welcome.html}', documentation: 'The template of the welcome email.' },\n { label: 'signupDeclined', insertText: 'signupDeclined file ${1:Emails/signup-declined.html}', documentation: 'The template of the email sent when a sign-up is declined.' },\n { label: 'images', insertText: 'images ${1:Emails/Images}', documentation: 'The folder, relative to the repository root, holding the images the templates use.' },\n];\n\nexport const seedItems: CompletionEntry[] = [\n { label: 'for', insertText: 'for ${1:\"event-source-id\"}\\n ${2:EventType}\\n ${3:property} = ${4:value}', documentation: 'Events to seed for one event source id.' },\n { label: 'position', insertText: 'position ${1:0} ${2:0}', documentation: 'Where the seed data sits on the seed data canvas.' },\n];\n\nexport const themeItems: CompletionEntry[] = [\n { label: 'compatible with', insertText: 'compatible with ${1:Package}', documentation: 'A component package the theme is compatible with.' },\n];\n\nexport const uiProfileItems: CompletionEntry[] = [\n { label: 'target platform', insertText: 'target platform ${1:web}', documentation: 'The platforms the profile is for.' },\n { label: 'target size', insertText: 'target size ${1|compact,regular|}', documentation: 'The screen sizes the profile is for.' },\n { label: 'packages', insertText: 'packages\\n ${1:Package}', documentation: 'The component packages the profile uses.' },\n { label: 'layout', insertText: 'layout ${1:Layout}', documentation: 'The layout of the profile. Older form of `root template`; prefer `root template`.' },\n { label: 'theme', insertText: 'theme ${1:Theme}', documentation: 'The theme of the profile, named by a declared theme\\'s identifier.' },\n { label: 'theme (package-provided)', insertText: 'theme \"${1:Scene Default Light}\"', documentation: 'The theme of the profile, named by the quoted display name of a theme a component package provides.' },\n { label: 'root template', insertText: 'root template ${1:Template}\\n option ${2:navigationMode} ${3:slim}', documentation: 'The template the whole application is drawn in: an own template, or `blueprint <Blueprint> <Name> [version \"<range>\"]`, with the options the shell exposes.' },\n { label: 'root template blueprint', insertText: 'root template blueprint ${1:Blueprint} ${2:Template} version \"${3:^1.0}\"', documentation: 'A root template a blueprint package ships, pinned to a semver range.' },\n { label: 'identity', insertText: 'identity\\n name \"${1:Name}\"\\n logo ${2|initials \"AB\",icon box,image \"data:image/svg+xml;base64,...\"|}\\n show name ${3|true,false|}', documentation: 'What the application calls itself and the mark it wears: `name`, `logo initials|icon|image` and `show name`.' },\n { label: 'appearance', insertText: 'appearance\\n color scheme ${1|light,dark,system|}\\n accent \"${2:#4f46e5}\"\\n corners ${3|sharp,default,round|}\\n font ${4:inter}', documentation: 'How the application looks regardless of the shell: colour scheme, accent colour, corners and font.' },\n { label: 'new screens use template', insertText: 'new screens use template ${1:Template}', documentation: 'The template a new screen starts from in the designer.' },\n { label: 'sample data', insertText: 'sample data\\n active ${1:Pack}', documentation: 'The sample data the whole application previews with, chosen once here.' },\n];\n\nexport const profileRootTemplateItems: CompletionEntry[] = [\n { label: 'option', insertText: 'option ${1:name} ${2:value}', documentation: 'Sets one of the shell\\'s own options, for example `option navigationMode slim`. The value is a word, a quoted string, a number, `true` or `false`.' },\n];\n\nexport const profileAppearanceItems: CompletionEntry[] = [\n { label: 'color scheme', insertText: 'color scheme ${1|light,dark,system|}', documentation: 'The colour scheme of the application: light, dark or follow the system.' },\n { label: 'accent', insertText: 'accent \"${1:#4f46e5}\"', documentation: 'The accent colour of the application.' },\n { label: 'corners', insertText: 'corners ${1|sharp,default,round|}', documentation: 'How rounded the application\\'s corners are: sharp, default or round.' },\n { label: 'font', insertText: 'font ${1|inter,ibm-plex-sans,source-serif-4,system-ui|}', documentation: 'The font of the application, an id from Scene\\'s font catalog.' },\n];\n\nexport const profileIdentityItems: CompletionEntry[] = [\n { label: 'name', insertText: 'name \"${1:Name}\"', documentation: 'What the application calls itself in its shell; leave it out to take the application\\'s own name.' },\n { label: 'logo initials', insertText: 'logo initials \"${1:AB}\"', documentation: 'A logo drawn from one or two characters.' },\n { label: 'logo icon', insertText: 'logo icon ${1|box,layers,home,users,receipt,package,database,palette|}', documentation: 'A logo drawn from one of Scene\\'s logo icons.' },\n { label: 'logo image', insertText: 'logo image \"data:image/svg+xml;base64,${1}\"', documentation: 'A logo image (PNG, JPG, SVG or WebP, up to 400 KB) as a base64 data URI.' },\n { label: 'show name', insertText: 'show name ${1|true,false|}', documentation: 'Whether the name is drawn beside the logo.' },\n];\n\nexport const profileSampleDataItems: CompletionEntry[] = [\n { label: 'active', insertText: 'active ${1:Pack}', documentation: 'The active sample data pack of the whole application: one declared in the document, or `blueprint <id>`.' },\n { label: 'shape maps to', insertText: 'shape ${1:Shape} maps to ${2:ReadModel}', documentation: 'Maps a sample data shape to the read model it supplies rows for.' },\n { label: 'bind', insertText: 'bind ${1:ReadModel} to ${2:Pack}', documentation: 'A rare override: binds one read model to a pack.' },\n];\n\nexport const sampleDataItems: CompletionEntry[] = [\n { label: 'title', insertText: 'title \"${1:Title}\"', documentation: 'The display title of the pack.' },\n { label: 'locale', insertText: 'locale ${1:en-GB}', documentation: 'The BCP 47 locale tag of the data.' },\n { label: 'shape', insertText: 'shape ${1:ReadModel}\\n row\\n ${2:field} = ${3:\"value\"}', documentation: 'The rows for one shape: the read model of the same name, or the one a ui profile maps it to.' },\n];\n\nexport const sampleShapeItems: CompletionEntry[] = [\n { label: 'row', insertText: 'row\\n ${1:field} = ${2:\"value\"}', documentation: 'One row of the shape.' },\n];\n\nexport const sampleRowItems: CompletionEntry[] = [\n { label: 'field', insertText: '${1:field} = ${2:\"value\"}', documentation: 'One literal field of the row.' },\n { label: 'collection', insertText: '${1:field}\\n row\\n ${2:field} = ${3:\"value\"}', documentation: 'Explicit rows for a composite collection. A bare field without rows is an empty list.' },\n];\n\nexport const layoutItems: CompletionEntry[] = [\n { label: 'slot', insertText: '${1:slot}', documentation: 'A named slot of the shell.' },\n { label: 'slot contributes', insertText: '${1:slot} contributes ${2:Name}', documentation: 'A slot other declarations contribute to, such as `navigation contributes Navigation`.' },\n { label: 'navigation topbar', insertText: 'navigation ${1|topbar,sidebar|}\\n logo image \"${2:/logo.svg}\" title \"${3:Application}\"\\n item ${4:id} title \"${5:Title}\" target ${6:Module}', documentation: 'The application\\'s navigation region: a logo and items that target a module or feature.' },\n { label: 'arrangement', insertText: 'arrangement flow\\n column\\n ${1:slot}', documentation: 'How the slots are placed.' },\n];\n\nexport const toolbarItems: CompletionEntry[] = [\n { label: 'button', insertText: 'button ${1:id} title \"${2:Title}\" slice ${3:Module.Feature.Slice}', documentation: 'A button that invokes a State Change slice. The slice names the command and the dialog it opens over the page.' },\n { label: 'button (with emphasis)', insertText: 'button ${1:id} title \"${2:Title}\" slice ${3:Module.Feature.Slice} emphasis ${4|primary,secondary,quiet|} icon ${5:icon}', documentation: 'A toolbar button with an emphasis and an icon.' },\n { label: 'item action', insertText: 'item ${1:name} action ${2:Command}', documentation: 'A toolbar entry that runs a command.' },\n { label: 'item navigate', insertText: 'item ${1:name} navigate to ${2:Screen}', documentation: 'A toolbar entry that navigates to a screen.' },\n];\n\nexport const navigationItems: CompletionEntry[] = [\n { label: 'logo', insertText: 'logo image \"${1:/logo.svg}\" title \"${2:Application}\"', documentation: 'The application logo. Declared once, in a layout.' },\n { label: 'item', insertText: 'item ${1:id} title \"${2:Title}\" target ${3:Module.Feature}', documentation: 'A navigation item with a title, an optional `icon`, a `target` module or feature and an optional rendering `slot`. Sidebar items may nest `item` lines.' },\n { label: 'item (with slot)', insertText: 'item ${1:id} title \"${2:Title}\" icon ${3:icon} target ${4:Module.Feature} slot ${5:content}', documentation: 'A navigation item that renders its target into a named layout slot.' },\n];\n\nexport const templateItems: CompletionEntry[] = [\n { label: 'fits slot', insertText: 'fits slot ${1:content}', documentation: 'The slot of the shell the template fits.' },\n ...layoutItems,\n { label: 'on', insertText: 'on ${1|enter,leave,load,unload|}\\n ${2:refresh query}', documentation: 'Wires what happens on an interaction.' },\n];\n\nexport const interactionNames = interactions;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion-planner.d.ts","sourceRoot":"","sources":["../completion-planner.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,eAAe,EAAgB,MAAM,WAAW,CAAC;AAK1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAcrD,MAAM,MAAM,cAAc,GACpB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAKxB,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAmBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,eAA+C,GAAG,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"completion-planner.d.ts","sourceRoot":"","sources":["../completion-planner.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,eAAe,EAAgB,MAAM,WAAW,CAAC;AAK1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAcrD,MAAM,MAAM,cAAc,GACpB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAKxB,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAmBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,eAA+C,GAAG,eAAe,EAAE,CA4I/H;AAID,wBAAgB,eAAe,CAC3B,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,eAAqC,GAC/C,cAAc,CAkLhB"}
|
package/dist/scope-items.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare const profileIdentityItems: CompletionEntry[];
|
|
|
23
23
|
export declare const profileSampleDataItems: CompletionEntry[];
|
|
24
24
|
export declare const sampleDataItems: CompletionEntry[];
|
|
25
25
|
export declare const sampleShapeItems: CompletionEntry[];
|
|
26
|
+
export declare const sampleRowItems: CompletionEntry[];
|
|
26
27
|
export declare const layoutItems: CompletionEntry[];
|
|
27
28
|
export declare const toolbarItems: CompletionEntry[];
|
|
28
29
|
export declare const navigationItems: CompletionEntry[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-items.d.ts","sourceRoot":"","sources":["../scope-items.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAY1D,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAgB7C,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAe9C,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAAe,EAM3C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAAe,EAIzC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,eAAe,EAMtC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EAI5C,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,eAAe,EAK1C,CAAC;AAKF,eAAO,MAAM,eAAe,EAAE,eAAe,EAU5C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAAe,EAIzC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAAe,EAMzC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAAe,EAGhD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EAQ5C,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAG9C,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EAE5C,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,eAAe,EAKvC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,eAAe,EAGtC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,eAAe,EAEvC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAAe,EAa3C,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAAe,EAErD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eAAe,EAKnD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAAe,EAMjD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eAAe,EAInD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EAI5C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAE7C,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,eAAe,EAKxC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAAe,EAKzC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EAI5C,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,eAAe,EAI1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"scope-items.d.ts","sourceRoot":"","sources":["../scope-items.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAY1D,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAgB7C,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAe9C,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAAe,EAM3C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAAe,EAIzC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,eAAe,EAMtC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EAI5C,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,eAAe,EAK1C,CAAC;AAKF,eAAO,MAAM,eAAe,EAAE,eAAe,EAU5C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAAe,EAIzC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAAe,EAMzC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAAe,EAGhD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EAQ5C,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAG9C,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EAE5C,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,eAAe,EAKvC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,eAAe,EAGtC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,eAAe,EAEvC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAAe,EAa3C,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAAe,EAErD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eAAe,EAKnD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAAe,EAMjD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eAAe,EAInD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EAI5C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAE7C,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAAe,EAG3C,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,eAAe,EAKxC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAAe,EAKzC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EAI5C,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,eAAe,EAI1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAAe,CAAC"}
|
package/package.json
CHANGED