diff --git a/.eslintignore b/.eslintignore index 6672f230f7..a6f20ce11c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -9,6 +9,7 @@ example/ examples/ .gitignore webpack.config.js +webpack.presets.config.js index.js copy-vrt-tests.js copy-src-tests.js diff --git a/.eslintrc.js b/.eslintrc.js index 765b72fe90..d621c6349c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -120,7 +120,10 @@ module.exports = { } }, { - "files": ["packages/survey-creator-core/src/localization/*.ts"], + "files": [ + "packages/survey-creator-core/src/localization/*.ts", + "packages/survey-creator-core/src/presets/localization/*.ts" + ], "rules": { "surveyjs/eslint-plugin-i18n/only-english-or-code": "off" } diff --git a/e2e/helper.ts b/e2e/helper.ts index 0b90b5cfa1..e1d8de975c 100644 --- a/e2e/helper.ts +++ b/e2e/helper.ts @@ -2,6 +2,12 @@ import type { Locator, Page } from "@playwright/test"; import { expect, test as baseTest } from "@playwright/test"; export const url = "http://127.0.0.1:8080/testCafe/testcafe"; +export const urlByPage = "http://127.0.0.1:8080/testCafe/by-page"; +export const urlPreviewThemeSwitcher = "http://127.0.0.1:8080/testCafe/preview-theme-switcher"; +export const urlThemeForPreview = "http://127.0.0.1:8080/testCafe/theme-for-preview-option"; +export const urlDropdownCollapseView = "http://127.0.0.1:8080/testCafe/dropdown-collapse-view"; +export const urlLocalized_de = "http://127.0.0.1:8080/testCafe/testcafe_localized_ui"; +export const urlPresets = "http://127.0.0.1:8080/testCafe/presets"; export async function compareScreenshot(page: Page, elementSelector: string | Locator | undefined, screenshotName: string, elementIndex = 0) { let currentElement = elementSelector; @@ -42,17 +48,41 @@ export const setJSON = async (page: Page, json: object) => { }, json); }; -export async function doDrag({ page, element, target, options }: { page: Page, element: Locator, target: Locator, options: any }):Promise { - await element.hover({ force: true }); +interface IDragToElementOptions { + elementPosition?: {x: number, y: number}; + targetPosition?: {x: number, y: number}; + steps?: number; +} + +export async function doDrag({ page, element, target, options }: { page: Page, element: Locator, target: Locator, options?: IDragToElementOptions }):Promise { + if (options?.elementPosition) { + await element.hover({ force: true, position: { x: (options.targetPosition?.x || 0), y: (options.targetPosition?.y || 0) } }); + } else { + await element.hover({ force: true }); + } await page.mouse.down(); + await target.scrollIntoViewIfNeeded(); const { x, y, width, height } = await target.boundingBox(); - await page.mouse.move(x + width / 2 + (options.destinationOffsetX || 0), y + height / 2 + (options.destinationOffsetY || 0), { steps: 20 }); + if (options?.targetPosition) { + await page.mouse.move(x + (options?.targetPosition?.x || 0), y + (options?.targetPosition?.y || 0), { steps: options?.steps || 20 }); + } else { + await page.mouse.move(x + width / 2, y + height / 2, { steps: options?.steps || 20 }); + + } } -export async function doDragDrop({ page, element, target, options }: { page: Page, element: Locator, target: Locator, options: any }):Promise { +export async function doDragDrop({ page, element, target, options }: { page: Page, element: Locator, target: Locator, options?: IDragToElementOptions }):Promise { await doDrag({ page, element, target, options: options || {} }); await page.mouse.up(); } +export async function showCreatorSettings(page) { + await page.locator(".svc-sidebar-tabs__bottom-container .svc-menu-action__button").click(); +} +export async function showPresets(page) { + await showCreatorSettings(page); + await page.locator(".sps-launch__card").click(); +} + export { expect }; \ No newline at end of file diff --git a/e2e/presets.spec.ts b/e2e/presets.spec.ts new file mode 100644 index 0000000000..a0e33128e6 --- /dev/null +++ b/e2e/presets.spec.ts @@ -0,0 +1,169 @@ +import { urlPresets, test, expect, showPresets, doDragDrop } from "./helper"; + +const title = "Presets"; +async function getRowsInputValues(matrix: any) { + const values = await matrix.locator("tr input").evaluateAll((inputs: any) => + inputs.map((input: any) => (input as HTMLInputElement).value) + ); + return values; +} + +async function getTabsTexts(page: any) { + return (await page.locator(".svc-tabbed-menu-item").filter({ visible: true }).allTextContents()).map(t => t.trim()); +} + +async function getToolboxTexts(page: any) { + return (await page.locator(".svc-toolbox__item-title").filter({ visible: true }).allTextContents()).map(t => t.trim()); +} + +test.describe(title, () => { + test.beforeEach(async ({ page }) => { + await page.waitForLoadState("networkidle"); + await page.goto(`${urlPresets}`); + await page.setViewportSize({ width: 1440, height: 1400 }); + await showPresets(page); + }); + + test("Check presets tabs", async ({ page }) => { + await page.locator(".sps-list__container").getByText("Tabs").click(); + + const items = page.locator(".sps-question--matrixdynamic table").nth(0); + const hidden = page.locator(".sps-question--matrixdynamic table").nth(1); + expect(await getRowsInputValues(items)).toEqual(["Designer", "Preview", "Logic", "Translations"]); + expect(await getRowsInputValues(hidden)).toEqual(["Themes", "JSON Editor"]); + expect(await getTabsTexts(page)).toEqual(["Designer", "Preview", "Logic", "Translations"]); + + await items.locator("tr").nth(1).getByTitle("Delete").click(); + expect(await getRowsInputValues(items)).toEqual(["Designer", "Logic", "Translations"]); + expect(await getRowsInputValues(hidden)).toEqual(["Themes", "JSON Editor", "Preview"]); + expect(await getTabsTexts(page)).toEqual(["Designer", "Logic", "Translations"]); + + await hidden.locator("tr").nth(1).getByTitle("Add").click(); + expect(await getRowsInputValues(items)).toEqual(["Designer", "Logic", "Translations", "JSON Editor"]); + expect(await getRowsInputValues(hidden)).toEqual(["Themes", "Preview"]); + expect(await getTabsTexts(page)).toEqual(["Designer", "Logic", "Translations", "JSON Editor"]); + }); + + test("Check presets tabs - drag-drop", async ({ page }) => { + await page.locator(".sps-list__container").getByText("Tabs").click(); + + const items = page.locator(".sps-question--matrixdynamic table").nth(0); + const hidden = page.locator(".sps-question--matrixdynamic table").nth(1); + + expect(await getRowsInputValues(items)).toEqual(["Designer", "Preview", "Logic", "Translations"]); + expect(await getRowsInputValues(hidden)).toEqual(["Themes", "JSON Editor"]); + expect(await getTabsTexts(page)).toEqual(["Designer", "Preview", "Logic", "Translations"]); + + await doDragDrop({ page, element: items.locator("tr").nth(1).locator(".sd-table__cell--drag"), target: hidden, options: { targetPosition: { x: 5, y: 5 } } }); + expect(await getRowsInputValues(items)).toEqual(["Designer", "Logic", "Translations"]); + expect(await getRowsInputValues(hidden)).toEqual(["Preview", "Themes", "JSON Editor"]); + expect(await getTabsTexts(page)).toEqual(["Designer", "Logic", "Translations"]); + + await doDragDrop({ page, element: hidden.locator("tr").nth(2).locator(".sd-table__cell--drag"), target: items, options: { targetPosition: { x: 5, y: 5 } } }); + expect(await getRowsInputValues(items)).toEqual(["JSON Editor", "Designer", "Logic", "Translations"]); + expect(await getRowsInputValues(hidden)).toEqual(["Preview", "Themes"]); + expect(await getTabsTexts(page)).toEqual(["JSON Editor", "Designer", "Logic", "Translations"]); + + await doDragDrop({ page, element: items.locator("tr").nth(1).locator(".sd-table__cell--drag"), target: items.locator("tr").nth(3).locator(".sd-table__cell--drag"), options: { targetPosition: { x: 5, y: 5 } } }); + expect(await getRowsInputValues(items)).toEqual(["JSON Editor", "Logic", "Designer", "Translations"]); + expect(await getRowsInputValues(hidden)).toEqual(["Preview", "Themes"]); + expect(await getTabsTexts(page)).toEqual(["JSON Editor", "Logic", "Designer", "Translations"]); + }); + + test("Check presets tabs - edit", async ({ page }) => { + await page.locator(".sps-list__container").getByText("Tabs").click(); + const items = page.locator(".sps-question--matrixdynamic table").nth(0); + + expect(await getRowsInputValues(items)).toEqual(["Designer", "Preview", "Logic", "Translations"]); + expect(await items.locator("tr").nth(0).locator(".sps-action-button--icon use").nth(0).getAttribute("xlink:href")).toBe("#icon-wrench-24x24"); + + await page.getByRole("row", { name: "Designer" }).hover(); + await page.getByRole("row", { name: "Designer" }).getByRole("button").nth(1).click(); + await page.getByRole("textbox", { name: "Title", exact: true }).fill("Designer1"); + await page.getByRole("combobox", { name: "Icon name" }).focus(); + await page.waitForTimeout(500); + await page.getByRole("combobox", { name: "Icon name" }).click(); + await page.getByText("icon-actual-size-24x24").click(); + await page.getByRole("button", { name: "Apply" }).click(); + expect(await items.locator("tr").nth(0).locator(".sps-action-button--icon use").nth(0).getAttribute("xlink:href")).toBe("#icon-actual-size-24x24"); + expect(await getRowsInputValues(items)).toEqual(["Designer1", "Preview", "Logic", "Translations"]); + + await page.getByRole("row", { name: "Designer1" }).hover(); + expect(await page.getByRole("row", { name: "Designer1" }).getByRole("button").nth(1)).toBeVisible(); + await page.getByRole("row", { name: "Designer1" }).getByRole("button").nth(1).click(); + await page.getByRole("button", { name: "Reset to default" }).waitFor({ state: "visible" }); + await page.getByRole("button", { name: "Reset to default" }).click(); + await page.getByRole("button", { name: "Apply" }).click(); + expect(await items.locator("tr").nth(0).locator(".sps-action-button--icon use").nth(0).getAttribute("xlink:href")).toBe("#icon-wrench-24x24"); + expect(await getRowsInputValues(items)).toEqual(["Designer", "Preview", "Logic", "Translations"]); + }); + + test("Check presets toolbox", async ({ page }) => { + await page.locator(".sps-list__container").getByText("Toolbox").click(); + expect((await getToolboxTexts(page)).slice(0, 3)).toEqual(["Radio Button Group", "Rating Scale", "Slider"]); + + const items = page.locator(".sps-row--multiple > div").nth(0).locator(".sps-question--matrixdynamic table").nth(0); + const hidden = page.locator(".sps-row--multiple > div").nth(1).locator(".sps-question--matrixdynamic table").nth(0); + await items.getByRole("row", { name: "Choice Questions" }).locator("#show-detail").getByRole("button").click(); + await items.getByRole("row", { name: "Slider" }).getByRole("button").nth(3).click(); + await items.getByText("Remove from Toolbox").click(); + expect((await getToolboxTexts(page)).slice(0, 3)).toEqual(["Radio Button Group", "Rating Scale", "Checkboxes"]); + + await hidden.getByRole("button", { name: "More" }).nth(0).click(); + await hidden.getByRole("menuitem", { name: "Text Input Questions" }).locator("span").click(); + expect((await getToolboxTexts(page)).slice(9, 13)).toEqual(["Single-Line Input", "Long Text", "Multiple Textboxes", "Slider"]); + + await items.getByRole("button", { name: "Collapse" }).click(); + await items.getByRole("button", { name: "Delete" }).nth(2).click(); + expect((await getToolboxTexts(page)).slice(12, 14)).toEqual(["Slider", "Single-Select Matrix"]); + + await hidden.getByRole("button", { name: "More" }).first().click(); + + await hidden.getByText("Move to new category").click(); + expect((await getToolboxTexts(page)).slice(20, 21)).toEqual(["Panel"]); + }); + + test("Check presets tabs - drag-drop categories", async ({ page }) => { + await page.locator(".sps-list__container").getByText("Toolbox").click(); + expect((await getToolboxTexts(page)).slice(0, 3)).toEqual(["Radio Button Group", "Rating Scale", "Slider"]); + + const items = page.locator(".sps-row--multiple > div").nth(0).locator(".sps-question--matrixdynamic table").nth(0); + const hidden = page.locator(".sps-row--multiple > div").nth(1).locator(".sps-question--matrixdynamic table").nth(0); + + expect(await getRowsInputValues(items)).toEqual(["Choice Questions", "Text Input Questions", "Containers", "Matrix Questions", "Misc"]); + expect(await getRowsInputValues(hidden)).toEqual([]); + expect((await getToolboxTexts(page)).slice(0, 4)).toEqual(["Radio Button Group", "Rating Scale", "Slider", "Checkboxes"]); + + await doDragDrop({ page, element: items.locator("tr").filter({ visible: true }).nth(2).locator(".sd-table__cell--drag"), target: items.locator("tr").filter({ visible: true }).nth(0).locator(".sd-table__cell--drag"), options: { targetPosition: { x: 5, y: 5 } } }); + expect(await getRowsInputValues(items)).toEqual(["Containers", "Choice Questions", "Text Input Questions", "Matrix Questions", "Misc"]); + expect(await getRowsInputValues(hidden)).toEqual([]); + expect((await getToolboxTexts(page)).slice(0, 4)).toEqual(["Panel", "Dynamic Panel", "Radio Button Group", "Rating Scale"]); + }); + + test("Check presets toolbox - drag-drop items", async ({ page }) => { + await page.locator(".sps-list__container").getByText("Toolbox").click(); + expect((await getToolboxTexts(page)).slice(0, 3)).toEqual(["Radio Button Group", "Rating Scale", "Slider"]); + + const items = page.locator(".sps-row--multiple > div").nth(0).locator(".sps-question--matrixdynamic table").nth(0); + const hidden = page.locator(".sps-row--multiple > div").nth(1).locator(".sps-question--matrixdynamic table").nth(0); + await items.getByRole("row", { name: "Choice Questions" }).locator("#show-detail").getByRole("button").click(); + await doDragDrop({ page, element: items.getByRole("row", { name: "Slider" }).locator(".sd-table__cell--drag"), target: hidden, options: { targetPosition: { x: 5, y: 5 } } }); + + expect((await getToolboxTexts(page)).slice(0, 3)).toEqual(["Radio Button Group", "Rating Scale", "Checkboxes"]); + + await items.getByRole("row", { name: "Text Input Questions" }).locator("#show-detail").getByRole("button").click(); + await doDragDrop({ page, element: hidden.getByRole("row", { name: "Slider" }).locator(".sd-table__cell--drag"), target: items.getByRole("row", { name: "Multiple Textboxes" }), options: { targetPosition: { x: 25, y: 25 } } }); + + expect((await getToolboxTexts(page)).slice(9, 13)).toEqual(["Single-Line Input", "Long Text", "Slider", "Multiple Textboxes"]); + + await doDragDrop({ page, element: items.getByRole("row", { name: "Long Text" }).locator(".sd-table__cell--drag"), target: items.getByRole("row", { name: "Ranking" }), options: { targetPosition: { x: 5, y: 5 } } }); + expect((await getToolboxTexts(page)).slice(7, 12)).toEqual(["Image Picker", "Long Text", "Ranking", "Single-Line Input", "Slider"]); + + await items.getByRole("row", { name: "Rating" }).locator("#show-detail").getByRole("button").click(); + await doDragDrop({ page, element: items.getByRole("row", { name: "Slider" }).locator(".sd-table__cell--drag"), target: items.getByRole("row", { name: "Stars" }) }); + await page.locator(".svc-toolbox__item-submenu-button").nth(0).hover(); + expect(await page.locator(".svc-toolbox-subtypes .sv-popup__container").filter({ visible: true })).toBeVisible(); + expect((await page.locator(".svc-toolbox__item-subtype").filter({ visible: true }).allTextContents()).map(t => t.trim())).toEqual(["Labels", "Stars", "Slider", "Smileys"]); + }); + +}); \ No newline at end of file diff --git a/packages/survey-creator-angular/angular.json b/packages/survey-creator-angular/angular.json index d0dd25a368..409810aaea 100644 --- a/packages/survey-creator-angular/angular.json +++ b/packages/survey-creator-angular/angular.json @@ -78,7 +78,8 @@ ], "styles": [ "./node_modules/survey-core/survey-core.css", - "./node_modules/survey-creator-core/survey-creator-core.css" + "./node_modules/survey-creator-core/survey-creator-core.css", + "./node_modules/survey-creator-core/presets/index.css" ], "scripts": [] }, diff --git a/packages/survey-creator-angular/example/angular-ui/src/app/app.module.ts b/packages/survey-creator-angular/example/angular-ui/src/app/app.module.ts index d7201415b0..f70bc63860 100644 --- a/packages/survey-creator-angular/example/angular-ui/src/app/app.module.ts +++ b/packages/survey-creator-angular/example/angular-ui/src/app/app.module.ts @@ -5,6 +5,7 @@ import { FormsModule } from "@angular/forms"; import { BrowserModule } from "@angular/platform-browser"; import { AppComponent } from "./app.component"; import { SurveyCreatorModule } from "survey-creator-angular"; +import { PresetsModule } from "survey-creator-angular/presets"; import { SurveyModule } from "survey-angular-ui"; import { ExampleComponent } from "./example.component"; import { AppRoutingModule } from "./router.module"; @@ -17,13 +18,14 @@ import { TestDropdownCollapseComponent } from "./test/dropdown-collapse.componen import { TestLocalizationComponent } from "./test/localization.component"; import { ThemeTabComponent } from "./test/test-theme-tab.component"; import { NoLicenseComponent } from "./test/test-no-license.component"; +import { PresetsComponent } from "./test/presets.component"; @NgModule({ declarations: [ - AppComponent, ExampleComponent, TestDefaultComponent, TestThemeSwitcherComponent, ThemePreviewComponent, TestByPageComponent, TestCustomWidgetComponent, TestDropdownCollapseComponent, TestLocalizationComponent, ThemeTabComponent, NoLicenseComponent + AppComponent, ExampleComponent, TestDefaultComponent, TestThemeSwitcherComponent, ThemePreviewComponent, TestByPageComponent, TestCustomWidgetComponent, TestDropdownCollapseComponent, TestLocalizationComponent, ThemeTabComponent, NoLicenseComponent, PresetsComponent ], imports: [ - BrowserModule, SurveyCreatorModule, FormsModule, SurveyModule, AppRoutingModule + BrowserModule, SurveyCreatorModule, FormsModule, SurveyModule, AppRoutingModule, PresetsModule ], providers: [], bootstrap: [AppComponent] diff --git a/packages/survey-creator-angular/example/angular-ui/src/app/example.component.ts b/packages/survey-creator-angular/example/angular-ui/src/app/example.component.ts index f8eae1d81b..2fee15f5c6 100644 --- a/packages/survey-creator-angular/example/angular-ui/src/app/example.component.ts +++ b/packages/survey-creator-angular/example/angular-ui/src/app/example.component.ts @@ -4,7 +4,8 @@ import { SurveyCreatorModel } from "survey-creator-core"; import * as Survey from "survey-core"; import "survey-core/survey.i18n"; import "survey-creator-core/survey-creator-core.i18n"; - +import "survey-creator-core/presets/index.css"; +import { TabPresetsPlugin } from "survey-creator-core/presets"; const json = { "logoPosition": "right", "completedHtml": "

Thank you for your feedback.

Your thoughts and ideas will help us to create a great product!
", @@ -85,6 +86,7 @@ export class ExampleComponent { this.creator.JSON = json; (window).creator = this.creator; (window).Survey = Survey; + new TabPresetsPlugin(this.creator) } public survey = new SurveyModel(json); diff --git a/packages/survey-creator-angular/example/angular-ui/src/app/router.module.ts b/packages/survey-creator-angular/example/angular-ui/src/app/router.module.ts index c32de31cc4..53944f26e1 100644 --- a/packages/survey-creator-angular/example/angular-ui/src/app/router.module.ts +++ b/packages/survey-creator-angular/example/angular-ui/src/app/router.module.ts @@ -9,6 +9,7 @@ import { TestThemeSwitcherComponent } from "./test/theme-switcher.component"; import { TestLocalizationComponent } from "./test/localization.component"; import { ThemeTabComponent } from "./test/test-theme-tab.component"; import { NoLicenseComponent } from "./test/test-no-license.component"; +import { PresetsComponent } from "./test/presets.component"; import { ExampleComponent } from "./example.component"; const routes = [ @@ -21,6 +22,7 @@ const routes = [ { path: "testCafe/dropdown-collapse-view", component: TestDropdownCollapseComponent }, { path: "testCafe/testcafe-theme-tab", component: ThemeTabComponent }, { path: "testCafe/testcafe-no-license", component: NoLicenseComponent }, + { path: "testCafe/presets", component: PresetsComponent }, { path: "", component: ExampleComponent } ]; diff --git a/packages/survey-creator-angular/example/angular-ui/src/app/test/presets.component.ts b/packages/survey-creator-angular/example/angular-ui/src/app/test/presets.component.ts new file mode 100644 index 0000000000..30a5daf1b7 --- /dev/null +++ b/packages/survey-creator-angular/example/angular-ui/src/app/test/presets.component.ts @@ -0,0 +1,25 @@ +import { Component, ViewEncapsulation } from "@angular/core"; +import { SurveyCreatorModel } from "survey-creator-core"; +import { settings } from "survey-core"; +import { TestDefaultComponent } from "./default.component"; +import { TabPresetsPlugin } from "survey-creator-core/presets"; +@Component({ + selector: "test-theme-preview", + templateUrl: "./test.component.html", + encapsulation: ViewEncapsulation.None +}) +export class PresetsComponent extends TestDefaultComponent { + constructor() { + super(); + } + protected override getSlk(): boolean { return false; } + protected override createCreator(): void { + this.creator = new SurveyCreatorModel({ expandCollapseButtonVisibility: "never", showLogicTab: true, showTranslationTab: true, showJSONEditorTab: false }); + this.creator.tabResponsivenessMode = "menu"; + this.creator["animationEnabled"] = false; + settings.animationEnabled = false; + this.creator.allowZoom = false; + this.creator.showOneCategoryInPropertyGrid = true; + new TabPresetsPlugin(this.creator); + } +} \ No newline at end of file diff --git a/packages/survey-creator-angular/ng-package.json b/packages/survey-creator-angular/ng-package.json index d40387fbe9..3a4c6ddf8b 100644 --- a/packages/survey-creator-angular/ng-package.json +++ b/packages/survey-creator-angular/ng-package.json @@ -1,6 +1,7 @@ { "$schema": "node_modules/ng-packagr/ng-package.schema.json", "dest": "./build", + "deleteDestPath": false, "lib": { "entryFile": "src/angular-ui.ts" } diff --git a/packages/survey-creator-angular/package.json b/packages/survey-creator-angular/package.json index 751e1106d5..9333bed8cb 100644 --- a/packages/survey-creator-angular/package.json +++ b/packages/survey-creator-angular/package.json @@ -60,6 +60,15 @@ "eslint": "^8.57.0", "karma-html2js-preprocessor": "^1.1.0", "ng-packagr": "^12.0.0", + "webpack": "^5.0.0", + "webpack-cli": "^4.0.0", + "ts-loader": "^8.0.0", + "mini-css-extract-plugin": "^1.0.0", + "css-loader": "^5.0.0", + "sass-loader": "^10.0.0", + "sass": "^1.0.0", + "html-loader": "^2.0.0", + "url-loader": "^4.0.0", "rxjs": "~6.6.0", "tslib": "^2.3.0", "zone.js": "~0.11.4", @@ -92,4 +101,4 @@ "test:scr": "playwright test --project scr --ui", "test:scr:ci": "playwright test --project scr" } -} +} \ No newline at end of file diff --git a/packages/survey-creator-angular/presets/ng-package.json b/packages/survey-creator-angular/presets/ng-package.json new file mode 100644 index 0000000000..f1f9cdc7b9 --- /dev/null +++ b/packages/survey-creator-angular/presets/ng-package.json @@ -0,0 +1,8 @@ +{ + "$schema": "node_modules/ng-packagr/ng-package.schema.json", + "dest": "./build", + "deleteDestPath": false, + "lib": { + "entryFile": "src/index.ts" + } +} \ No newline at end of file diff --git a/packages/survey-creator-angular/presets/src/index.ts b/packages/survey-creator-angular/presets/src/index.ts new file mode 100644 index 0000000000..48a72860b9 --- /dev/null +++ b/packages/survey-creator-angular/presets/src/index.ts @@ -0,0 +1,7 @@ +export { TabPresetsComponent } from "./presets.component"; +export { PresetsPropertyGridWrapperComponent } from "./presets-property-grid.component"; +export { PresetsIconItemComponent } from "./presets-icon-item.component"; + +// Export presets module +import { PresetsModule } from "./presets.module"; +export { PresetsModule }; diff --git a/packages/survey-creator-angular/presets/src/presets-icon-item.component.html b/packages/survey-creator-angular/presets/src/presets-icon-item.component.html new file mode 100644 index 0000000000..1ecb4e9fad --- /dev/null +++ b/packages/survey-creator-angular/presets/src/presets-icon-item.component.html @@ -0,0 +1,6 @@ + +
+ + {{ model.title }} +
+
diff --git a/packages/survey-creator-angular/presets/src/presets-icon-item.component.ts b/packages/survey-creator-angular/presets/src/presets-icon-item.component.ts new file mode 100644 index 0000000000..37167f9b4c --- /dev/null +++ b/packages/survey-creator-angular/presets/src/presets-icon-item.component.ts @@ -0,0 +1,14 @@ +import { Component, Input } from "@angular/core"; +import { ItemValue } from "survey-core"; +import { AngularComponentFactory, EmbeddedViewContentComponent } from "survey-angular-ui"; + +@Component({ + selector: "svc-presets-icon-item", + templateUrl: "./presets-icon-item.component.html", + styles: [":host { display: none; }"] +}) +export class PresetsIconItemComponent extends EmbeddedViewContentComponent { + @Input() model!: ItemValue; +} + +AngularComponentFactory.Instance.registerComponent("svc-presets-icon-item", PresetsIconItemComponent); diff --git a/packages/survey-creator-angular/presets/src/presets-property-grid.component.html b/packages/survey-creator-angular/presets/src/presets-property-grid.component.html new file mode 100644 index 0000000000..3402f4332c --- /dev/null +++ b/packages/survey-creator-angular/presets/src/presets-property-grid.component.html @@ -0,0 +1,19 @@ + +
+ +
+ + +
\ No newline at end of file diff --git a/packages/survey-creator-angular/presets/src/presets-property-grid.component.ts b/packages/survey-creator-angular/presets/src/presets-property-grid.component.ts new file mode 100644 index 0000000000..b3a7a063ad --- /dev/null +++ b/packages/survey-creator-angular/presets/src/presets-property-grid.component.ts @@ -0,0 +1,22 @@ +import { Component, Input } from "@angular/core"; +import { PropertyGridViewModel } from "survey-creator-core"; +import { AngularComponentFactory, BaseAngular } from "survey-angular-ui"; + +@Component({ + selector: "svc-presets-property-grid", + templateUrl: "./presets-property-grid.component.html", + styles: [":host { display: none; }"] +}) +export class PresetsPropertyGridWrapperComponent extends BaseAngular { + @Input() model?: PropertyGridViewModel; + + showPresets() { + (this.model as any)["showPresets"]?.(); + } + + protected getModel(): PropertyGridViewModel { + return this.model!; + } +} + +AngularComponentFactory.Instance.registerComponent("svc-presets-property-grid", PresetsPropertyGridWrapperComponent); \ No newline at end of file diff --git a/packages/survey-creator-angular/presets/src/presets.component.html b/packages/survey-creator-angular/presets/src/presets.component.html new file mode 100644 index 0000000000..62caaabad0 --- /dev/null +++ b/packages/survey-creator-angular/presets/src/presets.component.html @@ -0,0 +1,10 @@ + +
+ + +
+
+ + +
+
diff --git a/packages/survey-creator-angular/presets/src/presets.component.ts b/packages/survey-creator-angular/presets/src/presets.component.ts new file mode 100644 index 0000000000..6b0a3162d4 --- /dev/null +++ b/packages/survey-creator-angular/presets/src/presets.component.ts @@ -0,0 +1,23 @@ +import { Component, Input } from "@angular/core"; +import { AngularComponentFactory, BaseAngular } from "survey-angular-ui"; +import { SurveyCreatorModel } from "survey-creator-core"; + +@Component({ + selector: "svc-tab-presets", + templateUrl: "./presets.component.html", + styles: [":host { display: none; }"] +}) +export class TabPresetsComponent extends BaseAngular { + @Input() model: any = undefined; + public get survey() { + return this.model.model; + } + public get creator() { + return this.model.creator; + } + protected getModel() { + return this.model; + } +} + +AngularComponentFactory.Instance.registerComponent("svc-tab-presets", TabPresetsComponent); diff --git a/packages/survey-creator-angular/presets/src/presets.module.ts b/packages/survey-creator-angular/presets/src/presets.module.ts new file mode 100644 index 0000000000..13a8a3058e --- /dev/null +++ b/packages/survey-creator-angular/presets/src/presets.module.ts @@ -0,0 +1,29 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { FormsModule } from "@angular/forms"; +import { SurveyModule } from "survey-angular-ui"; + +// Import presets components +import { TabPresetsComponent } from "./presets.component"; +import { PresetsIconItemComponent } from "./presets-icon-item.component"; +import { PresetsPropertyGridWrapperComponent } from "./presets-property-grid.component"; + +@NgModule({ + declarations: [ + TabPresetsComponent, + PresetsIconItemComponent, + PresetsPropertyGridWrapperComponent + ], + imports: [ + CommonModule, + FormsModule, + SurveyModule + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + exports: [ + TabPresetsComponent, + PresetsIconItemComponent, + PresetsPropertyGridWrapperComponent + ] +}) +export class PresetsModule { } diff --git a/packages/survey-creator-angular/src/creator.component.html b/packages/survey-creator-angular/src/creator.component.html index ff5b438000..353489b34e 100644 --- a/packages/survey-creator-angular/src/creator.component.html +++ b/packages/survey-creator-angular/src/creator.component.html @@ -25,7 +25,7 @@ [attr.aria-labelledby]="'tab-' + tab.id" [class.svc-creator__toolbox--right]="creator.toolboxLocation == 'right'"> + [component]="{ name: tab.componentContent, data: { data: creator, model: tab.data.model } }"> diff --git a/packages/survey-creator-angular/src/side-bar/tab-control.component.html b/packages/survey-creator-angular/src/side-bar/tab-control.component.html index 1a786ac866..f0d33513e3 100644 --- a/packages/survey-creator-angular/src/side-bar/tab-control.component.html +++ b/packages/survey-creator-angular/src/side-bar/tab-control.component.html @@ -15,7 +15,7 @@
- +
diff --git a/packages/survey-creator-angular/tsconfig.lib.json b/packages/survey-creator-angular/tsconfig.lib.json index 140d703f12..ebd03ee511 100644 --- a/packages/survey-creator-angular/tsconfig.lib.json +++ b/packages/survey-creator-angular/tsconfig.lib.json @@ -11,6 +11,6 @@ "node_modules" ], "include": [ - "./src/**/*.ts" + "./src/angular-ui.ts" ] } \ No newline at end of file diff --git a/packages/survey-creator-angular/tsconfig.presets.json b/packages/survey-creator-angular/tsconfig.presets.json new file mode 100644 index 0000000000..a46650330d --- /dev/null +++ b/packages/survey-creator-angular/tsconfig.presets.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "survey-creator-angular": [ + "./build" + ] + } + }, + "include": [ + "./src/presets/index.ts" + ] +} \ No newline at end of file diff --git a/packages/survey-creator-angular/tsconfig.presets.prod.json b/packages/survey-creator-angular/tsconfig.presets.prod.json new file mode 100644 index 0000000000..fede6db44e --- /dev/null +++ b/packages/survey-creator-angular/tsconfig.presets.prod.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.presets.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} \ No newline at end of file diff --git a/packages/survey-creator-core/.eslintignore b/packages/survey-creator-core/.eslintignore index 33c791297f..bc3c2a48fd 100644 --- a/packages/survey-creator-core/.eslintignore +++ b/packages/survey-creator-core/.eslintignore @@ -3,5 +3,6 @@ build/ doc_generator/ node_modules/ webpack.config.js +webpack.presets.config.js creator-themes-import.js creator-themes-update-fallback.js \ No newline at end of file diff --git a/packages/survey-creator-core/package.json b/packages/survey-creator-core/package.json index b516458d24..d5690272d8 100644 --- a/packages/survey-creator-core/package.json +++ b/packages/survey-creator-core/package.json @@ -8,11 +8,14 @@ "url": "https://github.com/surveyjs/survey-creator.git" }, "scripts": { - "build": "webpack --env buildType=dev --env emitDeclarations --env emitStyles --env emitNonSourceFiles && webpack --env buildType=prod --env emitStyles && rollup -c", + "build": "npm run build:main && npm run build:presets", + "build:main": "webpack --env buildType=dev --env emitDeclarations --env emitStyles --env emitNonSourceFiles && webpack --env buildType=prod --env emitStyles && rollup -c", "build:i18n": "webpack --config ./webpack.i18n.js --env buildType=dev && webpack --config ./webpack.i18n.js --env buildType=prod && rollup -c rollup.i18n.config.js", "build:themes": "node creator-themes-import.js && webpack --config ./webpack.themes.config.js --env buildType=dev --env emitDeclarations && webpack --config ./webpack.themes.config.js --env buildType=prod && rollup -c rollup.themes.config.js", - "build:all": "npm run build && npm run build:i18n && npm run build:themes", + "build:all": "npm run build && npm run build:i18n && npm run build:themes && npm run build:i18n:presets", "build:presets": "webpack --config ./webpack.presets.config.js --env buildType=dev --env emitDeclarations && webpack --config ./webpack.presets.config.js --env buildType=prod && rollup -c rollup.presets.config.js --bundleConfigAsCjs", + "build:i18n:presets": "webpack --config ./webpack.i18n.presets.js --env buildType=dev --env emitDeclarations && webpack --config ./webpack.i18n.presets.js --env buildType=prod && rollup -c rollup.i18n.presets.config.js --bundleConfigAsCjs", + "watch:presets": "webpack --config ./webpack.presets.config.js --watch --env buildType=dev --env emitDeclarations && webpack --config ./webpack.presets.config.js --env buildType=prod && rollup -c rollup.presets.config.js --bundleConfigAsCjs", "test": "jest", "test:cov": "jest --coverage", "test:watch": "jest --watch", diff --git a/packages/survey-creator-core/rollup.i18n.presets.config.js b/packages/survey-creator-core/rollup.i18n.presets.config.js new file mode 100644 index 0000000000..46f7a3b73f --- /dev/null +++ b/packages/survey-creator-core/rollup.i18n.presets.config.js @@ -0,0 +1,25 @@ +const defaultConfig = require("./rollup.config"); +const path = require("path"); +const fs = require("fs"); +const input = {}; + +function patchEntries() { + fs.readdirSync(path.resolve(__dirname, "./src/presets/localization")).forEach(file => { + var extension = path.extname(file); + if (extension.toLowerCase() === ".ts") { + input[`presets/i18n/${path.basename(file, extension)}`] = (path.resolve(__dirname, "./src/presets/localization") + "/" + file); + } + }); + input["presets/i18n/index"] = path.resolve(__dirname, "./src/presets/i18n.ts"); +} + +module.exports = () => { + let options = { + tsconfig: path.resolve(__dirname, "./tsconfig.i18n.presets.json") + }; + const config = defaultConfig(options); + patchEntries(); + config.input = input; + config.external = ["survey-creator-core"]; + return config; +}; \ No newline at end of file diff --git a/packages/survey-creator-core/rollup.presets.config.js b/packages/survey-creator-core/rollup.presets.config.js index 0efca2e77e..2a6d51874f 100644 --- a/packages/survey-creator-core/rollup.presets.config.js +++ b/packages/survey-creator-core/rollup.presets.config.js @@ -13,9 +13,9 @@ var banner = [ "License: https://surveyjs.io/Licenses#SurveyCreator", ].join("\n"); export default { - input: path.resolve(__dirname, "./src/entries/presets.ts"), + input: path.resolve(__dirname, "./src/presets/index.ts"), output: { - file: "build/survey-creator-core-presets.mjs", + file: "build/fesm/presets/index.mjs", format: "es", exports: "named", sourcemap: true @@ -40,6 +40,12 @@ export default { content: banner, commentStyle: "ignored", } - }) + }), + { + name: "remove-scss-imports", + load: (id) => { + if (id.match(/\.scss$/)) return ""; + } + }, ] }; \ No newline at end of file diff --git a/packages/survey-creator-core/src/components/popup.scss b/packages/survey-creator-core/src/components/popup.scss index de55473e6d..df668dc8f9 100644 --- a/packages/survey-creator-core/src/components/popup.scss +++ b/packages/survey-creator-core/src/components/popup.scss @@ -225,4 +225,4 @@ // @include ctrDefaultFont; // color: var(--ctr-popup-message-color, var(--sjs-layer-1-foreground-100, #000000e6)); // } -} +} \ No newline at end of file diff --git a/packages/survey-creator-core/src/components/side-bar/side-bar-model.ts b/packages/survey-creator-core/src/components/side-bar/side-bar-model.ts index 3b687526c1..da3e148db4 100644 --- a/packages/survey-creator-core/src/components/side-bar/side-bar-model.ts +++ b/packages/survey-creator-core/src/components/side-bar/side-bar-model.ts @@ -162,7 +162,7 @@ export class SidebarModel extends Base { }, locTitleName: "ed.showPanel", visible: new ComputedUpdater(() => { - return notShortCircuitAnd(this.hasVisiblePages, !this.visible, !this.hideSideBarVisibilityControlActions); + return notShortCircuitAnd(!this.creator.showOneCategoryInPropertyGrid, this.hasVisiblePages, !this.visible, !this.hideSideBarVisibilityControlActions); }), showTitle: false }); diff --git a/packages/survey-creator-core/src/components/side-bar/tab-control-model.ts b/packages/survey-creator-core/src/components/side-bar/tab-control-model.ts index eddbcdec15..051eddacd9 100644 --- a/packages/survey-creator-core/src/components/side-bar/tab-control-model.ts +++ b/packages/survey-creator-core/src/components/side-bar/tab-control-model.ts @@ -20,6 +20,7 @@ export class TabControlModel extends Base { visible: true, pressed: false, action: () => { + if (!this.expandCollapseAction.enabled) return; if (this.sidePanel.visible) { this.sidePanel.collapseSidebar(); } else { @@ -31,6 +32,19 @@ export class TabControlModel extends Base { constructor(public sidePanel: SidebarModel) { super(); + let bottomActionBarCss = { + root: "sv-action-bar", + defaultSizeMode: "", + smallSizeMode: "", + item: "svc-menu-action__button", + itemWithTitle: "", + itemAsIcon: "", + itemActive: "svc-menu-action__button--selected", + itemPressed: "", + itemIcon: "svc-menu-action__icon", + itemTitleWithIcon: "", + }; + this.bottomToolbar.cssClasses = bottomActionBarCss; this.createToggleAction(); this.updateExpandCollapseAction(); this.sidePanel.registerFunctionOnPropertyValueChanged("_visible", () => { diff --git a/packages/survey-creator-core/src/components/side-bar/tab-control.scss b/packages/survey-creator-core/src/components/side-bar/tab-control.scss index 9f5347c04f..2051f15ace 100644 --- a/packages/survey-creator-core/src/components/side-bar/tab-control.scss +++ b/packages/survey-creator-core/src/components/side-bar/tab-control.scss @@ -162,6 +162,8 @@ gap: var(--ctr-menu-toolbar-button-gap, var(--sjs-spacing-x1)); border-radius: var(--ctr-menu-toolbar-button-corner-radius, var(--sjs-corner-radius-x1)); cursor: pointer; + border: unset; + background: unset; } .svc-menu-action__button:hover, .svc-menu-action__button:focus, @@ -173,6 +175,13 @@ opacity: var(--ctr-menu-toolbar-button-opacity-pressed, 0.5); background: var(--ctr-menu-toolbar-button-background-color-pressed, var(--sjs-layer-1-background-400, #f5f5f5ff)); } +.svc-menu-action__button.svc-menu-action__button--disabled { + pointer-events: none; + use { + opacity: var(--ctr-toolbox-item-icon-opacity-disabled, 0.25); + fill: var(--ctr-toolbox-item-icon-color-disabled, var(--sjs-layer-1-foreground-100, #000000e6)); + } +} .svc-menu-action__button.svc-menu-action__button--with-subtitle { padding: var(--ctr-menu-toolbar-button-padding-top-with-description, var(--sjs-spacing-x05)) var(--ctr-menu-toolbar-button-padding-right-with-description, var(--sjs-spacing-x150)) diff --git a/packages/survey-creator-core/src/components/tabs/designer-plugin.ts b/packages/survey-creator-core/src/components/tabs/designer-plugin.ts index 089f1ea7c6..38b5e3922b 100644 --- a/packages/survey-creator-core/src/components/tabs/designer-plugin.ts +++ b/packages/survey-creator-core/src/components/tabs/designer-plugin.ts @@ -31,9 +31,13 @@ export class TabDesignerPlugin implements ICreatorPlugin { public previewAction: Action; private designerAction: Action; public designerStateManager: DesignerStateManager; - private tabControlModel: TabControlModel; + private tabControlModelValue: TabControlModel; private prevActivePage: string; + public get tabControlModel() { + return this.tabControlModelValue; + } + public static iconName = "icon-config"; private get isSurveySelected(): boolean { @@ -85,9 +89,18 @@ export class TabDesignerPlugin implements ICreatorPlugin { } } - private updateActivePage() { + public activateSidebar() { + this.updateActivePage(false); + this.updateTabControl(); + } + + public setSidebarEnabled(value: boolean) { + this.tabControlModel.expandCollapseAction.enabled = value; + } + + private updateActivePage(showPlaceholder = true) { if (this.showOneCategoryInPropertyGrid) { - this.setActivePage(this.creator.survey.pageCount ? this.propertyGridTab.id : this.propertyGridPlaceholderPage.id); + this.setActivePage(this.creator.survey.pageCount || !showPlaceholder ? this.propertyGridTab.id : this.propertyGridPlaceholderPage.id); } else { this.setPropertyGridIsActivePage(); } @@ -207,7 +220,7 @@ export class TabDesignerPlugin implements ICreatorPlugin { constructor(private creator: SurveyCreatorModel) { creator.addTab({ name: "designer", plugin: this, iconName: TabDesignerPlugin.iconName }); - this.tabControlModel = new TabControlModel(this.creator.sidebar); + this.tabControlModelValue = new TabControlModel(this.creator.sidebar); this.tabControlModel.onTopToolbarItemCreated = (bar) => { this.setupPropertyGridTabActions(bar); }; diff --git a/packages/survey-creator-core/src/components/toolbox/toolbox-tool.scss b/packages/survey-creator-core/src/components/toolbox/toolbox-tool.scss index 67026ea6e5..b57121bd6e 100644 --- a/packages/survey-creator-core/src/components/toolbox/toolbox-tool.scss +++ b/packages/survey-creator-core/src/components/toolbox/toolbox-tool.scss @@ -408,6 +408,9 @@ align-self: flex-start; pointer-events: all; } + .svc-toolbox__tool--disabled { + pointer-events: none; + } .svc-toolbox__search-button { padding-inline-start: var(--ctr-toolbox-item-margin-horizontal-no-text, var(--sjs-spacing-x05)); } diff --git a/packages/survey-creator-core/src/components/toolbox/toolbox.scss b/packages/survey-creator-core/src/components/toolbox/toolbox.scss index 8d0d36fc0f..588503c241 100644 --- a/packages/survey-creator-core/src/components/toolbox/toolbox.scss +++ b/packages/survey-creator-core/src/components/toolbox/toolbox.scss @@ -301,6 +301,8 @@ } .svc-toolbox--disabled { - opacity: 0.5; pointer-events: none; + .svc-toolbox__search-button { + pointer-events: none; + } } diff --git a/packages/survey-creator-core/src/creator-base.ts b/packages/survey-creator-core/src/creator-base.ts index 7c8951f46f..4c725d393b 100644 --- a/packages/survey-creator-core/src/creator-base.ts +++ b/packages/survey-creator-core/src/creator-base.ts @@ -1506,13 +1506,15 @@ export class SurveyCreatorModel extends Base this.onLocaleChanded.fire(this, { locale: value }); } public onLocaleChanded: EventBase = this.addCreatorEvent(); - public updateLocalizedStrings(): void { + public updateLocalizedStrings(refreshPlugin: boolean = true): void { this.toolbox.updateTitles(); - this.refreshPlugin(); - const selEl = this.selectedElement; - if (!!selEl) { - this.selectElement(null); - this.selectElement(selEl); + if (refreshPlugin) { + this.refreshPlugin(); + const selEl = this.selectedElement; + if (!!selEl) { + this.selectElement(null); + this.selectElement(selEl); + } } this.locStrsChanged(); } @@ -1747,6 +1749,11 @@ export class SurveyCreatorModel extends Base } this.setShowSidebar(val, true); } + public setSidebarEnabled(value: boolean) { + this.setShowSidebar(value, true); + const designerPlugin = this.getPlugin("designer") as TabDesignerPlugin; + designerPlugin?.setSidebarEnabled(value); + } public setShowSidebar(value: boolean, isManualMode = false) { if (isManualMode) { if (value) { @@ -1913,21 +1920,22 @@ export class SurveyCreatorModel extends Base }; } public getAvailableTabs(): Array { - const res = []; + const res = this.tabs.map(t => ({ name: t.id, iconName: t.iconName })); const tabInfo = this.getTabsInfo(); for (let key in tabInfo) { - res.push({ name: key, iconName: tabInfo[key].iconName }); + if (res.filter(t => t.name == key).length == 0) { + res.push({ name: key, iconName: tabInfo[key].iconName }); + } } return res; } - public getTabNames(): Array { - const tabNames = this.getAvailableTabs().map(t => t.name); + public getTabs(): Array { + const tabs = this.getAvailableTabs(); const res = []; this.tabs.forEach(tab => { const name = this.fixPluginName(tab.id); - if (tabNames.indexOf(name) > -1) { - res.push(name); - } + const newtab = tabs.filter(t => t.name === name)[0]; + if (newtab) res.push(newtab); }); return res; } @@ -1935,9 +1943,9 @@ export class SurveyCreatorModel extends Base public setTabs(tabNames: Array): void { if (!Array.isArray(tabNames)) return; const tabInfo = this.getTabsInfo(); - for (let i = tabNames.length - 1; i >= 0; i--) { - if (!tabInfo[tabNames[i]]) tabNames.splice(i, 1); - } + // for (let i = tabNames.length - 1; i >= 0; i--) { + // if (!tabInfo[tabNames[i]]) tabNames.splice(i, 1); + // } if (tabNames.length === 0) return; for (let i = this.tabs.length - 1; i >= 0; i--) { const tabId = this.tabs[i].id; @@ -1959,12 +1967,11 @@ export class SurveyCreatorModel extends Base this.tabs.splice(i, 0, item); } } - if (this.tabs.length > 0) { + if (this.tabs.length > 0 && this.tabs.filter(t => t.id == this.activeTab).length == 0) { this.switchTab(this.tabs[0].id); } } - private initPlugins(): void { - this.addPlugin("undoredo", new UndoRedoPlugin(this)); + public initialTabs() { const tabs = []; if (this.showDesignerTab) { tabs.push("designer"); @@ -1984,6 +1991,11 @@ export class SurveyCreatorModel extends Base if (this.showTranslationTab) { tabs.push("translation"); } + return tabs; + } + private initPlugins(): void { + this.addPlugin("undoredo", new UndoRedoPlugin(this)); + const tabs = this.initialTabs(); this.setTabs(tabs); } private initFooterToolbar(): void { diff --git a/packages/survey-creator-core/src/creator-theme/creator-themes.ts b/packages/survey-creator-core/src/creator-theme/creator-themes.ts index 5646d36d22..f9d914d603 100644 --- a/packages/survey-creator-core/src/creator-theme/creator-themes.ts +++ b/packages/survey-creator-core/src/creator-theme/creator-themes.ts @@ -21,6 +21,11 @@ export function registerCreatorTheme(...themes: Array sortDefaultThemes(defaultCreatorThemesOrder, importedThemeNames, PredefinedCreatorThemes); } +export function extendCreatorTheme(theme: ICreatorTheme) { + const curTheme = CreatorThemes[theme.themeName]; + curTheme.cssVariables = { ...curTheme.cssVariables, ...theme.cssVariables }; +} + const defaultVariables = { "--sjs-special-background": "#EDF9F7", "--sjs-primary-background-500": "#19B394", diff --git a/packages/survey-creator-core/src/entries/presets.ts b/packages/survey-creator-core/src/entries/presets.ts deleted file mode 100644 index a97a9f9921..0000000000 --- a/packages/survey-creator-core/src/entries/presets.ts +++ /dev/null @@ -1,20 +0,0 @@ -// export * from "../presets/presets"; -// export * from "../presets/presets-base"; -// export * from "../presets/presets-toolbox"; -export * from "../presets/presets-editable-toolbox"; -export * from "../presets/presets-editor"; -export * from "../presets/presets-editable-languages"; -export * from "../presets/presets-editable-tabs"; -export * from "../presets/presets-editable-base"; -//export * from "../presets/presets-tabs"; -//export * from "../presets/presets-languages"; -//export * from "../presets/presets-properties"; -export * from "../presets/preset-question-ranking"; -export * from "../presets/preset-question-json"; -import { checkLibraryVersion } from "survey-core"; - -export let Version: string; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -//@ts-ignore -Version = `${process.env.VERSION}`; -checkLibraryVersion(Version, "survey-creator-core-presets"); \ No newline at end of file diff --git a/packages/survey-creator-core/src/images-v1/more-circle-24x24.svg b/packages/survey-creator-core/src/images-v1/more-circle-24x24.svg new file mode 100644 index 0000000000..3e2bf0c830 --- /dev/null +++ b/packages/survey-creator-core/src/images-v1/more-circle-24x24.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/packages/survey-creator-core/src/images-v1/square-dashed-24x24.svg b/packages/survey-creator-core/src/images-v1/square-dashed-24x24.svg new file mode 100644 index 0000000000..da172a8622 --- /dev/null +++ b/packages/survey-creator-core/src/images-v1/square-dashed-24x24.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/survey-creator-core/src/images-v2/chevronleft-24x24.svg b/packages/survey-creator-core/src/images-v2/chevronleft-24x24.svg new file mode 100644 index 0000000000..38cccb1220 --- /dev/null +++ b/packages/survey-creator-core/src/images-v2/chevronleft-24x24.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/survey-creator-core/src/images-v2/chevronright-24x24.svg b/packages/survey-creator-core/src/images-v2/chevronright-24x24.svg new file mode 100644 index 0000000000..48ec2cc442 --- /dev/null +++ b/packages/survey-creator-core/src/images-v2/chevronright-24x24.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/survey-creator-core/src/images-v2/more-circle-24x24.svg b/packages/survey-creator-core/src/images-v2/more-circle-24x24.svg new file mode 100644 index 0000000000..3e2bf0c830 --- /dev/null +++ b/packages/survey-creator-core/src/images-v2/more-circle-24x24.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/packages/survey-creator-core/src/images-v2/remove_24x24.svg b/packages/survey-creator-core/src/images-v2/remove_24x24.svg new file mode 100644 index 0000000000..e7821f2f6c --- /dev/null +++ b/packages/survey-creator-core/src/images-v2/remove_24x24.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/packages/survey-creator-core/src/images-v2/square-dashed-24x24.svg b/packages/survey-creator-core/src/images-v2/square-dashed-24x24.svg new file mode 100644 index 0000000000..da172a8622 --- /dev/null +++ b/packages/survey-creator-core/src/images-v2/square-dashed-24x24.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/survey-creator-core/src/images/remove_24x24.svg b/packages/survey-creator-core/src/images/remove_24x24.svg new file mode 100644 index 0000000000..e7821f2f6c --- /dev/null +++ b/packages/survey-creator-core/src/images/remove_24x24.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/packages/survey-creator-core/src/presets-creator/presets-base.ts b/packages/survey-creator-core/src/presets-creator/presets-base.ts index 2bfeaac0e4..d44f3bae7f 100644 --- a/packages/survey-creator-core/src/presets-creator/presets-base.ts +++ b/packages/survey-creator-core/src/presets-creator/presets-base.ts @@ -3,7 +3,7 @@ import { SurveyCreatorModel } from "../creator-base"; export interface ICreatorPreset { setJson(json: any): void; - apply(creator: SurveyCreatorModel): void; + apply(creator: SurveyCreatorModel, internal?: boolean): void; getPath(): string; } @@ -19,17 +19,17 @@ export abstract class CreatorPresetBase implements ICreatorPreset { this.json = json; this.children.forEach(item => item.setJson(this.json && item.getPath() ? this.json[item.getPath()] : this.json)); } - public apply(creator?: SurveyCreatorModel): void { + public apply(creator: SurveyCreatorModel, internal = false): void { if (!this.json) return; if (!!creator) { - this.applyCore(creator); - this.children.forEach(item => item.apply(creator)); + this.applyCore(creator, internal); + this.children.forEach(item => item.apply(creator, internal)); } this.onApplied.fire(this, {}); } public abstract getPath(): string; - protected applyEmptyJson(): boolean { return false; } - protected applyCore(creator: SurveyCreatorModel): void { } + protected applyEmptyJson(): boolean { return true; } + protected applyCore(creator: SurveyCreatorModel, internal: boolean = false): void { } protected createPresets(): Array { return []; } diff --git a/packages/survey-creator-core/src/presets-creator/presets-languages.ts b/packages/survey-creator-core/src/presets-creator/presets-languages.ts index a969c36141..c10e3f6a24 100644 --- a/packages/survey-creator-core/src/presets-creator/presets-languages.ts +++ b/packages/survey-creator-core/src/presets-creator/presets-languages.ts @@ -4,7 +4,6 @@ import { surveyLocalization } from "survey-core"; export class CreatorPresetLanguages extends CreatorPresetBase { public getPath(): string { return "languages"; } - protected applyEmptyJson(): boolean { return true; } protected applyCore(creator: SurveyCreatorModel): void { super.applyCore(creator); const locale = this.json?.creator || ""; diff --git a/packages/survey-creator-core/src/presets-creator/presets-options.ts b/packages/survey-creator-core/src/presets-creator/presets-options.ts new file mode 100644 index 0000000000..89b8de051a --- /dev/null +++ b/packages/survey-creator-core/src/presets-creator/presets-options.ts @@ -0,0 +1,14 @@ +import { CreatorPresetBase } from "./presets-base"; +import { SurveyCreatorModel } from "../creator-base"; +import { surveyLocalization } from "survey-core"; + +export class CreatorPresetOptions extends CreatorPresetBase { + public getPath(): string { return "options"; } + protected applyCore(creator: SurveyCreatorModel): void { + super.applyCore(creator); + const options = this.json || {}; + Object.keys(options).forEach(o => { + creator[o] = options[o]; + }); + } +} \ No newline at end of file diff --git a/packages/survey-creator-core/src/presets-creator/presets-properties.ts b/packages/survey-creator-core/src/presets-creator/presets-properties.ts index 1293c042ee..110aa3a8fb 100644 --- a/packages/survey-creator-core/src/presets-creator/presets-properties.ts +++ b/packages/survey-creator-core/src/presets-creator/presets-properties.ts @@ -3,6 +3,7 @@ import { SurveyCreatorModel } from "../creator-base"; export class CreatorPresetPropertyGridDefinition extends CreatorPresetBase { public getPath(): string { return "definition"; } + protected applyEmptyJson(): boolean { return false; } protected applyCore(creator: SurveyCreatorModel): void { creator.setPropertyGridDefinition(this.json); } diff --git a/packages/survey-creator-core/src/presets-creator/presets-tabs.ts b/packages/survey-creator-core/src/presets-creator/presets-tabs.ts index 9c121750dc..201920622d 100644 --- a/packages/survey-creator-core/src/presets-creator/presets-tabs.ts +++ b/packages/survey-creator-core/src/presets-creator/presets-tabs.ts @@ -7,17 +7,20 @@ export interface ICreatorPresetTab { export class CreatorPresetTabs extends CreatorPresetBase { public getPath(): string { return "tabs"; } - protected applyCore(creator: SurveyCreatorModel): void { - super.applyCore(creator); - const items = this.json["items"] || []; - let tab = this.json.activeTab || (items.length > 0 ? items[0].name : ""); - if (items.length > 0 && items.filter(i => i.name == tab).length == 0) { - tab = items[0].name; - } - if (!!tab && creator.activeTab !== tab) { - const activePlugin = creator.getPlugin(creator.activeTab); - if (!!activePlugin?.deactivate) { - activePlugin.deactivate(); + protected applyCore(creator: SurveyCreatorModel, internal: boolean = false): void { + super.applyCore(creator, internal); + const items = this.json["items"] || creator.initialTabs().map(name => ({ name })); + let tab = null; + if (!internal) { + tab = this.json.activeTab || (items.length > 0 ? items[0].name : ""); + if (items.length > 0 && items.filter(i => i.name == tab).length == 0) { + tab = items[0].name; + } + if (!!tab && creator.activeTab !== tab) { + const activePlugin = creator.getPlugin(creator.activeTab); + if (!!activePlugin?.deactivate) { + activePlugin.deactivate(); + } } } this.applyTabs(creator, items); @@ -27,6 +30,7 @@ export class CreatorPresetTabs extends CreatorPresetBase { } private applyTabs(creator: SurveyCreatorModel, items: Array): void { if (!Array.isArray(items)) return; - creator.setTabs(items.map(i => i.name)); + const tabs = [...items.map(i => i.name), ...creator.tabs.map(i => i.id).filter(id => id == "presets")]; + creator.setTabs(tabs); } } \ No newline at end of file diff --git a/packages/survey-creator-core/src/presets-creator/presets-toolbox.ts b/packages/survey-creator-core/src/presets-creator/presets-toolbox.ts index 8d3abbd171..b8c4387fac 100644 --- a/packages/survey-creator-core/src/presets-creator/presets-toolbox.ts +++ b/packages/survey-creator-core/src/presets-creator/presets-toolbox.ts @@ -8,6 +8,7 @@ export interface ICreatorPresetToolboxItem { json?: any; title?: string; tooltip?: string; + subitems?: ICreatorPresetToolboxItem[]; } export class CreatorPresetToolboxDefinition extends CreatorPresetBase { @@ -21,7 +22,7 @@ export class CreatorPresetToolboxDefinition extends CreatorPresetBase { toolbox.presetDefaultItems = this.getPresetDefaultItems(definition); if (Array.isArray(definition)) { definition.forEach(item => { - const tItem = toolbox.getActionById(item.name); + const tItem = toolbox.getItemByName(item.name); if (tItem) { ["iconName", "title", "tooltip", "json"].forEach(propName => { if (item[propName]) { @@ -48,21 +49,37 @@ export class CreatorPresetToolboxDefinition extends CreatorPresetBase { export class CreatorPresetToolboxConfigurator extends CreatorPresetBase { public getPath(): string { return ""; } protected applyCore(creator: SurveyCreatorModel): void { - if (!this.json) return; super.applyCore(creator); creator.toolbox.showCategoryTitles = this.json.showCategoryTitles; - this.applyItems(creator, this.json["definition"]?.map(i => i.name)); - this.applyCategories(creator, this.json["categories"]); - } - private applyItems(creator: SurveyCreatorModel, items: Array): void { - if (!Array.isArray(items)) return; - creator.toolbox.hasCategories = false; - creator.toolbox.defineCategories([{ category: "general", items: items }]); - } - private applyCategories(creator: SurveyCreatorModel, categories: Array): void { - if (!Array.isArray(categories)) return; - creator.toolbox.hasCategories = true; + const items = this.json["definition"]; + const itemNames = items?.map(i => i.name); + let categories = this.json["categories"]; + if (!categories) { + categories = creator.toolbox.getDefaultCategories() + .map(c => ({ + category: c.name, + items: c.items?.map(i => i.name).filter(name => !itemNames || itemNames.indexOf(name) != -1) + })).filter(c => c.items.length > 0); + } else if (categories.length === 0) { + const category = { + category: "general", + items: itemNames || creator.toolbox.itemNames + }; + categories = [category]; + } creator.toolbox.defineCategories(categories); + // TODO: check if defineCategories incorrectly resets subitems + if (items) { + items.forEach(item => { + const tItem = creator.toolbox.getItemByName(item.name); + if (tItem) { + if (item.subitems) { + tItem.items = []; + item.subitems.forEach(si => tItem.addSubitem(si as any)); + } + } + }); + } } } export class CreatorPresetToolbox extends CreatorPresetBase { diff --git a/packages/survey-creator-core/src/presets-creator/presets.ts b/packages/survey-creator-core/src/presets-creator/presets.ts index ab22952e27..ca02f82a83 100644 --- a/packages/survey-creator-core/src/presets-creator/presets.ts +++ b/packages/survey-creator-core/src/presets-creator/presets.ts @@ -1,6 +1,7 @@ import { CreatorPresetBase, ICreatorPreset } from "./presets-base"; import { CreatorPresetToolbox, ICreatorPresetToolboxItem } from "./presets-toolbox"; import { CreatorPresetLanguages } from "./presets-languages"; +import { CreatorPresetOptions } from "./presets-options"; import { CreatorPresetTabs, ICreatorPresetTab } from "./presets-tabs"; import { CreatorPresetPropertyGrid } from "./presets-properties"; import { IToolboxCategoryDefinition } from "../toolbox"; @@ -38,11 +39,11 @@ export class CreatorPreset extends CreatorPresetBase { public getJson(): ICreatorPresetData { return this.json; } - public apply(creator?: SurveyCreatorModel): void { - super.apply(creator); + public apply(creator: SurveyCreatorModel, internal = false): void { + super.apply(creator, internal); this.applyLocalization(); if (!!creator) { - creator.updateLocalizedStrings(); + creator.updateLocalizedStrings(!internal); } } protected applyLocalization(): void { @@ -55,6 +56,6 @@ export class CreatorPreset extends CreatorPresetBase { } protected createPresets(): Array { return [new CreatorPresetLanguages(), new CreatorPresetTabs(), new CreatorPresetToolbox(), - new CreatorPresetPropertyGrid()]; + new CreatorPresetPropertyGrid(), new CreatorPresetOptions()]; } } \ No newline at end of file diff --git a/packages/survey-creator-core/src/presets/i18n.ts b/packages/survey-creator-core/src/presets/i18n.ts new file mode 100644 index 0000000000..71540278e7 --- /dev/null +++ b/packages/survey-creator-core/src/presets/i18n.ts @@ -0,0 +1,36 @@ +//localization +import "./localization/arabic"; +import "./localization/bulgarian"; +import "./localization/burmese"; +import "./localization/croatian"; +import "./localization/czech"; +import "./localization/danish"; +import "./localization/dutch"; +import "./localization/finnish"; +import "./localization/french"; +import "./localization/german"; +import "./localization/hebrew"; +import "./localization/hungarian"; +import "./localization/indonesian"; +import "./localization/italian"; +import "./localization/japanese"; +import "./localization/korean"; +import "./localization/malay"; +import "./localization/mongolian"; +import "./localization/norwegian"; +import "./localization/persian"; +import "./localization/polish"; +import "./localization/portuguese"; +import "./localization/romanian"; +import "./localization/russian"; +import "./localization/simplified-chinese"; +import "./localization/slovak"; +import "./localization/slovenian"; +import "./localization/spanish"; +import "./localization/swedish"; +import "./localization/tajik"; +import "./localization/thai"; +import "./localization/traditional-chinese"; +import "./localization/turkish"; +import "./localization/haitian-creole"; +import "./localization/greek"; \ No newline at end of file diff --git a/packages/survey-creator-core/src/presets/index.ts b/packages/survey-creator-core/src/presets/index.ts new file mode 100644 index 0000000000..59f42e30cb --- /dev/null +++ b/packages/survey-creator-core/src/presets/index.ts @@ -0,0 +1,15 @@ +export * from "./presets-editable-toolbox"; +export * from "./presets-editor"; +export * from "./presets-plugin"; +export * from "./presets-editable-languages"; +export * from "./presets-editable-tabs"; +export * from "./presets-editable-options"; +export * from "./presets-editable-base"; +export * from "./preset-question-json"; +import { checkLibraryVersion } from "survey-core"; +import "../presets/presets-theme/presets.scss"; +export let Version: string; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +//@ts-ignore +Version = `${process.env.VERSION}`; +checkLibraryVersion(Version, "survey-creator-core-presets"); \ No newline at end of file diff --git a/packages/survey-creator-core/src/presets/localization/arabic.ts b/packages/survey-creator-core/src/presets/localization/arabic.ts new file mode 100644 index 0000000000..a29af2fdd2 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/arabic.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const arStrings = { + languages: { + // [Auto-translated] "Languages" + title: "اللغات", + // [Auto-translated] "Languages" + navigationTitle: "اللغات", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "حدد لغة واجهة مستخدم منشئ الاستطلاع والاستهداف\nلغات الاستطلاع التي يتم تكوينها.", + // [Auto-translated] "Creator UI language" + creatorUI: "لغة واجهة مستخدم منشئ المحتوى", + // [Auto-translated] "Survey languages" + surveyLanguages: "لغات الاستطلاع", + // [Auto-translated] "Type to search..." + searchPlaceholder: "اكتب للبحث ...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "ترجمة أسماء لغات الاستطلاع إلى اللغة الإنجليزية" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "تكوين علامات التبويب", + // [Auto-translated] "Tabs" + navigationTitle: "علامات التبويب", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "حدد علامات التبويب التي تريد إظهارها ، وأعد ترتيبها ، وقم بتغيير عناوينها ،\nواختر علامة التبويب التي ستكون نشطة افتراضيا.", + // [Auto-translated] "Visible tabs" + items: "علامات التبويب المرئية", + // [Auto-translated] "Hidden tabs" + hiddenItems: "علامات التبويب المخفية", + // [Auto-translated] "Default tab" + defaultTab: "علامة التبويب الافتراضية", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "اسحب علامات التبويب هنا لإظهارها", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "اسحب علامات التبويب هنا لإخفائها", + // [Auto-translated] "Name" + name: "اسم", + // [Auto-translated] "Title" + titleField: "عنوان", + // [Auto-translated] "Icon name" + iconName: "اسم الرمز" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "قم بإعداد مربع الأدوات", + // [Auto-translated] "Toolbox" + navigationTitle: "ادوات", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "حدد عناصر مربع الأدوات التي تريد إظهارها، وقم بتجميعها في فئات، \nأعد تسميتها وقم بتغيير ترتيبها إذا لزم الأمر.", + // [Auto-translated] "Toolbox" + toolbox: "ادوات", + // [Auto-translated] "Categories" + categories: "فئات", + // [Auto-translated] "No categories" + noCategoriesText: "لا توجد فئات", + // [Auto-translated] "Drag items here to show them" + noItemsText: "اسحب العناصر هنا لإظهارها", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "اسحب العناصر هنا لإخفائها", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "عناصر صندوق الأدوات المخفية", + // [Auto-translated] "Enable grouping" + enableGrouping: "تمكين التجميع", + // [Auto-translated] "Show category titles" + showCategoryTitles: "عرض عناوين الفئات", + // [Auto-translated] "Name" + categoryName: "اسم", + // [Auto-translated] "Title" + categoryTitle: "عنوان", + // [Auto-translated] "Tooltip" + tooltip: "تلميح الأداة", + // [Auto-translated] "Icon name" + iconName: "اسم الرمز", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON لتطبيقه عند تحديد المستخدمين لعنصر مربع الأدوات هذا", + // [Auto-translated] "Subcategories" + subitems: "الفئات الفرعيه", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "تمكين العناصر الفرعية لهذا السؤال...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "نقل كعنصر فرعي إلى...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "أضف إلى Toolbox", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "حذف عنصر مخصص", + // [Auto-translated] "New Category" + addCustomCategory: "فئة جديدة", + // [Auto-translated] "New Item" + addCustomItem: "عنصر جديد", + // [Auto-translated] "Add a new item" + addNewItem: "إضافة عنصر جديد", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "إضافة عنصر فرعي جديد", + // [Auto-translated] "There are no items" + noRowsText: "لا توجد عناصر", + // [Auto-translated] "New item in" + newItem: "عنصر جديد في" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "ت��صيص شبكة الخصائص", + // [Auto-translated] "Property Grid" + navigationTitle: "شبكة العقارات", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "حدد عنصرا لتخصيص إعداداته المتوفرة في شبكة الخصائص.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "حدد عنصرا لتخصيص إعداداته المتوفرة في شبكة الخصائص", + // [Auto-translated] "Property Grid" + propertyGrid: "شبكة العقارات", + // [Auto-translated] "No categories" + noCategoriesText: "لا توجد فئات", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "اسحب الخصائص هنا لإظهارها", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "اسحب الخصائص هنا لإخفائها", + // [Auto-translated] "Unsorted items" + hiddenItems: "العناصر غير المصنفة", + // [Auto-translated] "Name" + categoryName: "اسم", + // [Auto-translated] "Title" + categoryTitle: "عنوان", + // [Auto-translated] "Icon name" + iconName: "اسم الرمز", + // [Auto-translated] "Name" + name: "اسم", + // [Auto-translated] "Title" + titleField: "عنوان", + // [Auto-translated] "Helper Text" + descriptionField: "نص مساعد", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "إضافة فئة مخصصة" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "إضافة عنصر جديد", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "إضافة عنصر فرعي جديد", + // [Auto-translated] "New item in" + newItem: "عنصر جديد في", + // [Auto-translated] "New Category" + addCustomCategory: "فئة جديدة", + // [Auto-translated] "New category in" + newCategory: "فئة جديدة في", + // [Auto-translated] "Move to category..." + moveToCategory: "انتقل إلى الفئة...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "انتقل إلى فئة جديدة ...", + // [Auto-translated] "Categories" + categoriesLabel: "فئات", + // [Auto-translated] "Move To..." + moveTo: "انتقل إلى...", + // [Auto-translated] "Remove from {0}" + removeFrom: "إزالة من {0}", + // [Auto-translated] "More" + more: "أكثر", + // [Auto-translated] "Restore" + restoreToDefault: "يستعيد", + // [Auto-translated] "Edit" + edit: "حرر", + // [Auto-translated] "Expand" + expand: "ستوسع", + // [Auto-translated] "Collapse" + collapse: "تقوض", + // [Auto-translated] "Remove" + remove: "أبعد", + // [Auto-translated] "Add" + add: "جمع", + // [Auto-translated] "Delete" + delete: "حذف" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "الإعدادات المسبقة لمنشئي المحتوى", + // [Auto-translated] "Preset JSON:" + presetJson: "JSON الإعداد المسبق:", + // [Auto-translated] "Copy" + copy: "نسخ", + // [Auto-translated] "Download" + download: "تحميل", + // [Auto-translated] "Load" + load: "حمل", + // [Auto-translated] "Save & Exit" + saveExit: "حفظ وإنهاء", + // [Auto-translated] "Back" + back: "ظهر", + // [Auto-translated] "Reset to default" + resetToDefault: "إعادة التعيين إلى الوضع الافتراضي", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "تمت استعادة جميع الإعدادات إلى الوضع الافتراضي", + // [Auto-translated] "resored to default" + resoredToDefault: "تمت إعادة إعادته إلى الافتراضي", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "تمت استعادة العنصر إلى الوضع الافتراضي", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "تمت استعادة الفئة إلى الوضع الافتراضي", + // [Auto-translated] "Edit" + edit: "حرر", + // [Auto-translated] "Save & Exit" + completeText: "حفظ وإنهاء", + // [Auto-translated] "Back" + pagePrevText: "ظهر" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "المسبقه", + // [Auto-translated] "Creator Presets" + creatorPresets: "الإعدادات المسبقة لمنشئي المحتوى", + // [Auto-translated] "Save & Exit" + save: "حفظ وإنهاء", + // [Auto-translated] "File" + file: "ملف", + // [Auto-translated] "Import" + import: "استورد", + // [Auto-translated] "Export" + export: "تصدير", + // [Auto-translated] "Edit" + edit: "حرر", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "إعادة تعيين اللغات إلى الوضع الافتراضي", + // [Auto-translated] "Reset all changes" + resetAll: "إعادة تعيين جميع التغييرات", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "إعادة تعيين {0} إلى الإعدادات الافتراضية" + } +}; +const locale = getLocaleStrings("ar"); +locale.presets = arStrings; diff --git a/packages/survey-creator-core/src/presets/localization/bulgarian.ts b/packages/survey-creator-core/src/presets/localization/bulgarian.ts new file mode 100644 index 0000000000..f1c52ac213 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/bulgarian.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const bgStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Езици", + // [Auto-translated] "Languages" + navigationTitle: "Езици", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Изберете езика на потребителския интерфейс на създателя на проучване и насочване\nезици за конфигурирането на проучването.", + // [Auto-translated] "Creator UI language" + creatorUI: "Език на потребителския интерфейс на създателя", + // [Auto-translated] "Survey languages" + surveyLanguages: "Езици на проучването", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Въведете за търсене...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Превод на имената на езици на проучването на английски" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Конфигуриране на раздели", + // [Auto-translated] "Tabs" + navigationTitle: "Раздели", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Изберете разделите, които искате да покажете, пренаредете ги, променете заглавията им,\nи изберете раздела, който ще бъде активен по подразбиране.", + // [Auto-translated] "Visible tabs" + items: "Видими раздели", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Скрити раздели", + // [Auto-translated] "Default tab" + defaultTab: "Раздел по подразбиране", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Плъзнете разделите тук, за да ги покажете", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Плъзнете разделите тук, за да ги скриете", + // [Auto-translated] "Name" + name: "Име", + // [Auto-translated] "Title" + titleField: "Заглавие", + // [Auto-translated] "Icon name" + iconName: "Име на иконата" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Настройване на кутията с инструменти", + // [Auto-translated] "Toolbox" + navigationTitle: "Инструменти", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Изберете елементите на кутията с инструменти, които искате да покажете, групирайте ги в категории, \nПреименувайте ги и променяйте реда им, ако е необходимо.", + // [Auto-translated] "Toolbox" + toolbox: "Инструменти", + // [Auto-translated] "Categories" + categories: "Категории", + // [Auto-translated] "No categories" + noCategoriesText: "Няма категории", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Плъзнете елементите тук, за да ги покажете", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Плъзнете елементите тук, за да ги скриете", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Скрити елементи от кутия с инструменти", + // [Auto-translated] "Enable grouping" + enableGrouping: "Активиране на групиране", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Показване на заглавия на категории", + // [Auto-translated] "Name" + categoryName: "Име", + // [Auto-translated] "Title" + categoryTitle: "Заглавие", + // [Auto-translated] "Tooltip" + tooltip: "Пояснение", + // [Auto-translated] "Icon name" + iconName: "Име на иконата", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON обект, който да се приложи, когато потребителите изберат този елемент от кутията с инструменти", + // [Auto-translated] "Subcategories" + subitems: "Подкатегории", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Активирайте поделементи за този въпрос...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Преместване като поделемент към...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Добави в кутията с инструменти", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Изтриване на персонализиран елемент", + // [Auto-translated] "New Category" + addCustomCategory: "Нова категория", + // [Auto-translated] "New Item" + addCustomItem: "Нов артикул", + // [Auto-translated] "Add a new item" + addNewItem: "Добавяне на нов елемент", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Добавяне на нов поделемент", + // [Auto-translated] "There are no items" + noRowsText: "Няма артикули", + // [Auto-translated] "New item in" + newItem: "Нов артикул в" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Персонализиране на мрежата със свойства", + // [Auto-translated] "Property Grid" + navigationTitle: "Мрежа от имоти", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Изберете елемент, за да персонализирате настройките му, налични в мрежата със свойства.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Изберете елемент, за да персонализирате настройките му, налични в мрежата със свойства", + // [Auto-translated] "Property Grid" + propertyGrid: "Мрежа от имоти", + // [Auto-translated] "No categories" + noCategoriesText: "Няма категории", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Плъзнете свойствата тук, за да ги покажете", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Плъзнете свойствата тук, за да ги скриете", + // [Auto-translated] "Unsorted items" + hiddenItems: "Несортирани елементи", + // [Auto-translated] "Name" + categoryName: "Име", + // [Auto-translated] "Title" + categoryTitle: "Заглавие", + // [Auto-translated] "Icon name" + iconName: "Име на иконата", + // [Auto-translated] "Name" + name: "Име", + // [Auto-translated] "Title" + titleField: "Заглавие", + // [Auto-translated] "Helper Text" + descriptionField: "Помощен текст", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Добавяне на персонализирана категория" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Добавяне на нов елемент", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Добавяне на нов поделемент", + // [Auto-translated] "New item in" + newItem: "Нов артикул в", + // [Auto-translated] "New Category" + addCustomCategory: "Нова категория", + // [Auto-translated] "New category in" + newCategory: "Нова категория в", + // [Auto-translated] "Move to category..." + moveToCategory: "Преместване в категория...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Преместване в нова категория...", + // [Auto-translated] "Categories" + categoriesLabel: "Категории", + // [Auto-translated] "Move To..." + moveTo: "Преместете се към...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Премахване от {0}", + // [Auto-translated] "More" + more: "Още", + // [Auto-translated] "Restore" + restoreToDefault: "Възстановявам", + // [Auto-translated] "Edit" + edit: "Редактирам", + // [Auto-translated] "Expand" + expand: "Разширявам", + // [Auto-translated] "Collapse" + collapse: "Срив", + // [Auto-translated] "Remove" + remove: "Махам", + // [Auto-translated] "Add" + add: "Добавям", + // [Auto-translated] "Delete" + delete: "Изтривам" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Предварително зададени настройки за създатели", + // [Auto-translated] "Preset JSON:" + presetJson: "Предварително зададена JSON:", + // [Auto-translated] "Copy" + copy: "Копирам", + // [Auto-translated] "Download" + download: "Свалям", + // [Auto-translated] "Load" + load: "Товаря", + // [Auto-translated] "Save & Exit" + saveExit: "Запазване и излизане", + // [Auto-translated] "Back" + back: "Гръб", + // [Auto-translated] "Reset to default" + resetToDefault: "Нулиране по подразбиране", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Всички настройки са възстановени по подразбиране", + // [Auto-translated] "resored to default" + resoredToDefault: "Възстановено по подразбиране", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Елементът е възстановен по подразбиране", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Категорията е възстановена по подразбиране", + // [Auto-translated] "Edit" + edit: "Редактирам", + // [Auto-translated] "Save & Exit" + completeText: "Запазване и излизане", + // [Auto-translated] "Back" + pagePrevText: "Гръб" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Настройки", + // [Auto-translated] "Creator Presets" + creatorPresets: "Предварително зададени настройки за създатели", + // [Auto-translated] "Save & Exit" + save: "Запазване и излизане", + // [Auto-translated] "File" + file: "Файл", + // [Auto-translated] "Import" + import: "Внос", + // [Auto-translated] "Export" + export: "Износ", + // [Auto-translated] "Edit" + edit: "Редактирам", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Нулиране на езиците по подразбиране", + // [Auto-translated] "Reset all changes" + resetAll: "Нулиране на всички промени", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Нулиране на {0} по подразбиране" + } +}; +const locale = getLocaleStrings("bg"); +locale.presets = bgStrings; diff --git a/packages/survey-creator-core/src/presets/localization/burmese.ts b/packages/survey-creator-core/src/presets/localization/burmese.ts new file mode 100644 index 0000000000..b714b5b6b7 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/burmese.ts @@ -0,0 +1,211 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const mmStrings = { + languages: { + // [Auto-translated] "Languages" + title: "ဘာသာစကားများ", + // [Auto-translated] "Languages" + navigationTitle: "ဘာသာစကားများ", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "စစ်တမ်း ဖန်တီးသူ UI နှင့် ရည်မှန်းချက်၏ ဘာသာစကားကို ရွေးပါ\nစစ်တမ်းအတွက် ဘာသာစကားများကို စီစဉ်ဖွဲ့စည်းထားသည်။", + // [Auto-translated] "Creator UI language" + creatorUI: "ဖန်တီးသူ UI ဘာသာစကား", + // [Auto-translated] "Survey languages" + surveyLanguages: "စစ်တမ်း ဘာသာစကား များ", + // [Auto-translated] "Type to search..." + searchPlaceholder: "ရှာဖွေရန် ရိုက်ပါ...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "စစ်တမ်း ဘာသာစကား အမည် များ ကို အင်္ဂလိပ် သို့ ပြန်ဆို ပါ" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "စာမျက်နှာများကို စီစဉ်ဖန်တီးပါ", + // [Auto-translated] "Tabs" + navigationTitle: "စာမျက်နှာများ", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "ပြချင်တဲ့ စာမျက်နှာတွေကို ရွေးပါ၊ ပြန်စီစဉ်ပါ၊ ခေါင်းစဉ်ပြောင်း၊\nစံထားချက်အားဖြင့် လှုပ်ရှားမယ့် စာမျက်နှာကို ရွေးပါ။", + // [Auto-translated] "Visible tabs" + items: "မြင်နိုင်သော စာမျက်နှာခွဲများ", + // [Auto-translated] "Hidden tabs" + hiddenItems: "ဖုံးကွယ်ထားသော စာမျက်နှာများ", + // [Auto-translated] "Default tab" + defaultTab: "စံထားချက် စာမျက်နှာခွဲ", + // [Auto-translated] "Name" + name: "အမည်", + // [Auto-translated] "Title" + titleField: "ခေါင်းစဉ်", + // [Auto-translated] "Icon name" + iconName: "အိုင်ကွန်အမည်" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "ကိရိယာအိတ်ကို ပြင်ဆင်ပါ", + // [Auto-translated] "Toolbox" + navigationTitle: "ကိရိယာအိတ်", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "ပြချင်တဲ့ ကိရိယာအိတ် အချက်အလက်တွေကို ရွေးပြီး အမျိုးအစားတွေအဖြစ် စုလိုက်ပါ။ \nအမည်ပြောင်းပြီး လိုအပ်ပါက အစဉ်ကို ပြောင်းလဲပါ။", + // [Auto-translated] "Toolbox" + toolbox: "ကိရိယာအိတ်", + // [Auto-translated] "Categories" + categories: "အမျိုးအစား", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "ဝှက်ထားတဲ့ ကိရိယာအိတ် အချက်အလက်များ", + // [Auto-translated] "Enable grouping" + enableGrouping: "အုပ်စုလိုက်ခွင့်ပြုပါ", + // [Auto-translated] "Show category titles" + showCategoryTitles: "အမျိုးအစားခေါင်းစဉ်များကို ပြပါ", + // [Auto-translated] "Name" + categoryName: "အမည်", + // [Auto-translated] "Title" + categoryTitle: "ခေါင်းစဉ်", + // [Auto-translated] "Tooltip" + tooltip: "ကိရိယာအကြံ���ြုချက်", + // [Auto-translated] "Icon name" + iconName: "အိုင်ကွန်အမည်", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "သုံးစွဲသူတွေက ဒီကိရိယာအိတ် အချက်အလက်ကို ရွေးတဲ့အခါ အသုံးချဖို့ JSON အရာဝတ္ထု", + // [Auto-translated] "Subcategories" + subitems: "အမျိုးအစား ခွဲ များ", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "ဒီမေးခွန်းအတွက် အစိတ်အပိုင်းများကို ခွင့်ပြုပါ...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "အပိုင်းအပိုင်းတစ်ခုအဖြစ် ရွှေ့ပြောင်းပါ...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "ကိရိယာအိတ်ထဲသို့ ပေါင်းထည့်ပါ", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "စိတ်ကြိုက် အချက်အလက်ကို ပယ်ဖျက်ပါ", + // [Auto-translated] "New Category" + addCustomCategory: "အမျိုးအစား အသစ်", + // [Auto-translated] "New Item" + addCustomItem: "ပစ္စည်းအသစ်", + // [Auto-translated] "Add a new item" + addNewItem: "အချက်အလက်အသစ်တစ်ခု ပေါင်းထည့်ပါ", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "အချက်အလက်ငယ် အသစ်တခုကို ပေါင်းထည့်ပါ", + // [Auto-translated] "There are no items" + noRowsText: "ပစ္စည်း များ မ ရှိ ပါ", + // [Auto-translated] "New item in" + newItem: "အချက်အလက်အသစ်" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Property Grid ကို စိတ်ကြိုက် ပြုလုပ်ပါ", + // [Auto-translated] "Property Grid" + navigationTitle: "ပိုင်ဆိုင်ရာဂရစ်ကွက်", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Property Grid ထဲမှာ ရရှိနိုင်တဲ့ ၎င်းရဲ့ ဆက်တင်မှုများကို စိတ်ကြိုက် ရွေးချယ်ပါ။", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Property Grid ထဲမှာ ရရှိနိုင်တဲ့ ၎င်းရဲ့ ဆက်တင်မှုများကို စိတ်ကြိုက်ရွေးချယ်ဖို့ အစိတ်အပိုင်းတခုကို ရွေးပါ", + // [Auto-translated] "Property Grid" + propertyGrid: "ပိုင်ဆိုင်ရာဂရစ်ကွက်", + // [Auto-translated] "Unsorted items" + hiddenItems: "မစီထားတဲ့ အရာဝတ္ထု", + // [Auto-translated] "Name" + categoryName: "အမည်", + // [Auto-translated] "Title" + categoryTitle: "ခေါင်းစဉ်", + // [Auto-translated] "Icon name" + iconName: "အိုင်ကွန်အမည်", + // [Auto-translated] "Name" + name: "အမည်", + // [Auto-translated] "Title" + titleField: "ခေါင်းစဉ်", + // [Auto-translated] "Helper Text" + descriptionField: "ကူညီသူ စာသား", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "စိတ်ကြိုက် အမျိုးအစား ပေါင်းထည့်ပါ" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "အချက်အလက်အသစ်တစ်ခု ပေါင်းထည့်ပါ", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "အချက်အလက်ငယ် အသစ်တခုကို ပေါင်းထည့်ပါ", + // [Auto-translated] "New item in" + newItem: "အချက်အလက်အသစ်", + // [Auto-translated] "New Category" + addCustomCategory: "အမျိုးအစား အသစ်", + // [Auto-translated] "New category in" + newCategory: "အမျိုးအစားအသစ်", + // [Auto-translated] "Move to category..." + moveToCategory: "အမျိုးအစားသို့ ရွှေ့ပြောင်းပါ...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "အမျိုးအစားအသစ်သို့ ရွှေ့ပြောင်းပါ...", + // [Auto-translated] "Categories" + categoriesLabel: "အမျိုးအစား", + // [Auto-translated] "Move To..." + moveTo: "သို့ ရွှေ့ပြောင်းပါ...", + // [Auto-translated] "Remove from {0}" + removeFrom: "{0} မှ ဖယ်ရှား", + // [Auto-translated] "More" + more: "ပိုမို", + // [Auto-translated] "Restore" + restoreToDefault: "ပြန်လည်ထူထောင်ပါ", + // [Auto-translated] "Edit" + edit: "တည်းဖြတ်", + // [Auto-translated] "Expand" + expand: "ချဲ့ပါ", + // [Auto-translated] "Collapse" + collapse: "ပြိုလဲသွားပါ", + // [Auto-translated] "Remove" + remove: "ဖယ်ရှားပါ", + // [Auto-translated] "Add" + add: "ပေါင်းထည့်", + // [Auto-translated] "Delete" + delete: "ပယ်ဖျက်ပါ" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "ဖန်တီးသူ ကြိုတင်သတ်မှတ်ချက်များ", + // [Auto-translated] "Preset JSON:" + presetJson: "ကြိုတင်သတ်မှတ်ထားသော JSON -", + // [Auto-translated] "Copy" + copy: "မိတ္တူကူး", + // [Auto-translated] "Download" + download: "ကူးယူပါ", + // [Auto-translated] "Load" + load: "ဖွင့်ပါ", + // [Auto-translated] "Save & Exit" + saveExit: "သိမ်းဆည်း & ထွက်", + // [Auto-translated] "Back" + back: "နောက်ပြန်", + // [Auto-translated] "Reset to default" + resetToDefault: "စံထားချက်အတိုင်း ပြန်ချိန်ပါ", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "ဆက်တင်မှုအားလုံးကို စံထားချက်အတိုင်း ပြန်ထားပါ", + // [Auto-translated] "resored to default" + resoredToDefault: "စံထားချက်အတိုင်း ပြန်ပြောင်းထားသည်", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "အရာဝတ္ထုကို စံထားချက်အတိုင်း ပြန်ထားပါ", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "အမျိုးအစားကို စံထားချက်အတိုင်း ပြန်ထားပါ", + // [Auto-translated] "Edit" + edit: "တည်းဖြတ်", + // [Auto-translated] "Save & Exit" + completeText: "သိမ်းဆည်း & ထွက်", + // [Auto-translated] "Back" + pagePrevText: "နောက်ပြန်" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "ကြိုတင်သတ်မှတ်ချက်များ", + // [Auto-translated] "Creator Presets" + creatorPresets: "ဖန်တီးသူ ကြိုတင်သတ်မှတ်ချက်များ", + // [Auto-translated] "Save & Exit" + save: "သိမ်းဆည်း & ထွက်", + // [Auto-translated] "File" + file: "ဖိုင်", + // [Auto-translated] "Import" + import: "ထည့်သွင်း", + // [Auto-translated] "Export" + export: "ထုတ်ပို့", + // [Auto-translated] "Edit" + edit: "တည်းဖြတ်", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "ဘာသာစကားများကို စံထားချက်အတိုင်း ပြန်ချိန်ပါ", + // [Auto-translated] "Reset all changes" + resetAll: "အပြောင်းအလဲများ အားလုံးကို ပြန်ချိန်ပါ", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "{0} စံထားချက်အတိုင်း ပြန်ချိန်ပါ" + } +}; +const locale = getLocaleStrings("mm"); +locale.presets = mmStrings; diff --git a/packages/survey-creator-core/src/presets/localization/croatian.ts b/packages/survey-creator-core/src/presets/localization/croatian.ts new file mode 100644 index 0000000000..d36c6cac82 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/croatian.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const hrStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Jezici", + // [Auto-translated] "Languages" + navigationTitle: "Jezici", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Odaberite jezik korisničkog sučelja i cilja Survey Creator\njezika za anketu koja se konfigurira.", + // [Auto-translated] "Creator UI language" + creatorUI: "Jezik korisničkog sučelja autora", + // [Auto-translated] "Survey languages" + surveyLanguages: "Anketni jezici", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Upišite za pretraživanje...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Prevedi nazive jezika ankete na engleski" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Konfiguriranje kartica", + // [Auto-translated] "Tabs" + navigationTitle: "Tabulatori", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Odaberite kartice koje želite prikazati, promijenite njihov redoslijed, promijenite njihove naslove,\ni odaberite karticu koja će biti aktivna prema zadanim postavkama.", + // [Auto-translated] "Visible tabs" + items: "Vidljive kartice", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Skrivene kartice", + // [Auto-translated] "Default tab" + defaultTab: "Zadana kartica", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Povucite kartice ovdje da biste ih prikazali", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Povucite kartice ovdje da biste ih sakrili", + // [Auto-translated] "Name" + name: "Ime", + // [Auto-translated] "Title" + titleField: "Naslov", + // [Auto-translated] "Icon name" + iconName: "Naziv ikone" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Postavljanje Toolboxa", + // [Auto-translated] "Toolbox" + navigationTitle: "Alatni okvir", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Odaberite stavke okvira s alatima koje želite prikazati, grupirajte ih u kategorije, \nPreimenujte ih i promijenite njihov redoslijed ako je potrebno.", + // [Auto-translated] "Toolbox" + toolbox: "Alatni okvir", + // [Auto-translated] "Categories" + categories: "Kategorije", + // [Auto-translated] "No categories" + noCategoriesText: "Nema kategorija", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Povucite stavke ovdje da biste ih prikazali", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Povucite stavke ovdje da biste ih sakrili", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Skrivene stavke kutije s alatima", + // [Auto-translated] "Enable grouping" + enableGrouping: "Omogućivanje grupiranja", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Prikaži nazive kategorija", + // [Auto-translated] "Name" + categoryName: "Ime", + // [Auto-translated] "Title" + categoryTitle: "Naslov", + // [Auto-translated] "Tooltip" + tooltip: "Opis alata", + // [Auto-translated] "Icon name" + iconName: "Naziv ikone", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON objekt koji će se primijeniti kada korisnici odaberu ovu stavku alata", + // [Auto-translated] "Subcategories" + subitems: "Podkategorije", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Omogućite podstavke za ovo pitanje...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Premjesti kao podstavku u...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Dodaj u okvir s alatima", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Izbriši prilagođenu stavku", + // [Auto-translated] "New Category" + addCustomCategory: "Nova kategorija", + // [Auto-translated] "New Item" + addCustomItem: "Nova stavka", + // [Auto-translated] "Add a new item" + addNewItem: "Dodavanje nove stavke", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Dodavanje nove podstavke", + // [Auto-translated] "There are no items" + noRowsText: "Nema stavki", + // [Auto-translated] "New item in" + newItem: "Nova stavka u" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Prilagodba rešetke svojstava", + // [Auto-translated] "Property Grid" + navigationTitle: "Mreža nekretnina", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Odaberite element da biste prilagodili njegove postavke dostupne u rešetki svojstava.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Odaberite element da biste prilagodili njegove postavke dostupne u rešetki svojstava", + // [Auto-translated] "Property Grid" + propertyGrid: "Mreža nekretnina", + // [Auto-translated] "No categories" + noCategoriesText: "Nema kategorija", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Povucite svojstva ovdje da biste ih prikazali", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Povucite svojstva ovdje da biste ih sakrili", + // [Auto-translated] "Unsorted items" + hiddenItems: "Nerazvrstane stavke", + // [Auto-translated] "Name" + categoryName: "Ime", + // [Auto-translated] "Title" + categoryTitle: "Naslov", + // [Auto-translated] "Icon name" + iconName: "Naziv ikone", + // [Auto-translated] "Name" + name: "Ime", + // [Auto-translated] "Title" + titleField: "Naslov", + // [Auto-translated] "Helper Text" + descriptionField: "Pomoćni tekst", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Dodaj prilagođenu kategoriju" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Dodavanje nove stavke", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Dodavanje nove podstavke", + // [Auto-translated] "New item in" + newItem: "Nova stavka u", + // [Auto-translated] "New Category" + addCustomCategory: "Nova kategorija", + // [Auto-translated] "New category in" + newCategory: "Nova kategorija u", + // [Auto-translated] "Move to category..." + moveToCategory: "Premjesti u kategoriju...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Premjesti u novu kategoriju...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategorije", + // [Auto-translated] "Move To..." + moveTo: "Premjesti u...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Uklonite iz {0}", + // [Auto-translated] "More" + more: "Više", + // [Auto-translated] "Restore" + restoreToDefault: "Vratiti", + // [Auto-translated] "Edit" + edit: "Urediti", + // [Auto-translated] "Expand" + expand: "Proširiti", + // [Auto-translated] "Collapse" + collapse: "Kolaps", + // [Auto-translated] "Remove" + remove: "Odstraniti", + // [Auto-translated] "Add" + add: "Dodati", + // [Auto-translated] "Delete" + delete: "Izbrisati" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Unaprijed postavljene postavke kreatora", + // [Auto-translated] "Preset JSON:" + presetJson: "Unaprijed postavljeni JSON:", + // [Auto-translated] "Copy" + copy: "Kopija", + // [Auto-translated] "Download" + download: "Preuzimanje", + // [Auto-translated] "Load" + load: "Opterećenje", + // [Auto-translated] "Save & Exit" + saveExit: "Spremi i izađi", + // [Auto-translated] "Back" + back: "Leđa", + // [Auto-translated] "Reset to default" + resetToDefault: "Vraćanje na zadane postavke", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Sve postavke vraćene na zadane postavke", + // [Auto-translated] "resored to default" + resoredToDefault: "resored na default", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Stavka vraćena na zadane postavke", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategorija vraćena na zadane postavke", + // [Auto-translated] "Edit" + edit: "Urediti", + // [Auto-translated] "Save & Exit" + completeText: "Spremi i izađi", + // [Auto-translated] "Back" + pagePrevText: "Leđa" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Presets", + // [Auto-translated] "Creator Presets" + creatorPresets: "Unaprijed postavljene postavke kreatora", + // [Auto-translated] "Save & Exit" + save: "Spremi i izađi", + // [Auto-translated] "File" + file: "Datoteka", + // [Auto-translated] "Import" + import: "Uvoz", + // [Auto-translated] "Export" + export: "Izvoz", + // [Auto-translated] "Edit" + edit: "Urediti", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Vratite jezike na zadane", + // [Auto-translated] "Reset all changes" + resetAll: "Poništi sve promjene", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Vraćanje {0} na zadane postavke" + } +}; +const locale = getLocaleStrings("hr"); +locale.presets = hrStrings; diff --git a/packages/survey-creator-core/src/presets/localization/czech.ts b/packages/survey-creator-core/src/presets/localization/czech.ts new file mode 100644 index 0000000000..22c2b0ae84 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/czech.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const csStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Jazyky", + // [Auto-translated] "Languages" + navigationTitle: "Jazyky", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Vyberte jazyk uživatelského rozhraní a cíle aplikace Survey Creator\njazyky konfigurovaného průzkumu.", + // [Auto-translated] "Creator UI language" + creatorUI: "Jazyk uživatelského rozhraní tvůrce", + // [Auto-translated] "Survey languages" + surveyLanguages: "Jazyky průzkumu", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Zadejte pro vyhledávání...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Přeložte názvy zeměměřických jazyků do angličtiny" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Konfigurace karet", + // [Auto-translated] "Tabs" + navigationTitle: "Tabulátory", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Vyberte karty, které chcete zobrazit, změňte jejich pořadí, změňte jejich názvy,\na vyberte kartu, která bude ve výchozím nastavení aktivní.", + // [Auto-translated] "Visible tabs" + items: "Viditelné karty", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Skryté karty", + // [Auto-translated] "Default tab" + defaultTab: "Výchozí karta", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Přetažením karet sem je zobrazíte", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Přetažením karet sem je skryjete", + // [Auto-translated] "Name" + name: "Jméno", + // [Auto-translated] "Title" + titleField: "Titul", + // [Auto-translated] "Icon name" + iconName: "Název ikony" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Nastavení panelu nástrojů", + // [Auto-translated] "Toolbox" + navigationTitle: "Souprava nářadí", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Vyberte položky panelu nástrojů, které chcete zobrazit, seskupte je do kategorií, \nPřejmenujte je a v případě potřeby změňte jejich pořadí.", + // [Auto-translated] "Toolbox" + toolbox: "Souprava nářadí", + // [Auto-translated] "Categories" + categories: "Kategorie", + // [Auto-translated] "No categories" + noCategoriesText: "Žádné kategorie", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Přetažením položek sem je zobrazíte", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Přetažením položek sem je skryjete", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Skryté položky panelu nástrojů", + // [Auto-translated] "Enable grouping" + enableGrouping: "Povolit seskupení", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Zobrazit názvy kategorií", + // [Auto-translated] "Name" + categoryName: "Jméno", + // [Auto-translated] "Title" + categoryTitle: "Titul", + // [Auto-translated] "Tooltip" + tooltip: "Popisek nástroje", + // [Auto-translated] "Icon name" + iconName: "Název ikony", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Objekt JSON, který se použije, když uživatelé vyberou tuto položku panelu nástrojů", + // [Auto-translated] "Subcategories" + subitems: "Podkategorie", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Povolit podpoložky pro tuto otázku...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Přesunout jako podpoložku do...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Přidat do panelu nástrojů", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Odstranit vlastní položku", + // [Auto-translated] "New Category" + addCustomCategory: "Nová kategorie", + // [Auto-translated] "New Item" + addCustomItem: "Nová položka", + // [Auto-translated] "Add a new item" + addNewItem: "Přidat novou položku", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Přidání nové podpoložky", + // [Auto-translated] "There are no items" + noRowsText: "Nejsou zde žádné položky", + // [Auto-translated] "New item in" + newItem: "Nová položka v" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Přizpůsobení mřížky vlastností", + // [Auto-translated] "Property Grid" + navigationTitle: "Mřížka vlastností", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Vyberte prvek, jehož nastavení je k dispozici v mřížce vlastností.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Vyberte prvek, jehož nastavení je k dispozici v mřížce vlastností", + // [Auto-translated] "Property Grid" + propertyGrid: "Mřížka vlastností", + // [Auto-translated] "No categories" + noCategoriesText: "Žádné kategorie", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Přetažením vlastností sem je zobrazíte", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Přetažením vlastností je sem skryjete", + // [Auto-translated] "Unsorted items" + hiddenItems: "Neseřazené položky", + // [Auto-translated] "Name" + categoryName: "Jméno", + // [Auto-translated] "Title" + categoryTitle: "Titul", + // [Auto-translated] "Icon name" + iconName: "Název ikony", + // [Auto-translated] "Name" + name: "Jméno", + // [Auto-translated] "Title" + titleField: "Titul", + // [Auto-translated] "Helper Text" + descriptionField: "Pomocný text", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Přidat vlastní kategorii" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Přidat novou položku", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Přidání nové podpoložky", + // [Auto-translated] "New item in" + newItem: "Nová položka v", + // [Auto-translated] "New Category" + addCustomCategory: "Nová kategorie", + // [Auto-translated] "New category in" + newCategory: "Nová kategorie v", + // [Auto-translated] "Move to category..." + moveToCategory: "Přesunout do kategorie...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Přesunout do nové kategorie...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategorie", + // [Auto-translated] "Move To..." + moveTo: "Přesunout do...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Odebrat z {0}", + // [Auto-translated] "More" + more: "Více", + // [Auto-translated] "Restore" + restoreToDefault: "Obnovit", + // [Auto-translated] "Edit" + edit: "Upravit", + // [Auto-translated] "Expand" + expand: "Expandovat", + // [Auto-translated] "Collapse" + collapse: "Zhroucení", + // [Auto-translated] "Remove" + remove: "Odstranit", + // [Auto-translated] "Add" + add: "Přidat", + // [Auto-translated] "Delete" + delete: "Vymazat" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Předvolby pro tvůrce", + // [Auto-translated] "Preset JSON:" + presetJson: "Přednastavený kód JSON:", + // [Auto-translated] "Copy" + copy: "Kopírovat", + // [Auto-translated] "Download" + download: "Stáhnout", + // [Auto-translated] "Load" + load: "Náklad", + // [Auto-translated] "Save & Exit" + saveExit: "Uložit a ukončit", + // [Auto-translated] "Back" + back: "Hřbet", + // [Auto-translated] "Reset to default" + resetToDefault: "Obnovit výchozí nastavení", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Všechna nastavení byla obnovena na výchozí hodnoty", + // [Auto-translated] "resored to default" + resoredToDefault: "Změněno na výchozí", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Položka obnovena na výchozí nastavení", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategorie obnovena na výchozí", + // [Auto-translated] "Edit" + edit: "Upravit", + // [Auto-translated] "Save & Exit" + completeText: "Uložit a ukončit", + // [Auto-translated] "Back" + pagePrevText: "Hřbet" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Přednastavuje", + // [Auto-translated] "Creator Presets" + creatorPresets: "Předvolby pro tvůrce", + // [Auto-translated] "Save & Exit" + save: "Uložit a ukončit", + // [Auto-translated] "File" + file: "Soubor", + // [Auto-translated] "Import" + import: "Dovoz", + // [Auto-translated] "Export" + export: "Vývoz", + // [Auto-translated] "Edit" + edit: "Upravit", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Obnovení jazyků na výchozí", + // [Auto-translated] "Reset all changes" + resetAll: "Obnovit všechny změny", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Obnovení {0} na výchozí hodnoty" + } +}; +const locale = getLocaleStrings("cs"); +locale.presets = csStrings; diff --git a/packages/survey-creator-core/src/presets/localization/danish.ts b/packages/survey-creator-core/src/presets/localization/danish.ts new file mode 100644 index 0000000000..ce798050bf --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/danish.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const daStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Sprog", + // [Auto-translated] "Languages" + navigationTitle: "Sprog", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Vælg sproget for brugergrænsefladen og målet for Survey Creator\nsprog til den undersøgelse, der konfigureres.", + // [Auto-translated] "Creator UI language" + creatorUI: "Sprog i brugergrænsefladen for skabere", + // [Auto-translated] "Survey languages" + surveyLanguages: "Sprog til spørgeundersøgelser", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Skriv for at søge...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Oversæt navne på undersøgelsessprog til engelsk" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Konfigurere faner", + // [Auto-translated] "Tabs" + navigationTitle: "Faner", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Vælg de faner, du vil vise, omarranger dem, skift deres titler,\nog vælg den fane, der skal være aktiv som standard.", + // [Auto-translated] "Visible tabs" + items: "Synlige faner", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Skjulte faner", + // [Auto-translated] "Default tab" + defaultTab: "Fanen Standard", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Træk faner hertil for at vise dem", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Træk faner hertil for at skjule dem", + // [Auto-translated] "Name" + name: "Navn", + // [Auto-translated] "Title" + titleField: "Titel", + // [Auto-translated] "Icon name" + iconName: "Ikon navn" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Opsætning af værktøjskassen", + // [Auto-translated] "Toolbox" + navigationTitle: "Værktøjskasse", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Vælg de værktøjskasseelementer, du vil vise, gruppér dem i kategorier, \nomdøb dem, og skift deres rækkefølge, hvis det er nødvendigt.", + // [Auto-translated] "Toolbox" + toolbox: "Værktøjskasse", + // [Auto-translated] "Categories" + categories: "Kategorier", + // [Auto-translated] "No categories" + noCategoriesText: "Ingen kategorier", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Træk emner hertil for at vise dem", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Træk elementer hertil for at skjule dem", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Skjulte elementer i værktøjskassen", + // [Auto-translated] "Enable grouping" + enableGrouping: "Aktivere gruppering", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Vis kategorititler", + // [Auto-translated] "Name" + categoryName: "Navn", + // [Auto-translated] "Title" + categoryTitle: "Titel", + // [Auto-translated] "Tooltip" + tooltip: "Værktøjstip", + // [Auto-translated] "Icon name" + iconName: "Ikon navn", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON-objekt, der skal anvendes, når brugere vælger dette værktøjskasseelement", + // [Auto-translated] "Subcategories" + subitems: "Underkategorier", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Aktiver underelementer for dette spørgsmål...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Flyt som et underemne til...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Føj til værktøjskasse", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Slet brugerdefineret element", + // [Auto-translated] "New Category" + addCustomCategory: "Ny kategori", + // [Auto-translated] "New Item" + addCustomItem: "Ny vare", + // [Auto-translated] "Add a new item" + addNewItem: "Tilføj et nyt element", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Tilføj et nyt underelement", + // [Auto-translated] "There are no items" + noRowsText: "Der er ingen varer", + // [Auto-translated] "New item in" + newItem: "Ny vare i" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Tilpas egenskabsgitteret", + // [Auto-translated] "Property Grid" + navigationTitle: "Ejendom Grid", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Vælg et element for at tilpasse dets indstillinger, der er tilgængelige i egenskabsgitteret.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Vælg et element for at tilpasse de indstillinger, der er tilgængelige i egenskabsgitteret", + // [Auto-translated] "Property Grid" + propertyGrid: "Ejendom Grid", + // [Auto-translated] "No categories" + noCategoriesText: "Ingen kategorier", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Træk egenskaber hertil for at få dem vist", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Træk egenskaber hertil for at skjule dem", + // [Auto-translated] "Unsorted items" + hiddenItems: "Usorterede elementer", + // [Auto-translated] "Name" + categoryName: "Navn", + // [Auto-translated] "Title" + categoryTitle: "Titel", + // [Auto-translated] "Icon name" + iconName: "Ikon navn", + // [Auto-translated] "Name" + name: "Navn", + // [Auto-translated] "Title" + titleField: "Titel", + // [Auto-translated] "Helper Text" + descriptionField: "Hjælper tekst", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Tilføj brugerdefineret kategori" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Tilføj et nyt element", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Tilføj et nyt underelement", + // [Auto-translated] "New item in" + newItem: "Ny vare i", + // [Auto-translated] "New Category" + addCustomCategory: "Ny kategori", + // [Auto-translated] "New category in" + newCategory: "Ny kategori i", + // [Auto-translated] "Move to category..." + moveToCategory: "Flyt til kategori...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Flyt til ny kategori...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategorier", + // [Auto-translated] "Move To..." + moveTo: "Flyt til...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Fjern fra {0}", + // [Auto-translated] "More" + more: "Mere", + // [Auto-translated] "Restore" + restoreToDefault: "Genskabe", + // [Auto-translated] "Edit" + edit: "Redigere", + // [Auto-translated] "Expand" + expand: "Ekspandere", + // [Auto-translated] "Collapse" + collapse: "Sammenbrud", + // [Auto-translated] "Remove" + remove: "Fjerne", + // [Auto-translated] "Add" + add: "Tilføje", + // [Auto-translated] "Delete" + delete: "Slette" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Forudindstillinger for skabere", + // [Auto-translated] "Preset JSON:" + presetJson: "Forudindstillet JSON:", + // [Auto-translated] "Copy" + copy: "Eksemplar", + // [Auto-translated] "Download" + download: "Downloade", + // [Auto-translated] "Load" + load: "Læs", + // [Auto-translated] "Save & Exit" + saveExit: "Gem og afslut", + // [Auto-translated] "Back" + back: "Ryg", + // [Auto-translated] "Reset to default" + resetToDefault: "Nulstil til standard", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Alle indstillinger gendannet til standard", + // [Auto-translated] "resored to default" + resoredToDefault: "Omdannet til misligholdelse", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Element gendannet til standard", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategori gendannet til standard", + // [Auto-translated] "Edit" + edit: "Redigere", + // [Auto-translated] "Save & Exit" + completeText: "Gem og afslut", + // [Auto-translated] "Back" + pagePrevText: "Ryg" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Presets", + // [Auto-translated] "Creator Presets" + creatorPresets: "Forudindstillinger for skabere", + // [Auto-translated] "Save & Exit" + save: "Gem og afslut", + // [Auto-translated] "File" + file: "Fil", + // [Auto-translated] "Import" + import: "Import", + // [Auto-translated] "Export" + export: "Eksport", + // [Auto-translated] "Edit" + edit: "Redigere", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Nulstil sprog til standard", + // [Auto-translated] "Reset all changes" + resetAll: "Nulstil alle ændringer", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Nulstil {0} til standardindstillinger" + } +}; +const locale = getLocaleStrings("da"); +locale.presets = daStrings; diff --git a/packages/survey-creator-core/src/presets/localization/dutch.ts b/packages/survey-creator-core/src/presets/localization/dutch.ts new file mode 100644 index 0000000000..e3a59cd6cf --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/dutch.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const nlStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Talen", + // [Auto-translated] "Languages" + navigationTitle: "Talen", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Selecteer de taal van de gebruikersinterface en het doel van Survey Creator\ntalen voor de enquête die wordt geconfigureerd.", + // [Auto-translated] "Creator UI language" + creatorUI: "UI-taal voor makers", + // [Auto-translated] "Survey languages" + surveyLanguages: "Talen voor enquêtes", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Typ om te zoeken...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Taalnamen van enquêtes vertalen naar het Engels" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Tabbladen configureren", + // [Auto-translated] "Tabs" + navigationTitle: "Tabs", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Selecteer de tabbladen die u wilt weergeven, herschik ze, wijzig hun titels,\nen kies het tabblad dat standaard actief zal zijn.", + // [Auto-translated] "Visible tabs" + items: "Zichtbare tabbladen", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Verborgen tabbladen", + // [Auto-translated] "Default tab" + defaultTab: "Tabblad Standaard", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Sleep tabbladen hierheen om ze weer te geven", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Sleep tabbladen hierheen om ze te verbergen", + // [Auto-translated] "Name" + name: "Naam", + // [Auto-translated] "Title" + titleField: "Titel", + // [Auto-translated] "Icon name" + iconName: "Naam pictogram" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "De toolbox instellen", + // [Auto-translated] "Toolbox" + navigationTitle: "Gereedschapskist", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Selecteer de items in de gereedschapskist die u wilt weergeven, groepeer ze in categorieën, \nHernoem ze en wijzig hun volgorde indien nodig.", + // [Auto-translated] "Toolbox" + toolbox: "Gereedschapskist", + // [Auto-translated] "Categories" + categories: "Categorieën", + // [Auto-translated] "No categories" + noCategoriesText: "Geen categorieën", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Sleep items hierheen om ze weer te geven", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Sleep items hierheen om ze te verbergen", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Verborgen gereedschapskistitems", + // [Auto-translated] "Enable grouping" + enableGrouping: "Groeperen inschakelen", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Titels van categorieën weergeven", + // [Auto-translated] "Name" + categoryName: "Naam", + // [Auto-translated] "Title" + categoryTitle: "Titel", + // [Auto-translated] "Tooltip" + tooltip: "Knopinfo", + // [Auto-translated] "Icon name" + iconName: "Naam pictogram", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON-object dat moet worden toegepast wanneer gebruikers dit toolbox-item selecteren", + // [Auto-translated] "Subcategories" + subitems: "Subcategorieën", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Schakel subitems in voor deze vraag...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Verplaats als subitem naar...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Toevoegen aan Toolbox", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Aangepast item verwijderen", + // [Auto-translated] "New Category" + addCustomCategory: "Nieuwe categorie", + // [Auto-translated] "New Item" + addCustomItem: "Nieuw item", + // [Auto-translated] "Add a new item" + addNewItem: "Een nieuw item toevoegen", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Een nieuw subitem toevoegen", + // [Auto-translated] "There are no items" + noRowsText: "Er zijn geen artikelen", + // [Auto-translated] "New item in" + newItem: "Nieuw item in" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Het eigenschappenraster aanpassen", + // [Auto-translated] "Property Grid" + navigationTitle: "Eigendom raster", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Selecteer een element om de instellingen aan te passen die beschikbaar zijn in het eigenschappenraster.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Selecteer een element om de instellingen aan te passen die beschikbaar zijn in het eigenschappenraster", + // [Auto-translated] "Property Grid" + propertyGrid: "Eigendom raster", + // [Auto-translated] "No categories" + noCategoriesText: "Geen categorieën", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Sleep eigenschappen hierheen om ze weer te geven", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Sleep eigenschappen hierheen om ze te verbergen", + // [Auto-translated] "Unsorted items" + hiddenItems: "Ongesorteerde artikelen", + // [Auto-translated] "Name" + categoryName: "Naam", + // [Auto-translated] "Title" + categoryTitle: "Titel", + // [Auto-translated] "Icon name" + iconName: "Naam pictogram", + // [Auto-translated] "Name" + name: "Naam", + // [Auto-translated] "Title" + titleField: "Titel", + // [Auto-translated] "Helper Text" + descriptionField: "Helper Tekst", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Aangepaste categorie toevoegen" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Een nieuw item toevoegen", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Een nieuw subitem toevoegen", + // [Auto-translated] "New item in" + newItem: "Nieuw item in", + // [Auto-translated] "New Category" + addCustomCategory: "Nieuwe categorie", + // [Auto-translated] "New category in" + newCategory: "Nieuwe categorie in", + // [Auto-translated] "Move to category..." + moveToCategory: "Verplaatsen naar categorie...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Verplaatsen naar nieuwe categorie...", + // [Auto-translated] "Categories" + categoriesLabel: "Categorieën", + // [Auto-translated] "Move To..." + moveTo: "Verplaatsen naar...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Verwijderen uit {0}", + // [Auto-translated] "More" + more: "Meer", + // [Auto-translated] "Restore" + restoreToDefault: "Herstellen", + // [Auto-translated] "Edit" + edit: "Bewerken", + // [Auto-translated] "Expand" + expand: "Uitbreiden", + // [Auto-translated] "Collapse" + collapse: "Instorting", + // [Auto-translated] "Remove" + remove: "Verwijderen", + // [Auto-translated] "Add" + add: "Toevoegen", + // [Auto-translated] "Delete" + delete: "Verwijderen" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Voorinstellingen voor makers", + // [Auto-translated] "Preset JSON:" + presetJson: "Vooraf ingestelde JSON:", + // [Auto-translated] "Copy" + copy: "Kopiëren", + // [Auto-translated] "Download" + download: "Downloaden", + // [Auto-translated] "Load" + load: "Lading", + // [Auto-translated] "Save & Exit" + saveExit: "Opslaan en afsluiten", + // [Auto-translated] "Back" + back: "Terug", + // [Auto-translated] "Reset to default" + resetToDefault: "Reset naar standaard", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Alle instellingen hersteld naar de standaardinstellingen", + // [Auto-translated] "resored to default" + resoredToDefault: "teruggezet naar standaard", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Item hersteld naar standaard", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Categorie hersteld naar standaard", + // [Auto-translated] "Edit" + edit: "Bewerken", + // [Auto-translated] "Save & Exit" + completeText: "Opslaan en afsluiten", + // [Auto-translated] "Back" + pagePrevText: "Terug" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Voorinstellingen", + // [Auto-translated] "Creator Presets" + creatorPresets: "Voorinstellingen voor makers", + // [Auto-translated] "Save & Exit" + save: "Opslaan en afsluiten", + // [Auto-translated] "File" + file: "Bestand", + // [Auto-translated] "Import" + import: "Importeren", + // [Auto-translated] "Export" + export: "Exporteren", + // [Auto-translated] "Edit" + edit: "Bewerken", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Talen terugzetten naar de standaardinstelling", + // [Auto-translated] "Reset all changes" + resetAll: "Alle wijzigingen opnieuw instellen", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "De standaardinstellingen van {0} terugzetten" + } +}; +const locale = getLocaleStrings("nl"); +locale.presets = nlStrings; diff --git a/packages/survey-creator-core/src/presets/localization/english.ts b/packages/survey-creator-core/src/presets/localization/english.ts new file mode 100644 index 0000000000..32d6b1f696 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/english.ts @@ -0,0 +1,128 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const enStrings = { + languages: { + title: "Languages", + navigationTitle: "Languages", + description: "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured.", + creatorUI: "Creator UI language", + surveyLanguages: "Survey languages", + searchPlaceholder: "Type to search...", + translateToEnglish: "Translate Survey language names to English" + }, + tabs: { + title: "Configure tabs", + navigationTitle: "Tabs", + description: "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default.", + items: "Visible tabs", + hiddenItems: "Hidden tabs", + defaultTab: "Default tab", + noItemsText: "Drag tabs here to show them", + noHiddenItemsText: "Drag tabs here to hide them", + name: "Name", + titleField: "Title", + iconName: "Icon name" + }, + toolbox: { + title: "Set up the Toolbox", + navigationTitle: "Toolbox", + description: "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required.", + toolbox: "Toolbox", + categories: "Categories", + noCategoriesText: "No categories", + noItemsText: "Drag items here to show them", + noHiddenItemsText: "Drag items here to hide them", + hiddenItems: "Hidden toolbox items", + enableGrouping: "Enable grouping", + showCategoryTitles: "Show category titles", + categoryName: "Name", + categoryTitle: "Title", + tooltip: "Tooltip", + iconName: "Icon name", + jsonObject: "JSON object to apply when users select this toolbox item", + subitems: "Subitems", + enableSubitems: "Enable subitems for this question", + moveAsSubitem: "Move as a subitem to...", + addToToolbox: "Add to Toolbox", + deleteCustomItem: "Delete Custom Item", + addCustomCategory: "New Category", + addCustomItem: "New Item", + addNewItem: "Add a new item", + addNewSubitem: "Add a new subitem", + noRowsText: "There are no items", + newItem: "New item in", + }, + propertyGrid: { + title: "Customize the Property Grid", + navigationTitle: "Property Grid", + description: "Select an element to customize its settings available in the Property Grid.", + selectElement: "Select an element to customize its settings available in the Property Grid", + propertyGrid: "Property Grid", + noCategoriesText: "No categories", + noItemsText: "Drag properties here to show them", + noHiddenItemsText: "Drag properties here to hide them", + hiddenItems: "Hidden properties", + categoryName: "Name", + categoryTitle: "Title", + iconName: "Icon name", + name: "Name", + titleField: "Title", + descriptionField: "Helper Text", + addCustomCategory: "Add Custom Category" + }, + options: { + title: "Survey Creator Options", + navigationTitle: "Options", + description: "Set options", + }, + items: { + addNewItem: "Add a new item", + addNewSubitem: "Add a new subitem", + newItem: "New item in", + addCustomCategory: "New Category", + newCategory: "New category in", + moveToCategory: "Move to category...", + moveToNewCategory: "Move to new category", + categoriesLabel: "Categories", + moveTo: "Move To...", + removeFrom: "Remove from {0}", + more: "More", + restoreToDefault: "Restore", + edit: "Edit", + expand: "Expand", + collapse: "Collapse", + remove: "Remove", + add: "Add", + delete: "Delete" + }, + editor: { + title: "Creator Presets", + presetJson: "Preset JSON:", + copy: "Copy", + download: "Download", + load: "Load", + saveExit: "Save & Exit", + back: "Back", + resetToDefault: "Reset to default", + resetToDefaults: "All settings restored to default", + resoredToDefault: "resored to default", + itemRestoredToDefault: "Item restored to default", + categoryRestoredToDefault: "Category restored to default", + edit: "Edit", + completeText: "Save & Exit", + pagePrevText: "Back" + }, + plugin: { + presetsTab: "Presets", + creatorPresets: "Creator Presets", + save: "Save & Exit", + file: "File", + import: "Import", + export: "Export", + edit: "Edit", + resetLanguages: "Reset Languages to default", + resetAll: "Reset all changes", + resetToDefaults: "Reset {0} to defaults" + } +}; +const locale = getLocaleStrings("en"); +locale.presets = enStrings; \ No newline at end of file diff --git a/packages/survey-creator-core/src/presets/localization/finnish.ts b/packages/survey-creator-core/src/presets/localization/finnish.ts new file mode 100644 index 0000000000..695256d561 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/finnish.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const fiStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Kielet", + // [Auto-translated] "Languages" + navigationTitle: "Kielet", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Valitse kyselyn luojan käyttöliittymän ja kohteen kieli\nmääritettävän kyselyn kielet.", + // [Auto-translated] "Creator UI language" + creatorUI: "Sisällöntuottajan käyttöliittymän kieli", + // [Auto-translated] "Survey languages" + surveyLanguages: "Kyselyn kielet", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Kirjoita etsiäksesi...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Käännä kyselyn kielten nimet englanniksi" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Välilehtien määrittäminen", + // [Auto-translated] "Tabs" + navigationTitle: "Välilehdet", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Valitse välilehdet, jotka haluat näyttää, järjestä ne uudelleen, muuta niiden otsikoita,\nja valitse välilehti, joka on oletuksena aktiivinen.", + // [Auto-translated] "Visible tabs" + items: "Näkyvät välilehdet", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Piilotetut välilehdet", + // [Auto-translated] "Default tab" + defaultTab: "Oletus-välilehti", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Näytä välilehdet vetämällä ne tänne", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Piilota välilehdet vetämällä ne tänne", + // [Auto-translated] "Name" + name: "Nimi", + // [Auto-translated] "Title" + titleField: "Nimike", + // [Auto-translated] "Icon name" + iconName: "Kuvakkeen nimi" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Työkalupakin käyttöönotto", + // [Auto-translated] "Toolbox" + navigationTitle: "Työkalupakki", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Valitse näytettävät työkalupakin kohteet, ryhmittele ne luokkiin, \nNimeä ne uudelleen ja muuta niiden järjestystä tarvittaessa.", + // [Auto-translated] "Toolbox" + toolbox: "Työkalupakki", + // [Auto-translated] "Categories" + categories: "Luokat", + // [Auto-translated] "No categories" + noCategoriesText: "Ei luokkia", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Näytä kohteet vetämällä ne tänne", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Piilota kohteet vetämällä ne tänne", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Piilotetut työkalupakin kohteet", + // [Auto-translated] "Enable grouping" + enableGrouping: "Ota ryhmittely käyttöön", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Näytä kategorioiden otsikot", + // [Auto-translated] "Name" + categoryName: "Nimi", + // [Auto-translated] "Title" + categoryTitle: "Nimike", + // [Auto-translated] "Tooltip" + tooltip: "Työkaluvihje", + // [Auto-translated] "Icon name" + iconName: "Kuvakkeen nimi", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON-objekti, jota käytetään, kun käyttäjät valitsevat tämän työkalupalkin kohteen", + // [Auto-translated] "Subcategories" + subitems: "Alaluokat", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Ota tämän kysymyksen alakohdat käyttöön...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Siirrä alikohteena...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Lisää työkalupakkiin", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Poista mukautettu kohde", + // [Auto-translated] "New Category" + addCustomCategory: "Uusi luokka", + // [Auto-translated] "New Item" + addCustomItem: "Uusi tuote", + // [Auto-translated] "Add a new item" + addNewItem: "Lisää uusi kohde", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Lisää uusi alakohde", + // [Auto-translated] "There are no items" + noRowsText: "Ei ole kohteita", + // [Auto-translated] "New item in" + newItem: "Uusi kohde" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Mukauta ominaisuusruudukkoa", + // [Auto-translated] "Property Grid" + navigationTitle: "Ominaisuuden ruudukko", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Valitse elementti, jos haluat mukauttaa sen asetuksia, jotka ovat käytettävissä ominaisuusruudukossa.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Valitse elementti, jos haluat mukauttaa sen asetuksia, jotka ovat käytettävissä ominaisuusruudukossa", + // [Auto-translated] "Property Grid" + propertyGrid: "Ominaisuuden ruudukko", + // [Auto-translated] "No categories" + noCategoriesText: "Ei luokkia", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Näytä ominaisuudet vetämällä ne tähän", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Piilota ominaisuudet vetämällä ne tähän", + // [Auto-translated] "Unsorted items" + hiddenItems: "Lajittelemattomat kohteet", + // [Auto-translated] "Name" + categoryName: "Nimi", + // [Auto-translated] "Title" + categoryTitle: "Nimike", + // [Auto-translated] "Icon name" + iconName: "Kuvakkeen nimi", + // [Auto-translated] "Name" + name: "Nimi", + // [Auto-translated] "Title" + titleField: "Nimike", + // [Auto-translated] "Helper Text" + descriptionField: "Aputeksti", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Lisää mukautettu luokka" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Lisää uusi kohde", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Lisää uusi alakohde", + // [Auto-translated] "New item in" + newItem: "Uusi kohde", + // [Auto-translated] "New Category" + addCustomCategory: "Uusi luokka", + // [Auto-translated] "New category in" + newCategory: "Uusi luokka", + // [Auto-translated] "Move to category..." + moveToCategory: "Siirrä luokkaan...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Siirrä uuteen luokkaan...", + // [Auto-translated] "Categories" + categoriesLabel: "Luokat", + // [Auto-translated] "Move To..." + moveTo: "Siirrä...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Poista {0}", + // [Auto-translated] "More" + more: "Enemmän", + // [Auto-translated] "Restore" + restoreToDefault: "Palauttaa", + // [Auto-translated] "Edit" + edit: "Muokata", + // [Auto-translated] "Expand" + expand: "Laajentaa", + // [Auto-translated] "Collapse" + collapse: "Romahdus", + // [Auto-translated] "Remove" + remove: "Poistaa", + // [Auto-translated] "Add" + add: "Lisätä", + // [Auto-translated] "Delete" + delete: "Poistaa" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Luojan esiasetukset", + // [Auto-translated] "Preset JSON:" + presetJson: "Esiasetettu JSON:", + // [Auto-translated] "Copy" + copy: "Kopioida", + // [Auto-translated] "Download" + download: "Ladata", + // [Auto-translated] "Load" + load: "Kuorma", + // [Auto-translated] "Save & Exit" + saveExit: "Tallenna ja poistu", + // [Auto-translated] "Back" + back: "Selkä", + // [Auto-translated] "Reset to default" + resetToDefault: "Palauta oletusasetukset", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Kaikki asetukset palautettu oletusasetuksiin", + // [Auto-translated] "resored to default" + resoredToDefault: "palautettu oletusarvoon", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Kohde palautettu oletusarvoon", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Luokka palautettu oletusarvoon", + // [Auto-translated] "Edit" + edit: "Muokata", + // [Auto-translated] "Save & Exit" + completeText: "Tallenna ja poistu", + // [Auto-translated] "Back" + pagePrevText: "Selkä" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Esiasetukset", + // [Auto-translated] "Creator Presets" + creatorPresets: "Luojan esiasetukset", + // [Auto-translated] "Save & Exit" + save: "Tallenna ja poistu", + // [Auto-translated] "File" + file: "Tiedosto", + // [Auto-translated] "Import" + import: "Tuoda", + // [Auto-translated] "Export" + export: "Vienti", + // [Auto-translated] "Edit" + edit: "Muokata", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Palauta kielet oletusasetuksiin", + // [Auto-translated] "Reset all changes" + resetAll: "Palauta kaikki muutokset", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Palauta {0} oletusasetuksiin" + } +}; +const locale = getLocaleStrings("fi"); +locale.presets = fiStrings; diff --git a/packages/survey-creator-core/src/presets/localization/french.ts b/packages/survey-creator-core/src/presets/localization/french.ts new file mode 100644 index 0000000000..1a2c39944d --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/french.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const frStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Traduction", + // [Auto-translated] "Languages" + navigationTitle: "Traduction", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Sélectionnez la langue de l’interface utilisateur du créateur d’enquête et ciblez-la.\nlangues de l’enquête en cours de configuration.", + // [Auto-translated] "Creator UI language" + creatorUI: "Langue de l’interface utilisateur du créateur", + // [Auto-translated] "Survey languages" + surveyLanguages: "Langues de l’enquête", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Tapez pour rechercher...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Traduire les noms de langues de l’enquête en anglais" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Configurer les onglets", + // [Auto-translated] "Tabs" + navigationTitle: "Onglets", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Sélectionnez les onglets que vous souhaitez afficher, réorganisez-les, modifiez leurs titres,\net choisissez l’onglet qui sera actif par défaut.", + // [Auto-translated] "Visible tabs" + items: "Onglets visibles", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Onglets cachés", + // [Auto-translated] "Default tab" + defaultTab: "Onglet par défaut", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Faites glisser les onglets ici pour les afficher", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Faites glisser les onglets ici pour les masquer", + // [Auto-translated] "Name" + name: "Nom", + // [Auto-translated] "Title" + titleField: "Titre", + // [Auto-translated] "Icon name" + iconName: "Nom de l’icône" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Configurer la boîte à outils", + // [Auto-translated] "Toolbox" + navigationTitle: "Toolbox", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Sélectionnez les éléments de la boîte à outils que vous souhaitez afficher, regroupez-les en catégories, \nRenommez-les et modifiez leur ordre si nécessaire.", + // [Auto-translated] "Toolbox" + toolbox: "Toolbox", + // [Auto-translated] "Categories" + categories: "Catégories", + // [Auto-translated] "No categories" + noCategoriesText: "Aucune catégorie", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Faites glisser les éléments ici pour les afficher", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Faites glisser des éléments ici pour les masquer", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Éléments de boîte à outils cachés", + // [Auto-translated] "Enable grouping" + enableGrouping: "Activer le regroupement", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Afficher les titres des catégories", + // [Auto-translated] "Name" + categoryName: "Nom", + // [Auto-translated] "Title" + categoryTitle: "Titre", + // [Auto-translated] "Tooltip" + tooltip: "Infobulle", + // [Auto-translated] "Icon name" + iconName: "Nom de l’icône", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Objet JSON à appliquer lorsque les utilisateurs sélectionnent cet élément de la boîte à outils", + // [Auto-translated] "Subcategories" + subitems: "Sous-catégories", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Activez les sous-éléments pour cette question...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Déplacer en tant que sous-élément vers...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Ajouter à la boîte à outils", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Supprimer un élément personnalisé", + // [Auto-translated] "New Category" + addCustomCategory: "Nouvelle catégorie", + // [Auto-translated] "New Item" + addCustomItem: "Nouvel article", + // [Auto-translated] "Add a new item" + addNewItem: "Ajouter un nouvel article", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Ajouter un nouveau sous-article", + // [Auto-translated] "There are no items" + noRowsText: "Il n’y a pas d’articles", + // [Auto-translated] "New item in" + newItem: "Nouvel article en" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Personnaliser la grille de propriétés", + // [Auto-translated] "Property Grid" + navigationTitle: "Grille des propriétés", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Sélectionnez un élément pour personnaliser ses paramètres disponibles dans la grille de propriétés.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Sélectionnez un élément pour personnaliser ses paramètres disponibles dans la grille de propriétés", + // [Auto-translated] "Property Grid" + propertyGrid: "Grille des propriétés", + // [Auto-translated] "No categories" + noCategoriesText: "Aucune catégorie", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Faites glisser les propriétés ici pour les afficher", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Faites glisser les propriétés ici pour les masquer", + // [Auto-translated] "Unsorted items" + hiddenItems: "Articles non triés", + // [Auto-translated] "Name" + categoryName: "Nom", + // [Auto-translated] "Title" + categoryTitle: "Titre", + // [Auto-translated] "Icon name" + iconName: "Nom de l’icône", + // [Auto-translated] "Name" + name: "Nom", + // [Auto-translated] "Title" + titleField: "Titre", + // [Auto-translated] "Helper Text" + descriptionField: "Texte d’aide", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Ajouter une catégorie personnalisée" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Ajouter un nouvel article", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Ajouter un nouveau sous-article", + // [Auto-translated] "New item in" + newItem: "Nouvel article en", + // [Auto-translated] "New Category" + addCustomCategory: "Nouvelle catégorie", + // [Auto-translated] "New category in" + newCategory: "Nouvelle catégorie en", + // [Auto-translated] "Move to category..." + moveToCategory: "Déplacer vers la catégorie...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Passer à une nouvelle catégorie...", + // [Auto-translated] "Categories" + categoriesLabel: "Catégories", + // [Auto-translated] "Move To..." + moveTo: "Passer à...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Retirer de {0}", + // [Auto-translated] "More" + more: "Plus", + // [Auto-translated] "Restore" + restoreToDefault: "Restaurer", + // [Auto-translated] "Edit" + edit: "Éditer", + // [Auto-translated] "Expand" + expand: "Développer", + // [Auto-translated] "Collapse" + collapse: "Effondrement", + // [Auto-translated] "Remove" + remove: "Enlever", + // [Auto-translated] "Add" + add: "Ajouter", + // [Auto-translated] "Delete" + delete: "Supprimer" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Préréglages du créateur", + // [Auto-translated] "Preset JSON:" + presetJson: "JSON prédéfini :", + // [Auto-translated] "Copy" + copy: "Copier", + // [Auto-translated] "Download" + download: "Télécharger", + // [Auto-translated] "Load" + load: "Charger", + // [Auto-translated] "Save & Exit" + saveExit: "Enregistrer et quitter", + // [Auto-translated] "Back" + back: "Précédent", + // [Auto-translated] "Reset to default" + resetToDefault: "Réinitialiser les paramètres par défaut", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Tous les paramètres sont rétablis par défaut", + // [Auto-translated] "resored to default" + resoredToDefault: "résorbé à défaut", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Élément restauré par défaut", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Catégorie restaurée par défaut", + // [Auto-translated] "Edit" + edit: "Éditer", + // [Auto-translated] "Save & Exit" + completeText: "Enregistrer et quitter", + // [Auto-translated] "Back" + pagePrevText: "Précédent" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Presets", + // [Auto-translated] "Creator Presets" + creatorPresets: "Préréglages du créateur", + // [Auto-translated] "Save & Exit" + save: "Enregistrer et quitter", + // [Auto-translated] "File" + file: "Lime", + // [Auto-translated] "Import" + import: "Importation", + // [Auto-translated] "Export" + export: "Exportation", + // [Auto-translated] "Edit" + edit: "Éditer", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Réinitialiser les langues par défaut", + // [Auto-translated] "Reset all changes" + resetAll: "Réinitialiser toutes les modifications", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Rétablir les paramètres par défaut des {0}" + } +}; +const locale = getLocaleStrings("fr"); +locale.presets = frStrings; diff --git a/packages/survey-creator-core/src/presets/localization/german.ts b/packages/survey-creator-core/src/presets/localization/german.ts new file mode 100644 index 0000000000..3cdb5ffa47 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/german.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const deStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Sprachen", + // [Auto-translated] "Languages" + navigationTitle: "Sprachen", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Wählen Sie die Sprache der Survey Creator-Benutzeroberfläche und das Ziel aus\nSprachen für die Umfrage, die konfiguriert wird.", + // [Auto-translated] "Creator UI language" + creatorUI: "Sprache der Creator-Benutzeroberfläche", + // [Auto-translated] "Survey languages" + surveyLanguages: "Sprachen der Umfrage", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Geben Sie ein, um zu suchen...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Übersetzen Sie die Namen der Umfragesprachen ins Englische" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Konfigurieren von Registerkarten", + // [Auto-translated] "Tabs" + navigationTitle: "Tabulatoren", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Wählen Sie die Registerkarten aus, die Sie anzeigen möchten, ordnen Sie sie neu an, ändern Sie ihre Titel,\nund wählen Sie die Registerkarte aus, die standardmäßig aktiv sein soll.", + // [Auto-translated] "Visible tabs" + items: "Sichtbare Registerkarten", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Versteckte Registerkarten", + // [Auto-translated] "Default tab" + defaultTab: "Registerkarte \"Standard\"", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Ziehen Sie Registerkarten hierher, um sie anzuzeigen", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Ziehen Sie Registerkarten hierher, um sie auszublenden", + // [Auto-translated] "Name" + name: "Name", + // [Auto-translated] "Title" + titleField: "Titel", + // [Auto-translated] "Icon name" + iconName: "Name des Symbols" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Einrichten der Toolbox", + // [Auto-translated] "Toolbox" + navigationTitle: "Werkzeugkasten", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Wählen Sie die Toolboxelemente aus, die Sie anzeigen möchten, und gruppieren Sie sie in Kategorien. \nBenennen Sie sie um und ändern Sie bei Bedarf ihre Reihenfolge.", + // [Auto-translated] "Toolbox" + toolbox: "Werkzeugkasten", + // [Auto-translated] "Categories" + categories: "Kategorien", + // [Auto-translated] "No categories" + noCategoriesText: "Keine Kategorien", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Ziehen Sie Elemente hierher, um sie anzuzeigen", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Ziehen Sie Elemente hierher, um sie auszublenden", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Versteckte Elemente der Toolbox", + // [Auto-translated] "Enable grouping" + enableGrouping: "Gruppierung aktivieren", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Kategorietitel anzeigen", + // [Auto-translated] "Name" + categoryName: "Name", + // [Auto-translated] "Title" + categoryTitle: "Titel", + // [Auto-translated] "Tooltip" + tooltip: "Quickinfo", + // [Auto-translated] "Icon name" + iconName: "Name des Symbols", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON-Objekt, das angewendet werden soll, wenn Benutzer dieses Toolboxelement auswählen", + // [Auto-translated] "Subcategories" + subitems: "Unterkategorie", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Aktivieren Sie Unterpunkte für diese Frage...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Als Unterelement verschieben nach...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Zur Toolbox hinzufügen", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Benutzerdefiniertes Element löschen", + // [Auto-translated] "New Category" + addCustomCategory: "Neue Kategorie", + // [Auto-translated] "New Item" + addCustomItem: "Neuer Artikel", + // [Auto-translated] "Add a new item" + addNewItem: "Hinzufügen eines neuen Elements", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Hinzufügen eines neuen Unterelements", + // [Auto-translated] "There are no items" + noRowsText: "Es gibt keine Artikel", + // [Auto-translated] "New item in" + newItem: "Neuer Artikel in" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Anpassen des Eigenschaftenrasters", + // [Auto-translated] "Property Grid" + navigationTitle: "Eigenschafts-Raster", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Wählen Sie ein Element aus, um die Einstellungen anzupassen, die im Eigenschaftenraster verfügbar sind.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Wählen Sie ein Element aus, um seine Einstellungen anzupassen, die im Eigenschaftenraster verfügbar sind", + // [Auto-translated] "Property Grid" + propertyGrid: "Eigenschafts-Raster", + // [Auto-translated] "No categories" + noCategoriesText: "Keine Kategorien", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Ziehen Sie Eigenschaften hierher, um sie anzuzeigen", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Ziehen Sie Eigenschaften hierher, um sie auszublenden", + // [Auto-translated] "Unsorted items" + hiddenItems: "Unsortierte Artikel", + // [Auto-translated] "Name" + categoryName: "Name", + // [Auto-translated] "Title" + categoryTitle: "Titel", + // [Auto-translated] "Icon name" + iconName: "Name des Symbols", + // [Auto-translated] "Name" + name: "Name", + // [Auto-translated] "Title" + titleField: "Titel", + // [Auto-translated] "Helper Text" + descriptionField: "Hilfstext", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Benutzerdefinierte Kategorie hinzufügen" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Hinzufügen eines neuen Elements", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Hinzufügen eines neuen Unterelements", + // [Auto-translated] "New item in" + newItem: "Neuer Artikel in", + // [Auto-translated] "New Category" + addCustomCategory: "Neue Kategorie", + // [Auto-translated] "New category in" + newCategory: "Neue Kategorie in", + // [Auto-translated] "Move to category..." + moveToCategory: "Zur Kategorie wechseln...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "In eine neue Kategorie wechseln...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategorien", + // [Auto-translated] "Move To..." + moveTo: "Verschieben nach...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Aus {0} entfernen", + // [Auto-translated] "More" + more: "Mehr", + // [Auto-translated] "Restore" + restoreToDefault: "Wiederherstellen", + // [Auto-translated] "Edit" + edit: "Redigieren", + // [Auto-translated] "Expand" + expand: "Erweitern", + // [Auto-translated] "Collapse" + collapse: "Zusammenbruch", + // [Auto-translated] "Remove" + remove: "Entfernen", + // [Auto-translated] "Add" + add: "Hinzufügen", + // [Auto-translated] "Delete" + delete: "Löschen" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Creator-Voreinstellungen", + // [Auto-translated] "Preset JSON:" + presetJson: "Voreingestelltes JSON:", + // [Auto-translated] "Copy" + copy: "Kopieren", + // [Auto-translated] "Download" + download: "Herunterladen", + // [Auto-translated] "Load" + load: "Last", + // [Auto-translated] "Save & Exit" + saveExit: "Speichern & Beenden", + // [Auto-translated] "Back" + back: "Zurück", + // [Auto-translated] "Reset to default" + resetToDefault: "Auf Standard zurücksetzen", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Alle Einstellungen auf Standard zurückgesetzt", + // [Auto-translated] "resored to default" + resoredToDefault: "in Verzug geraten", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Artikel auf Standard zurückgesetzt", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategorie auf Standard zurückgesetzt", + // [Auto-translated] "Edit" + edit: "Redigieren", + // [Auto-translated] "Save & Exit" + completeText: "Speichern & Beenden", + // [Auto-translated] "Back" + pagePrevText: "Zurück" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Presets", + // [Auto-translated] "Creator Presets" + creatorPresets: "Creator-Voreinstellungen", + // [Auto-translated] "Save & Exit" + save: "Speichern & Beenden", + // [Auto-translated] "File" + file: "Datei", + // [Auto-translated] "Import" + import: "Importieren", + // [Auto-translated] "Export" + export: "Exportieren", + // [Auto-translated] "Edit" + edit: "Redigieren", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Sprachen auf Standard zurücksetzen", + // [Auto-translated] "Reset all changes" + resetAll: "Alle Änderungen zurücksetzen", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Zurücksetzen {0} auf die Standardeinstellungen" + } +}; +const locale = getLocaleStrings("de"); +locale.presets = deStrings; diff --git a/packages/survey-creator-core/src/presets/localization/greek.ts b/packages/survey-creator-core/src/presets/localization/greek.ts new file mode 100644 index 0000000000..12b88810ad --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/greek.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const elStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Γλώσσες", + // [Auto-translated] "Languages" + navigationTitle: "Γλώσσες", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Επιλέξτε τη γλώσσα της διεπαφής χρήστη του Survey Creator και στοχεύστε\nγλώσσες για την έρευνα που διαμορφώνεται.", + // [Auto-translated] "Creator UI language" + creatorUI: "Γλώσσα διεπαφής χρήστη δημιουργού", + // [Auto-translated] "Survey languages" + surveyLanguages: "Γλώσσες έρευνας", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Πληκτρολογήστε για αναζήτηση...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Μετάφραση ονομάτων γλωσσών έρευνας στα Αγγλικά" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Ρύθμιση παραμέτρων καρτελών", + // [Auto-translated] "Tabs" + navigationTitle: "Καρτέλες", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Επιλέξτε τις καρτέλες που θέλετε να εμφανίσετε, αναδιατάξτε τις, αλλάξτε τους τίτλους τους,\nκαι επιλέξτε την καρτέλα που θα είναι ενεργή από προεπιλογή.", + // [Auto-translated] "Visible tabs" + items: "Ορατές καρτέλες", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Κρυφές καρτέλες", + // [Auto-translated] "Default tab" + defaultTab: "Προεπιλεγμένη καρτέλα", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Σύρετε τις καρτέλες εδώ για να τις εμφανίσετε", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Σύρετε τις καρτέλες εδώ για να τις αποκρύψετε", + // [Auto-translated] "Name" + name: "Όνομα", + // [Auto-translated] "Title" + titleField: "Τίτλος", + // [Auto-translated] "Icon name" + iconName: "Όνομα εικονιδίου" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Ρύθμιση της εργαλειοθήκης", + // [Auto-translated] "Toolbox" + navigationTitle: "Εργαλειοθήκη", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Επιλέξτε τα στοιχεία της εργαλειοθήκης που θέλετε να εμφανίσετε, ομαδοποιήστε τα σε κατηγορίες, \nμετονομάστε τους και αλλάξτε τη σειρά τους εάν απαιτείται.", + // [Auto-translated] "Toolbox" + toolbox: "Εργαλειοθήκη", + // [Auto-translated] "Categories" + categories: "Κατηγορίες", + // [Auto-translated] "No categories" + noCategoriesText: "Χωρίς κατηγορίες", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Σύρετε στοιχεία εδώ για να τα εμφανίσετε", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Σύρετε στοιχεία εδώ για να τα αποκρύψετε", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Κρυφά στοιχεία εργαλειοθήκης", + // [Auto-translated] "Enable grouping" + enableGrouping: "Ενεργοποίηση ομαδοποίησης", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Εμφάνιση τίτλων κατηγοριών", + // [Auto-translated] "Name" + categoryName: "Όνομα", + // [Auto-translated] "Title" + categoryTitle: "Τίτλος", + // [Auto-translated] "Tooltip" + tooltip: "Συμβουλή εργαλείου", + // [Auto-translated] "Icon name" + iconName: "Όνομα εικονιδίου", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Αντικείμενο JSON για εφαρμογή όταν οι χρήστες επιλέγουν αυτό το στοιχείο εργαλειοθήκης", + // [Auto-translated] "Subcategories" + subitems: "Υποκατηγορίες", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Ενεργοποιήστε τα δευτερεύοντα στοιχεία για αυτήν την ερώτηση...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Μετακίνηση ως υποστοιχείο σε...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Προσθήκη στην εργαλειοθήκη", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Διαγραφή προσαρμοσμένου στοιχείου", + // [Auto-translated] "New Category" + addCustomCategory: "Νέα Κατηγορία", + // [Auto-translated] "New Item" + addCustomItem: "Νέο αντικείμενο", + // [Auto-translated] "Add a new item" + addNewItem: "Προσθήκη νέου στοιχείου", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Προσθήκη νέου υποστοιχείου", + // [Auto-translated] "There are no items" + noRowsText: "Δεν υπάρχουν αντικείμενα", + // [Auto-translated] "New item in" + newItem: "Νέο στοιχείο στο" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Προσαρμογή του πλέγματος ιδιοτήτων", + // [Auto-translated] "Property Grid" + navigationTitle: "Πλέγμα ιδιοκτησίας", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Επιλέξτε ένα στοιχείο για να προσαρμόσετε τις ρυθμίσεις του που είναι διαθέσιμες στο Πλέγμα Ιδιοτήτων.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Επιλέξτε ένα στοιχείο για να προσαρμόσετε τις ρυθμίσεις του που είναι διαθέσιμες στο Πλέγμα Ιδιότητας", + // [Auto-translated] "Property Grid" + propertyGrid: "Πλέγμα ιδιοκτησίας", + // [Auto-translated] "No categories" + noCategoriesText: "Χωρίς κατηγορίες", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Σύρετε τις ιδιότητες εδώ για να τις εμφανίσετε", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Σύρετε τις ιδιότητες εδώ για να τις αποκρύψετε", + // [Auto-translated] "Unsorted items" + hiddenItems: "Αταξινόμητα αντικείμενα", + // [Auto-translated] "Name" + categoryName: "Όνομα", + // [Auto-translated] "Title" + categoryTitle: "Τίτλος", + // [Auto-translated] "Icon name" + iconName: "Όνομα εικονιδίου", + // [Auto-translated] "Name" + name: "Όνομα", + // [Auto-translated] "Title" + titleField: "Τίτλος", + // [Auto-translated] "Helper Text" + descriptionField: "Βοηθητικό κείμενο", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Προσθήκη προσαρμοσμένης κατηγορίας" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Προσθήκη νέου στοιχείου", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Προσθήκη νέου υποστοιχείου", + // [Auto-translated] "New item in" + newItem: "Νέο στοιχείο στο", + // [Auto-translated] "New Category" + addCustomCategory: "Νέα Κατηγορία", + // [Auto-translated] "New category in" + newCategory: "Νέα κατηγορία στο", + // [Auto-translated] "Move to category..." + moveToCategory: "Μετακίνηση στην κατηγορία...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Μετακίνηση σε νέα κατηγορία...", + // [Auto-translated] "Categories" + categoriesLabel: "Κατηγορίες", + // [Auto-translated] "Move To..." + moveTo: "Μετακίνηση σε...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Αφαίρεση από {0}", + // [Auto-translated] "More" + more: "Περισσότερο", + // [Auto-translated] "Restore" + restoreToDefault: "Αποκαθιστώ", + // [Auto-translated] "Edit" + edit: "Επεξεργασία", + // [Auto-translated] "Expand" + expand: "Επεκτείνω", + // [Auto-translated] "Collapse" + collapse: "Κατάρρευση", + // [Auto-translated] "Remove" + remove: "Αφαιρώ", + // [Auto-translated] "Add" + add: "Προσθέτω", + // [Auto-translated] "Delete" + delete: "Διαγράφω" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Προεπιλογές δημιουργού", + // [Auto-translated] "Preset JSON:" + presetJson: "Προκαθορισμένο JSON:", + // [Auto-translated] "Copy" + copy: "Αντίγραφο", + // [Auto-translated] "Download" + download: "Καταφόρτωση", + // [Auto-translated] "Load" + load: "Φορτίο", + // [Auto-translated] "Save & Exit" + saveExit: "Αποθήκευση & Έξοδος", + // [Auto-translated] "Back" + back: "Πλάτη", + // [Auto-translated] "Reset to default" + resetToDefault: "Επαναφορά στις προεπιλογές", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Όλες οι ρυθμίσεις επανήλθαν στις προεπιλογές", + // [Auto-translated] "resored to default" + resoredToDefault: "Αθέτηση υποχρεώσεων", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Το στοιχείο επανήλθε στην προεπιλογή", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Η κατηγορία επανήλθε στην προεπιλογή", + // [Auto-translated] "Edit" + edit: "Επεξεργασία", + // [Auto-translated] "Save & Exit" + completeText: "Αποθήκευση & Έξοδος", + // [Auto-translated] "Back" + pagePrevText: "Πλάτη" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Προεπιλογές", + // [Auto-translated] "Creator Presets" + creatorPresets: "Προεπιλογές δημιουργού", + // [Auto-translated] "Save & Exit" + save: "Αποθήκευση & Έξοδος", + // [Auto-translated] "File" + file: "Αρχείο", + // [Auto-translated] "Import" + import: "Εισαγωγή", + // [Auto-translated] "Export" + export: "Εξαγωγή", + // [Auto-translated] "Edit" + edit: "Επεξεργασία", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Επαναφορά γλωσσών στις προεπιλογές", + // [Auto-translated] "Reset all changes" + resetAll: "Επαναφορά όλων των αλλαγών", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Επαναφορά {0} στις προεπιλογές" + } +}; +const locale = getLocaleStrings("el"); +locale.presets = elStrings; diff --git a/packages/survey-creator-core/src/presets/localization/haitian-creole.ts b/packages/survey-creator-core/src/presets/localization/haitian-creole.ts new file mode 100644 index 0000000000..2bc8db51c4 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/haitian-creole.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const htStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Lang", + // [Auto-translated] "Languages" + navigationTitle: "Lang", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Chwazi lang UI kreyatè sondaj la ak sib\nLang pou sondaj la ke yo te configuré.", + // [Auto-translated] "Creator UI language" + creatorUI: "Kreyatè UI lang", + // [Auto-translated] "Survey languages" + surveyLanguages: "Lang sondaj yo", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Kalite pou fè rechèch ...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Tradwi non lang sondaj an anglè" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Konfigirasyon onglè yo", + // [Auto-translated] "Tabs" + navigationTitle: "Onglè yo", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Chwazi onglè yo ou vle montre, reorder yo, chanje yo,\nepi chwazi tab la ki pral aktif pa default.", + // [Auto-translated] "Visible tabs" + items: "Onglè vizib", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Onglè kache", + // [Auto-translated] "Default tab" + defaultTab: "Default tab", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Trennen onglets isit la pou montre yo", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Trennen onglè isit la pou kache yo", + // [Auto-translated] "Name" + name: "Fe-apel", + // [Auto-translated] "Title" + titleField: "Tit", + // [Auto-translated] "Icon name" + iconName: "Non icon" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Mete kanpe bwat zouti a", + // [Auto-translated] "Toolbox" + navigationTitle: "Bwat zouti", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Chwazi atik yo bwat zouti ou vle montre, gwoup yo an kategori, \nchanje non yo, epi chanje lòd yo si sa nesesè.", + // [Auto-translated] "Toolbox" + toolbox: "Bwat zouti", + // [Auto-translated] "Categories" + categories: "Kategori", + // [Auto-translated] "No categories" + noCategoriesText: "Pa gen kategori", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Trennen atik isit la pou montre yo", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Trennen atik isit la pou kache yo", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Atik bwat zouti kache", + // [Auto-translated] "Enable grouping" + enableGrouping: "Pèmèt gwoupman", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Montre kategori", + // [Auto-translated] "Name" + categoryName: "Fe-apel", + // [Auto-translated] "Title" + categoryTitle: "Tit", + // [Auto-translated] "Tooltip" + tooltip: "Konsèy zouti", + // [Auto-translated] "Icon name" + iconName: "Non icon", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON objè pou aplike lè itilizatè yo chwazi atik bwat zouti sa a", + // [Auto-translated] "Subcategories" + subitems: "Sous-kategori", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Pèmèt subitems pou kesyon sa a...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Deplase kòm yon subitem pou...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Ajoute nan bwat zouti", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Efase atik koutim", + // [Auto-translated] "New Category" + addCustomCategory: "Nouvo Kategori", + // [Auto-translated] "New Item" + addCustomItem: "Nouvo Atik", + // [Auto-translated] "Add a new item" + addNewItem: "Ajoute yon nouvo atik", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Ajoute yon nouvo subitem", + // [Auto-translated] "There are no items" + noRowsText: "Pa gen okenn atik", + // [Auto-translated] "New item in" + newItem: "Nouvo atik nan" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Customize kadriyaj pwopriyete a", + // [Auto-translated] "Property Grid" + navigationTitle: "Pwopriyete kadriyaj", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Chwazi yon eleman pou Customize anviwònman li yo ki disponib nan kadriyaj la Pwopriyete.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Chwazi yon eleman pou Customize anviwònman li yo ki disponib nan kadriyaj la Pwopriyete", + // [Auto-translated] "Property Grid" + propertyGrid: "Pwopriyete kadriyaj", + // [Auto-translated] "No categories" + noCategoriesText: "Pa gen kategori", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Trennen pwopriyete isit la pou montre yo", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Trennen pwopriyete isit la kache yo", + // [Auto-translated] "Unsorted items" + hiddenItems: "Unsorted atik", + // [Auto-translated] "Name" + categoryName: "Fe-apel", + // [Auto-translated] "Title" + categoryTitle: "Tit", + // [Auto-translated] "Icon name" + iconName: "Non icon", + // [Auto-translated] "Name" + name: "Fe-apel", + // [Auto-translated] "Title" + titleField: "Tit", + // [Auto-translated] "Helper Text" + descriptionField: "Tèks ede", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Add Custom Kategori" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Ajoute yon nouvo atik", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Ajoute yon nouvo subitem", + // [Auto-translated] "New item in" + newItem: "Nouvo atik nan", + // [Auto-translated] "New Category" + addCustomCategory: "Nouvo Kategori", + // [Auto-translated] "New category in" + newCategory: "Nouvo kategori nan", + // [Auto-translated] "Move to category..." + moveToCategory: "Deplase nan kategori...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Deplase nan nouvo kategori...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategori", + // [Auto-translated] "Move To..." + moveTo: "Deplase Pou...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Retire soti nan {0}", + // [Auto-translated] "More" + more: "Plis", + // [Auto-translated] "Restore" + restoreToDefault: "Retabli", + // [Auto-translated] "Edit" + edit: "modifye", + // [Auto-translated] "Expand" + expand: "Elaji", + // [Auto-translated] "Collapse" + collapse: "Tonbe", + // [Auto-translated] "Remove" + remove: "Deplase", + // [Auto-translated] "Add" + add: "Ajoute", + // [Auto-translated] "Delete" + delete: "Efase" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Kreyatè Prereglaj", + // [Auto-translated] "Preset JSON:" + presetJson: "Prereglaj JSON:", + // [Auto-translated] "Copy" + copy: "Kopi", + // [Auto-translated] "Download" + download: "Rale dosye", + // [Auto-translated] "Load" + load: "Mete abo", + // [Auto-translated] "Save & Exit" + saveExit: "Sove & sòti", + // [Auto-translated] "Back" + back: "Do", + // [Auto-translated] "Reset to default" + resetToDefault: "Reyajiste nan default", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Tout anviwònman retabli nan default", + // [Auto-translated] "resored to default" + resoredToDefault: "Resored nan default", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Atik retabli nan default", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategori retabli nan default", + // [Auto-translated] "Edit" + edit: "modifye", + // [Auto-translated] "Save & Exit" + completeText: "Sove & sòti", + // [Auto-translated] "Back" + pagePrevText: "Do" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Prereglaj", + // [Auto-translated] "Creator Presets" + creatorPresets: "Kreyatè Prereglaj", + // [Auto-translated] "Save & Exit" + save: "Sove & sòti", + // [Auto-translated] "File" + file: "Ranpli", + // [Auto-translated] "Import" + import: "Enpòte", + // [Auto-translated] "Export" + export: "Ekspòtasyon", + // [Auto-translated] "Edit" + edit: "modifye", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Reyajiste Lang nan default", + // [Auto-translated] "Reset all changes" + resetAll: "Reyajiste tout chanjman", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Reyajiste {0} default" + } +}; +const locale = getLocaleStrings("ht"); +locale.presets = htStrings; diff --git a/packages/survey-creator-core/src/presets/localization/hebrew.ts b/packages/survey-creator-core/src/presets/localization/hebrew.ts new file mode 100644 index 0000000000..d88d5d6336 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/hebrew.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const heStrings = { + languages: { + // [Auto-translated] "Languages" + title: "שפות", + // [Auto-translated] "Languages" + navigationTitle: "שפות", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "בחר את השפה של ממשק המשתמש והיעד של יוצר הסקר\nשפות עבור הסקר מוגדר.", + // [Auto-translated] "Creator UI language" + creatorUI: "שפת ממשק המשתמש של היוצר", + // [Auto-translated] "Survey languages" + surveyLanguages: "שפות סקר", + // [Auto-translated] "Type to search..." + searchPlaceholder: "הקלד כדי לחפש...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "תרגום שמות שפות הסקר לאנגלית" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "קביעת תצורה של כרטיסיות", + // [Auto-translated] "Tabs" + navigationTitle: "כרטיסיות", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "בחר את הכרטיסיות שברצונך להציג, סדר אותן מחדש, שנה את הכותרות שלהן,\nובחר את הכרטיסיה שתהיה פעילה כברירת מחדל.", + // [Auto-translated] "Visible tabs" + items: "כרטיסיות גלויות", + // [Auto-translated] "Hidden tabs" + hiddenItems: "כרטיסיות מוסתרות", + // [Auto-translated] "Default tab" + defaultTab: "כרטיסיית ברירת מחדל", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "גרור כרטיסיות לכאן כדי להציג אותן", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "גרור כרטיסיות לכאן כדי להסתיר אותן", + // [Auto-translated] "Name" + name: "שם", + // [Auto-translated] "Title" + titleField: "כותר", + // [Auto-translated] "Icon name" + iconName: "שם סמל" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "הגדרת ארגז הכלים", + // [Auto-translated] "Toolbox" + navigationTitle: "ארגז כלים", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "בחר את פריטי ארגז הכלים שברצונך להציג, קבץ אותם לקטגוריות, \nשנה את שמם ושנה את הסדר שלהם במידת הצורך.", + // [Auto-translated] "Toolbox" + toolbox: "ארגז כלים", + // [Auto-translated] "Categories" + categories: "קטגוריות", + // [Auto-translated] "No categories" + noCategoriesText: "אין קטגוריות", + // [Auto-translated] "Drag items here to show them" + noItemsText: "גרור פריטים לכאן כדי להציג אותם", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "גרור פריטים לכאן כדי להסתיר אותם", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "פריטי ארגז כלים מוסתרים", + // [Auto-translated] "Enable grouping" + enableGrouping: "הפיכת קיבוץ לזמין", + // [Auto-translated] "Show category titles" + showCategoryTitles: "הצגת כותרות קטגוריות", + // [Auto-translated] "Name" + categoryName: "שם", + // [Auto-translated] "Title" + categoryTitle: "כותר", + // [Auto-translated] "Tooltip" + tooltip: "תיאור כלי", + // [Auto-translated] "Icon name" + iconName: "שם סמל", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON להחלה כאשר משתמשים בוחרים בפריט ארגז כלים זה", + // [Auto-translated] "Subcategories" + subitems: "קטגוריות משנה", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "אפשר פריטי משנה לשאלה זו...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "העבר כפריט משנה אל...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "הוספה לארגז הכלים", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "מחיקת פריט מותאם אישית", + // [Auto-translated] "New Category" + addCustomCategory: "קטגוריה חדשה", + // [Auto-translated] "New Item" + addCustomItem: "פריט חדש", + // [Auto-translated] "Add a new item" + addNewItem: "הוספת פריט חדש", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "הוספת פריט משנה חדש", + // [Auto-translated] "There are no items" + noRowsText: "אין פריטים", + // [Auto-translated] "New item in" + newItem: "פריט חדש ב-" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "התאמה אישית של רשת המאפיינים", + // [Auto-translated] "Property Grid" + navigationTitle: "רשת מאפיינים", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "בחר רכיב כדי להתאים אישית את ההגדרות שלו הזמינות ברשת המאפיינ��ם.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "בחר רכיב כדי להתאים אישית את ההגדרות שלו הזמינות ברשת המאפיינים", + // [Auto-translated] "Property Grid" + propertyGrid: "רשת מאפיינים", + // [Auto-translated] "No categories" + noCategoriesText: "אין קטגוריות", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "גרור מאפיינים לכאן כדי להציג אותם", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "גרור מאפיינים לכאן כדי להסתיר אותם", + // [Auto-translated] "Unsorted items" + hiddenItems: "פריטים לא ממוינים", + // [Auto-translated] "Name" + categoryName: "שם", + // [Auto-translated] "Title" + categoryTitle: "כותר", + // [Auto-translated] "Icon name" + iconName: "שם סמל", + // [Auto-translated] "Name" + name: "שם", + // [Auto-translated] "Title" + titleField: "כותר", + // [Auto-translated] "Helper Text" + descriptionField: "טקסט מסייע", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "הוסף קטגוריה מותאמת אישית" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "הוספת פריט חדש", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "הוספת פריט משנה חדש", + // [Auto-translated] "New item in" + newItem: "פריט חדש ב-", + // [Auto-translated] "New Category" + addCustomCategory: "קטגוריה חדשה", + // [Auto-translated] "New category in" + newCategory: "קטגוריה חדשה ב", + // [Auto-translated] "Move to category..." + moveToCategory: "מעבר לקטגוריה...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "מעבר לקטגוריה חדשה...", + // [Auto-translated] "Categories" + categoriesLabel: "קטגוריות", + // [Auto-translated] "Move To..." + moveTo: "העבר אל...", + // [Auto-translated] "Remove from {0}" + removeFrom: "הסר מה{0}", + // [Auto-translated] "More" + more: "עוד", + // [Auto-translated] "Restore" + restoreToDefault: "לשחזר", + // [Auto-translated] "Edit" + edit: "עריכה", + // [Auto-translated] "Expand" + expand: "להרחיב", + // [Auto-translated] "Collapse" + collapse: "התמוטטות", + // [Auto-translated] "Remove" + remove: "להסיר", + // [Auto-translated] "Add" + add: "הוסף", + // [Auto-translated] "Delete" + delete: "למחוק" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "קביעות מוגדרות מראש של היוצרים", + // [Auto-translated] "Preset JSON:" + presetJson: "JSON מוגדר מראש:", + // [Auto-translated] "Copy" + copy: "עותק", + // [Auto-translated] "Download" + download: "הורדה", + // [Auto-translated] "Load" + load: "טען", + // [Auto-translated] "Save & Exit" + saveExit: "שמירה ויציאה", + // [Auto-translated] "Back" + back: "גב", + // [Auto-translated] "Reset to default" + resetToDefault: "איפוס לברירת המחדל", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "כל ההגדרות שוחזרו לברירת המחדל", + // [Auto-translated] "resored to default" + resoredToDefault: "מוחזר לברירת המחדל", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "הפריט שוחזר לברירת המחדל", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "הקטגוריה שוחזרה לברירת המחדל", + // [Auto-translated] "Edit" + edit: "עריכה", + // [Auto-translated] "Save & Exit" + completeText: "שמירה ויציאה", + // [Auto-translated] "Back" + pagePrevText: "גב" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "קבועות מראש", + // [Auto-translated] "Creator Presets" + creatorPresets: "קביעות מוגדרות מראש של היוצרים", + // [Auto-translated] "Save & Exit" + save: "שמירה ויציאה", + // [Auto-translated] "File" + file: "קובץ", + // [Auto-translated] "Import" + import: "ייבוא", + // [Auto-translated] "Export" + export: "ייצא", + // [Auto-translated] "Edit" + edit: "עריכה", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "איפוס שפות לברירת המחדל", + // [Auto-translated] "Reset all changes" + resetAll: "איפוס כל השינויים", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "איפוס {0} לברירות המחדל" + } +}; +const locale = getLocaleStrings("he"); +locale.presets = heStrings; diff --git a/packages/survey-creator-core/src/presets/localization/hungarian.ts b/packages/survey-creator-core/src/presets/localization/hungarian.ts new file mode 100644 index 0000000000..8289726bf7 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/hungarian.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const huStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Nyelvek", + // [Auto-translated] "Languages" + navigationTitle: "Nyelvek", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Válassza ki a felmérés készítőjének felhasználói felületének nyelvét és a célt\na konfigurált felmérés nyelvei.", + // [Auto-translated] "Creator UI language" + creatorUI: "Alkotói felhasználói felület nyelve", + // [Auto-translated] "Survey languages" + surveyLanguages: "A felmérés nyelvei", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Írja be a kereséshez...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Felmérés nyelvnevének fordítása angolra" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Lapok konfigurálása", + // [Auto-translated] "Tabs" + navigationTitle: "Lapfülek", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Válassza ki a megjeleníteni kívánt lapokat, rendezze át őket, módosítsa a címüket,\nés válassza ki azt a lapot, amely alapértelmezés szerint aktív lesz.", + // [Auto-translated] "Visible tabs" + items: "Látható lapok", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Rejtett lapok", + // [Auto-translated] "Default tab" + defaultTab: "Alapértelmezett lap", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Húzza ide a lapokat a megjelenítésükhöz", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Húzza ide a lapokat az elrejtéshez", + // [Auto-translated] "Name" + name: "Név", + // [Auto-translated] "Title" + titleField: "Cím", + // [Auto-translated] "Icon name" + iconName: "Ikon neve" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Az Eszköztár beállítása", + // [Auto-translated] "Toolbox" + navigationTitle: "Szerszámosláda", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Válassza ki a megjeleníteni kívánt eszköztár elemeket, csoportosítsa őket kategóriákba, \nNevezze át őket, és szükség esetén módosítsa a sorrendjüket.", + // [Auto-translated] "Toolbox" + toolbox: "Szerszámosláda", + // [Auto-translated] "Categories" + categories: "Kategóriák", + // [Auto-translated] "No categories" + noCategoriesText: "Nincs kategória", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Húzza ide az elemeket a megjelenítésükhöz", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Húzza ide az elemeket az elrejtéshez", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Rejtett eszköztár elemek", + // [Auto-translated] "Enable grouping" + enableGrouping: "Csoportosítás engedélyezése", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Kategóriacímek megjelenítése", + // [Auto-translated] "Name" + categoryName: "Név", + // [Auto-translated] "Title" + categoryTitle: "Cím", + // [Auto-translated] "Tooltip" + tooltip: "Elemleírás", + // [Auto-translated] "Icon name" + iconName: "Ikon neve", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON-objektum, amelyet akkor kell alkalmazni, amikor a felhasználók kiválasztják ezt az eszközkészlet-elemet", + // [Auto-translated] "Subcategories" + subitems: "Alkategóriák", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Engedélyezze a kérdés alelemeit...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Áthelyezés alelemként a...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Hozzáadás az eszköztárhoz", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Egyéni elem törlése", + // [Auto-translated] "New Category" + addCustomCategory: "Új kategória", + // [Auto-translated] "New Item" + addCustomItem: "Új elem", + // [Auto-translated] "Add a new item" + addNewItem: "Új elem hozzáadása", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Új alelem hozzáadása", + // [Auto-translated] "There are no items" + noRowsText: "Nincsenek elemek", + // [Auto-translated] "New item in" + newItem: "Új elem" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "A tulajdonságrács testreszabása", + // [Auto-translated] "Property Grid" + navigationTitle: "Tulajdonságrács", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Jelöljön ki egy elemet a tulajdonságrácsban elérhető beállítások testreszabásához.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Válasszon ki egy elemet a tulajdonságrácsban elérhető beállítások testreszabásához", + // [Auto-translated] "Property Grid" + propertyGrid: "Tulajdonságrács", + // [Auto-translated] "No categories" + noCategoriesText: "Nincs kategória", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Húzza ide a tulajdonságokat a megjelenítésükhöz", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Húzza ide a tulajdonságokat az elrejtéshez", + // [Auto-translated] "Unsorted items" + hiddenItems: "Rendezetlen elemek", + // [Auto-translated] "Name" + categoryName: "Név", + // [Auto-translated] "Title" + categoryTitle: "Cím", + // [Auto-translated] "Icon name" + iconName: "Ikon neve", + // [Auto-translated] "Name" + name: "Név", + // [Auto-translated] "Title" + titleField: "Cím", + // [Auto-translated] "Helper Text" + descriptionField: "Segítő szöveg", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Egyéni kategória hozzáadása" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Új elem hozzáadása", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Új alelem hozzáadása", + // [Auto-translated] "New item in" + newItem: "Új elem", + // [Auto-translated] "New Category" + addCustomCategory: "Új kategória", + // [Auto-translated] "New category in" + newCategory: "Új kategória", + // [Auto-translated] "Move to category..." + moveToCategory: "Áthelyezés a kategóriába...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Áthelyezés új kategóriába...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategóriák", + // [Auto-translated] "Move To..." + moveTo: "Áthelyezés...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Eltávolítás a {0}", + // [Auto-translated] "More" + more: "Több", + // [Auto-translated] "Restore" + restoreToDefault: "Visszaad", + // [Auto-translated] "Edit" + edit: "Szerkeszt", + // [Auto-translated] "Expand" + expand: "Kibővít", + // [Auto-translated] "Collapse" + collapse: "Összeomlás", + // [Auto-translated] "Remove" + remove: "Eltávolít", + // [Auto-translated] "Add" + add: "Hozzáad", + // [Auto-translated] "Delete" + delete: "Töröl" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Alkotói készletek", + // [Auto-translated] "Preset JSON:" + presetJson: "Előre beállított JSON:", + // [Auto-translated] "Copy" + copy: "Másolat", + // [Auto-translated] "Download" + download: "Letöltés", + // [Auto-translated] "Load" + load: "Rakomány", + // [Auto-translated] "Save & Exit" + saveExit: "Mentés és kilépés", + // [Auto-translated] "Back" + back: "Hát", + // [Auto-translated] "Reset to default" + resetToDefault: "Visszaállítás az alapértelmezettre", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Minden beállítás visszaáll az alapértelmezettre", + // [Auto-translated] "resored to default" + resoredToDefault: "alapértelmezettre cserélve", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Az elem visszaállt az alapértelmezettre", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "A kategória visszaállítva az alapértelmezettre", + // [Auto-translated] "Edit" + edit: "Szerkeszt", + // [Auto-translated] "Save & Exit" + completeText: "Mentés és kilépés", + // [Auto-translated] "Back" + pagePrevText: "Hát" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Készletek", + // [Auto-translated] "Creator Presets" + creatorPresets: "Alkotói készletek", + // [Auto-translated] "Save & Exit" + save: "Mentés és kilépés", + // [Auto-translated] "File" + file: "Fájl", + // [Auto-translated] "Import" + import: "Importál", + // [Auto-translated] "Export" + export: "Kivitel", + // [Auto-translated] "Edit" + edit: "Szerkeszt", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Nyelvek visszaállítása alapértelmezettre", + // [Auto-translated] "Reset all changes" + resetAll: "Az összes módosítás visszaállítása", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Állítsa vissza {0} az alapértelmezett értékekre" + } +}; +const locale = getLocaleStrings("hu"); +locale.presets = huStrings; diff --git a/packages/survey-creator-core/src/presets/localization/indonesian.ts b/packages/survey-creator-core/src/presets/localization/indonesian.ts new file mode 100644 index 0000000000..8f855f13a0 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/indonesian.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const idStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Bahasa", + // [Auto-translated] "Languages" + navigationTitle: "Bahasa", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Pilih bahasa UI dan target Pembuat Survei\nbahasa untuk survei yang sedang dikonfigurasi.", + // [Auto-translated] "Creator UI language" + creatorUI: "Bahasa UI kreator", + // [Auto-translated] "Survey languages" + surveyLanguages: "Bahasa survei", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Ketik untuk mencari...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Terjemahkan nama bahasa Survei ke bahasa Inggris" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Mengonfigurasi tab", + // [Auto-translated] "Tabs" + navigationTitle: "Tab", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Pilih tab yang ingin Anda tampilkan, urutkan ulang, ubah judulnya,\ndan pilih tab yang akan aktif secara default.", + // [Auto-translated] "Visible tabs" + items: "Tab yang terlihat", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Tab tersembunyi", + // [Auto-translated] "Default tab" + defaultTab: "Tab default", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Seret tab ke sini untuk menampilkannya", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Seret tab ke sini untuk menyembunyikannya", + // [Auto-translated] "Name" + name: "Nama", + // [Auto-translated] "Title" + titleField: "Titel", + // [Auto-translated] "Icon name" + iconName: "Nama ikon" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Menyiapkan Toolbox", + // [Auto-translated] "Toolbox" + navigationTitle: "Toolbox", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Pilih item kotak alat yang ingin Anda tampilkan, kelompokkan ke dalam kategori, \nganti namanya, dan ubah urutannya jika diperlukan.", + // [Auto-translated] "Toolbox" + toolbox: "Toolbox", + // [Auto-translated] "Categories" + categories: "Kategori", + // [Auto-translated] "No categories" + noCategoriesText: "Tidak ada kategori", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Seret item ke sini untuk menampilkannya", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Seret item ke sini untuk menyembunyikannya", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Item kotak alat tersembunyi", + // [Auto-translated] "Enable grouping" + enableGrouping: "Aktifkan pengelompokan", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Tampilkan judul kategori", + // [Auto-translated] "Name" + categoryName: "Nama", + // [Auto-translated] "Title" + categoryTitle: "Titel", + // [Auto-translated] "Tooltip" + tooltip: "Tooltip", + // [Auto-translated] "Icon name" + iconName: "Nama ikon", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON untuk diterapkan saat pengguna memilih item toolbox ini", + // [Auto-translated] "Subcategories" + subitems: "Subkategori", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Aktifkan subitem untuk pertanyaan ini...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Pindah sebagai subitem ke...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Tambahkan ke Toolbox", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Hapus Item Kustom", + // [Auto-translated] "New Category" + addCustomCategory: "Kategori Baru", + // [Auto-translated] "New Item" + addCustomItem: "Item Baru", + // [Auto-translated] "Add a new item" + addNewItem: "Menambahkan item baru", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Menambahkan subitem baru", + // [Auto-translated] "There are no items" + noRowsText: "Tidak ada item", + // [Auto-translated] "New item in" + newItem: "Item baru di" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Menyesuaikan Kisi Properti", + // [Auto-translated] "Property Grid" + navigationTitle: "Kisi Properti", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Pilih elemen untuk menyesuaikan pengaturannya yang tersedia di Kisi Properti.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Pilih elemen untuk menyesuaikan pengaturannya yang tersedia di Kisi Properti", + // [Auto-translated] "Property Grid" + propertyGrid: "Kisi Properti", + // [Auto-translated] "No categories" + noCategoriesText: "Tidak ada kategori", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Seret properti ke sini untuk menampilkannya", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Seret properti ke sini untuk menyembunyikannya", + // [Auto-translated] "Unsorted items" + hiddenItems: "Item yang tidak diurutkan", + // [Auto-translated] "Name" + categoryName: "Nama", + // [Auto-translated] "Title" + categoryTitle: "Titel", + // [Auto-translated] "Icon name" + iconName: "Nama ikon", + // [Auto-translated] "Name" + name: "Nama", + // [Auto-translated] "Title" + titleField: "Titel", + // [Auto-translated] "Helper Text" + descriptionField: "Teks Pembantu", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Tambahkan Kategori Kustom" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Menambahkan item baru", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Menambahkan subitem baru", + // [Auto-translated] "New item in" + newItem: "Item baru di", + // [Auto-translated] "New Category" + addCustomCategory: "Kategori Baru", + // [Auto-translated] "New category in" + newCategory: "Kategori baru di", + // [Auto-translated] "Move to category..." + moveToCategory: "Pindah ke kategori...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Pindah ke kategori baru...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategori", + // [Auto-translated] "Move To..." + moveTo: "Pindah ke...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Hapus dari {0}", + // [Auto-translated] "More" + more: "Lebih", + // [Auto-translated] "Restore" + restoreToDefault: "Mengembalikan", + // [Auto-translated] "Edit" + edit: "Mengedit", + // [Auto-translated] "Expand" + expand: "Memperluas", + // [Auto-translated] "Collapse" + collapse: "Roboh", + // [Auto-translated] "Remove" + remove: "Buka", + // [Auto-translated] "Add" + add: "Tambah", + // [Auto-translated] "Delete" + delete: "Menghapus" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Preset Kreator", + // [Auto-translated] "Preset JSON:" + presetJson: "JSON Preset:", + // [Auto-translated] "Copy" + copy: "Menyalin", + // [Auto-translated] "Download" + download: "Mengunduh", + // [Auto-translated] "Load" + load: "Muat", + // [Auto-translated] "Save & Exit" + saveExit: "Simpan & Keluar", + // [Auto-translated] "Back" + back: "Belakang", + // [Auto-translated] "Reset to default" + resetToDefault: "Setel ulang ke default", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Semua pengaturan dikembalikan ke default", + // [Auto-translated] "resored to default" + resoredToDefault: "dikembalikan ke default", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Item dikembalikan ke default", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategori dikembalikan ke default", + // [Auto-translated] "Edit" + edit: "Mengedit", + // [Auto-translated] "Save & Exit" + completeText: "Simpan & Keluar", + // [Auto-translated] "Back" + pagePrevText: "Belakang" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Preset", + // [Auto-translated] "Creator Presets" + creatorPresets: "Preset Kreator", + // [Auto-translated] "Save & Exit" + save: "Simpan & Keluar", + // [Auto-translated] "File" + file: "Arsip", + // [Auto-translated] "Import" + import: "Mengimpor", + // [Auto-translated] "Export" + export: "Ekspor", + // [Auto-translated] "Edit" + edit: "Mengedit", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Setel Ulang Bahasa ke default", + // [Auto-translated] "Reset all changes" + resetAll: "Atur ulang semua perubahan", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Setel ulang {0} ke default" + } +}; +const locale = getLocaleStrings("id"); +locale.presets = idStrings; diff --git a/packages/survey-creator-core/src/presets/localization/italian.ts b/packages/survey-creator-core/src/presets/localization/italian.ts new file mode 100644 index 0000000000..784e6654d2 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/italian.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const itStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Lingue", + // [Auto-translated] "Languages" + navigationTitle: "Lingue", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Seleziona la lingua dell'interfaccia utente di Survey Creator e il target\nlingue per il sondaggio in fase di configurazione.", + // [Auto-translated] "Creator UI language" + creatorUI: "Lingua dell'interfaccia utente del creatore", + // [Auto-translated] "Survey languages" + surveyLanguages: "Lingue dell'indagine", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Digita per cercare...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Traduci i nomi delle lingue del sondaggio in inglese" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Configurare le schede", + // [Auto-translated] "Tabs" + navigationTitle: "Schede", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Seleziona le schede che desideri mostrare, riordinale, modificane i titoli,\ne scegli la scheda che sarà attiva per impostazione predefinita.", + // [Auto-translated] "Visible tabs" + items: "Schede visibili", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Schede nascoste", + // [Auto-translated] "Default tab" + defaultTab: "Scheda Predefinito", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Trascina le schede qui per mostrarle", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Trascina qui le schede per nasconderle", + // [Auto-translated] "Name" + name: "Nome", + // [Auto-translated] "Title" + titleField: "Titolo", + // [Auto-translated] "Icon name" + iconName: "Nome dell'icona" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Configurare la Casella degli strumenti", + // [Auto-translated] "Toolbox" + navigationTitle: "Cassetta degli attrezzi", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Seleziona gli elementi della casella degli strumenti che desideri mostrare, raggruppali in categorie, \nRinominali e modificane l'ordine, se necessario.", + // [Auto-translated] "Toolbox" + toolbox: "Cassetta degli attrezzi", + // [Auto-translated] "Categories" + categories: "Categorie", + // [Auto-translated] "No categories" + noCategoriesText: "Nessuna categoria", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Trascina qui gli elementi per visualizzarli", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Trascina qui gli elementi per nasconderli", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Elementi nascosti della casella degli strumenti", + // [Auto-translated] "Enable grouping" + enableGrouping: "Abilita raggruppamento", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Mostra i titoli delle categorie", + // [Auto-translated] "Name" + categoryName: "Nome", + // [Auto-translated] "Title" + categoryTitle: "Titolo", + // [Auto-translated] "Tooltip" + tooltip: "Descrizione comando", + // [Auto-translated] "Icon name" + iconName: "Nome dell'icona", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Oggetto JSON da applicare quando gli utenti selezionano questo elemento della casella degli strumenti", + // [Auto-translated] "Subcategories" + subitems: "Sottocategorie", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Abilita gli elementi secondari per questa domanda...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Sposta come sottoelemento in...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Aggiungi alla casella degli strumenti", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Elimina articolo personalizzato", + // [Auto-translated] "New Category" + addCustomCategory: "Nuova Categoria", + // [Auto-translated] "New Item" + addCustomItem: "Nuovo articolo", + // [Auto-translated] "Add a new item" + addNewItem: "Aggiungere un nuovo elemento", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Aggiungere un nuovo elemento secondario", + // [Auto-translated] "There are no items" + noRowsText: "Non ci sono articoli", + // [Auto-translated] "New item in" + newItem: "Nuovo articolo in" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Personalizzazione della griglia delle proprietà", + // [Auto-translated] "Property Grid" + navigationTitle: "Griglia delle proprietà", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Selezionare un elemento per personalizzarne le impostazioni disponibili nella Griglia delle proprietà.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Seleziona un elemento per personalizzarne le impostazioni disponibili nella Griglia Proprietà", + // [Auto-translated] "Property Grid" + propertyGrid: "Griglia delle proprietà", + // [Auto-translated] "No categories" + noCategoriesText: "Nessuna categoria", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Trascina qui le proprietà per visualizzarle", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Trascina qui le proprietà per nasconderle", + // [Auto-translated] "Unsorted items" + hiddenItems: "Articoli non ordinati", + // [Auto-translated] "Name" + categoryName: "Nome", + // [Auto-translated] "Title" + categoryTitle: "Titolo", + // [Auto-translated] "Icon name" + iconName: "Nome dell'icona", + // [Auto-translated] "Name" + name: "Nome", + // [Auto-translated] "Title" + titleField: "Titolo", + // [Auto-translated] "Helper Text" + descriptionField: "Testo di supporto", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Aggiungi categoria personalizzata" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Aggiungere un nuovo elemento", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Aggiungere un nuovo elemento secondario", + // [Auto-translated] "New item in" + newItem: "Nuovo articolo in", + // [Auto-translated] "New Category" + addCustomCategory: "Nuova Categoria", + // [Auto-translated] "New category in" + newCategory: "Nuova categoria in", + // [Auto-translated] "Move to category..." + moveToCategory: "Sposta nella categoria...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Passa alla nuova categoria...", + // [Auto-translated] "Categories" + categoriesLabel: "Categorie", + // [Auto-translated] "Move To..." + moveTo: "Sposta in...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Rimuovi dal {0}", + // [Auto-translated] "More" + more: "Più", + // [Auto-translated] "Restore" + restoreToDefault: "Restaurare", + // [Auto-translated] "Edit" + edit: "Redigere", + // [Auto-translated] "Expand" + expand: "Espandere", + // [Auto-translated] "Collapse" + collapse: "Collasso", + // [Auto-translated] "Remove" + remove: "Togliere", + // [Auto-translated] "Add" + add: "Aggiungere", + // [Auto-translated] "Delete" + delete: "Cancellare" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Preset Creator", + // [Auto-translated] "Preset JSON:" + presetJson: "JSON preimpostato:", + // [Auto-translated] "Copy" + copy: "Copiare", + // [Auto-translated] "Download" + download: "Scaricare", + // [Auto-translated] "Load" + load: "Carico", + // [Auto-translated] "Save & Exit" + saveExit: "Salva ed esci", + // [Auto-translated] "Back" + back: "Indietro", + // [Auto-translated] "Reset to default" + resetToDefault: "Ripristina le impostazioni predefinite", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Tutte le impostazioni sono state ripristinate ai valori predefiniti", + // [Auto-translated] "resored to default" + resoredToDefault: "risorto in default", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Elemento ripristinato ai valori predefiniti", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Categoria ripristinata ai valori predefiniti", + // [Auto-translated] "Edit" + edit: "Redigere", + // [Auto-translated] "Save & Exit" + completeText: "Salva ed esci", + // [Auto-translated] "Back" + pagePrevText: "Indietro" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Preset", + // [Auto-translated] "Creator Presets" + creatorPresets: "Preset Creator", + // [Auto-translated] "Save & Exit" + save: "Salva ed esci", + // [Auto-translated] "File" + file: "File", + // [Auto-translated] "Import" + import: "Importazione", + // [Auto-translated] "Export" + export: "Esportazione", + // [Auto-translated] "Edit" + edit: "Redigere", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Ripristina le lingue ai valori predefiniti", + // [Auto-translated] "Reset all changes" + resetAll: "Ripristina tutte le modifiche", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Ripristina {0} ai valori predefiniti" + } +}; +const locale = getLocaleStrings("it"); +locale.presets = itStrings; diff --git a/packages/survey-creator-core/src/presets/localization/japanese.ts b/packages/survey-creator-core/src/presets/localization/japanese.ts new file mode 100644 index 0000000000..571d9540dc --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/japanese.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const jaStrings = { + languages: { + // [Auto-translated] "Languages" + title: "言語", + // [Auto-translated] "Languages" + navigationTitle: "言語", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "アンケート作成ツールのUIとターゲットの言語を選択します\n構成中の調査の言語。", + // [Auto-translated] "Creator UI language" + creatorUI: "クリエイター UI 言語", + // [Auto-translated] "Survey languages" + surveyLanguages: "調査言語", + // [Auto-translated] "Type to search..." + searchPlaceholder: "検索するには入力します...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "調査の言語名を英語に翻訳する" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "タブの構成", + // [Auto-translated] "Tabs" + navigationTitle: "タブ", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "表示したいタブを選択し、並べ替えたり、タイトルを変更したり、\nをクリックし、デフォルトでアクティブになるタブを選択します。", + // [Auto-translated] "Visible tabs" + items: "表示タブ", + // [Auto-translated] "Hidden tabs" + hiddenItems: "非表示のタブ", + // [Auto-translated] "Default tab" + defaultTab: "[デフォルト] タブ", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "タブをここにドラッグして表示します", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "タブをここにドラッグして非表示にします", + // [Auto-translated] "Name" + name: "名前", + // [Auto-translated] "Title" + titleField: "タイトル", + // [Auto-translated] "Icon name" + iconName: "アイコン名" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "ツールボックスを設定する", + // [Auto-translated] "Toolbox" + navigationTitle: "ツールボックス", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "表示するツールボックス項目を選択し、カテゴリにグループ化します。\n名前を変更し、必要に応じて順序を変更します。", + // [Auto-translated] "Toolbox" + toolbox: "ツールボックス", + // [Auto-translated] "Categories" + categories: "カテゴリ", + // [Auto-translated] "No categories" + noCategoriesText: "カテゴリなし", + // [Auto-translated] "Drag items here to show them" + noItemsText: "項目をここにドラッグして表示します", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "アイテムをここにドラッグして非表示にします", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "非表示のツールボックス項目", + // [Auto-translated] "Enable grouping" + enableGrouping: "グループ化を有効にする", + // [Auto-translated] "Show category titles" + showCategoryTitles: "カテゴリ タイトルを表示する", + // [Auto-translated] "Name" + categoryName: "名前", + // [Auto-translated] "Title" + categoryTitle: "タイトル", + // [Auto-translated] "Tooltip" + tooltip: "ツールチップ", + // [Auto-translated] "Icon name" + iconName: "アイコン名", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "ユーザーがこのツールボックス項目を選択したときに適用する JSON オブジェクト", + // [Auto-translated] "Subcategories" + subitems: "サブカテゴリ", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "この質問のサブ項目を有効にしてください...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "サブアイテムとして移動する...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "ツールボックスに追加", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "カスタムアイテムの削除", + // [Auto-translated] "New Category" + addCustomCategory: "新しいカテゴリ", + // [Auto-translated] "New Item" + addCustomItem: "新商品", + // [Auto-translated] "Add a new item" + addNewItem: "新しい項目を追加する", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "新しいサブアイテムの追加", + // [Auto-translated] "There are no items" + noRowsText: "アイテムはありません", + // [Auto-translated] "New item in" + newItem: "新しいアイテム" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "プロパティグリッドのカスタマイズ", + // [Auto-translated] "Property Grid" + navigationTitle: "プロパティグリッド", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "要素を選択して、プロパティ グリッドで使用できる設定をカスタマイズします。", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "要素を選択して、プロパティグリッドで利用可能な設定をカスタマイズします", + // [Auto-translated] "Property Grid" + propertyGrid: "プロパティグリッド", + // [Auto-translated] "No categories" + noCategoriesText: "カテゴリなし", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "プロパティをここにドラッグして表示します", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "ここにプロパティをドラッグして非表示にします", + // [Auto-translated] "Unsorted items" + hiddenItems: "未ソートのアイテム", + // [Auto-translated] "Name" + categoryName: "名前", + // [Auto-translated] "Title" + categoryTitle: "タイトル", + // [Auto-translated] "Icon name" + iconName: "アイコン名", + // [Auto-translated] "Name" + name: "名前", + // [Auto-translated] "Title" + titleField: "タイトル", + // [Auto-translated] "Helper Text" + descriptionField: "ヘルパーテキスト", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "カスタムカテゴリの追加" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "新しい項目を追加する", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "新しいサブアイテムの追加", + // [Auto-translated] "New item in" + newItem: "新しいアイテム", + // [Auto-translated] "New Category" + addCustomCategory: "新しいカテゴリ", + // [Auto-translated] "New category in" + newCategory: "新しいカテゴリ", + // [Auto-translated] "Move to category..." + moveToCategory: "カテゴリへ移動...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "新しいカテゴリに移動...", + // [Auto-translated] "Categories" + categoriesLabel: "カテゴリ", + // [Auto-translated] "Move To..." + moveTo: "移動先...", + // [Auto-translated] "Remove from {0}" + removeFrom: "{0}から削除", + // [Auto-translated] "More" + more: "もっとその", + // [Auto-translated] "Restore" + restoreToDefault: "戻す", + // [Auto-translated] "Edit" + edit: "編集", + // [Auto-translated] "Expand" + expand: "膨らむ", + // [Auto-translated] "Collapse" + collapse: "倒れる", + // [Auto-translated] "Remove" + remove: "取り去る", + // [Auto-translated] "Add" + add: "足す", + // [Auto-translated] "Delete" + delete: "削除" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "クリエイタープリセット", + // [Auto-translated] "Preset JSON:" + presetJson: "プリセットJSON:", + // [Auto-translated] "Copy" + copy: "写し", + // [Auto-translated] "Download" + download: "ダウンロード", + // [Auto-translated] "Load" + load: "負荷", + // [Auto-translated] "Save & Exit" + saveExit: "保存して終了", + // [Auto-translated] "Back" + back: "戻る", + // [Auto-translated] "Reset to default" + resetToDefault: "デフォルトにリセット", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "すべての設定がデフォルトに復元されました", + // [Auto-translated] "resored to default" + resoredToDefault: "デフォルトにリセット", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "既定に復元されたアイテム", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "カテゴリがデフォルトに復元されました", + // [Auto-translated] "Edit" + edit: "編集", + // [Auto-translated] "Save & Exit" + completeText: "保存して終了", + // [Auto-translated] "Back" + pagePrevText: "戻る" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "プリセット", + // [Auto-translated] "Creator Presets" + creatorPresets: "クリエイタープリセット", + // [Auto-translated] "Save & Exit" + save: "保存して終了", + // [Auto-translated] "File" + file: "ファイル", + // [Auto-translated] "Import" + import: "輸入", + // [Auto-translated] "Export" + export: "輸出", + // [Auto-translated] "Edit" + edit: "編集", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "言語をデフォルトにリセットする", + // [Auto-translated] "Reset all changes" + resetAll: "すべての変更をリセットする", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "{0}をデフォルトにリセットする" + } +}; +const locale = getLocaleStrings("ja"); +locale.presets = jaStrings; diff --git a/packages/survey-creator-core/src/presets/localization/korean.ts b/packages/survey-creator-core/src/presets/localization/korean.ts new file mode 100644 index 0000000000..54037989e2 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/korean.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const koStrings = { + languages: { + // [Auto-translated] "Languages" + title: "언어들", + // [Auto-translated] "Languages" + navigationTitle: "언어들", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "설문조사 작성자 UI 및 타겟의 언어를 선택합니다.\n구성 중인 설문 조사의 언어입니다.", + // [Auto-translated] "Creator UI language" + creatorUI: "크리에이터 UI 언어", + // [Auto-translated] "Survey languages" + surveyLanguages: "설문조사 언어", + // [Auto-translated] "Type to search..." + searchPlaceholder: "검색하려면 입력...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "현장조사 언어 이름을 영어로 번역" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "탭 구성", + // [Auto-translated] "Tabs" + navigationTitle: "탭", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "표시하려는 탭을 선택하고, 순서를 변경하고, 제목을 변경하고,\n을 클릭하고 기본적으로 활성화될 탭을 선택합니다.", + // [Auto-translated] "Visible tabs" + items: "표시되는 탭", + // [Auto-translated] "Hidden tabs" + hiddenItems: "숨겨진 탭", + // [Auto-translated] "Default tab" + defaultTab: "기본 탭", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "탭을 여기로 드래그하여 표시합니다.", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "탭을 여기로 드래그하여 숨깁니다.", + // [Auto-translated] "Name" + name: "이름", + // [Auto-translated] "Title" + titleField: "타이틀", + // [Auto-translated] "Icon name" + iconName: "아이콘 이름" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "도구 상자 설정", + // [Auto-translated] "Toolbox" + navigationTitle: "도구", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "표시하려는 도구 상자 항목을 선택하고 범주로 그룹화하고, \n이름을 바꾸고 필요한 경우 순서를 변경합니다.", + // [Auto-translated] "Toolbox" + toolbox: "도구", + // [Auto-translated] "Categories" + categories: "카테고리", + // [Auto-translated] "No categories" + noCategoriesText: "카테고리 없음", + // [Auto-translated] "Drag items here to show them" + noItemsText: "항목을 여기로 드래그하여 표시합니다.", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "항목을 여기로 드래그하여 숨깁니다.", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "숨겨진 도구 상자 항목", + // [Auto-translated] "Enable grouping" + enableGrouping: "그룹화 사용", + // [Auto-translated] "Show category titles" + showCategoryTitles: "카테고리 제목 표시", + // [Auto-translated] "Name" + categoryName: "이름", + // [Auto-translated] "Title" + categoryTitle: "타이틀", + // [Auto-translated] "Tooltip" + tooltip: "툴팁", + // [Auto-translated] "Icon name" + iconName: "아이콘 이름", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "사용자가 이 도구 상자 항목을 선택할 때 적용할 JSON 개체", + // [Auto-translated] "Subcategories" + subitems: "하위 범주", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "이 질문에 대한 하위 항목 활성화...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "하위 항목으로 이동...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "도구 상자에 추가", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "사용자 지정 항목 삭제", + // [Auto-translated] "New Category" + addCustomCategory: "새 카테고리", + // [Auto-translated] "New Item" + addCustomItem: "새 항목", + // [Auto-translated] "Add a new item" + addNewItem: "새 항목 추가", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "새 하위 항목 추가", + // [Auto-translated] "There are no items" + noRowsText: "항목이 없습니다.", + // [Auto-translated] "New item in" + newItem: "새 항목" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "속성 그리드 사용자 지정", + // [Auto-translated] "Property Grid" + navigationTitle: "속성 그리드", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "요소를 선택하여 속성 그리드에서 사용할 수 있는 설정을 사용자 정의합니다.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "요소를 선택하여 속성 그리드에서 사용할 수 있는 설정을 사용자 지정합니다", + // [Auto-translated] "Property Grid" + propertyGrid: "속성 그리드", + // [Auto-translated] "No categories" + noCategoriesText: "카테고리 없음", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "속성을 여기로 드래그하여 표시합니다.", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "속성을 여기로 드래그하여 숨깁니다.", + // [Auto-translated] "Unsorted items" + hiddenItems: "정렬되지 않은 항목", + // [Auto-translated] "Name" + categoryName: "이름", + // [Auto-translated] "Title" + categoryTitle: "타이틀", + // [Auto-translated] "Icon name" + iconName: "아이콘 이름", + // [Auto-translated] "Name" + name: "이름", + // [Auto-translated] "Title" + titleField: "타이틀", + // [Auto-translated] "Helper Text" + descriptionField: "도우미 텍스트", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "사용자 지정 범주 추가" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "새 항목 추가", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "새 하위 항목 추가", + // [Auto-translated] "New item in" + newItem: "새 항목", + // [Auto-translated] "New Category" + addCustomCategory: "새 카테고리", + // [Auto-translated] "New category in" + newCategory: "의 새 범주", + // [Auto-translated] "Move to category..." + moveToCategory: "카테고리로 이동...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "새 카테고리로 이동...", + // [Auto-translated] "Categories" + categoriesLabel: "카테고리", + // [Auto-translated] "Move To..." + moveTo: "이동...", + // [Auto-translated] "Remove from {0}" + removeFrom: "{0}에서 제거", + // [Auto-translated] "More" + more: "더", + // [Auto-translated] "Restore" + restoreToDefault: "복원", + // [Auto-translated] "Edit" + edit: "편집하다", + // [Auto-translated] "Expand" + expand: "넓히다", + // [Auto-translated] "Collapse" + collapse: "무너지다", + // [Auto-translated] "Remove" + remove: "제거하다", + // [Auto-translated] "Add" + add: "더하다", + // [Auto-translated] "Delete" + delete: "삭제하다" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "크리에이터 프리셋", + // [Auto-translated] "Preset JSON:" + presetJson: "사전 설정 JSON:", + // [Auto-translated] "Copy" + copy: "복사", + // [Auto-translated] "Download" + download: "다운로드", + // [Auto-translated] "Load" + load: "부하", + // [Auto-translated] "Save & Exit" + saveExit: "저장 및 종료", + // [Auto-translated] "Back" + back: "뒤로", + // [Auto-translated] "Reset to default" + resetToDefault: "기본값으로 재설정", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "모든 설정이 기본값으로 복원됨", + // [Auto-translated] "resored to default" + resoredToDefault: "기본값으로 변경", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "항목이 기본값으로 복원됨", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "기본값으로 복원된 범주", + // [Auto-translated] "Edit" + edit: "편집하다", + // [Auto-translated] "Save & Exit" + completeText: "저장 및 종료", + // [Auto-translated] "Back" + pagePrevText: "뒤로" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "프리셋", + // [Auto-translated] "Creator Presets" + creatorPresets: "크리에이터 프리셋", + // [Auto-translated] "Save & Exit" + save: "저장 및 종료", + // [Auto-translated] "File" + file: "파일", + // [Auto-translated] "Import" + import: "수입", + // [Auto-translated] "Export" + export: "수출", + // [Auto-translated] "Edit" + edit: "편집하다", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "언어를 기본값으로 재설정", + // [Auto-translated] "Reset all changes" + resetAll: "모든 변경 사항 재설정", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "{0} 기본값으로 재설정" + } +}; +const locale = getLocaleStrings("ko"); +locale.presets = koStrings; diff --git a/packages/survey-creator-core/src/presets/localization/malay.ts b/packages/survey-creator-core/src/presets/localization/malay.ts new file mode 100644 index 0000000000..edc58bc129 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/malay.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const msStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Bahasa-bahasa", + // [Auto-translated] "Languages" + navigationTitle: "Bahasa-bahasa", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Pilih bahasa UI dan sasaran Pencipta Tinjauan\nbahasa untuk tinjauan yang sedang dikonfigurasikan.", + // [Auto-translated] "Creator UI language" + creatorUI: "Bahasa UI pencipta", + // [Auto-translated] "Survey languages" + surveyLanguages: "Bahasa tinjauan", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Taip untuk mencari...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Terjemah nama bahasa Tinjauan ke bahasa Inggeris" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Konfigurasikan tab", + // [Auto-translated] "Tabs" + navigationTitle: "Tab", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Pilih tab yang anda mahu tunjukkan, susun semula, tukar tajuk mereka,\ndan pilih tab yang akan aktif secara lalai.", + // [Auto-translated] "Visible tabs" + items: "Tab yang boleh dilihat", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Tab tersembunyi", + // [Auto-translated] "Default tab" + defaultTab: "Tab lalai", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Seret tab di sini untuk menunjukkannya", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Seret tab di sini untuk menyembunyikannya", + // [Auto-translated] "Name" + name: "Nama", + // [Auto-translated] "Title" + titleField: "Tajuk", + // [Auto-translated] "Icon name" + iconName: "Nama ikon" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Sediakan Kotak Alat", + // [Auto-translated] "Toolbox" + navigationTitle: "Toolbox", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Pilih item kotak alat yang ingin anda tunjukkan, kumpulkannya ke dalam kategori, \nNamakan semula mereka, dan tukar pesanan mereka jika perlu.", + // [Auto-translated] "Toolbox" + toolbox: "Toolbox", + // [Auto-translated] "Categories" + categories: "Kategori", + // [Auto-translated] "No categories" + noCategoriesText: "Tiada kategori", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Seret item di sini untuk menunjukkannya", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Seret item ke sini untuk menyembunyikannya", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Item kotak alat tersembunyi", + // [Auto-translated] "Enable grouping" + enableGrouping: "Dayakan pengumpulan", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Tunjukkan tajuk kategori", + // [Auto-translated] "Name" + categoryName: "Nama", + // [Auto-translated] "Title" + categoryTitle: "Tajuk", + // [Auto-translated] "Tooltip" + tooltip: "Petua alat", + // [Auto-translated] "Icon name" + iconName: "Nama ikon", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Objek JSON untuk digunakan apabila pengguna memilih item kotak alat ini", + // [Auto-translated] "Subcategories" + subitems: "Subkategori", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Dayakan subitem untuk soalan ini...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Bergerak sebagai subitem ke...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Tambah ke Kotak Alat", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Padamkan Item Tersuai", + // [Auto-translated] "New Category" + addCustomCategory: "Kategori Baru", + // [Auto-translated] "New Item" + addCustomItem: "Item Baru", + // [Auto-translated] "Add a new item" + addNewItem: "Tambah item baharu", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Tambah subitem baharu", + // [Auto-translated] "There are no items" + noRowsText: "Tiada item", + // [Auto-translated] "New item in" + newItem: "Item baru dalam" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Sesuaikan Grid Harta", + // [Auto-translated] "Property Grid" + navigationTitle: "Grid Harta", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Pilih elemen untuk menyesuaikan tetapannya yang tersedia dalam Grid Property.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Pilih elemen untuk menyesuaikan tetapannya yang tersedia dalam Grid Sifat", + // [Auto-translated] "Property Grid" + propertyGrid: "Grid Harta", + // [Auto-translated] "No categories" + noCategoriesText: "Tiada kategori", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Seret sifat di sini untuk menunjukkannya", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Seret sifat di sini untuk menyembunyikannya", + // [Auto-translated] "Unsorted items" + hiddenItems: "Item yang tidak diisih", + // [Auto-translated] "Name" + categoryName: "Nama", + // [Auto-translated] "Title" + categoryTitle: "Tajuk", + // [Auto-translated] "Icon name" + iconName: "Nama ikon", + // [Auto-translated] "Name" + name: "Nama", + // [Auto-translated] "Title" + titleField: "Tajuk", + // [Auto-translated] "Helper Text" + descriptionField: "Teks Pembantu", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Tambah Kategori Tersuai" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Tambah item baharu", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Tambah subitem baharu", + // [Auto-translated] "New item in" + newItem: "Item baru dalam", + // [Auto-translated] "New Category" + addCustomCategory: "Kategori Baru", + // [Auto-translated] "New category in" + newCategory: "Kategori baru dalam", + // [Auto-translated] "Move to category..." + moveToCategory: "Pindah ke kategori...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Beralih ke kategori baru...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategori", + // [Auto-translated] "Move To..." + moveTo: "Beralih ke...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Alih keluar dari {0}", + // [Auto-translated] "More" + more: "Lebih banyak", + // [Auto-translated] "Restore" + restoreToDefault: "Ambil semula", + // [Auto-translated] "Edit" + edit: "Edit", + // [Auto-translated] "Expand" + expand: "Mengembangkan", + // [Auto-translated] "Collapse" + collapse: "Runtuh", + // [Auto-translated] "Remove" + remove: "Mengalih keluar", + // [Auto-translated] "Add" + add: "Menambah", + // [Auto-translated] "Delete" + delete: "Menghapuskan" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Pratetap Pencipta", + // [Auto-translated] "Preset JSON:" + presetJson: "JSON pratetap:", + // [Auto-translated] "Copy" + copy: "Menyalin", + // [Auto-translated] "Download" + download: "Muat turun", + // [Auto-translated] "Load" + load: "Memuatkan", + // [Auto-translated] "Save & Exit" + saveExit: "Simpan & Keluar", + // [Auto-translated] "Back" + back: "Kembali", + // [Auto-translated] "Reset to default" + resetToDefault: "Tetapkan semula kepada lalai", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Semua tetapan dipulihkan kepada lalai", + // [Auto-translated] "resored to default" + resoredToDefault: "dikembalikan kepada lalai", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Item dipulihkan kepada lalai", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategori dipulihkan kepada lalai", + // [Auto-translated] "Edit" + edit: "Edit", + // [Auto-translated] "Save & Exit" + completeText: "Simpan & Keluar", + // [Auto-translated] "Back" + pagePrevText: "Kembali" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Pratetap", + // [Auto-translated] "Creator Presets" + creatorPresets: "Pratetap Pencipta", + // [Auto-translated] "Save & Exit" + save: "Simpan & Keluar", + // [Auto-translated] "File" + file: "Fail", + // [Auto-translated] "Import" + import: "Import", + // [Auto-translated] "Export" + export: "Eksport", + // [Auto-translated] "Edit" + edit: "Edit", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Tetapkan semula Bahasa kepada lalai", + // [Auto-translated] "Reset all changes" + resetAll: "Tetapkan semula semua perubahan", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Tetapkan semula {0} kepada lalai" + } +}; +const locale = getLocaleStrings("ms"); +locale.presets = msStrings; diff --git a/packages/survey-creator-core/src/presets/localization/mongolian.ts b/packages/survey-creator-core/src/presets/localization/mongolian.ts new file mode 100644 index 0000000000..6cc0ce8120 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/mongolian.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const mnStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Хэл", + // [Auto-translated] "Languages" + navigationTitle: "Хэл", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Survey Creator UI-ийн хэл болон зорилгоо сонго\nтохируулж буй судалгааны хэлнүүд.", + // [Auto-translated] "Creator UI language" + creatorUI: "Creator UI хэл", + // [Auto-translated] "Survey languages" + surveyLanguages: "Судалгааны хэлнүүд", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Хайх гэж бич...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Судалгааны хэлний нэрсийг англи хэл рүү орчуул" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Табуудыг тохируулах", + // [Auto-translated] "Tabs" + navigationTitle: "Таб", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Үзүүлэхийг хүссэн табуудаа сонгож, дарааллыг нь өөрчилж, гарчгийг нь өөрчилж,\nстандарт байдлаар идэвхтэй байх табыг сонгоно.", + // [Auto-translated] "Visible tabs" + items: "Харагдах таб", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Нуугдмал таб", + // [Auto-translated] "Default tab" + defaultTab: "Default tab", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Үзүүлэхийн тулд tab-уудыг энд чирч оруулна уу", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Тэдгээрийг нуухын тулд табуудыг энд чирч оруул", + // [Auto-translated] "Name" + name: "Нэр", + // [Auto-translated] "Title" + titleField: "Гарчиг", + // [Auto-translated] "Icon name" + iconName: "Icon name" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Toolbox-ыг тохируулах", + // [Auto-translated] "Toolbox" + navigationTitle: "Toolbox", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Үзүүлэхийг хүссэн toolbox зүйлсээ сонгоод ангилалд хувааж \nнэрийг нь өөрчилж, шаардлагатай бол дарааллыг нь өөрчил.", + // [Auto-translated] "Toolbox" + toolbox: "Toolbox", + // [Auto-translated] "Categories" + categories: "Ангилал", + // [Auto-translated] "No categories" + noCategoriesText: "Ангилал байхгүй", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Үзүүлэхийн тулд энд чирч оруул", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Нуухын тулд энд чирч оруул", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Нуугдмал хэрэгслийн зүйлс", + // [Auto-translated] "Enable grouping" + enableGrouping: "Бүлэглэлийг идэвхжүүлэх", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Ангилалын гарчгийг үзүүлэх", + // [Auto-translated] "Name" + categoryName: "Нэр", + // [Auto-translated] "Title" + categoryTitle: "Гарчиг", + // [Auto-translated] "Tooltip" + tooltip: "Tooltip", + // [Auto-translated] "Icon name" + iconName: "Icon name", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON объект хэрэглэгчид энэ toolbox элементийг сонгоход хэрэглэнэ", + // [Auto-translated] "Subcategories" + subitems: "Дэд ангилал", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Энэ асуултын дэд элементүүдийг идэвхжүүл...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Дэд зүйл болгон шилжүүлнэ...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Toolbox-д оруулах", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Custom item устгах", + // [Auto-translated] "New Category" + addCustomCategory: "Шинэ ангилал", + // [Auto-translated] "New Item" + addCustomItem: "Шинэ зүйл", + // [Auto-translated] "Add a new item" + addNewItem: "Шинэ зүйл нэмж оруул", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Шинэ дэд элемент нэм��х", + // [Auto-translated] "There are no items" + noRowsText: "Ямар ч зүйл байхгүй", + // [Auto-translated] "New item in" + newItem: "Шинэ зүйл" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Property grid-ийг тохируулах", + // [Auto-translated] "Property Grid" + navigationTitle: "Өмч хөрөнгийн сүлжээ", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Property Grid-д байгаа тохиргоог нь тохируулахын тулд элементийг сонго.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Property Grid-д байгаа тохиргоог нь тохируулах элементийг сонго", + // [Auto-translated] "Property Grid" + propertyGrid: "Өмч хөрөнгийн сүлжээ", + // [Auto-translated] "No categories" + noCategoriesText: "Ангилал байхгүй", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Үзүүлэхийн тулд энд чирэгдүүл", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Шинж чанаруудыг нуухын тулд энд чирч оруул", + // [Auto-translated] "Unsorted items" + hiddenItems: "Ангилаагүй зүйлс", + // [Auto-translated] "Name" + categoryName: "Нэр", + // [Auto-translated] "Title" + categoryTitle: "Гарчиг", + // [Auto-translated] "Icon name" + iconName: "Icon name", + // [Auto-translated] "Name" + name: "Нэр", + // [Auto-translated] "Title" + titleField: "Гарчиг", + // [Auto-translated] "Helper Text" + descriptionField: "Туслах текст", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Custom Category нэмэх" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Шинэ зүйл нэмж оруул", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Шинэ дэд элемент нэм��х", + // [Auto-translated] "New item in" + newItem: "Шинэ зүйл", + // [Auto-translated] "New Category" + addCustomCategory: "Шинэ ангилал", + // [Auto-translated] "New category in" + newCategory: "Шинэ ангилал", + // [Auto-translated] "Move to category..." + moveToCategory: "Ангилал руу шилжүүл...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Шинэ ангилал руу шилжүүл...", + // [Auto-translated] "Categories" + categoriesLabel: "Ангилал", + // [Auto-translated] "Move To..." + moveTo: "Нүүх ...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Хас {0}", + // [Auto-translated] "More" + more: "Илүү", + // [Auto-translated] "Restore" + restoreToDefault: "Сэргээх", + // [Auto-translated] "Edit" + edit: "Засварлах", + // [Auto-translated] "Expand" + expand: "Өргөтгөх", + // [Auto-translated] "Collapse" + collapse: "Унах", + // [Auto-translated] "Remove" + remove: "Хас", + // [Auto-translated] "Add" + add: "Нэмэх", + // [Auto-translated] "Delete" + delete: "Устгах" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Бүтээгчийн урьдчилсан сет", + // [Auto-translated] "Preset JSON:" + presetJson: "Урьдчилсан тохируулга JSON:", + // [Auto-translated] "Copy" + copy: "Хуулбарлах", + // [Auto-translated] "Download" + download: "Татаж авах", + // [Auto-translated] "Load" + load: "Ачаа", + // [Auto-translated] "Save & Exit" + saveExit: "Хадгалах & Гарах", + // [Auto-translated] "Back" + back: "Буцах", + // [Auto-translated] "Reset to default" + resetToDefault: "Default руу reset", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Бүх тохиргоог default байдалд сэргээсэн", + // [Auto-translated] "resored to default" + resoredToDefault: "Default руу дахин орсон", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Item default-д сэргээгдсэн", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Категори default байдалд сэргээгдсэн", + // [Auto-translated] "Edit" + edit: "Засварлах", + // [Auto-translated] "Save & Exit" + completeText: "Хадгалах & Гарах", + // [Auto-translated] "Back" + pagePrevText: "Буцах" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Урьдчилсан тохируулга", + // [Auto-translated] "Creator Presets" + creatorPresets: "Бүтээгчийн урьдчилсан сет", + // [Auto-translated] "Save & Exit" + save: "Хадгалах & Гарах", + // [Auto-translated] "File" + file: "Файл", + // [Auto-translated] "Import" + import: "Импорт", + // [Auto-translated] "Export" + export: "Экспорт", + // [Auto-translated] "Edit" + edit: "Засварлах", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Хэлнүүдийг default болгож өөрчлөх", + // [Auto-translated] "Reset all changes" + resetAll: "Бүх өөрчлөлтийг сэргээ", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Стандарт {0}" + } +}; +const locale = getLocaleStrings("mn"); +locale.presets = mnStrings; diff --git a/packages/survey-creator-core/src/presets/localization/norwegian.ts b/packages/survey-creator-core/src/presets/localization/norwegian.ts new file mode 100644 index 0000000000..164572c2df --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/norwegian.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const nbStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Språk", + // [Auto-translated] "Languages" + navigationTitle: "Språk", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Velg språket for brukergrensesnittet og målet for undersøkelsesoppretteren\nspråk for undersøkelsen som konfigureres.", + // [Auto-translated] "Creator UI language" + creatorUI: "Språk for skapergrensesnitt", + // [Auto-translated] "Survey languages" + surveyLanguages: "Språk for undersøkelser", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Skriv for å søke...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Oversette navn på spørreundersøkelsesspråk til engelsk" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Konfigurere faner", + // [Auto-translated] "Tabs" + navigationTitle: "Kategoriene", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Velg fanene du vil vise, endre rekkefølgen på dem, endre titlene deres,\nog velg fanen som skal være aktiv som standard.", + // [Auto-translated] "Visible tabs" + items: "Synlige faner", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Skjulte faner", + // [Auto-translated] "Default tab" + defaultTab: "Standard-fanen", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Dra faner hit for å vise dem", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Dra faner hit for å skjule dem", + // [Auto-translated] "Name" + name: "Navn", + // [Auto-translated] "Title" + titleField: "Tittel", + // [Auto-translated] "Icon name" + iconName: "Navn på ikon" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Sett opp verktøykassen", + // [Auto-translated] "Toolbox" + navigationTitle: "Verktøykasse", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Velg verktøykasseelementene du vil vise, grupper dem i kategorier, \ngi dem nytt navn, og endre rekkefølgen om nødvendig.", + // [Auto-translated] "Toolbox" + toolbox: "Verktøykasse", + // [Auto-translated] "Categories" + categories: "Kategorier", + // [Auto-translated] "No categories" + noCategoriesText: "Ingen kategorier", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Dra objekter hit for å vise dem", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Dra objekter hit for å skjule dem", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Skjulte elementer i verktøykassen", + // [Auto-translated] "Enable grouping" + enableGrouping: "Aktivere gruppering", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Vis kategorititler", + // [Auto-translated] "Name" + categoryName: "Navn", + // [Auto-translated] "Title" + categoryTitle: "Tittel", + // [Auto-translated] "Tooltip" + tooltip: "Verktøytips", + // [Auto-translated] "Icon name" + iconName: "Navn på ikon", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON-objekt som skal brukes når brukere velger dette verktøykasseelementet", + // [Auto-translated] "Subcategories" + subitems: "Underkategorier", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Aktiver underelementer for dette spørsmålet...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Flytt som et underelement til...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Legg til i verktøykassen", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Slett egendefinert element", + // [Auto-translated] "New Category" + addCustomCategory: "Ny kategori", + // [Auto-translated] "New Item" + addCustomItem: "Nytt element", + // [Auto-translated] "Add a new item" + addNewItem: "Legg til et nytt element", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Legge til et nytt underelement", + // [Auto-translated] "There are no items" + noRowsText: "Det er ingen varer", + // [Auto-translated] "New item in" + newItem: "Nytt element i" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Tilpasse egenskapsrutenettet", + // [Auto-translated] "Property Grid" + navigationTitle: "Eiendom rutenett", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Velg et element for å tilpasse innstillingene som er tilgjengelige i egenskapsrutenettet.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Velg et element for å tilpasse innstillingene som er tilgjengelige i egenskapsrutenettet", + // [Auto-translated] "Property Grid" + propertyGrid: "Eiendom rutenett", + // [Auto-translated] "No categories" + noCategoriesText: "Ingen kategorier", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Dra egenskaper hit for å vise dem", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Dra egenskaper hit for å skjule dem", + // [Auto-translated] "Unsorted items" + hiddenItems: "Usorterte elementer", + // [Auto-translated] "Name" + categoryName: "Navn", + // [Auto-translated] "Title" + categoryTitle: "Tittel", + // [Auto-translated] "Icon name" + iconName: "Navn på ikon", + // [Auto-translated] "Name" + name: "Navn", + // [Auto-translated] "Title" + titleField: "Tittel", + // [Auto-translated] "Helper Text" + descriptionField: "Tekst til hjelper", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Legg til egendefinert kategori" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Legg til et nytt element", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Legge til et nytt underelement", + // [Auto-translated] "New item in" + newItem: "Nytt element i", + // [Auto-translated] "New Category" + addCustomCategory: "Ny kategori", + // [Auto-translated] "New category in" + newCategory: "Ny kategori i", + // [Auto-translated] "Move to category..." + moveToCategory: "Flytt til kategori...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Flytt til ny kategori...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategorier", + // [Auto-translated] "Move To..." + moveTo: "Flytt til...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Fjern fra {0}", + // [Auto-translated] "More" + more: "Mer", + // [Auto-translated] "Restore" + restoreToDefault: "Gjenopprette", + // [Auto-translated] "Edit" + edit: "Redigere", + // [Auto-translated] "Expand" + expand: "Utvide", + // [Auto-translated] "Collapse" + collapse: "Sammenbrudd", + // [Auto-translated] "Remove" + remove: "Fjerne", + // [Auto-translated] "Add" + add: "Tilføye", + // [Auto-translated] "Delete" + delete: "Slette" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Forhåndsinnstillinger for skapere", + // [Auto-translated] "Preset JSON:" + presetJson: "Forhåndsinnstilt JSON:", + // [Auto-translated] "Copy" + copy: "Kopi", + // [Auto-translated] "Download" + download: "Laste ned", + // [Auto-translated] "Load" + load: "Belastning", + // [Auto-translated] "Save & Exit" + saveExit: "Lagre og avslutt", + // [Auto-translated] "Back" + back: "Tilbake", + // [Auto-translated] "Reset to default" + resetToDefault: "Tilbakestill til standard", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Alle innstillinger gjenopprettet til standard", + // [Auto-translated] "resored to default" + resoredToDefault: "Omgjort til standard", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Element gjenopprettet til standard", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategori gjenopprettet til standard", + // [Auto-translated] "Edit" + edit: "Redigere", + // [Auto-translated] "Save & Exit" + completeText: "Lagre og avslutt", + // [Auto-translated] "Back" + pagePrevText: "Tilbake" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Forhåndsinnstillinger", + // [Auto-translated] "Creator Presets" + creatorPresets: "Forhåndsinnstillinger for skapere", + // [Auto-translated] "Save & Exit" + save: "Lagre og avslutt", + // [Auto-translated] "File" + file: "Fil", + // [Auto-translated] "Import" + import: "Importere", + // [Auto-translated] "Export" + export: "Eksport", + // [Auto-translated] "Edit" + edit: "Redigere", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Tilbakestill språk til standard", + // [Auto-translated] "Reset all changes" + resetAll: "Tilbakestill alle endringer", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Tilbakestill {0} til standardinnstillinger" + } +}; +const locale = getLocaleStrings("nb"); +locale.presets = nbStrings; diff --git a/packages/survey-creator-core/src/presets/localization/persian.ts b/packages/survey-creator-core/src/presets/localization/persian.ts new file mode 100644 index 0000000000..6b6033517a --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/persian.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const faStrings = { + languages: { + // [Auto-translated] "Languages" + title: "زبان", + // [Auto-translated] "Languages" + navigationTitle: "زبان", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "زبان رابط کاربری Survey Creator و هدف را انتخاب کنید\nزبان هایی برای نظرسنجی پیکربندی شده است.", + // [Auto-translated] "Creator UI language" + creatorUI: "زبان رابط کاربری سازنده", + // [Auto-translated] "Survey languages" + surveyLanguages: "زبان های نظرسنجی", + // [Auto-translated] "Type to search..." + searchPlaceholder: "برای جستجو تایپ کنید...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "نام زبان های نظرسنجی را به انگلیسی ترجمه کنید" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "پیکربندی تب ها", + // [Auto-translated] "Tabs" + navigationTitle: "زبانه", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "برگه هایی را که می خواهید نشان دهید انتخاب کنید، آنها را تغییر دهید، عناوین آنها را تغییر دهید،\nو برگه ای را انتخاب کنید که به طور پیش فرض فعال خواهد بود.", + // [Auto-translated] "Visible tabs" + items: "برگه های قابل مشاهده", + // [Auto-translated] "Hidden tabs" + hiddenItems: "برگه های مخفی", + // [Auto-translated] "Default tab" + defaultTab: "برگه پیش فرض", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "برگه ها را به اینجا بکشید تا نشان داده شود", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "برگه ها را به اینجا بکشید تا پنهان شوند", + // [Auto-translated] "Name" + name: "نام", + // [Auto-translated] "Title" + titleField: "عنوان", + // [Auto-translated] "Icon name" + iconName: "نام نماد" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "جعبه ابزار را راه اندازی کنید", + // [Auto-translated] "Toolbox" + navigationTitle: "جعبه ابزار", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "موارد جعبه ابزاری را که می خواهید نشان دهید انتخاب کنید، آنها را در دسته ها گروه بندی کنید، \nنام آنها را تغییر دهید و در صورت لزوم ترتیب آنها را تغییر دهید.", + // [Auto-translated] "Toolbox" + toolbox: "جعبه ابزار", + // [Auto-translated] "Categories" + categories: "دسته", + // [Auto-translated] "No categories" + noCategoriesText: "بدون دسته بندی", + // [Auto-translated] "Drag items here to show them" + noItemsText: "موارد را به اینجا بکشید تا نشان داده شود", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "موارد را به اینجا بکشید تا پنهان شوند", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "موارد جعبه ابزار مخفی", + // [Auto-translated] "Enable grouping" + enableGrouping: "گروه بندی را فعال کنید", + // [Auto-translated] "Show category titles" + showCategoryTitles: "نمایش عناوین دسته بندی", + // [Auto-translated] "Name" + categoryName: "نام", + // [Auto-translated] "Title" + categoryTitle: "عنوان", + // [Auto-translated] "Tooltip" + tooltip: "Tooltip", + // [Auto-translated] "Icon name" + iconName: "نام نماد", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON برای اعمال زمانی که کاربران این مورد جعبه ابزار را انتخاب می کنند", + // [Auto-translated] "Subcategories" + subitems: "زیر مجموعه ها", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "موارد فرعی را برای این سوال فعال کنید...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "به عنوان یک زیر آیتم به...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "اضافه کردن به جعبه ابزار", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "حذف آیتم سفارشی", + // [Auto-translated] "New Category" + addCustomCategory: "دسته بندی جدید", + // [Auto-translated] "New Item" + addCustomItem: "مورد جدید", + // [Auto-translated] "Add a new item" + addNewItem: "افزودن مورد جدید", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "افزودن یک مورد فرعی ��دید", + // [Auto-translated] "There are no items" + noRowsText: "هیچ موردی وجود ندارد", + // [Auto-translated] "New item in" + newItem: "مورد جدید در" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "سفارشی سازی Property Grid", + // [Auto-translated] "Property Grid" + navigationTitle: "شبکه املاک", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "یک عنصر را انتخاب کنید تا تنظیمات موجود در Property Grid را سفارشی کنید.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "یک عنصر را برای سفارشی کردن تنظیمات موجود در Property Grid انتخاب کنید", + // [Auto-translated] "Property Grid" + propertyGrid: "شبکه املاک", + // [Auto-translated] "No categories" + noCategoriesText: "بدون دسته بندی", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "ویژگی ها را به اینجا بکشید تا به آنها نشان داده شود", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "ویژگی ها را به اینجا بکشید تا پنهان شوند", + // [Auto-translated] "Unsorted items" + hiddenItems: "موارد مرتب نشده", + // [Auto-translated] "Name" + categoryName: "نام", + // [Auto-translated] "Title" + categoryTitle: "عنوان", + // [Auto-translated] "Icon name" + iconName: "نام نماد", + // [Auto-translated] "Name" + name: "نام", + // [Auto-translated] "Title" + titleField: "عنوان", + // [Auto-translated] "Helper Text" + descriptionField: "متن کمکی", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "افزودن دسته بندی سفارشی" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "افزودن مورد جدید", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "افزودن یک مورد فرعی ��دید", + // [Auto-translated] "New item in" + newItem: "مورد جدید در", + // [Auto-translated] "New Category" + addCustomCategory: "دسته بندی جدید", + // [Auto-translated] "New category in" + newCategory: "دسته بندی جدید در", + // [Auto-translated] "Move to category..." + moveToCategory: "رفتن به دسته...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "رفتن به دسته بندی جدید...", + // [Auto-translated] "Categories" + categoriesLabel: "دسته", + // [Auto-translated] "Move To..." + moveTo: "حرکت به...", + // [Auto-translated] "Remove from {0}" + removeFrom: "حذف از {0}", + // [Auto-translated] "More" + more: "بیشتر", + // [Auto-translated] "Restore" + restoreToDefault: "بازیابی", + // [Auto-translated] "Edit" + edit: "ویرایش", + // [Auto-translated] "Expand" + expand: "گسترش", + // [Auto-translated] "Collapse" + collapse: "سقوط", + // [Auto-translated] "Remove" + remove: "حذف", + // [Auto-translated] "Add" + add: "اضافه کردن", + // [Auto-translated] "Delete" + delete: "حذف" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "از پیش تنظیم های سازنده", + // [Auto-translated] "Preset JSON:" + presetJson: "JSON از پیش تعیین شده:", + // [Auto-translated] "Copy" + copy: "کپی", + // [Auto-translated] "Download" + download: "دانلود", + // [Auto-translated] "Load" + load: "بار", + // [Auto-translated] "Save & Exit" + saveExit: "ذخیره و خروج", + // [Auto-translated] "Back" + back: "بازگشت", + // [Auto-translated] "Reset to default" + resetToDefault: "بازنشانی به حالت پیش فرض", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "همه تنظیمات به حالت پیش فرض بازگردانده شدند", + // [Auto-translated] "resored to default" + resoredToDefault: "به طور پیش فرض بازگردانده شده است", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "مورد به حالت پیش فرض بازگردانده شد", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "دسته بندی به حالت پیش فرض بازگردانده شد", + // [Auto-translated] "Edit" + edit: "ویرایش", + // [Auto-translated] "Save & Exit" + completeText: "ذخیره و خروج", + // [Auto-translated] "Back" + pagePrevText: "بازگشت" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "الگوها", + // [Auto-translated] "Creator Presets" + creatorPresets: "از پیش تنظیم های سازنده", + // [Auto-translated] "Save & Exit" + save: "ذخیره و خروج", + // [Auto-translated] "File" + file: "فایل", + // [Auto-translated] "Import" + import: "واردات", + // [Auto-translated] "Export" + export: "صادرات", + // [Auto-translated] "Edit" + edit: "ویرایش", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "بازنشانی زبان ها به حالت پیش فرض", + // [Auto-translated] "Reset all changes" + resetAll: "بازنشانی همه تغییرات", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "بازنشانی {0} به پیش فرض" + } +}; +const locale = getLocaleStrings("fa"); +locale.presets = faStrings; diff --git a/packages/survey-creator-core/src/presets/localization/polish.ts b/packages/survey-creator-core/src/presets/localization/polish.ts new file mode 100644 index 0000000000..efb6674017 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/polish.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const plStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Języki", + // [Auto-translated] "Languages" + navigationTitle: "Języki", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Wybierz język interfejsu użytkownika i celu kreatora ankiety\njęzyki dla konfigurowanej ankiety.", + // [Auto-translated] "Creator UI language" + creatorUI: "Język interfejsu twórcy", + // [Auto-translated] "Survey languages" + surveyLanguages: "Języki ankiety", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Wpisz, aby wyszukać...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Tłumaczenie nazw języków ankiety na język angielski" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Konfigurowanie kart", + // [Auto-translated] "Tabs" + navigationTitle: "Karty", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Wybierz zakładki, które chcesz wyświetlić, zmień ich kolejność, zmień ich tytuły,\ni wybierz kartę, która będzie domyślnie aktywna.", + // [Auto-translated] "Visible tabs" + items: "Widoczne zakładki", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Ukryte karty", + // [Auto-translated] "Default tab" + defaultTab: "Zakładka Domyślne", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Przeciągnij karty tutaj, aby je wyświetlić", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Przeciągnij karty tutaj, aby je ukryć", + // [Auto-translated] "Name" + name: "Nazwa", + // [Auto-translated] "Title" + titleField: "Tytuł", + // [Auto-translated] "Icon name" + iconName: "Nazwa ikony" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Konfigurowanie przybornika", + // [Auto-translated] "Toolbox" + navigationTitle: "Skrzynka z narzędziami", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Wybierz elementy przybornika, które chcesz wyświetlić, pogrupuj je w kategorie, \nZmień ich nazwy i zmień ich kolejność, jeśli jest to wymagane.", + // [Auto-translated] "Toolbox" + toolbox: "Skrzynka z narzędziami", + // [Auto-translated] "Categories" + categories: "Kategorie", + // [Auto-translated] "No categories" + noCategoriesText: "Brak kategorii", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Przeciągnij elementy tutaj, aby je wyświetlić", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Przeciągnij elementy tutaj, aby je ukryć", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Ukryte elementy przybornika", + // [Auto-translated] "Enable grouping" + enableGrouping: "Włączanie grupowania", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Pokaż tytuły kategorii", + // [Auto-translated] "Name" + categoryName: "Nazwa", + // [Auto-translated] "Title" + categoryTitle: "Tytuł", + // [Auto-translated] "Tooltip" + tooltip: "Podpowiedź", + // [Auto-translated] "Icon name" + iconName: "Nazwa ikony", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Obiekt JSON do zastosowania, gdy użytkownicy wybiorą ten element przybornika", + // [Auto-translated] "Subcategories" + subitems: "Podkategorie", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Włącz elementy podrzędne dla tego pytania...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Przenieś jako element podrzędny do...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Dodaj do przybornika", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Usuń element niestandardowy", + // [Auto-translated] "New Category" + addCustomCategory: "Nowa kategoria", + // [Auto-translated] "New Item" + addCustomItem: "Nowy przedmiot", + // [Auto-translated] "Add a new item" + addNewItem: "Dodawanie nowego elementu", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Dodawanie nowego elementu podrzędnego", + // [Auto-translated] "There are no items" + noRowsText: "Nie ma żadnych przedmiotów", + // [Auto-translated] "New item in" + newItem: "Nowy przedmiot w" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Dostosowywanie siatki właściwości", + // [Auto-translated] "Property Grid" + navigationTitle: "Siatka właściwości", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Wybierz element, aby dostosować jego ustawienia dostępne w siatce właściwości.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Wybierz element, aby dostosować jego ustawienia dostępne w siatce właściwości", + // [Auto-translated] "Property Grid" + propertyGrid: "Siatka właściwości", + // [Auto-translated] "No categories" + noCategoriesText: "Brak kategorii", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Przeciągnij właściwości tutaj, aby je wyświetlić", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Przeciągnij właściwości tutaj, aby je ukryć", + // [Auto-translated] "Unsorted items" + hiddenItems: "Nieposortowane przedmioty", + // [Auto-translated] "Name" + categoryName: "Nazwa", + // [Auto-translated] "Title" + categoryTitle: "Tytuł", + // [Auto-translated] "Icon name" + iconName: "Nazwa ikony", + // [Auto-translated] "Name" + name: "Nazwa", + // [Auto-translated] "Title" + titleField: "Tytuł", + // [Auto-translated] "Helper Text" + descriptionField: "Tekst pomocniczy", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Dodaj kategorię niestandardową" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Dodawanie nowego elementu", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Dodawanie nowego elementu podrzędnego", + // [Auto-translated] "New item in" + newItem: "Nowy przedmiot w", + // [Auto-translated] "New Category" + addCustomCategory: "Nowa kategoria", + // [Auto-translated] "New category in" + newCategory: "Nowa kategoria w", + // [Auto-translated] "Move to category..." + moveToCategory: "Przejdź do kategorii...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Przejdź do nowej kategorii...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategorie", + // [Auto-translated] "Move To..." + moveTo: "Przenieś się do...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Usuń z {0}", + // [Auto-translated] "More" + more: "Więcej", + // [Auto-translated] "Restore" + restoreToDefault: "Przywrócić", + // [Auto-translated] "Edit" + edit: "Redagować", + // [Auto-translated] "Expand" + expand: "Rozszerzać", + // [Auto-translated] "Collapse" + collapse: "Zapaść", + // [Auto-translated] "Remove" + remove: "Usunąć", + // [Auto-translated] "Add" + add: "Dodawać", + // [Auto-translated] "Delete" + delete: "Usunąć" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Ustawienia predefiniowane twórcy", + // [Auto-translated] "Preset JSON:" + presetJson: "Wstępnie ustawiony kod JSON:", + // [Auto-translated] "Copy" + copy: "Kopiować", + // [Auto-translated] "Download" + download: "Pobierać", + // [Auto-translated] "Load" + load: "Ładunek", + // [Auto-translated] "Save & Exit" + saveExit: "Zapisz i wyjdź", + // [Auto-translated] "Back" + back: "Wstecz", + // [Auto-translated] "Reset to default" + resetToDefault: "Przywróć ustawienia domyślne", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Wszystkie ustawienia przywrócone do wartości domyślnych", + // [Auto-translated] "resored to default" + resoredToDefault: "Resetowany do domyślnego", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Element przywrócony do wartości domyślnej", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategoria przywrócona do wartości domyślnej", + // [Auto-translated] "Edit" + edit: "Redagować", + // [Auto-translated] "Save & Exit" + completeText: "Zapisz i wyjdź", + // [Auto-translated] "Back" + pagePrevText: "Wstecz" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Ustawień", + // [Auto-translated] "Creator Presets" + creatorPresets: "Ustawienia predefiniowane twórcy", + // [Auto-translated] "Save & Exit" + save: "Zapisz i wyjdź", + // [Auto-translated] "File" + file: "Plik", + // [Auto-translated] "Import" + import: "Import", + // [Auto-translated] "Export" + export: "Eksport", + // [Auto-translated] "Edit" + edit: "Redagować", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Zresetuj języki do domyślnych", + // [Auto-translated] "Reset all changes" + resetAll: "Zresetuj wszystkie zmiany", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Resetowanie {0} do ustawień domyślnych" + } +}; +const locale = getLocaleStrings("pl"); +locale.presets = plStrings; diff --git a/packages/survey-creator-core/src/presets/localization/portuguese.ts b/packages/survey-creator-core/src/presets/localization/portuguese.ts new file mode 100644 index 0000000000..02be954bae --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/portuguese.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const ptStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Idiomas", + // [Auto-translated] "Languages" + navigationTitle: "Idiomas", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Selecione o idioma da interface do usuário e do Survey Creator\nidiomas para a pesquisa que está sendo configurada.", + // [Auto-translated] "Creator UI language" + creatorUI: "Idioma da interface do usuário do criador", + // [Auto-translated] "Survey languages" + surveyLanguages: "Idiomas da pesquisa", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Digite para pesquisar...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Traduzir nomes de idiomas de pesquisa para inglês" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Configurar guias", + // [Auto-translated] "Tabs" + navigationTitle: "Guias", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Selecione as guias que deseja mostrar, reordene-as, altere seus títulos,\ne escolha a guia que estará ativa por padrão.", + // [Auto-translated] "Visible tabs" + items: "Guias visíveis", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Guias ocultas", + // [Auto-translated] "Default tab" + defaultTab: "Guia Padrão", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Arraste as guias aqui para mostrá-las", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Arraste as guias aqui para ocultá-las", + // [Auto-translated] "Name" + name: "Nome", + // [Auto-translated] "Title" + titleField: "Título", + // [Auto-translated] "Icon name" + iconName: "Nome do ícone" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Configurar a caixa de ferramentas", + // [Auto-translated] "Toolbox" + navigationTitle: "Toolbox", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Selecione os itens da caixa de ferramentas que deseja mostrar, agrupe-os em categorias, \nRenomeie-os e altere sua ordem, se necessário.", + // [Auto-translated] "Toolbox" + toolbox: "Toolbox", + // [Auto-translated] "Categories" + categories: "Categorias", + // [Auto-translated] "No categories" + noCategoriesText: "Sem categorias", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Arraste os itens aqui para mostrá-los", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Arraste os itens aqui para ocultá-los", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Itens ocultos da caixa de ferramentas", + // [Auto-translated] "Enable grouping" + enableGrouping: "Habilitar agrupamento", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Mostrar títulos de categorias", + // [Auto-translated] "Name" + categoryName: "Nome", + // [Auto-translated] "Title" + categoryTitle: "Título", + // [Auto-translated] "Tooltip" + tooltip: "Dica de ferramenta", + // [Auto-translated] "Icon name" + iconName: "Nome do ícone", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON a ser aplicado quando os usuários selecionam este item da caixa de ferramentas", + // [Auto-translated] "Subcategories" + subitems: "Subcategorias", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Habilitar subitens para esta pergunta...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Mover como um subitem para...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Adicionar à caixa de ferramentas", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Excluir item personalizado", + // [Auto-translated] "New Category" + addCustomCategory: "Nova categoria", + // [Auto-translated] "New Item" + addCustomItem: "Novo item", + // [Auto-translated] "Add a new item" + addNewItem: "Adicionar um novo item", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Adicionar um novo subitem", + // [Auto-translated] "There are no items" + noRowsText: "Não há itens", + // [Auto-translated] "New item in" + newItem: "Novo item em" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Personalizar a grade de propriedades", + // [Auto-translated] "Property Grid" + navigationTitle: "Grade de propriedades", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Selecione um elemento para personalizar suas configurações disponíveis na Grade de propriedades.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Selecione um elemento para personalizar suas configurações disponíveis na Grade de propriedades", + // [Auto-translated] "Property Grid" + propertyGrid: "Grade de propriedades", + // [Auto-translated] "No categories" + noCategoriesText: "Sem categorias", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Arraste as propriedades aqui para mostrá-las", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Arraste as propriedades aqui para ocultá-las", + // [Auto-translated] "Unsorted items" + hiddenItems: "Itens não classificados", + // [Auto-translated] "Name" + categoryName: "Nome", + // [Auto-translated] "Title" + categoryTitle: "Título", + // [Auto-translated] "Icon name" + iconName: "Nome do ícone", + // [Auto-translated] "Name" + name: "Nome", + // [Auto-translated] "Title" + titleField: "Título", + // [Auto-translated] "Helper Text" + descriptionField: "Texto auxiliar", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Adicionar categoria personalizada" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Adicionar um novo item", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Adicionar um novo subitem", + // [Auto-translated] "New item in" + newItem: "Novo item em", + // [Auto-translated] "New Category" + addCustomCategory: "Nova categoria", + // [Auto-translated] "New category in" + newCategory: "Nova categoria em", + // [Auto-translated] "Move to category..." + moveToCategory: "Mover para a categoria...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Mover para uma nova categoria...", + // [Auto-translated] "Categories" + categoriesLabel: "Categorias", + // [Auto-translated] "Move To..." + moveTo: "Mover para...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Remover do {0}", + // [Auto-translated] "More" + more: "Mais", + // [Auto-translated] "Restore" + restoreToDefault: "Restaurar", + // [Auto-translated] "Edit" + edit: "Editar", + // [Auto-translated] "Expand" + expand: "Expandir", + // [Auto-translated] "Collapse" + collapse: "Colapso", + // [Auto-translated] "Remove" + remove: "Retirar", + // [Auto-translated] "Add" + add: "Adicionar", + // [Auto-translated] "Delete" + delete: "Excluir" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Predefinições do criador", + // [Auto-translated] "Preset JSON:" + presetJson: "JSON predefinido:", + // [Auto-translated] "Copy" + copy: "Copiar", + // [Auto-translated] "Download" + download: "Baixar", + // [Auto-translated] "Load" + load: "Carga", + // [Auto-translated] "Save & Exit" + saveExit: "Salvar e sair", + // [Auto-translated] "Back" + back: "Voltar", + // [Auto-translated] "Reset to default" + resetToDefault: "Redefinir para o padrão", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Todas as configurações restauradas para o padrão", + // [Auto-translated] "resored to default" + resoredToDefault: "resored para padrão", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Item restaurado para o padrão", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Categoria restaurada para o padrão", + // [Auto-translated] "Edit" + edit: "Editar", + // [Auto-translated] "Save & Exit" + completeText: "Salvar e sair", + // [Auto-translated] "Back" + pagePrevText: "Voltar" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Presets", + // [Auto-translated] "Creator Presets" + creatorPresets: "Predefinições do criador", + // [Auto-translated] "Save & Exit" + save: "Salvar e sair", + // [Auto-translated] "File" + file: "Arquivo", + // [Auto-translated] "Import" + import: "Importação", + // [Auto-translated] "Export" + export: "Exportação", + // [Auto-translated] "Edit" + edit: "Editar", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Redefinir idiomas para o padrão", + // [Auto-translated] "Reset all changes" + resetAll: "Redefinir todas as alterações", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Redefinir {0} para os padrões" + } +}; +const locale = getLocaleStrings("pt"); +locale.presets = ptStrings; diff --git a/packages/survey-creator-core/src/presets/localization/romanian.ts b/packages/survey-creator-core/src/presets/localization/romanian.ts new file mode 100644 index 0000000000..5816742e90 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/romanian.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const roStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Limbi", + // [Auto-translated] "Languages" + navigationTitle: "Limbi", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Selectați limba interfeței de utilizare Survey Creator și țintă\nlimbile pentru sondajul în curs de configurare.", + // [Auto-translated] "Creator UI language" + creatorUI: "Limba interfeței de utilizare a creatorului", + // [Auto-translated] "Survey languages" + surveyLanguages: "Limbi de sondaj", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Tastați pentru a căuta...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Traduceți numele limbilor sondajului în engleză" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Configurarea filelor", + // [Auto-translated] "Tabs" + navigationTitle: "File", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Selectați filele pe care doriți să le afișați, reordonați-le, schimbați-le titlurile,\nși alegeți fila care va fi activă în mod implicit.", + // [Auto-translated] "Visible tabs" + items: "File vizibile", + // [Auto-translated] "Hidden tabs" + hiddenItems: "File ascunse", + // [Auto-translated] "Default tab" + defaultTab: "Fila implicită", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Trageți filele aici pentru a le afișa", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Trageți filele aici pentru a le ascunde", + // [Auto-translated] "Name" + name: "Nume", + // [Auto-translated] "Title" + titleField: "Titlu", + // [Auto-translated] "Icon name" + iconName: "Nume pictogramă" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Configurarea casetei de scule", + // [Auto-translated] "Toolbox" + navigationTitle: "Cutie de scule", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Selectați elementele din caseta de instrumente pe care doriți să le afișați, grupați-le în categorii, \nredenumiți-le și schimbați-le ordinea dacă este necesar.", + // [Auto-translated] "Toolbox" + toolbox: "Cutie de scule", + // [Auto-translated] "Categories" + categories: "Categorii", + // [Auto-translated] "No categories" + noCategoriesText: "Fără categorii", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Trageți elementele aici pentru a le afișa", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Trageți elementele aici pentru a le ascunde", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Elemente ascunse din cutia de instrumente", + // [Auto-translated] "Enable grouping" + enableGrouping: "Activați gruparea", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Afișați titlurile categoriilor", + // [Auto-translated] "Name" + categoryName: "Nume", + // [Auto-translated] "Title" + categoryTitle: "Titlu", + // [Auto-translated] "Tooltip" + tooltip: "Sfat", + // [Auto-translated] "Icon name" + iconName: "Nume pictogramă", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Obiect JSON de aplicat atunci când utilizatorii selectează acest element din caseta de instrumente", + // [Auto-translated] "Subcategories" + subitems: "Subcategorii", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Activați subelemente pentru această întrebare...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Mutați ca subelement în...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Adăugați în trusa de instrumente", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Ștergeți elementul personalizat", + // [Auto-translated] "New Category" + addCustomCategory: "Categorie nouă", + // [Auto-translated] "New Item" + addCustomItem: "Articol nou", + // [Auto-translated] "Add a new item" + addNewItem: "Adăugarea unui element nou", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Adăugarea unui subelement nou", + // [Auto-translated] "There are no items" + noRowsText: "Nu există articole", + // [Auto-translated] "New item in" + newItem: "Articol nou în" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Personalizarea grilei de proprietăți", + // [Auto-translated] "Property Grid" + navigationTitle: "Grilă de proprietăți", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Selectați un element pentru a-i personaliza setările disponibile în grila de proprietăți.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Selectați un element pentru a-i personaliza setările disponibile în grila de proprietăți", + // [Auto-translated] "Property Grid" + propertyGrid: "Grilă de proprietăți", + // [Auto-translated] "No categories" + noCategoriesText: "Fără categorii", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Trageți proprietățile aici pentru a le afișa", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Trageți proprietățile aici pentru a le ascunde", + // [Auto-translated] "Unsorted items" + hiddenItems: "Articole nesortate", + // [Auto-translated] "Name" + categoryName: "Nume", + // [Auto-translated] "Title" + categoryTitle: "Titlu", + // [Auto-translated] "Icon name" + iconName: "Nume pictogramă", + // [Auto-translated] "Name" + name: "Nume", + // [Auto-translated] "Title" + titleField: "Titlu", + // [Auto-translated] "Helper Text" + descriptionField: "Text de ajutor", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Adăugați o categorie personalizată" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Adăugarea unui element nou", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Adăugarea unui subelement nou", + // [Auto-translated] "New item in" + newItem: "Articol nou în", + // [Auto-translated] "New Category" + addCustomCategory: "Categorie nouă", + // [Auto-translated] "New category in" + newCategory: "Categorie nouă în", + // [Auto-translated] "Move to category..." + moveToCategory: "Mutați la categorie...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Treceți la o categorie nouă...", + // [Auto-translated] "Categories" + categoriesLabel: "Categorii", + // [Auto-translated] "Move To..." + moveTo: "Mutați la...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Scoate din {0}", + // [Auto-translated] "More" + more: "Mai mult", + // [Auto-translated] "Restore" + restoreToDefault: "Restaura", + // [Auto-translated] "Edit" + edit: "Editare", + // [Auto-translated] "Expand" + expand: "Expanda", + // [Auto-translated] "Collapse" + collapse: "Colaps", + // [Auto-translated] "Remove" + remove: "Depărta", + // [Auto-translated] "Add" + add: "Adăuga", + // [Auto-translated] "Delete" + delete: "Șterge" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Presetări pentru creatori", + // [Auto-translated] "Preset JSON:" + presetJson: "JSON presetat:", + // [Auto-translated] "Copy" + copy: "Copie", + // [Auto-translated] "Download" + download: "Descărca", + // [Auto-translated] "Load" + load: "Încărca", + // [Auto-translated] "Save & Exit" + saveExit: "Salvare și ieșire", + // [Auto-translated] "Back" + back: "Spate", + // [Auto-translated] "Reset to default" + resetToDefault: "Resetare la valori implicite", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Toate setările au fost restaurate la valorile implicite", + // [Auto-translated] "resored to default" + resoredToDefault: "resorat în mod implicit", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Element restaurat la valori implicite", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Categorie restaurată la valori implicite", + // [Auto-translated] "Edit" + edit: "Editare", + // [Auto-translated] "Save & Exit" + completeText: "Salvare și ieșire", + // [Auto-translated] "Back" + pagePrevText: "Spate" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Presetări", + // [Auto-translated] "Creator Presets" + creatorPresets: "Presetări pentru creatori", + // [Auto-translated] "Save & Exit" + save: "Salvare și ieșire", + // [Auto-translated] "File" + file: "Fișier", + // [Auto-translated] "Import" + import: "Importa", + // [Auto-translated] "Export" + export: "Export", + // [Auto-translated] "Edit" + edit: "Editare", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Resetați limbile la valorile implicite", + // [Auto-translated] "Reset all changes" + resetAll: "Resetați toate modificările", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Resetați {0} la valorile implicite" + } +}; +const locale = getLocaleStrings("ro"); +locale.presets = roStrings; diff --git a/packages/survey-creator-core/src/presets/localization/russian.ts b/packages/survey-creator-core/src/presets/localization/russian.ts new file mode 100644 index 0000000000..6c783ad90e --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/russian.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const ruStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Языки", + // [Auto-translated] "Languages" + navigationTitle: "Языки", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Выберите язык пользовательского интерфейса создателя опросов и целевую цель\nЯзыки для конфигурируемого опроса.", + // [Auto-translated] "Creator UI language" + creatorUI: "Язык пользовательского интерфейса автора", + // [Auto-translated] "Survey languages" + surveyLanguages: "Языки опроса", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Введите для поиска...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Перевод названий языков опроса на английский" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Настройка вкладок", + // [Auto-translated] "Tabs" + navigationTitle: "Вкладки", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Выберите вкладки, которые вы хотите показать, измените их порядок, измените их названия,\nи выберите вкладку, которая будет активна по умолчанию.", + // [Auto-translated] "Visible tabs" + items: "Видимые вкладки", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Скрытые вкладки", + // [Auto-translated] "Default tab" + defaultTab: "Вкладка \"По умолчанию\"", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Перетащите вкладки сюда, чтобы отобразить их", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Перетащите вкладки сюда, чтобы скрыть их", + // [Auto-translated] "Name" + name: "Имя", + // [Auto-translated] "Title" + titleField: "Титул", + // [Auto-translated] "Icon name" + iconName: "Название иконки" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Настройка Toolbox", + // [Auto-translated] "Toolbox" + navigationTitle: "Ящик для инструментов", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Выберите элементы панели инструментов, которые вы хотите показать, сгруппируйте их по категориям, \nПереименуйте их и при необходимости измените их порядок.", + // [Auto-translated] "Toolbox" + toolbox: "Ящик для инструментов", + // [Auto-translated] "Categories" + categories: "Категории", + // [Auto-translated] "No categories" + noCategoriesText: "Без категорий", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Перетащите элементы сюда, чтобы отобразить их", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Перетащите элементы сюда, чтобы скрыть их", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Скрытые элементы панели инструментов", + // [Auto-translated] "Enable grouping" + enableGrouping: "Включить группировку", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Показать названия категорий", + // [Auto-translated] "Name" + categoryName: "Имя", + // [Auto-translated] "Title" + categoryTitle: "Титул", + // [Auto-translated] "Tooltip" + tooltip: "Всплывающая подсказка", + // [Auto-translated] "Icon name" + iconName: "Название иконки", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Объект JSON, который будет применяться при выборе пользователем этого элемента панели инструментов", + // [Auto-translated] "Subcategories" + subitems: "Подкатегории", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Включите подпункты для этого вопроса...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Переместить в качестве подэлемента в...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Добавить в Toolbox", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Удалить пользовательский элемент", + // [Auto-translated] "New Category" + addCustomCategory: "Новая категория", + // [Auto-translated] "New Item" + addCustomItem: "Новый товар", + // [Auto-translated] "Add a new item" + addNewItem: "Добавить новый товар", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Добавление нового подэлемента", + // [Auto-translated] "There are no items" + noRowsText: "Нет предметов", + // [Auto-translated] "New item in" + newItem: "Новый товар в" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Настройка сетки свойств", + // [Auto-translated] "Property Grid" + navigationTitle: "Сетка свойств", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Выберите элемент, чтобы настроить его параметры, доступные в сетке свойств.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Выберите элемент, чтобы настроить его параметры, доступные в сетке свойств", + // [Auto-translated] "Property Grid" + propertyGrid: "Сетка свойств", + // [Auto-translated] "No categories" + noCategoriesText: "Без категорий", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Перетащите свойства сюда, чтобы отобразить их", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Перетащите свойства сюда, чтобы скрыть их", + // [Auto-translated] "Unsorted items" + hiddenItems: "Неотсортированные товары", + // [Auto-translated] "Name" + categoryName: "Имя", + // [Auto-translated] "Title" + categoryTitle: "Титул", + // [Auto-translated] "Icon name" + iconName: "Название иконки", + // [Auto-translated] "Name" + name: "Имя", + // [Auto-translated] "Title" + titleField: "Титул", + // [Auto-translated] "Helper Text" + descriptionField: "Вспомогательный текст", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Добавить пользовательскую категорию" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Добавить новый товар", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Добавление нового подэлемента", + // [Auto-translated] "New item in" + newItem: "Новый товар в", + // [Auto-translated] "New Category" + addCustomCategory: "Новая категория", + // [Auto-translated] "New category in" + newCategory: "Новая категория в", + // [Auto-translated] "Move to category..." + moveToCategory: "Перейти в категорию...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Перейти в новую категорию...", + // [Auto-translated] "Categories" + categoriesLabel: "Категории", + // [Auto-translated] "Move To..." + moveTo: "Переместиться в...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Удалить из {0}", + // [Auto-translated] "More" + more: "Больше", + // [Auto-translated] "Restore" + restoreToDefault: "Восстанавливать", + // [Auto-translated] "Edit" + edit: "Редактировать", + // [Auto-translated] "Expand" + expand: "Расширять", + // [Auto-translated] "Collapse" + collapse: "Коллапс", + // [Auto-translated] "Remove" + remove: "Убирать", + // [Auto-translated] "Add" + add: "Добавлять", + // [Auto-translated] "Delete" + delete: "Удалить" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Пресеты для создателей", + // [Auto-translated] "Preset JSON:" + presetJson: "Предустановленный JSON:", + // [Auto-translated] "Copy" + copy: "Копировать", + // [Auto-translated] "Download" + download: "Загружать", + // [Auto-translated] "Load" + load: "Груз", + // [Auto-translated] "Save & Exit" + saveExit: "Сохранить и выйти", + // [Auto-translated] "Back" + back: "Назад", + // [Auto-translated] "Reset to default" + resetToDefault: "Сброс до значений по умолчанию", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Все настройки восстановлены по умолчанию", + // [Auto-translated] "resored to default" + resoredToDefault: "восстановлено по умолчанию", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Элемент восстановлен по умолчанию", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Категория восстановлена по умолчанию", + // [Auto-translated] "Edit" + edit: "Редактировать", + // [Auto-translated] "Save & Exit" + completeText: "Сохранить и выйти", + // [Auto-translated] "Back" + pagePrevText: "Назад" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Пресетов", + // [Auto-translated] "Creator Presets" + creatorPresets: "Пресеты для создателей", + // [Auto-translated] "Save & Exit" + save: "Сохранить и выйти", + // [Auto-translated] "File" + file: "Файл", + // [Auto-translated] "Import" + import: "Импорт", + // [Auto-translated] "Export" + export: "Экспорт", + // [Auto-translated] "Edit" + edit: "Редактировать", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Сбросить настройки «Языки» до значений по умолчанию", + // [Auto-translated] "Reset all changes" + resetAll: "Сбросить все изменения", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Сброс {0} значений по умолчанию" + } +}; +const locale = getLocaleStrings("ru"); +locale.presets = ruStrings; diff --git a/packages/survey-creator-core/src/presets/localization/simplified-chinese.ts b/packages/survey-creator-core/src/presets/localization/simplified-chinese.ts new file mode 100644 index 0000000000..3b23ddc3c9 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/simplified-chinese.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const zhCnStrings = { + languages: { + // [Auto-translated] "Languages" + title: "语言", + // [Auto-translated] "Languages" + navigationTitle: "语言", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "选择调查创建者 UI 和目标的语言\n正在配置的调查的语言。", + // [Auto-translated] "Creator UI language" + creatorUI: "创作者 UI 语言", + // [Auto-translated] "Survey languages" + surveyLanguages: "调查语言", + // [Auto-translated] "Type to search..." + searchPlaceholder: "键入搜索...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "将调查语言名称翻译成英语" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "配置选项卡", + // [Auto-translated] "Tabs" + navigationTitle: "制表符", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "选择要显示的选项卡,重新排序它们,更改它们的标题,\n,然后选择默认处于活动状态的选项卡。", + // [Auto-translated] "Visible tabs" + items: "可见选项卡", + // [Auto-translated] "Hidden tabs" + hiddenItems: "隐藏标签页", + // [Auto-translated] "Default tab" + defaultTab: "默认选项卡", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "将选项卡拖到此处以显示它们", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "将选项卡拖到此处以隐藏它们", + // [Auto-translated] "Name" + name: "名字", + // [Auto-translated] "Title" + titleField: "标题", + // [Auto-translated] "Icon name" + iconName: "图标名称" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "设置工具箱", + // [Auto-translated] "Toolbox" + navigationTitle: "工具箱", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "选择要显示的工具箱项目,将它们分组为类别,\n重命名它们,并根据需要更改它们的顺序。", + // [Auto-translated] "Toolbox" + toolbox: "工具箱", + // [Auto-translated] "Categories" + categories: "类别", + // [Auto-translated] "No categories" + noCategoriesText: "无类别", + // [Auto-translated] "Drag items here to show them" + noItemsText: "将项目拖到此处以显示它们", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "将项目拖到此处以隐藏它们", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "隐藏的工具箱项目", + // [Auto-translated] "Enable grouping" + enableGrouping: "启用分组", + // [Auto-translated] "Show category titles" + showCategoryTitles: "显示类别标题", + // [Auto-translated] "Name" + categoryName: "名字", + // [Auto-translated] "Title" + categoryTitle: "标题", + // [Auto-translated] "Tooltip" + tooltip: "工具提示", + // [Auto-translated] "Icon name" + iconName: "图标名称", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "当用户选择此工具箱项时要应用的 JSON 对象", + // [Auto-translated] "Subcategories" + subitems: "子类别", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "为此问题启用子项...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "作为子项移动到...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "添加到工具箱", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "删除自定义项目", + // [Auto-translated] "New Category" + addCustomCategory: "新类别", + // [Auto-translated] "New Item" + addCustomItem: "新商品", + // [Auto-translated] "Add a new item" + addNewItem: "添加新项目", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "添加新子项", + // [Auto-translated] "There are no items" + noRowsText: "没有项目", + // [Auto-translated] "New item in" + newItem: "新项目" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "自定义属性网格", + // [Auto-translated] "Property Grid" + navigationTitle: "属性网格", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "选择一个元素以自定义其在属性网格中可用的设置。", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "选择一个元素以自定义其在属性网格中可用的设置", + // [Auto-translated] "Property Grid" + propertyGrid: "属性网格", + // [Auto-translated] "No categories" + noCategoriesText: "无类别", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "将属性拖到此处以显示它们", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "将属性拖到此处以隐藏它们", + // [Auto-translated] "Unsorted items" + hiddenItems: "未排序的项目", + // [Auto-translated] "Name" + categoryName: "名字", + // [Auto-translated] "Title" + categoryTitle: "标题", + // [Auto-translated] "Icon name" + iconName: "图标名称", + // [Auto-translated] "Name" + name: "名字", + // [Auto-translated] "Title" + titleField: "标题", + // [Auto-translated] "Helper Text" + descriptionField: "辅助文本", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "添加自定义类别" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "添加新项目", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "添加新子项", + // [Auto-translated] "New item in" + newItem: "新项目", + // [Auto-translated] "New Category" + addCustomCategory: "新类别", + // [Auto-translated] "New category in" + newCategory: "新类别", + // [Auto-translated] "Move to category..." + moveToCategory: "移至分类...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "移至新类别...", + // [Auto-translated] "Categories" + categoriesLabel: "类别", + // [Auto-translated] "Move To..." + moveTo: "移动到...", + // [Auto-translated] "Remove from {0}" + removeFrom: "从{0}中删除", + // [Auto-translated] "More" + more: "更多", + // [Auto-translated] "Restore" + restoreToDefault: "恢复", + // [Auto-translated] "Edit" + edit: "编辑", + // [Auto-translated] "Expand" + expand: "扩大", + // [Auto-translated] "Collapse" + collapse: "崩溃", + // [Auto-translated] "Remove" + remove: "删除", + // [Auto-translated] "Add" + add: "加", + // [Auto-translated] "Delete" + delete: "删除" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "创作者预设", + // [Auto-translated] "Preset JSON:" + presetJson: "预设 JSON:", + // [Auto-translated] "Copy" + copy: "复制", + // [Auto-translated] "Download" + download: "下载", + // [Auto-translated] "Load" + load: "负荷", + // [Auto-translated] "Save & Exit" + saveExit: "保存并退出", + // [Auto-translated] "Back" + back: "返回", + // [Auto-translated] "Reset to default" + resetToDefault: "重置为默认值", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "所有设置恢复为默认值", + // [Auto-translated] "resored to default" + resoredToDefault: "重置为默认值", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "项目恢复为默认值", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "类别恢复为默认值", + // [Auto-translated] "Edit" + edit: "编辑", + // [Auto-translated] "Save & Exit" + completeText: "保存并退出", + // [Auto-translated] "Back" + pagePrevText: "返回" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "预设", + // [Auto-translated] "Creator Presets" + creatorPresets: "创作者预设", + // [Auto-translated] "Save & Exit" + save: "保存并退出", + // [Auto-translated] "File" + file: "文件", + // [Auto-translated] "Import" + import: "进口", + // [Auto-translated] "Export" + export: "出口", + // [Auto-translated] "Edit" + edit: "编辑", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "将语言重置为默认值", + // [Auto-translated] "Reset all changes" + resetAll: "重置所有更改", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "将{0}重置为默认值" + } +}; +const locale = getLocaleStrings("zh-cn"); +locale.presets = zhCnStrings; diff --git a/packages/survey-creator-core/src/presets/localization/slovak.ts b/packages/survey-creator-core/src/presets/localization/slovak.ts new file mode 100644 index 0000000000..bfc7ac2a33 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/slovak.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const skStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Jazyky", + // [Auto-translated] "Languages" + navigationTitle: "Jazyky", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Vyberte jazyk používateľského rozhrania a cieľa tvorcu prieskumu\njazyky pre konfigurovaný prieskum.", + // [Auto-translated] "Creator UI language" + creatorUI: "Jazyk používateľského rozhrania tvorcu", + // [Auto-translated] "Survey languages" + surveyLanguages: "Jazyky prieskumu", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Zadajte na vyhľadávanie...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Preložiť názvy jazykov prieskumu do angličtiny" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Konfigurácia kariet", + // [Auto-translated] "Tabs" + navigationTitle: "Karty", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Vyberte karty, ktoré chcete zobraziť, zmeňte ich poradie, zmeňte ich názvy,\na vyberte kartu, ktorá bude predvolene aktívna.", + // [Auto-translated] "Visible tabs" + items: "Viditeľné karty", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Skryté karty", + // [Auto-translated] "Default tab" + defaultTab: "Predvolená karta", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Potiahnutím kariet sem ich zobrazíte", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Presunutím kariet sem ich skryjete", + // [Auto-translated] "Name" + name: "Meno", + // [Auto-translated] "Title" + titleField: "Titul", + // [Auto-translated] "Icon name" + iconName: "Názov ikony" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Nastavenie aplikácie Toolbox", + // [Auto-translated] "Toolbox" + navigationTitle: "Toolbox", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Vyberte položky panela nástrojov, ktoré chcete zobraziť, zoskupte ich do kategórií, \nPremenujte ich a v prípade potreby zmeňte ich poradie.", + // [Auto-translated] "Toolbox" + toolbox: "Toolbox", + // [Auto-translated] "Categories" + categories: "Kategórie", + // [Auto-translated] "No categories" + noCategoriesText: "Žiadne kategórie", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Presunutím položiek sem ich zobrazíte", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Presunutím položiek sem ich skryjete", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Skryté položky panela s nástrojmi", + // [Auto-translated] "Enable grouping" + enableGrouping: "Povoliť zoskupovanie", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Zobraziť názvy kategórií", + // [Auto-translated] "Name" + categoryName: "Meno", + // [Auto-translated] "Title" + categoryTitle: "Titul", + // [Auto-translated] "Tooltip" + tooltip: "Popis", + // [Auto-translated] "Icon name" + iconName: "Názov ikony", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Objekt JSON, ktorý sa použije, keď používatelia vyberú túto položku panela nástrojov", + // [Auto-translated] "Subcategories" + subitems: "Podkategórie", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Povoliť podpoložky pre túto otázku...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Presunúť ako podpoložku do...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Pridať do Toolboxu", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Odstrániť vlastnú položku", + // [Auto-translated] "New Category" + addCustomCategory: "Nová kategória", + // [Auto-translated] "New Item" + addCustomItem: "Nová položka", + // [Auto-translated] "Add a new item" + addNewItem: "Pridanie novej položky", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Pridanie novej podpoložky", + // [Auto-translated] "There are no items" + noRowsText: "Nie sú žiadne položky", + // [Auto-translated] "New item in" + newItem: "Nová položka v" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Prispôsobenie mriežky vlastností", + // [Auto-translated] "Property Grid" + navigationTitle: "Mriežka vlastností", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Vyberte prvok, ktorý chcete prispôsobiť jeho nastavenia, ktoré sú k dispozícii v mriežke vlastností.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Výberom prvku prispôsobte jeho nastavenia dostupné v mriežke vlastností", + // [Auto-translated] "Property Grid" + propertyGrid: "Mriežka vlastností", + // [Auto-translated] "No categories" + noCategoriesText: "Žiadne kategórie", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Presuňte sem vlastnosti, aby ste ich zobrazili", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Presunutím vlastností sem ich skryjete", + // [Auto-translated] "Unsorted items" + hiddenItems: "Nezoradené položky", + // [Auto-translated] "Name" + categoryName: "Meno", + // [Auto-translated] "Title" + categoryTitle: "Titul", + // [Auto-translated] "Icon name" + iconName: "Názov ikony", + // [Auto-translated] "Name" + name: "Meno", + // [Auto-translated] "Title" + titleField: "Titul", + // [Auto-translated] "Helper Text" + descriptionField: "Pomocný text", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Pridať vlastnú kategóriu" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Pridanie novej položky", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Pridanie novej podpoložky", + // [Auto-translated] "New item in" + newItem: "Nová položka v", + // [Auto-translated] "New Category" + addCustomCategory: "Nová kategória", + // [Auto-translated] "New category in" + newCategory: "Nová kategória v", + // [Auto-translated] "Move to category..." + moveToCategory: "Presunúť do kategórie...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Presunúť do novej kategórie...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategórie", + // [Auto-translated] "Move To..." + moveTo: "Presunúť do...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Odstrániť z {0}", + // [Auto-translated] "More" + more: "Viacej", + // [Auto-translated] "Restore" + restoreToDefault: "Obnoviť", + // [Auto-translated] "Edit" + edit: "Editovať", + // [Auto-translated] "Expand" + expand: "Rozšíriť", + // [Auto-translated] "Collapse" + collapse: "Kolaps", + // [Auto-translated] "Remove" + remove: "Odstrániť", + // [Auto-translated] "Add" + add: "Sčítať", + // [Auto-translated] "Delete" + delete: "Odstrániť" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Predvoľby tvorcu", + // [Auto-translated] "Preset JSON:" + presetJson: "Predvoľba JSON:", + // [Auto-translated] "Copy" + copy: "Kopírovať", + // [Auto-translated] "Download" + download: "Stiahnuť", + // [Auto-translated] "Load" + load: "Naložiť", + // [Auto-translated] "Save & Exit" + saveExit: "Uložiť a ukončiť", + // [Auto-translated] "Back" + back: "Chrbát", + // [Auto-translated] "Reset to default" + resetToDefault: "Obnoviť predvolené nastavenia", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Všetky nastavenia obnovené na predvolené", + // [Auto-translated] "resored to default" + resoredToDefault: "vrátené na predvolené", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Položka obnovená na predvolené hodnoty", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategória obnovená na predvolené", + // [Auto-translated] "Edit" + edit: "Editovať", + // [Auto-translated] "Save & Exit" + completeText: "Uložiť a ukončiť", + // [Auto-translated] "Back" + pagePrevText: "Chrbát" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Predvoľby", + // [Auto-translated] "Creator Presets" + creatorPresets: "Predvoľby tvorcu", + // [Auto-translated] "Save & Exit" + save: "Uložiť a ukončiť", + // [Auto-translated] "File" + file: "Súbor", + // [Auto-translated] "Import" + import: "Import", + // [Auto-translated] "Export" + export: "Vývoz", + // [Auto-translated] "Edit" + edit: "Editovať", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Obnoviť predvolené jazyky", + // [Auto-translated] "Reset all changes" + resetAll: "Obnoviť všetky zmeny", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Obnoviť {0} na predvolené hodnoty" + } +}; +const locale = getLocaleStrings("sk"); +locale.presets = skStrings; diff --git a/packages/survey-creator-core/src/presets/localization/slovenian.ts b/packages/survey-creator-core/src/presets/localization/slovenian.ts new file mode 100644 index 0000000000..f73c661373 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/slovenian.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const slStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Jezikih", + // [Auto-translated] "Languages" + navigationTitle: "Jezikih", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Izberite jezik uporabniškega vmesnika in cilja ustvarjalca ankete\njezikov za anketo, ki se konfigurira.", + // [Auto-translated] "Creator UI language" + creatorUI: "Jezik uporabniškega vmesnika ustvarjalca", + // [Auto-translated] "Survey languages" + surveyLanguages: "Anketni jeziki", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Vnesite za iskanje ...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Prevajanje imen jezikov ankete v angleščino" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Konfiguracija zavihkov", + // [Auto-translated] "Tabs" + navigationTitle: "Jezički", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Izberite zavihke, ki jih želite prikazati, spremenite njihov vrstni red, spremenite njihove naslove,\nin izberite zavihek, ki bo privzeto aktiven.", + // [Auto-translated] "Visible tabs" + items: "Vidni zavihki", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Skriti zavihki", + // [Auto-translated] "Default tab" + defaultTab: "Privzeti zavihek", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Povlecite zavihke sem, da jih prikažete", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Povlecite zavihke sem, da jih skrijete", + // [Auto-translated] "Name" + name: "Ime", + // [Auto-translated] "Title" + titleField: "Naslov", + // [Auto-translated] "Icon name" + iconName: "Ime ikone" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Nastavitev orodja Toolbox", + // [Auto-translated] "Toolbox" + navigationTitle: "Orodjarni", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Izberite elemente orodja, ki jih želite prikazati, jih združite v kategorije, \npreimenujte jih in po potrebi spremenite njihov vrstni red.", + // [Auto-translated] "Toolbox" + toolbox: "Orodjarni", + // [Auto-translated] "Categories" + categories: "Kategorije", + // [Auto-translated] "No categories" + noCategoriesText: "Brez kategorij", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Povlecite elemente sem, da jih prikažete", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Povlecite elemente sem, da jih skrijete", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Skriti elementi zbirke orodij", + // [Auto-translated] "Enable grouping" + enableGrouping: "Omogočanje združevanja v skupine", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Pokaži naslove kategorij", + // [Auto-translated] "Name" + categoryName: "Ime", + // [Auto-translated] "Title" + categoryTitle: "Naslov", + // [Auto-translated] "Tooltip" + tooltip: "Opis orodja", + // [Auto-translated] "Icon name" + iconName: "Ime ikone", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Predmet JSON, ki se uporabi, ko uporabniki izberejo ta element zbirke orodij", + // [Auto-translated] "Subcategories" + subitems: "Podkategorije", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Omogočite podelemente za to vprašanje ...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Premakni kot podelement v...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Dodaj v zbirko orodij", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Izbriši element po meri", + // [Auto-translated] "New Category" + addCustomCategory: "Nova kategorija", + // [Auto-translated] "New Item" + addCustomItem: "Nova postavka", + // [Auto-translated] "Add a new item" + addNewItem: "Dodajanje novega elementa", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Dodajanje novega podelementa", + // [Auto-translated] "There are no items" + noRowsText: "Ni elementov", + // [Auto-translated] "New item in" + newItem: "Nov izdelek v" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Prilagajanje mreže lastnosti", + // [Auto-translated] "Property Grid" + navigationTitle: "Mreža lastnosti", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Izberite element, da prilagodite njegove nastavitve, ki so na voljo v mreži lastnosti.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Izberite element, da prilagodite njegove nastavitve, ki so na voljo v mreži lastnosti", + // [Auto-translated] "Property Grid" + propertyGrid: "Mreža lastnosti", + // [Auto-translated] "No categories" + noCategoriesText: "Brez kategorij", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Povlecite lastnosti sem, da jih prikažete", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Povlecite lastnosti sem, da jih skrijete", + // [Auto-translated] "Unsorted items" + hiddenItems: "Nerazvrščeni elementi", + // [Auto-translated] "Name" + categoryName: "Ime", + // [Auto-translated] "Title" + categoryTitle: "Naslov", + // [Auto-translated] "Icon name" + iconName: "Ime ikone", + // [Auto-translated] "Name" + name: "Ime", + // [Auto-translated] "Title" + titleField: "Naslov", + // [Auto-translated] "Helper Text" + descriptionField: "Pomožno besedilo", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Dodaj kategorijo po meri" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Dodajanje novega elementa", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Dodajanje novega podelementa", + // [Auto-translated] "New item in" + newItem: "Nov izdelek v", + // [Auto-translated] "New Category" + addCustomCategory: "Nova kategorija", + // [Auto-translated] "New category in" + newCategory: "Nova kategorija v", + // [Auto-translated] "Move to category..." + moveToCategory: "Premakni se v kategorijo ...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Premakni se v novo kategorijo ...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategorije", + // [Auto-translated] "Move To..." + moveTo: "Premakni se v...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Odstrani iz {0}", + // [Auto-translated] "More" + more: "Več", + // [Auto-translated] "Restore" + restoreToDefault: "Obnoviti", + // [Auto-translated] "Edit" + edit: "Urediti", + // [Auto-translated] "Expand" + expand: "Razširiti", + // [Auto-translated] "Collapse" + collapse: "Propad", + // [Auto-translated] "Remove" + remove: "Odstrani", + // [Auto-translated] "Add" + add: "Dodati", + // [Auto-translated] "Delete" + delete: "Izbrisati" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Prednastavitve ustvarjalca", + // [Auto-translated] "Preset JSON:" + presetJson: "Prednastavljeni JSON:", + // [Auto-translated] "Copy" + copy: "Kopirati", + // [Auto-translated] "Download" + download: "Prenesti", + // [Auto-translated] "Load" + load: "Tovor", + // [Auto-translated] "Save & Exit" + saveExit: "Shranjevanje in zahod", + // [Auto-translated] "Back" + back: "Hrbet", + // [Auto-translated] "Reset to default" + resetToDefault: "Ponastavi na privzete nastavitve", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Vse nastavitve so bile obnovljene na privzete", + // [Auto-translated] "resored to default" + resoredToDefault: "prevrnjeno na privzeto", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Element je bil obnovljen na privzete nastavitve", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategorija je bila obnovljena na privzeto", + // [Auto-translated] "Edit" + edit: "Urediti", + // [Auto-translated] "Save & Exit" + completeText: "Shranjevanje in zahod", + // [Auto-translated] "Back" + pagePrevText: "Hrbet" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Prednastavitve", + // [Auto-translated] "Creator Presets" + creatorPresets: "Prednastavitve ustvarjalca", + // [Auto-translated] "Save & Exit" + save: "Shranjevanje in zahod", + // [Auto-translated] "File" + file: "Datoteka", + // [Auto-translated] "Import" + import: "Uvoz", + // [Auto-translated] "Export" + export: "Izvoz", + // [Auto-translated] "Edit" + edit: "Urediti", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Ponastavitev jezikov na privzete", + // [Auto-translated] "Reset all changes" + resetAll: "Ponastavitev vseh sprememb", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Ponastavitev {0} na privzete nastavitve" + } +}; +const locale = getLocaleStrings("sl"); +locale.presets = slStrings; diff --git a/packages/survey-creator-core/src/presets/localization/spanish.ts b/packages/survey-creator-core/src/presets/localization/spanish.ts new file mode 100644 index 0000000000..b732a05a22 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/spanish.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const esStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Idiomas", + // [Auto-translated] "Languages" + navigationTitle: "Idiomas", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Seleccione el idioma de la interfaz de usuario y el destino del creador de encuestas\nidiomas para la encuesta que se está configurando.", + // [Auto-translated] "Creator UI language" + creatorUI: "Lenguaje de la interfaz de usuario del creador", + // [Auto-translated] "Survey languages" + surveyLanguages: "Idiomas de la encuesta", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Escriba para buscar...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Traducir nombres de idiomas de encuestas al inglés" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Configurar pestañas", + // [Auto-translated] "Tabs" + navigationTitle: "Pestañas", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Seleccione las pestañas que desea mostrar, reordenarlas, cambiar sus títulos,\ny elija la pestaña que estará activa de forma predeterminada.", + // [Auto-translated] "Visible tabs" + items: "Pestañas visibles", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Pestañas ocultas", + // [Auto-translated] "Default tab" + defaultTab: "Pestaña predeterminada", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Arrastre las pestañas aquí para mostrarlas", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Arrastra pestañas aquí para ocultarlas", + // [Auto-translated] "Name" + name: "Nombre", + // [Auto-translated] "Title" + titleField: "Título", + // [Auto-translated] "Icon name" + iconName: "Nombre del icono" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Configurar la caja de herramientas", + // [Auto-translated] "Toolbox" + navigationTitle: "Caja de herramientas", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Seleccione los elementos de la caja de herramientas que desea mostrar, agrúpelos en categorías, \ncámbieles el nombre y cambie su orden si es necesario.", + // [Auto-translated] "Toolbox" + toolbox: "Caja de herramientas", + // [Auto-translated] "Categories" + categories: "Categorías", + // [Auto-translated] "No categories" + noCategoriesText: "Sin categorías", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Arrastra elementos aquí para mostrarlos", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Arrastra elementos aquí para ocultarlos", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Elementos ocultos de la caja de herramientas", + // [Auto-translated] "Enable grouping" + enableGrouping: "Habilitar agrupación", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Mostrar títulos de categorías", + // [Auto-translated] "Name" + categoryName: "Nombre", + // [Auto-translated] "Title" + categoryTitle: "Título", + // [Auto-translated] "Tooltip" + tooltip: "Información sobre herramientas", + // [Auto-translated] "Icon name" + iconName: "Nombre del icono", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Objeto JSON que se aplicará cuando los usuarios seleccionen este elemento de la caja de herramientas", + // [Auto-translated] "Subcategories" + subitems: "Subcategorías", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Habilite los subelementos para esta pregunta...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Mover como subelemento a...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Agregar a la caja de herramientas", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Eliminar elemento personalizado", + // [Auto-translated] "New Category" + addCustomCategory: "Nueva categoría", + // [Auto-translated] "New Item" + addCustomItem: "Nuevo artículo", + // [Auto-translated] "Add a new item" + addNewItem: "Agregar un nuevo elemento", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Agregar un nuevo subelemento", + // [Auto-translated] "There are no items" + noRowsText: "No hay artículos", + // [Auto-translated] "New item in" + newItem: "Nuevo artículo en" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Personalizar la cuadrícula de propiedades", + // [Auto-translated] "Property Grid" + navigationTitle: "Cuadrícula de propiedades", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Seleccione un elemento para personalizar su configuración disponible en la cuadrícula de propiedades.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Seleccione un elemento para personalizar su configuración disponible en la cuadrícula de propiedades", + // [Auto-translated] "Property Grid" + propertyGrid: "Cuadrícula de propiedades", + // [Auto-translated] "No categories" + noCategoriesText: "Sin categorías", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Arrastre las propiedades aquí para mostrarlas", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Arrastre las propiedades aquí para ocultarlas", + // [Auto-translated] "Unsorted items" + hiddenItems: "Artículos sin clasificar", + // [Auto-translated] "Name" + categoryName: "Nombre", + // [Auto-translated] "Title" + categoryTitle: "Título", + // [Auto-translated] "Icon name" + iconName: "Nombre del icono", + // [Auto-translated] "Name" + name: "Nombre", + // [Auto-translated] "Title" + titleField: "Título", + // [Auto-translated] "Helper Text" + descriptionField: "Texto auxiliar", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Agregar categoría personalizada" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Agregar un nuevo elemento", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Agregar un nuevo subelemento", + // [Auto-translated] "New item in" + newItem: "Nuevo artículo en", + // [Auto-translated] "New Category" + addCustomCategory: "Nueva categoría", + // [Auto-translated] "New category in" + newCategory: "Nueva categoría en", + // [Auto-translated] "Move to category..." + moveToCategory: "Mover a la categoría...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Pasar a una nueva categoría...", + // [Auto-translated] "Categories" + categoriesLabel: "Categorías", + // [Auto-translated] "Move To..." + moveTo: "Muévete a...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Retirar de {0}", + // [Auto-translated] "More" + more: "Más", + // [Auto-translated] "Restore" + restoreToDefault: "Restaurar", + // [Auto-translated] "Edit" + edit: "Editar", + // [Auto-translated] "Expand" + expand: "Expandir", + // [Auto-translated] "Collapse" + collapse: "Colapso", + // [Auto-translated] "Remove" + remove: "Eliminar", + // [Auto-translated] "Add" + add: "Agregar", + // [Auto-translated] "Delete" + delete: "Borrar" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Ajustes preestablecidos de creador", + // [Auto-translated] "Preset JSON:" + presetJson: "JSON preestablecido:", + // [Auto-translated] "Copy" + copy: "Copiar", + // [Auto-translated] "Download" + download: "Descargar", + // [Auto-translated] "Load" + load: "Carga", + // [Auto-translated] "Save & Exit" + saveExit: "Guardar y salir", + // [Auto-translated] "Back" + back: "Atrás", + // [Auto-translated] "Reset to default" + resetToDefault: "Restablecer a los valores predeterminados", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Todas las configuraciones restauradas a los valores predeterminados", + // [Auto-translated] "resored to default" + resoredToDefault: "resoed a default", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Elemento restaurado a los valores predeterminados", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Categoría restaurada a los valores predeterminados", + // [Auto-translated] "Edit" + edit: "Editar", + // [Auto-translated] "Save & Exit" + completeText: "Guardar y salir", + // [Auto-translated] "Back" + pagePrevText: "Atrás" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Presets", + // [Auto-translated] "Creator Presets" + creatorPresets: "Ajustes preestablecidos de creador", + // [Auto-translated] "Save & Exit" + save: "Guardar y salir", + // [Auto-translated] "File" + file: "Archivo", + // [Auto-translated] "Import" + import: "Importación", + // [Auto-translated] "Export" + export: "Exportar", + // [Auto-translated] "Edit" + edit: "Editar", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Restablecer idiomas a los valores predeterminados", + // [Auto-translated] "Reset all changes" + resetAll: "Restablecer todos los cambios", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Restablecer {0} a los valores predeterminados" + } +}; +const locale = getLocaleStrings("es"); +locale.presets = esStrings; diff --git a/packages/survey-creator-core/src/presets/localization/swedish.ts b/packages/survey-creator-core/src/presets/localization/swedish.ts new file mode 100644 index 0000000000..a8e7f57755 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/swedish.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const svStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Språk", + // [Auto-translated] "Languages" + navigationTitle: "Språk", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Välj språk för användargränssnittet för undersökningsskapare och mål\nspråk för undersökningen som konfigureras.", + // [Auto-translated] "Creator UI language" + creatorUI: "Språk för användargränssnittet för skapare", + // [Auto-translated] "Survey languages" + surveyLanguages: "Språk i undersökningen", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Skriv för att söka...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Översätt språknamn för undersökningar till engelska" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Konfigurera flikar", + // [Auto-translated] "Tabs" + navigationTitle: "Flikar", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Välj de flikar du vill visa, ändra ordning på dem, ändra deras titlar,\noch välj den flik som ska vara aktiv som standard.", + // [Auto-translated] "Visible tabs" + items: "Synliga flikar", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Dolda flikar", + // [Auto-translated] "Default tab" + defaultTab: "Fliken Standard", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Dra flikar hit för att visa dem", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Dra flikar hit för att dölja dem", + // [Auto-translated] "Name" + name: "Namn", + // [Auto-translated] "Title" + titleField: "Titel", + // [Auto-translated] "Icon name" + iconName: "Ikonens namn" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Ställ in verktygslådan", + // [Auto-translated] "Toolbox" + navigationTitle: "Verktygslåda", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Välj de verktygslådeobjekt du vill visa, gruppera dem i kategorier, \nByt namn på dem och ändra deras ordning om det behövs.", + // [Auto-translated] "Toolbox" + toolbox: "Verktygslåda", + // [Auto-translated] "Categories" + categories: "Kategorier", + // [Auto-translated] "No categories" + noCategoriesText: "Inga kategorier", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Dra objekt hit för att visa dem", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Dra objekt hit för att dölja dem", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Dolda objekt i verktygslådan", + // [Auto-translated] "Enable grouping" + enableGrouping: "Aktivera gruppering", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Visa kategorititlar", + // [Auto-translated] "Name" + categoryName: "Namn", + // [Auto-translated] "Title" + categoryTitle: "Titel", + // [Auto-translated] "Tooltip" + tooltip: "Verktygstips", + // [Auto-translated] "Icon name" + iconName: "Ikonens namn", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "JSON-objekt som ska användas när användare väljer det här verktygslådeobjektet", + // [Auto-translated] "Subcategories" + subitems: "Underkategorier", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Aktivera underobjekt för den här frågan...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Flytta som ett underobjekt till...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Lägg till i Toolbox", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Ta bort anpassat objekt", + // [Auto-translated] "New Category" + addCustomCategory: "Ny kategori", + // [Auto-translated] "New Item" + addCustomItem: "Nytt objekt", + // [Auto-translated] "Add a new item" + addNewItem: "Lägg till ett nytt objekt", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Lägga till ett nytt underobjekt", + // [Auto-translated] "There are no items" + noRowsText: "Det finns inga produkter", + // [Auto-translated] "New item in" + newItem: "Nytt objekt i" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Anpassa egenskapsrutnätet", + // [Auto-translated] "Property Grid" + navigationTitle: "Rutnät för fastigheter", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Välj ett element för att anpassa dess inställningar som är tillgängliga i egenskapsrutnätet.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Välj ett element för att anpassa dess inställningar som är tillgängliga i egenskapsrutnätet", + // [Auto-translated] "Property Grid" + propertyGrid: "Rutnät för fastigheter", + // [Auto-translated] "No categories" + noCategoriesText: "Inga kategorier", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Dra egenskaper hit för att visa dem", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Dra egenskaper hit för att dölja dem", + // [Auto-translated] "Unsorted items" + hiddenItems: "Osorterade objekt", + // [Auto-translated] "Name" + categoryName: "Namn", + // [Auto-translated] "Title" + categoryTitle: "Titel", + // [Auto-translated] "Icon name" + iconName: "Ikonens namn", + // [Auto-translated] "Name" + name: "Namn", + // [Auto-translated] "Title" + titleField: "Titel", + // [Auto-translated] "Helper Text" + descriptionField: "Text för hjälpare", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Lägg till anpassad kategori" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Lägg till ett nytt objekt", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Lägga till ett nytt underobjekt", + // [Auto-translated] "New item in" + newItem: "Nytt objekt i", + // [Auto-translated] "New Category" + addCustomCategory: "Ny kategori", + // [Auto-translated] "New category in" + newCategory: "Ny kategori i", + // [Auto-translated] "Move to category..." + moveToCategory: "Flytta till kategori...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Flytta till ny kategori...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategorier", + // [Auto-translated] "Move To..." + moveTo: "Flytta till...", + // [Auto-translated] "Remove from {0}" + removeFrom: "Ta bort från {0}", + // [Auto-translated] "More" + more: "Mer", + // [Auto-translated] "Restore" + restoreToDefault: "Återställa", + // [Auto-translated] "Edit" + edit: "Redigera", + // [Auto-translated] "Expand" + expand: "Expandera", + // [Auto-translated] "Collapse" + collapse: "Kollaps", + // [Auto-translated] "Remove" + remove: "Avlägsna", + // [Auto-translated] "Add" + add: "Addera", + // [Auto-translated] "Delete" + delete: "Ta bort" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "Förinställningar för skapare", + // [Auto-translated] "Preset JSON:" + presetJson: "Förinställd JSON:", + // [Auto-translated] "Copy" + copy: "Kopia", + // [Auto-translated] "Download" + download: "Ladda ned", + // [Auto-translated] "Load" + load: "Last", + // [Auto-translated] "Save & Exit" + saveExit: "Spara och avsluta", + // [Auto-translated] "Back" + back: "Tillbaka", + // [Auto-translated] "Reset to default" + resetToDefault: "Återställ till standard", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Alla inställningar återställda till standard", + // [Auto-translated] "resored to default" + resoredToDefault: "resored till standard", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Objektet återställt till standard", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategori återställd till standard", + // [Auto-translated] "Edit" + edit: "Redigera", + // [Auto-translated] "Save & Exit" + completeText: "Spara och avsluta", + // [Auto-translated] "Back" + pagePrevText: "Tillbaka" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Förinställningar", + // [Auto-translated] "Creator Presets" + creatorPresets: "Förinställningar för skapare", + // [Auto-translated] "Save & Exit" + save: "Spara och avsluta", + // [Auto-translated] "File" + file: "Fil", + // [Auto-translated] "Import" + import: "Import", + // [Auto-translated] "Export" + export: "Export", + // [Auto-translated] "Edit" + edit: "Redigera", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Återställ språk till standard", + // [Auto-translated] "Reset all changes" + resetAll: "Återställ alla ändringar", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "Återställa {0} till standardinställningarna" + } +}; +const locale = getLocaleStrings("sv"); +locale.presets = svStrings; diff --git a/packages/survey-creator-core/src/presets/localization/tajik.ts b/packages/survey-creator-core/src/presets/localization/tajik.ts new file mode 100644 index 0000000000..18257f9ca5 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/tajik.ts @@ -0,0 +1,5 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const tgStrings = { +}; +const locale = getLocaleStrings("tg"); +locale.presets = tgStrings; diff --git a/packages/survey-creator-core/src/presets/localization/thai.ts b/packages/survey-creator-core/src/presets/localization/thai.ts new file mode 100644 index 0000000000..b0dd423423 --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/thai.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const thStrings = { + languages: { + // [Auto-translated] "Languages" + title: "ภาษา", + // [Auto-translated] "Languages" + navigationTitle: "ภาษา", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "เลือกภาษาของ UI และเป้าหมายของผู้สร้างแบบสํารวจ\nภาษาสําหรับแบบสํารวจที่กําลังกําหนดค่า", + // [Auto-translated] "Creator UI language" + creatorUI: "ภาษา UI ของครีเอเตอร์", + // [Auto-translated] "Survey languages" + surveyLanguages: "ภาษาของแบบสํารวจ", + // [Auto-translated] "Type to search..." + searchPlaceholder: "พิมพ์เพื่อค้นหา...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "แปลชื่อภาษาของแบบสํารวจเป็นภาษาอังกฤษ" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "กําหนดค่าแท็บ", + // [Auto-translated] "Tabs" + navigationTitle: "แท็บ", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "เลือกแท็บที่คุณต้องการแสดง จัดลําดับใหม่ เปลี่ยนชื่อ\nแล้วเลือกแท็บที่จะเปิดใช้งานตามค่าเริ่มต้น", + // [Auto-translated] "Visible tabs" + items: "แท็บที่มองเห็นได้", + // [Auto-translated] "Hidden tabs" + hiddenItems: "แท็บที่ซ่อนอยู่", + // [Auto-translated] "Default tab" + defaultTab: "แท็บเริ่มต้น", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "ลากแท็บมาที่นี่เพื่อแสดง", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "ลากแท็บมาที่นี่เพื่อซ่อนแท็บ", + // [Auto-translated] "Name" + name: "ชื่อ", + // [Auto-translated] "Title" + titleField: "ชื่อเรื่อง", + // [Auto-translated] "Icon name" + iconName: "ชื่อไอคอน" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "ตั้งค่ากล่องเครื่องมือ", + // [Auto-translated] "Toolbox" + navigationTitle: "เครื่อง มือ", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "เลือกรายการกล่องเครื่องมือที่คุณต้องการแสดงจัดกลุ่มเป็นหมวดหมู่ \nเปลี่ยนชื่อและเปลี่ยนลําดับหากจําเป็น", + // [Auto-translated] "Toolbox" + toolbox: "เครื่อง มือ", + // [Auto-translated] "Categories" + categories: "ประเภท", + // [Auto-translated] "No categories" + noCategoriesText: "ไม่มีหมวดหมู่", + // [Auto-translated] "Drag items here to show them" + noItemsText: "ลากรายการมาที่นี่เพื่อแสดงรายการเหล่านั้น", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "ลากรายการมาที่นี่เพื่อซ่อนรายการเหล่านั้น", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "รายการกล่องเครื่องมือที่ซ่อนอยู่", + // [Auto-translated] "Enable grouping" + enableGrouping: "เปิดใช้งานการจัดกลุ่ม", + // [Auto-translated] "Show category titles" + showCategoryTitles: "แสดงชื่อประเภท", + // [Auto-translated] "Name" + categoryName: "ชื่อ", + // [Auto-translated] "Title" + categoryTitle: "ชื่อเรื่อง", + // [Auto-translated] "Tooltip" + tooltip: "คําแนะนําเครื่องมือ", + // [Auto-translated] "Icon name" + iconName: "ชื่อไอคอน", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "ออบเจ็กต์ JSON ที่จะนําไปใช้เมื่อผู้ใช้เลือกรายการกล่องเครื่องมือนี้", + // [Auto-translated] "Subcategories" + subitems: "หมวดหมู่ย่อย", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "เปิดใช้งานรายการย่อยสําหรับคําถามนี้...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "ย้ายเป็นรายการย่อยไปยัง...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "เพิ่มไปยังกล่องเครื่องมือ", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "ลบรายการที่กําหนดเอง", + // [Auto-translated] "New Category" + addCustomCategory: "หมวดหมู่ใหม่", + // [Auto-translated] "New Item" + addCustomItem: "รายการใหม่", + // [Auto-translated] "Add a new item" + addNewItem: "เพิ่มรายการใหม่", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "เพิ่มรายการย่อยใหม่", + // [Auto-translated] "There are no items" + noRowsText: "ไม่มีรายการ", + // [Auto-translated] "New item in" + newItem: "รายการใหม่ใน" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "กําหนดตารางคุณสมบัติเอง", + // [Auto-translated] "Property Grid" + navigationTitle: "ตารางทรัพย์สิน", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "เลือกองค์ประกอบเพื่อปรับแต่งการตั้งค่าที่มีอยู่ในกริดคุณสมบัติ", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "เลือกองค์ประกอบเพื่อปรับแต่งการตั้งค่าที่มีอยู่ในกริดคุณสมบัติ", + // [Auto-translated] "Property Grid" + propertyGrid: "ตารางทรัพย์สิน", + // [Auto-translated] "No categories" + noCategoriesText: "ไม่มีหมวดหมู่", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "ลากคุณสมบัติมาที่นี่เพื่อแสดง", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "ลากคุณสมบัติที่นี่เพื่อซ่อน", + // [Auto-translated] "Unsorted items" + hiddenItems: "รายการที่ไม่ได้เรียงลําดับ", + // [Auto-translated] "Name" + categoryName: "ชื่อ", + // [Auto-translated] "Title" + categoryTitle: "ชื่อเรื่อง", + // [Auto-translated] "Icon name" + iconName: "ชื่อไอคอน", + // [Auto-translated] "Name" + name: "ชื่อ", + // [Auto-translated] "Title" + titleField: "ชื่อเรื่อง", + // [Auto-translated] "Helper Text" + descriptionField: "ข้อความตัวช่วย", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "เพิ่มหมวดหมู่ที่กําหนดเอง" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "เพิ่มรายการใหม่", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "เพิ่มรายการย่อยใหม่", + // [Auto-translated] "New item in" + newItem: "รายการใหม่ใน", + // [Auto-translated] "New Category" + addCustomCategory: "หมวดหมู่ใหม่", + // [Auto-translated] "New category in" + newCategory: "หมวดหมู่ใหม่ใน", + // [Auto-translated] "Move to category..." + moveToCategory: "ย้ายไปที่หมวดหมู่...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "ย้ายไปยังหมวดหมู่ใหม่...", + // [Auto-translated] "Categories" + categoriesLabel: "ประเภท", + // [Auto-translated] "Move To..." + moveTo: "ย้ายไปที่...", + // [Auto-translated] "Remove from {0}" + removeFrom: "ลบออกจาก{0}", + // [Auto-translated] "More" + more: "อีก", + // [Auto-translated] "Restore" + restoreToDefault: "ซ่อมแซม", + // [Auto-translated] "Edit" + edit: "แก้ไข", + // [Auto-translated] "Expand" + expand: "ขยาย", + // [Auto-translated] "Collapse" + collapse: "ทรุด", + // [Auto-translated] "Remove" + remove: "ถอด", + // [Auto-translated] "Add" + add: "เพิ่ม", + // [Auto-translated] "Delete" + delete: "ลบ" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "ครีเอเตอร์ที่ตั้งไว้ล่วงหน้า", + // [Auto-translated] "Preset JSON:" + presetJson: "JSON ที่ตั้งไว้ล่วงหน้า:", + // [Auto-translated] "Copy" + copy: "ลอก", + // [Auto-translated] "Download" + download: "ดาวน์โหลด", + // [Auto-translated] "Load" + load: "ภาระ", + // [Auto-translated] "Save & Exit" + saveExit: "บันทึกและออก", + // [Auto-translated] "Back" + back: "ย้อนกลับ", + // [Auto-translated] "Reset to default" + resetToDefault: "รีเซ็ตเป็นค่าเริ่มต้น", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "การตั้งค่าทั้งหมดกลับคืนสู่ค่าเริ่มต้น", + // [Auto-translated] "resored to default" + resoredToDefault: "เปลี่ยนเป็นค่าเริ่มต้น", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "รายการคืนค่าเป็นค่าเริ่มต้น", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "ประเภทถูกคืนค่าเป็นค่าเริ่มต้น", + // [Auto-translated] "Edit" + edit: "แก้ไข", + // [Auto-translated] "Save & Exit" + completeText: "บันทึกและออก", + // [Auto-translated] "Back" + pagePrevText: "ย้อนกลับ" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "ที่ตั้งไว้ล่วงหน้า", + // [Auto-translated] "Creator Presets" + creatorPresets: "ครีเอเตอร์ที่ตั้งไว้ล่วงหน้า", + // [Auto-translated] "Save & Exit" + save: "บันทึกและออก", + // [Auto-translated] "File" + file: "แฟ้ม", + // [Auto-translated] "Import" + import: "นําเข้า", + // [Auto-translated] "Export" + export: "ส่งออก", + // [Auto-translated] "Edit" + edit: "แก้ไข", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "รีเซ็ตภาษาเป็นค่าเริ่มต้น", + // [Auto-translated] "Reset all changes" + resetAll: "รีเซ็ตการเปลี่ยนแปลงทั้งหมด", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "รีเซ็ต{0}เป็นค่าเริ่มต้น" + } +}; +const locale = getLocaleStrings("th"); +locale.presets = thStrings; diff --git a/packages/survey-creator-core/src/presets/localization/traditional-chinese.ts b/packages/survey-creator-core/src/presets/localization/traditional-chinese.ts new file mode 100644 index 0000000000..a74b12fbfc --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/traditional-chinese.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const zhTwStrings = { + languages: { + // [Auto-translated] "Languages" + title: "語言", + // [Auto-translated] "Languages" + navigationTitle: "語言", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "選取調查問卷建立者 UI 和目標的語言\n正在配置的調查問卷的語言。", + // [Auto-translated] "Creator UI language" + creatorUI: "創作者 UI 語言", + // [Auto-translated] "Survey languages" + surveyLanguages: "調查語言", + // [Auto-translated] "Type to search..." + searchPlaceholder: "輸入以搜尋...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "將調查問卷語言名稱翻譯成英文" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "設定索引標籤", + // [Auto-translated] "Tabs" + navigationTitle: "標籤", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "選擇要顯示的選項卡,重新排序它們,更改它們的標題,\n,然後選擇預設會處於作用中的索引標籤。", + // [Auto-translated] "Visible tabs" + items: "可見標籤", + // [Auto-translated] "Hidden tabs" + hiddenItems: "隱藏標籤", + // [Auto-translated] "Default tab" + defaultTab: "預設索引標籤", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "將標籤拖曳到此處以顯示它們", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "將標籤拖曳到此處以隱藏它們", + // [Auto-translated] "Name" + name: "名字", + // [Auto-translated] "Title" + titleField: "名", + // [Auto-translated] "Icon name" + iconName: "圖示名稱" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "設定工具箱", + // [Auto-translated] "Toolbox" + navigationTitle: "工具箱", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "選擇要顯示的工具箱項目,將它們分組為類別,\n重新命名它們,並視需要變更其順序。", + // [Auto-translated] "Toolbox" + toolbox: "工具箱", + // [Auto-translated] "Categories" + categories: "類別", + // [Auto-translated] "No categories" + noCategoriesText: "無分類", + // [Auto-translated] "Drag items here to show them" + noItemsText: "將項目拖曳到此處以顯示它們", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "將項目拖曳到此處以隱藏它們", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "隱藏的工具箱項目", + // [Auto-translated] "Enable grouping" + enableGrouping: "啟用分組", + // [Auto-translated] "Show category titles" + showCategoryTitles: "顯示類別標題", + // [Auto-translated] "Name" + categoryName: "名字", + // [Auto-translated] "Title" + categoryTitle: "名", + // [Auto-translated] "Tooltip" + tooltip: "工具提示", + // [Auto-translated] "Icon name" + iconName: "圖示名稱", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "當使用者選取此工具箱項目時要套用的 JSON 物件", + // [Auto-translated] "Subcategories" + subitems: "子類別", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "啟用此問題的子項目...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "作為子項目移動到...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "新增至工具箱", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "刪除自訂項目", + // [Auto-translated] "New Category" + addCustomCategory: "新類別", + // [Auto-translated] "New Item" + addCustomItem: "新項目", + // [Auto-translated] "Add a new item" + addNewItem: "新增項目", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "新增子項目", + // [Auto-translated] "There are no items" + noRowsText: "沒有項目", + // [Auto-translated] "New item in" + newItem: "新項目" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "自訂屬性格線", + // [Auto-translated] "Property Grid" + navigationTitle: "屬性格線", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "選取元素以自訂其在「性質格線」中可用的設定。", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "選取元素以自訂其在「性質格線」中可用的設定", + // [Auto-translated] "Property Grid" + propertyGrid: "屬性格線", + // [Auto-translated] "No categories" + noCategoriesText: "無分類", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "將屬性拖曳到此處以顯示它們", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "將屬性拖曳到此處以隱藏它們", + // [Auto-translated] "Unsorted items" + hiddenItems: "未排序的項目", + // [Auto-translated] "Name" + categoryName: "名字", + // [Auto-translated] "Title" + categoryTitle: "名", + // [Auto-translated] "Icon name" + iconName: "圖示名稱", + // [Auto-translated] "Name" + name: "名字", + // [Auto-translated] "Title" + titleField: "名", + // [Auto-translated] "Helper Text" + descriptionField: "輔助文字", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "新增自訂類別" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "新增項目", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "新增子項目", + // [Auto-translated] "New item in" + newItem: "新項目", + // [Auto-translated] "New Category" + addCustomCategory: "新類別", + // [Auto-translated] "New category in" + newCategory: "中的新類別", + // [Auto-translated] "Move to category..." + moveToCategory: "移至分類...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "移至新類別...", + // [Auto-translated] "Categories" + categoriesLabel: "類別", + // [Auto-translated] "Move To..." + moveTo: "移至...", + // [Auto-translated] "Remove from {0}" + removeFrom: "從{0}中刪除", + // [Auto-translated] "More" + more: "更", + // [Auto-translated] "Restore" + restoreToDefault: "匡", + // [Auto-translated] "Edit" + edit: "編輯", + // [Auto-translated] "Expand" + expand: "脹", + // [Auto-translated] "Collapse" + collapse: "塌", + // [Auto-translated] "Remove" + remove: "除", + // [Auto-translated] "Add" + add: "加", + // [Auto-translated] "Delete" + delete: "刪除" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "創作者預設集", + // [Auto-translated] "Preset JSON:" + presetJson: "預設 JSON:", + // [Auto-translated] "Copy" + copy: "抄", + // [Auto-translated] "Download" + download: "下載", + // [Auto-translated] "Load" + load: "裝", + // [Auto-translated] "Save & Exit" + saveExit: "儲存並退出", + // [Auto-translated] "Back" + back: "後面", + // [Auto-translated] "Reset to default" + resetToDefault: "重設為預設值", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "所有設定都還原為預設值", + // [Auto-translated] "resored to default" + resoredToDefault: "重置為預設值", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "項目還原為預設值", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "類別還原為預設值", + // [Auto-translated] "Edit" + edit: "編輯", + // [Auto-translated] "Save & Exit" + completeText: "儲存並退出", + // [Auto-translated] "Back" + pagePrevText: "後面" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "預設集", + // [Auto-translated] "Creator Presets" + creatorPresets: "創作者預設集", + // [Auto-translated] "Save & Exit" + save: "儲存並退出", + // [Auto-translated] "File" + file: "檔案", + // [Auto-translated] "Import" + import: "進口", + // [Auto-translated] "Export" + export: "出口", + // [Auto-translated] "Edit" + edit: "編輯", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "將語言重設為預設值", + // [Auto-translated] "Reset all changes" + resetAll: "重設所有變更", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "將{0}重設為預設值" + } +}; +const locale = getLocaleStrings("zh-tw"); +locale.presets = zhTwStrings; diff --git a/packages/survey-creator-core/src/presets/localization/turkish.ts b/packages/survey-creator-core/src/presets/localization/turkish.ts new file mode 100644 index 0000000000..393f513e2c --- /dev/null +++ b/packages/survey-creator-core/src/presets/localization/turkish.ts @@ -0,0 +1,227 @@ +import { getLocaleStrings } from "survey-creator-core"; +export const trStrings = { + languages: { + // [Auto-translated] "Languages" + title: "Diller", + // [Auto-translated] "Languages" + navigationTitle: "Diller", + // [Auto-translated] "Select the language of the Survey Creator UI and target\nlanguages for the survey being configured." + description: "Anket Oluşturucu Kullanıcı Arabiriminin dilini seçin ve hedefleyin\nyapılandırılmakta olan anket için diller.", + // [Auto-translated] "Creator UI language" + creatorUI: "Oluşturucu kullanıcı arayüzü dili", + // [Auto-translated] "Survey languages" + surveyLanguages: "Anket dilleri", + // [Auto-translated] "Type to search..." + searchPlaceholder: "Aramak için yazın...", + // [Auto-translated] "Translate Survey language names to English" + translateToEnglish: "Anket dili adlarını İngilizce'ye çevirme" + }, + tabs: { + // [Auto-translated] "Configure tabs" + title: "Sekmeleri yapılandırma", + // [Auto-translated] "Tabs" + navigationTitle: "Sekmeler", + // [Auto-translated] "Select the tabs you want to show, reorder them, change their titles,\nand choose the tab that will be active by default." + description: "Göstermek istediğiniz sekmeleri seçin, yeniden sıralayın, başlıklarını değiştirin,\nve varsayılan olarak etkin olacak sekmeyi seçin.", + // [Auto-translated] "Visible tabs" + items: "Görünür sekmeler", + // [Auto-translated] "Hidden tabs" + hiddenItems: "Gizli sekmeler", + // [Auto-translated] "Default tab" + defaultTab: "Varsayılan sekme", + // [Auto-translated] "Drag tabs here to show them" + noItemsText: "Sekmeleri göstermek için buraya sürükleyin", + // [Auto-translated] "Drag tabs here to hide them" + noHiddenItemsText: "Gizlemek için sekmeleri buraya sürükleyin", + // [Auto-translated] "Name" + name: "Ad", + // [Auto-translated] "Title" + titleField: "Başlık", + // [Auto-translated] "Icon name" + iconName: "Simge adı" + }, + toolbox: { + // [Auto-translated] "Set up the Toolbox" + title: "Araç Kutusu'nu ayarlama", + // [Auto-translated] "Toolbox" + navigationTitle: "Araç", + // [Auto-translated] "Select the toolbox items you want to show, group them into categories, \nrename them, and change their order if required." + description: "Göstermek istediğiniz araç kutusu öğelerini seçin, kategoriler halinde gruplandırın, \nBunları yeniden adlandırın ve gerekirse sıralarını değiştirin.", + // [Auto-translated] "Toolbox" + toolbox: "Araç", + // [Auto-translated] "Categories" + categories: "Kategori", + // [Auto-translated] "No categories" + noCategoriesText: "Kategori yok", + // [Auto-translated] "Drag items here to show them" + noItemsText: "Öğeleri göstermek için buraya sürükleyin", + // [Auto-translated] "Drag items here to hide them" + noHiddenItemsText: "Öğeleri gizlemek için buraya sürükleyin", + // [Auto-translated] "Hidden toolbox items" + hiddenItems: "Gizli araç kutusu öğeleri", + // [Auto-translated] "Enable grouping" + enableGrouping: "Gruplandırmayı etkinleştir", + // [Auto-translated] "Show category titles" + showCategoryTitles: "Kategori başlıklarını göster", + // [Auto-translated] "Name" + categoryName: "Ad", + // [Auto-translated] "Title" + categoryTitle: "Başlık", + // [Auto-translated] "Tooltip" + tooltip: "Araç ipucu", + // [Auto-translated] "Icon name" + iconName: "Simge adı", + // [Auto-translated] "JSON object to apply when users select this toolbox item" + jsonObject: "Kullanıcılar bu araç kutusu öğesini seçtiğinde uygulanacak JSON nesnesi", + // [Auto-translated] "Subcategories" + subitems: "Alt kategori", + // [Auto-translated] "Enable subitems for this question..." + enableSubitems: "Bu soru için alt öğeleri etkinleştirin...", + // [Auto-translated] "Move as a subitem to..." + moveAsSubitem: "Bir alt öğe olarak şuraya taşı...", + // [Auto-translated] "Add to Toolbox" + addToToolbox: "Araç Kutusu'na ekle", + // [Auto-translated] "Delete Custom Item" + deleteCustomItem: "Özel Öğeyi Sil", + // [Auto-translated] "New Category" + addCustomCategory: "Yeni Kategori", + // [Auto-translated] "New Item" + addCustomItem: "Yeni Eşya", + // [Auto-translated] "Add a new item" + addNewItem: "Yeni bir öğe ekle", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Yeni bir alt öğe ekle", + // [Auto-translated] "There are no items" + noRowsText: "Öğe yok", + // [Auto-translated] "New item in" + newItem: "Yeni ürün" + }, + propertyGrid: { + // [Auto-translated] "Customize the Property Grid" + title: "Özellik Izgarasını Özelleştirme", + // [Auto-translated] "Property Grid" + navigationTitle: "Özellik Izgarası", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid." + description: "Özellik Kılavuzu'nda bulunan ayarlarını özelleştirmek için bir öğe seçin.", + // [Auto-translated] "Select an element to customize its settings available in the Property Grid" + selectElement: "Özellik Izgarası'nda bulunan ayarlarını özelleştirmek için bir öğe seçin", + // [Auto-translated] "Property Grid" + propertyGrid: "Özellik Izgarası", + // [Auto-translated] "No categories" + noCategoriesText: "Kategori yok", + // [Auto-translated] "Drag properties here to show them" + noItemsText: "Özellikleri göstermek için buraya sürükleyin", + // [Auto-translated] "Drag properties here to hide them" + noHiddenItemsText: "Özellikleri gizlemek için buraya sürükleyin", + // [Auto-translated] "Unsorted items" + hiddenItems: "Sıralanmamış öğeler", + // [Auto-translated] "Name" + categoryName: "Ad", + // [Auto-translated] "Title" + categoryTitle: "Başlık", + // [Auto-translated] "Icon name" + iconName: "Simge adı", + // [Auto-translated] "Name" + name: "Ad", + // [Auto-translated] "Title" + titleField: "Başlık", + // [Auto-translated] "Helper Text" + descriptionField: "Yardımcı Metin", + // [Auto-translated] "Add Custom Category" + addCustomCategory: "Özel Kategori Ekle" + }, + items: { + // [Auto-translated] "Add a new item" + addNewItem: "Yeni bir öğe ekle", + // [Auto-translated] "Add a new subitem" + addNewSubitem: "Yeni bir alt öğe ekle", + // [Auto-translated] "New item in" + newItem: "Yeni ürün", + // [Auto-translated] "New Category" + addCustomCategory: "Yeni Kategori", + // [Auto-translated] "New category in" + newCategory: "Yeni kategori", + // [Auto-translated] "Move to category..." + moveToCategory: "Kategoriye taşı...", + // [Auto-translated] "Move to new category..." + moveToNewCategory: "Yeni kategoriye taşı...", + // [Auto-translated] "Categories" + categoriesLabel: "Kategori", + // [Auto-translated] "Move To..." + moveTo: "Şuraya Taşı...", + // [Auto-translated] "Remove from {0}" + removeFrom: "{0}'den kaldır", + // [Auto-translated] "More" + more: "Daha", + // [Auto-translated] "Restore" + restoreToDefault: "Geri yüklemek", + // [Auto-translated] "Edit" + edit: "Düzenlemek", + // [Auto-translated] "Expand" + expand: "Genişletmek", + // [Auto-translated] "Collapse" + collapse: "Çökmek", + // [Auto-translated] "Remove" + remove: "Kaldırmak", + // [Auto-translated] "Add" + add: "Eklemek", + // [Auto-translated] "Delete" + delete: "Silmek" + }, + editor: { + // [Auto-translated] "Creator Presets" + title: "İçerik Oluşturucu Ön Ayarları", + // [Auto-translated] "Preset JSON:" + presetJson: "Önceden ayarlanmış JSON:", + // [Auto-translated] "Copy" + copy: "Kopya etmek", + // [Auto-translated] "Download" + download: "İndirmek", + // [Auto-translated] "Load" + load: "Yük", + // [Auto-translated] "Save & Exit" + saveExit: "Kaydet & Çık", + // [Auto-translated] "Back" + back: "Geri", + // [Auto-translated] "Reset to default" + resetToDefault: "Varsayılana sıfırla", + // [Auto-translated] "All settings restored to default" + resetToDefaults: "Tüm ayarlar varsayılana geri yüklendi", + // [Auto-translated] "resored to default" + resoredToDefault: "varsayılana geri döndü", + // [Auto-translated] "Item restored to default" + itemRestoredToDefault: "Öğe varsayılana geri yüklendi", + // [Auto-translated] "Category restored to default" + categoryRestoredToDefault: "Kategori varsayılana geri yüklendi", + // [Auto-translated] "Edit" + edit: "Düzenlemek", + // [Auto-translated] "Save & Exit" + completeText: "Kaydet & Çık", + // [Auto-translated] "Back" + pagePrevText: "Geri" + }, + plugin: { + // [Auto-translated] "Presets" + presetsTab: "Önayarları", + // [Auto-translated] "Creator Presets" + creatorPresets: "İçerik Oluşturucu Ön Ayarları", + // [Auto-translated] "Save & Exit" + save: "Kaydet & Çık", + // [Auto-translated] "File" + file: "Dosya", + // [Auto-translated] "Import" + import: "Ithalat", + // [Auto-translated] "Export" + export: "Ihracat", + // [Auto-translated] "Edit" + edit: "Düzenlemek", + // [Auto-translated] "Reset Languages to default" + resetLanguages: "Dilleri varsayılana sıfırla", + // [Auto-translated] "Reset all changes" + resetAll: "Tüm değişiklikleri sıfırla", + // [Auto-translated] "Reset {0} to defaults" + resetToDefaults: "{0} varsayılanlara sıfırla" + } +}; +const locale = getLocaleStrings("tr"); +locale.presets = trStrings; diff --git a/packages/survey-creator-core/src/presets/preset-question-json.ts b/packages/survey-creator-core/src/presets/preset-question-json.ts index a2e4f85ed1..929b1bf6c5 100644 --- a/packages/survey-creator-core/src/presets/preset-question-json.ts +++ b/packages/survey-creator-core/src/presets/preset-question-json.ts @@ -1,4 +1,4 @@ -import { QuestionCommentModel, ItemValue, Serializer, ElementFactory, ITextArea, Helpers, RendererFactory, TextAreaModel, CustomError, SurveyError } from "survey-core"; +import { QuestionCommentModel, Serializer, ElementFactory, Helpers, RendererFactory, TextAreaModel, CustomError, SurveyError } from "survey-core"; import { SurveyJSON5 } from "survey-creator-core"; export class QuestionPresetJsonModel extends QuestionCommentModel { @@ -13,6 +13,9 @@ export class QuestionPresetJsonModel extends QuestionCommentModel { protected getCssType(): string { return "comment"; } + public getTemplate(): string { + return "comment"; + } public get textAreaModel(): TextAreaModel { if (!this.jsonAreaModelValue) { const options = this.getTextAreaOptions(); @@ -53,9 +56,3 @@ Serializer.addClass("presetjson", function () { return new QuestionPresetJsonModel(""); }, "comment" ); - -RendererFactory.Instance.registerRenderer( - "presetjson", - "default-comment", - "comment" -); diff --git a/packages/survey-creator-core/src/presets/preset-question-ranking.ts b/packages/survey-creator-core/src/presets/preset-question-ranking.ts deleted file mode 100644 index f68aeba077..0000000000 --- a/packages/survey-creator-core/src/presets/preset-question-ranking.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { QuestionRankingModel, ItemValue, Serializer, ElementFactory } from "survey-core"; -import { editorLocalization } from "survey-creator-core"; - -export class PresetItemValue extends ItemValue { - constructor(value: any, text: string = null, protected typeName = "presetitemvalue" - ) { - super(value, text, typeName); - } - public getType(): string { - return !!this.typeName ? this.typeName : "presetitemvalue"; - } - protected onPropertyValueChanged(name: string, oldValue: any, newValue: any): void { - if (name === "text" && !!oldValue && !newValue && !!this.locText.localizationName) { - const presetStrs = editorLocalization.presetStrings; - editorLocalization.presetStrings = undefined; - this.locText.text = editorLocalization.getString(this.locText.localizationName); - editorLocalization.presetStrings = presetStrs; - } - } - public updateModifiedText(locStrs: any): void { - if (!this.locText.localizationName) return undefined; - const text = this.locText.text; - const presetStrs = editorLocalization.presetStrings; - editorLocalization.presetStrings = undefined; - if (text !== editorLocalization.getString(this.locText.localizationName)) { - this.saveTextInLocStrs(locStrs, text); - } - editorLocalization.presetStrings = presetStrs; - } - private saveTextInLocStrs(locStrs: any, text: string): void { - const paths = this.locText.localizationName.split("."); - for (let i = 0; i < paths.length - 1; i ++) { - const path = paths[i]; - if (!locStrs[path]) { - locStrs[path] = {}; - } - locStrs = locStrs[path]; - } - locStrs[paths[paths.length - 1]] = text; - } -} - -export class QuestionPresetRankingModel extends QuestionRankingModel { - constructor(name: string) { - super(name); - this.itemComponent = "sv-preset-ranking-item-content"; - } - public alwaysHasValue: boolean; - public getType(): string { - return "presetranking"; - } - protected getItemValueType(): string { - return "presetitemvalue"; - } - protected getCssType(): string { - return "ranking"; - } - protected setNewValue(newValue: any): void { - if ((this.alwaysHasValue && - !Array.isArray(newValue) || newValue.length === 0) && - this.visibleChoices.length > 0) { - const val = []; - this.visibleChoices.forEach(item => val.push(item.value)); - newValue = val; - } - super.setNewValue(newValue); - } - public updateModifiedText(locStrs: any): void { - if (!this.isVisible) return; - this.choices.forEach(item => { - (item).updateModifiedText(locStrs); - }); - } -} - -Serializer.addClass("presetitemvalue", - [], - (value: any) => new PresetItemValue(value), - "itemvalue" -); -Serializer.addClass("presetranking", - [], - function () { return new QuestionPresetRankingModel(""); }, - "ranking" -); -ElementFactory.Instance.registerElement("presetranking", (name) => { - return new QuestionPresetRankingModel(name); -}, false); diff --git a/packages/survey-creator-core/src/presets/presets-editable-base.ts b/packages/survey-creator-core/src/presets/presets-editable-base.ts index 3ee97dca34..fb27ab4e24 100644 --- a/packages/survey-creator-core/src/presets/presets-editable-base.ts +++ b/packages/survey-creator-core/src/presets/presets-editable-base.ts @@ -1,5 +1,6 @@ -import { Helpers, IDialogOptions, MatrixDynamicRowModel, QuestionMatrixDynamicModel, settings, SurveyModel } from "survey-core"; -import { SurveyCreatorModel, editorLocalization, CreatorPresetBase, ICreatorOptions } from "survey-creator-core"; +import { Helpers, IDialogOptions, MatrixDynamicRowModel, QuestionMatrixDynamicModel, settings, SurveyModel, IAction, PanelModel } from "survey-core"; +import { PropertyGridModel, SurveyCreatorModel, editorLocalization, CreatorPresetBase, ICreatorOptions, getLocString } from "survey-creator-core"; +import { presetsCss } from "./presets-theme/presets"; export interface ICreatorPresetEditorSetup { creator: SurveyCreatorModel; @@ -8,6 +9,7 @@ export interface ICreatorPresetEditorSetup { export class CreatorPresetEditableBase { public parent: CreatorPresetEditableBase; + protected get navigationPanelName(): string { return this.path + "_navigation"; } public children: Array = []; public constructor(public preset: CreatorPresetBase) { } @@ -21,6 +23,11 @@ export class CreatorPresetEditableBase { return prefix + this.path; } public get pageName(): string { return "page_" + this.fullPath; } + public getPageTitle(model: SurveyModel): string { return model.getPageByName(this.pageName).title; } + public getPageShortTitle(model: SurveyModel): string { return model.getPageByName(this.pageName).navigationTitle; } + protected get mainPanelName() { return this.path + "_mainPanel"; } + public getMainElementNames() : any { return [this.mainPanelName]; } + public getMainPanelName() : any { return this.mainPanelName; } public createPages(): Array { const res = []; const mainPage = this.createMainPage(); @@ -35,6 +42,8 @@ export class CreatorPresetEditableBase { }); return res; } + public get questionNames(): string[] { return []; } + public notifyCallback = (message: string) => {}; public validate(model: SurveyModel): boolean { if (!this.validateCore(model)) return false; for (let i = 0; i < this.children.length; i ++) { @@ -56,9 +65,10 @@ export class CreatorPresetEditableBase { protected getTextVisibleIf(name: string, val: string): string { return "{" + name + "}='" + val + "'"; } protected getNotEmptyVisibleIf(name: string): string { return "{" + name + "} notempty"; } protected createMainPageCore(): any { return undefined; } - public getJsonValue(model: SurveyModel, creator: SurveyCreatorModel): any { + public getNavigationElementName() : any { return this.navigationPanelName; } + public getJsonValue(model: SurveyModel, creator: SurveyCreatorModel, defaultJson?: any): any { const page = model.getPageByName(this.pageName); - const core = page && page.isVisible ? this.getJsonValueCore(model, creator) : undefined; + const core = page && page.isVisible ? this.getJsonValueCore(model, creator, defaultJson) : undefined; let hasValue = !!core; const res = hasValue ? core : {}; this.children.forEach(item => { @@ -70,6 +80,11 @@ export class CreatorPresetEditableBase { }); return hasValue ? res : undefined; } + public getDefaultJsonValue(creator: SurveyCreatorModel) { + const json = this.getDefaultJsonValueCore(creator); + this.children.forEach(item => json[item.path] = item.getDefaultJsonValueCore(creator)); + return json; + } public setJsonLocalizationStrings(model: SurveyModel, locStrs: any): void { this.setJsonLocalizationStringsCore(model, locStrs); this.children.forEach(item => item.setJsonLocalizationStrings(model, locStrs)); @@ -88,12 +103,17 @@ export class CreatorPresetEditableBase { item.setupQuestions(model, creatorSetup); }); } - public setupOnCurrentPage(model: SurveyModel, creator: SurveyCreatorModel): void { - if (model.currentPage.name === this.pageName) { - this.setupOnCurrentPageCore(model, creator); - } + public resetToDefaults(model: SurveyModel, notify = true): void { + this.restoreValuesFromDefault(model); + this.notifyCallback(this.getPageTitle(model) + " " + getLocString("presets.editor.resoredToDefault")); this.children.forEach(item => { - item.setupOnCurrentPage(model, creator); + item.resetToDefaults(model, notify); + }); + } + public setupOnCurrentPage(model: SurveyModel, creator: SurveyCreatorModel, active: boolean): void { + this.setupOnCurrentPageCore(model, creator, active); + this.children.forEach(item => { + item.setupOnCurrentPage(model, creator, active); }); } public updateOnValueChanged(model: SurveyModel, name: string): void { @@ -117,8 +137,10 @@ export class CreatorPresetEditableBase { public onMatrixRowDragOver(model: SurveyModel, creator: SurveyCreatorModel, options: any): void { } public onMatrixRowRemoving(model: SurveyModel, creator: SurveyCreatorModel, options: any): void { } public onMatrixRowAdded(model: SurveyModel, creator: SurveyCreatorModel, options: any): void { } + public onMatrixCellValueChanged(model: SurveyModel, creator: SurveyCreatorModel, options: any): void { } public setupQuestionsValue(model: SurveyModel, json: any, creator: SurveyCreatorModel): void { this.setupQuestionsValueCore(model, json, creator); + this.saveValuesAsDefault(model); this.children.forEach(item => { item.setupQuestionsValue(model, !!json ? json[item.path] : undefined, creator); }); @@ -129,14 +151,24 @@ export class CreatorPresetEditableBase { item.setupQuestionsValue(model, !!json ? json[item.path] : undefined, creator); }); } + + private saveValuesAsDefault(model: SurveyModel) { + this.questionNames.forEach(name => model.getQuestionByName(name).defaultValue = model.getValue(name) && JSON.parse(JSON.stringify(model.getValue(name)))); + } + private restoreValuesFromDefault(model: SurveyModel) { + this.questionNames.forEach(name => model.getQuestionByName(name).value = model.getQuestionByName(name).defaultValue && JSON.parse(JSON.stringify(model.getQuestionByName(name).defaultValue))); + } + protected setupQuestionsCore(model: SurveyModel, creatorSetup: ICreatorPresetEditorSetup): void { } + protected resetToDefaultsCore(model: SurveyModel): void { } protected setupQuestionsValueCore(model: SurveyModel, json: any, creator: SurveyCreatorModel): void {} protected onLocaleChangedCore(model: SurveyModel, json: any, creator: SurveyCreatorModel): void {} - protected getJsonValueCore(model: SurveyModel, creator: SurveyCreatorModel): any { return undefined; } + protected getJsonValueCore(model: SurveyModel, creator: SurveyCreatorModel, defaultJson: any): any { return undefined; } + protected getDefaultJsonValueCore(creator: SurveyCreatorModel): any { return {}; } protected setJsonLocalizationStringsCore(model: SurveyModel, locStrs: any): void {} protected updateJsonLocalizationStringsCore(locStrs: any): void {} protected disposeCore(): void {} - protected setupOnCurrentPageCore(model: SurveyModel, creator: SurveyCreatorModel): void {} + protected setupOnCurrentPageCore(model: SurveyModel, creator: SurveyCreatorModel, active: boolean): void {} protected updateOnValueChangedCore(model: SurveyModel, name: string): void {} protected updateOnMatrixDetailPanelVisibleChangedCore(model: SurveyModel, creator: SurveyCreatorModel, options: any): void {} protected onGetMatrixRowActionsCore(model: SurveyModel, creator: SurveyCreatorModel, options: any): void {} @@ -144,22 +176,30 @@ export class CreatorPresetEditableBase { return Helpers.getUnbindValue(json); } - protected showDetailPanelInPopup(matrix: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel, rootElement: HTMLElement, hideDetailPanel = true) { + protected showDetailPanelInPopup(matrix: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel, rootElement: HTMLElement, options: {actions?: IAction[], title?: string}) { + const index = (matrix.visibleRows as any).findIndex(r => r === row); + const data = matrix.value[index]; + const survey = new SurveyModel({ elements: matrix.toJSON().detailElements }); + survey.fitToContainer = false; + survey.showNavigationButtons = false; + survey.data = data; + survey.css = presetsCss; + survey.enterKeyAction = "loseFocus"; if (settings.showDialog) { - const data = matrix.value[(matrix.visibleRows as any).findIndex(r => r === row)]; - if (hideDetailPanel) row.hideDetailPanel(); - const survey = new SurveyModel({ elements: matrix.toJSON().detailElements }); - survey.fitToContainer = false; - survey.showNavigationButtons = false; - survey.data = data; const popupModel = settings.showDialog?.({ componentName: "survey", data: { survey: survey, model: survey }, onApply: () => { if (survey.validate()) { const newValue = [...matrix.value]; - const newRowValue = { ...row.value, ...survey.data }; - newValue[row.index] = newRowValue; + const newData: any = { }; + survey.getAllQuestions().forEach(q => { + if (q.visible) { + newData[q.name] = survey.data[q.name]; + } + }); + const newRowValue = { ...row.value, ...newData }; + newValue[index] = newRowValue; matrix.value = newValue; return true; } else { @@ -169,12 +209,29 @@ export class CreatorPresetEditableBase { onCancel: () => { return true; }, - cssClass: "svc-property-editor svc-creator-popup", - title: "Detail", + cssClass: "sps-popup svc-property-editor svc-creator-popup", + title: options.title || getLocString("presets.editor.edit"), displayMode: "popup" }, rootElement); - return survey; + if (survey.getAllQuestions().filter(q => !q.startWithNewLine).length > 0) { + popupModel.width = "100%"; + } + + if (popupModel.footerToolbar) { + const defaultActionBarCss = popupModel.footerToolbar.cssClasses; + defaultActionBarCss.item = "sps-btn"; + popupModel.footerToolbar.cssClasses = defaultActionBarCss; + popupModel.footerToolbar.getActionById("apply").innerCss = "sps-btn--primary-brand"; + popupModel.footerToolbar.getActionById("cancel").innerCss = "sps-btn--secondary-brand"; + + if (options.actions) { + popupModel.footerToolbar.actions.unshift(...options.actions); + } + } + survey.getAllPanels().forEach(q => (q as PanelModel).visible = !(q as PanelModel).visible); + survey.getAllQuestions().forEach(q => q.visible = !q.visible); } + return survey; } public static updateModifiedText(locStrs: any, text: string, localizationName: string): void { if (!localizationName) return undefined; diff --git a/packages/survey-creator-core/src/presets/presets-editable-categorized.ts b/packages/survey-creator-core/src/presets/presets-editable-categorized.ts index d6042249f0..2e9a71cbbb 100644 --- a/packages/survey-creator-core/src/presets/presets-editable-categorized.ts +++ b/packages/survey-creator-core/src/presets/presets-editable-categorized.ts @@ -1,52 +1,201 @@ -import { FunctionFactory, Helpers, IDialogOptions, ItemValue, MatrixDropdownRowModelBase, MatrixDynamicRowModel, QuestionMatrixDynamicModel, Serializer, settings, SurveyModel } from "survey-core"; -import { CreatorPresetEditableBase, ICreatorPresetEditorSetup } from "./presets-editable-base"; -import { QuestionToolboxCategory, QuestionToolboxItem, SurveyCreatorModel, SurveyJSON5, editorLocalization } from "survey-creator-core"; -import { PresetItemValue, QuestionPresetRankingModel } from "./preset-question-ranking"; -import { ICreatorPresetToolboxItem } from "survey-creator-core"; -import { CreatorPresetEditorModel } from "./presets-editor"; -import { SurveyHelper } from "../survey-helper"; +import { Action, createDropdownActionModel, IAction, MatrixDynamicRowModel, PopupModel, QuestionMatrixDynamicModel, SurveyModel } from "survey-core"; +import { SurveyCreatorModel, SurveyHelper, getLocString } from "survey-creator-core"; import { CreatorPresetEditableList } from "./presets-editable-list"; - +import { listComponentCss } from "./presets-theme/list-theme"; export class CreatorPresetEditableCaregorizedListConfigurator extends CreatorPresetEditableList { //private replaceNonLettersWithDash(inputString) { // return inputString?.replace(/[^a-zA-Z0-9]/g, "-"); //} - + protected defaultCategories: any; + protected getDefaultItems(question?: QuestionMatrixDynamicModel) { + return question?.name === this.nameCategories ? this.defaultCategories : this.defaultItems; + } protected get nameInnerMatrix() { return "items"; } protected get nameCategories() { return this.fullPath + "_categories"; } - //private fillAutoName(question: QuestionMatrixDynamicModel, propName: string) { - // question.value?.filter(v =>v.isDefault === false && !v[propName]).forEach(v => v[propName] = this.replaceNonLettersWithDash(v.title)); - //} - protected updateOnValueChangedCore(model: SurveyModel, name: string) { - // if (name == this.nameCategories) { - // this.fillAutoName(this.getQuestionCategories(model), "category"); - // } - // if (name == this.nameMatrix) { - // this.fillAutoName(this.getMatrix(model), "name"); - // } - } - private editCategory(model: SurveyModel, row: MatrixDynamicRowModel) { - const survey = this.showDetailPanelInPopup(this.getQuestionCategories(model), row, model.rootElement, false); - if (survey) { - const category = survey.getQuestionByName("category"); - const isDefault = row.getQuestionByName("isDefault"); - - if (category) { - category.visible = true; - if (isDefault) category.readOnly = isDefault.value; + public getMainElementNames() : any { return [this.nameCategories]; } + protected getMatrixKeyColumnName(question: QuestionMatrixDynamicModel) : any { + return question.name === this.nameCategories ? "category" : "name"; + } + public get questionNames() { + return [this.nameCategories]; + } + + protected setupCategoryActions(model: SurveyModel, creator: SurveyCreatorModel, question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel, actions: IAction[]): void { + actions.forEach(a => { + if (a.id == "remove-row") { + a.iconName = "icon-delete_24x24"; + a.tooltip = getLocString("presets.items.delete"); + a.innerCss = "sps-action-button sps-action-button--icon sps-action-button--danger"; + } + if (a.id == "reset-to-default") { + a.action = () => { this.resetCategory(model, row); }; } - survey.getAllQuestions().forEach(q => q.visible = q.name != this.nameInnerMatrix); + }); + } + + protected ejectRowData(question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel, remove: boolean) { + const value = question.value; + const rowDataIndex = question.visibleRows.indexOf(row); + const rowData = value[rowDataIndex]; + if (remove) { + value.splice(rowDataIndex, 1); + question.value = value; + } + return rowData; + } + + private moveToCategory(model: SurveyModel, question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel, categoryName: string, remove = false) { + const rowData = this.ejectRowData(question, row, remove); + const categories = this.getQuestionCategories(model); + const catValue = categories.value; + const general = this.findOrCreateCategory(catValue, categoryName); + general[this.nameInnerMatrix].push(rowData); + categories.value = catValue; + } + + protected itemMenuCategoriesEnabled(model: SurveyModel) { + return true; + } + + protected setSubitemsToAction(action: Action, items: Action[]) { + action.setSubItems({ items: items, cssClasses: listComponentCss }); + action.markerIconName = "icon-chevronright-24x24"; + } + + protected getItemMenuActionsCore(model: SurveyModel, question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel) { + const categories = this.getQuestionCategories(model).value; + const actions = [] as IAction[]; + const isUnsorted = question.name == this.nameMatrix; + const hasCategories = this.itemMenuCategoriesEnabled(model); + if (!isUnsorted) { + actions.push( + new Action({ + id: "remove-from", + title: getLocString("presets.items.removeFrom").replace("{0}", question.title), + action: () => { + const rowDataIndex = question.visibleRows.indexOf(row); + question.removeRow(rowDataIndex); + } + }) + ); + } else { + if (hasCategories) { + actions.push(new Action({ + id: "move-to", + title: getLocString("presets.items.moveTo"), + css: "sps-list__item--label", + enabled: false + })); + } else { + actions.push(new Action({ + id: "restore-item", + title: getLocString("presets.toolbox.addToToolbox"), + action: () => { + const rowDataIndex = question.visibleRows.indexOf(row); + question.removeRow(rowDataIndex); + } + })); + } + } + + if (!hasCategories) return actions; + const currentCategory = categories.filter(c => c[this.nameInnerMatrix].filter(i => i.name == row.value?.name).length > 0)[0]; + const moveToCategories = categories.filter((i: any) => i.category != currentCategory?.category).map((i: any) => new Action({ + id: "to-" + i.category, + title: i.title, + action: () => { + this.moveToCategory(model, question, row, i.category, true); + } + })); + if (!isUnsorted) { + actions.push(new Action({ + id: "categories", + title: getLocString("presets.items.categoriesLabel"), + css: "sps-list__item--label", + enabled: false, + needSeparator: true + })); + const catGroup = new Action({ + id: "move-to-categories", + title: getLocString("presets.items.moveToCategory") + }); + this.setSubitemsToAction(catGroup, moveToCategories); + actions.push(catGroup); + } else { + actions.push(...moveToCategories); + } + + actions.push( + new Action({ + id: "move-to-new-category", + title: getLocString("presets.items.moveToNewCategory"), + needSeparator: isUnsorted, + action: () => { + this.moveToCategory(model, question, row, this.getDefaultValueForRow(model, question, "category"), true); + } + })); + + return actions; + } + + protected getItemMenuActions(model: SurveyModel, question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel) { + const actions = this.getItemMenuActionsCore(model, question, row); + if (!this.getDefaultItem(question, row.value.name)) { + actions.push( + new Action({ + id: "remove-custom-item", + title: getLocString("presets.items.deleteCustomItem"), + css: "sps-list__item--alert", + needSeparator: true, + action: () => { + this.ejectRowData(question, row, true); + } + }) + ); + } + return actions; + } + + protected replaceRemoveAction(model: SurveyModel, question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel, actions: IAction[]): void { + const originalAction = actions.filter(a => a.id == "remove-row")[0]; + if (originalAction) { + originalAction.visible = false; + + const addAction = createDropdownActionModel({ + id: "context-menu", + iconName: "more-circle-24x24", + tooltip: getLocString("presets.items.more"), + location: "end", + visibleIndex: 20 + }, { + items: [], + showPointer: false, + verticalPosition: "bottom", + horizontalPosition: "center", + cssClass: "sps-popup-menu sps-popup-menu--context", + cssClasses: listComponentCss, + searchEnabled: false + }); + addAction.popupModel.onVisibilityChanged.add((_: PopupModel, opt: { model: PopupModel, isVisible: boolean }) => { + if (opt.isVisible) { + const listModel = opt.model.contentComponentData.model; + listModel.actions = this.getItemMenuActions(model, question, row); + listModel.flushUpdates(); + } + }); + actions.push(addAction); } } protected getQuestionCategories(model: SurveyModel): QuestionMatrixDynamicModel { return model.getQuestionByName(this.nameCategories); } - protected isItemsMatrix(question: QuestionMatrixDynamicModel): boolean { - return super.isItemsMatrix(question) || question.name === this.nameInnerMatrix; + protected isItemsMatrix(name: string): boolean { + return super.isItemsMatrix(name) || name === this.nameInnerMatrix; } private resetCategory(model: SurveyModel, row: MatrixDynamicRowModel) { const category = row.getValue("category"); - const defaultItems = this.defaultItems.filter(i => i.category == category); + const defaultItems = this.defaultCategories.filter(i => i.category == category)[0]?.[this.nameInnerMatrix]; + if (!defaultItems) return; const categoriesQuestion = this.getQuestionCategories(model); const hiddenItemsQuestion = this.getMatrix(model); const hiddenValue = hiddenItemsQuestion.value || []; @@ -74,77 +223,59 @@ export class CreatorPresetEditableCaregorizedListConfigurator extends CreatorPre hiddenItemsQuestion.value = hiddenValue; categoriesQuestion.value = value; + this.notifyCallback(getLocString("presets.editor.categoryRestoredToDefault")); } - protected findOrCreateGeneralCategory(categories: any) { - let generalCategory = categories.filter(c => c.category == "general")[0]; + protected findOrCreateCategory(categories: any, category?: string) { + let generalCategory = categories.filter(c => c.category == category)[0]; if (!generalCategory) { - generalCategory = { category: "general", title: "General", [this.nameInnerMatrix]: [] }; + generalCategory = { category: category || "general", title: category || "General", [this.nameInnerMatrix]: [] }; categories.push(generalCategory); } return generalCategory; } + protected needToSetActions(name: string) { + return this.isItemsMatrix(name) || name === this.nameCategories; + } protected onGetMatrixRowActionsCore(model: SurveyModel, creator: SurveyCreatorModel, options: any): void { super.onGetMatrixRowActionsCore(model, creator, options); if (options.question.name === this.nameCategories) { - options.question.cssClasses.detailIconExpandedId = "icon-collapse-24x24"; - options.question.cssClasses.detailIconId = "icon-expand-24x24"; - - const iconName = options.question.value?.filter(v => v.category == options.row.getValue("category"))[0]?.iconName; - if (iconName) { - options.actions.push({ - id: iconName, - iconName: iconName, - location: "start", - enabled: false - }); - } - - options.actions.push({ - id: "reset-to-default", - iconName: "icon-reset", - location: "end", - visibleIndex: 15, - action: ()=>{ this.resetCategory(model, options.row); } - }); - - options.actions.push({ - id: "edit-category", - iconName: "icon-edit", - location: "end", - visibleIndex: 13, - action: ()=>{ this.editCategory(model, options.row); } - }); - options.actions.forEach(a => { - if (a.id == "show-detail") { - a.location = "end"; - a.iconName = "icon-expand-24x24", - a.visibleIndex = 10; - } - if (a.id == "remove-row") a.visibleIndex = 20; - }); + this.setupCategoryActions(model, creator, options.question, options.row, options.actions); } + if (this.isItemsMatrix(options.question.name)) { + this.replaceRemoveAction(model, options.question, options.row, options.actions); + } + } + + protected getExistingKeys(model: SurveyModel, key: string) { + const cats = model.getQuestionByName(this.nameCategories).value || []; + const unsorted = model.getQuestionByName(this.nameMatrix).value || []; + return [...cats, ...cats.map(c => c.items).flat().filter(key => !!key), ...unsorted]; } + public onMatrixRowRemoving(model: SurveyModel, creator: SurveyCreatorModel, options: any) { super.onMatrixRowRemoving(model, creator, options); if (options.question.name == this.nameCategories) { const items = options.question.value[options.rowIndex][this.nameInnerMatrix]; - const hiddenItems = this.getMatrix(model); - const value = hiddenItems.value ? hiddenItems.value.concat(items) : items; - hiddenItems.value = value; + if (items) { + const hiddenItems = this.getMatrix(model); + const value = hiddenItems.value ? hiddenItems.value.concat(items) : items; + hiddenItems.value = value; + } } if (options.question.name == this.nameMatrix) { const rowData = options.question.value[options.rowIndex]; - const categories = this.getQuestionCategories(model); - const catValue = categories.value; - const general = this.findOrCreateGeneralCategory(catValue); - general[this.nameInnerMatrix].push(rowData); - categories.value = catValue; + const defaultCategory = this.defaultCategories.filter(c => c[this.nameInnerMatrix].filter(i => i.name == rowData.name).length > 0)[0]; + this.moveToCategory(model, options.question, options.row, defaultCategory?.category); } } public onMatrixRowAdded(model: SurveyModel, creator: SurveyCreatorModel, options: any) { super.onMatrixRowAdded(model, creator, options); if (options.question.name == this.nameCategories) { - options.row.getQuestionByName("category").value = SurveyHelper.getNewName((options.question.value || []).map(r => ({ name: r.category })), "category"); + this.setDefaultValueForRow(model, options.question, options.row); + this.editItem(model, creator, options.question, options.row, { + description: getLocString("presets.items.newCategory") + " " + this.getPageShortTitle(model) + }); } } -} \ No newline at end of file +} + diff --git a/packages/survey-creator-core/src/presets/presets-editable-languages.ts b/packages/survey-creator-core/src/presets/presets-editable-languages.ts index 53c11b8565..3bc0d84046 100644 --- a/packages/survey-creator-core/src/presets/presets-editable-languages.ts +++ b/packages/survey-creator-core/src/presets/presets-editable-languages.ts @@ -1,45 +1,70 @@ -import { Helpers, ItemValue, QuestionCheckboxBase, QuestionCheckboxModel, surveyLocalization, SurveyModel } from "survey-core"; -import { CreatorPresetEditableBase, ICreatorPresetEditorSetup } from "./presets-editable-base"; -import { editorLocalization, SurveyCreatorModel } from "survey-creator-core"; - +import { Serializer, ItemValue, QuestionCheckboxModel, surveyLocalization, SurveyModel } from "survey-core"; +import { CreatorPresetEditableBase } from "./presets-editable-base"; +import { getLocString, editorLocalization, SurveyCreatorModel } from "survey-creator-core"; +function searchItem(params) { + const questionInstance = this.survey.getQuestionByName(params[0]); + let itemvalue = params[1]; + let text = params[2]; + if (!text) return true; + const item = questionInstance.choices.filter(c => c.value == itemvalue)[0]; + if (!item) return true; + return item.text.toUpperCase().indexOf(text.toUpperCase()) != -1; +} +import { FunctionFactory } from "survey-core"; +FunctionFactory.Instance.register("searchItem", searchItem); export class CreatorPresetEditableLanguages extends CreatorPresetEditableBase { public createMainPageCore(): any { return { - title: "Select Languages", - navigationTitle: "Languages", + title: getLocString("presets.languages.title"), + description: getLocString("presets.languages.description"), + navigationTitle: getLocString("presets.languages.navigationTitle"), elements: [ - { type: "panel", name: "languages_main_panel", - description: "Select the language of the Survey Creator UI and target languages for the survey being configured.", + { + type: "dropdown", + title: getLocString("presets.languages.creatorUI"), + placeholder: editorLocalization.getLocaleName(""), + name: this.creatorLocaleName, + searchEnabled: true, + choices: this.getCreatorLocales() + }, + { + type: "panel", + title: getLocString("presets.languages.surveyLanguages"), elements: [ { - type: "dropdown", - titleLocation: "left", - title: " UI language:", - placeholder: editorLocalization.getLocaleName(""), - name: this.creatorLocaleName, - choices: this.getCreatorLocales() - }, - { - type: "boolean", - name: this.surveyUseEnglishNames, - title: "Translate Survey language names to Engish", - useTitleAsLabel: true, - renderAs: "checkbox" - }, - { + type: "text", + name: this.searchLocalesName, + placeholder: getLocString("presets.languages.searchPlaceholder"), + titleLocation: "hidden", + textUpdateMode: "onTyping" + }, { type: "checkbox", name: this.surveyLocalesName, - title: "Survey languages", + titleLocation: "hidden", minSelectedChoices: 1, colCount: 3, showSelectAllItem: true, - choices: this.getSurveyLocales() - } - ] - } + choices: this.getSurveyLocales(), + choicesVisibleIf: "searchItem('" + this.surveyLocalesName + "', {item}, {" + this.searchLocalesName + "}" + }] + }, + { + type: "panel", + title: " ", + name: this.navigationPanelName, + elements: [ + { + type: "boolean", + name: this.surveyUseEnglishNames, + title: getLocString("presets.languages.translateToEnglish"), + titleLocation: "hidden", + renderAs: "switch" + }] } ] }; } - protected getJsonValueCore(model: SurveyModel, creator: SurveyCreatorModel): any { + public getMainElementNames() : any { return [this.surveyLocalesName]; } + + protected getJsonValueCore(model: SurveyModel, creator: SurveyCreatorModel, defaultJson: any): any { const creatorLocale = model.getValue(this.creatorLocaleName); const useEnglishNames = model.getValue(this.surveyUseEnglishNames) === true; const question = model.getQuestionByName(this.surveyLocalesName); @@ -65,7 +90,7 @@ export class CreatorPresetEditableLanguages extends CreatorPresetEditableBase { const question = model.getQuestionByName(this.surveyLocalesName); const locales = json.surveyLocales; if (Array.isArray(locales) && locales.length > 0) { - question.valule = locales; + question.valule = locales; // TODO: sheck spell } else { question.selectAll(); } @@ -77,7 +102,12 @@ export class CreatorPresetEditableLanguages extends CreatorPresetEditableBase { } private get creatorLocaleName() : string { return this.path + "_creator"; } private get surveyLocalesName(): string { return this.path + "_surveyLocales"; } + private get searchLocalesName(): string { return this.path + "_searchLocales"; } private get surveyUseEnglishNames(): string { return this.path + "_surveyUseEnglishNames"; } + + public get questionNames() { + return [this.creatorLocaleName, this.surveyLocalesName, this.surveyUseEnglishNames]; + } private getIsShowInEnglishSelected(model: SurveyModel): boolean { return model.getValue(this.surveyUseEnglishNames) === true; } private getCreatorLocales(): Array { return this.getLocaleItemValues(editorLocalization.getLocales(), false); diff --git a/packages/survey-creator-core/src/presets/presets-editable-list.ts b/packages/survey-creator-core/src/presets/presets-editable-list.ts index 5a42d4ea20..c5bc670a00 100644 --- a/packages/survey-creator-core/src/presets/presets-editable-list.ts +++ b/packages/survey-creator-core/src/presets/presets-editable-list.ts @@ -1,40 +1,161 @@ -import { FunctionFactory, Helpers, IDialogOptions, ItemValue, MatrixDropdownRowModelBase, MatrixDynamicRowModel, QuestionMatrixDynamicModel, Serializer, settings, SurveyModel } from "survey-core"; -import { CreatorPresetEditableBase, ICreatorPresetEditorSetup } from "./presets-editable-base"; -import { QuestionToolboxCategory, QuestionToolboxItem, SurveyCreatorModel, SurveyJSON5, editorLocalization } from "survey-creator-core"; -import { PresetItemValue, QuestionPresetRankingModel } from "./preset-question-ranking"; -import { ICreatorPresetToolboxItem } from "survey-creator-core"; -import { CreatorPresetEditorModel } from "./presets-editor"; -import { SurveyHelper } from "../survey-helper"; - +import { Helpers, MatrixDynamicRowModel, QuestionMatrixDynamicModel, SurveyModel, Action, IAction, SvgRegistry, Question, ComputedUpdater } from "survey-core"; +import { CreatorPresetEditableBase } from "./presets-editable-base"; +import { SurveyCreatorModel, SurveyHelper, getLocString } from "survey-creator-core"; export class CreatorPresetEditableList extends CreatorPresetEditableBase { //private replaceNonLettersWithDash(inputString) { // return inputString?.replace(/[^a-zA-Z0-9]/g, "-"); //} - + private defaultIcon = "square-dashed-24x24"; + protected get nameItems() { return this.path + "_items"; } protected get nameMatrix() { return this.fullPath + "_matrix"; } - protected defaultItems: any[]; + protected hasIcon(_: string) { return false; } + public getMainElementNames() : any { return [this.nameItems]; } + protected get iconList() { return Object.keys(SvgRegistry.icons).map(name => "icon-" + name); } + protected getMatrixKeyColumnName(question: QuestionMatrixDynamicModel) : any { return "name"; } + protected getDefaultItems(question?: QuestionMatrixDynamicModel) { + return this.defaultItems; + } + protected getDefaultItem(question: QuestionMatrixDynamicModel, key: string) { + const keyColumn = this.getMatrixKeyColumnName(question); + return this.getDefaultItems(question).filter(i => i[keyColumn] == key)[0]; + } + + protected defaultItems: any; //private fillAutoName(question: QuestionMatrixDynamicModel, propName: string) { // question.value?.filter(v =>v.isDefault === false && !v[propName]).forEach(v => v[propName] = this.replaceNonLettersWithDash(v.title)); //} - protected updateOnValueChangedCore(model: SurveyModel, name: string) { - // if (name == this.nameCategories) { - // this.fillAutoName(this.getQuestionCategories(model), "category"); - // } - // if (name == this.nameMatrix) { - // this.fillAutoName(this.getMatrix(model), "name"); - // } - } - protected updateOnMatrixDetailPanelVisibleChangedCore(model: SurveyModel, creator: SurveyCreatorModel, options: any): void { - if (this.isItemsMatrix(options.question)) { - const survey = this.showDetailPanelInPopup(options.question, options.row, model.rootElement); - const isDefault = options.row.getQuestionByName("isDefault"); - if (survey) { - const name = survey.getQuestionByName("name"); - if (name && isDefault) name.readOnly = isDefault.value; + + protected updateOnValueChangedCore(model: SurveyModel, name: string): void { + if (this.needToSetActions(name)) { + const matrix = model.getQuestionByName(name) as QuestionMatrixDynamicModel; + this.updateMatrixRowActions(model, matrix); + } + } + + protected updateMatrixRowActions(model: SurveyModel, matrix: QuestionMatrixDynamicModel) { + matrix.renderedTable.rows.forEach(r => { + if (!r.row) return; + const iconActions = r.cells[1]?.item?.value.actions; + this.updateRowActions(matrix, r.row as MatrixDynamicRowModel, iconActions); + const actions = r.cells[r.cells.length - 1].item?.value.actions; + this.updateRowActions(matrix, r.row as MatrixDynamicRowModel, actions); + }); + } + + protected updateRowActions(question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel, actions: IAction[]) { + if (!actions) return; + const keyColumn = this.getMatrixKeyColumnName(question); + if (!question.value) return; + const rowData = question.value.filter(r => row.value?.[keyColumn] == r?.[keyColumn])[0]; + if (!rowData) return; + actions.forEach(a => this.updateRowAction(question, rowData, keyColumn, a)); + } + + protected updateRowAction(question: QuestionMatrixDynamicModel, rowData: any, keyColumn: string, action: IAction) { + if (action.id == "icon-action") { + action.iconName = rowData.iconName || this.defaultIcon; + } + if (action.id == "reset-to-default") { + const defaultItem = this.getDefaultItem(question, rowData[keyColumn]); + if (!defaultItem) return; + const defaultData = {}; + Object.keys(rowData).forEach(key => defaultData[key] = defaultItem[key]); + action.enabled = !Helpers.isTwoValueEquals(rowData, defaultData); + } + } + + protected createResetAction(model: SurveyModel, row: MatrixDynamicRowModel, action: (action: Action) => void): IAction { + return { + id: "reset-to-default", + iconName: "icon-reset", + tooltip: getLocString("presets.items.restoreToDefault"), + location: "end", + visibleIndex: 15, + action: action + }; + } + + protected createEditAction(model: SurveyModel, creator: SurveyCreatorModel, question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel): IAction { + return { + id: "edit-item", + iconName: "icon-edit", + tooltip: getLocString("presets.items.edit"), + location: "end", + visibleIndex: 13, + action: () => { this.editItem(model, creator, question, row); } + }; + } + + protected createIconAction(iconName: string, cssClass: string = "sps-matrixdynamic__row-icon"): IAction { + return { + id: "icon-action", + iconName: iconName, + innerCss: cssClass, + location: "start", + enabled: false + }; + } + + protected setupStandardActions(actions: IAction[], question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel, allowExpand: boolean, isItemsMatrix: boolean): void { + actions.forEach(a => { + if (a.id == "show-detail") { + a.location = "end"; + a.iconName = "icon-expand-24x24"; + a.title = new ComputedUpdater(() => row.isDetailPanelShowing ? getLocString("presets.items.collapse") : getLocString("presets.items.expand")); + a.tooltip = getLocString("presets.items.expand"); + a.visibleIndex = 10; + a.visible = allowExpand; } + if (a.id == "remove-row") { + a.visibleIndex = 20; + a.component = "sv-action-bar-item"; + a.action = () => question.removeRowUI(row); + a.iconName = isItemsMatrix ? "icon-add_24x24" : "icon-remove_24x24"; + a.tooltip = isItemsMatrix ? getLocString("presets.items.add") : getLocString("presets.items.delete"); + } + }); + } + + protected editItem(model: SurveyModel, creator: SurveyCreatorModel, question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel, options?: {description: string}) { + let survey: SurveyModel; + let resetAction; + const itemKey = this.getMatrixKeyColumnName(question); + const resetActionParams = { + id: "reset-to-default", + title: getLocString("presets.editor.resetToDefault"), + css: "sps-action--grow", + innerCss: "sps-btn sps-btn--secondary-alert", + visibleIndex: 15, + action: (a) => { + const defaultItem = this.getDefaultItem(question, survey.getValue(itemKey)); + survey.data = defaultItem; + resetAction.enabled = false; + this.notifyCallback(getLocString("presets.editor.itemRestoredToDefault")); + } + }; + resetAction = new Action(resetActionParams); + survey = this.showDetailPanelInPopup(question, row, model.rootElement, { actions: [resetAction], title: options?.description }); + resetAction.enabled = !Helpers.isTwoValueEquals(survey.data, this.getDefaultItem(question, survey.getValue(itemKey))); + survey.onValueChanged.add(()=>resetAction.enabled = true); + const keyQuestion = survey.getQuestionByName(itemKey); + if (this.getDefaultItem(question, keyQuestion.value)) { + keyQuestion.readOnly = true; } } + private resetItem(model: SurveyModel, question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel) { + const name = row.getValue("name"); + const defaultItems = this.getDefaultItem(question, name); + if (defaultItems) { + const value = question.value; + const itemRow = value.filter(v => v.name == name)[0]; + Object.keys(itemRow).forEach((key) => { + itemRow[key] = defaultItems[key]; + }); + question.value = value; + } + this.notifyCallback(getLocString("presets.editor.itemRestoredToDefault")); + } protected restoreItems(questionItems: QuestionMatrixDynamicModel, questionHiddenItems: QuestionMatrixDynamicModel, rowIndex: number) { const rowData = questionHiddenItems.value[rowIndex]; const value = questionItems.value ? [...questionItems.value] : []; @@ -46,41 +167,43 @@ export class CreatorPresetEditableList extends CreatorPresetEditableBase { return model.getQuestionByName(this.nameMatrix); } - protected isItemsMatrix(question: QuestionMatrixDynamicModel): boolean { - return question.name === this.nameMatrix; + protected isItemsMatrix(name: string): boolean { + return name === this.nameMatrix; + } + protected needToSetActions(name: string) { + return this.isItemsMatrix(name); } protected onGetMatrixRowActionsCore(model: SurveyModel, creator: SurveyCreatorModel, options: any): void { - if (this.isItemsMatrix(options.question)) { - const iconName = options.question.value?.filter(v => v.name == options.row.getValue("name"))[0]?.iconName; - options.actions.push({ - id: iconName, - iconName: iconName, - location: "start", - enabled: false - }); - options.question.cssClasses.detailIconExpandedId = "icon-edit"; - options.question.cssClasses.detailIconId = "icon-edit"; - - options.actions.forEach(a => { - if (a.id == "show-detail") { - a.location = "end"; - a.iconName = "icon-edit", - a.visibleIndex = 10; - } - if (a.id == "remove-row") { - a.visibleIndex = 20; - a.iconName = options.question.name == this.nameMatrix ? "icon-add_16x16" : "icon-remove_16x16"; - } + if (this.needToSetActions(options.question.name)) { + const question = options.question as QuestionMatrixDynamicModel; + const allowExpand = question.detailElements.filter(e => e.visible).length > 0; + if (this.hasIcon(options.question.name)) { + const keyColumn = this.getMatrixKeyColumnName(options.question); + const iconName = question.value?.filter(v => v[keyColumn] == options.row.getValue(keyColumn))[0]?.iconName || this.defaultIcon; + options.actions.push(this.createIconAction(iconName)); + } + const resetAction = this.createResetAction(model, options.row, (action: Action) => { + this.resetItem(model, question, options.row); + action.enabled = false; }); + options.actions.push(resetAction); + + question.cssClasses.detailIconExpandedId = "icon-collapse-24x24"; + question.cssClasses.detailIconId = "icon-expand-24x24"; + + options.actions.push(this.createEditAction(model, creator, question, options.row)); + + this.setupStandardActions(options.actions, question, options.row, allowExpand, question.name == this.nameMatrix); + this.updateRowActions(question, options.row, options.actions); } } public onMatrixRowDragOver(model: SurveyModel, creator: SurveyCreatorModel, options: any) { - if (this.isItemsMatrix(options.fromMatrix) && this.isItemsMatrix(options.toMatrix)) { + if (this.isItemsMatrix(options.fromMatrix.name) && this.isItemsMatrix(options.toMatrix.name)) { options.allow = true; } } public onMatrixRowRemoving(model: SurveyModel, creator: SurveyCreatorModel, options: any) { - if (this.isItemsMatrix(options.question) && options.question.name != this.nameMatrix) { + if (this.isItemsMatrix(options.question.name) && options.question.name != this.nameMatrix) { const rowData = options.question.value[options.rowIndex]; const hiddenItems = this.getMatrix(model); const value = hiddenItems.value ? [...hiddenItems.value] : []; @@ -88,9 +211,38 @@ export class CreatorPresetEditableList extends CreatorPresetEditableBase { hiddenItems.value = value; } } + + protected getExistingKeys(model: SurveyModel, key: string) { + const items = model.getQuestionByName(this.nameItems).value || []; + const unsorted = model.getQuestionByName(this.nameMatrix).value || []; + return [...items, ...unsorted]; + } + + protected getDefaultValueForRow(model: SurveyModel, question: QuestionMatrixDynamicModel, key: string) { + return SurveyHelper.getNewName(this.getExistingKeys(model, key).map(i => i[key]).filter(v => !!v).map(r => ({ name: r })), key); + } + + protected setDefaultValueForRow(model: SurveyModel, question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel) { + const key = this.getMatrixKeyColumnName(question); + const value = this.getDefaultValueForRow(model, question, key); + row.getQuestionByName(key).value = value; + row.getQuestionByName("title").value = value; + } public onMatrixRowAdded(model: SurveyModel, creator: SurveyCreatorModel, options: any) { - if (options.question.name == this.nameMatrix) { - options.row.getQuestionByName("name").value = SurveyHelper.getNewName((options.question.value || []).map(r => ({ name: r.name })), "name"); + if (this.isItemsMatrix(options.question.name)) { + this.setDefaultValueForRow(model, options.question, options.row); + this.editItem(model, creator, options.question, options.row, { + description: getLocString("presets.items.newItem") + " " + (options.question.data?.value?.title || this.getPageShortTitle(model)) + }); + } + } + public onMatrixCellValueChanged(model: SurveyModel, creator: SurveyCreatorModel, options: any) { + if (this.needToSetActions(options.question.name)) { + const renderedRow = options.question.renderedTable.rows.find(r => r.row == options.row); + if (!renderedRow) return; + const actions = renderedRow.cells[renderedRow.cells.length - 1].item.value.actions; + if (!actions) return; + this.updateRowActions(options.question, options.row, actions); } } -} \ No newline at end of file +} diff --git a/packages/survey-creator-core/src/presets/presets-editable-options.ts b/packages/survey-creator-core/src/presets/presets-editable-options.ts new file mode 100644 index 0000000000..ff007606d6 --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-editable-options.ts @@ -0,0 +1,87 @@ +import { Serializer, ItemValue, QuestionCheckboxModel, surveyLocalization, SurveyModel } from "survey-core"; +import { CreatorPresetEditableBase } from "./presets-editable-base"; +import { getLocString, editorLocalization, SurveyCreatorModel } from "survey-creator-core"; + +export class CreatorPresetEditableOptions extends CreatorPresetEditableBase { + private options = [{ + category: "cat1", + title: "Category 1", + items: ["addNewQuestionLast", + "allowDragPages", + "allowModifyPages", + "allowZoom", + "autoSaveEnabled", + "clearTranslationsOnSourceTextChange", + "collapseOnDrag", + "collapsePages", + "collapsePanels", + "collapseQuestions", + "expandCollapseButtonVisibility", + "forbiddenNestedElements", + "generateValidJSON", + "isRTL"], + }, { + category: "cat2", + title: "Category 2", + items: ["logicAllowTextEditExpressions", + "logicMaxItemsInCondition", + "maxChoices", + "maxColumns", + "maxPanelNestingLevel", + "maxRateValues", + "maxRows", + "maxVisibleChoices", + "minChoices", + "pageEditMode", + "previewAllowHiddenElements", + "previewAllowSelectLanguage", + "previewAllowSelectPage", + "previewAllowSimulateDevices", + "previewDevice", + "previewOrientation", + "propertyGridNavigationMode", + "questionTypes"], + }, { + category: "cat3", + title: "Category 3", + items: ["readOnly", + "showCreatorThemeSettings", + "showDesignerTab", + "showErrorOnFailedSave", + "showHeaderInEmptySurvey", + "showJSONEditorTab", + "showLogicTab", + "showPreviewTab", + "showSurveyHeader", + "showThemeTab", + "showTranslationTab", + "useElementTitles"] + }]; + private createQuestionForOption(item: string) { + return { name: item, type: "text", titleLocation: "left" }; + } + private createElements() { + return this.options.map(c => ({ type: "panel", title: c.title, name: c.category, elements: c.items.map(i => this.createQuestionForOption(i)) })); + } + public createMainPageCore(): any { + return { + title: getLocString("presets.options.title"), + description: getLocString("presets.options.description"), + navigationTitle: getLocString("presets.options.navigationTitle"), + elements: this.createElements() + }; + } + + protected getJsonValueCore(model: SurveyModel, creator: SurveyCreatorModel, defaultJson: any): any { + return {}; + } + protected setupQuestionsValueCore(model: SurveyModel, json: any, creator: SurveyCreatorModel): void { + this.options.forEach(c => c.items.forEach(optionName => { + model.getQuestionByName(optionName).value = creator[optionName]; + })); + } + + public get questionNames() { + return []; + } +} \ No newline at end of file diff --git a/packages/survey-creator-core/src/presets/presets-editable-properties.ts b/packages/survey-creator-core/src/presets/presets-editable-properties.ts index 6f09a644ee..ee11fe66f9 100644 --- a/packages/survey-creator-core/src/presets/presets-editable-properties.ts +++ b/packages/survey-creator-core/src/presets/presets-editable-properties.ts @@ -1,16 +1,13 @@ import { JsonObjectProperty, ItemValue, QuestionDropdownModel, - Base, Serializer, SurveyModel, matrixDropdownColumnTypes, PageModel, - LocalizableString, - Question } from "survey-core"; -import { CreatorPresetEditableBase, ICreatorPresetEditorSetup } from "./presets-editable-base"; + Base, Serializer, SurveyModel, matrixDropdownColumnTypes +} from "survey-core"; +import { ICreatorPresetEditorSetup } from "./presets-editable-base"; import { SurveyCreatorModel, defaultPropertyGridDefinition, ISurveyPropertyGridDefinition, ISurveyPropertiesDefinition, - SurveyQuestionProperties, editorLocalization, PropertyGridModel, TabDesignerPlugin, - ICreatorOptions, settings, IQuestionToolboxItem, SurveyHelper, calculateDragOverLocation, PageAdorner -} from "survey-creator-core"; + SurveyQuestionProperties, editorLocalization, PropertyGridModel, getLocString, + settings } from "survey-creator-core"; -import { ElementFactory, QuestionMatrixDynamicModel, QuestionPanelDynamicModel } from "survey-core"; import { CreatorPresetEditableCaregorizedListConfigurator } from "./presets-editable-categorized"; // private allTypes: string[]; @@ -54,15 +51,16 @@ export class SurveyQuestionPresetPropertiesDetail { private properties: SurveyQuestionPresetProperties; private propertyGridValue: PropertyGridModel; private propertyGridDefaultValue: PropertyGridModel; - private allPropertiesNames: Array; + private obj; constructor(private className: string, private currentJson: ISurveyPropertyGridDefinition) { const cls = {}; const obj = this.createObj(); + this.obj = obj; this.properties = new SurveyQuestionPresetProperties(obj, className, currentJson); - this.allPropertiesNames = this.properties.getAllVisiblePropertiesNames(true); + const allPropertiesNames = this.properties.getAllVisiblePropertiesNames(true); const objProps = {}; Serializer.getPropertiesByObj(obj).forEach(prop => objProps[prop.name] = prop); - this.allPropertiesNames.forEach(name => { + allPropertiesNames.forEach(name => { const prop = objProps[name]; if (prop) { const propClassName = this.getPropClassName(prop); @@ -82,6 +80,9 @@ export class SurveyQuestionPresetPropertiesDetail { this.propertyGridValue = this.createPropertyGrid(obj, this.currentJson); this.propertyGridDefaultValue = this.createPropertyGrid(obj); } + public getObj() { + return this.obj; + } private createPropertyGrid(obj: Base, json?: ISurveyPropertyGridDefinition): PropertyGridModel { const res = new PropertyGridModel(undefined, undefined, json); res.showOneCategoryInPropertyGrid = true; @@ -100,20 +101,25 @@ export class SurveyQuestionPresetPropertiesDetail { } return res; } - public getAllPropertiesNames(): Array { return this.allPropertiesNames; } - public getInitialJson() { - const pgJSON = this.propertyGridValue.survey.toJSON(); + public getInitialJson(useDefaults: boolean) { + const pgJSON = (useDefaults ? this.propertyGridDefaultValue : this.propertyGridValue).survey.toJSON(); return pgJSON.pages.map(p => { return { category: p.name, title: p.title, iconName: p.iconName, - properties: p.elements?.filter(e => e.name && e.name.indexOf("overridingProperty") == -1).map(e => ({ - name: e.name, - title: e.title, - description: e.description, - isDefault: true - })) + properties: p.elements?.filter(e => e.name && e.name.indexOf("overridingProperty") == -1).map(e => { + const property: any = { + name: e.name, + title: e.title + }; + + if (e.description !== undefined) { + property.description = e.description; + } + + return property; + }) }; }); } @@ -211,7 +217,6 @@ export class CreatorPresetEditablePropertyGrid extends CreatorPresetEditableCare protected createItemsMatrixJSON(props: any): any { const defaultJSON = { type: "matrixdynamic", - titleLocation: "hidden", allowRowReorder: true, cellType: "text", showHeader: false, @@ -231,10 +236,9 @@ export class CreatorPresetEditablePropertyGrid extends CreatorPresetEditableCare ], detailPanelMode: "underRow", detailElements: [ - { type: "text", name: "name", title: "Name", isUnique: true, isRequired: true }, - { type: "text", name: "title", title: "Title", isUnique: true, isRequired: true }, - { type: "comment", name: "description", title: "Description" }, - { name: "isDefault", type: "boolean", defaultValue: false, visible: false } + { type: "text", name: "name", title: getLocString("presets.propertyGrid.name"), isUnique: true, isRequired: true, visible: false }, + { type: "text", name: "title", title: getLocString("presets.propertyGrid.titleField"), isUnique: true, isRequired: true, visible: false }, + { type: "comment", name: "description", title: getLocString("presets.propertyGrid.descriptionField"), visible: false } ] }; return { ...defaultJSON, ...props }; @@ -242,28 +246,31 @@ export class CreatorPresetEditablePropertyGrid extends CreatorPresetEditableCare public createMainPageCore(): any { return { - title: "Set Up the Property Grid", - navigationTitle: "Property Grid", + title: getLocString("presets.propertyGrid.title"), + navigationTitle: getLocString("presets.propertyGrid.navigationTitle"), + description: getLocString("presets.propertyGrid.description"), elements: [ { type: "dropdown", name: this.nameSelector, + allowClear: false, clearIfInvisible: "onHidden", - title: "Select an element to customize its settings available in the Property Grid" + title: getLocString("presets.propertyGrid.selectElement") }, { type: "panel", - name: "propPanel", + name: this.mainPanelName, visibleIf: this.getNotEmptyVisibleIf(this.nameSelector), elements: [ { type: "matrixdynamic", name: this.nameCategories, - titleLocation: "hidden", - minRowCount: 1, + title: getLocString("presets.propertyGrid.propertyGrid"), allowRowReorder: true, addRowButtonLocation: "top", - addRowText: "Add Custom Category", + allowAddRows: true, + noRowsText: getLocString("presets.propertyGrid.noCategoriesText"), + addRowText: getLocString("presets.propertyGrid.addCustomCategory"), showHeader: false, columns: [ { cellType: "text", name: "category", isUnique: true, isRequired: true, visible: false }, @@ -272,35 +279,56 @@ export class CreatorPresetEditablePropertyGrid extends CreatorPresetEditableCare ], detailPanelMode: "underRow", detailElements: [ - { type: "text", name: "category", title: "Category", isRequired: true, visible: false }, - { type: "text", name: "iconName", title: "Icon Name", visible: false }, + { type: "text", name: "category", title: getLocString("presets.propertyGrid.categoryName"), isRequired: true, visible: false }, + { type: "text", name: "title", title: getLocString("presets.propertyGrid.categoryTitle"), visible: false }, + { type: "dropdown", name: "iconName", title: getLocString("presets.propertyGrid.iconName"), itemComponent: "svc-presets-icon-item", "allowCustomChoices": true, choices: this.iconList, visible: false }, this.createItemsMatrixJSON({ name: this.nameInnerMatrix, + noRowsText: getLocString("presets.propertyGrid.noItemsText"), + titleLocation: "hidden", }) ] }, this.createItemsMatrixJSON({ - //allowAddRows: true, - //addRowButtonLocation: "top", - //addRowText: "Add Custom Item", - startWithNewLine: false, + title: getLocString("presets.propertyGrid.hiddenItems"), name: this.nameMatrix, - "descriptionLocation": "underInput", - description: "Drag an item from this column to the left one - it will appear visible in the toolbox. You can also move them, using plus and minus buttons near the item." + noRowsText: getLocString("presets.propertyGrid.noHiddenItemsText"), + descriptionLocation: "underInput", + startWithNewLine: false, }) ] }, + { + type: "panel", + title: " ", + name: this.navigationPanelName, + elements: [ + { + type: "html", + html: " " + } + ] + } ] }; } + private propertyGrid: PropertyGridModel; + protected propertyGridSetObj(obj: any) { + const pageName = this.propertyGrid.survey.currentPage?.name; + this.propertyGrid["setObj"](obj); + this.propertyGrid.survey.currentPage = this.propertyGrid.survey.getPageByName(pageName); + } + protected hasIcon(name: string) { return name == this.nameCategories; } - public getJsonValueCore(model: SurveyModel, creator: SurveyCreatorModel): any { + public getJsonValueCore(model: SurveyModel, creator: SurveyCreatorModel, defaultJson: any): any { if (!this.isModified) return undefined; - this.updateCurrentJson(model); return { definition: this.currentJson }; } + protected setupQuestionsCore(model: SurveyModel, creatorSetup: ICreatorPresetEditorSetup): void { + this.propertyGrid = creatorSetup.creator["designerPropertyGrid"]; + super.setupQuestionsCore(model, creatorSetup); this.getSelector(model).choices = this.getSelectorChoices(creatorSetup.creator); const oldSearchValue = settings.propertyGrid.enableSearch; settings.propertyGrid.enableSearch = false; @@ -322,6 +350,11 @@ export class CreatorPresetEditablePropertyGrid extends CreatorPresetEditableCare protected updateJsonLocalizationStringsCore(locStrs: any): void { this.localeStrings = { pe: locStrs.pe || {}, pehelp: locStrs.pehelp || {} }; } + protected setupOnCurrentPageCore(model: SurveyModel, creator: SurveyCreatorModel, active: boolean): void { + creator.setSidebarEnabled(active); + this.propertyGridSetObj(active ? this.currentProperties?.getObj() : null); + } + // private isPropCreatorChanged: boolean; private firstTimeLoading = false; protected updateOnValueChangedCore(model: SurveyModel, name: string): void { @@ -347,6 +380,7 @@ export class CreatorPresetEditablePropertyGrid extends CreatorPresetEditableCare }); }); } + if (!this.firstTimeLoading)this.updateCurrentJson(model); } // if ((options.target)?.isQuestion) { // if (options.name === "title") { @@ -365,29 +399,49 @@ export class CreatorPresetEditablePropertyGrid extends CreatorPresetEditableCare if (name !== this.nameSelector) return; this.firstTimeLoading = true; - this.updateCurrentJson(model); if (this.currentProperties) { this.currentProperties = undefined; } const selQuestion = this.getSelector(model); this.currentClassName = selQuestion.value; - if (!this.currentClassName) return; - this.currentProperties = new SurveyQuestionPresetPropertiesDetail(this.currentClassName, this.currentJson); - const categories = this.currentProperties.getInitialJson(); - this.defaultItems = []; - model.setValue(this.nameCategories, categories); + if (this.currentClassName) { + this.currentProperties = new SurveyQuestionPresetPropertiesDetail(this.currentClassName, this.currentJson); + this.setupDefaults(model); + const categories = this.currentProperties.getInitialJson(false); + model.setValue(this.nameCategories, categories); + const items = this.getCurrentlyHiddenItems(categories); + model.setValue(this.nameMatrix, items); + this.propertyGridSetObj(this.currentProperties.getObj()); + } this.firstTimeLoading = false; //this.propCreator.JSON = this.updateCreatorJSON(this.currentProperties.propertyGrid.survey.toJSON()); //this.setupCreatorToolbox(this.propCreator); } + private getCurrentlyHiddenItems(categories: any) { + const hiddenProperties = ["progressBarInheritWidthFrom"]; + const itemsMap: any = {}; + this.defaultItems.forEach((i: any) => itemsMap[i.name] = i); + categories.filter((c: any) => c.properties).forEach((c: any) => c.properties.forEach((p: any) => delete itemsMap[p.name])); + return Object.keys(itemsMap).map(key => itemsMap[key]).filter(i => hiddenProperties.indexOf(i.name) == -1); + } + + private setupDefaults(model: SurveyModel): void { + const categories = this.currentProperties?.getInitialJson(true) || []; + this.defaultCategories = [...categories]; + this.defaultItems = []; + categories.forEach(c => this.defaultItems.push(...c.properties)); + } + protected setupQuestionsValueCore(model: SurveyModel, json: any, creator: SurveyCreatorModel): void { + this.getSelector(model).value = "survey"; this.isModified = !!json; if (!json) { json = this.copyJson(defaultPropertyGridDefinition); } this.currentJson = json; this.currentJson.autoGenerateProperties = false; + this.updateOnValueChangedCore(model, this.nameSelector); } private getSelector(model: SurveyModel): QuestionDropdownModel { return model.getQuestionByName(this.nameSelector); } // private getPropertyCreatorQuestion(model: SurveyModel): QuestionEmbeddedCreatorModel { return model.getQuestionByName(this.namePropertyCreator); } diff --git a/packages/survey-creator-core/src/presets/presets-editable-tabs.ts b/packages/survey-creator-core/src/presets/presets-editable-tabs.ts index d5766b280d..10ffaa7fb4 100644 --- a/packages/survey-creator-core/src/presets/presets-editable-tabs.ts +++ b/packages/survey-creator-core/src/presets/presets-editable-tabs.ts @@ -1,16 +1,13 @@ import { Helpers, ItemValue, QuestionMatrixDynamicModel, SurveyModel } from "survey-core"; import { CreatorPresetEditableBase, ICreatorPresetEditorSetup } from "./presets-editable-base"; -import { SurveyCreatorModel } from "survey-creator-core"; -import { PresetItemValue, QuestionPresetRankingModel } from "./preset-question-ranking"; +import { SurveyCreatorModel, editorLocalization, getLocString } from "survey-creator-core"; import { CreatorPresetEditableList } from "./presets-editable-list"; -import { editorLocalization } from "../editorLocalization"; export class CreatorPresetEditableTabs extends CreatorPresetEditableList { private createItemsMatrixJSON(props: any): any { const defaultJSON = { type: "matrixdynamic", name: "items", - titleLocation: "hidden", allowRowReorder: true, cellType: "text", showHeader: false, @@ -26,31 +23,41 @@ export class CreatorPresetEditableTabs extends CreatorPresetEditableList { }, { "name": "title" - }, - { name: "isDefault", type: "boolean", defaultValue: false, visible: false } + } ], detailPanelMode: "underRow", detailElements: [ - { type: "text", name: "name", title: "Name", isUnique: true, isRequired: true }, - { type: "text", name: "iconName", title: "Icon name" } + { type: "text", name: "name", title: getLocString("presets.tabs.name"), isUnique: true, isRequired: true, readOnly: true, visible: false }, + { type: "text", name: "title", title: getLocString("presets.tabs.titleField"), visible: false }, + { type: "dropdown", name: "iconName", title: getLocString("presets.tabs.iconName"), itemComponent: "svc-presets-icon-item", "allowCustomChoices": true, choices: this.iconList, visible: false } ] }; return { ...defaultJSON, ...props }; } - public createMainPageCore(): any { return { - title: "Set Up the Tabs", - navigationTitle: "Tabs", + title: getLocString("presets.tabs.title"), + description: getLocString("presets.tabs.description"), + navigationTitle: getLocString("presets.tabs.navigationTitle"), elements: [ - this.createItemsMatrixJSON({ - name: this.nameItems - }), - this.createItemsMatrixJSON({ - startWithNewLine: false, - name: this.nameMatrix, - "descriptionLocation": "underInput", - }), + { + type: "panel", + name: this.mainPanelName, + elements: [ + this.createItemsMatrixJSON({ + title: getLocString("presets.tabs.items"), + noRowsText: getLocString("presets.tabs.noItemsText"), + name: this.nameItems + }), + this.createItemsMatrixJSON({ + startWithNewLine: false, + title: getLocString("presets.tabs.hiddenItems"), + noRowsText: getLocString("presets.tabs.noHiddenItemsText"), + name: this.nameMatrix, + descriptionLocation: "underInput", + }), + ] + }, { type: "panel", name: "panel_tabs_controls", @@ -58,23 +65,43 @@ export class CreatorPresetEditableTabs extends CreatorPresetEditableList { { type: "dropdown", name: this.nameActiveTab, - title: "Default tab", - startWithNewLine: false + title: getLocString("presets.tabs.defaultTab") + } + ] + }, + { + type: "panel", + title: " ", + name: this.navigationPanelName, + elements: [ + { + type: "html", + html: " " } ] } ] }; } - protected getJsonValueCore(model: SurveyModel, creator: SurveyCreatorModel): any { + + public get questionNames() { + return [this.nameItems, this.nameActiveTab]; + } + + private filterTabs(tabs: any) { + return tabs.filter(t => t.name != "presets"); + } + protected hasIcon(name: string) { return true; } + protected getJsonValueCore(model: SurveyModel, creator: SurveyCreatorModel, defaultJson: any): any { let items = model.getValue(this.nameItems); if (!Array.isArray(items)) return undefined; - let activeTabChoices = items.map(i => ({ name: i.name, iconName: i.iconName })); - if (Helpers.isArraysEqual(activeTabChoices.map(i => i.name), creator.getTabNames(), false)) { + const creatorTabs = this.filterTabs(defaultJson?.items || creator.getTabs()); + let activeTabChoices = items.map(i => ({ name: i.name, iconName: i.iconName || creatorTabs.filter(t => t.name == i.name)[0]?.iconName })); + if (Helpers.isArraysEqual(activeTabChoices, creatorTabs, false)) { activeTabChoices = undefined; } let activeTab = model.getValue(this.nameActiveTab); - if (!activeTabChoices && activeTab === creator.activeTab) { + if (!activeTabChoices && activeTab === (defaultJson?.activeTab || creator.activeTab)) { activeTab = undefined; } if (!activeTabChoices && !activeTab) return undefined; @@ -88,6 +115,13 @@ export class CreatorPresetEditableTabs extends CreatorPresetEditableList { return val; } + protected getDefaultJsonValueCore(creator: SurveyCreatorModel): any { + return { + activeTab: creator.activeTab, + items: this.filterTabs(creator.getTabs()), + }; + } + private getQuestionItems(model: SurveyModel): QuestionMatrixDynamicModel { return model.getQuestionByName(this.nameItems); } @@ -99,8 +133,8 @@ export class CreatorPresetEditableTabs extends CreatorPresetEditableList { super.onMatrixRowRemoving(model, creator, options); } - protected isItemsMatrix(question: QuestionMatrixDynamicModel): boolean { - return question.name === this.nameItems || super.isItemsMatrix(question); + protected isItemsMatrix(name: string): boolean { + return name === this.nameItems || super.isItemsMatrix(name); } protected setJsonLocalizationStringsCore(model: SurveyModel, locStrs: any): void { const rows = this.getQuestionItems(model).visibleRows; @@ -113,11 +147,16 @@ export class CreatorPresetEditableTabs extends CreatorPresetEditableList { } private getAllTabs(creator: SurveyCreatorModel) { - return creator.getAvailableTabs().map(t => ({ name: t.name, title: editorLocalization.getString("tabs." + t.name), iconName: t.iconName })); + return this.filterTabs(creator.getAvailableTabs().map(t => ({ name: t.name, title: editorLocalization.getString("tabs." + t.name), iconName: t.iconName }))); } + + protected setupOnCurrentPageCore(model: SurveyModel, creator: SurveyCreatorModel, active: boolean): void { + creator.tabs.forEach(i => i.enabled = active); + } + protected setupQuestionsValueCore(model: SurveyModel, json: any, creator: SurveyCreatorModel): void { json = json || {}; - let items = json["items"] || []; + let items = (json["items"] || []).map(i => typeof i === "string" ? { name: i } : i); const tabNames = creator.tabbedMenu.actions.map(a => a.id); const allTabs = this.getAllTabs(creator); @@ -141,13 +180,15 @@ export class CreatorPresetEditableTabs extends CreatorPresetEditableList { activeQ.choices = this.defaultItems.map(t => new ItemValue(t.name, t.title)); } protected updateOnValueChangedCore(model: SurveyModel, name: string): void { + super.updateOnValueChangedCore(model, name); if (name === this.nameItems) { const val = model.getValue(name) || []; - model.getQuestionByName(this.nameActiveTab).visible = val.length > 1; - model.getQuestionByName(this.nameItems).visible = val.length > 1; - model.getQuestionByName(this.nameActiveTab).choices = val.map(v => new ItemValue(v.name, v.title)); + const activeTabQuestion = model.getQuestionByName(this.nameActiveTab); + activeTabQuestion.choices = val.map(v => new ItemValue(v.name, v.title)); + if (!activeTabQuestion.selectedItem) { + activeTabQuestion.selectItem(activeTabQuestion.choices[0]); + } } } - private get nameItems() { return this.path + "_items"; } private get nameActiveTab() { return this.path + "_activeTab"; } } \ No newline at end of file diff --git a/packages/survey-creator-core/src/presets/presets-editable-toolbox.ts b/packages/survey-creator-core/src/presets/presets-editable-toolbox.ts index ea67a40b1e..980103b145 100644 --- a/packages/survey-creator-core/src/presets/presets-editable-toolbox.ts +++ b/packages/survey-creator-core/src/presets/presets-editable-toolbox.ts @@ -1,10 +1,9 @@ -import { FunctionFactory, Helpers, IDialogOptions, ItemValue, MatrixDropdownRowModelBase, MatrixDynamicRowModel, QuestionMatrixDynamicModel, Serializer, settings, SurveyModel } from "survey-core"; +import { Action, FunctionFactory, Helpers, IAction, MatrixDynamicRowModel, QuestionMatrixDynamicModel, Serializer, SurveyModel } from "survey-core"; import { CreatorPresetEditableBase, ICreatorPresetEditorSetup } from "./presets-editable-base"; -import { QuestionToolboxCategory, QuestionToolboxItem, SurveyCreatorModel, SurveyJSON5, editorLocalization } from "survey-creator-core"; -import { PresetItemValue, QuestionPresetRankingModel } from "./preset-question-ranking"; +import { QuestionToolboxCategory, QuestionToolboxItem, SurveyCreatorModel, editorLocalization, getLocString } from "survey-creator-core"; import { ICreatorPresetToolboxItem } from "survey-creator-core"; -import { CreatorPresetEditorModel } from "./presets-editor"; import { CreatorPresetEditableCaregorizedListConfigurator } from "./presets-editable-categorized"; +import { listComponentCss } from "./presets-theme/list-theme"; const LocCategoriesName = "toolboxCategories"; @@ -17,19 +16,18 @@ function validateToolboxJson (params) { FunctionFactory.Instance.register("validateToolboxJson", validateToolboxJson); export class CreatorPresetEditableToolboxConfigurator extends CreatorPresetEditableCaregorizedListConfigurator { private allItems: ICreatorPresetToolboxItem[]; - private createItemsMatrixJSON(props: any): any { + protected defaultSubitems: any; + private createItemsMatrixJSON(props: any, addSubitems: boolean): any { const defaultJSON = { type: "matrixdynamic", name: "items", - titleLocation: "hidden", + title: "Toolbox", allowRowReorder: true, cellType: "text", showHeader: false, rowCount: 0, allowAddRows: false, addRowButtonLocation: "top", - addRowText: "Add Custom Item", - "noRowsText": "There are no items", columns: [ { "name": "name", @@ -37,119 +35,259 @@ export class CreatorPresetEditableToolboxConfigurator extends CreatorPresetEdita }, { "name": "title" - }, - { name: "isDefault", type: "boolean", defaultValue: false, visible: false } + } ], detailPanelMode: "underRow", detailElements: [ { "type": "panel", "name": "details", + "maxWidth": "30%", "elements": [ - { type: "text", name: "name", title: "Name", isUnique: true, isRequired: true }, - { type: "text", name: "iconName", title: "Icon name" }, - { type: "text", name: "tooltip", title: "Tooltip" }, - ] + { type: "text", name: "name", title: getLocString("presets.toolbox.categoryName"), isUnique: true, visible: false, isRequired: true }, + { type: "text", name: "title", title: getLocString("presets.toolbox.categoryTitle"), visible: false }, + { type: "dropdown", name: "iconName", title: getLocString("presets.toolbox.iconName"), itemComponent: "svc-presets-icon-item", "allowCustomChoices": true, choices: this.iconList, visible: false }, + { type: "text", name: "tooltip", title: getLocString("presets.toolbox.tooltip"), visible: false }, + ], + visible: false }, { type: "presetjson", name: "json", startWithNewLine: false, renderAs: "default-comment", - title: "JSON object to apply when users select this toolbox item", + title: getLocString("presets.toolbox.jsonObject"), validators: [{ type: "expression", text: "JSON should be correct", expression: "validateToolboxJson({json})" }], - rows: 15 + rows: 15, + visible: false } ] }; - return { ...defaultJSON, ...props }; + const newJson = { ...defaultJSON, ...props }; + if (addSubitems) { + newJson.detailElements.push(this.createItemsMatrixJSON({ + allowAddRows: true, + addRowText: getLocString("presets.toolbox.addNewSubitem"), + addRowButtonLocation: "bottom", + name: this.nameSubitems, + valueName: "subitems", + titleLocation: "hidden", + startWithNewLine: false + }, false)); + } + return newJson; } public createMainPageCore(): any { return { - title: "Set Up the Toolbox", - navigationTitle: "Toolbox", + title: getLocString("presets.toolbox.title"), + description: getLocString("presets.toolbox.description"), + navigationTitle: getLocString("presets.toolbox.navigationTitle"), elements: [ - { - type: "matrixdynamic", - name: this.nameCategories, - titleLocation: "hidden", - visibleIf: this.getTextVisibleIf(this.nameCategoriesMode, "categories"), - minRowCount: 1, - allowRowReorder: true, - addRowButtonLocation: "top", - addRowText: "Add Custom Category", - showHeader: false, - columns: [ - { cellType: "text", name: "category", isUnique: true, isRequired: true, visible: false }, - { name: "isDefault", type: "boolean", defaultValue: false, visible: false }, - { cellType: "text", name: "title" } - ], - detailPanelMode: "underRow", - detailElements: [ - { type: "text", name: "category", isRequired: true, visible: false }, - { type: "text", name: "tooltip", visible: false }, + type: "panel", + name: this.mainPanelName, + elements: [ + { + type: "matrixdynamic", + name: this.nameCategories, + title: getLocString("presets.toolbox.toolbox"), + visibleIf: this.getTextVisibleIf(this.nameCategoriesMode, "categories"), + allowRowReorder: true, + allowAddRows: true, + addRowButtonLocation: "top", + noRowsText: getLocString("presets.toolbox.noCategoriesText"), + addRowText: getLocString("presets.toolbox.addCustomCategory"), + showHeader: false, + columns: [ + { cellType: "text", name: "category", isUnique: true, isRequired: true, visible: false }, + { cellType: "text", name: "title" } + ], + detailPanelMode: "underRow", + detailElements: [ + { type: "text", name: "category", title: getLocString("presets.toolbox.categoryName"), isRequired: true, visible: false }, + { type: "text", name: "title", title: getLocString("presets.toolbox.categoryTitle"), visible: false }, + { type: "text", name: "tooltip", title: getLocString("presets.toolbox.tooltip"), visible: false }, + this.createItemsMatrixJSON({ + name: this.nameInnerMatrix, + titleLocation: "hidden", + allowAddRows: true, + addRowButtonLocation: "bottom", + noRowsText: getLocString("presets.toolbox.noItemsText"), + addRowText: getLocString("presets.toolbox.addNewItem"), + valueName: "items" + }, true) + ] + }, this.createItemsMatrixJSON({ - name: this.nameInnerMatrix, - valueName: "items" - }) - ] + name: this.nameItems, + title: getLocString("presets.toolbox.toolbox"), + addRowButtonLocation: "top", + noRowsText: getLocString("presets.toolbox.noItemsText"), + addRowText: getLocString("presets.toolbox.addCustomItem"), + startWithNewLine: false, + visibleIf: this.getTextVisibleIf(this.nameCategoriesMode, "items"), + }, true), + this.createItemsMatrixJSON({ + allowAddRows: true, + title: getLocString("presets.toolbox.hiddenItems"), + noRowsText: getLocString("presets.toolbox.noHiddenItemsText"), + descriptionLocation: "underInput", + addRowButtonLocation: "bottom", + addRowText: getLocString("presets.toolbox.addNewItem"), + startWithNewLine: false, + name: this.nameMatrix + }, true)] }, - this.createItemsMatrixJSON({ - name: this.nameItems, - startWithNewLine: false, - visibleIf: this.getTextVisibleIf(this.nameCategoriesMode, "items"), - }), - this.createItemsMatrixJSON({ - allowAddRows: true, - addRowButtonLocation: "top", - addRowText: "Add Custom Item", - startWithNewLine: false, - name: this.nameMatrix, - "descriptionLocation": "underInput", - description: "Drag an item from this column to the left one - it will appear visible in the toolbox. You can also move them, using plus and minus buttons near the item." - }), { type: "panel", - name: "panel_toolbox_controls", + title: " ", + name: this.navigationPanelName, elements: [ { type: "boolean", name: this.nameCategoriesMode, - title: "Enable grouping", - useTitleAsLabel: true, + title: getLocString("presets.toolbox.enableGrouping"), + titleLocation: "hidden", defaultValue: "categories", valueTrue: "categories", valueFalse: "items", clearIfInvisible: "onHidden", - startWithNewLine: false, - renderAs: "checkbox" + renderAs: "switch" }, { type: "boolean", name: this.nameShowCategoryTitles, - title: "Show category titles", + title: getLocString("presets.toolbox.showCategoryTitles"), defaultValue: false, useTitleAsLabel: true, visibleIf: this.getTextVisibleIf(this.nameCategoriesMode, "categories"), clearIfInvisible: "onHidden", - startWithNewLine: false, - renderAs: "checkbox" - }] + renderAs: "switch" + } + ] } ] }; } public get nameCategoriesMode() { return this.fullPath + "_mode"; } protected get nameItems() { return this.fullPath + "_items"; } + protected get nameSubitems() { return "subitems"; } protected get nameShowCategoryTitles() { return this.fullPath + "_showCategoryTitles"; } + public get questionNames() { + return [this.nameCategories, this.nameItems, this.nameMatrix, this.nameShowCategoryTitles, this.nameCategoriesMode]; + } + protected hasIcon(name: string) { return name !== this.nameCategories && name !== this.nameSubitems; } + + protected getDefaultItems(question?: QuestionMatrixDynamicModel) { + return question?.name === this.nameCategories ? this.defaultCategories : [...this.defaultItems, ...this.defaultSubitems]; + } + + protected updateRowAction(question: QuestionMatrixDynamicModel, rowData: any, keyColumn: string, action: IAction) { + super.updateRowAction(question, rowData, keyColumn, action); + if (action.id == "show-detail" && question.name != this.nameCategories) { + action.visible = !!rowData.subitems; + } + } + + private findItem(value: any, itemName: string, hasCategories: boolean) { + return hasCategories ? + value.map(c => c.items.filter(i => i.name == itemName)[0]).filter(i => !!i)[0] : + value.filter(i => i.name == itemName)[0]; + } + + private moveToSubitems(model: SurveyModel, question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel, itemName: string, remove = false) { + const rowData = this.ejectRowData(question, row, remove); + const hasCategories = this.itemMenuCategoriesEnabled(model); + const destination = hasCategories ? this.getQuestionCategories(model) : this.getQuestionItems(model); + const destValue = JSON.parse(JSON.stringify(destination.value)); + const item = this.findItem(destValue, itemName, hasCategories); + if (item) { + if (!item.subitems) item.subitems = []; + item.subitems.push(rowData); + } + destination.value = destValue; + } + + protected getExistingKeys(model: SurveyModel, key: string) { + const superItems = super.getExistingKeys(model, key); + const items = model.getQuestionByName(this.nameItems).value || []; + const rows = [...superItems, ...items]; + const subitems = (rows.map(r => r.subitems || []) as any).flat(); + return [...rows, ...subitems]; + } - public getJsonValueCore(model: SurveyModel, creator: SurveyCreatorModel): any { + protected itemMenuCategoriesEnabled(model: SurveyModel) { + return model.getValue(this.nameCategoriesMode) !== "items"; + } + + protected getItemMenuActionsCore(model: SurveyModel, question: QuestionMatrixDynamicModel, row: MatrixDynamicRowModel) { + const categories = this.getQuestionCategories(model).value; + const actions = super.getItemMenuActionsCore(model, question, row); + const hasCategories = this.itemMenuCategoriesEnabled(model); + const catActions = categories.map((c: any) => { + const catAction = new Action({ + id: "tosubitemcategory-" + c.category, + title: c.title + }); + if (c.items) { + const itemsActions = c.items.filter((i: any) => i.name != row.value?.name).map((i: any) => new Action({ + id: "tosubitem-" + i.name, + title: i.title, + action: () => { + this.moveToSubitems(model, question, row, i.name, true); + } + })); + this.setSubitemsToAction(catAction, itemsActions); + } + return catAction; + } + ); + const subItems = hasCategories ? catActions : catActions.map(a => a.items).flat(); + const rowDataIndex = question.visibleRows.indexOf(row); + const rowData = question.value[rowDataIndex]; + if (!rowData["subitems"]) { + if (question.name == this.nameItems || question.name == this.nameInnerMatrix) { + actions.push(new Action({ + id: "subcategories", + title: getLocString("presets.toolbox.subitems"), + css: "sps-list__item--label", + enabled: false, + needSeparator: true + })); + actions.push(new Action({ + id: "convert-to-subcategory", + title: getLocString("presets.toolbox.enableSubitems"), + action: () => { + const destination = hasCategories ? this.getQuestionCategories(model) : this.getQuestionItems(model); + const destValue = JSON.parse(JSON.stringify(destination.value)); + const item = this.findItem(destValue, rowData.name, hasCategories); + if (item) { + item.subitems = []; + } + destination.value = destValue; + this.updateMatrixRowActions(model, question); + row.showDetailPanel(); + } + })); + } + const subitemsAction = new Action({ + id: "move-as-subitem", + title: getLocString("presets.toolbox.moveAsSubitem"), + needSeparator: true + }); + this.setSubitemsToAction(subitemsAction, subItems); + actions.push(subitemsAction); + } + + return actions; + } + + public getJsonValueCore(model: SurveyModel, creator: SurveyCreatorModel, defaultJson: any): any { const res: any = {}; const definition = this.getJsonItemsDefinition(model); if (definition) { @@ -157,25 +295,33 @@ export class CreatorPresetEditableToolboxConfigurator extends CreatorPresetEdita } const mode = model.getValue(this.nameCategoriesMode); const toolbox = creator.toolbox; + const toolboxCategories = defaultJson?.categories; if (mode === "categories") { const categories = this.getCategoriesJson(model); - if (Array.isArray(categories) && categories.length > 0 && (!toolbox.hasCategories || !this.isCategoriesSame(categories, toolbox.categories))) { + if (Array.isArray(categories) && categories.length > 0 && (!this.isCategoriesSame(categories, toolboxCategories))) { res.categories = this.getCategoriesJson(model); } + } else { + res.categories = []; } if (model.getValue(this.nameShowCategoryTitles)) { res.showCategoryTitles = true; } return Object.keys(res).length > 0 ? res : undefined; } - private isCategoriesSame(categories: any, toolboxCategories: Array): boolean { + protected getDefaultJsonValueCore(creator: SurveyCreatorModel): any { + return { + categories: creator.toolbox.categories.map(c => ({ category: c.name, title: c.title, items: c.items.map(i => i.name) })) + }; + } + private isCategoriesSame(categories: any, toolboxCategories: any): boolean { if (categories.length !== toolboxCategories.length) return false; for (let i = 0; i < categories.length; i++) { - if (categories[i].category !== toolboxCategories[i].name) return false; + if (categories[i].category !== toolboxCategories[i].category) return false; if (categories[i].title !== toolboxCategories[i].title) return false; - const toolboxItems = toolboxCategories[i].items.map(item => item.name); + const toolboxItems = toolboxCategories[i].items; const categoryItems = categories[i].items; - if (!Helpers.isTwoValueEquals(categoryItems, toolboxItems, true)) return false; + if (!Helpers.isTwoValueEquals(categoryItems, toolboxItems)) return false; } return true; } @@ -183,7 +329,7 @@ export class CreatorPresetEditableToolboxConfigurator extends CreatorPresetEdita private getCategoriesJson(model: SurveyModel): any { const categories = model.getValue(this.nameCategories); if (!Array.isArray(categories)) return undefined; - return categories.map(c => ({ category: c.category, title: c.title, items: c.items.map(i => i.name) })); + return categories.map(c => ({ category: c.category, title: c.title, items: c.items?.map(i => i.name) })); } private cleanIfNotDiffers(item, defaultItem) { if (!defaultItem) return true; @@ -199,8 +345,8 @@ export class CreatorPresetEditableToolboxConfigurator extends CreatorPresetEdita } private getJsonItemsDefinition(model: SurveyModel): any { const mode = model.getValue(this.nameCategoriesMode); - const itemsRaw = (mode === "items") ? model.getValue(this.nameItems) : model.getValue(this.nameCategories).map(c => c.items).flat(); - const items = itemsRaw.map(i => ({ ...i, isDefault: undefined })); + const itemsRaw = (mode === "items") ? model.getValue(this.nameItems) : (model.getValue(this.nameCategories) || []).map(c => c.items).flat(); + const items = (itemsRaw || []).map(i => ({ ...i })); let differs = false; items.forEach(item => { if (this.cleanIfNotDiffers(item, this.defaultItems.filter(i => i.name == item.name)[0])) differs = true; @@ -208,8 +354,8 @@ export class CreatorPresetEditableToolboxConfigurator extends CreatorPresetEdita if (!differs && !Helpers.isTwoValueEquals(items.map(i=>i.name), this.defaultItems.map(i=>i.name))) differs = true; return differs ? items : undefined; } - protected isItemsMatrix(question: QuestionMatrixDynamicModel): boolean { - return question.name === this.nameItems || super.isItemsMatrix(question); + protected isItemsMatrix(name: string): boolean { + return name === this.nameItems || name === this.nameSubitems || super.isItemsMatrix(name); } public onMatrixRowRemoving(model: SurveyModel, creator: SurveyCreatorModel, options: any) { if (options.question.name == this.nameMatrix) { @@ -220,17 +366,30 @@ export class CreatorPresetEditableToolboxConfigurator extends CreatorPresetEdita } super.onMatrixRowRemoving(model, creator, options); } - protected setupQuestionsCore(model: SurveyModel, creatorSetup: ICreatorPresetEditorSetup): void { - this.setupPageQuestions(model, creatorSetup.creator); + + protected setupOnCurrentPageCore(model: SurveyModel, creator: SurveyCreatorModel, active: boolean): void { + creator.toolbox.forceCompact = !active; + creator.toolbox.isCompact = !active; + creator.readOnly = active; + creator.toolbox.items.forEach(i => i.enabled = active); + creator.toolbox.enabled = active; } - private setupPageQuestions(model: SurveyModel, creator: SurveyCreatorModel): void { - this.defaultItems = creator.toolbox.getDefaultItems([], true, true, true); - this.setQuestionItemsRows(model); + + protected setupQuestionsCore(model: SurveyModel, creatorSetup: ICreatorPresetEditorSetup): void { + super.setupQuestionsCore(model, creatorSetup); + this.setupDefaults(model, creatorSetup.creator); } - private setQuestionItemsRows(model: SurveyModel): void { - //this.allItems = this.getDefaultToolboxItems(model); - //const q = this.getMatrix(model); - //q.value = this.allItems.filter(i => !i.category); + private setupDefaults(model: SurveyModel, creator: SurveyCreatorModel): void { + const toolboxDefaultItems = creator.toolbox.getDefaultItems([], true, true, true); + const toolboxDefaultCategories = creator.toolbox.getDefaultCategories(); + this.defaultItems = toolboxDefaultItems.map(i => this.createToolboxItemRow(i)); + this.defaultSubitems = []; + toolboxDefaultItems.forEach(i => { + if (i.items) { + this.defaultSubitems.push(...i.items.map(si => this.createToolboxItemRow(si))); + } + }); + this.defaultCategories = toolboxDefaultCategories.map(i => this.createToolboxCategoryRow(i)); } // private isItemValuesEqual(a: Array, b: Array): boolean { // if (!a || !b || a.length !== b.length) return false; @@ -246,15 +405,38 @@ export class CreatorPresetEditableToolboxConfigurator extends CreatorPresetEdita // } protected setupQuestionsValueCore(model: SurveyModel, json: any, creator: SurveyCreatorModel): void { //this.setupQuestionsValueDefinition(model, json); - this.getQuestionItems(model).value = creator.toolbox.items.map(i => this.createToolboxItemRow(i)); - const categories = creator.toolbox.categories.map(c => ({ category: c.name, isDefault: true, items: c.items.map(i => this.createToolboxItemRow(i)) })); - model.setValue(this.nameCategories, categories); + const defaultItemsMap: any = {}; + this.defaultItems.forEach((i: any) => defaultItemsMap[i.name] = i); + json = json || {}; + let itemsDefinition = (json["definition"] || []).map(i => typeof i === "string" ? { name: i } : i); + let categoriesDefinition = json["categories"] || []; + if (itemsDefinition.length === 0) { + itemsDefinition = this.defaultItems; + } else { + itemsDefinition = itemsDefinition.map(i => ({ ...(defaultItemsMap[itemsDefinition.name] || {}), ...i })); + } + const itemsMap: any = {}; + itemsDefinition.forEach((i: any) => itemsMap[i.name] = i); + if (categoriesDefinition.length === 0) { + categoriesDefinition = this.defaultCategories; + } else { + categoriesDefinition = categoriesDefinition.map(c => ({ ...c, ...{ items: c.items.map(i => itemsMap[i]) } })); + } + + //categories.filter((c: any) => c.properties).forEach((c: any) => c.properties.forEach((p: any) => delete itemsMap[p.name])); + //Object.keys(itemsMap).map(key => itemsMap[key]); + categoriesDefinition.filter((c: any) => c.items).forEach((c: any) => c.items.forEach((p: any) => delete defaultItemsMap[p.name])); + const hiddenItems = this.defaultItems.filter(t => defaultItemsMap[t.name]); + + model.setValue(this.nameMatrix, hiddenItems); + model.setValue(this.nameCategories, categoriesDefinition); + this.updateItemsFromCategories(model); this.updateShowCategoriesTitlesElements(model); } protected onLocaleChangedCore(model: SurveyModel, json: any, creator: SurveyCreatorModel): void { const newCreator = new SurveyCreatorModel({}); newCreator.locale = creator.locale; - this.setupPageQuestions(model, newCreator); + this.setupDefaults(model, newCreator); this.setupQuestionsValueCore(model, json, newCreator); } // private setupQuestionsValueDefinition(model: SurveyModel, json: any): void { @@ -272,7 +454,7 @@ export class CreatorPresetEditableToolboxConfigurator extends CreatorPresetEdita // question.value = value; // } private updateItemsFromCategories(model: SurveyModel) { - this.getQuestionItems(model).value = this.getQuestionCategories(model).value.map(r => [...r.items]).flat(); + this.getQuestionItems(model).value = this.getQuestionCategories(model).value.map(r => [...(r.items || [])]).flat(); } private updateCategoriesFromItems(model: SurveyModel) { @@ -291,7 +473,7 @@ export class CreatorPresetEditableToolboxConfigurator extends CreatorPresetEdita }); const unsortedNames = Object.keys(itemsObject); if (unsortedNames.length > 0) { - let generalCategory = this.findOrCreateGeneralCategory(categories); + let generalCategory = this.findOrCreateCategory(categories, "general"); generalCategory.items = generalCategory.items.concat(unsortedNames.map(name => this.createToolboxItemRow(itemsObject[name]))); } this.getQuestionCategories(model).value = categories; @@ -356,6 +538,34 @@ export class CreatorPresetEditableToolboxConfigurator extends CreatorPresetEdita return model.getQuestionByName(this.nameItems); } private createToolboxItemRow(item: QuestionToolboxItem): ICreatorPresetToolboxItem { - return { name: item.name, isDefault: true, title: item.title, iconName: item.iconName, tooltip: item.tooltip, json: item.json, category: item.category }; + const obj:ICreatorPresetToolboxItem = { + name: item.name, + title: item.title, + iconName: item.iconName, + tooltip: item.tooltip, + json: item.json, + subitems: item.items?.map(i => this.createToolboxItemRow(i)) + }; + + for (const key in obj) { + if (obj[key] === undefined) { + delete obj[key]; + } + } + return obj; + } + private createToolboxCategoryRow(item: QuestionToolboxCategory) { + const obj = { + category: item.name, + title: item.title, + items: item.items?.map(i => this.createToolboxItemRow(i)) + }; + + for (const key in obj) { + if (obj[key] === undefined) { + delete obj[key]; + } + } + return obj; } } \ No newline at end of file diff --git a/packages/survey-creator-core/src/presets/presets-editor.ts b/packages/survey-creator-core/src/presets/presets-editor.ts index 307276394f..f9effb316b 100644 --- a/packages/survey-creator-core/src/presets/presets-editor.ts +++ b/packages/survey-creator-core/src/presets/presets-editor.ts @@ -1,11 +1,14 @@ -import { SurveyCreatorModel, editorLocalization, ICreatorOptions } from "survey-creator-core"; +import { SurveyCreatorModel, editorLocalization, ICreatorOptions, getLocString } from "survey-creator-core"; import { CreatorPreset, ICreatorPresetData } from "survey-creator-core"; -import { ActionContainer, Base, ComputedUpdater, LocalizableString, SurveyModel, createDropdownActionModel } from "survey-core"; +import { Action, ActionContainer, Base, LocalizableString, Question, QuestionMatrixDropdownRenderedRow, QuestionMatrixDynamicModel, SurveyModel } from "survey-core"; import { CreatorPresetEditableBase, ICreatorPresetEditorSetup } from "./presets-editable-base"; import { CreatorPresetEditableToolboxConfigurator } from "./presets-editable-toolbox"; import { CreatorPresetEditablePropertyGrid } from "./presets-editable-properties"; import { CreatorPresetEditableTabs } from "./presets-editable-tabs"; import { CreatorPresetEditableLanguages } from "./presets-editable-languages"; +import { CreatorPresetEditableOptions } from "./presets-editable-options"; +import { presetsCss } from "./presets-theme/presets"; +export { enStrings } from "./localization/english"; export class NavigationBar extends ActionContainer { constructor() { @@ -28,33 +31,31 @@ export class NavigationBar extends ActionContainer { export class CreatorPresetEditorModel extends Base implements ICreatorPresetEditorSetup { private presetValue: CreatorPreset; - private creatorValue: SurveyCreatorModel; private modelValue: SurveyModel; private resultModelValue: SurveyModel; private navigationBarValue: NavigationBar; public locTitle: LocalizableString; - constructor(json?: ICreatorPresetData) { + private applying = false; + constructor(json?: ICreatorPresetData, private creatorValue?: SurveyCreatorModel, private defaultJsonValue?: ICreatorPresetData) { super(); editorLocalization.presetStrings = undefined; this.presetValue = new CreatorPreset(json); - this.creatorValue = this.createCreator({}); + if (!this.creatorValue)this.creatorValue = this.createCreator({}); this.modelValue = this.createModel(); this.resultModelValue = this.createResultModel(); this.locTitle = new LocalizableString(undefined, false); - this.locTitle.text = "Creator Presets"; + this.locTitle.text = getLocString("presets.editor.title"); this.navigationBarValue = new NavigationBar(); const firstTabName = "preset"; - this.addNavigationAction(firstTabName, "Edit Preset"); - this.addNavigationAction("creator", "Preview Survey Creator"); - this.addNavigationAction("results", "View Preset JSON"); - this.activeTab = firstTabName; + this.preset.setJson(this.getJsonFromSurveyModel()); } public dispose(): void { super.dispose(); - this.creator.dispose(); + //this.creator.dispose(); this.disposeModel(); } private disposeModel(): void { + this.resetAllPages(); this.model.editablePresets.forEach(preset => preset.dispose()); this.model.dispose(); } @@ -65,19 +66,7 @@ export class CreatorPresetEditorModel extends Base implements ICreatorPresetEdit this.upldateResultJson(); return this.resultModelValue; } - public get navigationBar(): ActionContainer { return this.navigationBarValue; } - public get activeTab(): string { - return this.getPropertyValue("activeTab"); - } - public set activeTab(val: string) { - this.setPropertyValue("activeTab", val); - } - public setActiveTab(val: string): boolean { - if (this.activeTab === "preset" && !this.model.validate(true, true)) return false; - this.activeTab = val; - return true; - } - public getLocale(): string { return this.json?.languages?.creator || "en"; } + public getLocale(): string { return editorLocalization.currentLocale || "en"; } public get json(): ICreatorPresetData { return this.preset.getJson(); } @@ -85,66 +74,107 @@ export class CreatorPresetEditorModel extends Base implements ICreatorPresetEdit this.preset.setJson(val); this.modelValue = this.createModel(); this.upldateResultJson(); - this.applyFromSurveyModel(true); + this.applyFromSurveyModel(); } public get jsonText(): string { return JSON.stringify(this.json, null, 2); } - protected onPropertyValueChanged(name: string, oldValue: any, newValue: any): void { - if (name === "activeTab" && oldValue === "preset") { - this.applyFromSurveyModel(); - } + public get defaultJson(): ICreatorPresetData { + return this.defaultJsonValue; } public createCreator(options: ICreatorOptions): SurveyCreatorModel { return new SurveyCreatorModel(options); } - private addNavigationAction(tabName: string, title: string): void { - const id = "action-preset-" + tabName; - const actionInfo = { - id: id, - title: title, - active: new ComputedUpdater(() => this.activeTab === tabName), - action: () => { this.setActiveTab(tabName); } - }; - this.navigationBar.addAction(actionInfo); + + private resetAllPages() { + this.model.editablePresets.forEach(item => item.setupOnCurrentPage(this.model, this.creator, true)); + this.creator.readOnly = false; + } + + public resetToDefaults(page?: string) { + if (!page) { + this.notify(getLocString("presets.editor.resetToDefaults")); + } + this.model.editablePresets.forEach(item => { + if (!page || item.pageName == page) item.resetToDefaults(this.model, !!page); + }); + } + + private activatePage (model: SurveyModel, creator: SurveyCreatorModel, editablePresets: CreatorPresetEditableBase[]) { + const inactivePresets = editablePresets.filter(item => model.currentPage.name !== item.pageName); + const activePreset = editablePresets.filter(item => model.currentPage.name === item.pageName)[0]; + inactivePresets.forEach(item => item.setupOnCurrentPage(model, this.creator, false)); + activePreset.setupOnCurrentPage(model, this.creator, true); + } + + private notify(message: string) { + this.creator.notify(message); } protected createModel(): SurveyModel { const editablePresets = this.createEditablePresets(); const model = new SurveyModel(this.getEditModelJson(editablePresets)); + model.css = presetsCss; model.editablePresets = editablePresets; model.keepIncorrectValues = true; - model.showPrevButton = false; - model.showCompleteButton = false; - model.registerFunctionOnPropertyValueChanged("isShowNextButton", () => { - model.setPropertyValue("isShowNextButton", true); - }); - const nextButton = model.navigationBar.getActionById("sv-nav-next"); - nextButton.action = (): void => { - if (!model.isLastPage) { - model.nextPageUIClick(); - } else { - model.currentPageNo = 0; - } - }; + model.showNavigationButtons = false; + model.completeText = getLocString("presets.editor.completeText"); + model.pagePrevText = getLocString("presets.editor.pagePrevText"); + model.enterKeyAction = "loseFocus"; + + editablePresets.forEach(item => item.notifyCallback = (message: string) => this.notify(message)); editablePresets.forEach(item => item.setupQuestions(model, this)); + if (!this.defaultJsonValue) { + this.defaultJsonValue = {}; + editablePresets.forEach(item => this.defaultJsonValue[item.path] = item.getDefaultJsonValue(this.creator)); + } const json = this.preset.getJson() || {}; editablePresets.forEach(item => item.setupQuestionsValue(model, json[item.path], this.creator)); this.updateJsonLocalizationStrings(editablePresets); + this.activatePage(model, this.creator, editablePresets); model.onCurrentPageChanged.add((sender, options) => { - editablePresets.forEach(item => item.setupOnCurrentPage(model, this.creator)); - }); - model.onValueChanging.add((sender, options) => { - if (options.name === "languages_creator") { - this.applyFromSurveyModel(true); - } + this.activatePage(model, this.creator, editablePresets); }); + const questionNames = editablePresets.map(preset => preset.questionNames).reduce((acc, current) => acc.concat(current), []); model.onValueChanged.add((sender, options) => { editablePresets.forEach(item => item.updateOnValueChanged(model, options.name)); if (options.name === "languages_creator") { editorLocalization.currentLocale = options.value; editablePresets.forEach(item => item.onLocaleChanged(model, json[item.path], this.creator)); } + if (questionNames.indexOf(options.name) != -1 && !this.applying) { + this.applyFromSurveyModel(false); + this.activatePage(model, this.creator, editablePresets); + } + }); + model.onGetQuestionTitleActions.add((_, options) => { + editablePresets.forEach(item => { + if (options.question.name == item.getNavigationElementName()) { + options.question.getTitleToolbar().isResponsivenessDisabled = true; + options.actions = model.navigationBar.actions; + } + }); }); + model.onGetPanelTitleActions.add((_, options) => { + editablePresets.forEach(item => { + if (options.panel.name == item.getNavigationElementName()) { + options.panel.getTitleToolbar().isResponsivenessDisabled = true; + options.actions = model.navigationBar.actions; + } + }); + }); + function adjustMatrixAlignment(question: Question) { + if (question.isDescendantOf("matrixdynamic")) { + question.onCreateDetailPanelRenderedRowCallback = ( + renderedRow: QuestionMatrixDropdownRenderedRow + ) => { + renderedRow.cells = [renderedRow.cells[1]]; + renderedRow.cells[0].colSpans += 2; + }; + } + } + model.getAllQuestions().forEach(question => adjustMatrixAlignment(question)); + model.onQuestionCreated.add((_, options) => { adjustMatrixAlignment(options.question); }); + model.onMatrixDetailPanelVisibleChanged.add((sender, options) => { editablePresets.forEach(item => item.updateOnMatrixDetailPanelVisibleChanged(model, this.creator, options)); }); @@ -160,13 +190,35 @@ export class CreatorPresetEditorModel extends Base implements ICreatorPresetEdit model.onMatrixRowAdded.add((sender, options) => { editablePresets.forEach(item => item.onMatrixRowAdded(model, this.creator, options)); }); + model.onMatrixCellValueChanged.add((sender, options) => { + editablePresets.forEach(item => item.onMatrixCellValueChanged(model, this.creator, options)); + }); + model.onUpdateQuestionCssClasses.add(function(_, options) { + editablePresets.forEach(item => { + if (item.getMainElementNames().indexOf(options.question.name) >= 0) { + options.cssClasses.mainRoot += " sps-question--main"; + options.cssClasses.row += " sps-table__row--main"; + options.cssClasses.buttonAdd += " sps-matrixdynamic__add-btn--icon"; + options.cssClasses.iconAdd = "sps-matrixdynamic__add-btn-icon"; + options.cssClasses.iconAddId = "#icon-add-24x24"; + } + }); + }); + model.onUpdatePanelCssClasses.add(function(_, options) { + editablePresets.forEach(item => { + if (options.panel.name === item.getNavigationElementName()) { + options.cssClasses.panel.container += " sps-panel--navigation"; + } + }); + }); + return model; } protected createResultModel(): SurveyModel { const model = new SurveyModel({ elements: [ { type: "html", name: "q1", html: this.getResultHtml() }, - { type: "comment", name: "json", title: "Preset JSON:", rows: 60, cols: 120, readOnly: true } + { type: "comment", name: "json", title: getLocString("presets.editor.presetJson"), rows: 60, cols: 120, readOnly: true } ] }); model.showPrevButton = false; @@ -179,7 +231,7 @@ export class CreatorPresetEditorModel extends Base implements ICreatorPresetEdit options.actions.push({ id: "json_copy", iconName: "icon-copy", - title: "Copy", + title: getLocString("presets.editor.copy"), action: () => { navigator.clipboard.writeText(question.value); } @@ -187,7 +239,7 @@ export class CreatorPresetEditorModel extends Base implements ICreatorPresetEdit options.actions.push({ id: "json_download", iconName: "icon-download", - title: "Download", + title: getLocString("presets.editor.download"), action: () => { this.downloadJsonFile(question.value); } @@ -195,7 +247,7 @@ export class CreatorPresetEditorModel extends Base implements ICreatorPresetEdit options.actions.push({ id: "icon-load", iconName: "icon-load", - title: "Load", + title: getLocString("presets.editor.load"), action: () => { this.loadJsonFile(); } @@ -205,19 +257,10 @@ export class CreatorPresetEditorModel extends Base implements ICreatorPresetEdit return model; } private getResultHtml(): string { - return `
Use the following code to apply the preset: -
import { SurveyCreatorModel, CreatorPreset } from "survey-creator-core";
-const creator = new SurveyCreatorModel({ ... });
-
-const presetJson = {
-  // Copy the JSON object from below
-}
-
-const preset = new CreatorPreset(presetJson);
-preset.apply(creator);
-`; + return `
${getLocString("presets.editor.usageExample")}
`; } - private downloadJsonFile(text: string): void { + public downloadJsonFile(text?: string): void { + if (!text) text = this.jsonText; const jsonBlob = new Blob([text], { type: "application/json" }); const elem = window.document.createElement("a"); elem.href = window.URL.createObjectURL(jsonBlob); @@ -227,7 +270,7 @@ preset.apply(creator); document.body.removeChild(elem); } inputFileElement: HTMLInputElement; - private loadJsonFile(): void { + public loadJsonFile(): void { if (!this.inputFileElement) { this.inputFileElement = document.createElement("input"); this.inputFileElement.type = "file"; @@ -251,22 +294,27 @@ preset.apply(creator); private upldateResultJson(): void { this.resultModelValue.getQuestionByName("json").value = this.jsonText; } - public applyFromSurveyModel(reCreateCretor: boolean = true): boolean { - if (!this.validateEditableModel(this.model)) return false; - if (reCreateCretor) { - const json = this.creator?.JSON || {}; - this.creatorValue = this.createCreator({}); - this.creator.JSON = json; + public applyFromSurveyModel(validate = true): boolean { + this.applying = true; + if (validate && !this.validateEditableModel(this.model)) { + this.applying = false; + return false; } + // if (reCreateCretor) { + // const json = this.creator?.JSON || {}; + // this.creatorValue = this.createCreator({}); + // this.creator.JSON = json; + // } this.preset.setJson(this.getJsonFromSurveyModel()); this.model.setValue("json_result", JSON.stringify(this.preset.getJson(), null, 2)); - this.preset.apply(this.creator); + this.preset.apply(this.creator, true); + this.applying = false; return true; } public getJsonFromSurveyModel(): any { const res: ICreatorPresetData = {}; this.model.editablePresets.forEach(preset => { - const val = preset.getJsonValue(this.model, this.creator); + const val = preset.getJsonValue(this.model, this.creator, this.defaultJsonValue?.[preset.path]); if (!!val) { res[preset.path] = val; } @@ -320,6 +368,7 @@ preset.apply(creator); if (fullPath === "tabs") return new CreatorPresetEditableTabs(preset); if (fullPath === "toolbox") return new CreatorPresetEditableToolboxConfigurator(preset); if (fullPath === "propertyGrid") return new CreatorPresetEditablePropertyGrid(preset); + //if (fullPath === "options") return new CreatorPresetEditableOptions(preset); return undefined; } private createEditable(preset: CreatorPreset, parent: CreatorPresetEditableBase, fullPath: string): CreatorPresetEditableBase { @@ -346,7 +395,7 @@ preset.apply(creator); return res; } private getEditModelJson(editablePresets: Array): any { - const modelJson = { pages: [], showTOC: true, showQuestionNumbers: false, widthMode: "static", width: "1200px" }; + const modelJson = { pages: [], showQuestionNumbers: false }; editablePresets.forEach(preset => { const pages = preset.createPages(); if (Array.isArray(pages)) { diff --git a/packages/survey-creator-core/src/presets/presets-plugin.ts b/packages/survey-creator-core/src/presets/presets-plugin.ts new file mode 100644 index 0000000000..c5c2abeb2c --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-plugin.ts @@ -0,0 +1,124 @@ +import { createDropdownActionModel, IAction } from "survey-core"; +import { ICreatorPlugin, SurveyCreatorModel, saveToFileHandler, getLocString } from "survey-creator-core"; +import { CreatorPresetEditorModel } from "./presets-editor"; +import { listComponentCss } from "./presets-theme/list-theme"; +export class TabPresetsPlugin implements ICreatorPlugin { + public model: CreatorPresetEditorModel; + public static iconName = "icon-settings"; + private activeTab; + private currentPresetIndex = 0; + private currentValue; + private designerPlugin; + private toolboxCompact; + private defaultJson; + + private showPresets() { + this.activeTab = this.creator.activeTab; + this.creator.activeTab = "presets"; + } + + private hidePresets() { + this.creator.onActiveTabChanging.remove(this.preventTabSwitch); + this.creator.activeTab = this.activeTab; + } + + constructor(private creator: SurveyCreatorModel) { + creator.addTab({ name: "presets", title: getLocString("presets.plugin.presetsTab"), plugin: this, iconName: TabPresetsPlugin.iconName }); + creator.tabs.filter(t => t.id == "presets")[0].css = "svc-tabbed-menu-item-container--presets"; + this.designerPlugin = creator.getPlugin("designer"); + const settingsPage = this.creator.sidebar.getPageById("creatorTheme"); + settingsPage.componentData.showPresets = () => this.showPresets(); + settingsPage.componentName = "svc-presets-property-grid"; + this.toolboxCompact = creator.toolbox.forceCompact; + } + + public saveToFileHandler = saveToFileHandler; + + private preventTabSwitch = (_, options) => { + options.allow = false; + }; + + public activate(): void { + this.creator.onActiveTabChanging.add(this.preventTabSwitch); + this.model = new CreatorPresetEditorModel({}, this.creator, this.defaultJson); + this.defaultJson = { ...this.model.defaultJson }; + if (this.currentValue) { + this.model.model.data = this.currentValue; + } + this.designerPlugin.activateSidebar(); + this.model.model.onComplete.add(() => this.hidePresets()); + + const presets = this.model?.model.pages.map(p => { id: p.name, title: p.navigationTitle }); + const tools = [ + { id: "save", title: getLocString("presets.plugin.save"), markerIconName: "check-24x24", needSeparator: true, action: () => this.hidePresets() }, + { id: "file", title: getLocString("presets.plugin.file"), needSeparator: true, css: "sps-list__item--label", enabled: false }, + { id: "import", title: getLocString("presets.plugin.import"), markerIconName: "import-24x24", action: () => { this.model?.loadJsonFile(); } }, + { id: "export", title: getLocString("presets.plugin.export"), markerIconName: "download-24x24", action: () => { this.model?.downloadJsonFile(); } }, + { id: "edit", title: getLocString("presets.plugin.edit"), needSeparator: true, css: "sps-list__item--label", enabled: false }, + { id: "reset-current", title: getLocString("presets.plugin.resetLanguages"), action: () => { this.model?.resetToDefaults("page_languages"); } }, + { id: "reset", title: getLocString("presets.plugin.resetAll"), css: "sps-list__item--alert", action: () => { this.model?.resetToDefaults(); } }, + ]; + let settingsAction; + let presetsList; + presets.forEach(p => { + p.action = (item)=>{ + presetsList.selectedItem = item; + settingsAction.popupModel.show(); + this.model.model.currentPage = this.model.model.getPageByName(item.id); + }; + }); + settingsAction = createDropdownActionModel({ + id: "presets-menu", + locTooltipName: "ed.creatorPresetsTitle", + iconName: "navmenu-24x24", + css: "sps-menu-floating-action", + action: () => { + if (settingsAction.popupModel.isVisible) { + setTimeout(() => settingsAction.popupModel.hide(), 1); + } + } + }, { + items: [ + { id: "creator-presets", title: getLocString("presets.plugin.creatorPresets"), css: "sps-list__item--label", enabled: false }, + ...presets, + ...tools], + showPointer: false, + verticalPosition: "top", + horizontalPosition: "center", + searchEnabled: false, + cssClass: "sps-popup-menu sps-popup-menu--always-on-top", + cssClasses: listComponentCss, + onHide: () => { settingsAction.iconName = "navmenu-24x24"; }, + onShow: () => { settingsAction.iconName = "close-24x24"; } + }, this.creator); + const bottomActions = this.designerPlugin.tabControlModel.bottomToolbar.actions; + bottomActions.forEach(a => a.visible = false); + bottomActions.unshift(settingsAction); + presetsList = settingsAction.popupModel.contentComponentData.model; + const resetCurrentAction = presetsList.getActionById("reset-current"); + presetsList.selectedItem = presetsList.actions[0]; + this.model.model.onCurrentPageChanged.add((_, options) => { + presetsList.selectedItem = presetsList.actions[this.model.model.currentPageNo + 1]; + resetCurrentAction.title = getLocString("presets.plugin.resetToDefaults").replace("{0}", this.model.model.currentPage.navigationTitle); + resetCurrentAction.action = () => { this.model?.resetToDefaults(presetsList.selectedItem.id); }; + }); + + setTimeout(() => { + presets[this.currentPresetIndex].action(presets[this.currentPresetIndex]); + }, 100); + } + + public deactivate(): boolean { + this.creator.toolbox.forceCompact = this.toolboxCompact; + this.currentValue = this.model?.model.data; + const bottomActions = this.designerPlugin.tabControlModel.bottomToolbar.actions; + bottomActions.forEach(a => a.visible = true); + bottomActions.splice(0, 1); + this.currentPresetIndex = this.model?.model.currentPageNo || 0; + if (this.model) { + this.model.dispose(); + } + this.model = undefined; + return true; + } +} \ No newline at end of file diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-action-bar.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-action-bar.scss new file mode 100644 index 0000000000..815b3f9b0a --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-action-bar.scss @@ -0,0 +1,195 @@ +@use "../../../variables.scss" as *; +@use "../fonts.scss" as *; + +.sps-action-bar { + display: flex; + box-sizing: content-box; + position: relative; + align-items: center; + margin-left: auto; + overflow: hidden; + white-space: nowrap; +} + +.sps-action { + display: flex; +} + +.sps-action--grow { + flex-grow: 1; +} + +.sps-btn { + appearance: none; + border: none; + display: flex; + padding: calc( + var(--sjs2-layout-control-action-medium-box-vertical, 12px) + + var(--sjs2-layout-control-action-medium-label-vertical, 0px) + ) + calc( + var(--sjs2-layout-control-action-medium-box-horizontal, 12px) + + var(--sjs2-layout-control-action-medium-label-horizontal, 12px) + ); + + justify-content: center; + align-items: center; + gap: var(--sjs2-layout-control-action-medium-box-gap, 0); + border-radius: var(--sjs2-radius-control-button, 8px); + background: var(--sjs2-color-bg-brand-primary, #19b394); + + color: var(--sjs2-color-fg-static-main-primary, #fff); + text-align: center; + + @include sjs2--typography--default-strong; + + &:hover, + &:focus { + background: var(--sjs2-color-bg-brand-primary-dim, #15987e); + } + &:active { + background: var(--sjs2-color-bg-brand-primary, #19b394); + } + &:disabled { + opacity: var(--sjs2-opacity-disabled, 0.25); + background: var(--sjs2-color-bg-state-common-disabled, #D4D4D4); + + color: var(--sjs2-color-fg-state-common-disabled, rgba(28, 27, 32, 0.40)); + pointer-events: none; + } +} + +.sps-btn--secondary-brand { + background: var(--sjs2-color-bg-brand-secondary, rgba(25, 179, 148, 0.1)); + color: var(--sjs2-color-fg-brand-primary, #19b394); + &:hover, + &:focus { + background: var(--sjs2-color-bg-brand-secondary-dim, rgba(25, 179, 148, 0.15)); + } + &:active{ + background: var(--sjs2-color-bg-brand-secondary, rgba(25, 179, 148, 0.1)); + } +} + +.sps-btn--secondary-alert { + background: var(--sjs2-color-bg-alert-secondary, rgba(229, 10, 62, 0.10)); + color: var(--sjs2-color-fg-alert-primary, #C30935); + &:hover, + &:focus { + background: var(--sjs2-color-bg-alert-secondary-dim, rgba(229, 10, 62, 0.15)); + } + &:active{ + background: var(--sjs2-color-bg-alert-secondary, rgba(229, 10, 62, 0.10)); + } +} + +.sps-action-button { + @include ctrDefaultBoldFont; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + display: flex; + padding: var(--ctr-actionbar-button-padding-top-large-icon, var(--sjs-spacing-x1)) + var(--ctr-actionbar-button-padding-right-large-icon, var(--sjs-spacing-x1)) + var(--ctr-actionbar-button-padding-bottom-large-icon, var(--sjs-spacing-x1)) + var(--ctr-actionbar-button-padding-left-large-icon, var(--sjs-spacing-x1)); + box-sizing: border-box; + border: none; + color: var(--ctr-actionbar-button-text-color, var(--sjs-primary-background-500, #19b394ff)); + border-radius: var(--sjs2-radius-control-action-icon, 8px); + background: var(--sjs2-color-bg-neutral-tertiary, rgba(28, 27, 32, 0)); + cursor: pointer; + transition: + background-color $creator-transition-duration, + opacity $creator-transition-duration; + + &.sps-action-button--pressed, + &:hover, + &:focus { + opacity: 1; + outline: none; + + background: var(--sjs2-color-bg-neutral-tertiary-dim, rgba(28, 27, 32, 0.05)); + + use { + fill: var(--ctr-actionbar-button-icon-color-hovered, var(--sjs-layer-1-foreground-75, #000000bf)); + } + } + &:disabled { + use { + fill: var(--sjs2-color-fg-state-common-disabled, rgba(28, 27, 32, 0.40)); + } + } +} + +.sps-action-button--icon { + padding: var(--ctr-actionbar-button-padding-top-large-icon, var(--sjs-spacing-x1)) + var(--ctr-actionbar-button-padding-right-large-icon, var(--sjs-spacing-x1)) + var(--ctr-actionbar-button-padding-bottom-large-icon, var(--sjs-spacing-x1)) + var(--ctr-actionbar-button-padding-left-large-icon, var(--sjs-spacing-x1)); +} +.sps-action-button__icon { + display: block; + width: var(--ctr-actionbar-button-icon-width, var(--sjs-font-size-x3)); + height: var(--ctr-actionbar-button-icon-height, var(--sjs-font-size-x3)); + + use { + fill: var(--ctr-actionbar-button-icon-color, var(--sjs-layer-1-foreground-75, #000000bf)); + transition: fill $creator-transition-duration; + } +} + +.sps-action-button--danger { + color: var(--ctr-library-action-button-text-color-negative, var(--sjs-semantic-red-background-500, #e50a3eff)); + + &:hover, + &:focus { + background-color: var( + --ctr-library-action-button-background-color-negative-hovered, + var(--sjs-semantic-red-background-10, #e50a3e1a) + ); + + use { + fill: var(--ctr-library-action-button-icon-color-negative, var(--sjs-semantic-red-background-500, #e50a3eff)); + } + } +} + +button.sps-action-button--large { + +} + +.sps-action-button:disabled { + opacity: var(--ctr-actionbar-button-opacity-disabled, 0.25); + pointer-events: none; + cursor: default; +} + +.sps-action-button--muted { + opacity: var(--ctr-actionbar-button-opacity-muted, 0.35); +} + +.sps-action-button:active { + opacity: var(--ctr-actionbar-button-opacity-pressed, 0.5); +} + +.sps-action-button--text { + padding: calcSize(0.5) calcSize(2); +} + +.sps-menu-floating-action { + .svc-menu-action__button { + background: var(--sjs2-color-bg-brand-primary, #19B394); + use { + fill: var(--sjs2-color-fg-static-main-primary, #FFF); + } + } + .svc-menu-action__button:hover, + .svc-menu-action__button:focus, + .svc-menu-action__button:focus-within { + background: var(--sjs2-color-bg-brand-primary-dim, #15987E); + } + .svc-menu-action__button:active { + background: var(--sjs2-color-bg-brand-primary, #19B394); + } +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-checkbox.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-checkbox.scss new file mode 100644 index 0000000000..d709693a00 --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-checkbox.scss @@ -0,0 +1,155 @@ +@use "../../../variables" as *; +@use "../fonts" as *; + +.sps-checkbox { + cursor: pointer; + margin-top: var(--ctr-checkbox-list-gap-vertical, var(--sjs-spacing-x2)); +} + +.sps-checkbox--disabled { + cursor: default; + + .sps-checkbox { + cursor: default; + } + + .sps-checkbox__caption { + color: var(--ctr-checkbox-text-color-disabled, var(--sjs-layer-1-foreground-100, #000000e6)); + } + + .sps-checkbox__rectangle, + &.sps-checkbox:active .sps-checkbox__rectangle, + &.sps-checkbox__control:focus + .sps-checkbox__rectangle { + border: var(--ctr-checkbox-border-width, var(--sjs-stroke-x1)) solid + var(--ctr-checkbox-border-color-disabled, var(--sjs-border-10, #dcdcdcff)); + background: var(--ctr-checkbox-background-color-disabled, var(--sjs-layer-1-background-500, #ffffffff)); + outline: none; + } +} + +.sps-checkbox__caption { + @include sjs2--typography--default; + color: var(--sjs2-color-fg-basic-primary, #1C1B20); +} + +.sps-checkbox__rectangle { + border-radius: var(--sjs2-radius-control-checkbox, 4px); + border: var(--sjs2-border-width-default, 1px) solid var(--sjs2-color-control-check-false-default-border, #D4D4D4); + background: var(--sjs2-color-control-check-false-default-bg, rgba(28, 27, 32, 0.05)); + + /* sjs2/shadow/inner */ + //box-shadow: var(--sjs2-shadow-size-inner-offset-x, 0) var(--sjs2-shadow-size-inner-offset-y, 0) var(--sjs2-shadow-size-inner-blur, 0) var(--sjs2-shadow-size-inner-spread, 1px) var(--sjs2-shadow-color-inner, #D4D4D4) inset; + box-sizing: border-box; + width: var(--sjs2-size-x300, 24px); + height: var(--sjs2-size-x300, 24px); + + display: flex; + justify-content: center; + align-items: center; + flex-shrink: 0; + // padding: calcSize(0.5); + padding: 1px 1px; + outline: 2px solid transparent; + display: flex; + justify-content: center; + align-items: center; + transition: + background $creator-transition-duration, + background-color $creator-transition-duration, + outline $creator-transition-duration; +} + +.sps-checkbox:hover { + .sps-checkbox__rectangle { + background: var(--sjs2-color-control-check-false-hovered-bg, rgba(28, 27, 32, 0.10)); + } +} + +.sps-checkbox.sps-checkbox--checked:hover { + .sps-checkbox__rectangle { + background: var(--sjs2-color-control-check-true-hovered-bg, #15987E); + } +} + +.sps-checkbox:active .sps-checkbox__rectangle, +.sps-checkbox__control:focus:not(:disabled) + .sps-checkbox__rectangle { + outline: 2px solid var(--ctr-checkbox-border-color-focused, var(--sjs-primary-background-500, #19b394ff)); + outline-offset: -2px; +} + +.sps-checkbox .sps-checkbox__svg { + display: block; + opacity: 0; + fill: transparent; + width: var(--ctr-checkbox-button-check-mark-width, 16px); + height: var(--ctr-checkbox-button-check-mark-height, 16px); + background-repeat: no-repeat; + background-size: calcSize(2) calcSize(2); + transition: + opacity $creator-transition-duration, + fill $creator-transition-duration; +} + +.sps-checkbox--checked { + .sps-checkbox__rectangle { + background: var(--sjs2-color-control-check-true-default-bg, #19B394); + border: var(--sjs2-border-width-default, 1px) solid var(--sjs2-color-control-check-true-default-border, #19B394); + } + + .sps-checkbox__svg { + opacity: 1; + fill: var(--sjs2-color-control-check-true-default-icon, #ffffff); + } +} + +.sps-checkbox--disabled.sps-checkbox--checked .sps-checkbox__svg { + fill: var(--ctr-checkbox-button-check-mark-color-disabled, var(--sjs-border-25, #d4d4d4ff)); +} + +.sps-checkbox__control { + position: fixed; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px 1px 1px 1px); + clip: rect(1px, 1px, 1px, 1px); +} + +//todo: need to hide unneeded icons +.sps-checkbox__hidden { + display: none; +} + +.sps-selectbase { + border: none; + padding: 0; + margin: 0; + align-self: stretch; + display: flex; +} + +.sps-selectbase__column { + flex-grow: 1; +} + +.sps-selectbase__label { + display: flex; + align-items: flex-start; + gap: var(--ctr-checkbox-gap, var(--sjs-spacing-x1)); + cursor: pointer; +} + +.sps-checkbox { + .sps-question__description { + padding: 0; + padding-top: var(--ctr-checkbox-description-text-margin-top, var(--sjs-spacing-x1)); + padding-inline-start: var(--ctr-checkbox-description-text-margin-left, var(--sjs-font-size-x4)); + color: var(--ctr-checkbox-description-text-color, var(--sjs-layer-1-foreground-50, #00000080)); + } + + .sps-help-action { + use { + pointer-events: none; + } + } +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-dropdown.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-dropdown.scss new file mode 100644 index 0000000000..19c997b5ec --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-dropdown.scss @@ -0,0 +1,150 @@ +@use "../../../variables" as *; + +.sps-dropdown { + display: flex; + padding: var(--sjs2-layout-control-formbox-medium-vertical, 4px) + var(--sjs2-layout-control-formbox-medium-horizontal, 4px); + align-items: stretch; + //gap: var(--sjs2-layout-control-formbox-medium-gap, 4px); + align-self: stretch; + + border-radius: var(--sjs2-radius-semantic-form, 8px); + + .sps-dropdown__filter-string-input { + display: flex; + padding: var(--sjs2-layout-control-input-medium-content-vertical, 8px) + var(--sjs2-layout-control-input-medium-content-horizontal, 12px); + align-items: flex-start; + flex: 1 0 0; + box-shadow: none; + border: none; + } +} + +.sps-question__content { + sv-ng-dropdown-question, sv-ng-dropdown { + display: flex; + flex-direction: column; + flex-grow: 1; + } +} + +.sps-dropdown__value { + display: flex; + padding: var(--sjs2-layout-control-input-medium-content-vertical, 8px) + var(--sjs2-layout-control-input-medium-content-horizontal, 12px); + align-items: flex-start; + flex: 1 0 0; + position: relative; + &.sv-string-viewer { + white-space: nowrap; + } +} + +.sps-dropdown-popup.sv-popup--menu-popup { + height: 0; +} + +.sps-dropdown_select-wrapper { + flex-grow: 1; +} +.sps-dropdown__clean-button { + --thm-ctr-editor-content-margin-top: var(--ctr-editor-content-margin-top, var(--sjs-spacing-x1)); + --thm-ctr-editor-content-margin-bottom: var(--ctr-editor-content-margin-bottom, var(--sjs-spacing-x1)); + margin-top: calc(-1 * var(--thm-ctr-editor-content-margin-top)); + margin-bottom: calc(-1 * var(--thm-ctr-editor-content-margin-bottom)); + use { + fill: inherit; + } +} + +.sps-dropdown { + .sd-dropdown-action-bar { + display: flex; + align-items: flex-start; + gap: var(--sjs2-layout-control-input-medium-group-gap, 4px); + align-self: stretch; + } + + .sd-editor-button-item { + display: flex; + padding: var(--sjs2-layout-control-action-small-box-vertical, 8px) + var(--sjs2-layout-control-action-small-box-horizontal, 8px); + justify-content: center; + align-items: center; + gap: var(--sjs2-layout-control-action-small-box-gap, 0); + + border-radius: var(--sjs2-radius-semantic-form-item, 4px); + background: var(--sjs2-color-bg-neutral-tertiary, rgba(28, 27, 32, 0)); + + &:hover, + &:focus { + border-radius: var(--ctr-editor-button-corner-radius, var(--sjs-corner-radius-x05)); + background: var(--ctr-editor-button-background-color-hovered, var(--sjs-layer-3-background-400, #eaeaeaff)); + transition: background $creator-transition-duration; + } + + &.sd-editor-button-item--pressed { + border-radius: var(--ctr-editor-button-corner-radius, var(--sjs-corner-radius-x05)); + opacity: var(--ctr-editor-button-icon-opacity-pressed, 0.5); + background: var(--ctr-editor-button-background-color-hovered, var(--sjs-layer-3-background-400, #eaeaeaff)); + transition-property: opacity, background-color; + transition-duration: $creator-transition-duration; + } + + use { + fill: var(--ctr-editor-button-icon-color, var(--sjs-layer-3-foreground-75, #000000bf)); + } + } + + .sv-editor-button-item__icon { + display: flex; + width: var(--sjs2-size-icon-medium, 24px); + height: var(--sjs2-size-icon-medium, 24px); + padding: var(--sjs2-layout-control-action-small-icon-vertical, 0) + var(--sjs2-layout-control-action-small-icon-horizontal, 0); + justify-content: center; + align-items: center; + } + + .sd-dropdown__hint-prefix { + padding-left: var(--sjs2-layout-control-input-medium-content-horizontal, 12px); + & + .sps-dropdown__value { + padding-left: 0; + & .sps-dropdown__filter-string-input { + padding-left: 0; + } + } + } +} + +.sps-dropdown.sd-input--disabled { + opacity: 1; + + .sps-dropdown__value { + opacity: var(--ctr-editor-content-text-opacity-disabled, 0.25); + } + .sd-editor-button-item { + opacity: var(--ctr-editor-button-icon-opacity-disabled, 0.25); + background: transparent; + + svg { + fill: var(--ctr-editor-button-icon-color-disabled, var(--sjs-layer-3-foreground-75, #000000bf)); + } + } +} +.sps-icon-item { + display: flex; + gap: var(--sjs2-spacing-x100, 8px); +} +svg.sps-icon-item__icon, svg.sps-icon-item__icon use { + width: var(--sjs2-size-icon-medium, 24px); + height: var(--sjs2-size-icon-medium, 24px); + fill: var(--sjs2-color-fg-brand-primary, #19b394); +} +.sv-list__item--selected svg.sps-icon-item__icon use { + fill: currentColor; +} +.sps-icon-item__text { + white-space: nowrap; +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-input.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-input.scss new file mode 100644 index 0000000000..86af473c84 --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-input.scss @@ -0,0 +1,200 @@ +@use "../../../variables.scss" as *; + +.sps-input { + @include ctrDefaultFont; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + display: block; + box-sizing: border-box; + width: 100%; + border: none; + border-radius: var(--sjs2-radius-semantic-form, 8px); + background: var(--sjs2-color-control-formbox-default-bg, rgba(28, 27, 32, 0.05)); + box-shadow: inset 0 0 0 var(--sjs2-border-width-default, 1px) + var(--sjs2-color-control-formbox-default-border, #D4D4D4); + transition: box-shadow $creator-transition-duration; + + padding-top: calc( + var(--sjs2-layout-form-box-medium-vertical, 4px) + var(--ctr-editor-content-margin-top, var(--sjs-spacing-x1)) + ); + padding-right: calc( + var(--sjs2-layout-form-box-medium-horizontal, 4px) + + var(--ctr-editor-content-margin-right, var(--sjs-spacing-x150)) + ); + padding-bottom: calc( + var(--sjs2-layout-form-box-medium-vertical, 4px) + + var(--ctr-editor-content-margin-bottom, var(--sjs-spacing-x1)) + ); + padding-left: calc( + var(--sjs2-layout-form-box-medium-horizontal, 4px) + + var(--ctr-editor-content-margin-left, var(--sjs-spacing-x150)) + ); + outline: none; + color: var(--ctr-editor-content-text-color, var(--sjs-layer-3-foreground-100, #000000e6)); +} + +.sps-input::placeholder { + color: var(--ctr-editor-content-text-color-placeholder, var(--sjs-layer-3-foreground-50, #00000080)); +} + +.sps-input { + &::-webkit-datetime-edit, + &::-webkit-datetime-edit-fields-wrapper, + &::-webkit-datetime-edit-ampm-field, + &::-webkit-datetime-edit-day-field, + &::-webkit-datetime-edit-hour-field, + &::-webkit-datetime-edit-millisecond-field, + &::-webkit-datetime-edit-minute-field, + &::-webkit-datetime-edit-month-field, + &::-webkit-datetime-edit-second-field, + &::-webkit-datetime-edit-week-field, + &::-webkit-datetime-edit-year-field { + display: flex; + flex-wrap: nowrap; + padding-top: 0; + padding-bottom: 0; + } +} +.sps-input[type="date"], +.sps-input[type="datetime-local"] { + &:empty { + min-height: calc( + var(--ctr-font-default-line-height, var(--sjs-line-height-x3)) + + var(--ctr-editor-padding-top, var(--sjs-spacing-x05)) + + var(--ctr-editor-content-margin-top, var(--sjs-spacing-x1)) + + var(--ctr-editor-padding-bottom, var(--sjs-spacing-x05)) + + var(--ctr-editor-content-margin-bottom, var(--sjs-spacing-x1)) + ); + } +} + +.sps-input:focus:not(:disabled), +.sps-input.sps-dropdown:focus:not(:disabled), +.sps-input.sps-dropdown:focus-within:not(:disabled), +.sps-input-container:focus-within { + box-shadow: inset 0 0 0 var(--ctr-editor-border-width-focused, var(--sjs-stroke-x2)) + var(--ctr-editor-border-color-focused, var(--sjs-primary-background-500, #19b394ff)); +} + + +.sps-input[type="color"] { + padding-left: 0; + padding-right: 0; + min-width: calcSize(8); +} + +.sps-input__edit-button { + position: relative; + box-sizing: border-box; + appearance: none; + background: transparent; + border: none; + outline: none; + border-radius: var(--ctr-editor-button-corner-radius, var(--sjs-corner-radius-x05)); + padding: var(--ctr-editor-button-padding-top, var(--sjs-spacing-x1)) + var(--ctr-editor-button-padding-right, var(--sjs-spacing-x1)) + var(--ctr-editor-button-padding-bottom, var(--sjs-spacing-x1)) + var(--ctr-editor-button-padding-left, var(--sjs-spacing-x1)); + line-height: 0; + transition: + background $creator-transition-duration, + opacity $creator-transition-duration; + align-self: stretch; + display: flex; + align-items: center; + justify-content: center; + + &:focus, + &:hover { + background: var(--ctr-editor-button-background-color-hovered, var(--sjs-layer-3-background-400, #eaeaeaff)); + } + + &:active { + opacity: var(--ctr-editor-button-icon-opacity-pressed, 0.5); + } + + svg { + width: var(--ctr-editor-button-icon-width, var(--sjs-font-size-x3)); + height: var(--ctr-editor-button-icon-height, var(--sjs-font-size-x3)); + fill: var(--ctr-editor-button-icon-color, var(--sjs-layer-3-foreground-75, #000000bf)); + } +} + +.sps-input-container--multiline .sps-input__edit-button { + align-self: flex-end; +} + +.sps-input__edit-button--disabled, +.sps-input__edit-button:disabled { + opacity: var(--ctr-editor-button-icon-opacity-disabled, 0.25); + background: transparent; + + svg { + fill: var(--ctr-editor-button-icon-color-disabled, var(--sjs-layer-3-foreground-75, #000000bf)); + } +} + +.sps-input.sps-input--error { + box-shadow: 0 0 0 1px inset var(--ctr-editor-border-color-error, var(--sjs-semantic-red-background-500, #e50a3eff)); +} + +.sps-input-container { + display: flex; + justify-content: space-between; + cursor: default; + padding: var(--ctr-editor-padding-top, var(--sjs-spacing-x05)) var(--ctr-editor-padding-right, var(--sjs-spacing-x05)) + var(--ctr-editor-padding-bottom, var(--sjs-spacing-x05)) var(--ctr-editor-padding-left, var(--sjs-spacing-x05)); + align-items: center; + gap: var(--ctr-editor-gap, var(--sjs-spacing-x05)); + box-shadow: inset 0 0 0 var(--ctr-editor-border-width, var(--sjs-stroke-x1)) + var(--ctr-editor-border-color, var(--sjs-border-10, #dcdcdcff)); +} + +.sps-input-container--multiline { + align-items: end; + flex-direction: column; + gap: 0; + height: auto; + + sv-ng-question-comment { + display: flex; + } + + .sps-input-container__input { + box-sizing: border-box; + resize: none; + } +} + +.sps-input-container__input { + @include ctrDefaultFont; + flex-grow: 1; + width: 100%; + padding: var(--ctr-editor-content-margin-top, var(--sjs-spacing-x1)) + var(--ctr-editor-content-margin-right, var(--sjs-spacing-x150)) + var(--ctr-editor-content-margin-bottom, var(--sjs-spacing-x1)) + var(--ctr-editor-content-margin-left, var(--sjs-spacing-x150)); + + color: var(--ctr-editor-content-text-color, var(--sjs-layer-3-foreground-100, #000000e6)); + outline: none; + border: none; + background-color: transparent; + + &::placeholder { + color: var(--ctr-editor-content-text-color-placeholder, var(--sjs-layer-3-foreground-50, #00000080)); + } +} + +.sps-input-container__input:disabled, +.sps-input-container__input:disabled::placeholder { + opacity: var(--ctr-editor-content-text-opacity-disabled, 0.25); + color: var(--ctr-editor-content-text-color-disabled, var(--sjs-layer-1-foreground-100, #000000e6)); + background-color: var(--ctr-editor-background-color-disabled, var(--sjs-layer-1-background-500, #ffffffff)); +} + +.sps-input-container__buttons-container { + display: flex; + gap: var(--ctr-editor-buttons-gap, var(--sjs-spacing-x05)); + align-self: stretch; +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-launch.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-launch.scss new file mode 100644 index 0000000000..9278e5011a --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-launch.scss @@ -0,0 +1,117 @@ +.sps-launch, +.sps-launch * { + box-sizing: border-box; +} +.sps-launch { + padding: var(--sjs2-spacing-x200, 16px) var(--sjs2-spacing-x400, 32px) 0px var(--sjs2-spacing-x400, 32px); + display: flex; + flex-direction: column; + gap: var(--sjs2-spacing-x200, 16px); + align-items: flex-start; + justify-content: flex-start; + align-self: stretch; + flex-shrink: 0; + position: relative; +} +.sps-launch__card { + background: var(--sjs2-color-bg-basic-primary, #ffffff); + border-radius: var(--radius-semantic-form, 8px); + border-style: solid; + border-color: var(--sjs2-color-border-basic-secondary, #d4d4d4); + border-width: 1px; + display: flex; + flex-direction: row; + gap: 0px; + align-items: flex-start; + justify-content: flex-start; + align-self: stretch; + flex-shrink: 0; + position: relative; + cursor: pointer; + appearance: none; + &:hover { + background: var(--sjs2-color-bg-basic-primary-dim, rgba(28, 27, 32, 0.05)); + } + &:active { + background: var(--sjs2-color-bg-basic-primary, #ffffff); + } +} +.sps-launch__container { + padding: 16px; + display: flex; + flex-direction: column; + gap: 4px; + align-items: flex-start; + justify-content: flex-start; + flex: 1; + position: relative; +} +.sps-launch__text { + color: var(--sjs2-color-fg-brand-primary, #19b394); + text-align: left; + font-family: var(--sjs2-typography-default-strong-font-family, "OpenSans-SemiBold", sans-serif); + font-size: var(--sjs2-typography-default-strong-font-size, 16px); + line-height: var(--sjs2-typography-default-strong-line-height, 24px); + font-weight: var(--sjs2-typography-default-strong-font-weight, 600); + position: relative; + align-self: stretch; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.sps-launch__text2 { + color: var(--sjs2-color-fg-basic-secondary, rgba(28, 27, 32, 0.6)); + text-align: left; + font-family: var(--sjs2-typography-small-font-family, "OpenSans-Regular", sans-serif); + font-size: var(--sjs2-typography-small-font-size, 12px); + line-height: var(--sjs2-typography-small-line-height, 16px); + font-weight: var(--sjs2-typography-small-font-weight, 400); + position: relative; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.sps-launch__icon { + display: flex; + flex-direction: row; + gap: 0px; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: var(--ctr-menu-toolbar-button-icon-width, 24px); + height: var(--ctr-menu-toolbar-button-icon-height, 24px); + position: absolute; + right: 12px; + top: 50%; + translate: 0 -50%; +} +.sps-launch__chevron-right-16-x-16 { + flex-shrink: 0; + width: 24px; + height: 24px; + position: relative; + overflow: hidden; +} +.sps-launch__icon2 { + display: flex; + flex-direction: row; + gap: 0px; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + position: absolute; + right: 0%; + left: 0%; + bottom: -100%; + top: 100%; + transform-origin: 0 0; + transform: rotate(-90deg) scale(1, 1); +} +.sps-launch__chevron-down { + align-self: stretch; + flex: 1; + height: auto; + position: relative; + overflow: visible; +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-list.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-list.scss new file mode 100644 index 0000000000..7be9ad8fab --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-list.scss @@ -0,0 +1,147 @@ +@use "../../../variables.scss" as *; +@use "../fonts" as *; + +.sps-list { + width: 100%; + display: flex; + padding: var(--sjs2-spacing-x100, 8px); + flex-direction: column; + align-items: flex-start; + align-self: stretch; + margin: 0; + overflow-y: auto; + list-style-type: none; + + box-sizing: border-box; +} + +.sps-list__container { + width: 288px; +} + +.sps-list__item { + width: 100%; + outline: none; +} + +.sps-list__item--positive { + .sps-list__item-body { + color: var(--sjs2-color-fg-brand-primary, #19b394); + } +} + +.sps-list__item--alert { + .sps-list__item-body { + color: var(--sjs2-color-fg-alert-primary, #C30935); + } +} + +.sps-list__item-body { + @include textEllipsis; + @include sjs2--typography--default; + text-align: start; + color: var(--sjs2-color-fg-basic-primary, #1c1b20); + transition: color $creator-transition-duration; + + display: flex; + flex: 1 0 0; + display: flex; + padding: var(--sjs2-spacing-x100, 8px) var(--sjs2-spacing-x150, 12px); + align-items: center; + gap: 8px; + flex: 1 0 0; + border-radius: var(--ctr-list-item-corner-radius, var(--sjs-corner-radius-x075)); + cursor: pointer; + + transition: background-color $creator-transition-duration; + + & > span, + & > sv-ng-string { + flex: 1 0 0; + } +} + +.sps-list__item:disabled, +.sps-list__item--disabled { + opacity: var(--ctr-list-item-opacity-disabled, 0.25); + pointer-events: none; +} + +.sps-list__item--label { + opacity: 1; + .sps-list__item-body { + display: flex; + padding: var(--sjs2-spacing-x100, 8px) var(--sjs2-spacing-x100, 8px) var(--sjs2-spacing-x050, 4px) var(--sjs2-spacing-x150, 12px); + align-items: center; + gap: 8px; + align-self: stretch; + + overflow: hidden; + color: var(--sjs2-color-fg-basic-tertiary, rgba(28, 27, 32, 0.40)); + + @include sjs2--typography--small-strong; + } + padding-bottom: var(--sjs2-spacing-x050, 4px); +} + +.sps-list__item--group { + .sps-list__item-body { + padding-right: 0; + } +} + +.sps-list__item:focus, +.sps-list__item:hover, +.sps-list__item--focused, +.sps-list__item--hovered { + & > .sps-list__item-body { + background: var(--sjs2-color-bg-brand-tertiary-dim, rgba(25, 179, 148, 0.1)); + } +} + +.sps-list__item--alert:focus, +.sps-list__item--alert:hover { + & > .sps-list__item-body { + background: var(--sjs2-color-bg-alert-tertiary-dim, rgba(229, 10, 62, 0.10)); + } +} + +.sps-list__item--selected, +.sps-list__item--selected:hover, +.sps-list__item--selected:focus, +.sps-list__item.sps-list__item--selected:hover { + & > .sps-list__item-body { + @include sjs2--typography--default-strong; + color: var(--sjs2-color-fg-static-main-primary, #fff); + background: var(--sjs2-color-bg-brand-primary, #19b394); + } +} + +.sps-list__item-separator { + width: calc(100% + var(--sjs2-spacing-x150, 12px)); + height: var(--sjs2-border-width-x100, 1px); + margin: var(--sjs2-spacing-x100, 8px) calc(-1 * var(--sjs2-spacing-x150, 12px)); + background: var(--sjs2-color-border-basic-secondary, #d4d4d4); +} + +.sps-list-item__marker-icon { + display: flex; + padding: 0; + align-items: flex-start; + width: 24px; + height: 24px; + box-sizing: content-box; + justify-content: center; + + use { + fill: currentColor; + } +} + +.sps-list__container { + display: flex; + flex-direction: column; + flex-grow: 1; + min-height: 0; + height: 100%; +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-matrixdynamic.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-matrixdynamic.scss new file mode 100644 index 0000000000..506ee174f1 --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-matrixdynamic.scss @@ -0,0 +1,215 @@ +@use "../../../variables.scss" as *; +@use "../fonts.scss" as *; + +// .sps-matrixdynamic__drag-element { +// padding: calcSize(2); + +// &:hover { +// background-color: $background; +// } + +// &:after { +// content: " "; +// display: block; +// height: calcSize(0.5); +// } +// } + +.sps-drag-element__svg { + box-sizing: content-box; + width: var(--sjs2-size-icon-medium, 24px); + height: var(--sjs2-size-icon-medium, 24px); + display: flex; + padding: var(--sjs2-spacing-x100, 8px); + padding-right: 0; + flex-direction: column; + justify-content: center; + align-items: center; + use { + fill: var(--sjs2-color-fg-basic-tertiary, rgba(from #1c1b20 r g b / 0.4)); + } +} + +.sps-matrixdynamic__drag-drop-ghost-position-top, +.sps-matrixdynamic__drag-drop-ghost-position-bottom { + position: relative; +} + +.sps-matrixdynamic__drag-drop-ghost-position-top::after, +.sps-matrixdynamic__drag-drop-ghost-position-bottom::after { + content: ""; + width: 100%; + height: calcSize(0.5); + background-color: var(--sjs-secondary-background-500, #19b394ff); + position: absolute; + left: 0; +} + +.sps-matrixdynamic__drag-drop-ghost-position-top::after { + top: 0; +} + +.sps-matrixdynamic__drag-drop-ghost-position-bottom::after { + bottom: 0; +} + +.sps-question--matrixdynamic { + display: flex; + flex-direction: column; + flex-grow: 1; +} + +.sps-matrixdynamic__content { + padding: var(--sjs2-spacing-x150, 12px); + &, + & > div { + display: flex; + flex-direction: column; + flex-grow: 1; + } + .sps-question__description--under { + flex-grow: 0; + } +} +.sps-table__row--detail .sps-matrixdynamic__content { + padding: 0; +} +.sps-matrixdynamic__placeholder { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + background: var(--ctr-property-grid-background-color, var(--sjs-layer-1-background-500, #ffffffff)); + border: 1px solid var(--ctr-survey-placeholder-border-color, var(--sjs-border-25, #d4d4d4ff)); + border-radius: var(--ctr-data-table-placeholder-corner-radius, var(--sjs-corner-radius-x075)); + box-sizing: border-box; + padding: var(--ctr-data-table-placeholder-padding-top, var(--sjs-spacing-x6)) + var(--ctr-data-table-placeholder-padding-right, var(--sjs-spacing-x8)) + var(--ctr-data-table-placeholder-padding-bottom, var(--sjs-spacing-x6)) + var(--ctr-data-table-placeholder-padding-left, var(--sjs-spacing-x8)); + gap: var(--ctr-survey-placeholder-gap, var(--lbr-spacing-x05)); + + .sps-matrixdynamic__add-btn { + display: initial; + margin: 0; + } +} + +.sps-matrixdynamic__placeholder-text { + @include ctrDefaultFont; + color: var(--ctr-survey-placeholder-text-color, var(--sjs-layer-1-foreground-50, #00000080)); + text-align: center; +} + +.sps-matrixdynamic__row-icon { + width: var(--sjs2-size-icon-medium, 24px); + height: var(--sjs2-size-icon-medium, 24px); + padding: 0; + margin: var(--ctr-actionbar-button-padding-top-large-icon, var(--sjs-spacing-x1)) 0 + var(--ctr-actionbar-button-padding-bottom-large-icon, var(--sjs-spacing-x1)) 0; + margin-left: var(--sjs2-spacing-x150, 12px); + &:disabled { + opacity: 1; + use { + fill: var(--sjs2-color-fg-brand-primary, #19b394); + } + } +} + +.sps-matrixdynamic__footer { + margin: 0 calc(-1 * var(--sjs2-spacing-x150, 12px)) var(--sjs2-spacing-x150, 12px); + padding: 0 var(--sjs2-spacing-x150, 12px) var(--sjs2-spacing-x150, 12px); + border-bottom: var(--sjs2-border-width-x100, 1px) solid var(--sjs2-color-border-basic-secondary, #d4d4d4); + display: flex; +} +.sps-table-wrapper, sv-ng-matrix-table { + &~ .sps-matrixdynamic__footer { + border-bottom: none; + margin-bottom: 0; + padding-top: var(--sjs2-spacing-x075, 6px); + padding-bottom: var(--sjs2-spacing-x050, 4px); + display: flex; + justify-content: stretch; + } +} +.sps-matrixdynamic__add-btn { + @include sjs2--typography--default; + //display: none; + appearance: none; + border: none; + background: var(--sjs2-color-bg-neutral-secondary, rgba(95, 94, 97, 0.1)); + color: var(--sjs2-color-fg-basic-primary, #1c1b20); + text-align: center; + flex-grow: 1; + &:hover { + background: var(--sjs2-color-bg-neutral-secondary-dim, rgba(95, 94, 97, 0.1)); + } +} + +.sps-matrixdynamic__add-btn--icon { + flex-direction: row-reverse; + background: transparent; + padding: var(--sjs2-spacing-x100, 8px); + justify-content: flex-end; + .sv-string-viewer { + padding: 0 0 0 var(--sjs2-spacing-x100, 8px); + } +} + +.sps-matrixdynamic__add-btn-icon { + display: flex; + svg { + width: 24px; + height: 24px; + } +} + +.sps-smiley-icon { + width: calcSize(3); + height: calcSize(3); + margin: calcSize(1); + border-radius: 100px; + border: 1px solid var(--ctr-actionbar-button-icon-color, var(--sjs-layer-1-foreground-75, #000000bf)); + display: flex; + justify-content: center; + align-items: center; + margin-right: calcSize(4); + + svg { + width: calcSize(1.5); + height: calcSize(1.5); + fill: var(--ctr-actionbar-button-icon-color, var(--sjs-layer-1-foreground-75, #000000bf)); + } +} + +.sps-question--matrixdynamic.sps-question--nested { + .sps-question__header { + padding: var(--sjs2-spacing-x250, 20px) var(--sjs2-spacing-x250, 20px) var(--sjs2-spacing-x100, 8px) + var(--sjs2-spacing-x250, 20px); + border-bottom: var(--sjs2-border-width-x100, 1px) solid var(--sjs2-color-border-basic-secondary, #d4d4d4); + box-sizing: border-box; + } +} + +.sps-matrixdynamic__dragged-row { + cursor: grabbing; + position: absolute; + z-index: 10000; + + .sps-table__row { + display: flex; + align-items: center; + flex: 1 0 0; + border-radius: var(--ctr-data-table-row-corner-radius-floating, var(--sjs-corner-radius-x05)); + background: var(--ctr-data-table-row-background-color, var(--sjs-layer-1-background-500, #ffffffff)); + box-shadow: + var(--ctr-data-table-row-shadow-floating-1-offset-x, 0px) + var(--ctr-data-table-row-shadow-floating-1-offset-y, 2px) var(--ctr-data-table-row-shadow-floating-1-blur, 8px) + var(--ctr-data-table-row-shadow-floating-1-spread, 0px) + var(--ctr-data-table-row-shadow-floating-1-color, var(--sjs-special-glow, #004c441a)), + var(--ctr-data-table-row-shadow-floating-2-offset-x, 0px) + var(--ctr-data-table-row-shadow-floating-2-offset-y, 16px) + var(--ctr-data-table-row-shadow-floating-2-blur, 32px) var(--ctr-data-table-row-shadow-floating-2-spread, 0px) + var(--ctr-data-table-row-shadow-floating-2-color, var(--sjs-special-glow, #004c441a)); + } +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-panel.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-panel.scss new file mode 100644 index 0000000000..66e9176527 --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-panel.scss @@ -0,0 +1,75 @@ +@use "../../../variables.scss" as *; +@use "./variables.scss" as *; +@use "../fonts" as *; + +.sps-panel { + border-radius: var(--sjs2-radius-x250, 20px); + border: var(--sjs2-border-width-x100, 1px) solid var(--sjs2-color-border-basic-secondary, #D4D4D4); + background: var(--sjs2-color-bg-basic-primary, #FFF); + overflow: hidden; + + .sps-row { + border-bottom: var(--sjs2-border-width-x100, 1px) solid var(--sjs2-color-border-basic-secondary, #D4D4D4); + &:last-of-type { + border-bottom: none; + } + } +} +.sps-panel--navigation { + position: relative; + display: flex; + flex-direction: row-reverse; + padding: var(--sjs2-spacing-x150, 12px) var(--sjs2-spacing-x150, 12px) var(--sjs2-spacing-x150, 12px) var(--sjs2-spacing-x250, 20px); + align-items: center; + gap: var(--sjs2-spacing-x150, 12px); + + .sps-panel__header { + width: auto; + flex-grow: 1; + padding: 0; + display: flex; + justify-content: flex-end; + } + .sps-panel__content { + display: flex; + } + .sps-row { + border: none; + padding: 0 var(--tokens-spacing-static-positive-x300, 24px); + border-left: var(--sjs2-border-width-x100, 1px) solid var(--sjs2-color-border-basic-secondary, #D4D4D4); + &:first-of-type { + padding-left: 0; + border-left: none; + } + } + .sps-question__content { + padding: 0; + } + .sps-row--multiple { + & > div { + padding: 0; + border: none; + } + .sps-question--nested { + overflow-y: visible; + } + } +} +.sps-panel__header { + width: 100%; + display: flex; + padding: var(--sjs2-spacing-x250, 20px) var(--sjs2-spacing-x250, 20px) 0 var(--sjs2-spacing-x250, 20px); + align-items: flex-start; + align-self: stretch; +} + +.sps-panel__title { + color: var(--sjs2-color-fg-basic-primary, #1C1B20); + + @include sjs2--typography--default-strong; +} + + +.sps-panel__content { + +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-popup.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-popup.scss new file mode 100644 index 0000000000..7a00cb0f60 --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-popup.scss @@ -0,0 +1,108 @@ +@use "../../../variables.scss" as *; +@use "./variables.scss" as *; +@use "../fonts" as *; + +.sps-popup-menu.sv-popup--menu-popup { + &.sps-popup-menu--always-on-top { + height: unset; + } + .sv-popup__container { + border: initial; + + padding: var(--sjs2-spacing-x150, 12px); + + box-shadow: initial; + background: initial; + box-sizing: border-box; + + .sv-popup__body-content { + border-radius: var(--sjs2-radius-container-menu, 20px); + border: var(--sjs2-border-width-x100, 1px) solid var(--sjs2-color-border-basic-secondary, #d4d4d4); + background: var(--sjs2-color-utility-sheet, #fff); + + /* sjs2/border-effect/floating/default */ + box-shadow: var(--sjs2-border-offset-x-floating-default, 0) var(--sjs2-border-offset-y-floating-default, 6px) + var(--sjs2-border-blur-floating-default, 12px) var(--sjs2-border-spread-floating-default, 4px) + var(--sjs2-color-utility-shadow-floating-default, rgba(0, 76, 68, 0.2)); + } + } +} + +.sps-popup-menu.sps-popup-menu--context { + .sv-popup__container { + padding: 0 var(--sjs2-spacing-x100, 8px); + } +} + + + +.sps-popup { + &.sv-popup--modal-popup { + z-index: 3000; + } + .sps-root-modern { + height: initial; + } + + .sv-popup__body-footer .sv-action-bar { + width: 100%; + justify-content: flex-end; + } + + .sps-page { + padding: 0; + gap: var(--sjs2-spacing-x200, 16px); + background: initial; + } + .sps-row { + max-width: initial; + } + .sps-question--with-frame { + border: none; + border-radius: 0; + } + + .sps-question__header { + padding-left: 0; + padding-right: 0; + padding-top: 0; + } + + .sps-question__title { + color: var(--sjs2-color-fg-basic-secondary, rgba(28, 27, 32, 0.6)); + + @include sjs2--typography--default; + } + + .sps-question__content { + padding-left: 0; + padding-right: 0; + padding-bottom: 0; + } + + .sps-row--multiple > div { + align-items: stretch; + padding-left: var(--sjs2-spacing-x400, 32px); + padding-right: var(--sjs2-spacing-x400, 32px); + &:first-of-type { + padding-left: 0; + } + &:last-of-type { + padding-right: 0; + } + } + + .sps-panel { + border: none; + border-radius: 0; + align-self: stretch; + .sps-row { + border: none; + } + } + .sps-panel__content { + display: flex; + flex-direction: column; + gap: var(--sjs2-spacing-x200, 16px); + } +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-question.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-question.scss new file mode 100644 index 0000000000..d497258a45 --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-question.scss @@ -0,0 +1,53 @@ +@use "../../../variables.scss" as *; +@use "../fonts" as *; + +.sps-question { + background: var(--sjs2-color-bg-basic-primary, #fff); +} + +.sps-question--main { + min-height: 420px; +} + +.sps-question--with-frame { + border-radius: var(--sjs2-radius-x250, 20px); + border: var(--sjs2-border-width-x100, 1px) solid var(--sjs2-color-border-basic-secondary, #d4d4d4); +} + +.sps-question__header { + width: 100%; + display: flex; + padding: var(--sjs2-spacing-x250, 20px) var(--sjs2-spacing-x250, 20px) 0 var(--sjs2-spacing-x250, 20px); + align-items: flex-start; + align-self: stretch; +} + +.sps-question__title { + color: var(--sjs2-color-fg-basic-primary, #1c1b20); + + @include sjs2--typography--default-strong; +} + +.sps-question__content { + display: flex; + padding: var(--sjs2-spacing-x150, 12px) var(--sjs2-spacing-x250, 20px) var(--sjs2-spacing-x250, 20px) + var(--sjs2-spacing-x250, 20px); + flex-direction: column; + align-items: stretch; + align-self: stretch; +} + +.sps-question__description { + white-space: normal; + color: var(--sjs2-color-fg-basic-tertiary, rgba(28, 27, 32, 0.40)); +} + +.sps-question__description--under { + display: flex; + padding: var(--sjs2-spacing-x100, 8px); + flex-direction: column; + justify-content: flex-end; + align-items: flex-start; + flex: 1 0 0; + align-self: stretch; +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-table.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-table.scss new file mode 100644 index 0000000000..c58d01f76f --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/sps-table.scss @@ -0,0 +1,269 @@ +@use "../../../variables.scss" as *; +@use "./variables.scss" as *; +@use "../fonts" as *; + +.sps-table-wrapper { + overflow: hidden; +} + +.sps-table { + width: 100%; + background-color: var(--sjs2-color-bg-basic-primary, #fff); + border-collapse: collapse; + + & > tbody > tr { + background-color: var(--sjs2-color-bg-basic-primary, #fff); + & > td:last-of-type > .sps-action-bar .sps-action-button { + opacity: 0; + } + &:hover { + & > td > div { + background: var(--sjs2-color-bg-basic-primary-dim, rgba(28, 27, 32, 0.05)); + } + & > td:last-of-type > .sps-action-bar .sps-action-button { + opacity: 1; + } + } + } + + tbody > tr:last-of-type { + border-bottom: none; + td { + border-bottom: none; + padding-bottom: 0; + } + } + tbody > tr:first-of-type { + border-top: none; + td { + border-top: none; + padding-top: 0; + } + } +} + +.sd-table__row--expanded { + & > td { + & > div { + .sps-input { + @include sjs2--typography--default-strong; + } + } + } +} + +.sps-table__cell { + padding: 0; + padding-bottom: var(--sjs2-spacing-x075, 6px); + padding-top: 0; + border-top: none; + &:first-of-type > div { + border-top-left-radius: var(--sjs2-radius-semantic-form, 8px); + border-bottom-left-radius: var(--sjs2-radius-semantic-form, 8px); + } + &:last-of-type > div { + border-top-right-radius: var(--sjs2-radius-semantic-form, 8px); + border-bottom-right-radius: var(--sjs2-radius-semantic-form, 8px); + } + + .sps-action-bar{ + justify-content: flex-end; + } +} + +.sps-table__row--main > .sps-table__cell { + padding-bottom: calc(var(--sjs2-spacing-x075, 6px) + var(--sjs2-spacing-x050, 4px)); + padding-top: calc(var(--sjs2-spacing-x075, 6px) + var(--sjs2-spacing-x050, 4px)); + border-top: var(--sjs2-border-width-x100, 1px) solid var(--sjs2-color-border-basic-secondary, #d4d4d4); + &.sps-table__cell--detail-panel { + border-top: none; + padding: 0 0 var(--sjs2-spacing-x075, 6px) 0; + } +} + +.sps-table__cell--detail-panel { + + .sps-panel__content { + box-shadow: none; + } + + .sps-row .sps-question--nested { + overflow: initial; + } + + .sps-panel { + border: none; + margin-top: calc(-1 * var(--sjs2-spacing-x075, 6px)); + } + .sps-table__cell--detail-panel .sps-panel { + margin-top: 0; + margin-left: 32px; + } + + .sps-table__row--empty { + height: 40px; + } +} +.sps-table__cell:where(:not(.sps-table__cell--detail-panel)) { + .sps-checkbox { + margin: 0 calcSize(2); + } +} + +.sps-table__cell:not(.sps-table__cell--detail-panel):not(.sps-table__cell--actions):first-of-type { + padding-left: 8px; +} + +.sps-table__cell:not(.sps-table__cell--detail-panel) { + .sps-input { + appearance: none; + box-shadow: none; + background-color: transparent; + height: auto; + padding: var(--sjs2-spacing-x100, 8px) 0; + + width: calc(100% + var(--action-container-width)); + margin-right: calc(-1 * var(--action-container-width)); + text-overflow: ellipsis; + + border-radius: var(--sjs2-radius-semantic-form, 8px); + padding: var(--sjs2-spacing-x100, 8px); + margin-left: 0; + transition: margin-left $creator-transition-duration; + + &:hover { + background: var(--sjs2-color-control-formbox-hovered-bg, #f5f5f5); + box-shadow: var(--sjs2-border-offset-x-form-focused, 0) var(--sjs2-border-offset-y-form-focused, 0) + var(--sjs2-border-blur-form-focused, 0) var(--sjs2-border-spread-form-focused, 2px) + var(--sjs2-color-control-formbox-hovered-border, #d4d4d4) inset; + } + + &:focus, + &:focus-within { + background: var(--sjs2-color-control-formbox-focused-bg, #f5f5f5); + box-shadow: var(--sjs2-border-offset-x-form-focused, 0) var(--sjs2-border-offset-y-form-focused, 0) + var(--sjs2-border-blur-form-focused, 0) var(--sjs2-border-spread-form-focused, 2px) + var(--sjs2-color-control-formbox-focused-border, #19b394) inset; + margin-left: var(--sjs2-spacing-x100, 8px); + } + } +} + +.sps-matrixdynamic__dragged-row { + .sps-table__cell { + padding: 0; + } + .sps-input { + pointer-events: none; + } + .sps-drag-element__svg { + display: none; + } +} + +.sps-table__row { + --action-width: calc( + 2 * var(--ctr-actionbar-button-padding-top-large-icon, 8px) + + var(--ctr-actionbar-button-icon-width, var(--sjs-font-size-x3)) + ); + --action-container-width: calc(3 * var(--action-width)); +} + +.sps-table__row:has(> .sps-table__cell:last-of-type .sv-action:nth-child(4)) { + --action-container-width: calc(4 * var(--action-width)); +} + +.sps-table__row { + &:hover, + &:focus-within { + .sps-table__cell:not(.sps-table__cell--detail-panel) { + .sps-input { + width: calc(100% - var(--sjs2-spacing-x100, 8px)); + margin-right: 0; + } + } + } +} + +.sps-table__cell:not(.sps-table__cell--detail-panel):first-of-type .sps-text { + padding-left: calcSize(2); +} +.sps-table__cell--actions { + width: 0; +} + +// .sps-table__cell--actions > .sps-matrixdynamic__drag-element { +// display: inline-block; +// margin-top: calcSize(0.5); +// cursor: move; +// } + +.sps-table__row--leave, +.sps-table__row--enter { + animation-name: empty; + --move-whole-animation-duration: calc(var(--move-animation-duration) + var(--move-animation-delay)); + --fade-whole-animation-duration: calc(var(--fade-animation-duration) + var(--fade-animation-delay)); + animation-duration: max(var(--fade-whole-animation-duration), var(--move-whole-animation-duration)); + & > td { + & > div { + animation-name: fadeIn, moveInWithOverflow; + opacity: 0; + animation-direction: var(--animation-direction); + animation-timing-function: var(--animation-timing-function); + animation-fill-mode: forwards; + animation-duration: + var(--fade-animation-duration), var(--move-animation-duration), var(--move-animation-duration); + animation-delay: var(--fade-animation-delay), var(--move-animation-delay), var(--move-animation-delay); + } + } +} +.sps-table__row--enter { + --move-animation-delay: 0s; + --move-animation-duration: #{$sps-matrix-row-move-in-duration}; + --fade-animation-duration: #{$sps-matrix-row-fade-in-duration}; + --fade-animation-delay: #{$sps-matrix-row-fade-in-delay}; + --animation-direction: normal; + --animation-timing-function: #{$ease-out}; +} +.sps-table__row--leave { + --move-animation-delay: #{$sps-matrix-row-move-out-delay}; + --move-animation-duration: #{$sps-matrix-row-move-out-duration}; + --fade-animation-duration: #{$sps-matrix-row-fade-out-duration}; + --fade-animation-delay: 0s; + --animation-direction: reverse; + --animation-timing-function: #{$reverse-ease-out}; +} +.sps-table__row--detail { + &.sps-table__row--enter { + --move-animation-delay: 0s; + --move-animation-duration: #{$sps-matrix-detail-row-move-in-duration}; + --fade-animation-duration: #{$sps-matrix-detail-row-fade-in-duration}; + --fade-animation-delay: #{$sps-matrix-detail-row-fade-in-delay}; + --animation-direction: normal; + --animation-timing-function: #{$ease-out}; + } + &.sps-table__row--leave { + --move-animation-delay: #{$sps-matrix-detail-row-move-out-delay}; + --move-animation-duration: #{$sps-matrix-detail-row-move-out-duration}; + --fade-animation-duration: #{$sps-matrix-detail-row-fade-out-duration}; + --fade-animation-delay: 0s; + --animation-direction: reverse; + --animation-timing-function: #{$reverse-ease-out}; + } +} + +.svc-creator--disable-animations { + .sps-table__row--enter, + .sps-table__row--leave { + animation: none; + } +} + +.sps-table__row--empty { + @include sjs2--typography--default; + color: var(--sjs2-color-fg-basic-primary, #1c1b20); + text-align: center; + height: calc( + var(--sjs2-spacing-x400, 32px) + var(--sjs2-spacing-x300, 24px) + var(--sjs2-typography-line-height-default, 24px) + ); +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/blocks/variables.scss b/packages/survey-creator-core/src/presets/presets-theme/blocks/variables.scss new file mode 100644 index 0000000000..9316f04c27 --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/blocks/variables.scss @@ -0,0 +1,28 @@ +$sps-row-fade-in-duration: var(--sjs-sps-row-fade-in-duration, 500ms); +$sps-row-move-in-duration: var(--sjs-sps-move-in-duration, 150ms); +$sps-row-fade-in-delay: var(---sjs-sps-row-fade-in-delay, 150ms); +$sps-row-fade-out-duration: var(--sjs-sps-row-fade-out-duration, 150ms); +$sps-row-move-out-duration: var(--sjs-sps-row-move-out-duration, 250ms); +$sps-row-move-out-delay: var(--sjs-sps-row-move-out-delay, 100ms); +$sps-row-fade-in-animation-delay: var(--sjs-sps-row-fade-in-animation-delay, 400ms); + +$sps-expand-fade-in-duration: var(--sjs-sps-expand-fade-in-duration, 350ms); +$sps-expand-move-in-duration: var(--sjs-sps-expand-move-in-duration, 350ms); +$sps-expand-fade-in-delay: var(--sjs-sps-expand-fade-in-delay, 0ms); +$sps-collapse-fade-out-duration: var(--sjs-sps-collapse-fade-out-duration, 350ms); +$sps-collapse-move-out-duration: var(--sjs-sps-collapse-move-out-duration, 350ms); +$sps-collapse-move-out-delay: var(--sjs-sps-collapse-move-out-delay, 0ms); + +$sps-matrix-row-fade-in-duration: var(--sjs-sps-matrix-row-fade-in-duration, 250ms); +$sps-matrix-row-move-in-duration: var(--sjs-sps-matrix-row-move-in-duration, 150ms); +$sps-matrix-row-fade-in-delay: var(--sjs-sps-matrix-row-fade-in-delay, 150ms); +$sps-matrix-row-fade-out-duration: var(--sjs-sps-matrix-row-fade-out-duration, 100ms); +$sps-matrix-row-move-out-duration: var(--sjs-sps-matrix-row-move-out-duration, 250ms); +$sps-matrix-row-move-out-delay: var(--sjs-sps-matrix-row-move-out-delay, 100ms); + +$sps-matrix-detail-row-fade-in-duration: var(--sjs-sps-matrix-detail-row-fade-in-duration, 500ms); +$sps-matrix-detail-row-move-in-duration: var(--sjs-sps-matrix-detail-row-move-in-duration, 150ms); +$sps-matrix-detail-row-fade-in-delay: var(--sjs-sps-matrix-detail-row-fade-in-delay, 150ms); +$sps-matrix-detail-row-fade-out-duration: var(--sjs-sps-matrix-detail-row-fade-out-duration, 150ms); +$sps-matrix-detail-row-move-out-duration: var(--sjs-sps-matrix-detail-row-move-out-duration, 250ms); +$sps-matrix-detail-row-move-out-delay: var(--sjs-sps-matrix-detail-row-move-out-delay, 100ms); diff --git a/packages/survey-creator-core/src/presets/presets-theme/fonts.scss b/packages/survey-creator-core/src/presets/presets-theme/fonts.scss new file mode 100644 index 0000000000..71c850d6df --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/fonts.scss @@ -0,0 +1,32 @@ +@mixin sjs2--typography--medium-strong { + /* sjs2/typography/medium-strong */ + font-family: var(--sjs2-font-family-semantic-default, "Open Sans"); + font-size: var(--sjs2-font-size-semantic-medium, 24px); + font-style: normal; + font-weight: 600; + line-height: var(--sjs2-line-height-semantic-medium, 32px); /* 133.333% */ +} +@mixin sjs2--typography--default { + /* sjs2/typography/default */ + font-family: var(--sjs2-font-family-semantic-default, "Open Sans"); + font-size: var(--sjs2-font-size-semantic-default, 16px); + font-style: normal; + font-weight: 400; + line-height: var(--sjs2-line-height-semantic-default, 24px); /* 150% */ +} +@mixin sjs2--typography--default-strong { + /* sjs2/typography/default-strong */ + font-family: var(--sjs2-font-family-semantic-default, "Open Sans"); + font-size: var(--sjs2-font-size-semantic-default, 16px); + font-style: normal; + font-weight: 600; + line-height: var(--sjs2-line-height-semantic-default, 24px); /* 150% */ +} +@mixin sjs2--typography--small-strong { + /* sjs2/typography/small-strong */ + font-family: var(--sjs2-typography-font-family-default, "Open Sans"); + font-size: var(--sjs2-typography-font-size-small, 12px); + font-style: normal; + font-weight: 600; + line-height: var(--sjs2-typography-line-height-small, 16px); /* 133.333% */ +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/list-theme.ts b/packages/survey-creator-core/src/presets/presets-theme/list-theme.ts new file mode 100644 index 0000000000..8ff9a09dd5 --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/list-theme.ts @@ -0,0 +1,27 @@ +export var listComponentCss = { + root: "sps-list__container", + itemsContainer: "sps-list", + itemsContainerFiltering: "sps-list--filtering", + emptyContainer: "sps-list__empty-container", + emptyText: "sps-list__empty-text", + + filter: "sps-list__filter", + filterIcon: "sps-list__filter-icon", + filterInput: "sps-list__input", + searchClearButtonIcon: "sps-list__filter-clear-button", + + loadingIndicator: "sps-list__loading-indicator", + item: "sps-list__item", + itemSelected: "sps-list__item--selected", + itemGroup: "sps-list__item--group", + itemGroupSelected: "sps-list__item--group-selected", + itemWithIcon: "sps-list__item--with-icon", + itemDisabled: "sps-list__item--disabled", + itemFocused: "sps-list__item--focused", + itemHovered: "sps-list__item--hovered", + itemTextWrap: "sps-list__item-text--wrap", + itemIcon: "sps-list__item-icon", + itemMarkerIcon: "sps-list-item__marker-icon", + itemSeparator: "sps-list__item-separator", + itemBody: "sps-list__item-body", +}; diff --git a/packages/survey-creator-core/src/presets/presets-theme/presets.scss b/packages/survey-creator-core/src/presets/presets-theme/presets.scss new file mode 100644 index 0000000000..5fc8ac2309 --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/presets.scss @@ -0,0 +1,121 @@ +@use "../../variables" as *; +@use "./fonts" as *; +@use "blocks/sps-action-bar.scss"; +@use "blocks/sps-question.scss"; +@use "blocks/sps-input.scss"; +@use "blocks/sps-dropdown.scss"; +@use "blocks/sps-panel.scss"; +@use "blocks/sps-checkbox.scss"; +@use "blocks/sps-matrixdynamic.scss"; +@use "blocks/sps-table.scss"; +@use "blocks/sps-launch.scss"; +@use "blocks/sps-list.scss"; +@use "blocks/sps-popup.scss"; + +.sps-root-modern { + position: relative; + width: 100%; + box-sizing: border-box; + height: 0; + flex-grow: 1; + /* disable library transition animations */ + --sjs-transition-duration: 0ms; + background: white; + @include disableLibraryAnimations; + display: flex; + flex-direction: column; + @include sjs2--typography--default; + + :has(.sps-page):has(.sps-question--main) { + flex-grow: 1; + display: flex; + flex-direction: column; + &.sv-components-column--expandable { + min-width: 100%; + } + } +} + +.sps-container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} + +.sps-page { + display: flex; + padding: var(--sjs2-spacing-x400, 32px); + flex-direction: column; + align-items: stretch; + flex: 1 0 0; + align-self: stretch; + gap: var(--sjs2-spacing-x150, 12px); + background: var(--sjs2-color-utility-surface-muted, rgba(28, 27, 32, 0.05)); +} + +.sps-page__title { + color: var(--sjs2-color-fg-basic-primary, #1c1b20); + + @include sjs2--typography--medium-strong; +} + +.sps-page__description { + color: var(--sjs2-color-fg-basic-secondary, rgba(28, 27, 32, 0.6)); + + @include sjs2--typography--default; + + padding-bottom: calc(var(--sjs2-spacing-x400, 32px) - var(--sjs2-spacing-x150, 12px)); +} + +.sps-action-title-bar { + gap: var(--sjs2-spacing-x150, 12px); + .sv-action--hidden { + display: none; + } + + &.sps-action-title-bar { + margin-top: 0; + margin-bottom: 0; + margin-inline-end: 0; + } +} + +.sps-body { + width: 100%; + + .sv-components-container-contentBottom { + position: absolute; + bottom: 0; + right: 0; + } +} + +.sps-row { + max-width: 854px; + + sv-ng-question { + position: absolute; + } +} + +.sps-row--multiple { + display: flex; + align-items: stretch; + & > div { + display: flex; + flex-direction: column; + align-items: flex-start; + box-sizing: content-box; + gap: var(--sjs2-spacing-x075, 6px); + align-self: stretch; + border-right: var(--sjs2-border-width-static-x100, 1px) solid var(--sjs2-color-border-basic-secondary, #d4d4d4); + &:last-child { + border: none; + } + } +} + +.svc-tabbed-menu-item-container--presets { + display: none; +} diff --git a/packages/survey-creator-core/src/presets/presets-theme/presets.ts b/packages/survey-creator-core/src/presets/presets-theme/presets.ts new file mode 100644 index 0000000000..62499166c8 --- /dev/null +++ b/packages/survey-creator-core/src/presets/presets-theme/presets.ts @@ -0,0 +1,277 @@ +//import { listComponentCss } from "../components/list-theme"; + +export var presetsCss = { + root: "sps-root-modern", + container: "sps-container-modern", + header: "sps-title sps-container-modern__title", + body: "sps-body", + bodyEmpty: "sps-body sps-body--empty", + footer: "sps-footer sps-body__footer sps-clearfix", + title: "", + description: "", + logo: "sps-logo", + logoImage: "sps-logo__image", + headerText: "sps-header__text", + navigationButton: "", + bodyNavigationButton: "", + completedPage: "sps-completedpage", + navigation: { + complete: "sps-btn sps-btn--primary-brand sps-footer__complete-btn", + prev: "sps-btn sps-btn--secondary-brand sps-footer__prev-btn", + next: "sps-btn sps-btn--primary-brand sps-footer__next-btn", + start: "sps-btn sps-footer__start-btn", + preview: "sps-btn sps-footer__preview-btn", + edit: "sps-btn sps-footer__edit-btn" + }, + panel: { + withFrame: "", + nested: "", + expandableAnimating: "", + header: "sps-panel__header", + title: "sps-title sps-panel__title", + titleBar: "sd-action-title-bar sps-action-title-bar", + contentEnter: "sps-panel__content--enter", + contentLeave: "sps-panel__content--leave", + titleExpandable: "sps-panel__title--expandable", + titleExpanded: "sps-panel__title--expanded", + titleCollapsed: "sps-panel__title--collapsed", + titleOnError: "sps-panel__title--error", + description: "sps-description sps-panel__description", + container: "sps-panel sps-row__panel", + content: "sps-panel__content", + icon: "sps-panel__icon", + iconExpanded: "sps-panel__icon--expanded", + footer: "sps-panel__footer", + requiredMark: "sps-panel__required-text" + }, + paneldynamic: { + nested: "", + mainRoot: "sps-question sps-row__question", + root: "sps-paneldynamic", + navigation: "sps-paneldynamic__navigation", + title: "sps-title sps-question__title", + button: "sps-action-button sps-action-button--text", + buttonRemove: "sps-action-button--danger", + buttonAdd: "sps-paneldynamic__add-btn", + panelsContainer: "", + panelWrapper: "sps-paneldynamic__panel-wrapper", + panelWrapperList: "", + progressTop: "sps-paneldynamic__progress sps-paneldynamic__progress--top", + progressBottom: + "sps-paneldynamic__progress sps-paneldynamic__progress--bottom", + buttonPrev: "sps-paneldynamic__prev-btn", + buttonNext: "sps-paneldynamic__next-btn", + progressContainer: "sps-paneldynamic__progress-container", + progress: "sps-progress", + progressBar: "sps-progress__bar", + progressText: "sps-paneldynamic__progress-text", + panelFooter: "sps-panel__footer", + separator: "sps-paneldynamic__separator", + footer: "sps-paneldynamic__footer", + footerButtonsContainer: "sps-paneldynamic__buttons-container", + }, + progress: "sps-progress sps-body__progress", + progressBar: "sps-progress__bar", + progressText: "sps-progress__text", + progressTextInBar: "sps-hidden", + page: { + root: "sps-page sps-body__page", + title: "sps-title sps-page__title", + description: "sps-description sps-page__description" + }, + pageTitle: "sps-title sps-page__title", + pageDescription: "sps-description sps-page__description", + row: "sps-row sps-clearfix", + rowEnter: "sps-row--enter", + rowLeave: "sps-row--leave", + rowDelayedEnter: "sps-row--delayed-fade-in", + rowMultiple: "sps-row--multiple", + question: { + withFrame: "sps-question--with-frame", + nested: "sps-question--nested", + mainRoot: "sps-question sps-row__question", + flowRoot: "sps-question sps-row__question sps-row__question--flow", + asCell: "sps-table__cell", + header: "sps-question__header", + headerLeft: "sps-question__header--location--left", + headerTop: "sps-question__header--location--top", + headerBottom: "sps-question__header--location--bottom", + content: "sps-question__content", + contentLeft: "sps-question__content--left", + titleLeftRoot: "sps-question--location--left", + titleOnAnswer: "sps-question__title--answer", + titleOnError: "sps-question__title--error", + title: "sps-title sps-question__title", + titleBar: "sd-action-title-bar sps-action-title-bar", + requiredMark: "sps-question__required-text", + number: "sps-question__num", + description: "sps-description sps-question__description", + descriptionUnderInput: "sps-question__description--under", + comment: "sps-comment", + required: "sps-question--required", + titleRequired: "sps-question__title--required", + indent: 0, + footer: "sps-question__footer", + formGroup: "sps-question__form-group", + hasError: "", + readOnly: "sd-question--readonly sps-question--disabled", + confirmDialog: "sps-popup--confirm sv-popup--confirm svc-creator-popup", + errorsContainerBottom: "sps-question__erbox--below-question", + }, + checkbox: { + root: "sps-selectbase", + item: "sps-item sps-checkbox sps-selectbase__item", + itemSelectAll: "sps-checkbox--selectall", + itemNone: "sps-checkbox--none", + itemReadOnly: "sps-item--disabled sps-checkbox--disabled", + itemChecked: "sps-checkbox--checked", + itemHover: "sps-checkbox--allowhover", + itemInline: "sps-selectbase__item--inline", + label: "sps-selectbase__label", + // label: "sps-checkbox", + itemSvgIconId: "#icon-check-16x16", + labelChecked: "", + //itemControl: "sps-visuallyhidden sps-item__control", + itemControl: "sps-checkbox__control", + itemDecorator: "sps-checkbox__svg", + //itemDecorator: "sps-checkbox__hidden", + //controlLabel: "sps-item__control-label", + controlLabel: "sps-checkbox__caption", + materialDecorator: "sps-checkbox__rectangle", + //materialDecorator: "sps-item__decorator sps-checkbox__decorator", + other: "sps-comment sps-question__other", + column: "sps-selectbase__column" + }, + radiogroup: { + root: "sps-selectbase", + item: "sps-item sps-radio sps-selectbase__item", + itemInline: "sps-selectbase__item--inline", + label: "sps-selectbase__label", + labelChecked: "", + itemReadOnly: "sps-item--disabled sps-radio--disabled", + itemChecked: "sps-radio--checked", + itemHover: "sps-radio--allowhover", + itemControl: "sps-visuallyhidden sps-item__control", + itemDecorator: "sps-item__svg sps-radio__svg", + controlLabel: "sps-item__control-label", + materialDecorator: "sps-item__decorator sps-radio__decorator", + other: "sps-comment sps-question__other", + clearButton: "sps-btn sps-selectbase__clear-btn", + column: "sps-selectbase__column" + }, + boolean: { + mainRoot: "sps-question sps-row__question sps-question--boolean", + rootCheckbox: "sps-selectbase", + checkboxItem: "sps-checkbox", + checkboxItemChecked: "sps-checkbox--checked", + checkboxitemIndeterminate: "sps-checkbox--indeterminate", + checkboxItemReadOnly: "sps-checkbox--disabled", + svgIconId: "#icon-v2check", + checkboxLabel: "sps-selectbase__label", + controlCheckbox: "sps-checkbox__control", + checkboxControlLabel: "sps-checkbox__caption", + checkboxItemDecorator: "sps-checkbox__svg", + checkboxMaterialDecorator: "sps-checkbox__rectangle" + }, + text: { + root: "sps-input sps-text", + small: "sps-row__question--small", + content: "sps-question__content sps-text__content", + remainingCharacterCounter: "sps-remaining-character-counter", + onError: "sps-input--error" + }, + comment: { + root: "sps-input sps-comment", + content: "sps-question__content sps-comment__content", + remainingCharacterCounter: "sps-remaining-character-counter", + small: "sps-row__question--small", + onError: "sps-input--error" + }, + dropdown: { + root: "sps-selectbase", + popup: "sps-dropdown-popup svc-creator-popup", + small: "sps-row__question--small sd-row__question--small", + control: "sps-input sps-dropdown", + controlEmpty: "sps-dropdown--empty sd-dropdown--empty", + controlValue: "sps-dropdown__value", + filterStringInput: "sd-dropdown__filter-string-input sps-dropdown__filter-string-input", + other: "sps-comment sps-question__other", + onError: "sps-input--error", + selectWrapper: "sv-dropdown_select-wrapper sps-dropdown_select-wrapper", + chevronButtonIconId: "icon-chevron", + cleanButton: "sps-dropdown__clean-button sps-input__edit-button", + controlReadOnly: "sd-input--disabled sd-input--readonly" + }, + matrix: { + tableWrapper: "sps-matrix sps-table-wrapper", + root: "sps-table", + rowError: "sps-matrix__row--error", + cell: "sps-table__cell sps-matrix__cell", + headerCell: "sps-table__cell sps-table__cell--header", + label: "sps-item sps-radio sps-matrix__label", + itemValue: "sps-visuallyhidden sps-item__control sps-radio__control", + itemChecked: "sps-radio--checked", + itemReadOnly: "sps-item--disabled sps-radio--disabled", + itemHover: "sps-radio--allowhover", + materialDecorator: "sps-item__decorator sps-radio__decorator", + itemDecorator: "sps-item__svg sps-radio__svg", + cellText: "sps-matrix__text", + cellTextSelected: "sps-matrix__text--checked", + cellTextReadOnly: "sps-matrix__text--disabled", + }, + matrixdropdown: { + tableWrapper: "sps-table-wrapper", + root: "sps-table", + cell: "sps-table__cell", + headerCell: "sps-table__cell sps-table__cell--header", + emptyCell: "sps-table__cell--empty", + rowEnter: "sps-table__row--enter", + rowLeave: "sps-table__row--leave", + }, + matrixdynamic: { + mainRoot: "sps-question sps-question--matrixdynamic sd-element sd-question sd-row__question sd-element--complex sd-question--complex sd-question--table", + tableWrapper: "sps-table-wrapper", + root: "sps-table sps-matrixdynamic", + content: "sps-matrixdynamic__content sps-text__content", + cell: "sps-table__cell", + row: "sps-table__row", + rowDisabled: "sps-table__row-disabled", + rowReadOnly: "sps-table__row-readonly", + headerCell: "sps-table__cell sps-table__cell--header", + button: "sps-btn", + detailRow: "sps-table__row sps-table__row--detail", + detailButton: "sps-table__cell--detail-button sps-action-button", + detailButtonExpanded: "sps-table__cell--detail-button--expanded", + detailIcon: "sps-detail-panel__icon sps-action-button__icon", + detailIconExpanded: "sps-detail-panel__icon--expanded", + detailPanelCell: "sps-table__cell sps-table__cell--detail-panel", + actionsCell: "sps-table__cell sps-table__cell--actions", + buttonAdd: "sps-matrixdynamic__add-btn sps-action-button sps-action-button--large", + buttonRemove: "sps-matrixdynamic__remove-btn", + iconAdd: "", + iconRemove: "xxx", + dragElementDecorator: "sps-drag-element__svg", + iconDragElement: "#icon-drag-24x24", + iconDrag: "sps-matrixdynamic__drag-element", + footer: "sps-matrixdynamic__footer", + dragDropGhostPositionTop: "sps-matrixdynamic__drag-drop-ghost-position-top", + dragDropGhostPositionBottom: "sps-matrixdynamic__drag-drop-ghost-position-bottom", + noRowsSection: "sps-matrixdynamic__placeholder", + noRowsText: "sps-matrixdynamic__placeholder-text", + cellQuestionWrapper: "sps-table__question-wrapper", + draggedRow: "sps-matrixdynamic__dragged-row", + emptyCell: "sps-table__cell--empty", + rowEmpty: "sps-table__row--empty", + rowEnter: "sps-table__row--enter", + rowLeave: "sps-table__row--leave", + }, + + actionBar: { + root: "sps-action-bar", + item: "sps-action-button", + itemPressed: "sps-action-button--pressed", + itemAsIcon: "sps-action-button--icon", + itemIcon: "sps-action-button__icon", + itemTitle: "sps-action-button__title", + } +}; diff --git a/packages/survey-creator-core/src/toolbox.ts b/packages/survey-creator-core/src/toolbox.ts index 83659dd8f8..7c50e5a3dc 100644 --- a/packages/survey-creator-core/src/toolbox.ts +++ b/packages/survey-creator-core/src/toolbox.ts @@ -1224,12 +1224,12 @@ export class QuestionToolbox } return null; } - protected onItemsChanged(changeActions: boolean = true) { - var categories = new Array(); - var categoriesHash = {}; - var prevActiveCategory = this.activeCategory; - for (let i = 0; i < this.actions.length; i++) { - const item = this.actions[i]; + + private createCategoriesFromItems(items: Array) { + const categories = new Array(); + const categoriesHash = {}; + for (let i = 0; i < items.length; i++) { + const item = items[i]; item.innerItem.action = () => { this.creator.clickToolboxItem((item).json); }; @@ -1239,16 +1239,24 @@ export class QuestionToolbox const category = this.createCategory(); category.name = categoryName; category.title = this.getCategoryTitle(categoryName); - category.collapsed = categoryName !== prevActiveCategory && !this.keepAllCategoriesExpanded; categoriesHash[categoryName] = category; categories.push(category); } categoriesHash[categoryName].items.push(item); } + return categories; + } + protected onItemsChanged(changeActions: boolean = true) { + const categories = this.createCategoriesFromItems(this.actions); this.categories = categories; + let prevActiveCategory; + this.categories.forEach((category) => { + category.collapsed = category.name !== this.activeCategory && !this.keepAllCategoriesExpanded; + if (category.name === this.activeCategory) prevActiveCategory = category.name; + }); if (!this.keepAllCategoriesExpanded) { if (!this.allowExpandMultipleCategories) { - if (prevActiveCategory && categoriesHash[prevActiveCategory]) { + if (prevActiveCategory) { this.activeCategory = prevActiveCategory; } else { this.activeCategory = categories.length > 0 ? categories[0].name : ""; @@ -1327,6 +1335,12 @@ export class QuestionToolbox } return res; } + public getDefaultCategories(): Array { + const items = this.getDefaultItems(this.supportedQuestions, true, true, true); + const categories = this.createCategoriesFromItems(items); + return categories; + } + private actionsHash: { [index: string]: QuestionToolboxItem }; protected patchAction(action: QuestionToolboxItem) { super.patchAction(action); diff --git a/packages/survey-creator-core/src/utils/actions.ts b/packages/survey-creator-core/src/utils/actions.ts index ff8b73f0ad..126c95f438 100644 --- a/packages/survey-creator-core/src/utils/actions.ts +++ b/packages/survey-creator-core/src/utils/actions.ts @@ -72,6 +72,7 @@ export class MenuButton extends Action { return new CssClassBuilder() .append("svc-menu-action__button") .append("svc-menu-action__button--with-subtitle", this.contentType === "text-description-vertical") + .append("svc-menu-action__button--disabled", this.disabled) .append("svc-menu-action__button--pressed", this.pressed) .append("svc-menu-action__button--selected", !!this.active) .toString(); diff --git a/packages/survey-creator-core/tests-presets/presets-editable-base.test.ts b/packages/survey-creator-core/tests-presets/presets-editable-base.test.ts index a7a3f0f7df..aa022722b1 100644 --- a/packages/survey-creator-core/tests-presets/presets-editable-base.test.ts +++ b/packages/survey-creator-core/tests-presets/presets-editable-base.test.ts @@ -44,7 +44,7 @@ describe("CreatorPresetEditableBase", () => { // Create mock matrix mockMatrix = new QuestionMatrixDynamicModel("matrix"); mockMatrix.fromJSON({ - detailElements: [{ type: "text", name: "question1", isRequired: true }] + detailElements: [{ type: "text", name: "question1", isRequired: true, visible: false }] }); mockMatrix.value = [{ question1: "initial value" }]; mockRow = mockMatrix.visibleRows[0] as any; @@ -65,25 +65,35 @@ describe("CreatorPresetEditableBase", () => { describe("showDetailPanelInPopup", () => { it("should hide detail panel and create popup with survey", () => { + mockShowDialog.mockImplementation((options) => { + return { dispose: jest.fn() }; + }); + // Act - base["showDetailPanelInPopup"](mockMatrix, mockRow, mockRootElement); + base["showDetailPanelInPopup"](mockMatrix, mockRow, mockRootElement, {}); // Assert expect(mockRow.isDetailPanelShowing).toBeFalsy(); expect(mockShowDialog).toHaveBeenCalledWith( expect.objectContaining({ componentName: "survey", - cssClass: "svc-property-editor svc-creator-popup", - title: "Detail", - displayMode: "popup" + cssClass: "sps-popup svc-property-editor svc-creator-popup", + title: "edit", + displayMode: "popup", + data: expect.any(Object), + onApply: expect.any(Function), + onCancel: expect.any(Function) }), mockRootElement ); }); it("should create survey with correct configuration", () => { + mockShowDialog.mockImplementation((options) => { + return { dispose: jest.fn() }; + }); // Act - base["showDetailPanelInPopup"](mockMatrix, mockRow, mockRootElement); + base["showDetailPanelInPopup"](mockMatrix, mockRow, mockRootElement, {}); // Assert const dialogOptions = mockShowDialog.mock.calls[0][0]; @@ -106,7 +116,7 @@ describe("CreatorPresetEditableBase", () => { }); // Act - base["showDetailPanelInPopup"](mockMatrix, mockRow, mockRootElement); + base["showDetailPanelInPopup"](mockMatrix, mockRow, mockRootElement, {}); const survey = mockShowDialog.mock.calls[0][0].data.survey; survey.data = newValue; @@ -126,13 +136,12 @@ describe("CreatorPresetEditableBase", () => { }); // Act - base["showDetailPanelInPopup"](mockMatrix, mockRow, mockRootElement); + base["showDetailPanelInPopup"](mockMatrix, mockRow, mockRootElement, {}); const survey = mockShowDialog.mock.calls[0][0].data.survey; survey.data = { question1: "" }; // Empty value will fail validation // Assert expect(onApplyCallback).toBeDefined(); - expect(onApplyCallback!()).toBeFalsy(); expect(mockMatrix.value[0]).toEqual({ question1: "initial value" }); }); @@ -146,7 +155,7 @@ describe("CreatorPresetEditableBase", () => { }); // Act - base["showDetailPanelInPopup"](mockMatrix, mockRow, mockRootElement); + base["showDetailPanelInPopup"](mockMatrix, mockRow, mockRootElement, {}); // Assert expect(onCancelCallback).toBeDefined(); diff --git a/packages/survey-creator-core/tests-presets/presets-editor-item-menu.tests.ts b/packages/survey-creator-core/tests-presets/presets-editor-item-menu.tests.ts new file mode 100644 index 0000000000..6c937ad41e --- /dev/null +++ b/packages/survey-creator-core/tests-presets/presets-editor-item-menu.tests.ts @@ -0,0 +1,376 @@ +import { PopupDropdownViewModel, Question } from "survey-core"; +import { CreatorPresetEditorModel } from "../src/presets/presets-editor"; + +class CreatorPresetEditorModelTester extends CreatorPresetEditorModel { + private getQuestionRowContextActions(question: Question, item_name: string) { + const renderedRow = question.renderedTable.rows.filter(r => r.row?.value.name == item_name)[0]; + if (!renderedRow) return null; + const actions = renderedRow.cells[renderedRow.cells.length - 1].item.value.actions; + const contextAction = actions.filter(a => a.id == "context-menu")[0]; + const popupViewModel = new PopupDropdownViewModel(contextAction.popupModel); // need for popupModel.onShow + contextAction.popupModel.show(); + const list = contextAction.popupModel.contentComponentData.model; + return list.actions.filter(a => a.enabled !== false); + } + + public getRowContextActions(question_name: string, item_name: string) { + const q = this.model.getQuestionByName(question_name); + return this.getQuestionRowContextActions(q, item_name); + } + + public getCategoryRowContextActions(question_name: string, category_name: string, item_name: string) { + const q = this.model.getQuestionByName(question_name); + const row = q.visibleRows.filter(r => r.value.category == category_name)[0]; + row.showDetailPanel(); + const inner = row.detailPanel.getQuestionByName("items"); + return this.getQuestionRowContextActions(inner, item_name); + } + + public getValue(question_name: string) { + const q = this.model.getQuestionByName(question_name); + return q.value; + } + public setValue(question_name: string, value: any) { + const q = this.model.getQuestionByName(question_name); + q.value = value; + } +} + +const json = { + "toolbox": { + "definition": [ + { + "name": "text" + }, + { + "name": "comment" + }, + { + "name": "multipletext" + }, + { + "name": "panel" + }, + { + "name": "paneldynamic" + }, + { + "name": "ranking" + }, + { + "name": "test" + } + ], + "categories": [ + { + "category": "text", + "title": "Text Input Questions", + "items": [ + "text", + "comment", + "multipletext" + ] + }, + { + "category": "containers", + "title": "Containers", + "items": [ + "panel", + "paneldynamic" + ] + } + ] + } +}; +test("Preset edit, context menu - defaut toolbox matrices", () => { + const editor = new CreatorPresetEditorModelTester(json); + + const value = editor.getValue("toolbox_matrix"); + expect(value.filter(v => v.name === "ranking")).toHaveLength(1); + expect(value.filter(v => v.name === "text")).toHaveLength(0); + expect(value).toHaveLength(17); + + const cats = editor.getValue("toolbox_categories"); + expect(cats).toHaveLength(2); +}); + +test("Preset edit, context menu - check actions", () => { + const editor = new CreatorPresetEditorModelTester(json); + + const actions = editor.getRowContextActions("toolbox_matrix", "ranking"); + expect(actions.map(a => a.id)).toEqual([ + "to-text", + "to-containers", + "move-to-new-category", + "move-as-subitem", + ]); + const subitemsAction = actions[3]; + expect(subitemsAction.items.map(a => a.id)).toEqual(["tosubitemcategory-text", "tosubitemcategory-containers"]); + const subitemsCatAction = subitemsAction.items[0]; + expect(subitemsCatAction.items.map(a => a.id)).toEqual(["tosubitem-text", "tosubitem-comment", "tosubitem-multipletext"]); +}); + +test("Preset edit, context menu - check move to category", () => { + const editor = new CreatorPresetEditorModelTester(json); + const actions = editor.getRowContextActions("toolbox_matrix", "ranking"); + actions.filter(a => a.id == "to-containers")[0].action(); + const value = editor.getValue("toolbox_matrix"); + + const cats = editor.getValue("toolbox_categories"); + expect(cats).toHaveLength(2); + expect(cats.filter(c => c.category == "containers")[0].items.map(i => i.name)).toEqual(["panel", "paneldynamic", "ranking"]); + expect(value.filter(v => v.name === "ranking")).toHaveLength(0); +}); + +test("Preset edit, context menu - check move to new category", () => { + const editor = new CreatorPresetEditorModelTester(json); + const actions = editor.getRowContextActions("toolbox_matrix", "ranking"); + actions.filter(a => a.id == "move-to-new-category")[0].action(); + const value = editor.getValue("toolbox_matrix"); + + const cats = editor.getValue("toolbox_categories"); + expect(cats).toHaveLength(3); + expect(cats.filter(c => c.category == "category1")[0].items.map(i => i.name)).toEqual(["ranking"]); + expect(value.filter(v => v.name === "ranking")).toHaveLength(0); +}); + +test("Preset edit, context menu - check move to subitems", () => { + const editor = new CreatorPresetEditorModelTester(json); + const actions = editor.getRowContextActions("toolbox_matrix", "ranking"); + const subitemsAction = actions[3]; + const subitemsCatAction = subitemsAction.items[0]; + expect(subitemsCatAction.items[1].id).toBe("tosubitem-comment"); + subitemsCatAction.items[1].action(); + const value = editor.getValue("toolbox_matrix"); + + const cats = editor.getValue("toolbox_categories"); + expect(cats).toHaveLength(2); + expect(cats.filter(c => c.category == "text")[0].items.filter(i => i.name == "comment")[0].subitems.map(i => i.name)).toEqual(["ranking"]); + expect(value.filter(v => v.name === "ranking")).toHaveLength(0); +}); + +test("Preset edit, check categories context menu - check actions", () => { + const editor = new CreatorPresetEditorModelTester(json); + + const actions = editor.getCategoryRowContextActions("toolbox_categories", "text", "comment"); + expect(actions.map(a => a.id)).toEqual([ + "remove-from", + "move-to-categories", + "move-to-new-category", + "convert-to-subcategory", + "move-as-subitem", + ]); + const catAction = actions[1]; + expect(catAction.items.map(a => a.id)).toEqual(["to-containers"]); + const subitemsAction = actions[4]; + expect(subitemsAction.items.map(a => a.id)).toEqual(["tosubitemcategory-text", "tosubitemcategory-containers"]); + const subitemsCatAction = subitemsAction.items[0]; + expect(subitemsCatAction.items.map(a => a.id)).toEqual(["tosubitem-text", "tosubitem-multipletext"]); +}); + +test("Preset edit, categories context menu - remove", () => { + const editor = new CreatorPresetEditorModelTester(json); + const actions = editor.getCategoryRowContextActions("toolbox_categories", "text", "comment"); + const cats = editor.getValue("toolbox_categories"); + const unsorted = editor.getValue("toolbox_matrix"); + expect(cats[0].items).toHaveLength(3); + expect(cats[0].items.filter(i => i.name == "comment")).toHaveLength(1); + expect(unsorted).toHaveLength(17); + actions.filter(a => a.id == "remove-from")[0].action(); + + const cats2 = editor.getValue("toolbox_categories"); + const unsorted2 = editor.getValue("toolbox_matrix"); + expect(cats2[0].items).toHaveLength(2); + expect(cats2[0].items.filter(i => i.name == "comment")).toHaveLength(0); + expect(unsorted2).toHaveLength(18); + expect(unsorted.filter(i => i.name == "comment")).toHaveLength(1); +}); + +test("Preset edit, categories context menu - check move to category", () => { + const editor = new CreatorPresetEditorModelTester(json); + const actions = editor.getCategoryRowContextActions("toolbox_categories", "text", "comment"); + const cats = editor.getValue("toolbox_categories"); + const unsorted = editor.getValue("toolbox_matrix"); + expect(cats[0].items).toHaveLength(3); + expect(cats[0].items.filter(i => i.name == "comment")).toHaveLength(1); + expect(cats[1].items).toHaveLength(2); + expect(cats[1].items.filter(i => i.name == "comment")).toHaveLength(0); + expect(unsorted).toHaveLength(17); + actions.filter(a => a.id == "move-to-categories")[0].items.filter(a => a.id == "to-containers")[0].action(); + + const cats2 = editor.getValue("toolbox_categories"); + const unsorted2 = editor.getValue("toolbox_matrix"); + expect(cats2[0].category).toBe("text"); + expect(cats2[0].items).toHaveLength(2); + expect(cats2[0].items.filter(i => i.name == "comment")).toHaveLength(0); + expect(cats2[1].category).toBe("containers"); + expect(cats2[1].items).toHaveLength(3); + expect(cats2[1].items.filter(i => i.name == "comment")).toHaveLength(1); + expect(unsorted2).toHaveLength(17); + expect(unsorted.filter(i => i.name == "comment")).toHaveLength(0); +}); + +test("Preset edit, context menu - check move to new category", () => { + const editor = new CreatorPresetEditorModelTester(json); + const actions = editor.getCategoryRowContextActions("toolbox_categories", "text", "comment"); + const cats = editor.getValue("toolbox_categories"); + const unsorted = editor.getValue("toolbox_matrix"); + expect(cats).toHaveLength(2); + expect(cats[0].items).toHaveLength(3); + expect(cats[0].items.filter(i => i.name == "comment")).toHaveLength(1); + expect(unsorted).toHaveLength(17); + actions.filter(a => a.id == "move-to-new-category")[0].action(); + + const cats2 = editor.getValue("toolbox_categories"); + const unsorted2 = editor.getValue("toolbox_matrix"); + expect(cats2[0].category).toBe("text"); + expect(cats2[0].items).toHaveLength(2); + expect(cats2[0].items.filter(i => i.name == "comment")).toHaveLength(0); + expect(cats2[2].category).toBe("category1"); + expect(cats2[2].items).toHaveLength(1); + expect(cats2[2].items.filter(i => i.name == "comment")).toHaveLength(1); + expect(unsorted2).toHaveLength(17); + expect(unsorted.filter(i => i.name == "comment")).toHaveLength(0); +}); + +test("Preset edit, context menu - convert to subcategory", () => { + const editor = new CreatorPresetEditorModelTester(json); + const actions = editor.getCategoryRowContextActions("toolbox_categories", "text", "comment"); + const cats = editor.getValue("toolbox_categories"); + expect(cats[0].items.filter(i => i.name == "comment")[0].subitems).toBeUndefined(); + actions.filter(a => a.id == "convert-to-subcategory")[0].action(); + + const cats2 = editor.getValue("toolbox_categories"); + expect(cats2[0].items.filter(i => i.name == "comment")[0].subitems).toEqual([]); +}); + +test("Preset edit (no categories), context menu - defaut toolbox matrices", () => { + const editor = new CreatorPresetEditorModelTester(json); + editor.setValue("toolbox_mode", "items"); + + const value = editor.getValue("toolbox_matrix"); + expect(value.filter(v => v.name === "ranking")).toHaveLength(1); + expect(value.filter(v => v.name === "text")).toHaveLength(0); + expect(value).toHaveLength(17); + + const cats = editor.getValue("toolbox_items"); + expect(cats).toHaveLength(5); +}); + +test("Preset edit (no categories), context menu - check actions", () => { + const editor = new CreatorPresetEditorModelTester(json); + editor.setValue("toolbox_mode", "items"); + + const actions = editor.getRowContextActions("toolbox_matrix", "ranking"); + expect(actions.map(a => a.id)).toEqual([ + "restore-item", + "move-as-subitem", + ]); + const subitemsAction = actions[1]; + expect(subitemsAction.items.map(a => a.id)).toEqual(["tosubitem-text", "tosubitem-comment", "tosubitem-multipletext", + "tosubitem-panel", "tosubitem-paneldynamic"]); +}); + +test("Preset edit (no categories), context menu - check move to index", () => { + const editor = new CreatorPresetEditorModelTester(json); + editor.setValue("toolbox_mode", "items"); + + const items0 = editor.getValue("toolbox_items"); + expect(items0).toHaveLength(5); + expect(items0.filter(v => v.name === "ranking")).toHaveLength(0); + + const actions = editor.getRowContextActions("toolbox_matrix", "ranking"); + actions.filter(a => a.id == "restore-item")[0].action(); + const value = editor.getValue("toolbox_matrix"); + + const items = editor.getValue("toolbox_items"); + expect(items).toHaveLength(6); + expect(items.filter(v => v.name === "ranking")).toHaveLength(1); + expect(value.filter(v => v.name === "ranking")).toHaveLength(0); +}); + +test("Preset edit (no categories), context menu - check move to subitems", () => { + const editor = new CreatorPresetEditorModelTester(json); + editor.setValue("toolbox_mode", "items"); + const actions = editor.getRowContextActions("toolbox_matrix", "ranking"); + const subitemsAction = actions[1]; + expect(subitemsAction.items[1].id).toBe("tosubitem-comment"); + subitemsAction.items[1].action(); + const value = editor.getValue("toolbox_matrix"); + + const items = editor.getValue("toolbox_items"); + expect(items).toHaveLength(5); + expect(items.filter(i => i.name == "comment")[0].subitems.map(i => i.name)).toEqual(["ranking"]); + expect(value.filter(v => v.name === "ranking")).toHaveLength(0); +}); + +test("Preset edit (no categories), check categories context menu - check actions", () => { + const editor = new CreatorPresetEditorModelTester(json); + editor.setValue("toolbox_mode", "items"); + + const actions = editor.getRowContextActions("toolbox_items", "comment"); + expect(actions.map(a => a.id)).toEqual([ + "remove-from", + "convert-to-subcategory", + "move-as-subitem", + ]); + const subitemsAction = actions[2]; + expect(subitemsAction.items.map(a => a.id)).toEqual(["tosubitem-text", "tosubitem-multipletext", + "tosubitem-panel", "tosubitem-paneldynamic"]); +}); + +test("Preset edit (no categories), categories context menu - remove", () => { + const editor = new CreatorPresetEditorModelTester(json); + editor.setValue("toolbox_mode", "items"); + const actions = editor.getCategoryRowContextActions("toolbox_categories", "text", "comment"); + const items = editor.getValue("toolbox_items"); + const unsorted = editor.getValue("toolbox_matrix"); + expect(items).toHaveLength(5); + expect(items.filter(i => i.name == "comment")).toHaveLength(1); + expect(unsorted).toHaveLength(17); + actions.filter(a => a.id == "remove-from")[0].action(); + + const items2 = editor.getValue("toolbox_categories"); + const unsorted2 = editor.getValue("toolbox_matrix"); + expect(items2).toHaveLength(2); + expect(items2.filter(i => i.name == "comment")).toHaveLength(0); + expect(unsorted2).toHaveLength(18); + expect(unsorted.filter(i => i.name == "comment")).toHaveLength(1); +}); + +test("Preset edit (no categories), categories context menu - check move to subitems", () => { + const editor = new CreatorPresetEditorModelTester(json); + editor.setValue("toolbox_mode", "items"); + const actions = editor.getRowContextActions("toolbox_items", "multipletext"); + const subitemsAction = actions[2]; + expect(subitemsAction.items[1].id).toBe("tosubitem-comment"); + subitemsAction.items[1].action(); + const value = editor.getValue("toolbox_matrix"); + + const items = editor.getValue("toolbox_items"); + expect(items).toHaveLength(4); + expect(items.filter(i => i.name == "comment")[0].subitems.map(i => i.name)).toEqual(["multipletext"]); +}); + +test("Preset edit (no categories), context menu - convert to subcategory", () => { + const editor = new CreatorPresetEditorModelTester(json); + editor.setValue("toolbox_mode", "items"); + const actions = editor.getRowContextActions("toolbox_items", "comment"); + const items = editor.getValue("toolbox_items"); + expect(items.filter(i => i.name == "comment")[0].subitems).toBeUndefined(); + actions.filter(a => a.id == "convert-to-subcategory")[0].action(); + + const items2 = editor.getValue("toolbox_items"); + expect(items2.filter(i => i.name == "comment")[0].subitems).toEqual([]); +}); + +test("Expand subitenms on convert to subcategory", () => { + const editor = new CreatorPresetEditorModelTester(json); + editor.setValue("toolbox_mode", "items"); + const actions = editor.getRowContextActions("toolbox_items", "comment"); + const itemsQuestion = editor.model.getQuestionByName("toolbox_items"); + const row = itemsQuestion.visibleRows.filter(r => r.value["name"] == "comment")[0]; + expect(row.isDetailPanelShowing).toBeFalsy(); + actions.filter(a => a.id == "convert-to-subcategory")[0].action(); + expect(row.isDetailPanelShowing).toBeTruthy(); +}); \ No newline at end of file diff --git a/packages/survey-creator-core/tests-presets/presets-editor-toolbox.tests.ts b/packages/survey-creator-core/tests-presets/presets-editor-toolbox.tests.ts index 095a2e3a91..2bd88d11a8 100644 --- a/packages/survey-creator-core/tests-presets/presets-editor-toolbox.tests.ts +++ b/packages/survey-creator-core/tests-presets/presets-editor-toolbox.tests.ts @@ -1,4 +1,4 @@ -import { ItemValue, QuestionBooleanModel, QuestionCheckboxBase, QuestionCheckboxModel, QuestionDropdownModel, QuestionMatrixDynamicModel, QuestionRankingModel, Serializer, surveyLocalization, settings, MatrixDynamicRowModel } from "survey-core"; +import { ItemValue, QuestionBooleanModel, QuestionCheckboxBase, QuestionCheckboxModel, QuestionDropdownModel, QuestionMatrixDynamicModel, QuestionRankingModel, Serializer, surveyLocalization, settings, MatrixDynamicRowModel, ComponentCollection } from "survey-core"; import { CreatorPresetEditorModel } from "../src/presets/presets-editor"; import { ICreatorPresetData } from "../src/presets-creator/presets"; import { SurveyModel, Question } from "survey-core"; @@ -13,7 +13,6 @@ import { CreatorPresetEditableCaregorizedListConfigurator } from "../src/presets test("Preset edit, toolbox - remove item from categories", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; const categQuestion = survey.getQuestionByName("toolbox_categories"); const matrixQuestion = survey.getQuestionByName("toolbox_matrix"); @@ -27,21 +26,18 @@ test("Preset edit, toolbox - remove item from categories", () => { expect(itemsQuestion.visibleRows.map(r => r.getValue("name"))).toStrictEqual(["text", "multipletext"]); expect(matrixQuestion.visibleRows).toHaveLength(1); expect(matrixQuestion.visibleRows.map(r => r.getValue("name"))).toStrictEqual(["comment"]); - expect(editor.applyFromSurveyModel()).toBeTruthy(); expect(editor.json.toolbox).toBeDefined(); const length = editor.json.toolbox.definition.length; expect(editor.json.toolbox.definition.map(i => i.name)).toContain("text"); expect(editor.json.toolbox.definition.map(i => i.name)).not.toContain("comment"); expect(editor.json.toolbox.categories[1].items).toStrictEqual(["text", "multipletext"]); itemsQuestion.removeRow(0); - editor.applyFromSurveyModel(); expect(editor.json.toolbox.categories[1].items).toStrictEqual(["multipletext"]); expect(editor.json.toolbox.definition.length).toBe(length - 1); }); test("Preset edit, toolbox - remove whole category from categories", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; const categQuestion = survey.getQuestionByName("toolbox_categories"); const matrixQuestion = survey.getQuestionByName("toolbox_matrix"); @@ -50,14 +46,32 @@ test("Preset edit, toolbox - remove whole category from categories", () => { const row = categQuestion.visibleRows[1]; categQuestion.removeRow(1); expect(matrixQuestion.visibleRows.map(r => r.getValue("name"))).toStrictEqual(["text", "comment", "multipletext"]); - expect(editor.applyFromSurveyModel()).toBeTruthy(); expect(editor.json.toolbox).toBeDefined(); expect(editor.json.toolbox.categories.length).toBe(4); }); +test("Preset edit, toolbox - remove empty category from categories, when there is some items in matrix", () => { + const editor = new CreatorPresetEditorModel(); + const survey = editor.model; + const categQuestion = survey.getQuestionByName("toolbox_categories"); + const matrixQuestion = survey.getQuestionByName("toolbox_matrix"); + expect(matrixQuestion.visibleRows).toHaveLength(0); + expect(categQuestion.visibleRows).toHaveLength(5); + matrixQuestion.addRow(); + categQuestion.addRow(); + categQuestion.removeRow(categQuestion.visibleRows.length - 1); +}); + +test("Preset edit, toolbox - no categories", () => { + const editor = new CreatorPresetEditorModel(); + const survey = editor.model; + survey.getQuestionByName("toolbox_mode").value = "items"; + expect(editor.json.toolbox).toBeDefined(); + expect(editor.json.toolbox.categories.length).toBe(0); +}); + test("Preset edit, toolbox - remove item from flat items", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; survey.getQuestionByName("toolbox_mode").value = "items"; const itemsQuestion = survey.getQuestionByName("toolbox_items"); @@ -71,7 +85,6 @@ test("Preset edit, toolbox - remove item from flat items", () => { test("Preset edit, toolbox - remove item from hidden items to flat items", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; survey.getQuestionByName("toolbox_mode").value = "items"; const itemsQuestion = survey.getQuestionByName("toolbox_items"); @@ -84,9 +97,24 @@ test("Preset edit, toolbox - remove item from hidden items to flat items", () => expect(itemsQuestion.value.filter(i => i.name == "name1")[0].title).toBe("Name1"); }); -test("Preset edit, toolbox - remove item from hidden items to general category", () => { +test("Preset edit, toolbox - remove new item from hidden items to its default category", () => { + const editor = new CreatorPresetEditorModel(); + const survey = editor.model; + survey.getQuestionByName("toolbox_mode").value = "categories"; + const categQuestion = survey.getQuestionByName("toolbox_categories"); + categQuestion.visibleRows[1].showDetailPanel(); + let items = categQuestion.visibleRows[1].detailPanel.getQuestionByName("items"); + expect(items.value.map(i => i.name)).toEqual(["text", "comment", "multipletext"]); + items.removeRow(2); + expect(items.value.map(i => i.name)).toEqual(["text", "comment"]); + + const matrixQuestion = survey.getQuestionByName("toolbox_matrix"); + matrixQuestion.removeRow(0); + expect(categQuestion.value[1].items.map(i => i.name)).toEqual(["text", "comment", "multipletext"]); +}); + +test("Preset edit, toolbox - remove new item from hidden items to general category", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; survey.getQuestionByName("toolbox_mode").value = "categories"; const categQuestion = survey.getQuestionByName("toolbox_categories"); @@ -101,7 +129,6 @@ test("Preset edit, toolbox - remove item from hidden items to general category", test("Preset edit, toolbox - change item", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; const categQuestion = survey.getQuestionByName("toolbox_categories"); const row = categQuestion.visibleRows[1]; @@ -109,16 +136,34 @@ test("Preset edit, toolbox - change item", () => { const itemsQuestion = row.getQuestionByName("items"); itemsQuestion.visibleRows[1].showDetailPanel(); itemsQuestion.visibleRows[1].detailPanel.getQuestionByName("iconName").value = "icon-test"; - editor.applyFromSurveyModel(); expect(editor.json.toolbox.definition.filter(i => i.name == "comment")[0].iconName).toEqual("icon-test"); expect(editor.json.toolbox.definition.filter(i => i.name == "text")[0].iconName).toBeUndefined(); expect(editor.json.toolbox.definition.filter(i => i.name == "text")[0].tooltip).toBeUndefined(); itemsQuestion.visibleRows[0].showDetailPanel(); itemsQuestion.visibleRows[0].getQuestionByName("tooltip").value = "tooltip-test"; - editor.applyFromSurveyModel(); expect(editor.json.toolbox.definition.filter(i => i.name == "text")[0].tooltip).toEqual("tooltip-test"); }); +test("Preset edit, toolbox - reorder items", () => { + const editor = new CreatorPresetEditorModel(); + const survey = editor.model; + const categQuestion = survey.getQuestionByName("toolbox_categories"); + const matrixQuestion = survey.getQuestionByName("toolbox_matrix"); + expect(matrixQuestion.visibleRows).toHaveLength(0); + expect(categQuestion.visibleRows).toHaveLength(5); + const row = categQuestion.visibleRows[1]; + row.showDetailPanel(); + const itemsQuestion = row.getQuestionByName("items"); + expect(itemsQuestion.visibleRows.map(r => r.getValue("name"))).toStrictEqual(["text", "comment", "multipletext"]); + const value = itemsQuestion.value; + value.push(value[0]); + value.splice(0, 1); + itemsQuestion.value = value; + expect(editor.json.toolbox).toBeDefined(); + expect(editor.json.toolbox.definition.map(i => i.name)).toContain("text"); + expect(editor.json.toolbox.categories[1].items).toStrictEqual(["comment", "multipletext", "text"]); +}); + test("Preset edit, toolbox - change category", () => { const editor = new CreatorPresetEditorModel(); expect(editor.applyFromSurveyModel()).toBeTruthy(); @@ -142,7 +187,6 @@ test("Preset edit, toolbox - change category", () => { itemsQuestion.value = value; itemsQuestion2.value = value2; - editor.applyFromSurveyModel(); expect(editor.json.toolbox.categories[1].items).toStrictEqual(["text", "comment", "multipletext", "panel"]); expect(editor.json.toolbox.categories[2].items).toStrictEqual(["paneldynamic"]); @@ -150,7 +194,6 @@ test("Preset edit, toolbox - change category", () => { test("Preset edit, toolbox - switch to items mode", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; const categQuestion = survey.getQuestionByName("toolbox_categories"); const row = categQuestion.visibleRows[1]; @@ -167,13 +210,11 @@ test("Preset edit, toolbox - switch to items mode", () => { expect(itemRow.getValue("iconName")).toBe("icon-test"); itemRow.detailPanel.getQuestionByName("iconName").value = "icon-test2"; - editor.applyFromSurveyModel(); expect(editor.json.toolbox.definition.filter(i => i.name == "comment")[0].iconName).toEqual("icon-test2"); }); test("Preset edit, toolbox - switch to categories mode", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; survey.getQuestionByName("toolbox_mode").value = "items"; const allItemsQuestion = survey.getQuestionByName("toolbox_items"); @@ -228,9 +269,25 @@ test("Preset edit, toolbox - reset category", () => { expect(hiddenQuestion.value.map(i => i.name)).toEqual(["comment", "paneldynamic"]); }); -test("Preset edit, toolbox - default names in categories", () => { +test("Preset edit, toolbox - reset item", () => { + const editor = new CreatorPresetEditorModel(); + const survey = editor.model; + survey.getQuestionByName("toolbox_mode").value = "items"; + const itemQuestion = survey.getQuestionByName("toolbox_items"); + const itemsValue = itemQuestion.value; + + itemsValue.filter(c => c.name == "text")[0].title = "TextChanged"; + + const row = itemQuestion.visibleRows.filter(r => r.getValue("name") == "text")[0]; + const renderedRow = itemQuestion.renderedTable.rows.filter(r => r.row == row)[0]; + const resetAction = renderedRow.cells[renderedRow.cells.length - 1].item.value.actions.filter(a => a.id == "reset-to-default")[0]; + resetAction.action(resetAction); + + expect(itemsValue.filter(c => c.name == "text")[0].title).toEqual("Single-Line Input"); +}); + +test.skip("Preset edit, toolbox - default names in categories", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; const categoriesQuestion = survey.getQuestionByName("toolbox_categories"); categoriesQuestion.value = categoriesQuestion.value.filter(v => ["text", "containers"].indexOf(v.category) >= 0); @@ -245,9 +302,8 @@ test("Preset edit, toolbox - default names in categories", () => { expect(categoriesQuestion.value[2].category).toBe("category1"); }); -test("Preset edit, toolbox - default names in items", () => { +test.skip("Preset edit, toolbox - default names in items", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; const categoriesQuestion = survey.getQuestionByName("toolbox_categories"); const itemsQuestion = survey.getQuestionByName("toolbox_matrix"); @@ -267,12 +323,15 @@ test("Preset edit, toolbox - default names in items", () => { test("Preset edit, toolbox - edit category", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; const categQuestion = survey.getQuestionByName("toolbox_categories"); + categQuestion.addRow(); + categQuestion.visibleRows[categQuestion.visibleRows.length - 1].getQuestionByName("category").value = "New_category"; const renderedRow = categQuestion.renderedTable.rows.filter(r => r.row == categQuestion.visibleRows[0])[0]; - const editCategoryAction = renderedRow.cells[renderedRow.cells.length - 1].item.value.actions.filter(a => a.id == "edit-category")[0]; + const editCategoryAction = renderedRow.cells[renderedRow.cells.length - 1].item.value.actions.filter(a => a.id == "edit-item")[0]; + const renderedCustomRow = categQuestion.renderedTable.rows.filter(r => r.row == categQuestion.visibleRows[categQuestion.visibleRows.length - 1])[0]; + const editCustomCategoryAction = renderedCustomRow.cells[renderedCustomRow.cells.length - 1].item.value.actions.filter(a => a.id == "edit-item")[0]; const originalShowDialog = settings.showDialog; let popupSurvey: SurveyModel | undefined; @@ -298,8 +357,7 @@ test("Preset edit, toolbox - edit category", () => { expect(popupSurvey!.getQuestionByName("category").readOnly).toBeTruthy(); - renderedRow.row.getQuestionByName("isDefault").value = false; - editCategoryAction.action(); + editCustomCategoryAction.action(); expect(popupSurvey!.getQuestionByName("category").readOnly).toBeFalsy(); } finally { settings.showDialog = originalShowDialog; @@ -308,7 +366,6 @@ test("Preset edit, toolbox - edit category", () => { test("Preset edit, toolbox - edit item", () => { const editor = new CreatorPresetEditorModel(); - expect(editor.applyFromSurveyModel()).toBeTruthy(); const survey = editor.model; const matrixQuestion = survey.getQuestionByName("toolbox_matrix") as QuestionMatrixDynamicModel; @@ -330,15 +387,98 @@ test("Preset edit, toolbox - edit item", () => { itemsQuestion.addRow(); expect(itemsQuestion.visibleRows).toHaveLength(2); - matrixQuestion.visibleRows[0].showDetailPanel(); + const renderedRow = itemsQuestion.renderedTable.rows.filter(r => r.row == itemsQuestion.visibleRows[0])[0]; + const editItemAction = renderedRow.cells[renderedRow.cells.length - 1].item.value.actions.filter(a => a.id == "edit-item")[0]; + editItemAction.action(); + const nameQuestion = popupSurvey!.getQuestionByName("name"); expect(nameQuestion.readOnly).toBeTruthy(); - matrixQuestion.visibleRows[1].showDetailPanel(); + const renderedRow2 = matrixQuestion.renderedTable.rows.filter(r => r.row == matrixQuestion.visibleRows[1])[0]; + const editItemAction2 = renderedRow2.cells[renderedRow2.cells.length - 1].item.value.actions.filter(a => a.id == "edit-item")[0]; + editItemAction2.action(); + const nameQuestion2 = popupSurvey!.getQuestionByName("name"); expect(nameQuestion2.readOnly).toBeFalsy(); } finally { settings.showDialog = originalShowDialog; } +}); + +test("Preset edit, toolbox - custom types", () => { + ComponentCollection.Instance.add({ name: "test", title: "Test", questionJSON: { "type": "text", "title": "1" } }); + + const editor = new CreatorPresetEditorModel(); + const survey = editor.model; + const categQuestion = survey.getQuestionByName("toolbox_categories"); + const matrixQuestion = survey.getQuestionByName("toolbox_matrix"); + expect(matrixQuestion.value).toBeUndefined(); + expect(categQuestion.value.filter(c => c.category === "general")[0].items.filter(i => i.name === "test")).toHaveLength(1); + ComponentCollection.Instance.remove("test"); +}); + +test("Preset edit, toolbox - new names", () => { + const editor = new CreatorPresetEditorModel({ + "toolbox": { + "definition": [ + { + "name": "text" + }, + { + "name": "comment", + "subitems": [ + { + "name": "name3", + "title": "name3" + } + ] + }, + { + "name": "multipletext" + }, + { + "name": "name1", + "title": "name1" + }, + { + "name": "panel" + }, + { + "name": "paneldynamic" + }, + { + "name": "name2", + "title": "name2" + } + ], + "categories": [ + { + "category": "text", + "title": "Text Input Questions", + "items": [ + "text", + "comment", + "multipletext", + "name1" + ] + }, + { + "category": "containers", + "title": "Containers", + "items": [ + "panel", + "paneldynamic", + "name2" + ] + } + ] + } + }); + const survey = editor.model; + const matrixQuestion = survey.getQuestionByName("toolbox_matrix"); + matrixQuestion.addRow(); + expect(matrixQuestion.value[matrixQuestion.value.length - 1].name).toBe("name4"); + matrixQuestion.addRow(); + expect(matrixQuestion.value[matrixQuestion.value.length - 1].name).toBe("name5"); }); \ No newline at end of file diff --git a/packages/survey-creator-core/tests-presets/presets-editor.tests.ts b/packages/survey-creator-core/tests-presets/presets-editor.tests.ts index 83270c0e09..157dc5539b 100644 --- a/packages/survey-creator-core/tests-presets/presets-editor.tests.ts +++ b/packages/survey-creator-core/tests-presets/presets-editor.tests.ts @@ -3,7 +3,7 @@ import { CreatorPresetEditorModel } from "../src/presets/presets-editor"; import { ICreatorPresetData } from "../src/presets-creator/presets"; import { SurveyModel, Question } from "survey-core"; import { QuestionToolbox } from "../src/toolbox"; -import { SurveyCreatorModel } from "../src/creator-base"; +import { CreatorBase, SurveyCreatorModel } from "../src/creator-base"; import { editorLocalization } from "../src/editorLocalization"; //import "survey-creator-core/i18n/german"; //import "survey-creator-core/i18n/italian"; @@ -63,34 +63,40 @@ test("Preset edit model, tabs page with creator, default items", () => { itemsQuestion.value = [{ name: "preview" }, { name: "logic" }]; const activeTabQuestion = survey.getQuestionByName("tabs_activeTab"); activeTabQuestion.value = "logic"; - editor.applyFromSurveyModel(); const creator = editor.creator; + creator.activeTab = "logic"; + editor.applyFromSurveyModel(); expect(creator.tabs).toHaveLength(2); expect(creator.tabs[0].id).toEqual("preview"); expect(creator.tabs[1].id).toEqual("logic"); expect(creator.activeTab).toBe("logic"); }); -test("Preset edit model, tabs page one selected element", () => { - const editor = new CreatorPresetEditorModel({}); + +test("Preset edit model, tabs page with creator, default items with custom", () => { + const creator = new CreatorBase(); + creator.addTab({ name: "custom", plugin: { model: creator, activate: () => { } } }); + const editor = new CreatorPresetEditorModel({}, creator); const survey = editor.model; const itemsQuestion = survey.getQuestionByName("tabs_items"); + const defultTabs = JSON.parse(JSON.stringify(itemsQuestion.value)); + expect(defultTabs.map(t => t.name)).toEqual(["designer", "preview", "logic", "json", "custom"]); + + itemsQuestion.value = [{ name: "preview" }, { name: "custom" }]; const activeTabQuestion = survey.getQuestionByName("tabs_activeTab"); - expect(itemsQuestion.value.map(t => t.name)).toEqual(["designer", "preview", "logic", "json"]); - itemsQuestion.value = [{ name: "designer" }]; - expect(itemsQuestion.value.map(t => t.name)).toEqual(["designer"]); - expect(itemsQuestion.isVisible).toBeFalsy(); - expect(activeTabQuestion.isVisible).toBeFalsy(); - itemsQuestion.value = [{ name: "designer" }, { name: "preview" }]; - expect(itemsQuestion.value.map(t => t.name)).toEqual(["designer", "preview"]); - expect(itemsQuestion.isVisible).toBeTruthy(); - expect(activeTabQuestion.isVisible).toBeTruthy(); + activeTabQuestion.value = "custom"; + editor.applyFromSurveyModel(); + expect(creator.tabs).toHaveLength(2); + expect(creator.tabs[0].id).toEqual("preview"); + expect(creator.tabs[1].id).toEqual("custom"); + expect(creator.activeTab).toBe("preview"); }); + test("Preset edit model, tabs page with creator, default items", () => { const editor = new CreatorPresetEditorModel({ tabs: { items: ["designer", "logic"], activeTab: "logic" } }); const survey = editor.model; const itemsQuestion = survey.getQuestionByName("tabs_items"); const defultTabs = JSON.parse(JSON.stringify(itemsQuestion.value)); - expect(defultTabs).toEqual(["designer", "logic"]); + expect(defultTabs.map(t => t.name)).toEqual(["designer", "logic"]); const activeTabQuestion = survey.getQuestionByName("tabs_activeTab"); expect(activeTabQuestion.value).toEqual("logic"); }); @@ -205,6 +211,7 @@ test("Preset edit model, custom items, apply", () => { const etalon = { name: "name1", + title: "name1", tooltip: "tooltip1", json: { type: "text" } }; @@ -222,11 +229,11 @@ test("Preset edit model, toolbox items, default value and apply", () => { const defaultItems = new QuestionToolbox().getDefaultItems([], false, true, true); expect(question.visibleRows).toHaveLength(defaultItems.length); expect(question.value).toHaveLength(defaultItems.length); - question.value = question.value.filter(r => ["boolean", "text", "checkbox"].indexOf(r.name) >= 0).sort((a, b)=>a.name < b.name ? 1 : -1); - expect(editor.applyFromSurveyModel()).toBeTruthy(); + question.value = question.value.filter(r => ["boolean", "comment", "checkbox"].indexOf(r.name) >= 0).sort((a, b)=>a.name < b.name ? 1 : -1); const etalon: ICreatorPresetData = { toolbox: { - definition: [{ name: "text" }, { name: "checkbox" }, { name: "boolean" }] + categories: [], + definition: [{ name: "comment" }, { name: "checkbox" }, { name: "boolean" }] } }; const testJson = editor.preset.getJson(); @@ -328,10 +335,6 @@ test("Preset edit model, property grid, setup", () => { expect(checkSelectorChoice("empty")).toBeFalsy(); expect(checkSelectorChoice("nonvalue")).toBeFalsy(); expect(checkSelectorChoice("textwithbutton")).toBeFalsy(); - const panel = survey.getPanelByName("propPanel"); - expect(panel.isVisible).toBeFalsy(); - selectorQuestion.value = "survey"; - expect(panel.isVisible).toBeTruthy(); const propGridCategories = survey.getQuestionByName("propertyGrid_categories"); expect(propGridCategories).toBeTruthy(); @@ -494,19 +497,19 @@ test("Preset edit model, property grid & matrixdropdowncolumn@checkbox", () => { expect(panels[1].elements[0].name).toBe("choices"); expect(panels[1].elements[1].name).toBe("showSelectAllItem"); }); -test("Editor: activeTab & navigationBar", () => { - const editor = new CreatorPresetEditorModel(); - expect(editor.activeTab).toEqual("preset"); - expect(editor.navigationBar.actions[0].active).toBeTruthy(); - const survey = editor.model; - const itemsQuestion = survey.getQuestionByName("tabs_items"); - itemsQuestion.value = [{ name: "designer" }, { name: "translation" }]; - editor.navigationBar.actions[1].action(); - expect(editor.activeTab).toEqual("creator"); - expect(editor.creator.tabs).toHaveLength(2); - expect(editor.creator.tabs[0].id).toEqual("designer"); - expect(editor.creator.tabs[1].id).toEqual("translation"); -}); +// test("Editor: activeTab & navigationBar", () => { +// const editor = new CreatorPresetEditorModel(); +// expect(editor.activeTab).toEqual("preset"); +// expect(editor.navigationBar.actions[0].active).toBeTruthy(); +// const survey = editor.model; +// const itemsQuestion = survey.getQuestionByName("tabs_items"); +// itemsQuestion.value = [{ name: "designer" }, { name: "translation" }]; +// editor.navigationBar.actions[1].action(); +// expect(editor.activeTab).toEqual("creator"); +// expect(editor.creator.tabs).toHaveLength(2); +// expect(editor.creator.tabs[0].id).toEqual("designer"); +// expect(editor.creator.tabs[1].id).toEqual("translation"); +// }); // test("Editor: do not allow to change the activeTab if there is an error", () => { // const editor = new CreatorPresetEditorModel(); // expect(editor.activeTab).toEqual("preset"); @@ -537,14 +540,12 @@ test("Change localization strings for tabs", () => { const itemsQuestion = survey.getQuestionByName("tabs_items"); const item = itemsQuestion.visibleRows[0]; item.getQuestionByName("title").value = "Designer edit"; - editor.applyFromSurveyModel(); let loc = editor.json.localization; expect(loc).toBeTruthy(); expect(loc.en.tabs.designer).toEqual("Designer edit"); expect(loc.en.tabs.logic).toBeFalsy(); expect(editor.creator.tabs[0].locTitle.text).toEqual("Designer edit"); item.getQuestionByName("title").value = "Designer"; - editor.applyFromSurveyModel(); loc = editor.json.localization; expect(loc).toBeFalsy(); }); @@ -589,7 +590,6 @@ test("Change localization strings for toolbox categories", () => { expect(row1.getQuestionByName("title").value).toBe("Choice Questions"); expect(row1.getQuestionByName("title").isReadOnly).toBeFalsy(); row1.getQuestionByName("title").value = "Choice Questions edit"; - editor.applyFromSurveyModel(); const loc = editor.json.localization; expect(loc).toBeTruthy(); expect(loc.en.toolboxCategories.text).toBeFalsy(); @@ -626,7 +626,7 @@ test("Preset edit model, Keep description on deleting the question", () => { survey.setValue("propertyGrid_selector", "text"); const propGridCategories = survey.getQuestionByName("propertyGrid_categories"); const propGridHidden = survey.getQuestionByName("propertyGrid_matrix"); - expect(propGridHidden.value).toBeFalsy(); + expect(propGridHidden.value || []).toEqual([]); propGridCategories.visibleRows[0].showDetailPanel(); const qItems = propGridCategories.visibleRows[0].detailPanel.getQuestionByName("properties"); const itemIndex = qItems.value.findIndex(r => r.name == "name"); @@ -709,6 +709,47 @@ test("Preset edit model, Change localization strings title&description", () => { const propGridSurvey = creator.propertyGrid; expect(propGridSurvey.getPageByName("general").title).toEqual("General Edit"); }); +test("Change tabs presets multiple times", () => { + const editor = new CreatorPresetEditorModel(); + const survey = editor.model; + let itemsQuestion = survey.getQuestionByName("tabs_items"); + const itemsValue = [...itemsQuestion.value]; + itemsValue.splice(itemsValue.length - 1, 1); + itemsQuestion.value = itemsValue; + expect(editor.json.tabs.items.map(t => t.name)).toEqual(["designer", "preview", "logic"]); + + let defaultTabQuestion = survey.getQuestionByName("tabs_activeTab"); + defaultTabQuestion.value = "preview"; + expect(editor.json.tabs.activeTab).toBe("preview"); + expect(editor.json.tabs.items.map(t => t.name)).toEqual(["designer", "preview", "logic"]); +}); +test("Change toolbox presets multiple times", () => { + const editor = new CreatorPresetEditorModel(); + const survey = editor.model; + let categoriesQuestion = survey.getQuestionByName("toolbox_categories"); + const categoriesValue = [...categoriesQuestion.value]; + categoriesQuestion.value = [categoriesValue[1], categoriesValue[2]]; + expect(editor.json.toolbox.categories.map(t => t.category)).toEqual(["text", "containers"]); + expect(editor.json.toolbox.definition.map(t => t.name)).toEqual(["text", "comment", "multipletext", "panel", "paneldynamic"]); + + let defaultTabQuestion = survey.getQuestionByName("tabs_activeTab"); + defaultTabQuestion.value = "preview"; + expect(editor.json.toolbox.categories.map(t => t.category)).toEqual(["text", "containers"]); + expect(editor.json.toolbox.definition.map(t => t.name)).toEqual(["text", "comment", "multipletext", "panel", "paneldynamic"]); +}); +test("Use default preset json", () => { + const editor = new CreatorPresetEditorModel(); + const survey = editor.model; + let itemsQuestion = survey.getQuestionByName("tabs_items"); + const itemsValue = [...itemsQuestion.value]; + itemsValue.splice(itemsValue.length - 1, 1); + itemsQuestion.value = itemsValue; + expect(editor.json.tabs.items.map(t => t.name)).toEqual(["designer", "preview", "logic"]); + const newDefaultJson = editor.defaultJson; + + const editor2 = new CreatorPresetEditorModel({}, null, newDefaultJson); + expect(editor2.json.tabs).toBeUndefined(); +}); test("Change localization strings and then change locale for tabs", () => { addLocales(); const editor = new CreatorPresetEditorModel({ tabs: { items: [] } }); @@ -831,19 +872,6 @@ test("Preset edit model, toolbox categories, restore after creator locale change survey.setValue("toolbox_mode", "categories"); expect(matrix.rowCount).toBe(rowCount); }); -test("Preset edit model, tabs page with creator, default items", () => { - const editor = new CreatorPresetEditorModel({}); - const survey = editor.model; - const itemsQuestion = survey.getQuestionByName("tabs_items"); - itemsQuestion.value = ["preview", "logic"]; - const nextBtn = survey.navigationBar.getActionById("sv-nav-next"); - expect(nextBtn.isVisible).toBeTruthy(); - survey.currentPageNo = survey.visiblePages.length - 1; - expect(survey.isLastPage).toBeTruthy(); - expect(nextBtn.isVisible).toBeTruthy(); - nextBtn.action(); - expect(survey.isFirstPage).toBeTruthy(); -}); test("Preset edit model, save creator JSON on applying new preset", () => { const editor = new CreatorPresetEditorModel({}); const survey = editor.model; @@ -860,7 +888,6 @@ test("Preset edit model, save creator JSON on applying new preset", () => { }); test("Preset edit model, set json property", () => { const editor = new CreatorPresetEditorModel({}); - editor.activeTab = "results"; const jsonQuestion = editor.resultModel.getQuestionByName("json"); expect(jsonQuestion.value).toBe("{}"); const json = { @@ -875,5 +902,58 @@ test("Preset edit model, set json property", () => { editor.json = json; expect(JSON.parse(jsonQuestion.value)).toMatchObject(json); expect(editor.creator.tabs).toHaveLength(2); - expect(editor.creator.activeTab).toBe("preview"); }); +test("Reset all changes", () => { + const editor = new CreatorPresetEditorModel({}); + const survey = editor.model; + expect(editor.json).toEqual({}); + (survey.getQuestionByName("tabs_items") as QuestionMatrixDynamicModel).removeRowByIndex(1); + expect(editor.json.tabs).toBeDefined(); + + survey.getQuestionByName("toolbox_mode").value = "items"; + expect(editor.json.toolbox.categories).toBeDefined(); + survey.getQuestionByName("toolbox_showCategoryTitles").value = true; + expect(editor.json.toolbox.showCategoryTitles).toBeDefined(); + (survey.getQuestionByName("toolbox_items") as QuestionMatrixDynamicModel).removeRowByIndex(1); + + editor.resetToDefaults(); + expect(editor.json).toEqual({}); +}); +test("Icon change", () => { + const editor = new CreatorPresetEditorModel({}); + const survey = editor.model; + const tabs = (survey.getQuestionByName("tabs_items") as QuestionMatrixDynamicModel); + const row = tabs.visibleRows.filter(r => r.value.name == "designer")[0]; + const renderedRow = tabs.renderedTable.rows.filter(r => r.row == row)[0]; + const iconAction = renderedRow.cells[1].item.value.actions[0]; + expect(iconAction.id).toBe("icon-action"); + expect(iconAction.iconName).toBe("icon-config"); + + const tabsValue = JSON.parse(JSON.stringify(tabs.value)); + tabsValue.filter(v => v.name == "designer")[0].iconName = "icon-test"; + tabs.value = tabsValue; + expect(iconAction.iconName).toBe("icon-test"); +}); + +test("Icon default", () => { + const editor = new CreatorPresetEditorModel({}); + const survey = editor.model; + const matrix = (survey.getQuestionByName("toolbox_matrix") as QuestionMatrixDynamicModel); + matrix.addRow(); + + const renderedRow = matrix.renderedTable.rows.filter(r => r.row == matrix.visibleRows[0])[0]; + const iconAction = renderedRow.cells[1].item.value.actions[0]; + expect(iconAction.id).toBe("icon-action"); + expect(iconAction.iconName).toBe("square-dashed-24x24"); +}); + +test("Delete active tab", () => { + const editor = new CreatorPresetEditorModel({ tabs: { items: [] } }); + const survey = editor.model; + const itemsQuestion = survey.getQuestionByName("tabs_items"); + const activeTabQuestion = survey.getQuestionByName("tabs_activeTab"); + expect(activeTabQuestion.value).toEqual("designer"); + + itemsQuestion.value = [{ name: "preview" }, { name: "logic" }, { name: "json" }]; + expect(activeTabQuestion.value).toEqual("preview"); +}); \ No newline at end of file diff --git a/packages/survey-creator-core/tests/presets.tests.ts b/packages/survey-creator-core/tests/presets.tests.ts index e1a8984cd9..d6c35b3625 100644 --- a/packages/survey-creator-core/tests/presets.tests.ts +++ b/packages/survey-creator-core/tests/presets.tests.ts @@ -77,15 +77,35 @@ test("set toolbox items", () => { const creator = new CreatorTester(); const preset = new CreatorPreset({ toolbox: { - definition: [{ name: "text" }, { name: "dropdown" }, { name: "matrix" }], + definition: [{ name: "text" }, { name: "dropdown" }, { name: "radiogroup" }], } }); preset.apply(creator); const tb = creator.toolbox; tb.flushUpdates(); - expect(tb.categories).toHaveLength(1); + expect(tb.categories).toHaveLength(2); expect(tb.visibleActions).toHaveLength(3); - expect(tb.hasCategories).toBeFalsy(); + expect(tb.hasCategories).toBeTruthy(); +}); +test("set toolbox items and categories", () => { + const creator = new CreatorTester(); + const preset = new CreatorPreset({ + toolbox: { + definition: [{ name: "text", iconName: "i-text" }, { name: "dropdown" }, { name: "matrix" }], + categories: [ + { category: "general", items: ["text", "dropdown"] }, + { category: "matrix", items: ["matrix"] } + ] + } + }); + preset.apply(creator); + const tb = creator.toolbox; + tb.flushUpdates(); + expect(tb.categories).toHaveLength(2); + expect(tb.visibleActions).toHaveLength(3); + expect(tb.hasCategories).toBeTruthy(); + expect(tb.visibleActions[0].name).toBe("text"); + expect(tb.visibleActions[0].iconName).toBe("i-text"); }); test("set toolbox definition", () => { const creator = new CreatorTester(); @@ -96,6 +116,9 @@ test("set toolbox definition", () => { { name: "text-date", title: "Date", json: { type: "text", inputType: "date" } }, { name: "dropdown" }, { name: "matrix" }, + ], + categories: [ + { category: "general", items: ["text-number", "text-date", "dropdown", "matrix"] } ] } }); @@ -111,6 +134,65 @@ test("set toolbox definition", () => { expect(actions[1].title).toEqual("Date"); expect(actions[1].json.inputType).toEqual("date"); }); + +test("set toolbox definition - no categories", () => { + const creator = new CreatorTester(); + const preset = new CreatorPreset({ + toolbox: { + definition: [ + { name: "text-number", title: "Number", json: { type: "text", inputType: "number" } }, + { name: "text-date", title: "Date", json: { type: "text", inputType: "date" } }, + { name: "dropdown" }, + { name: "matrix" }, + ], + categories: [] + } + }); + preset.apply(creator); + const tb = creator.toolbox; + tb.flushUpdates(); + const actions = tb.visibleActions; + expect(tb.categories).toHaveLength(1); + expect(tb.visibleActions).toHaveLength(4); +}); + +test("set toolbox definition - showCategoryTitles", () => { + const creator = new CreatorTester(); + const preset = new CreatorPreset({ + toolbox: { + showCategoryTitles: true + } + }); + preset.apply(creator); + const tb = creator.toolbox; + tb.flushUpdates(); + expect(tb.showCategoryTitles).toBeTruthy(); + + preset.setJson(undefined); + preset.apply(creator); + tb.flushUpdates(); + expect(tb.showCategoryTitles).toBeFalsy(); +}); + +test("set toolbox definition - no categories, no definition", () => { + const creator = new CreatorTester(); + const preset = new CreatorPreset({ + toolbox: { + categories: [] + } + }); + preset.apply(creator); + const tb = creator.toolbox; + tb.flushUpdates(); + expect(tb.categories).toHaveLength(1); + expect(tb.visibleActions.length).toBeGreaterThan(0); + + preset.setJson(undefined); + preset.apply(creator); + tb.flushUpdates(); + expect(tb.categories.length).toBeGreaterThan(1); +}); + test("Override toolbox JSON", () => { const creator = new CreatorTester(); const preset = new CreatorPreset({ @@ -344,4 +426,15 @@ test("apply supported locales", () => { preset.apply(creator); expect(surveyLocalization.supportedLocales).toStrictEqual([]); expect(surveyLocalization.showNamesInEnglish).toBeFalsy(); +}); +test("set creator options", () => { + const creator = new CreatorTester(); + const preset = new CreatorPreset({ + options: { + allowZoom: false, + } + }); + expect(creator.allowZoom).toBeTruthy(); + preset.apply(creator); + expect(creator.allowZoom).toBeFalsy(); }); \ No newline at end of file diff --git a/packages/survey-creator-core/tests/toolbox.tests.ts b/packages/survey-creator-core/tests/toolbox.tests.ts index 529c98a569..793351c4af 100644 --- a/packages/survey-creator-core/tests/toolbox.tests.ts +++ b/packages/survey-creator-core/tests/toolbox.tests.ts @@ -907,4 +907,11 @@ test("Update subitems on locale change, Bug#6014", (): any => { creator.locale = "en"; creator.toolbox.addItem({ name: "test4", json: {} }); expect(creator.toolbox.getItemByName("test4").title).toBe("test4"); +}); +test("Get default toolbox categories", (): any => { + ComponentCollection.Instance.add({ name: "test", title: "Test", questionJSON: { "type": "text", "title": "1" } }); + const creator = new CreatorTester({ questionTypes: ["text"] }); + const categories = creator.toolbox.getDefaultCategories(); + expect(categories.map(c => ({ name: c.name, items: c.items.map(i => i.name) }))).toEqual([{ name: "text", items: ["text"] }, { name: "general", items: ["test"] }]); + ComponentCollection.Instance.remove("test"); }); \ No newline at end of file diff --git a/packages/survey-creator-core/tsconfig.i18n.presets.json b/packages/survey-creator-core/tsconfig.i18n.presets.json new file mode 100644 index 0000000000..ee36db92da --- /dev/null +++ b/packages/survey-creator-core/tsconfig.i18n.presets.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": false, + "declarationDir": null, + "paths": { + "survey-creator-core": [ + "./src/editorLocalization.ts" + ] + }, + } +} \ No newline at end of file diff --git a/packages/survey-creator-core/tsconfig.presets.json b/packages/survey-creator-core/tsconfig.presets.json index eefeec6407..50734f6746 100644 --- a/packages/survey-creator-core/tsconfig.presets.json +++ b/packages/survey-creator-core/tsconfig.presets.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.json", "compilerOptions": { "declaration": true, - "declarationDir": "./build/typings-presets", + "declarationDir": "./build/presets", "paths": { "survey-creator-core": [ "./build" @@ -10,6 +10,6 @@ } }, "include": [ - "./src/entries/presets.ts" + "./src/presets/index.ts" ] } \ No newline at end of file diff --git a/packages/survey-creator-core/webpack.config.js b/packages/survey-creator-core/webpack.config.js index 50846e04fd..750747a983 100644 --- a/packages/survey-creator-core/webpack.config.js +++ b/packages/survey-creator-core/webpack.config.js @@ -91,15 +91,10 @@ var buildPlatformJson = { "require": "./themes/*.js" }, "./presets": { - "types": "./presets-typings/typings/entries/index.d.ts", - "import": "./fesm/survey-creator-core-presets.mjs", - "require": "./survey-creator-core-presets.js" - }, - "./presets/*": { - "types": "./presets-typings/typings/*.d.ts", - "import": "./fesm/survey-creator-core-presets/*.mjs", - "require": "./survey-creator-core-presets/*.js" - }, + "types": "./presets/index.d.ts", + "import": "./fesm/presets/index.mjs", + "require": "./presets/index.js" + } }, devDependencies: {}, }; diff --git a/packages/survey-creator-core/webpack.i18n.presets.js b/packages/survey-creator-core/webpack.i18n.presets.js new file mode 100644 index 0000000000..7983ff51d8 --- /dev/null +++ b/packages/survey-creator-core/webpack.i18n.presets.js @@ -0,0 +1,38 @@ +"use strict"; +const webpackCommonConfigCreator = require("./webpack.config"); +const path = require("path"); +const fs = require("fs"); +const { merge } = require("webpack-merge"); + +const config = { + entry: { + }, + externals: { + "survey-creator-core": { + root: "SurveyCreatorCore", + commonjs2: "survey-creator-core", + commonjs: "survey-creator-core", + amd: "survey-creator-core" + } + } +}; + +function patchEntries() { + fs.readdirSync(path.resolve(__dirname, "./src/presets/localization")).forEach(file => { + var extension = path.extname(file); + if (extension.toLowerCase() === ".ts") { + config.entry[`presets/i18n/${path.basename(file, extension)}`] = (path.resolve(__dirname, "./src/presets/localization") + "/" + file); + } + }); + config.entry["presets/i18n/index"] = path.resolve(__dirname, "./src/presets/i18n.ts"); +} + +module.exports = function (options) { + options.platform = "i18n"; + options.libraryName = "SurveyCreatorLocalesPresets"; + options.tsConfigFile = "tsconfig.i18n.presets.json"; + patchEntries(); + const mainConfig = webpackCommonConfigCreator(options); + mainConfig.entry = {}; + return merge(mainConfig, config); +}; \ No newline at end of file diff --git a/packages/survey-creator-core/webpack.presets.config.js b/packages/survey-creator-core/webpack.presets.config.js index 7e43232d03..50cff5de80 100644 --- a/packages/survey-creator-core/webpack.presets.config.js +++ b/packages/survey-creator-core/webpack.presets.config.js @@ -7,6 +7,7 @@ const RemoveEmptyScriptsPlugin = require("webpack-remove-empty-scripts"); module.exports = (env) => { const isProd = env.buildType === "prod"; const emitDeclarations = !!env.emitDeclarations; + const emitStyles = !!env.emitStyles; const compilerOptions = emitDeclarations ? {} : { declaration: false, declarationDir: null @@ -15,11 +16,11 @@ module.exports = (env) => { mode: isProd ? "production" : "development", devtool: isProd ? "source-map" : "eval-source-map", entry: { - "survey-creator-core-presets": path.resolve(__dirname, "./src/entries/presets.ts"), + "survey-creator-core-presets": path.resolve(__dirname, "./src/presets/index.ts"), }, output: { - path: path.resolve(__dirname, "build"), - filename: isProd ? "[name].min.js" : "[name].js", + path: path.resolve(__dirname, "build/presets"), + filename: isProd ? "index.min.js" : "index.js", library: { root: "SurveyCreatorCorePresets", amd: "[dashedname]", @@ -61,6 +62,25 @@ module.exports = (env) => { ], exclude: /node_modules/ }, + { + test: /\.s(c|a)ss$/, + use: [ + MiniCssExtractPlugin.loader, + { + loader: "css-loader", + options: { + sourceMap: env.buildType !== "prod", + }, + }, + { + loader: "sass-loader", + options: { + api: "modern", + sourceMap: env.buildType !== "prod", + }, + }, + ], + }, { test: /\.svg$/, use: ["svg-inline-loader"] @@ -71,6 +91,10 @@ module.exports = (env) => { new webpack.DefinePlugin({ "process.env.VERSION": JSON.stringify(require("./package.json").version), "process.env.NODE_ENV": JSON.stringify(isProd ? "production" : "development") + }), + new RemoveEmptyScriptsPlugin(), + new MiniCssExtractPlugin({ + filename: isProd ? "index.min.css" : "index.css" }) ] }; diff --git a/packages/survey-creator-js/entries/presets.ts b/packages/survey-creator-js/entries/presets.ts new file mode 100644 index 0000000000..486b91fbcb --- /dev/null +++ b/packages/survey-creator-js/entries/presets.ts @@ -0,0 +1 @@ +export * from "../../survey-creator-react/src/entries/presets"; diff --git a/packages/survey-creator-js/index.html b/packages/survey-creator-js/index.html index fc3212406e..01859390f7 100644 --- a/packages/survey-creator-js/index.html +++ b/packages/survey-creator-js/index.html @@ -15,6 +15,7 @@ + - - + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/packages/survey-creator-js/tsconfig.presets.json b/packages/survey-creator-js/tsconfig.presets.json new file mode 100644 index 0000000000..979ad924c8 --- /dev/null +++ b/packages/survey-creator-js/tsconfig.presets.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "survey-creator-core": [ + "./build" + ] + } + }, + "include": [ + "./src/entries/presets.ts" + ] +} \ No newline at end of file diff --git a/packages/survey-creator-js/webpack.presets.config.js b/packages/survey-creator-js/webpack.presets.config.js new file mode 100644 index 0000000000..d717a31988 --- /dev/null +++ b/packages/survey-creator-js/webpack.presets.config.js @@ -0,0 +1,192 @@ +"use strict"; + +const webpack = require("webpack"); +const path = require("path"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +var DashedNamePlugin = require("../../webpack-dashed-name"); +const packageJson = require("./package.json"); +const fs = require("fs"); + +const year = new Date().getFullYear(); +const banner = [ + "SurveyJS Creator Presets UI v" + packageJson.version, + "(c) 2015-" + year + " Devsoft Baltic OÜ - http://surveyjs.io/", + "Github: https://github.com/surveyjs/survey-creator", + "License: https://surveyjs.io/Licenses#SurveyCreator" +].join("\n"); + +module.exports = function (options) { + const buildPath = __dirname + "/build/"; + const isProductionBuild = options.buildType === "prod"; + const emitDeclarations = !!options.emitDeclarations; + const emitNonSourceFiles = !!options.emitNonSourceFiles; + + const compilerOptions = emitDeclarations ? {} : { + declaration: false, + declarationDir: null + }; + + const config = { + mode: isProductionBuild ? "production" : "development", + entry: { + "survey-creator-js-presets": path.resolve(__dirname, "./entries/presets.ts") + }, + resolve: { + extensions: [".ts", ".js", ".tsx", ".scss"], + plugins: [new TsconfigPathsPlugin({ configFile: "./tsconfig.json" })], + alias: { + tslib: path.join(__dirname, "./src/entries/helpers.ts") + } + }, + optimization: { + minimize: isProductionBuild + }, + module: { + rules: [ + { + test: /\.(ts|tsx)$/, + loader: "ts-loader", + options: { + configFile: options.tsConfigFile || "tsconfig.json", + compilerOptions + } + }, + { + test: /\.s(c|a)ss$/, + use: [ + MiniCssExtractPlugin.loader, + { + loader: "css-loader", + options: { + sourceMap: options.buildType !== "prod" + } + }, + { + loader: "sass-loader", + options: { + sourceMap: options.buildType !== "prod" + } + } + ] + }, + { + test: /\.html$/, + exclude: [/node_modules/, require.resolve("./index.html")], + loader: "html-loader" + }, + { + test: /\.(svg|png)$/, + use: { + loader: "url-loader", + options: {} + } + } + ] + }, + output: { + path: buildPath, + filename: "[name]" + (isProductionBuild ? ".min" : "") + ".js", + library: { + root: options.libraryName || "SurveyCreatorPresets", + amd: "[dashedname]", + commonjs: "[dashedname]", + }, + libraryTarget: "umd", + globalObject: "this", + umdNamedDefine: true + }, + externals: { + "react": + { + root: "SurveyUI", + commonjs2: "survey-js-ui", + commonjs: "survey-js-ui", + amd: "survey-js-ui" + }, + "react-dom": + { + root: "SurveyUI", + commonjs2: "survey-js-ui", + commonjs: "survey-js-ui", + amd: "survey-js-ui" + }, + "survey-core": { + root: "Survey", + commonjs2: "survey-core", + commonjs: "survey-core", + amd: "survey-core" + }, + "survey-js-ui": { + root: "SurveyUI", + commonjs2: "survey-js-ui", + commonjs: "survey-js-ui", + amd: "survey-js-ui" + }, + "survey-react-ui": + { + root: "SurveyUI", + commonjs2: "survey-js-ui", + commonjs: "survey-js-ui", + amd: "survey-js-ui" + }, + "survey-creator-core": { + root: "SurveyCreatorCore", + commonjs2: "survey-creator-core", + commonjs: "survey-creator-core", + amd: "survey-creator-core" + }, + "survey-creator-core-presets": { + root: "SurveyCreatorCorePresets", + commonjs2: "survey-creator-core-presets", + commonjs: "survey-creator-core-presets", + amd: "survey-creator-core-presets" + }, + "survey-creator-js": { + root: "SurveyCreator", + commonjs2: "survey-creator-js", + commonjs: "survey-creator-js", + amd: "survey-creator-js" + } + + }, + plugins: [ + new DashedNamePlugin(), + new webpack.DefinePlugin({ + "process.env.ENVIRONMENT": JSON.stringify(options.buildType), + "process.env.VERSION": JSON.stringify(packageJson.version) + }), + new MiniCssExtractPlugin({ + filename: isProductionBuild ? "[name].min.css" : "[name].css" + }), + new webpack.BannerPlugin({ + banner: banner + }) + ] + }; + + if (isProductionBuild) { + config.plugins.push = config.plugins.concat([]); + } else { + config.devtool = "source-map"; + config.plugins = config.plugins.concat([ + new webpack.LoaderOptionsPlugin({ debug: true }), + new HtmlWebpackPlugin({ + filename: "index.html", + inject: "body", + template: "index.html" + }), + ]); + config.devServer = { + static: { + directory: path.join(__dirname, "."), + }, + //host: "0.0.0.0", + compress: false, + port: 8082 + }; + } + + return config; +}; diff --git a/packages/survey-creator-react/.eslintignore b/packages/survey-creator-react/.eslintignore index 6ea60eb198..b0073d0dcb 100644 --- a/packages/survey-creator-react/.eslintignore +++ b/packages/survey-creator-react/.eslintignore @@ -6,4 +6,5 @@ node_modules/ index.js copy-vrt-tests.js copy-src-tests.js -webpack.config.js \ No newline at end of file +webpack.config.js +webpack.presets.config.js \ No newline at end of file diff --git a/packages/survey-creator-react/index.html b/packages/survey-creator-react/index.html index ffceabd692..588f536e3a 100644 --- a/packages/survey-creator-react/index.html +++ b/packages/survey-creator-react/index.html @@ -18,10 +18,13 @@ - + + + + diff --git a/packages/survey-creator-react/index.js b/packages/survey-creator-react/index.js index 45dfeacd41..efa5d3284b 100644 --- a/packages/survey-creator-react/index.js +++ b/packages/survey-creator-react/index.js @@ -2,48 +2,39 @@ Survey.ComponentCollection.Instance.add({ name: "newrating", title: "SuperRating Survey.ComponentCollection.Instance.add({ name: "d2", title: "DDD", questionJSON: { "type": "dropdown", "name": "superrating", "title": "1", "isRequired": true, choices: [1, 2, 3] } }); let json = { - completedHtml: - "

Thank you for your feedback.

Your thoughts and ideas will help us to create a great product!
", - completedHtmlOnCondition: [ + "pages": [ { - expression: "{nps_score} > 8", - html: - "

Thank you for your feedback.

We glad that you love our product. Your ideas and suggestions will help us to make our product even better!
" - }, - { - expression: "{nps_score} < 7", - html: - "

Thank you for your feedback.

We are glad that you share with us your ideas.We highly value all suggestions from our customers. We do our best to improve the product and reach your expectation.

" - } - ], - pages: [ - { - name: "page1", - title: "page1 -- title", - description: "page1 -- description", - elements: [ + "name": "page1", + "elements": [ { - type: "rating", - name: "nps_score", - title: - "On a scale of zero to ten, how likely are you to recommend our product to a friend or colleague?", - isRequired: true, - rateMin: 0, - rateMax: 10, - minRateDescription: "(Most unlikely)", - maxRateDescription: "(Most likely)" - }, - { - type: "checkbox", - name: "promoter_features", - visibleIf: "{nps_score} >= 9", - title: "What features do you value the most?", - isRequired: true, - validators: [ + "type": "panel", + "name": "panel1", + "questionTitleWidth": "200px", + "questionTitleLocation": "left", + "elements": [ + { + "type": "rating", + "name": "question1", + "title": "Organization", + "rateType": "stars" + }, + { + "type": "rating", + "name": "question2", + "title": "Service", + "rateType": "stars" + }, { - type: "answercount", - text: "Please select two features maximum.", - maxCount: 2 + "type": "rating", + "name": "question3", + "title": "Ambiance", + "rateType": "stars" + }, + { + "type": "rating", + "name": "question4", + "title": "Concert", + "rateType": "stars" } ], showOtherItem: true, @@ -222,6 +213,7 @@ creator.onDefineElementMenuItems.add((_, options) => { } }); }); +creator.JSON = json; function getCompositeInput(question) { return question.contentPanel.getQuestionByName("q1"); @@ -291,38 +283,9 @@ creator.saveSurveyFunc = (no, callback) => { }, 1000); }; -// const editor = new SurveyCreatorCorePresets.CreatorPresetEditorModel(); -// window.editor = editor; -// class PresetsTabComponent extends React.Component { -// render() { -// return ( -// -// ); -// } -// } - -// const presetsPlugin = { -// // Do nothing when the tab is activated or deactivated -// activate: () => { }, -// deactivate: () => { return true; } -// }; - -// SurveyReact.ReactElementFactory.Instance.registerElement( -// "svc-tab-presets", -// (props) => { -// return React.createElement(PresetsTabComponent, props); -// } -// ); -// creator.addTab({ -// name: "presets", -// plugin: presetsPlugin, -// title: "Presets", -// componentName: "svc-tab-presets", -// index: 100 -// }); - - - +if(window.SurveyCreatorCorePresets) { + window.editor = new SurveyCreatorCorePresets.TabPresetsPlugin(creator); +} ReactDOM.render( diff --git a/packages/survey-creator-react/package.json b/packages/survey-creator-react/package.json index 6264a77775..e1727d4345 100644 --- a/packages/survey-creator-react/package.json +++ b/packages/survey-creator-react/package.json @@ -30,7 +30,9 @@ "vrt:v2:copy:tests": "node copy-vrt-tests.js", "release": "standard-version --message \"Release: %s [azurepipelines skip]\"", "remove-package-lock": "rimraf package-lock.json", - "build": "webpack --env buildType=dev --env emitDeclarations --env emitNonSourceFiles && webpack --env buildType=prod && rollup -c", + "build:main": "webpack --env buildType=dev --env emitDeclarations --env emitNonSourceFiles && webpack --env buildType=prod && rollup -c", + "build:presets": "webpack --config ./webpack.presets.config.js --env buildType=dev --env emitDeclarations && webpack --config ./webpack.presets.config.js --env buildType=prod", + "build": "npm run build:main && npm run build:presets", "watch:dev": "concurrently \"webpack --env buildType=dev --watch --env emitDeclarations --env emitStyles\" \"rollup -c -w\" ", "watch:prod": "webpack --env buildType=prod --watch", "lint": "eslint . --max-warnings=0", diff --git a/packages/survey-creator-react/src/custom-questions/BooleanSwitch.tsx b/packages/survey-creator-react/src/custom-questions/BooleanSwitch.tsx index 608ff48ed6..1038c9adcc 100644 --- a/packages/survey-creator-react/src/custom-questions/BooleanSwitch.tsx +++ b/packages/survey-creator-react/src/custom-questions/BooleanSwitch.tsx @@ -3,7 +3,7 @@ import { type QuestionBooleanModel, RendererFactory } from "survey-core"; import { attachKey2click, ReactQuestionFactory, SurveyElementBase, SurveyQuestionElementBase } from "survey-react-ui"; export class SurveyQuestionBooleanSwitch extends SurveyQuestionElementBase { protected renderElement(): React.JSX.Element { - const button = attachKey2click(
, this.questionBase, { processEsc: false }); return ( -
this.questionBase.value = !this.questionBase.value}> +
this.questionBase.booleanValue = !this.questionBase.booleanValue}> {button}
diff --git a/packages/survey-creator-react/src/entries/presets.ts b/packages/survey-creator-react/src/entries/presets.ts new file mode 100644 index 0000000000..811005a05d --- /dev/null +++ b/packages/survey-creator-react/src/entries/presets.ts @@ -0,0 +1,3 @@ +export { TabPresetsComponent } from "../presets/Presets"; +export { PresetsPropertyGridWrapper } from "../presets/PresetsPropertyGrid"; +export { PresetsIconItem } from "../presets/PresetsIconItem"; \ No newline at end of file diff --git a/packages/survey-creator-react/src/presets/Presets.tsx b/packages/survey-creator-react/src/presets/Presets.tsx new file mode 100644 index 0000000000..5e5ad6d603 --- /dev/null +++ b/packages/survey-creator-react/src/presets/Presets.tsx @@ -0,0 +1,47 @@ +import * as React from "react"; +import { Base, SurveyModel, PageModel } from "survey-core"; +import { + ReactElementFactory, + Survey, + SurveyElementBase, +} from "survey-react-ui"; +import { SurveyCreatorModel } from "survey-creator-core"; +interface ITabPresetsComponentProps { + data: any; + creator: SurveyCreatorModel; +} + +export class TabPresetsComponent extends SurveyElementBase { + private get model(): SurveyModel { + return this.props.data.model; + } + protected get creator(): SurveyCreatorModel { + return this.props.creator; + } + + protected getStateElement(): Base { + return this.model; + } + + renderElement(): React.JSX.Element { + const presetsTabClassName = "svc-tab-designer "; + + return ( + +
+ {this.creator.showToolbox ? ReactElementFactory.Instance.createElement("svc-toolbox", { model: this.creator }) : null} +
+
+ +
+
+ ); + } +} + +ReactElementFactory.Instance.registerElement("svc-tab-presets", (props) => { + return React.createElement( + TabPresetsComponent, + props as ITabPresetsComponentProps + ); +}); diff --git a/packages/survey-creator-react/src/presets/PresetsIconItem.tsx b/packages/survey-creator-react/src/presets/PresetsIconItem.tsx new file mode 100644 index 0000000000..1e5c732055 --- /dev/null +++ b/packages/survey-creator-react/src/presets/PresetsIconItem.tsx @@ -0,0 +1,33 @@ +import * as React from "react"; +import { ItemValue } from "survey-core"; +import { + ReactElementFactory, + Survey, + SurveyElementBase, + SvgIcon, +} from "survey-react-ui"; +import { PropertyGridViewModel } from "survey-creator-core"; +interface IPresetsIconItemProps { + item: ItemValue; +} +export class PresetsIconItem extends React.Component { + constructor(props: IPresetsIconItemProps) { + super(props); + } + render() { + const item = (this.props as IPresetsIconItemProps).item; + if (!item) return null; + + return ( +
+ + {item.title} +
+ ); + } +} + +ReactElementFactory.Instance.registerElement("svc-presets-icon-item", (props) => { + return React.createElement(PresetsIconItem, props); +}); diff --git a/packages/survey-creator-react/src/presets/PresetsPropertyGrid.tsx b/packages/survey-creator-react/src/presets/PresetsPropertyGrid.tsx new file mode 100644 index 0000000000..752c7aeaf4 --- /dev/null +++ b/packages/survey-creator-react/src/presets/PresetsPropertyGrid.tsx @@ -0,0 +1,48 @@ +import * as React from "react"; +import { Base, SurveyModel, PageModel } from "survey-core"; +import { + ReactElementFactory, + Survey, + SurveyElementBase, + SvgIcon, +} from "survey-react-ui"; +import { PropertyGridViewModel } from "survey-creator-core"; +interface IPresetsPropertyGridWrapperProps { + model: PropertyGridViewModel; +} +export class PresetsPropertyGridWrapper extends React.Component { + constructor(props: IPresetsPropertyGridWrapperProps) { + super(props); + } + render() { + const model = (this.props as IPresetsPropertyGridWrapperProps).model; + if (!model) return null; + + return ( + +
+ +
+ { ReactElementFactory.Instance.createElement("svc-property-grid", { model: model })} +
+ ); + } +} + +ReactElementFactory.Instance.registerElement("svc-presets-property-grid", (props) => { + return React.createElement(PresetsPropertyGridWrapper, props); +}); diff --git a/packages/survey-creator-react/src/side-bar/TabControl.tsx b/packages/survey-creator-react/src/side-bar/TabControl.tsx index 42a233bd97..10e80ca480 100644 --- a/packages/survey-creator-react/src/side-bar/TabControl.tsx +++ b/packages/survey-creator-react/src/side-bar/TabControl.tsx @@ -1,6 +1,6 @@ import * as React from "react"; import { Action, ActionContainer, Base } from "survey-core"; -import { SurveyElementBase, ReactElementFactory, Scroll } from "survey-react-ui"; +import { SurveyElementBase, ReactElementFactory, Scroll, SurveyActionBar } from "survey-react-ui"; import { MenuButton, TabControlModel } from "survey-creator-core"; import { TabButtonComponent } from "./TabButton"; @@ -39,7 +39,7 @@ class TabControl extends SurveyElementBase {
- +
diff --git a/packages/survey-creator-react/testCafe/presets.html b/packages/survey-creator-react/testCafe/presets.html new file mode 100644 index 0000000000..4802b04a22 --- /dev/null +++ b/packages/survey-creator-react/testCafe/presets.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/packages/survey-creator-react/tsconfig.presets.json b/packages/survey-creator-react/tsconfig.presets.json new file mode 100644 index 0000000000..979ad924c8 --- /dev/null +++ b/packages/survey-creator-react/tsconfig.presets.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "survey-creator-core": [ + "./build" + ] + } + }, + "include": [ + "./src/entries/presets.ts" + ] +} \ No newline at end of file diff --git a/packages/survey-creator-react/webpack.presets.config.js b/packages/survey-creator-react/webpack.presets.config.js new file mode 100644 index 0000000000..278ca37140 --- /dev/null +++ b/packages/survey-creator-react/webpack.presets.config.js @@ -0,0 +1,183 @@ +"use strict"; + +const webpack = require("webpack"); +const path = require("path"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +var DashedNamePlugin = require("../../webpack-dashed-name"); +const packageJson = require("./package.json"); +const fs = require("fs"); + +const year = new Date().getFullYear(); +const banner = [ + "SurveyJS Creator Presets React v" + packageJson.version, + "(c) 2015-" + year + " Devsoft Baltic OÜ - http://surveyjs.io/", + "Github: https://github.com/surveyjs/survey-creator", + "License: https://surveyjs.io/Licenses#SurveyCreator" +].join("\n"); + +module.exports = function (options) { + const buildPath = __dirname + "/build/"; + const isProductionBuild = options.buildType === "prod"; + const emitDeclarations = !!options.emitDeclarations; + const emitNonSourceFiles = !!options.emitNonSourceFiles; + + const compilerOptions = emitDeclarations ? {} : { + declaration: false, + declarationDir: null + }; + + const config = { + mode: isProductionBuild ? "production" : "development", + entry: { + "survey-creator-react-presets": path.resolve(__dirname, "./src/entries/presets.ts") + }, + resolve: { + extensions: [".ts", ".js", ".tsx", ".scss"], + plugins: [new TsconfigPathsPlugin({ configFile: "./tsconfig.json" })], + alias: { + tslib: path.join(__dirname, "./src/entries/helpers.ts") + } + }, + optimization: { + minimize: isProductionBuild + }, + module: { + rules: [ + { + test: /\.(ts|tsx)$/, + loader: "ts-loader", + options: { + configFile: options.tsConfigFile || "tsconfig.json", + compilerOptions + } + }, + { + test: /\.s(c|a)ss$/, + use: [ + MiniCssExtractPlugin.loader, + { + loader: "css-loader", + options: { + sourceMap: options.buildType !== "prod" + } + }, + { + loader: "sass-loader", + options: { + sourceMap: options.buildType !== "prod" + } + } + ] + }, + { + test: /\.html$/, + exclude: [/node_modules/, require.resolve("./index.html")], + loader: "html-loader" + }, + { + test: /\.(svg|png)$/, + use: { + loader: "url-loader", + options: {} + } + } + ] + }, + output: { + path: buildPath, + filename: "[name]" + (isProductionBuild ? ".min" : "") + ".js", + library: { + root: options.libraryName || "SurveyCreatorPresets", + amd: "[dashedname]", + commonjs: "[dashedname]", + }, + libraryTarget: "umd", + globalObject: "this", + umdNamedDefine: true + }, + externals: { + react: { + root: "React", + commonjs2: "react", + commonjs: "react", + amd: "react" + }, + "react-dom": { + root: "ReactDOM", + commonjs2: "react-dom", + commonjs: "react-dom", + amd: "react-dom" + }, + "survey-core": { + root: "Survey", + commonjs2: "survey-core", + commonjs: "survey-core", + amd: "survey-core" + }, + "survey-react-ui": { + root: "SurveyReact", + commonjs2: "survey-react-ui", + commonjs: "survey-react-ui", + amd: "survey-react-ui" + }, + "survey-creator-core": { + root: "SurveyCreatorCore", + commonjs2: "survey-creator-core", + commonjs: "survey-creator-core", + amd: "survey-creator-core" + }, + "survey-creator-core-presets": { + root: "SurveyCreatorCorePresets", + commonjs2: "survey-creator-core-presets", + commonjs: "survey-creator-core-presets", + amd: "survey-creator-core-presets" + }, + "survey-creator-react": { + root: "SurveyCreatorReact", + commonjs2: "survey-creator-react", + commonjs: "survey-creator-react", + amd: "survey-creator-react" + } + + }, + plugins: [ + new DashedNamePlugin(), + new webpack.DefinePlugin({ + "process.env.ENVIRONMENT": JSON.stringify(options.buildType), + "process.env.VERSION": JSON.stringify(packageJson.version) + }), + new MiniCssExtractPlugin({ + filename: isProductionBuild ? "[name].min.css" : "[name].css" + }), + new webpack.BannerPlugin({ + banner: banner + }) + ] + }; + + if (isProductionBuild) { + config.plugins.push = config.plugins.concat([]); + } else { + config.devtool = "source-map"; + config.plugins = config.plugins.concat([ + new webpack.LoaderOptionsPlugin({ debug: true }), + new HtmlWebpackPlugin({ + filename: "index.html", + inject: "body", + template: "index.html" + }), + ]); + config.devServer = { + static: { + directory: path.join(__dirname, "."), + }, + //host: "0.0.0.0", + compress: false, + port: 8082 + }; + } + + return config; +}; diff --git a/packages/survey-creator-vue/example/src/components/Example.vue b/packages/survey-creator-vue/example/src/components/Example.vue index 2746893878..e60ed08438 100644 --- a/packages/survey-creator-vue/example/src/components/Example.vue +++ b/packages/survey-creator-vue/example/src/components/Example.vue @@ -1,10 +1,14 @@