This commit is contained in:
Leandro Afonso
2025-09-27 18:39:59 +01:00
commit f0cdef9259
1220 changed files with 77975 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,204 @@
AngularJS|JavaScript Frameworks and Tools
Docker|Deployment
Git4Idea|Version Controls
HtmlTools|HTML and XML
JSIntentionPowerPack|JavaScript Frameworks and Tools
JavaScriptDebugger|JavaScript Frameworks and Tools
JavaScript|JavaScript Frameworks and Tools
Karma|JavaScript Frameworks and Tools
NodeJS|JavaScript Frameworks and Tools
Refactor-X|HTML and XML
Remote Development Server|null
Subversion|Version Controls
com.deadlock.scsyntax|JavaScript Frameworks and Tools
com.dmarcotte.handlebars|Template Languages
com.intellij.completion.ml.ranking|Local AI/ML Tools
com.intellij.configurationScript|null
com.intellij.copyright|Other Tools
com.intellij.css|Style Sheets
com.intellij.database|Database
com.intellij.dev|null
com.intellij.diagram|Other Tools
com.intellij.ja|IDE Localization
com.intellij.jsonpath|Languages
com.intellij.ko|IDE Localization
com.intellij.microservices.ui|Microservices
com.intellij.modules.json|Languages
com.intellij.platform.images|null
com.intellij.plugins.all_hallows_eve.colorscheme|UI
com.intellij.plugins.blackboard.colorscheme|UI
com.intellij.plugins.cobalt.colorscheme|UI
com.intellij.plugins.eclipsekeymap|Keymap
com.intellij.plugins.github.colorscheme|UI
com.intellij.plugins.html.instantEditing|HTML and XML
com.intellij.plugins.monokai.colorscheme|UI
com.intellij.plugins.netbeanskeymap|Keymap
com.intellij.plugins.rails_casts.colorscheme|UI
com.intellij.plugins.twilight.colorscheme|UI
com.intellij.plugins.vibrantink.colorscheme|UI
com.intellij.plugins.visualstudiokeymap|Keymap
com.intellij.plugins.vscodekeymap|Keymap
com.intellij.plugins.warmneon.colorscheme|UI
com.intellij.plugins.watcher|null
com.intellij.plugins.webcomponents|JavaScript Frameworks and Tools
com.intellij.react|JavaScript Frameworks and Tools
com.intellij.searcheverywhere.ml|Local AI/ML Tools
com.intellij.settingsSync|IDE Settings
com.intellij.stylelint|JavaScript Frameworks and Tools
com.intellij.swagger|Microservices
com.intellij.tailwindcss|Style Sheets
com.intellij.tasks.timeTracking|Other Tools
com.intellij.tasks|Other Tools
com.intellij.zh|IDE Localization
com.intellij|null
com.jetbrains.codeWithMe|null
com.jetbrains.gateway.terminal|null
com.jetbrains.gateway|Remote Development
com.jetbrains.lang.ejs|Template Languages
com.jetbrains.performancePlugin.async|Other Tools
com.jetbrains.performancePlugin|Other Tools
com.jetbrains.plugins.jade|Template Languages
com.jetbrains.plugins.webDeployment|Deployment
com.jetbrains.restClient|Microservices
com.jetbrains.sh|Languages
com.jetbrains.station|null
cucumber-javascript|JavaScript Frameworks and Tools
gherkin|Languages
hg4idea|Version Controls
intellij.charts|null
intellij.git.commit.modal|Version Controls
intellij.grid.plugin|null
intellij.indexing.shared.core|null
intellij.indexing.shared|null
intellij.javascript.bun|JavaScript Frameworks and Tools
intellij.nextjs|JavaScript Frameworks and Tools
intellij.platform.ijent.impl|Deployment
intellij.prettierJS|JavaScript Frameworks and Tools
intellij.vitejs|JavaScript Frameworks and Tools
intellij.webpack|JavaScript Frameworks and Tools
intellij.webp|null
org.editorconfig.editorconfigjetbrains|Other Tools
org.intellij.intelliLang|Other Tools
org.intellij.plugins.markdown|Languages
org.intellij.plugins.postcss|Style Sheets
org.intellij.qodana|null
org.jetbrains.completion.full.line|Local AI/ML Tools
org.jetbrains.plugins.docker.gateway|Remote Development
org.jetbrains.plugins.emojipicker|Other Tools
org.jetbrains.plugins.github|Version Controls
org.jetbrains.plugins.gitlab|Version Controls
org.jetbrains.plugins.less|Style Sheets
org.jetbrains.plugins.node-remote-interpreter|JavaScript Frameworks and Tools
org.jetbrains.plugins.remote-run|Deployment
org.jetbrains.plugins.sass|Style Sheets
org.jetbrains.plugins.terminal|Other Tools
org.jetbrains.plugins.textmate|Other Tools
org.jetbrains.plugins.vagrant|Deployment
org.jetbrains.plugins.vue|JavaScript Frameworks and Tools
org.jetbrains.plugins.yaml|Languages
org.jetbrains.security.package-checker|null
tanvd.grazi|null
training|null
tslint|JavaScript Frameworks and Tools

View File

@@ -0,0 +1,8 @@
i18n.locale
ide.experimental.ui
true
idea.plugins.compatible.build
moved.to.new.ui
true

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,393 @@
{
"groups" : [ {
"id" : "mlse.event.log",
"builds" : [ ],
"versions" : [ {
"from" : "1"
} ],
"rules" : {
"event_id" : [ "{enum#__event_id}" ],
"event_data" : {
"code" : [ "{regexp#integer}" ],
"error" : [ "{util#class_name}", "{enum:EMPTY_CONTENT|INVALID_JSON|UNKNOWN}", "{enum:EMPTY_SERVICE_URL|UNREACHABLE_SERVICE|EMPTY_RESPONSE_BODY|ERROR_ON_LOAD}", "{enum:SEND|NOT_PERMITTED_SERVER|NOT_PERMITTED_USER|ERROR_IN_CONFIG|NOT_PERMITTED_TIMEOUT|NOTHING_TO_SEND|SENT_WITH_ERRORS|EXCEPTION_OCCURRED|NO_ARGUMENTS|NO_APPLICATION_CONFIG|IDE_NOT_CLOSING|ERROR_ON_SEND|NO_DEVICE_ID|NO_MACHINE_ID|INVALID_BUCKET|INVALID_REVISION|NO_LOG_FILES}", "{enum:NO_LOGS|NO_UPLOADER|NO_LIBRARIES|NO_TEMP_FOLDER}" ],
"error_ts" : [ "{regexp#integer}" ],
"errors" : [ "{regexp#integer}" ],
"external" : [ "{enum#boolean}" ],
"failed" : [ "{regexp#integer}" ],
"paths" : [ "{regexp#hash}" ],
"plugin" : [ "{util#plugin}" ],
"plugin_type" : [ "{util#plugin_type}" ],
"plugin_version" : [ "{util#plugin_version}" ],
"send" : [ "{regexp#integer}" ],
"send_ts" : [ "{regexp#integer}" ],
"stage" : [ "{enum:LOADING|PARSING}" ],
"succeed" : [ "{regexp#integer}", "{enum#boolean}" ],
"total" : [ "{regexp#integer}" ],
"version" : [ "{regexp#version}" ]
},
"enums" : {
"__event_id" : [ "logs.send", "loading.config.failed", "metadata.loaded", "metadata.updated", "metadata.update.failed", "metadata.load.failed", "external.send.finished", "external.send.started", "external.send.command.creation.started", "external.send.command.creation.finished" ]
}
},
"anonymized_fields" : [ {
"event" : "logs.send",
"fields" : [ "paths" ]
} ]
}, {
"id" : "mlse.log",
"builds" : [ ],
"versions" : [ {
"from" : "2"
} ],
"rules" : {
"event_id" : [ "{enum:sessionFinished|searchRestarted|key.not.computed}" ],
"event_data" : {
"closePopup" : [ "{enum#boolean}" ],
"collectedItems.absentFeatures" : [ "{util#mlse_element_feature}" ],
"collectedItems.actionId" : [ "{util#action}", "{enum#action}" ],
"collectedItems.contributor.contributorId" : [ "{enum:SearchEverywhereContributor.All|ClassSearchEverywhereContributor|FileSearchEverywhereContributor|RecentFilesSEContributor|SymbolSearchEverywhereContributor|ActionSearchEverywhereContributor|RunConfigurationsSEContributor|CommandsContributor|TopHitSEContributor|com.intellij.ide.actions.searcheverywhere.CalculatorSEContributor|TmsSearchEverywhereContributor|YAMLKeysSearchEverywhereContributor|UrlSearchEverywhereContributor|Vcs.Git|AutocompletionContributor|TextSearchContributor|DbSETablesContributor|third.party}", "{enum:SearchEverywhereSpellingCorrectorContributor}", "{enum:SemanticActionSearchEverywhereContributor}" ],
"collectedItems.contributor.contributorIsEssential" : [ "{enum#boolean}" ],
"collectedItems.contributor.contributorIsEssentialPrediction" : [ "{regexp#float}" ],
"collectedItems.contributor.contributorIsMostPopular" : [ "{enum#boolean}" ],
"collectedItems.contributor.contributorPopularityIndex" : [ "{regexp#integer}" ],
"collectedItems.contributor.contributorPriority" : [ "{regexp#integer}" ],
"collectedItems.contributor.contributorWeight" : [ "{regexp#integer}" ],
"collectedItems.contributor.globalSelections" : [ "{regexp#integer}" ],
"collectedItems.contributor.globalSelectionsToMax" : [ "{regexp#float}" ],
"collectedItems.contributor.selectionAll" : [ "{regexp#integer}" ],
"collectedItems.contributor.selectionOther" : [ "{regexp#integer}" ],
"collectedItems.contributor.selectionToMaxAll" : [ "{regexp#float}" ],
"collectedItems.contributor.selectionToMaxOther" : [ "{regexp#float}" ],
"collectedItems.contributor.selectionsPerUserRatio" : [ "{regexp#float}" ],
"collectedItems.contributor.timeSinceLastSelectionAll" : [ "{regexp#integer}" ],
"collectedItems.contributor.timeSinceLastSelectionOther" : [ "{regexp#integer}" ],
"collectedItems.contributor.usersRatio" : [ "{regexp#float}" ],
"collectedItems.contributor.wasSelectedInLastDayAll" : [ "{enum#boolean}" ],
"collectedItems.contributor.wasSelectedInLastDayOther" : [ "{enum#boolean}" ],
"collectedItems.contributor.wasSelectedInLastHourAll" : [ "{enum#boolean}" ],
"collectedItems.contributor.wasSelectedInLastHourOther" : [ "{enum#boolean}" ],
"collectedItems.contributor.wasSelectedInLastMinuteAll" : [ "{enum#boolean}" ],
"collectedItems.contributor.wasSelectedInLastMinuteOther" : [ "{enum#boolean}" ],
"collectedItems.contributor.wasSelectedInLastMonthAll" : [ "{enum#boolean}" ],
"collectedItems.contributor.wasSelectedInLastMonthOther" : [ "{enum#boolean}" ],
"collectedItems.contributorId" : [ "{enum#se_tab}" ],
"collectedItems.features.actionSimilarityScore" : [ "{regexp#float}" ],
"collectedItems.features.allInitialLettersMatch" : [ "{enum#boolean}" ],
"collectedItems.features.asActionPureSemantic" : [ "{enum#boolean}" ],
"collectedItems.features.authoritiesSize" : [ "{regexp#integer}" ],
"collectedItems.features.bufferedTimestamp" : [ "{regexp#integer}" ],
"collectedItems.features.directoryDepth" : [ "{regexp#integer}" ],
"collectedItems.features.fileGroup" : [ "{enum:MAIN|BUILD|CHANGELOG|CONFIG|README}" ],
"collectedItems.features.fileStatus" : [ "{enum#vcs_file_status}" ],
"collectedItems.features.fileType" : [ "{util#file_type}" ],
"collectedItems.features.fileTypeMatchesQuery" : [ "{enum#boolean}" ],
"collectedItems.features.fileTypeUsageRatio" : [ "{regexp#float}" ],
"collectedItems.features.fileTypeUsageRatioToMax" : [ "{regexp#float}" ],
"collectedItems.features.fileTypeUsageRatioToMin" : [ "{regexp#float}" ],
"collectedItems.features.fileTypeUsedInLastDay" : [ "{enum#boolean}" ],
"collectedItems.features.fileTypeUsedInLastHour" : [ "{enum#boolean}" ],
"collectedItems.features.fileTypeUsedInLastMinute" : [ "{enum#boolean}" ],
"collectedItems.features.fileTypeUsedInLastMonth" : [ "{enum#boolean}" ],
"collectedItems.features.fromConfigurable" : [ "{enum#boolean}" ],
"collectedItems.features.globalUsage" : [ "{regexp#integer}" ],
"collectedItems.features.globalUsageToMax" : [ "{regexp#float}" ],
"collectedItems.features.globalUsageToMaxV1" : [ "{regexp#float}" ],
"collectedItems.features.globalUsageToMaxV2" : [ "{regexp#float}" ],
"collectedItems.features.globalUsageToMaxV3" : [ "{regexp#float}" ],
"collectedItems.features.globalUsageToMaxV4" : [ "{regexp#float}" ],
"collectedItems.features.globalUsageV1" : [ "{regexp#integer}" ],
"collectedItems.features.globalUsageV2" : [ "{regexp#integer}" ],
"collectedItems.features.globalUsageV3" : [ "{regexp#integer}" ],
"collectedItems.features.globalUsageV4" : [ "{regexp#integer}" ],
"collectedItems.features.groupLength" : [ "{regexp#integer}" ],
"collectedItems.features.heuristicPriority" : [ "{regexp#integer}" ],
"collectedItems.features.isAbbreviation" : [ "{enum#boolean}" ],
"collectedItems.features.isAccessibleFromModule" : [ "{enum#boolean}" ],
"collectedItems.features.isAction" : [ "{enum#boolean}" ],
"collectedItems.features.isActionPureSemantic" : [ "{enum#boolean}" ],
"collectedItems.features.isBookmark" : [ "{enum#boolean}" ],
"collectedItems.features.isBooleanOption" : [ "{enum#boolean}" ],
"collectedItems.features.isChanged" : [ "{enum#boolean}" ],
"collectedItems.features.isDeprecated" : [ "{enum#boolean}" ],
"collectedItems.features.isDirectory" : [ "{enum#boolean}" ],
"collectedItems.features.isEditorAction" : [ "{enum#boolean}" ],
"collectedItems.features.isEnabled" : [ "{enum#boolean}" ],
"collectedItems.features.isExactMatch" : [ "{enum#boolean}" ],
"collectedItems.features.isExactRelativePath" : [ "{enum#boolean}" ],
"collectedItems.features.isFavorite" : [ "{enum#boolean}" ],
"collectedItems.features.isFromLibrary" : [ "{enum#boolean}" ],
"collectedItems.features.isGroup" : [ "{enum#boolean}" ],
"collectedItems.features.isHighPriority" : [ "{enum#boolean}" ],
"collectedItems.features.isIgnored" : [ "{enum#boolean}" ],
"collectedItems.features.isInComment" : [ "{enum#boolean}" ],
"collectedItems.features.isInExcluded" : [ "{enum#boolean}" ],
"collectedItems.features.isInSource" : [ "{enum#boolean}" ],
"collectedItems.features.isInTestSources" : [ "{enum#boolean}" ],
"collectedItems.features.isInvalid" : [ "{enum#boolean}" ],
"collectedItems.features.isNotDefault" : [ "{enum#boolean}" ],
"collectedItems.features.isOpened" : [ "{enum#boolean}" ],
"collectedItems.features.isOption" : [ "{enum#boolean}" ],
"collectedItems.features.isPureSemantic" : [ "{enum#boolean}" ],
"collectedItems.features.isRegistryOption" : [ "{enum#boolean}" ],
"collectedItems.features.isSameFileTypeAsOpenedFile" : [ "{enum#boolean}" ],
"collectedItems.features.isSameModule" : [ "{enum#boolean}" ],
"collectedItems.features.isSearchAction" : [ "{enum#boolean}" ],
"collectedItems.features.isSemanticOnly" : [ "{enum#boolean}" ],
"collectedItems.features.isShared" : [ "{enum#boolean}" ],
"collectedItems.features.isTemporary" : [ "{enum#boolean}" ],
"collectedItems.features.isToggleAction" : [ "{enum#boolean}" ],
"collectedItems.features.isTopLevel" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsAbstract" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsInner" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsInstantiatable" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsInterface" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsLocalOrAnonymous" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsPrivate" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsProtected" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsPublic" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsStatic" : [ "{enum#boolean}" ],
"collectedItems.features.javaNumberOfAllFields" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfAllMethods" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfAnnotations" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfDeprecatedFields" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfDeprecatedMethods" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfFields" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfMethods" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfSupers" : [ "{regexp#integer}" ],
"collectedItems.features.keyIsInTop5RecentlyUsed" : [ "{enum#boolean}" ],
"collectedItems.features.keyIsMostPopular" : [ "{enum#boolean}" ],
"collectedItems.features.keyIsMostRecentlyUsed" : [ "{enum#boolean}" ],
"collectedItems.features.keyNeverUsed" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsAbstract" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsData" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsDocumented" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsEnum" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsInline" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsInner" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsInterface" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsInternal" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsLocalOrAnon" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsObject" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsOpen" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsPrivate" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsProtected" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsPublic" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsSAM" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsSealed" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsValue" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinNumberOfDeclarations" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfDocs" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfMethods" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfOverridden" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfProperties" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfReceivers" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfSupers" : [ "{regexp#integer}" ],
"collectedItems.features.langIsInTop3MostUsed" : [ "{enum#boolean}" ],
"collectedItems.features.langIsMostUsed" : [ "{enum#boolean}" ],
"collectedItems.features.langNeverUsed" : [ "{enum#boolean}" ],
"collectedItems.features.langSameAsOpenedFile" : [ "{enum#boolean}" ],
"collectedItems.features.langUseCount" : [ "{regexp#integer}" ],
"collectedItems.features.langUsedInLastDay" : [ "{enum#boolean}" ],
"collectedItems.features.langUsedInLastMonth" : [ "{enum#boolean}" ],
"collectedItems.features.langUsedInLastWeek" : [ "{enum#boolean}" ],
"collectedItems.features.language" : [ "{util#lang}" ],
"collectedItems.features.matchMode" : [ "{enum:NONE|INTENTION|NAME|DESCRIPTION|GROUP|NON_MENU|SYNONYM}" ],
"collectedItems.features.mlScore" : [ "{regexp#float}" ],
"collectedItems.features.nameLength" : [ "{regexp#integer}" ],
"collectedItems.features.packageDistance" : [ "{regexp#integer}" ],
"collectedItems.features.packageDistanceNorm" : [ "{regexp#float}" ],
"collectedItems.features.parentStatIsMostPopular" : [ "{enum#boolean}" ],
"collectedItems.features.parentStatIsMostRecent" : [ "{enum#boolean}" ],
"collectedItems.features.parentStatRecency" : [ "{regexp#integer}" ],
"collectedItems.features.parentStatUseCount" : [ "{regexp#integer}" ],
"collectedItems.features.pluginId" : [ "{util#plugin}" ],
"collectedItems.features.pluginType" : [ "{enum#plugin_type}" ],
"collectedItems.features.predictionScore" : [ "{regexp#float}" ],
"collectedItems.features.prefixExact" : [ "{enum#boolean}" ],
"collectedItems.features.prefixGreedyScore" : [ "{regexp#float}" ],
"collectedItems.features.prefixGreedyWithCaseScore" : [ "{regexp#float}" ],
"collectedItems.features.prefixMatchedLastWord" : [ "{enum#boolean}" ],
"collectedItems.features.prefixMatchedWordsRelative" : [ "{regexp#float}" ],
"collectedItems.features.prefixMatchedWordsScore" : [ "{regexp#float}" ],
"collectedItems.features.prefixMatchedWordsWithCaseRelative" : [ "{regexp#float}" ],
"collectedItems.features.prefixMatchedWordsWithCaseScore" : [ "{regexp#float}" ],
"collectedItems.features.prefixMatchingType" : [ "{enum#query_matching_type}" ],
"collectedItems.features.prefixSameStartCount" : [ "{regexp#integer}" ],
"collectedItems.features.prefixSkippedWords" : [ "{regexp#integer}" ],
"collectedItems.features.priority" : [ "{regexp#integer}" ],
"collectedItems.features.recentFilesIndex" : [ "{regexp#integer}" ],
"collectedItems.features.relPathPrefixGreedyScore" : [ "{regexp#float}" ],
"collectedItems.features.relPathPrefixMatchedWordsRelative" : [ "{regexp#float}" ],
"collectedItems.features.relPathPrefixMatchedWordsScore" : [ "{regexp#float}" ],
"collectedItems.features.relPathPrefixSameStartCount" : [ "{regexp#integer}" ],
"collectedItems.features.runConfigType" : [ "{util#run_config_type}" ],
"collectedItems.features.schemes" : [ "{enum:http|https|ws|wss}" ],
"collectedItems.features.segmentsTotal" : [ "{regexp#integer}" ],
"collectedItems.features.similarityScore" : [ "{regexp#float}" ],
"collectedItems.features.statIsMostPopular" : [ "{enum#boolean}" ],
"collectedItems.features.statIsMostRecent" : [ "{enum#boolean}" ],
"collectedItems.features.statRecency" : [ "{regexp#integer}" ],
"collectedItems.features.statUseCount" : [ "{regexp#integer}" ],
"collectedItems.features.suggestionConfidence" : [ "{regexp#float}" ],
"collectedItems.features.textLength" : [ "{regexp#integer}" ],
"collectedItems.features.timeSinceLastFileTypeUsage" : [ "{regexp#integer}" ],
"collectedItems.features.timeSinceLastModification" : [ "{regexp#integer}" ],
"collectedItems.features.timeSinceLastUsage" : [ "{regexp#integer}" ],
"collectedItems.features.timeSinceLastUsageSe" : [ "{regexp#integer}" ],
"collectedItems.features.totalSymbolsAmount" : [ "{regexp#integer}" ],
"collectedItems.features.type" : [ "{enum:ABBREVIATION|INTENTION|TOP_HIT|OPTION|ACTION}", "{enum:SEMANTIC}" ],
"collectedItems.features.typeWeight" : [ "{regexp#integer}" ],
"collectedItems.features.usage" : [ "{regexp#integer}" ],
"collectedItems.features.usageSe" : [ "{regexp#integer}" ],
"collectedItems.features.usageToMax" : [ "{regexp#float}" ],
"collectedItems.features.usageToMaxSe" : [ "{regexp#float}" ],
"collectedItems.features.usagesPerUserRatio" : [ "{regexp#float}" ],
"collectedItems.features.usagesPerUserRatioV1" : [ "{regexp#float}" ],
"collectedItems.features.usagesPerUserRatioV2" : [ "{regexp#float}" ],
"collectedItems.features.usagesPerUserRatioV3" : [ "{regexp#float}" ],
"collectedItems.features.usagesPerUserRatioV4" : [ "{regexp#float}" ],
"collectedItems.features.usersRatio" : [ "{regexp#float}" ],
"collectedItems.features.usersRatioV1" : [ "{regexp#float}" ],
"collectedItems.features.usersRatioV2" : [ "{regexp#float}" ],
"collectedItems.features.usersRatioV3" : [ "{regexp#float}" ],
"collectedItems.features.usersRatioV4" : [ "{regexp#float}" ],
"collectedItems.features.variablesTotal" : [ "{regexp#integer}" ],
"collectedItems.features.wasModifiedInLastDay" : [ "{enum#boolean}" ],
"collectedItems.features.wasModifiedInLastHour" : [ "{enum#boolean}" ],
"collectedItems.features.wasModifiedInLastMinute" : [ "{enum#boolean}" ],
"collectedItems.features.wasModifiedInLastMonth" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastDay" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastDaySe" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastHour" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastHourSe" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastMinute" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastMinuteSe" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastMonth" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastMonthSe" : [ "{enum#boolean}" ],
"collectedItems.features.weight" : [ "{regexp#float}" ],
"collectedItems.features.wholeTextExactlyMatchedWords" : [ "{regexp#integer}" ],
"collectedItems.features.wholeTextLevenshteinDistance" : [ "{regexp#float}" ],
"collectedItems.features.wholeTextLevenshteinDistanceCaseInsensitive" : [ "{regexp#float}" ],
"collectedItems.features.wholeTextWordsInElement" : [ "{regexp#integer}" ],
"collectedItems.features.wholeTextWordsInQuery" : [ "{regexp#integer}" ],
"collectedItems.features.withIcon" : [ "{enum#boolean}" ],
"collectedItems.features.yamlFileModifiedInLastDay" : [ "{enum#boolean}" ],
"collectedItems.features.yamlFileModifiedInLastHour" : [ "{enum#boolean}" ],
"collectedItems.features.yamlFileModifiedInLastMonth" : [ "{enum#boolean}" ],
"collectedItems.features.yamlFileModifiedInLastWeek" : [ "{enum#boolean}" ],
"collectedItems.features.yamlFileRecencyIndex" : [ "{regexp#integer}" ],
"collectedItems.features.yamlKeyIsInTop5RecentlyUsed" : [ "{enum#boolean}" ],
"collectedItems.features.yamlKeyIsMostPopular" : [ "{enum#boolean}" ],
"collectedItems.features.yamlKeyIsMostRecentlyUsed" : [ "{enum#boolean}" ],
"collectedItems.features.yamlKeyNeverUsed" : [ "{enum#boolean}" ],
"collectedItems.features.yamlTimeSinceLastModification" : [ "{regexp#integer}" ],
"collectedItems.id" : [ "{regexp#integer}" ],
"collectedItems.mlWeight" : [ "{regexp#float}" ],
"collectedItems.priority" : [ "{regexp#integer}" ],
"contributors.id" : [ "{enum:SearchEverywhereContributor.All|ClassSearchEverywhereContributor|FileSearchEverywhereContributor|RecentFilesSEContributor|SymbolSearchEverywhereContributor|ActionSearchEverywhereContributor|RunConfigurationsSEContributor|CommandsContributor|TopHitSEContributor|com.intellij.ide.actions.searcheverywhere.CalculatorSEContributor|TmsSearchEverywhereContributor|YAMLKeysSearchEverywhereContributor|UrlSearchEverywhereContributor|Vcs.Git|AutocompletionContributor|TextSearchContributor|DbSETablesContributor|third.party}" ],
"contributors.isMostPopular" : [ "{enum#boolean}" ],
"contributors.popularityIndex" : [ "{regexp#integer}" ],
"contributors.priority" : [ "{regexp#integer}" ],
"contributors.weight" : [ "{regexp#integer}" ],
"experimentGroup" : [ "{regexp#integer}" ],
"experimentVersion" : [ "{regexp#integer}" ],
"globalMaxSelection" : [ "{regexp#integer}" ],
"globalMaxUsage" : [ "{regexp#integer}" ],
"globalMaxUsageV1" : [ "{regexp#integer}" ],
"globalMaxUsageV2" : [ "{regexp#integer}" ],
"globalMaxUsageV3" : [ "{regexp#integer}" ],
"globalMaxUsageV4" : [ "{regexp#integer}" ],
"globalMinSelection" : [ "{regexp#integer}" ],
"globalMinUsage" : [ "{regexp#integer}" ],
"globalMinUsageV1" : [ "{regexp#integer}" ],
"globalMinUsageV2" : [ "{regexp#integer}" ],
"globalMinUsageV3" : [ "{regexp#integer}" ],
"globalMinUsageV4" : [ "{regexp#integer}" ],
"isConsistent" : [ "{enum#boolean}" ],
"isForceExperiment" : [ "{enum#boolean}" ],
"isInternal" : [ "{enum#boolean}" ],
"isMixedList" : [ "{enum#boolean}" ],
"isSingleModuleProject" : [ "{enum#boolean}" ],
"lastOpenToolWindow" : [ "{util#toolwindow}" ],
"logFeatures" : [ "{enum#boolean}" ],
"maxSelectionAll" : [ "{regexp#integer}" ],
"maxSelectionOther" : [ "{regexp#integer}" ],
"maxUsage" : [ "{regexp#integer}" ],
"maxUsageSE" : [ "{regexp#integer}" ],
"minSelectionAll" : [ "{regexp#integer}" ],
"minSelectionOther" : [ "{regexp#integer}" ],
"minUsage" : [ "{regexp#integer}" ],
"minUsageSE" : [ "{regexp#integer}" ],
"numberOfOpenEditors" : [ "{regexp#integer}" ],
"openFileTypes" : [ "{util#file_type}" ],
"orderByMl" : [ "{enum#boolean}" ],
"plugin" : [ "{util#plugin}" ],
"plugin_type" : [ "{util#plugin_type}" ],
"plugin_version" : [ "{util#plugin_version}" ],
"projectDisposed" : [ "{enum#boolean}" ],
"projectOpened" : [ "{enum#boolean}" ],
"rebuildReason" : [ "{enum#restart_reasons}" ],
"seTabId" : [ "{enum#se_tab}", "{enum:SearchEverywhereSpellingCorrectorContributor}", "{enum:Git}" ],
"searchIndex" : [ "{regexp#integer}" ],
"searchStateFeatures.isCaseSensitive" : [ "{enum#boolean}" ],
"searchStateFeatures.isDumbMode" : [ "{enum#boolean}" ],
"searchStateFeatures.isEmptyQuery" : [ "{enum#boolean}" ],
"searchStateFeatures.isRegularExpressions" : [ "{enum#boolean}" ],
"searchStateFeatures.isSearchEverywhere" : [ "{enum#boolean}" ],
"searchStateFeatures.isWholeWordsOnly" : [ "{enum#boolean}" ],
"searchStateFeatures.queryContainsAbbreviations" : [ "{enum#boolean}" ],
"searchStateFeatures.queryContainsCommandChar" : [ "{enum#boolean}" ],
"searchStateFeatures.queryContainsPath" : [ "{enum#boolean}" ],
"searchStateFeatures.queryContainsSpaces" : [ "{enum#boolean}" ],
"searchStateFeatures.queryIsAllUppercase" : [ "{enum#boolean}" ],
"searchStateFeatures.queryIsCamelCase" : [ "{enum#boolean}" ],
"searchStateFeatures.queryLength" : [ "{regexp#integer}" ],
"searchStateFeatures.searchScope" : [ "{util#scopeRule}" ],
"selectedIds" : [ "{regexp#integer}" ],
"selectedIndexes" : [ "{regexp#integer}" ],
"semanticExperimentGroup" : [ "{regexp#integer}" ],
"semanticSearchEnabled" : [ "{enum#boolean}" ],
"sessionId" : [ "{regexp#integer}" ],
"startTime" : [ "{regexp#integer}" ],
"timeToFirstResult" : [ "{regexp#integer}" ],
"totalItems" : [ "{regexp#integer}" ],
"typedBackspaces" : [ "{regexp#integer}" ],
"typedSymbolKeys" : [ "{regexp#integer}" ],
"unsupported_classes" : [ "{util#class_name}" ]
},
"enums" : {
"query_matching_type" : [ "START_WITH", "WORDS_FIRST_CHAR", "GREEDY_WITH_CASE", "GREEDY", "UNKNOWN" ],
"restart_reasons" : [ "SEARCH_STARTED", "TEXT_CHANGED", "TAB_CHANGED", "SCOPE_CHANGED", "EXIT_DUMB_MODE", "TEXT_SEARCH_OPTION_CHANGED" ],
"se_tab" : [ "SearchEverywhereContributor.All", "ClassSearchEverywhereContributor", "FileSearchEverywhereContributor", "RecentFilesSEContributor", "SymbolSearchEverywhereContributor", "ActionSearchEverywhereContributor", "RunConfigurationsSEContributor", "CommandsContributor", "TopHitSEContributor", "com.intellij.ide.actions.searcheverywhere.CalculatorSEContributor", "TmsSearchEverywhereContributor", "YAMLKeysSearchEverywhereContributor", "UrlSearchEverywhereContributor", "Vcs.Git", "AutocompletionContributor", "TextSearchContributor", "DbSETablesContributor", "third.party" ],
"vcs_file_status" : [ "NOT_CHANGED", "NOT_CHANGED_IMMEDIATE", "NOT_CHANGED_RECURSIVE", "DELETED", "MODIFIED", "ADDED", "MERGED", "UNKNOWN", "IDEA_FILESTATUS_IGNORED", "HIJACKED", "IDEA_FILESTATUS_MERGED_WITH_CONFLICTS", "IDEA_FILESTATUS_MERGED_WITH_BOTH_CONFLICTS", "IDEA_FILESTATUS_MERGED_WITH_PROPERTY_CONFLICTS", "IDEA_FILESTATUS_DELETED_FROM_FILE_SYSTEM", "SWITCHED", "OBSOLETE", "SUPPRESSED" ]
}
}
} ],
"rules" : {
"enums" : {
"action" : [ "git4idea.rebase.retry", "git4idea.rebase.continue", "git4idea.rebase.abort", "git4idea.rebase.resolve", "git4idea.rebase.stage.and.retry", "git.gpg.agent.configuration.success.manual.action", "git.gpg.agent.configuration.propose.suggestion.configure.action", "git.gpg.agent.configuration.propose.manual.action", "git.gpg.agent.configuration.propose.suggestion.manual.action", "git.gpg.agent.configuration.propose.configure.action" ],
"boolean" : [ "true", "false", "TRUE", "FALSE", "True", "False" ],
"plugin_type" : [ "JVM_CORE", "PLATFORM", "JB_BUNDLED", "JB_NOT_BUNDLED", "LISTED", "NOT_LISTED", "JB_UPDATED_BUNDLED", "UNKNOWN", "FROM_SOURCES" ]
},
"regexps" : {
"count" : "\\d+K?M?\\+?",
"date_YYYY-MM-DD_HH" : "^[12][0-9]{3}-(0[0-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])_(([0-1][0-9]|2[0-3]))?$",
"date_short_hash" : "[0-9]{2}[01][0-9][0123][0-9]-(([0-9A-Fa-f]{12})|undefined)",
"double" : "-?\\d+(\\.\\d+)?(E\\-?\\d+)?",
"float" : "-?\\d+(\\.\\d+(E\\-?\\d+)?)?",
"float_unit" : "0?(\\.\\d+)?(E\\-\\d+)?|1(\\.0+)?|[1-9](\\.\\d+)?E\\-\\d+",
"hash" : "([0-9A-Fa-f]{40,64})|undefined",
"int_pw_of_2" : "-?(1|2|4|8|16|32|64|128|256|512|1024|2048|4096|8192|16384|32768|65536|131072|262144|524288|1048576|2097152|4194304|8388608|16777216|33554432|67108864|134217728|268435456|536870912|1073741824)",
"integer" : "-?\\d+(\\+)?",
"long" : "-?\\d{1,19}",
"long_pw_of_2" : "(-9223372036854775808|(-?(1|2|4|8|16|32|64|128|256|512|1024|2048|4096|8192|16384|32768|65536|131072|262144|524288|1048576|2097152|4194304|8388608|16777216|33554432|67108864|134217728|268435456|536870912|1073741824|2147483648|4294967296|8589934592|17179869184|34359738368|68719476736|137438953472|274877906944|549755813888|1099511627776|2199023255552|4398046511104|8796093022208|17592186044416|35184372088832|70368744177664|140737488355328|281474976710656|562949953421312|1125899906842624|2251799813685248|4503599627370496|9007199254740992|18014398509481984|36028797018963968|72057594037927936|144115188075855872|288230376151711744|576460752303423488|1152921504606846976|2305843009213693952|4611686018427387904)))",
"negative_integer" : "-(\\d{1,9}|[12]\\d{9})",
"negative_long" : "-\\d{1,19}",
"positive_integer" : "\\d{1,9}|[12]\\d{9}",
"positive_long" : "\\d{1,19}",
"short_hash" : "([0-9A-Fa-f]{12})|undefined",
"version" : "Unknown|unknown.format|unknown|UNKNOWN|((\\d+\\.?)*\\d+)"
}
},
"version" : "5781"
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,38 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static java.math.MathContext.DECIMAL128
BigDecimal RES = 0
int i = 0
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
if (value instanceof Number) {
RES = RES.add(value, DECIMAL128)
i++
}
else if (value.toString().isBigDecimal()) {
RES = RES.add(value.toString().toBigDecimal(), DECIMAL128)
i++
}
}
}
if (i > 0) {
RES = RES.divide(i, DECIMAL128)
OUT.append(RES.toString())
}
else {
OUT.append("Not enough values")
}

View File

@@ -0,0 +1,53 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static java.math.MathContext.DECIMAL128
def toBigDecimal = { value ->
value instanceof Number ? value as BigDecimal :
value.toString().isBigDecimal() ? value.toString() as BigDecimal :
null
}
def values = []
ROWS.each { row ->
COLUMNS.each { column ->
def bigDecimal = toBigDecimal(row.value(column))
if (bigDecimal != null) {
values.add(bigDecimal)
}
}
}
if (values.isEmpty()) {
OUT.append("Not enough values")
return
}
def sum = BigDecimal.ZERO
values.forEach { value ->
sum = sum.add(value, DECIMAL128)
}
def avg = sum.divide(values.size(), DECIMAL128)
def sumSquaredDiff = BigDecimal.ZERO
values.each { value ->
BigDecimal diff = value.subtract(avg, DECIMAL128)
sumSquaredDiff = sumSquaredDiff.add(diff.multiply(diff, DECIMAL128), DECIMAL128)
}
def variance = sumSquaredDiff.divide(values.size(), DECIMAL128)
def standardDeviation = variance.sqrt(DECIMAL128)
def cv = standardDeviation.divide(avg, DECIMAL128)
OUT.append((cv * 100).round(2) + "%")

View File

@@ -0,0 +1,15 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
OUT.append(COLUMNS.size().toString())

View File

@@ -0,0 +1,21 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
def RES = 0G
ROWS.each { row ->
COLUMNS.each { column ->
RES += 1
}
}
OUT.append(RES.toString())

View File

@@ -0,0 +1,27 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
def RES = 0G
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
if (value instanceof Number) {
RES += 1
}
else if (value.toString().isBigDecimal()) {
RES += 1
}
}
}
OUT.append(RES.toString())

View File

@@ -0,0 +1,32 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
values = new ArrayList<BigDecimal>()
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
if (value instanceof Number) {
values.add(value as BigDecimal)
}
else if (value.toString().isBigDecimal()) {
values.add(value.toString() as BigDecimal)
}
}
}
if (values.size() == 0) {
OUT.append("Not enough values")
return
}
OUT.append(Collections.max(values).toString())

View File

@@ -0,0 +1,42 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static java.math.MathContext.DECIMAL128
def toBigDecimal = { value ->
value instanceof Number ? value as BigDecimal :
value.toString().isBigDecimal() ? value.toString() as BigDecimal :
null
}
def values = []
ROWS.each { row ->
COLUMNS.each { column ->
def bigDecimal = toBigDecimal(row.value(column))
if (bigDecimal != null) {
values.add(bigDecimal)
}
}
}
if (values.isEmpty()) {
OUT.append("Not enough values")
return
}
elementsNumber = values.size()
Collections.sort(values)
mid = (int)elementsNumber / 2
RES = elementsNumber % 2 != 0 ? values[mid] : values[mid].add(values[mid - 1], DECIMAL128).divide(2, DECIMAL128)
OUT.append(RES.toString())

View File

@@ -0,0 +1,31 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
values = new ArrayList<BigDecimal>()
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
if (value instanceof Number) {
values.add(value as BigDecimal)
}
else if (value.toString().isBigDecimal()) {
values.add(value.toString() as BigDecimal)
}
}
}
if (values.size() == 0) {
OUT.append("Not enough values")
return
}
OUT.append(Collections.min(values).toString())

View File

@@ -0,0 +1,15 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
OUT.append(ROWS.size().toString())

View File

@@ -0,0 +1,29 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static java.math.MathContext.DECIMAL128
BigDecimal RES = 0
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
if (value instanceof Number) {
RES = RES.add(value, DECIMAL128)
}
else if (value.toString().isBigDecimal()) {
RES = RES.add(value.toString().toBigDecimal(), DECIMAL128)
}
}
}
OUT.append(RES.toString())

View File

@@ -0,0 +1,37 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
SEPARATOR = ","
QUOTE = "\""
NEWLINE = System.getProperty("line.separator")
def printRow = { values, valueToString ->
values.eachWithIndex { value, idx ->
def str = valueToString(value)
def q = str.contains(SEPARATOR) || str.contains(QUOTE) || str.contains(NEWLINE)
OUT.append(q ? QUOTE : "")
.append(str.replace(QUOTE, QUOTE + QUOTE))
.append(q ? QUOTE : "")
.append(idx != values.size() - 1 ? SEPARATOR : NEWLINE)
}
}
if (!TRANSPOSED) {
ROWS.each { row -> printRow(COLUMNS, { FORMATTER.format(row, it) }) }
}
else {
def values = COLUMNS.collect { new ArrayList<String>() }
ROWS.each { row -> COLUMNS.eachWithIndex { col, i -> values[i].add(FORMATTER.format(row, col)) } }
values.each { printRow(it, { it }) }
}

View File

@@ -0,0 +1,57 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static com.intellij.openapi.util.text.StringUtil.escapeXmlEntities
NEWLINE = System.getProperty("line.separator")
def HTML_PATTERN = ~"<.+>"
def printRow = { values, tag, valueToString ->
OUT.append("$NEWLINE<tr>$NEWLINE")
values.each {
def str = valueToString(it)
def escaped = str ==~ HTML_PATTERN
? str
: escapeXmlEntities((str as String).replaceAll("\\t|\\b|\\f", "")).replaceAll("\\r|\\n|\\r\\n", "<br/>")
OUT.append(" <$tag>$escaped</$tag>$NEWLINE")
}
OUT.append("</tr>")
}
OUT.append(
"""<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="UTF-8">
</head>
<body>
<table border="1" style="border-collapse:collapse">""")
if (!TRANSPOSED) {
printRow(COLUMNS, "th") { it.name() }
ROWS.each { row -> printRow(COLUMNS, "td") { FORMATTER.format(row, it) } }
}
else {
def values = COLUMNS.collect { new ArrayList<String>( [it.name()] ) }
ROWS.each { row -> COLUMNS.eachWithIndex { col, i -> values[i].add(FORMATTER.format(row, col)) } }
values.each { printRow(it, "td", { it }) }
}
OUT.append("""
</table>
</body>
</html>
""")

View File

@@ -0,0 +1,49 @@
function eachWithIdx(iterable, f) { var i = iterable.iterator(); var idx = 0; while (i.hasNext()) f(i.next(), idx++); }
function mapEach(iterable, f) { var vs = []; eachWithIdx(iterable, function (i) { vs.push(f(i));}); return vs; }
function escape(str) {
str = str.replace(/\t|\b|\f/g, "");
str = com.intellij.openapi.util.text.StringUtil.escapeXml(str);
str = str.replace(/\r|\n|\r\n/g, "<br/>");
return str;
}
var isHTML = RegExp.prototype.test.bind(/^<.+>$/);
var NEWLINE = "\n";
function output() { for (var i = 0; i < arguments.length; i++) { OUT.append(arguments[i]); } }
function outputRow(items, tag) {
output("<tr>");
for (var i = 0; i < items.length; i++)
output("<", tag, ">", isHTML(items[i]) ? items[i] : escape(items[i]), "</", tag, ">");
output("</tr>", NEWLINE);
}
output("<!DOCTYPE html>", NEWLINE,
"<html>", NEWLINE,
"<head>", NEWLINE,
"<title></title>", NEWLINE,
"<meta charset=\"UTF-8\">", NEWLINE,
"</head>", NEWLINE,
"<body>", NEWLINE,
"<table border=\"1\" style=\"border-collapse:collapse\">", NEWLINE);
if (TRANSPOSED) {
var values = mapEach(COLUMNS, function(col) { return [col.name()]; });
eachWithIdx(ROWS, function (row) {
eachWithIdx(COLUMNS, function (col, i) {
values[i].push(FORMATTER.format(row, col));
});
});
eachWithIdx(COLUMNS, function (_, i) { outputRow(values[i], "td"); });
}
else {
outputRow(mapEach(COLUMNS, function (col) { return col.name(); }), "th");
eachWithIdx(ROWS, function (row) {
outputRow(mapEach(COLUMNS, function (col) { return FORMATTER.format(row, col); }), "td")
});
}
output("</table>", NEWLINE,
"</body>", NEWLINE,
"</html>", NEWLINE);

View File

@@ -0,0 +1,70 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static com.intellij.openapi.util.text.StringUtil.escapeStringCharacters as escapeStr
NEWLINE = System.getProperty("line.separator")
INDENT = " "
def printJSON(level, col, o) {
switch (o) {
case null: OUT.append("null"); break
case Tuple: printJSON(level, o[0], o[1]); break
case Map:
OUT.append("{")
o.entrySet().eachWithIndex { entry, i ->
OUT.append("${i > 0 ? "," : ""}$NEWLINE${INDENT * (level + 1)}")
OUT.append("\"${escapeStr(entry.getKey().toString())}\"")
OUT.append(": ")
printJSON(level + 1, col, entry.getValue())
}
OUT.append("$NEWLINE${INDENT * level}}")
break
case Object[]:
case Iterable:
OUT.append("[")
def plain = true
o.eachWithIndex { item, i ->
plain = item == null || item instanceof Number || item instanceof Boolean || item instanceof String
if (plain) {
OUT.append(i > 0 ? ", " : "")
}
else {
OUT.append("${i > 0 ? "," : ""}$NEWLINE${INDENT * (level + 1)}")
}
printJSON(level + 1, col, item)
}
if (plain) OUT.append("]") else OUT.append("$NEWLINE${INDENT * level}]")
break
case Boolean: OUT.append("$o"); break
default:
def str = FORMATTER.formatValue(o, col)
def typeName = FORMATTER.getTypeName(o, col)
def shouldQuote = FORMATTER.isStringLiteral(o, col) && !(typeName.equalsIgnoreCase("json") || typeName.equalsIgnoreCase("jsonb"))
OUT.append(shouldQuote ? "\"${escapeStr(str)}\"" : str);
break
}
}
printJSON(0, null, ROWS.transform { row ->
def map = new LinkedHashMap<String, Object>()
COLUMNS.each { col ->
if (row.hasValue(col)) {
def val = row.value(col)
map.put(col.name(), new Tuple(col, val))
}
}
map
})

View File

@@ -0,0 +1,65 @@
package extensions.data.extractors
NEWLINE = System.getProperty("line.separator")
SEPARATOR = "|"
BACKSLASH = "\\"
BACKQUOTE = "`"
LTAG = "<"
RTAG = ">"
ASTERISK = "*"
UNDERSCORE = "_"
LPARENTH = "("
RPARENTH = ")"
LBRACKET = "["
RBRACKET = "]"
TILDE = "~"
def printRow = { values, firstBold = false, valueToString ->
values.eachWithIndex { value, idx ->
def str = valueToString(value)
.replace(BACKSLASH, BACKSLASH + BACKSLASH)
.replace(SEPARATOR, BACKSLASH + SEPARATOR)
.replace(BACKQUOTE, BACKSLASH + BACKQUOTE)
.replace(ASTERISK, BACKSLASH + ASTERISK)
.replace(UNDERSCORE, BACKSLASH + UNDERSCORE)
.replace(LPARENTH, BACKSLASH + LPARENTH)
.replace(RPARENTH, BACKSLASH + RPARENTH)
.replace(LBRACKET, BACKSLASH + LBRACKET)
.replace(RBRACKET, BACKSLASH + RBRACKET)
.replace(TILDE, BACKSLASH + TILDE)
.replace(LTAG, "&lt;")
.replace(RTAG, "&gt;")
.replaceAll("\r\n|\r|\n", "<br/>")
.replaceAll("\t|\b|\f", "")
OUT.append("| ")
.append(firstBold && idx == 0 ? "**" : "")
.append(str)
.append(firstBold && idx == 0 ? "**" : "")
.append(idx != values.size() - 1 ? " " : " |" + NEWLINE)
}
}
if (TRANSPOSED) {
def values = COLUMNS.collect { new ArrayList<String>([it.name()]) }
def rowCount = 0
ROWS.forEach { row ->
COLUMNS.eachWithIndex { col, i -> values[i].add(FORMATTER.format(row, col)) }
rowCount++
}
for (int i = 0; i <= rowCount; i++) {
OUT.append("| ")
}
OUT.append("|" + NEWLINE)
for (int i = 0; i <= rowCount; i++) {
OUT.append("| :- ")
}
OUT.append("|" + NEWLINE)
values.each { printRow(it, true) { it } }
}
else {
printRow(COLUMNS) { it.name() }
COLUMNS.each { OUT.append("| :--- ") }
OUT.append("|" + NEWLINE)
ROWS.each { row -> printRow(COLUMNS) { FORMATTER.format(row, it) } }
}

View File

@@ -0,0 +1,34 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
SEPARATOR = ", "
QUOTE = "'"
STRING_PREFIX = DIALECT.getDbms().isMicrosoft() ? "N" : ""
KEYWORDS_LOWERCASE = com.intellij.database.util.DbSqlUtil.areKeywordsLowerCase(PROJECT)
KW_NULL = KEYWORDS_LOWERCASE ? "null" : "NULL"
first = true
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
def stringValue = value == null ? KW_NULL : FORMATTER.formatValue(value, column)
def isStringLiteral = value != null && FORMATTER.isStringLiteral(value, column)
if (isStringLiteral && DIALECT.getDbms().isMysql()) stringValue = stringValue.replace("\\", "\\\\")
OUT.append(first ? "" : SEPARATOR)
.append(isStringLiteral ? (STRING_PREFIX + QUOTE) : "")
.append(stringValue ? stringValue.replace(QUOTE, QUOTE + QUOTE) : stringValue)
.append(isStringLiteral ? QUOTE : "")
first = false
}
}

View File

@@ -0,0 +1,144 @@
import com.intellij.openapi.util.text.StringUtil
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
WIDTH_BASED_ON_CONTENT = -1
PIPE = "|"
SPACE = " "
CROSS = "+"
MINUS = "-"
ROW_SEPARATORS = false
COLUMN_WIDTH = WIDTH_BASED_ON_CONTENT
NEWLINE = System.getProperty("line.separator")
static def splitByLines(values, size) {
def splitValues = new ArrayList<>()
def maxLines = 0
for (int i = 0; i < size; i++) {
def splitValue = StringUtil.splitByLines(values(i))
splitValues.add(splitValue)
maxLines = Math.max(maxLines, splitValue.size())
}
def byLines = new ArrayList<>(maxLines)
for (int i = 0; i < maxLines; i++) {
def lineValues = new ArrayList<>()
byLines.add(lineValues)
for (int j = 0; j < splitValues.size(); j++) {
def splitValue = splitValues[j]
lineValues.add(splitValue.size() <= i ? null : splitValue[i])
}
}
return byLines
}
def printRow(values, size, width = { COLUMN_WIDTH }, padding = SPACE, separator = { PIPE }) {
def byLines = splitByLines(values, size)
byLines.each { line ->
def lineSize = line.size()
if (lineSize > 0) OUT.append(separator(-1))
for (int i = 0; i < lineSize; i++) {
def value = line[i] == null ? "" : line.get(i)
def curWidth = width(i)
OUT.append(value.padRight(curWidth, padding))
OUT.append(separator(i))
}
OUT.append(NEWLINE)
}
}
def printRows() {
def colNames = COLUMNS.collect { it.name() }
def calcWidth = COLUMN_WIDTH == WIDTH_BASED_ON_CONTENT
def rows
def width
def rowFormatter
if (calcWidth) {
rows = new ArrayList<>()
def widths = new int[COLUMNS.size()]
COLUMNS.eachWithIndex { column, idx -> widths[idx] = column.name().length() }
ROWS.each { row ->
def rowValues = COLUMNS.withIndex().collect { col, idx ->
def value = FORMATTER.format(row, col)
widths[idx] = Math.max(widths[idx], value.length())
value
}
rows.add(rowValues)
}
width = { widths[it] }
rowFormatter = { it }
}
else {
rows = ROWS
width = { COLUMN_WIDTH }
rowFormatter = { COLUMNS.collect { col -> FORMATTER.format(it, col) } }
}
printRow({""}, COLUMNS.size(), { width(it) }, MINUS) { CROSS }
printRow( { colNames[it] }, COLUMNS.size()) { width(it) }
def first = true
rows.each { row ->
def rowValues = rowFormatter(row)
if (first || ROW_SEPARATORS) printRow({""}, COLUMNS.size(), { width(it) }, MINUS) { first ? CROSS : MINUS }
printRow({ rowValues[it] }, rowValues.size()) { width(it) }
first = false
}
printRow({""}, COLUMNS.size(), { width(it) }, MINUS) { CROSS }
}
def printRowsTransposed() {
def calcWidth = COLUMN_WIDTH == WIDTH_BASED_ON_CONTENT
if (calcWidth) {
COLUMN_WIDTHS = new ArrayList<Integer>()
COLUMN_WIDTHS.add(0)
}
def valuesByRow = COLUMNS.collect { col ->
if (calcWidth) COLUMN_WIDTHS.set(0, Math.max(COLUMN_WIDTHS[0], col.name().length()))
new ArrayList<String>([col.name()])
}
def rowCount = 1
ROWS.each { row ->
rowCount++
COLUMNS.eachWithIndex { col, i ->
def formattedValue = FORMATTER.format(row, col)
valuesByRow[i].add(formattedValue)
def widthIdx = rowCount - 1
def length = formattedValue.length()
if (calcWidth) {
if (COLUMN_WIDTHS.size() == widthIdx) COLUMN_WIDTHS.add(length)
COLUMN_WIDTHS.set(widthIdx, Math.max(COLUMN_WIDTHS[widthIdx], length))
}
}
}
valuesByRow.each { row ->
printRow({ "" }, rowCount, { calcWidth ? COLUMN_WIDTHS[it] : COLUMN_WIDTH }, MINUS) {
it <= 0 ? CROSS : it == rowCount - 1 ? CROSS : MINUS
}
printRow({ row[it] }, row.size()) { calcWidth ? COLUMN_WIDTHS[it] : COLUMN_WIDTH }
}
printRow({ "" }, rowCount, { calcWidth ? COLUMN_WIDTHS[it] : COLUMN_WIDTH }, MINUS) {
it <= 0 ? CROSS : it == rowCount - 1 ? CROSS : MINUS
}
}
if (TRANSPOSED) {
printRowsTransposed()
}
else {
printRows()
}

View File

@@ -0,0 +1,62 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
SEP = ", "
QUOTE = "\'"
STRING_PREFIX = DIALECT.getDbms().isMicrosoft() ? "N" : ""
NEWLINE = System.getProperty("line.separator")
KEYWORDS_LOWERCASE = com.intellij.database.util.DbSqlUtil.areKeywordsLowerCase(PROJECT)
KW_INSERT_INTO = KEYWORDS_LOWERCASE ? "insert into " : "INSERT INTO "
KW_VALUES = KEYWORDS_LOWERCASE ? "values" : "VALUES"
KW_NULL = KEYWORDS_LOWERCASE ? "null" : "NULL"
begin = true
def record(columns, dataRow) {
if (begin) {
OUT.append(KW_INSERT_INTO)
if (TABLE == null) OUT.append("MY_TABLE")
else OUT.append(TABLE.getParent().getName()).append(".").append(TABLE.getName())
OUT.append(" (")
columns.eachWithIndex { column, idx ->
OUT.append(column.name()).append(idx != columns.size() - 1 ? SEP : "")
}
OUT.append(")").append(NEWLINE)
OUT.append(KW_VALUES).append(" (")
begin = false
}
else {
OUT.append(",").append(NEWLINE)
OUT.append(" (")
}
columns.eachWithIndex { column, idx ->
def value = dataRow.value(column)
def stringValue = value == null ? KW_NULL : FORMATTER.formatValue(value, column)
def isStringLiteral = value != null && FORMATTER.isStringLiteral(value, column)
if (isStringLiteral && DIALECT.getDbms().isMysql()) stringValue = stringValue.replace("\\", "\\\\")
OUT.append(isStringLiteral ? (STRING_PREFIX + QUOTE) : "")
.append(stringValue ? stringValue.replace(QUOTE, QUOTE + QUOTE) : stringValue)
.append(isStringLiteral ? QUOTE : "")
.append(idx != columns.size() - 1 ? SEP : "")
}
OUT.append(")")
}
ROWS.each { row -> record(COLUMNS, row) }
OUT.append(";")

View File

@@ -0,0 +1,49 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
SEP = ", "
QUOTE = "\'"
STRING_PREFIX = DIALECT.getDbms().isMicrosoft() ? "N" : ""
NEWLINE = System.getProperty("line.separator")
KEYWORDS_LOWERCASE = com.intellij.database.util.DbSqlUtil.areKeywordsLowerCase(PROJECT)
KW_INSERT_INTO = KEYWORDS_LOWERCASE ? "insert into " : "INSERT INTO "
KW_VALUES = KEYWORDS_LOWERCASE ? ") values (" : ") VALUES ("
KW_NULL = KEYWORDS_LOWERCASE ? "null" : "NULL"
def record(columns, dataRow) {
OUT.append(KW_INSERT_INTO)
if (TABLE == null) OUT.append("MY_TABLE")
else OUT.append(TABLE.getParent().getName()).append(".").append(TABLE.getName())
OUT.append(" (")
columns.eachWithIndex { column, idx ->
OUT.append(column.name()).append(idx != columns.size() - 1 ? SEP : "")
}
OUT.append(KW_VALUES)
columns.eachWithIndex { column, idx ->
def value = dataRow.value(column)
def stringValue = value == null ? KW_NULL : FORMATTER.formatValue(value, column)
def isStringLiteral = value != null && FORMATTER.isStringLiteral(value, column)
if (isStringLiteral && DIALECT.getDbms().isMysql()) stringValue = stringValue.replace("\\", "\\\\")
OUT.append(isStringLiteral ? (STRING_PREFIX + QUOTE) : "")
.append(isStringLiteral ? stringValue.replace(QUOTE, QUOTE + QUOTE) : stringValue)
.append(isStringLiteral ? QUOTE : "")
.append(idx != columns.size() - 1 ? SEP : "")
}
OUT.append(");").append(NEWLINE)
}
ROWS.each { row -> record(COLUMNS, row) }

View File

@@ -0,0 +1,93 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import com.intellij.openapi.util.text.StringUtil
import java.util.regex.Pattern
NEWLINE = System.getProperty("line.separator")
pattern = Pattern.compile("[^\\w\\d]")
def escapeTag(name) {
name = pattern.matcher(name).replaceAll("_")
return name.isEmpty() || !Character.isLetter(name.charAt(0)) ? "_$name" : name
}
def printRow(level, rowTag, values) {
def prefix = "$NEWLINE${StringUtil.repeat(" ", level)}"
OUT.append("$prefix<$rowTag>")
values.each { name, col, valuesName, value ->
switch (value) {
case Map:
def mapValues = new ArrayList<Tuple>()
value.each { key, v -> mapValues.add(new Tuple(escapeTag(key.toString()), col, key.toString(), v)) }
printRow(level + 1, name, mapValues)
break
case Object[]:
case Iterable:
def listItems = new ArrayList<Tuple>()
def itemName = valuesName != null ? escapeTag(StringUtil.unpluralize(valuesName) ?: "item") : "item"
value.collect { v -> listItems.add(new Tuple(itemName, col, null, v)) }
printRow(level + 1, name, listItems)
break
default:
OUT.append("$prefix <$name>")
if (value == null) OUT.append("null")
else {
def formattedValue = FORMATTER.formatValue(value, col)
if (isXmlString(formattedValue)) OUT.append(formattedValue)
else OUT.append(StringUtil.escapeXmlEntities(formattedValue))
}
OUT.append("</$name>")
}
}
OUT.append("$prefix</$rowTag>")
}
def isXmlString(string) {
return string.startsWith("<") && string.endsWith(">") && (string.contains("</") || string.contains("/>"))
}
OUT.append(
"""<?xml version="1.0" encoding="UTF-8"?>
<data>""")
if (!TRANSPOSED) {
ROWS.each { row ->
def values = COLUMNS
.findAll { col -> row.hasValue(col) }
.collect { col ->
new Tuple(escapeTag(col.name()), col, col.name(), row.value(col))
}
printRow(0, "row", values)
}
}
else {
def values = COLUMNS.collect { new ArrayList<Tuple>() }
ROWS.eachWithIndex { row, rowIdx ->
COLUMNS.eachWithIndex { col, colIdx ->
if (row.hasValue(col)) {
def value = row.value(col)
values[colIdx].add(new Tuple("row${rowIdx + 1}", col, col.name(), value))
}
}
}
values.eachWithIndex { it, index ->
printRow(0, escapeTag(COLUMNS[index].name()), it)
}
}
OUT.append("""
</data>
""")

View File

@@ -0,0 +1,53 @@
import com.intellij.database.model.DasObjectWithSource
import com.intellij.database.model.DasSchemaChild
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.DasUtil
import com.intellij.database.util.ObjectPath
LAYOUT.ignoreDependencies = true
LAYOUT.baseName { ctx -> baseName(ctx.object) }
LAYOUT.fileScope { path -> fileScope(path) }
def baseName(obj) {
def db = DasUtil.getCatalog(obj)
def schema = DasUtil.getSchema(obj)
def file = fileName(obj)
if (db.isEmpty()) {
if (!schema.isEmpty()) return "anonymous/" + sanitize(schema) + "/" + file
return file
}
else if (schema.isEmpty()) {
return sanitize(db) + "/" + file
}
else {
return sanitize(db) + "/" + sanitize(schema) + "/" + file
}
}
def fileName(obj) {
for (def cur = obj; cur != null; cur = cur.dasParent) {
if (storeSeparately(cur)) return sanitize(cur.name)
}
return sanitize(obj.name)
}
def fileScope(path) {
def root = path.getName(0).toString()
if (root.endsWith(".sql")) return null
def next = path.getName(1).toString()
if (next.endsWith(".sql")) {
if (root == "anonymous") return null
return ObjectPath.create(root, ObjectKind.DATABASE)
}
if (root == "anonymous") return ObjectPath.create(next, ObjectKind.SCHEMA)
return ObjectPath.create(root, ObjectKind.DATABASE).append(next, ObjectKind.SCHEMA)
}
def storeSeparately(obj) {
return obj instanceof DasObjectWithSource || obj instanceof DasSchemaChild
}
def sanitize(name) {
return name.replace('/', 'slash')
}

View File

@@ -0,0 +1,42 @@
import com.intellij.database.model.DasObjectWithSource
import com.intellij.database.model.DasSchemaChild
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.DasUtil
import com.intellij.database.util.ObjectPath
LAYOUT.ignoreDependencies = true
LAYOUT.baseName { ctx -> baseName(ctx.object) }
LAYOUT.fileScope { path -> fileScope(path) }
def baseName(obj) {
def schema = DasUtil.getSchema(obj)
def file = fileName(obj)
if (schema.isEmpty()) {
return file
}
else {
return sanitize(schema) + "/" + obj.kind.code() + "/" + file
}
}
def fileName(obj) {
for (def cur = obj; cur != null; cur = cur.dasParent) {
if (storeSeparately(cur)) return sanitize(cur.name)
}
return sanitize(obj.name)
}
def fileScope(path) {
def root = path.getName(0).toString()
if (root.endsWith(".sql")) return null
return ObjectPath.create(root, ObjectKind.SCHEMA)
}
def storeSeparately(obj) {
return obj instanceof DasObjectWithSource || obj instanceof DasSchemaChild
}
def sanitize(name) {
return name.replace('/', 'slash')
}

View File

@@ -0,0 +1,42 @@
import com.intellij.database.model.DasObjectWithSource
import com.intellij.database.model.DasSchemaChild
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.DasUtil
import com.intellij.database.util.ObjectPath
LAYOUT.ignoreDependencies = true
LAYOUT.baseName { ctx -> baseName(ctx.object) }
LAYOUT.fileScope { path -> fileScope(path) }
def baseName(obj) {
def schema = DasUtil.getSchema(obj)
def file = fileName(obj)
if (schema.isEmpty()) {
return file
}
else {
return sanitize(schema) + "/" + file
}
}
def fileName(obj) {
for (def cur = obj; cur != null; cur = cur.dasParent) {
if (storeSeparately(cur)) return sanitize(cur.name)
}
return sanitize(obj.name)
}
def fileScope(path) {
def root = path.getName(0).toString()
if (root.endsWith(".sql")) return null
return ObjectPath.create(root, ObjectKind.SCHEMA)
}
def storeSeparately(obj) {
return obj instanceof DasObjectWithSource || obj instanceof DasSchemaChild
}
def sanitize(name) {
return name.replace('/', 'slash')
}

View File

@@ -0,0 +1,21 @@
import com.intellij.database.model.DasObjectWithSource
import com.intellij.database.model.DasSchemaChild
LAYOUT.baseName { ctx -> baseName(ctx.object) }
LAYOUT.fileName { ctx -> String.format("%03d-%s.sql", ctx.count, ctx.baseName) }
def baseName(obj) {
for (def cur = obj; cur != null; cur = cur.dasParent) {
if (storeSeparately(cur)) return sanitize(cur.name)
}
return sanitize(obj.name)
}
def storeSeparately(obj) {
return obj instanceof DasObjectWithSource || obj instanceof DasSchemaChild
}
def sanitize(name) {
return name.replace('/', 'slash')
}

View File

@@ -0,0 +1,21 @@
import com.intellij.database.model.DasObjectWithSource
import com.intellij.database.model.DasSchemaChild
LAYOUT.ignoreDependencies = true
LAYOUT.baseName { ctx -> baseName(ctx.object) }
def baseName(obj) {
for (def cur = obj; cur != null; cur = cur.dasParent) {
if (storeSeparately(cur)) return sanitize(cur.name)
}
return sanitize(obj.name)
}
def storeSeparately(obj) {
return obj instanceof DasObjectWithSource || obj instanceof DasSchemaChild
}
def sanitize(name) {
return name.replace('/', 'slash')
}

View File

@@ -0,0 +1,74 @@
import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil
/*
* Available context bindings:
* SELECTION Iterable<DasObject>
* PROJECT project
* FILES files helper
*/
packageName = "com.sample;"
typeMapping = [
(~/(?i)int/) : "long",
(~/(?i)float|double|decimal|real/): "double",
(~/(?i)datetime|timestamp/) : "java.sql.Timestamp",
(~/(?i)date/) : "java.sql.Date",
(~/(?i)time/) : "java.sql.Time",
(~/(?i)/) : "String"
]
FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
SELECTION.filter { it instanceof DasTable }.each { generate(it, dir) }
}
def generate(table, dir) {
def className = javaName(table.getName(), true)
def fields = calcFields(table)
new File(dir, className + ".java").withPrintWriter { out -> generate(out, className, fields) }
}
def generate(out, className, fields) {
out.println "package $packageName"
out.println ""
out.println ""
out.println "public class $className {"
out.println ""
fields.each() {
if (it.annos != "") out.println " ${it.annos}"
out.println " private ${it.type} ${it.name};"
}
out.println ""
fields.each() {
out.println ""
out.println " public ${it.type} get${it.name.capitalize()}() {"
out.println " return ${it.name};"
out.println " }"
out.println ""
out.println " public void set${it.name.capitalize()}(${it.type} ${it.name}) {"
out.println " this.${it.name} = ${it.name};"
out.println " }"
out.println ""
}
out.println "}"
}
def calcFields(table) {
DasUtil.getColumns(table).reduce([]) { fields, col ->
def spec = Case.LOWER.apply(col.getDasType().getSpecification())
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
fields += [[
name : javaName(col.getName(), false),
type : typeStr,
annos: ""]]
}
}
def javaName(str, capitalize) {
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
.collect { Case.LOWER.apply(it).capitalize() }
.join("")
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
}

View File

@@ -0,0 +1,6 @@
<keymap version="1" name="VSCode (Migrated)" parent="VSCode">
<action id="EditorDeleteLine">
<keyboard-shortcut first-keystroke="shift ctrl k" />
<keyboard-shortcut first-keystroke="ctrl d" second-keystroke="ctrl d" />
</action>
</keymap>

View File

@@ -0,0 +1,6 @@
<application>
<component name="AIOnboardingPromoWindowAdvisor">
<option name="attempts" value="2" />
<option name="shouldShowNextTime" value="NO" />
</component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="CommonFeedbackSurveyService"><![CDATA[{}]]></component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="DontShowAgainFeedbackService"><![CDATA[{}]]></component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="WebStormTypeEngineSurveyState"><![CDATA[{}]]></component>
</application>

View File

@@ -0,0 +1,61 @@
<application>
<component name="ActionsLocalSummary">
<e n="ActivateFindToolWindow">
<i c="1" l="1750071271219" />
</e>
<e n="EditorBackSpace">
<i c="50" l="1750072245916" />
</e>
<e n="EditorDelete">
<i c="2" l="1750071062164" />
</e>
<e n="EditorDeleteToWordStart">
<i c="1" l="1750071348044" />
</e>
<e n="EditorPaste">
<i c="1" l="1750071348238" />
</e>
<e n="FindInPath">
<i c="1" l="1750071296228" />
</e>
<e n="ReplaceInPath">
<i c="4" l="1750071738738" />
</e>
<e n="SaveAll">
<i c="1" l="1750071910206" />
</e>
<e n="SaveDocument">
<i c="6" l="1750071729343" />
</e>
<e n="SearchEverywhere">
<i c="2" l="1750071898181" />
</e>
<e n="WelcomeScreen.OpenDirectoryProject">
<i c="1" l="1750070854153" />
</e>
<e n="com.intellij.find.impl.FindPopupPanel$MySwitchStateToggleAction">
<i c="1" l="1750071333083" />
</e>
<e n="com.intellij.ide.startup.importSettings.chooser.productChooser.ExpChooserAction">
<i c="1" l="1750070838821" />
</e>
<e n="com.intellij.openapi.editor.impl.EditorMarkupModelImpl$TrafficLightAction">
<i c="2" l="1750070962134" />
</e>
<e n="com.intellij.openapi.fileEditor.impl.tabActions.CloseTab">
<i c="1" l="1750070870906" />
</e>
<e n="com.intellij.openapi.project.DumbAwareAction$SimpleDumbAwareAction">
<i c="3" l="1750071899548" />
</e>
<e n="com.intellij.openapi.wm.impl.SquareAnActionButton">
<i c="4" l="1750071289291" />
</e>
<e n="com.intellij.openapi.wm.impl.customFrameDecorations.header.toolbar.MainMenuButton$ShowMenuAction">
<i c="3" l="1750071900124" />
</e>
<e n="com.intellij.toolWindow.ShowMoreToolWindowsAction">
<i c="2" l="1750071269716" />
</e>
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="EditorColorsManagerImpl">
<global_color_scheme name="Dark" />
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="ConsoleFont">
<option name="VERSION" value="1" />
</component>
</application>

View File

@@ -0,0 +1,12 @@
<application>
<component name="ScriptedLoadersAssociations">
<extensions>
<set>
<option value="parquet" />
<option value="shp" />
<option value="xls" />
<option value="xlsx" />
</set>
</extensions>
</component>
</application>

View File

@@ -0,0 +1,58 @@
<application>
<component name="DatabaseSettings" version="10">
<text-mode>
<parameter-patterns>
<parameter-pattern value="#(\w+)#" in-scripts="true" scope="XML" predefined="#name#" />
<parameter-pattern value="(?&lt;=\W|\A)\$(\d+|[a-zA-Z_](?:\w|\.)*)\$?(?=\W|\z)" in-scripts="true" scope="*,-SQL" predefined="$a.b.c$?" />
<parameter-pattern value="(?&lt;=\W|\A)#(\d+|[a-zA-Z_](?:\w|\.)*)#?(?=\W|\z)" in-scripts="true" scope="*,-SQL" predefined="#a.b.c#?" />
<parameter-pattern value="%\((\w+)\)s" in-scripts="true" scope="Python" predefined="%(name)s" />
<parameter-pattern value="%\w+" in-scripts="true" scope="JAVA,Python,PHP" predefined="%name" />
<parameter-pattern value="\:\'.*\'" in-scripts="true" scope="PostgreSQL" predefined=":'name'" />
<parameter-pattern value="\$\{([^\{\}]*)\}" in-scripts="true" predefined="${name}" />
<parameter-pattern value="\$\(([^\)]+)\)" in-scripts="true" predefined="$(name)" />
</parameter-patterns>
</text-mode>
<csv-formats>
<csv-format name="CSV" id="Comma-separated (CSV)_id">
<data>
<record-format prefix="" suffix="" nullText="" quotationPolicy="as needed" valueSeparator="," recordSeparator="&#10;">
<quotation>
<quotes left="&quot;" right="&quot;" leftEscaped="&quot;&quot;" rightEscaped="&quot;&quot;" />
<quotes left="'" right="'" leftEscaped="''" rightEscaped="''" />
</quotation>
</record-format>
</data>
</csv-format>
<csv-format name="TSV" id="Tab-separated (TSV)_id">
<data>
<record-format prefix="" suffix="" nullText="" quotationPolicy="as needed" valueSeparator="&#9;" recordSeparator="&#10;">
<quotation>
<quotes left="&quot;" right="&quot;" leftEscaped="&quot;&quot;" rightEscaped="&quot;&quot;" />
<quotes left="'" right="'" leftEscaped="''" rightEscaped="''" />
</quotation>
</record-format>
</data>
</csv-format>
<csv-format name="Pipe-separated" id="Pipe-separated_id">
<data>
<record-format prefix="" suffix="" nullText="" quotationPolicy="as needed" valueSeparator="|" recordSeparator="&#10;">
<quotation>
<quotes left="&quot;" right="&quot;" leftEscaped="&quot;&quot;" rightEscaped="&quot;&quot;" />
<quotes left="'" right="'" leftEscaped="''" rightEscaped="''" />
</quotation>
</record-format>
</data>
</csv-format>
<csv-format name="Semicolon-separated" id="Semicolon-separated_id">
<data>
<record-format prefix="" suffix="" nullText="" quotationPolicy="as needed" valueSeparator=";" recordSeparator="&#10;">
<quotation>
<quotes left="&quot;" right="&quot;" leftEscaped="&quot;&quot;" rightEscaped="&quot;&quot;" />
<quotes left="'" right="'" leftEscaped="''" rightEscaped="''" />
</quotation>
</record-format>
</data>
</csv-format>
</csv-formats>
</component>
</application>

View File

@@ -0,0 +1,13 @@
<application>
<component name="XDebuggerSettings">
<data-views />
<general />
<debuggers>
<debugger id="javascript">
<configuration>
<custom-object-presentation />
</configuration>
</debugger>
</debuggers>
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="ExternalDiffSettings">
<option name="MIGRATE_OLD_SETTINGS" value="true" />
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="DefaultFont">
<option name="VERSION" value="1" />
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="CodeInsightSettings">
<option name="AUTO_POPUP_JAVADOC_INFO" value="true" />
</component>
</application>

View File

@@ -0,0 +1,109 @@
<application>
<component name="FeatureUsageStatistics" first-run="1750070844002" have-been-shown="false" show-in-other="true" show-in-compilation="true">
<feature id="editing.completion.camelHumps" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.surroundwith.statement" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.goto.file.line" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.popup.symbol" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="switcher" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.replace" count="0" last-shown="1750072244250" last-used="0" shown-count="1" />
<feature id="codeassists.complete.statement" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="vcs.show.quick.list" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.convert.line.separators" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.console.execute" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.recent.files" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="scratch" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="vcs.pull.requests" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="vcs.annotate" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.open.last.tool.window" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.reformat.code" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.show.liveTemplates" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.copy.line" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.find.in.files" count="1" last-shown="0" last-used="1750071296431" shown-count="0" />
<feature id="db.copy.table" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.hide.tool.window" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.find.replace.in.files.toggle" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="intentions.check.regexp" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="profiler.open.snapshot" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.comment.line" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="SearchEverywhere" count="2" last-shown="0" last-used="1750071898232" shown-count="0" />
<feature id="editor.delete.line" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.inheritance.hierarchy" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.duplicate" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.copy.reference" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.find" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.quickdefinition" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.basic" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.postfix" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="dir.diff" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.recent.locations" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.select.word" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.close.other.editors" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="debugger.evaluate.expression" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.highlight.usages" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="debugger.breakpoint.edit" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassist.inspect.batch" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.table.editor" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.liveTemplates" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.goto.usages" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="intentions.edit.regexp" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.quickdefinition.lookup" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.find.usages" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.clipboard.history" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.compare.editor.with.clipboard" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.rename" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.popup.action" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.show.quick.list" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.forget.cached.schemas" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.cancelByControlArrows" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="find.recent.search" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.goto.inspection" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="vcs.show.local.history" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="vcs.use.integration" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.popup.file" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.overrideimplement" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.console.run.intention" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.diff" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.close.all.editors" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.popup.wildcards" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.introduceVariable" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.extractMethod" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.surroundwith.expression" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.generate.code" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.goto.declaration" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.finishByDotEtc" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.open.project.tool.window" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.join.lines" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.inlineVariable" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="debugger.breakpoint.non.suspending" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.finishByCtrlDot" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.context.actions" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.select.in" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.tree.speedsearch" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.horizontal.scrolling" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.replace" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.popup.camelprefix" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.popup.class" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.parameterInfo" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.table.editor.wrapper" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="find.completion" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="tag.name.completion" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.introduceVariable.incompleteStatement" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.readonly.datasource" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="vcs.compare.file.versions" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.find.replace.toggle" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.add.carets.using.double.ctrl" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.console" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.quickjavadoc.lookup" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.scheme.quickswitch" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.replace.in.files" count="4" last-shown="0" last-used="1750071738801" shown-count="0" />
<feature id="navigation.popup.file.structure" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.quickjavadoc.ctrln" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.quickjavadoc" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.recentchanges" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.move.statement.up.down" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.changeSorting" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.assign.color" count="0" last-shown="0" last-used="0" shown-count="0" />
<completionStatsTag />
<fixesStatsTag />
</component>
</application>

View File

@@ -0,0 +1,24 @@
<application>
<component name="FindSettings">
<option name="customScope" value="All Places" />
<option name="defaultScopeName" value="All Places" />
<option name="regularExpressions" value="true" />
<option name="REGULAR_EXPRESSIONS" value="true" />
<option name="SEARCH_SCOPE" value="All Places" />
<mask>*.xml</mask>
<mask>*.css</mask>
<mask>*.htm</mask>
<mask>*.sht</mask>
<mask>*.shtm</mask>
<mask>*.shtml</mask>
<mask>*.html</mask>
<mask>*.mts</mask>
<mask>*.ats</mask>
<mask>*.cts</mask>
<mask>*.ts</mask>
<mask>*.cjs</mask>
<mask>*.mjs</mask>
<mask>*.es6</mask>
<mask>*.js</mask>
</component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="GitLabAccounts"><![CDATA[{}]]></component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="GeneralLocalSettings">
<option name="defaultProjectDirectory" />
</component>
</application>

View File

@@ -0,0 +1,7 @@
<application>
<component name="Registry">
<entry key="moved.to.new.ui" value="true" source="SYSTEM" />
<entry key="ide.experimental.ui" value="true" source="SYSTEM" />
<entry key="eslint.additional.file.extensions" value="svelte" source="SYSTEM" />
</component>
</application>

View File

@@ -0,0 +1,13 @@
<application>
<component name="KeymapFlagsStorage">
<option name="keymapToDescriptor">
<map>
<entry key="VSCode (Migrated)">
<value>
<list />
</value>
</entry>
</map>
</option>
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="KeymapManager">
<active_keymap name="VSCode (Migrated)" />
</component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="Logs.Categories"><![CDATA[{}]]></component>
</application>

View File

@@ -0,0 +1,7 @@
<application>
<component name="NodeJsLocalInterpreterManager">
<local-interpreter path="/usr/bin/node">
<version-cache version="23.11.0" last-modified="1744381027000" />
</local-interpreter>
</component>
</application>

View File

@@ -0,0 +1,49 @@
<application>
<component name="FileEditorProviderManager">{}</component>
<component name="NotRoamableUiSettings">
<option name="fontSize" value="13.0" />
<option name="presentationModeIdeScale" value="1.75" />
</component>
<component name="PropertyService">{
&quot;keyToString&quot;: {
&quot;GeneralSettings.initiallyConfigured&quot;: &quot;true&quot;,
&quot;LAST_CALCULATED_COLOR_INDEX_KEY&quot;: &quot;7&quot;,
&quot;RunOnceActivity.TerminalOptionsProvider.migration.2025.1.1&quot;: &quot;true&quot;,
&quot;RunOnceActivity.VFSInitializationConditionsToFusReporter&quot;: &quot;true&quot;,
&quot;RunOnceActivity.git.modal.commit.deprecation.notification&quot;: &quot;true&quot;,
&quot;RunOnceActivity.git.modal.commit.toggle&quot;: &quot;true&quot;,
&quot;RunOnceActivity.svelte.init.key&quot;: &quot;true&quot;,
&quot;RunOnceActivity.webstorm.auto-popup.quick-doc.initialized&quot;: &quot;true&quot;,
&quot;ask.about.ctrl.y.shortcut.v2&quot;: &quot;true&quot;,
&quot;evlsprt3.251&quot;: &quot;6&quot;,
&quot;experimental.ui.on.first.startup&quot;: &quot;true&quot;,
&quot;experimental.ui.used.version&quot;: &quot;251.26094.131&quot;,
&quot;fileTypeChangedCounter&quot;: &quot;2&quot;,
&quot;find.popup.splitter&quot;: &quot;0.5318182&quot;,
&quot;fontSizeToResetConsole&quot;: &quot;13.0&quot;,
&quot;fontSizeToResetEditor&quot;: &quot;13.0&quot;,
&quot;input.method.disabler.muted&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;/home/leo/uni/paw/client&quot;,
&quot;llm.installer.last.toolwindow.state&quot;: &quot;LLM_INSTALLER&quot;,
&quot;migrated.non.roamable.values.from.general.settings&quot;: &quot;true&quot;,
&quot;previousColorScheme&quot;: &quot;_@user_Dark&quot;,
&quot;registry.to.advanced.settings.migration.build&quot;: &quot;WS-251.26094.131&quot;,
&quot;terminal.gen.one.option.visible&quot;: &quot;false&quot;,
&quot;ts.lib.d.ts.version&quot;: &quot;5.6.3&quot;
},
&quot;keyToStringList&quot;: {
&quot;file.chooser.recent.files&quot;: [
&quot;/home/leo/uni/paw/client&quot;
],
&quot;fileTypeDetectors&quot;: [
&quot;com.intellij.ide.scratch.ScratchFileServiceImpl$Detector&quot;,
&quot;com.intellij.docker.dockerFile.DockerFileTypeDetector&quot;,
&quot;com.intellij.javascript.debugger.sourcemap.SourceMapFileType$MyFileTypeDetector&quot;,
&quot;com.intellij.database.vfs.DbStorageFileType$Detector&quot;,
&quot;com.jetbrains.nodejs.util.NodeFileTypeDetector$JavaScriptFileTypeDetector&quot;,
&quot;com.jetbrains.nodejs.util.NodeFileTypeDetector$TypeScriptFileTypeDetector&quot;,
&quot;org.jetbrains.plugins.textmate.TextMateFileType$TextMateFileDetector&quot;
]
}
}</component>
</application>

View File

@@ -0,0 +1,6 @@
<application>
<component name="ProfilerRunConfigurations">
<profilerRunConfigurations />
<knownConfigurationTypes />
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="HttpConfigurable">
<option name="USE_PROXY_PAC" value="true" />
</component>
</application>

View File

@@ -0,0 +1,25 @@
<application>
<component name="RecentProjectsManager">
<option name="additionalInfo">
<map>
<entry key="$USER_HOME$/uni/paw/client">
<value>
<RecentProjectMetaInfo frameTitle="client websocket.service.ts" opened="true" projectWorkspaceId="2yaRnFlCKmF4XBPejauZaQvJRfm">
<option name="activationTimestamp" value="1750072249321" />
<option name="binFolder" value="$APPLICATION_HOME_DIR$/bin" />
<option name="build" value="WS-251.26094.131" />
<option name="buildTimestamp" value="1749016560000" />
<option name="colorInfo">
<RecentProjectColorInfo associatedIndex="7" />
</option>
<frame x="0" y="0" width="1920" height="1050" extendedState="6" />
<option name="productionCode" value="WS" />
<option name="projectOpenTimestamp" value="1750070863316" />
</RecentProjectMetaInfo>
</value>
</entry>
</map>
</option>
<option name="lastOpenedProject" value="$USER_HOME$/uni/paw/client" />
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="SettingsSyncSettings">
<option name="migrationFromOldStorageChecked" value="true" />
</component>
</application>

View File

@@ -0,0 +1,6 @@
<application>
<component name="TerminalFontOptions">
<option name="VERSION" value="1" />
<option name="SECONDARY_FONT_FAMILY" />
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="TerminalOptionsProvider">
<option name="terminalEngine" value="REWORKED" />
</component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="TextMateUserBundlesSettings"><![CDATA[{}]]></component>
</application>

View File

@@ -0,0 +1,9 @@
<application>
<component name="Trusted.Paths">
<option name="TRUSTED_PROJECT_PATHS">
<map>
<entry key="$USER_HOME$/uni/paw/client" value="true" />
</map>
</option>
</component>
</application>

View File

@@ -0,0 +1,8 @@
<application>
<component name="UpdatesConfigurable">
<option name="LAST_BUILD_CHECKED" value="WS-251.26094.131" />
<option name="LAST_TIME_CHECKED" value="1750070837020" />
<option name="OBSOLETE_CUSTOM_REPOSITORIES_CLEAN_NEEDED" value="false" />
<option name="WHATS_NEW_SHOWN_FOR" value="251" />
</component>
</application>

View File

@@ -0,0 +1,8 @@
<application>
<component name="UsagesStatistic">
<system-event-id recorder="MP" id="5" />
<system-event-id recorder="FUS" id="2058" />
<system-event-id recorder="IJ_MAP" id="3" />
<system-event-id recorder="ML" id="2" />
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="WebTypesNpmLoader" timestamp="1750070863481">
<enabled />
</component>
</application>

View File

@@ -0,0 +1,83 @@
<application>
<component name="ToolWindowLayout"><![CDATA[{
"layouts": {
"Custom": {
"v2": [
{
"id": "Project",
"order": 0,
"contentUiType": "COMBO",
"weight": 0.25
},
{
"id": "Commit",
"order": 1,
"weight": 0.25
},
{
"id": "Structure",
"order": 2,
"weight": 0.25,
"isSplit": true
},
{
"id": "Notifications",
"order": 0,
"anchor": "RIGHT",
"contentUiType": "COMBO",
"weight": 0.25
},
{
"id": "AIAssistant",
"order": 1,
"anchor": "RIGHT",
"weight": 0.25
},
{
"id": "Database",
"order": 2,
"anchor": "RIGHT",
"weight": 0.25
},
{
"id": "Gradle",
"order": 3,
"anchor": "RIGHT",
"weight": 0.25
},
{
"id": "Maven",
"order": 4,
"anchor": "RIGHT",
"weight": 0.25
},
{
"id": "Version Control",
"order": 0,
"anchor": "BOTTOM"
},
{
"id": "Problems",
"order": 1,
"anchor": "BOTTOM"
},
{
"id": "Problems View",
"order": 2,
"anchor": "BOTTOM"
},
{
"id": "Terminal",
"order": 3,
"anchor": "BOTTOM"
},
{
"id": "Services",
"order": 4,
"anchor": "BOTTOM"
}
]
}
}
}]]></component>
</application>

View File

@@ -0,0 +1,15 @@
<application>
<component name="DimensionService">
<location key="find.popup.0.0.1920.1080" x="724" y="135" />
<size key="find.popup.0.0.1920.1080" width="675" height="864" />
</component>
<component name="WindowManager">
<frame x="0" y="0" width="1920" height="1050" extendedState="6" />
</component>
<component name="WindowStateApplicationService">
<state x="743" y="214" width="426" height="487" key="FileChooserDialogImpl" timestamp="1750070861101">
<screen x="0" y="0" width="1920" height="1050" />
</state>
<state x="743" y="214" width="426" height="487" key="FileChooserDialogImpl/0.0.1920.1050" timestamp="1750070861101" />
</component>
</application>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,4 @@
-Xmx1917m
-Dide.managed.by.toolbox=/opt/jetbrains-toolbox/jetbrains-toolbox
-Dtoolbox.notification.token=f2aa000a-bd7a-4e65-96e1-82aec89929f4
-Dtoolbox.notification.portFile=/home/leo/.cache/JetBrains/Toolbox/ports/7776433b-ecdc-42e3-87ba-c00cffae3373.port

View File

@@ -0,0 +1,928 @@
<project version="4">
<component name="BookmarksManager">
<option name="groups">
<GroupState>
<option name="name" value="client" />
</GroupState>
</option>
</component>
<component name="FileEditorManager">
<leaf ideFingerprint="lbwtj99vdhbq" SIDE_TABS_SIZE_LIMIT_KEY="-1">
<file>
<entry file="file://$PROJECT_DIR$/src/app/shared/shared.module.ts">
<provider editor-type-id="text-editor" selected="true">
<state>
<caret column="7" selection-start-column="7" selection-end-column="7" />
<folding>
<element signature="e#0#41#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<tab><![CDATA[{"tabTitle":"shared.module.ts","foregroundColor":-2104859,"textAttributes":{"name":"a"},"icon":[10,57,99,111,109,46,105,110,116,101,108,108,105,106,46,117,105,46,105,99,111,110,115,46,82,97,115,116,101,114,105,122,101,100,73,109,97,103,101,68,97,116,97,76,111,97,100,101,114,68,101,115,99,114,105,112,116,111,114,18,99,10,34,105,99,111,110,115,47,102,105,108,101,84,121,112,101,115,47,84,121,112,101,83,99,114,105,112,116,70,105,108,101,46,115,118,103,18,36,105,99,111,110,115,47,101,120,112,117,105,47,102,105,108,101,84,121,112,101,115,47,116,121,112,101,83,99,114,105,112,116,46,115,118,103,26,10,74,97,118,97,83,99,114,105,112,116,40,-23,-107,-64,-58,-8,-1,-1,-1,-1,1,48,0]}]]></tab>
</file>
<file>
<entry file="file://$PROJECT_DIR$/src/app/features/nutritionist/dashboard/dashboard.component.html">
<provider editor-type-id="text-editor" selected="true">
<state relative-caret-position="4268">
<caret line="194" selection-start-line="194" selection-end-line="194" />
</state>
</provider>
</entry>
<tab><![CDATA[{"tabTitle":"dashboard.component.html","foregroundColor":-9392385,"textAttributes":{"name":"a","children":[{"name":"option","attributes":{"name":"FOREGROUND","value":"70aeff"}}]},"icon":[10,57,99,111,109,46,105,110,116,101,108,108,105,106,46,117,105,46,105,99,111,110,115,46,82,97,115,116,101,114,105,122,101,100,73,109,97,103,101,68,97,116,97,76,111,97,100,101,114,68,101,115,99,114,105,112,116,111,114,18,68,10,18,102,105,108,101,84,121,112,101,115,47,104,116,109,108,46,115,118,103,18,24,101,120,112,117,105,47,102,105,108,101,84,121,112,101,115,47,104,116,109,108,46,115,118,103,26,12,99,111,109,46,105,110,116,101,108,108,105,106,40,-72,-21,-93,-62,3,48,0]}]]></tab>
</file>
<file>
<entry file="file://$PROJECT_DIR$/src/app/features/nutritionist/patient-detail/patient-detail.component.html">
<provider editor-type-id="text-editor" selected="true" />
</entry>
<tab><![CDATA[{"tabTitle":"patient-detail.component.html","foregroundColor":-1536119,"textAttributes":{"name":"a","children":[{"name":"option","attributes":{"name":"FOREGROUND","value":"e88f89"}}]},"icon":[10,57,99,111,109,46,105,110,116,101,108,108,105,106,46,117,105,46,105,99,111,110,115,46,82,97,115,116,101,114,105,122,101,100,73,109,97,103,101,68,97,116,97,76,111,97,100,101,114,68,101,115,99,114,105,112,116,111,114,18,68,10,18,102,105,108,101,84,121,112,101,115,47,104,116,109,108,46,115,118,103,18,24,101,120,112,117,105,47,102,105,108,101,84,121,112,101,115,47,104,116,109,108,46,115,118,103,26,12,99,111,109,46,105,110,116,101,108,108,105,106,40,-72,-21,-93,-62,3,48,0]}]]></tab>
</file>
<file>
<entry file="file://$PROJECT_DIR$/src/app/features/nutritionist/nutritionist.routes.ts">
<provider editor-type-id="text-editor" selected="true">
<state relative-caret-position="220">
<caret line="14" column="40" selection-start-line="14" selection-start-column="40" selection-end-line="14" selection-end-column="40" />
</state>
</provider>
</entry>
<tab><![CDATA[{"tabTitle":"nutritionist.routes.ts","foregroundColor":-9392385,"textAttributes":{"name":"a","children":[{"name":"option","attributes":{"name":"FOREGROUND","value":"70aeff"}}]},"icon":[10,57,99,111,109,46,105,110,116,101,108,108,105,106,46,117,105,46,105,99,111,110,115,46,82,97,115,116,101,114,105,122,101,100,73,109,97,103,101,68,97,116,97,76,111,97,100,101,114,68,101,115,99,114,105,112,116,111,114,18,99,10,34,105,99,111,110,115,47,102,105,108,101,84,121,112,101,115,47,84,121,112,101,83,99,114,105,112,116,70,105,108,101,46,115,118,103,18,36,105,99,111,110,115,47,101,120,112,117,105,47,102,105,108,101,84,121,112,101,115,47,116,121,112,101,83,99,114,105,112,116,46,115,118,103,26,10,74,97,118,97,83,99,114,105,112,116,40,-23,-107,-64,-58,-8,-1,-1,-1,-1,1,48,0]}]]></tab>
</file>
<file>
<entry file="file://$PROJECT_DIR$/src/app/features/chat/chat-page/chat-page.component.ts">
<provider editor-type-id="text-editor" selected="true" />
</entry>
<tab><![CDATA[{"tabTitle":"chat-page.component.ts","foregroundColor":-9392385,"textAttributes":{"name":"a","children":[{"name":"option","attributes":{"name":"FOREGROUND","value":"70aeff"}}]},"icon":[10,57,99,111,109,46,105,110,116,101,108,108,105,106,46,117,105,46,105,99,111,110,115,46,82,97,115,116,101,114,105,122,101,100,73,109,97,103,101,68,97,116,97,76,111,97,100,101,114,68,101,115,99,114,105,112,116,111,114,18,99,10,34,105,99,111,110,115,47,102,105,108,101,84,121,112,101,115,47,84,121,112,101,83,99,114,105,112,116,70,105,108,101,46,115,118,103,18,36,105,99,111,110,115,47,101,120,112,117,105,47,102,105,108,101,84,121,112,101,115,47,116,121,112,101,83,99,114,105,112,116,46,115,118,103,26,10,74,97,118,97,83,99,114,105,112,116,40,-23,-107,-64,-58,-8,-1,-1,-1,-1,1,48,0]}]]></tab>
</file>
<file>
<entry file="file://$PROJECT_DIR$/src/app/features/chat/chat-window/chat-window.component.ts">
<provider editor-type-id="text-editor" selected="true" />
</entry>
<tab><![CDATA[{"tabTitle":"chat-window.component.ts","foregroundColor":-9392385,"textAttributes":{"name":"a","children":[{"name":"option","attributes":{"name":"FOREGROUND","value":"70aeff"}}]},"icon":[10,57,99,111,109,46,105,110,116,101,108,108,105,106,46,117,105,46,105,99,111,110,115,46,82,97,115,116,101,114,105,122,101,100,73,109,97,103,101,68,97,116,97,76,111,97,100,101,114,68,101,115,99,114,105,112,116,111,114,18,99,10,34,105,99,111,110,115,47,102,105,108,101,84,121,112,101,115,47,84,121,112,101,83,99,114,105,112,116,70,105,108,101,46,115,118,103,18,36,105,99,111,110,115,47,101,120,112,117,105,47,102,105,108,101,84,121,112,101,115,47,116,121,112,101,83,99,114,105,112,116,46,115,118,103,26,10,74,97,118,97,83,99,114,105,112,116,40,-23,-107,-64,-58,-8,-1,-1,-1,-1,1,48,0]}]]></tab>
</file>
<file>
<entry file="file://$PROJECT_DIR$/src/app/core/guards/auth.guard.ts">
<provider editor-type-id="text-editor" selected="true">
<state relative-caret-position="44">
<caret line="2" column="60" selection-start-line="2" selection-start-column="60" selection-end-line="2" selection-end-column="60" />
<folding>
<element signature="e#0#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<tab><![CDATA[{"tabTitle":"auth.guard.ts","foregroundColor":-9392385,"textAttributes":{"name":"a","children":[{"name":"option","attributes":{"name":"FOREGROUND","value":"70aeff"}}]},"icon":[10,57,99,111,109,46,105,110,116,101,108,108,105,106,46,117,105,46,105,99,111,110,115,46,82,97,115,116,101,114,105,122,101,100,73,109,97,103,101,68,97,116,97,76,111,97,100,101,114,68,101,115,99,114,105,112,116,111,114,18,99,10,34,105,99,111,110,115,47,102,105,108,101,84,121,112,101,115,47,84,121,112,101,83,99,114,105,112,116,70,105,108,101,46,115,118,103,18,36,105,99,111,110,115,47,101,120,112,117,105,47,102,105,108,101,84,121,112,101,115,47,116,121,112,101,83,99,114,105,112,116,46,115,118,103,26,10,74,97,118,97,83,99,114,105,112,116,40,-23,-107,-64,-58,-8,-1,-1,-1,-1,1,48,0]}]]></tab>
</file>
<file>
<entry file="file://$PROJECT_DIR$/src/app/features/patient/dashboard/dashboard.component.ts">
<provider editor-type-id="text-editor" selected="true">
<state relative-caret-position="12122">
<caret line="587" selection-start-line="587" selection-end-line="587" />
</state>
</provider>
</entry>
<tab><![CDATA[{"tabTitle":"patient/…/dashboard.component.ts","foregroundColor":-9392385,"textAttributes":{"name":"a","children":[{"name":"option","attributes":{"name":"FOREGROUND","value":"70aeff"}}]},"icon":[10,57,99,111,109,46,105,110,116,101,108,108,105,106,46,117,105,46,105,99,111,110,115,46,82,97,115,116,101,114,105,122,101,100,73,109,97,103,101,68,97,116,97,76,111,97,100,101,114,68,101,115,99,114,105,112,116,111,114,18,99,10,34,105,99,111,110,115,47,102,105,108,101,84,121,112,101,115,47,84,121,112,101,83,99,114,105,112,116,70,105,108,101,46,115,118,103,18,36,105,99,111,110,115,47,101,120,112,117,105,47,102,105,108,101,84,121,112,101,115,47,116,121,112,101,83,99,114,105,112,116,46,115,118,103,26,10,74,97,118,97,83,99,114,105,112,116,40,-23,-107,-64,-58,-8,-1,-1,-1,-1,1,48,0]}]]></tab>
</file>
<file>
<entry file="file://$PROJECT_DIR$/src/app/features/nutritionist/patient-detail/patient-detail.component.ts">
<provider editor-type-id="text-editor" selected="true">
<state relative-caret-position="3564">
<caret line="178" column="3" selection-start-line="178" selection-start-column="3" selection-end-line="178" selection-end-column="3" />
</state>
</provider>
</entry>
<tab><![CDATA[{"tabTitle":"patient-detail.component.ts","foregroundColor":-1536119,"textAttributes":{"name":"a","children":[{"name":"option","attributes":{"name":"FOREGROUND","value":"e88f89"}}]},"icon":[10,57,99,111,109,46,105,110,116,101,108,108,105,106,46,117,105,46,105,99,111,110,115,46,82,97,115,116,101,114,105,122,101,100,73,109,97,103,101,68,97,116,97,76,111,97,100,101,114,68,101,115,99,114,105,112,116,111,114,18,99,10,34,105,99,111,110,115,47,102,105,108,101,84,121,112,101,115,47,84,121,112,101,83,99,114,105,112,116,70,105,108,101,46,115,118,103,18,36,105,99,111,110,115,47,101,120,112,117,105,47,102,105,108,101,84,121,112,101,115,47,116,121,112,101,83,99,114,105,112,116,46,115,118,103,26,10,74,97,118,97,83,99,114,105,112,116,40,-23,-107,-64,-58,-8,-1,-1,-1,-1,1,48,0]}]]></tab>
</file>
<file>
<entry file="file://$PROJECT_DIR$/src/app/features/nutritionist/dashboard/dashboard.component.ts">
<provider editor-type-id="text-editor" selected="true">
<state relative-caret-position="549">
<caret line="780" selection-start-line="780" selection-end-line="780" />
</state>
</provider>
</entry>
<tab><![CDATA[{"tabTitle":"nutritionist/…/dashboard.component.ts","foregroundColor":-9392385,"textAttributes":{"name":"a","children":[{"name":"option","attributes":{"name":"FOREGROUND","value":"70aeff"}}]},"icon":[10,57,99,111,109,46,105,110,116,101,108,108,105,106,46,117,105,46,105,99,111,110,115,46,82,97,115,116,101,114,105,122,101,100,73,109,97,103,101,68,97,116,97,76,111,97,100,101,114,68,101,115,99,114,105,112,116,111,114,18,99,10,34,105,99,111,110,115,47,102,105,108,101,84,121,112,101,115,47,84,121,112,101,83,99,114,105,112,116,70,105,108,101,46,115,118,103,18,36,105,99,111,110,115,47,101,120,112,117,105,47,102,105,108,101,84,121,112,101,115,47,116,121,112,101,83,99,114,105,112,116,46,115,118,103,26,10,74,97,118,97,83,99,114,105,112,116,40,-23,-107,-64,-58,-8,-1,-1,-1,-1,1,48,0]}]]></tab>
</file>
<file current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/app/core/services/websocket/websocket.service.ts">
<provider editor-type-id="text-editor" selected="true">
<state relative-caret-position="396">
<caret line="24" column="53" selection-start-line="24" selection-start-column="53" selection-end-line="24" selection-end-column="53" />
</state>
</provider>
</entry>
<tab><![CDATA[{"tabTitle":"websocket.service.ts","foregroundColor":-9392385,"textAttributes":{"name":"a","children":[{"name":"option","attributes":{"name":"FOREGROUND","value":"70aeff"}},{"name":"option","attributes":{"name":"EFFECT_COLOR","value":"fa6675"}},{"name":"option","attributes":{"name":"EFFECT_TYPE","value":"2"}}]},"icon":[10,57,99,111,109,46,105,110,116,101,108,108,105,106,46,117,105,46,105,99,111,110,115,46,82,97,115,116,101,114,105,122,101,100,73,109,97,103,101,68,97,116,97,76,111,97,100,101,114,68,101,115,99,114,105,112,116,111,114,18,99,10,34,105,99,111,110,115,47,102,105,108,101,84,121,112,101,115,47,84,121,112,101,83,99,114,105,112,116,70,105,108,101,46,115,118,103,18,36,105,99,111,110,115,47,101,120,112,117,105,47,102,105,108,101,84,121,112,101,115,47,116,121,112,101,83,99,114,105,112,116,46,115,118,103,26,10,74,97,118,97,83,99,114,105,112,116,40,-23,-107,-64,-58,-8,-1,-1,-1,-1,1,48,0]}]]></tab>
</file>
</leaf>
</component>
<component name="FileTypeUsageLocalSummary"><![CDATA[{
"data": {
"TypeScript": {
"usageCount": 17,
"lastUsed": 1750072237321
},
"HTML": {
"usageCount": 4,
"lastUsed": 1750072231199
},
"Markdown": {
"usageCount": 1,
"lastUsed": 1750070865870
}
}
}]]></component>
<component name="FindInProjectRecents">
<findStrings>
<find />
<find>\/\/.*</find>
<find>if your</find>
<find>\/\/.*\n</find>
</findStrings>
<replaceStrings>
<replace />
</replaceStrings>
<dirStrings>
<dir>$PROJECT_DIR$/src/app/core/guards</dir>
<dir>$PROJECT_DIR$/src/app/features/patient/dashboard</dir>
<dir>$PROJECT_DIR$/src/app/features/nutritionist/dashboard</dir>
</dirStrings>
</component>
<component name="FindInProjectScope">
<option name="isProjectScope" value="true" />
</component>
<component name="GitSEFilterConfiguration">{}</component>
<component name="IdeDocumentHistory"><![CDATA[{
"changedPaths": [
"/home/leo/uni/paw/client/src/app/features/nutritionist/dashboard/dashboard.component.html",
"/home/leo/uni/paw/client/src/app/features/nutritionist/patient-detail/patient-detail.component.ts",
"/home/leo/uni/paw/client/src/app/features/nutritionist/nutritionist.routes.ts",
"/home/leo/uni/paw/client/src/app/core/guards/auth.guard.ts",
"/home/leo/uni/paw/client/src/app/features/patient/dashboard/dashboard.component.ts",
"/home/leo/uni/paw/client/src/app/features/nutritionist/dashboard/dashboard.component.ts",
"/home/leo/uni/paw/client/src/app/core/services/websocket/websocket.service.ts"
]
}]]></component>
<component name="IgnoredFileRootStore">
<option name="generatedRoots">
<set>
<option value="$PROJECT_DIR$/.idea" />
</set>
</option>
</component>
<component name="LanguageUsageStatistics">
<language id="HTML">
<summary usageCount="4" lastUsage="1750072231199" />
</language>
<language id="Markdown">
<summary usageCount="1" lastUsage="1750070865872" />
</language>
<language id="TypeScript">
<summary usageCount="17" lastUsage="1750072237321" />
</language>
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1" />
<panes>
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core/services}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core/services}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core/services/websocket}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/chat}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/chat}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/chat/chat-window}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/shared}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///home/leo/uni/paw/client/src/environments}" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
<presentation>
<attributes />
<data iconPath="expui/toolwindows/project.svg" iconPlugin="com.intellij" isLeaf="false" text="client" />
<item name="client" type="b2602c69:ProjectViewProjectNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="client" />
<item name="dir{file:///home/leo/uni/paw/client}" type="462c0819:PsiDirectoryNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/.angular" />
</map>
</attributes>
<data iconPath="expui/nodes/excludeRoot.svg" iconPlugin="com.intellij" isLeaf="false" text=".angular" />
<item name="dir{file:///home/leo/uni/paw/client/.angular}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/.idea" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text=".idea" />
<item name="dir{file:///home/leo/uni/paw/client/.idea}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/.vscode" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text=".vscode" />
<item name="dir{file:///home/leo/uni/paw/client/.vscode}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/node_modules" />
</map>
</attributes>
<data iconPath="expui/nodes/excludeRoot.svg" iconPlugin="com.intellij" isLeaf="false" text="node_modules" />
<item name="dir{file:///home/leo/uni/paw/client/node_modules}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/public" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="public" />
<item name="dir{file:///home/leo/uni/paw/client/public}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="src" />
<item name="dir{file:///home/leo/uni/paw/client/src}" type="462c0819:PsiDirectoryNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="app" />
<item name="dir{file:///home/leo/uni/paw/client/src/app}" type="462c0819:PsiDirectoryNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/core" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="core" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core}" type="462c0819:PsiDirectoryNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/core/guards" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="guards" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core/guards}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/core/interceptors" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="interceptors" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core/interceptors}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/core/services" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="services" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core/services}" type="462c0819:PsiDirectoryNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/core/services/auth" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="auth" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core/services/auth}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/core/services/notification" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="notification" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core/services/notification}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/core/services/websocket" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="websocket" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/core/services/websocket}" type="462c0819:PsiDirectoryNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/core/services/websocket/websocket.service.spec.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/tsTest.svg" iconPlugin="JavaScript" isLeaf="true" text="websocket.service.spec.ts" />
<item name="websocket.service.spec.ts" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/core/services/websocket/websocket.service.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/typeScript.svg" iconPlugin="JavaScript" isLeaf="true" text="websocket.service.ts" />
<item name="websocket.service.ts" type="ab9368bb:PsiFileNode" />
</presentation>
</presentation>
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/core/core.module.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/typeScript.svg" iconPlugin="JavaScript" isLeaf="true" text="core.module.ts" />
<item name="core.module.ts" type="ab9368bb:PsiFileNode" />
</presentation>
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="features" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features}" type="462c0819:PsiDirectoryNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/admin" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="admin" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/admin}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/auth" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="auth" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/auth}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/chat" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="chat" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/chat}" type="462c0819:PsiDirectoryNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/chat/chat-page" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="chat-page" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/chat/chat-page}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/chat/chat-window" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="chat-window" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/chat/chat-window}" type="462c0819:PsiDirectoryNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/chat/chat-window/chat-window.component.html" />
</map>
</attributes>
<data iconPath="expui/fileTypes/html.svg" iconPlugin="com.intellij" isLeaf="true" text="chat-window.component.html" />
<item name="chat-window.component.html" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/chat/chat-window/chat-window.component.scss" />
</map>
</attributes>
<data iconPath="org/jetbrains/plugins/sass/expui/sass.svg" iconPlugin="org.jetbrains.plugins.sass" isLeaf="true" text="chat-window.component.scss" />
<item name="chat-window.component.scss" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/chat/chat-window/chat-window.component.spec.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/tsTest.svg" iconPlugin="JavaScript" isLeaf="true" text="chat-window.component.spec.ts" />
<item name="chat-window.component.spec.ts" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/chat/chat-window/chat-window.component.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/typeScript.svg" iconPlugin="JavaScript" isLeaf="true" text="chat-window.component.ts" />
<item name="chat-window.component.ts" type="ab9368bb:PsiFileNode" />
</presentation>
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/chat/conversation-list" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="conversation-list" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/chat/conversation-list}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/chat/chat.routes.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/typeScript.svg" iconPlugin="JavaScript" isLeaf="true" text="chat.routes.ts" />
<item name="chat.routes.ts" type="ab9368bb:PsiFileNode" />
</presentation>
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/nutritionist" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="nutritionist" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/nutritionist}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/patient" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="patient" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/patient}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/profile" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="profile" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/profile}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/features/public" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="public" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/features/public}" type="462c0819:PsiDirectoryNode" />
</presentation>
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/shared" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="shared" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/shared}" type="462c0819:PsiDirectoryNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/shared/components" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="components" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/shared/components}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/shared/models" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="models" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/shared/models}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/shared/services" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="services" />
<item name="dir{file:///home/leo/uni/paw/client/src/app/shared/services}" type="462c0819:PsiDirectoryNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/shared/shared.module.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/typeScript.svg" iconPlugin="JavaScript" isLeaf="true" text="shared.module.ts" />
<item name="shared.module.ts" type="ab9368bb:PsiFileNode" />
</presentation>
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/app.component.html" />
</map>
</attributes>
<data iconPath="expui/fileTypes/html.svg" iconPlugin="com.intellij" isLeaf="true" text="app.component.html" />
<item name="app.component.html" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/app.component.scss" />
</map>
</attributes>
<data iconPath="org/jetbrains/plugins/sass/expui/sass.svg" iconPlugin="org.jetbrains.plugins.sass" isLeaf="true" text="app.component.scss" />
<item name="app.component.scss" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/app.component.spec.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/tsTest.svg" iconPlugin="JavaScript" isLeaf="true" text="app.component.spec.ts" />
<item name="app.component.spec.ts" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/app.component.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/typeScript.svg" iconPlugin="JavaScript" isLeaf="true" text="app.component.ts" />
<item name="app.component.ts" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/app.config.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/typeScript.svg" iconPlugin="JavaScript" isLeaf="true" text="app.config.ts" />
<item name="app.config.ts" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/app/app.routes.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/typeScript.svg" iconPlugin="JavaScript" isLeaf="true" text="app.routes.ts" />
<item name="app.routes.ts" type="ab9368bb:PsiFileNode" />
</presentation>
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/environments" />
</map>
</attributes>
<data iconPath="expui/nodes/folder.svg" iconPlugin="com.intellij" isLeaf="false" text="environments" />
<item name="dir{file:///home/leo/uni/paw/client/src/environments}" type="462c0819:PsiDirectoryNode" />
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/environments/environment.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/typeScript.svg" iconPlugin="JavaScript" isLeaf="true" text="environment.ts" />
<item name="environment.ts" type="ab9368bb:PsiFileNode" />
</presentation>
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/index.html" />
</map>
</attributes>
<data iconPath="expui/fileTypes/html.svg" iconPlugin="com.intellij" isLeaf="true" text="index.html" />
<item name="index.html" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/main.ts" />
</map>
</attributes>
<data iconPath="icons/expui/fileTypes/typeScript.svg" iconPlugin="JavaScript" isLeaf="true" text="main.ts" />
<item name="main.ts" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/src/styles.scss" />
</map>
</attributes>
<data iconPath="org/jetbrains/plugins/sass/expui/sass.svg" iconPlugin="org.jetbrains.plugins.sass" isLeaf="true" text="styles.scss" />
<item name="styles.scss" type="ab9368bb:PsiFileNode" />
</presentation>
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/.editorconfig" />
</map>
</attributes>
<data iconPath="nodes/editorconfig.svg" iconPlugin="com.intellij" isLeaf="true" text=".editorconfig" />
<item name=".editorconfig" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/.gitignore" />
</map>
</attributes>
<data iconPath="vcs/ignore_file.svg" iconPlugin="com.intellij" isLeaf="true" text=".gitignore" />
<item name=".gitignore" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/angular.json" />
</map>
</attributes>
<data iconPath="fileTypes/json.svg" iconPlugin="com.intellij" isLeaf="true" text="angular.json" />
<item name="angular.json" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/package.json" />
</map>
</attributes>
<data iconPath="fileTypes/json.svg" iconPlugin="com.intellij" isLeaf="true" text="package.json" />
<item name="package.json" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/package-lock.json" />
</map>
</attributes>
<data iconPath="fileTypes/json.svg" iconPlugin="com.intellij" isLeaf="true" text="package-lock.json" />
<item name="package-lock.json" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/README.md" />
</map>
</attributes>
<data iconPath="icons/MarkdownPlugin.svg" iconPlugin="org.intellij.plugins.markdown" isLeaf="true" text="README.md" />
<item name="README.md" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/tsconfig.app.json" />
</map>
</attributes>
<data iconPath="fileTypes/json.svg" iconPlugin="com.intellij" isLeaf="true" text="tsconfig.app.json" />
<item name="tsconfig.app.json" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/tsconfig.json" />
</map>
</attributes>
<data iconPath="fileTypes/json.svg" iconPlugin="com.intellij" isLeaf="true" text="tsconfig.json" />
<item name="tsconfig.json" type="ab9368bb:PsiFileNode" />
</presentation>
<presentation>
<attributes>
<map>
<entry key="filePath" value="$PROJECT_DIR$/tsconfig.spec.json" />
</map>
</attributes>
<data iconPath="fileTypes/json.svg" iconPlugin="com.intellij" isLeaf="true" text="tsconfig.spec.json" />
<item name="tsconfig.spec.json" type="ab9368bb:PsiFileNode" />
</presentation>
</presentation>
<presentation>
<attributes />
<data iconPath="nodes/ppLib.svg" iconPlugin="com.intellij" isLeaf="false" text="External Libraries" />
<item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
</presentation>
<presentation>
<attributes />
<data iconPath="scope/scratches.svg" iconPlugin="com.intellij" isLeaf="false" text="Scratches and Consoles" />
<item name="Scratches and Consoles" type="b85a3e1f:ScratchTreeStructureProvider$MyProjectNode" />
</presentation>
</presentation>
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="1069000" />
</component>
<component name="ToolWindowManager">
<layoutV2>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.2408854" />
<window_info id="Commit" order="1" weight="0.25" />
<window_info id="Structure" order="2" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="Version Control" order="0" />
<window_info anchor="bottom" id="Problems" order="1" />
<window_info anchor="bottom" id="Problems View" order="2" weight="0.32999998" />
<window_info anchor="bottom" id="Terminal" order="3" />
<window_info anchor="bottom" id="Services" order="4" />
<window_info active="true" anchor="bottom" id="Find" order="5" visible="true" weight="0.32999998" />
<window_info anchor="right" content_ui="combo" id="Notifications" order="0" weight="0.25" />
<window_info anchor="right" id="AIAssistant" order="1" weight="0.25" />
<window_info anchor="right" id="Database" order="2" weight="0.25" />
<window_info anchor="right" id="Gradle" order="3" weight="0.25" />
<window_info anchor="right" id="Maven" order="4" weight="0.25" />
<unified_weights bottom="0.32999998" left="0.2408854" />
</layoutV2>
<recentWindows>
<value>Project</value>
<value>Find</value>
<value>Problems View</value>
</recentWindows>
</component>
<component name="WindowStateProjectService">
<state x="724" y="135" width="675" height="864" key="find.popup" timestamp="1750071896425">
<screen x="0" y="0" width="1920" height="1050" />
</state>
<state x="724" y="135" width="675" height="864" key="find.popup/0.0.1920.1050@0.0.1920.1050" timestamp="1750071896425" />
<state x="623" y="220" width="706" height="713" key="search.everywhere.popup" timestamp="1750071899549">
<screen x="0" y="0" width="1920" height="1050" />
</state>
<state x="623" y="220" width="706" height="713" key="search.everywhere.popup/0.0.1920.1050@0.0.1920.1050" timestamp="1750071899549" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/README.md" />
<entry file="file://$PROJECT_DIR$/src/app/features/chat/chat-window/chat-window.component.ts">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/app/features/nutritionist/patient-detail/patient-detail.component.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3564">
<caret line="178" column="3" selection-start-line="178" selection-start-column="3" selection-end-line="178" selection-end-column="3" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/app/features/patient/dashboard/dashboard.component.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="12122">
<caret line="587" selection-start-line="587" selection-end-line="587" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/app/core/guards/auth.guard.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="44">
<caret line="2" column="60" selection-start-line="2" selection-start-column="60" selection-end-line="2" selection-end-column="60" />
<folding>
<element signature="e#0#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/app/shared/shared.module.ts">
<provider selected="true" editor-type-id="text-editor">
<state>
<caret column="7" lean-forward="true" selection-start-column="7" selection-end-column="7" />
<folding>
<element signature="e#0#41#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/app/features/chat/chat-page/chat-page.component.ts">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/app/features/nutritionist/dashboard/dashboard.component.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="549">
<caret line="780" selection-start-line="780" selection-end-line="780" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/app/features/nutritionist/nutritionist.routes.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="220">
<caret line="14" column="40" selection-start-line="14" selection-start-column="40" selection-end-line="14" selection-end-column="40" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/app/features/nutritionist/dashboard/dashboard.component.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="4268">
<caret line="194" selection-start-line="194" selection-end-line="194" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/app/features/nutritionist/patient-detail/patient-detail.component.html">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/app/core/services/websocket/websocket.service.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="396">
<caret line="24" column="53" selection-start-line="24" selection-start-column="53" selection-end-line="24" selection-end-column="53" />
</state>
</provider>
</entry>
</component>
</project>