diff --git a/frontend/src/lib/components/apps/components/inputs/AppSelectTab.svelte b/frontend/src/lib/components/apps/components/inputs/AppSelectTab.svelte new file mode 100644 index 0000000000..a6c8579cdd --- /dev/null +++ b/frontend/src/lib/components/apps/components/inputs/AppSelectTab.svelte @@ -0,0 +1,87 @@ + + +{#each Object.keys(components['selecttabcomponent'].initialData.configuration) as key (key)} + +{/each} + + + + +
+ + {#each resolvedConfig?.items ?? [] as item} + + {item.label} + + {/each} + +
+
diff --git a/frontend/src/lib/components/apps/editor/component/Component.svelte b/frontend/src/lib/components/apps/editor/component/Component.svelte index c94b594621..a5e961520a 100644 --- a/frontend/src/lib/components/apps/editor/component/Component.svelte +++ b/frontend/src/lib/components/apps/editor/component/Component.svelte @@ -42,6 +42,7 @@ import AppModal from '../../components/layout/AppModal.svelte' import AppSchemaForm from '../../components/buttons/AppSchemaForm.svelte' import AppStepper from '../../components/layout/AppStepper.svelte' + import AppSelectTab from '../../components/inputs/AppSelectTab.svelte' import AppConditionalWrapper from '../../components/layout/AppConditionalWrapper.svelte' export let component: AppComponent @@ -499,6 +500,15 @@ {initializing} {render} /> + {:else if component.type === 'selecttabcomponent'} + {/if} diff --git a/frontend/src/lib/components/apps/editor/component/components.ts b/frontend/src/lib/components/apps/editor/component/components.ts index 9616905758..ee0c04b618 100644 --- a/frontend/src/lib/components/apps/editor/component/components.ts +++ b/frontend/src/lib/components/apps/editor/component/components.ts @@ -117,6 +117,7 @@ export type ConditionalWrapperComponent = BaseComponent<'conditionalwrapper'> & } export type Schemaformcomponent = BaseComponent<'schemaformcomponent'> +export type SelectTabComponent = BaseComponent<'selecttabcomponent'> export type TypedComponent = | DisplayComponent @@ -161,6 +162,7 @@ export type TypedComponent = | ModalComponent | StepperComponent | Schemaformcomponent + | SelectTabComponent | ConditionalWrapperComponent export type AppComponent = BaseAppComponent & TypedComponent @@ -1792,6 +1794,44 @@ Hello \${ctx.username} } } }, + selecttabcomponent: { + name: 'Select Tab', + icon: List, + dims: '2:1-3:1' as AppComponentDimensions, + + customCss: { + tabRow: { class: '', style: '' }, + allTabs: { class: '', style: '' }, + selectedTab: { class: '', style: '' } + }, + initialData: { + verticalAlignment: 'center', + componentInput: undefined, + configuration: { + items: { + type: 'static', + fieldType: 'array', + subFieldType: 'labeledselect', + value: [ + { value: 'foo', label: 'Foo' }, + { value: 'bar', label: 'Bar' } + ] + } as StaticAppInput, + + defaultValue: { + type: 'static', + value: undefined as { value: string; label: string } | undefined, + fieldType: 'object' + }, + tabSize: { + type: 'static', + value: 'sm', + fieldType: 'select', + selectOptions: selectOptions.buttonSizeOptions + } + } + } + }, conditionalwrapper: { name: 'Conditional tabs', icon: Split, diff --git a/frontend/src/lib/components/apps/editor/component/sets.ts b/frontend/src/lib/components/apps/editor/component/sets.ts index 8c7a91952d..3c45f00e48 100644 --- a/frontend/src/lib/components/apps/editor/component/sets.ts +++ b/frontend/src/lib/components/apps/editor/component/sets.ts @@ -41,7 +41,8 @@ const inputs: ComponentSet = { 'checkboxcomponent', 'selectcomponent', 'resourceselectcomponent', - 'multiselectcomponent' + 'multiselectcomponent', + 'selecttabcomponent' ] } as const diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/quickStyleProperties.ts b/frontend/src/lib/components/apps/editor/componentsPanel/quickStyleProperties.ts index bf23dfd16f..0f3557a655 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/quickStyleProperties.ts +++ b/frontend/src/lib/components/apps/editor/componentsPanel/quickStyleProperties.ts @@ -702,5 +702,10 @@ export const quickStyleProperties: Record< schemaformcomponent: { container: containerDefaultProps, button: buttonDefaultProps + }, + selecttabcomponent: { + tabRow: containerDefaultProps, + allTabs: [typographyGrouping, sizeGrouping], + selectedTab: [typographyGrouping, sizeGrouping] } }