{
+ updateListItems('labelText', event.currentTarget.value, index);
+ }} />
+
+ updateListItems('disabled', checked, index)} />
+
+ >;
+ };
+
+ const updateStepList = (newList: any[]) => {
+ setComponent({
+ ...selectedComponent,
+ items: newList
+ });
+ };
+
+ return <>
+ setComponent({
+ ...selectedComponent,
+ isFollowFocused: checked
+ })} />
+ setComponent({
+ ...selectedComponent,
+ isCacheActive: checked
+ })} />
+ setComponent({
+ ...selectedComponent,
+ isNavigation: checked
+ })} />
+ item.id === selectedComponent.tabType)}
+ itemToString={(item: any) => (item ? item.text : '')}
+ onChange={(event: any) => setComponent({
+ ...selectedComponent,
+ tabType: event.selectedItem.id
+ })} />
+
+ >;
+};
+
+export const ATabsCodeUI = ({ selectedComponent, setComponent }: any) => {
+ setComponent({
+ ...selectedComponent,
+ codeContext: {
+ ...selectedComponent.codeContext,
+ name: event.currentTarget.value
+ }
+ });
+ }}
+/>;
+
+export const ATabs = ({
+ children,
+ componentObj,
+ fragment,
+ setFragment,
+ ...rest
+}: any) => {
+ return (
+
+ cc.id).join(' ')}>
+ <>
+
+ {
+ componentObj.items.map((step: any, index: number) => componentObj.selectedTab = index}
+ className={cx(step.className, componentObj.cssClasses?.map((cc: any) => cc.id).join(' '))}
+ disabled={step.disabled}
+ key={index}>
+ {step.labelText}
+ )
+ }
+
+
+ {
+ componentObj.items.map((step: any, index: number) => {
+ return {
+ event.stopPropagation();
+ event.preventDefault();
+ const dragObj = JSON.parse(event.dataTransfer.getData('drag-object'));
+ // update the tab content in the item list for the selected tab
+ const items = componentObj.items.map((item: any, index: any) => {
+ if (index === componentObj.selectedTab) {
+ return {
+ ...step,
+ items: [
+ ...step.items,
+ dragObj.component
+ ]
+ };
+ }
+ return item;
+ });
+ setFragment({
+ ...fragment,
+ data: updatedState(fragment.data, {
+ type: 'update',
+ component: {
+ ...componentObj,
+ items
+ }
+ })
+ }, false);
+ }}>
+ {
+ step.items && step.items.length > 0
+ ? children.filter((child: any, index: any) => index === componentObj.selectedTab)
+ :
+ }
+ ;
+ }
+ )
+ }
+
+ >
+
+
+ );
+};
+
+export const componentInfo: ComponentInfo = {
+ component: ATabs,
+ settingsUI: ATabsSettingsUI,
+ codeUI: ATabsCodeUI,
+ render: ({ componentObj, select, selected, remove, renderComponents, outline, fragment, setFragment }) =>
+ {
+ // render the child components within each tab.
+ componentObj.items.map((tab: any) => {
+ if (tab.items && tab.items.length > 0) {
+ return tab.items.map((item: any) => {
+ return renderComponents(item, outline);
+ });
+ }
+ })
+ }
+ ,
+ keywords: ['tabs', 'tab'],
+ name: 'Tabs',
+ type: 'tabs',
+ defaultComponentObj: {
+ type: 'tabs',
+ items: [
+ {
+ type: 'tab',
+ labelText: 'Tab 1',
+ items: []
+ }
+ ]
+ },
+ image,
+ codeExport: {
+ angular: {
+ latest: {
+ inputs: ({ json }) => `
+ @Input() ${nameStringToVariableString(json.codeContext?.name)}FollowFocus = ${
+ json.isFollowFocused ? json.isFollowFocused : false};
+ @Input() ${nameStringToVariableString(json.codeContext?.name)}CacheActive = ${json.isCacheActive ? json.isCacheActive : false};
+ @Input() ${nameStringToVariableString(json.codeContext?.name)}isNavigation = ${json.isNavigation ? json.isNavigation : true};
+ @Input() ${nameStringToVariableString(json.codeContext?.name)}TabType: any = "${json.tabType ? json.tabType : 'contained'}";`,
+ outputs: () => '',
+ imports: ['TabsModule'],
+ code: ({ json, fragments, jsonToTemplate, customComponentsCollections }) => {
+ return `
+ ${json.items.map((step: any) => `
+ ${step.items && step.items.length > 0
+ ? step.items.map((element: any) =>
+ jsonToTemplate(element, fragments, customComponentsCollections)).join('\n') : ''}
+ `
+ ).join('\n')}
+ `;
+ }
+ },
+ v10: {
+ inputs: ({ json }) => `
+ @Input() ${nameStringToVariableString(json.codeContext?.name)}FollowFocus = ${json.isFollowFocused ? json.isFollowFocused : false};
+ @Input() ${nameStringToVariableString(json.codeContext?.name)}CacheActive = ${json.isCacheActive ? json.isCacheActive : false};
+ @Input() ${nameStringToVariableString(json.codeContext?.name)}isNavigation = ${json.isNavigation ? json.isNavigation : true};
+ @Input() ${nameStringToVariableString(json.codeContext?.name)}TabType: any = "${json.tabType ? json.tabType : 'contained'}";`,
+ outputs: () => '',
+ imports: ['TabsModule'],
+ code: ({ json, fragments, jsonToTemplate, customComponentsCollections }) => {
+ return `
+ ${json.items.map((step: any) => `
+ ${step.items && step.items.length > 0
+ ? step.items.map((element: any) =>
+ jsonToTemplate(element, fragments, customComponentsCollections)).join('\n') : ''}
+ `
+ ).join('\n')}
+ `;
+ }
+ }
+ },
+ react: {
+ latest: {
+ imports: ['Tabs', 'Tab', 'TabList', 'TabPanels', 'TabPanel'],
+ code: ({ json, fragments, jsonToTemplate, customComponentsCollections }) => {
+ return `
+
+ ${json.items.map((step: any, index: any) => ` handleInputChange({
+ target: {
+ selectedTab: ${index}
+ }
+ })}
+ key= {${index}}
+ disabled={${step.disabled}}>
+ ${step.labelText}
+ `
+ ).join('\n')}
+
+
+ ${json.items.map((step: any) => `
+ ${step.items && step.items.length > 0
+ ? step.items.map((element: any) =>
+ jsonToTemplate(element, fragments, customComponentsCollections)).join('\n') : ''}
+ `
+ ).join('\n')}
+
+ `;
+ }
+ },
+ v10: {
+ imports: ['Tabs', 'Tab'],
+ code: ({ json, fragments, jsonToTemplate, customComponentsCollections }) => {
+ return `
+ ${json.items.map((step: any, index: any) => ` handleInputChange({
+ target: {
+ selectedTab: ${index}
+ }
+ })}
+ key= {${index}}
+ disabled={${step.disabled}}
+ label="${step.labelText}">
+ ${step.items && step.items.length > 0
+ ? step.items.map((element: any) =>
+ jsonToTemplate(element, fragments, customComponentsCollections)).join('\n') : ''}
+ `
+ ).join('\n')}
+ `;
+ }
+ }
+ }
+ }
+};
diff --git a/sdk/react/src/lib/fragment-components/index.ts b/sdk/react/src/lib/fragment-components/index.ts
index e4308a3fe..b486671a4 100644
--- a/sdk/react/src/lib/fragment-components/index.ts
+++ b/sdk/react/src/lib/fragment-components/index.ts
@@ -25,6 +25,7 @@ import * as link from './a-link';
import * as loading from './a-loading';
import * as inlineLoading from './a-inline-loading';
import * as overflowMenu from './a-overflow-menu';
+import * as tabs from './a-tabs';
// Tiles
import * as tile from './tiles/a-tile';
import * as toggle from './a-toggle';
@@ -63,7 +64,7 @@ export { ATextInput, ATextInputSettingsUI, ATextInputCodeUI } from './a-text-inp
export { AOverflowMenu, AOverflowMenuCodeUI, AOverflowMenuSettingsUI } from './a-overflow-menu';
export { ARadio, ARadioSettingsUI, ARadioCodeUI } from './a-radio';
export { ARadioGroup, ARadioGroupSettingsUI, ARadioGroupCodeUI } from './a-radio-group';
-
+export { ATabs, ATabsSettingsUI, ATabsCodeUI } from './a-tabs';
// Tiles
export { ATile, ATileCodeUI, ATileSettingsUI } from './tiles/a-tile';
export { AToggle, AToggleSettingsUI, AToggleCodeUI } from './a-toggle';
@@ -76,6 +77,7 @@ export { ARadioTile, ARadioTileCodeUI, ARadioTileSettingsUI } from './tiles/a-ra
export { ARadioTileGroup, ARadioTileGroupCodeUI, ARadioTileGroupSettingsUI } from './tiles/a-radio-tile-group';
export const allComponents = {
+ tabs,
accordion,
accordionitem,
button,