xmlui 0.10.20 → 0.10.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/{index-Ckhnrf1F.mjs → index-BaUZuvtZ.mjs} +1472 -1289
- package/dist/lib/index.css +1 -1
- package/dist/lib/{initMock-qnCFw6Zc.mjs → initMock-BVLjWJxZ.mjs} +1 -1
- package/dist/lib/xmlui.d.ts +32 -0
- package/dist/lib/xmlui.mjs +1 -1
- package/dist/metadata/{collectedComponentMetadata-Dg7P-zOz.mjs → collectedComponentMetadata-MZbCI1Ki.mjs} +1463 -1281
- package/dist/metadata/{initMock-ZyyFNOpL.mjs → initMock-BkgwDrCY.mjs} +1 -1
- package/dist/metadata/style.css +1 -1
- package/dist/metadata/xmlui-metadata.mjs +1 -1
- package/dist/metadata/xmlui-metadata.umd.js +3 -3
- package/dist/scripts/package.json +3 -6
- package/dist/scripts/src/components/App/App.js +4 -4
- package/dist/scripts/src/components/App/AppNative.js +1 -1
- package/dist/scripts/src/components/ComponentProvider.js +30 -2
- package/dist/scripts/src/components/DateInput/DateInputNative.js +0 -1
- package/dist/scripts/src/components/Form/FormNative.js +0 -1
- package/dist/scripts/src/components/IFrame/IFrameNative.js +0 -2
- package/dist/scripts/src/components/Tabs/TabContext.js +26 -17
- package/dist/scripts/src/components/Tabs/TabItemNative.js +7 -2
- package/dist/scripts/src/components/Tabs/Tabs.js +22 -3
- package/dist/scripts/src/components/Tabs/Tabs.spec.js +362 -0
- package/dist/scripts/src/components/Tabs/TabsNative.js +28 -4
- package/dist/scripts/src/components/Text/Text.js +5 -1
- package/dist/scripts/src/components/Text/Text.spec.js +317 -0
- package/dist/scripts/src/components/Text/TextNative.js +112 -1
- package/dist/scripts/src/components/TimeInput/TimeInputNative.js +0 -1
- package/dist/scripts/src/components/Timer/TimerNative.js +0 -1
- package/dist/scripts/src/components/Tree/TreeNative.js +7 -12
- package/dist/scripts/src/components-core/rendering/ComponentAdapter.js +2 -3
- package/dist/standalone/xmlui-standalone.es.d.ts +34 -0
- package/dist/standalone/xmlui-standalone.umd.js +35 -35
- package/package.json +3 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xmlui",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.22",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"start-test-bed": "cd src/testing/infrastructure && xmlui start",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"@types/color": "3.0.6",
|
|
55
55
|
"@vitejs/plugin-react": "4.3.0",
|
|
56
56
|
"adm-zip": "0.5.10",
|
|
57
|
-
"axios": "1.
|
|
57
|
+
"axios": "1.12.0",
|
|
58
58
|
"chroma-js": "^3.1.2",
|
|
59
59
|
"classnames": "2.5.1",
|
|
60
60
|
"cmdk": "^1.0.4",
|
|
@@ -95,8 +95,6 @@
|
|
|
95
95
|
"react-sticky-el": "^2.1.1",
|
|
96
96
|
"react-textarea-autosize": "8.5.3",
|
|
97
97
|
"react-time-picker": "^8.0.2",
|
|
98
|
-
"react-virtualized-auto-sizer": "1.0.24",
|
|
99
|
-
"react-window": "1.8.10",
|
|
100
98
|
"recharts": "^2.15.1",
|
|
101
99
|
"rehype-raw": "^7.0.0",
|
|
102
100
|
"remark-gfm": "^4.0.1",
|
|
@@ -106,7 +104,7 @@
|
|
|
106
104
|
"turndown": "^7.2.0",
|
|
107
105
|
"unist-util-visit": "^5.0.0",
|
|
108
106
|
"use-context-selector": "1.4.1",
|
|
109
|
-
"virtua": "0.40.0",
|
|
107
|
+
"virtua": "^0.40.0",
|
|
110
108
|
"vite-plugin-lib-inject-css": "1.3.0",
|
|
111
109
|
"vite-plugin-svgr": "4.2.0",
|
|
112
110
|
"vscode-languageserver": "^9.0.1",
|
|
@@ -131,7 +129,6 @@
|
|
|
131
129
|
"@types/react-datepicker": "4.19.5",
|
|
132
130
|
"@types/react-dom": "18.2.8",
|
|
133
131
|
"@types/react-measure": "^2.0.8",
|
|
134
|
-
"@types/react-window": "1.8.8",
|
|
135
132
|
"@types/yargs": "17.0.31",
|
|
136
133
|
"@typescript-eslint/eslint-plugin": "8.15.0",
|
|
137
134
|
"@typescript-eslint/parser": "8.15.0",
|
|
@@ -121,7 +121,7 @@ exports.AppMd = (0, metadata_helpers_1.createMetadata)({
|
|
|
121
121
|
},
|
|
122
122
|
},
|
|
123
123
|
});
|
|
124
|
-
function AppNode({ node, extractValue, renderChild, className, lookupEventHandler }) {
|
|
124
|
+
function AppNode({ node, extractValue, renderChild, className, lookupEventHandler, registerComponentApi }) {
|
|
125
125
|
// --- Use ref to track if we've already processed the navigation to avoid duplicates in strict mode
|
|
126
126
|
const processedNavRef = (0, react_1.useRef)(false);
|
|
127
127
|
// --- Memoize the layout type to avoid unnecessary re-extraction
|
|
@@ -330,7 +330,7 @@ function AppNode({ node, extractValue, renderChild, className, lookupEventHandle
|
|
|
330
330
|
const renderedFooter = (0, react_1.useMemo)(() => renderChild(Footer), [Footer, renderChild]);
|
|
331
331
|
const renderedNavPanel = (0, react_1.useMemo)(() => renderChild(NavPanel), [NavPanel, renderChild]);
|
|
332
332
|
const renderedContent = (0, react_1.useMemo)(() => renderChild(restChildren), [restChildren, renderChild]);
|
|
333
|
-
return ((0, jsx_runtime_1.jsxs)(AppNative_1.App, Object.assign({}, appProps, { header: renderedHeader, footer: renderedFooter, navPanel: renderedNavPanel, navPanelDef: NavPanel, logoContentDef: node.props.logoTemplate, renderChild: renderChild, children: [renderedContent, (0, jsx_runtime_1.jsx)(SearchIndexCollector, { Pages: Pages, renderChild: renderChild })] })));
|
|
333
|
+
return ((0, jsx_runtime_1.jsxs)(AppNative_1.App, Object.assign({}, appProps, { header: renderedHeader, footer: renderedFooter, navPanel: renderedNavPanel, navPanelDef: NavPanel, logoContentDef: node.props.logoTemplate, renderChild: renderChild, registerComponentApi: registerComponentApi, children: [renderedContent, (0, jsx_runtime_1.jsx)(SearchIndexCollector, { Pages: Pages, renderChild: renderChild })] })));
|
|
334
334
|
}
|
|
335
335
|
const HIDDEN_STYLE = {
|
|
336
336
|
position: "absolute",
|
|
@@ -457,8 +457,8 @@ function PageIndexer({ Page, renderChild, onIndexed, }) {
|
|
|
457
457
|
// console.log(`PageIndexer (${pageUrl}): Rendering content for ref population.`);
|
|
458
458
|
return (0, jsx_runtime_1.jsx)("div", { ref: contentRef, children: renderChild(Page.children) });
|
|
459
459
|
}
|
|
460
|
-
exports.appRenderer = (0, renderers_1.createComponentRenderer)(COMP, exports.AppMd, ({ node, extractValue, renderChild, className, lookupEventHandler }) => {
|
|
461
|
-
return ((0, jsx_runtime_1.jsx)(AppNode, { node: node, renderChild: renderChild, extractValue: extractValue, className: className, lookupEventHandler: lookupEventHandler }));
|
|
460
|
+
exports.appRenderer = (0, renderers_1.createComponentRenderer)(COMP, exports.AppMd, ({ node, extractValue, renderChild, className, lookupEventHandler, registerComponentApi }) => {
|
|
461
|
+
return ((0, jsx_runtime_1.jsx)(AppNode, { node: node, renderChild: renderChild, extractValue: extractValue, className: className, lookupEventHandler: lookupEventHandler, registerComponentApi: registerComponentApi }));
|
|
462
462
|
});
|
|
463
463
|
// --- Process the entire navigation tree recursively and build hierarchy
|
|
464
464
|
function processNavItems(items, parentHierarchy, extractValue) {
|
|
@@ -44,7 +44,7 @@ exports.defaultProps = {
|
|
|
44
44
|
onMessageReceived: lodash_es_1.noop,
|
|
45
45
|
};
|
|
46
46
|
function App(_a) {
|
|
47
|
-
var { children, style = constants_1.EMPTY_OBJECT, layout, loggedInUser, scrollWholePage = exports.defaultProps.scrollWholePage, noScrollbarGutters = exports.defaultProps.noScrollbarGutters, onReady = exports.defaultProps.onReady, onMessageReceived = exports.defaultProps.onMessageReceived, header, navPanel, footer, navPanelDef, logoContentDef, logo, logoDark, logoLight, defaultTone, defaultTheme, autoDetectTone = exports.defaultProps.autoDetectTone, renderChild, name, className, applyDefaultContentPadding } = _a, rest = __rest(_a, ["children", "style", "layout", "loggedInUser", "scrollWholePage", "noScrollbarGutters", "onReady", "onMessageReceived", "header", "navPanel", "footer", "navPanelDef", "logoContentDef", "logo", "logoDark", "logoLight", "defaultTone", "defaultTheme", "autoDetectTone", "renderChild", "name", "className", "applyDefaultContentPadding"]);
|
|
47
|
+
var { children, style = constants_1.EMPTY_OBJECT, layout, loggedInUser, scrollWholePage = exports.defaultProps.scrollWholePage, noScrollbarGutters = exports.defaultProps.noScrollbarGutters, onReady = exports.defaultProps.onReady, onMessageReceived = exports.defaultProps.onMessageReceived, header, navPanel, footer, navPanelDef, logoContentDef, logo, logoDark, logoLight, defaultTone, defaultTheme, autoDetectTone = exports.defaultProps.autoDetectTone, renderChild, name, className, applyDefaultContentPadding, registerComponentApi } = _a, rest = __rest(_a, ["children", "style", "layout", "loggedInUser", "scrollWholePage", "noScrollbarGutters", "onReady", "onMessageReceived", "header", "navPanel", "footer", "navPanelDef", "logoContentDef", "logo", "logoDark", "logoLight", "defaultTone", "defaultTheme", "autoDetectTone", "renderChild", "name", "className", "applyDefaultContentPadding", "registerComponentApi"]);
|
|
48
48
|
const { getThemeVar } = (0, ThemeContext_1.useTheme)();
|
|
49
49
|
const { setActiveThemeTone, setActiveThemeId, themes } = (0, ThemeContext_1.useThemes)();
|
|
50
50
|
const mounted = (0, react_1.useRef)(false);
|
|
@@ -74,6 +74,7 @@ const FileDownloadAction_1 = require("../components-core/action/FileDownloadActi
|
|
|
74
74
|
const FileUploadAction_1 = require("../components-core/action/FileUploadAction");
|
|
75
75
|
const NavigateAction_1 = require("../components-core/action/NavigateAction");
|
|
76
76
|
const TimedAction_1 = require("../components-core/action/TimedAction");
|
|
77
|
+
const CoreBehaviors_1 = require("../components-core/behaviors/CoreBehaviors");
|
|
77
78
|
const ApiLoader_1 = require("../components-core/loader/ApiLoader");
|
|
78
79
|
const ExternalDataLoader_1 = require("../components-core/loader/ExternalDataLoader");
|
|
79
80
|
const MockLoaderRenderer_1 = require("../components-core/loader/MockLoaderRenderer");
|
|
@@ -149,7 +150,7 @@ class ComponentRegistry {
|
|
|
149
150
|
* about component registrations
|
|
150
151
|
*/
|
|
151
152
|
constructor(contributes = {}, extensionManager) {
|
|
152
|
-
var _a, _b, _c;
|
|
153
|
+
var _a, _b, _c, _d;
|
|
153
154
|
this.extensionManager = extensionManager;
|
|
154
155
|
// --- The pool of available components
|
|
155
156
|
this.pool = new Map(); // namespace -> name -> ComponentRegistryEntry;
|
|
@@ -162,6 +163,8 @@ class ComponentRegistry {
|
|
|
162
163
|
this.actionFns = new Map();
|
|
163
164
|
// --- The pool of available loader renderers
|
|
164
165
|
this.loaders = new Map();
|
|
166
|
+
// --- The pool of available behaviors
|
|
167
|
+
this.behaviors = [];
|
|
165
168
|
this.extensionRegistered = (extension) => {
|
|
166
169
|
var _a;
|
|
167
170
|
(_a = extension.components) === null || _a === void 0 ? void 0 : _a.forEach((c) => {
|
|
@@ -656,7 +659,14 @@ class ComponentRegistry {
|
|
|
656
659
|
this.registerLoaderRenderer(ExternalDataLoader_1.externalDataLoaderRenderer);
|
|
657
660
|
this.registerLoaderRenderer(MockLoaderRenderer_1.mockLoaderRenderer);
|
|
658
661
|
this.registerLoaderRenderer(DataLoader_1.dataLoaderRenderer);
|
|
659
|
-
|
|
662
|
+
this.registerBehavior(CoreBehaviors_1.tooltipBehavior);
|
|
663
|
+
this.registerBehavior(CoreBehaviors_1.animationBehavior);
|
|
664
|
+
this.registerBehavior(CoreBehaviors_1.labelBehavior);
|
|
665
|
+
// Register external behaviors from contributes
|
|
666
|
+
(_c = contributes.behaviors) === null || _c === void 0 ? void 0 : _c.forEach((behavior) => {
|
|
667
|
+
this.registerBehavior(behavior);
|
|
668
|
+
});
|
|
669
|
+
(_d = this.extensionManager) === null || _d === void 0 ? void 0 : _d.subscribeToRegistrations(this.extensionRegistered);
|
|
660
670
|
}
|
|
661
671
|
/**
|
|
662
672
|
* All theme variables used by the registered components.
|
|
@@ -761,6 +771,24 @@ class ComponentRegistry {
|
|
|
761
771
|
registerActionFn({ actionName: functionName, actionFn }) {
|
|
762
772
|
this.actionFns.set(functionName, actionFn);
|
|
763
773
|
}
|
|
774
|
+
// --- Registers a behavior
|
|
775
|
+
registerBehavior(behavior, location = "after", position) {
|
|
776
|
+
// If position is specified, insert relative to that behavior
|
|
777
|
+
if (position) {
|
|
778
|
+
const targetIndex = this.behaviors.findIndex(b => b.name === position);
|
|
779
|
+
if (targetIndex !== -1) {
|
|
780
|
+
const insertIndex = location === "before" ? targetIndex : targetIndex + 1;
|
|
781
|
+
this.behaviors.splice(insertIndex, 0, behavior);
|
|
782
|
+
return;
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
// Default: append to the end
|
|
786
|
+
this.behaviors.push(behavior);
|
|
787
|
+
}
|
|
788
|
+
// --- Returns all registered behaviors
|
|
789
|
+
getBehaviors() {
|
|
790
|
+
return this.behaviors;
|
|
791
|
+
}
|
|
764
792
|
}
|
|
765
793
|
exports.ComponentRegistry = ComponentRegistry;
|
|
766
794
|
/**
|
|
@@ -419,7 +419,6 @@ exports.DateInput = (0, react_2.forwardRef)(function DateInputNative(_a, ref) {
|
|
|
419
419
|
}
|
|
420
420
|
}, [day, month, year]);
|
|
421
421
|
// Component API registration
|
|
422
|
-
(0, react_2.useImperativeHandle)(ref, () => dateInputRef.current);
|
|
423
422
|
(0, react_2.useEffect)(() => {
|
|
424
423
|
if (registerComponentApi) {
|
|
425
424
|
registerComponentApi({
|
|
@@ -205,7 +205,6 @@ function cleanUpSubject(subject) {
|
|
|
205
205
|
const Form = (0, react_2.forwardRef)(function (_a, ref) {
|
|
206
206
|
var { formState, dispatch, initialValue = constants_1.EMPTY_OBJECT, children, style, className, enabled = true, cancelLabel = exports.defaultProps.cancelLabel, saveLabel = exports.defaultProps.saveLabel, saveInProgressLabel = exports.defaultProps.saveInProgressLabel, swapCancelAndSave, onSubmit, onCancel, onReset, onSuccess, buttonRow, id, registerComponentApi, itemLabelBreak = exports.defaultProps.itemLabelBreak, itemLabelWidth, itemLabelPosition = exports.defaultProps.itemLabelPosition, keepModalOpenOnSubmit = exports.defaultProps.keepModalOpenOnSubmit, hideButtonRowUntilDirty } = _a, rest = __rest(_a, ["formState", "dispatch", "initialValue", "children", "style", "className", "enabled", "cancelLabel", "saveLabel", "saveInProgressLabel", "swapCancelAndSave", "onSubmit", "onCancel", "onReset", "onSuccess", "buttonRow", "id", "registerComponentApi", "itemLabelBreak", "itemLabelWidth", "itemLabelPosition", "keepModalOpenOnSubmit", "hideButtonRowUntilDirty"]);
|
|
207
207
|
const formRef = (0, react_2.useRef)(null);
|
|
208
|
-
(0, react_2.useImperativeHandle)(ref, () => formRef.current);
|
|
209
208
|
const [confirmSubmitModalVisible, setConfirmSubmitModalVisible] = (0, react_2.useState)(false);
|
|
210
209
|
const requestModalFormClose = (0, ModalVisibilityContext_1.useModalFormClose)();
|
|
211
210
|
const isEnabled = enabled && !formState.submitInProgress;
|
|
@@ -22,8 +22,6 @@ const IFrame_module_scss_1 = __importDefault(require("./IFrame.module.scss"));
|
|
|
22
22
|
exports.IFrame = (0, react_1.memo)((0, react_1.forwardRef)(function IFrame(_a, ref) {
|
|
23
23
|
var { src, srcdoc, allow, name, referrerPolicy, sandbox, style, className, onLoad, registerComponentApi } = _a, rest = __rest(_a, ["src", "srcdoc", "allow", "name", "referrerPolicy", "sandbox", "style", "className", "onLoad", "registerComponentApi"]);
|
|
24
24
|
const iframeRef = (0, react_1.useRef)(null);
|
|
25
|
-
// Expose the iframe element to parent via ref
|
|
26
|
-
(0, react_1.useImperativeHandle)(ref, () => iframeRef.current, []);
|
|
27
25
|
// Register component APIs
|
|
28
26
|
(0, react_1.useEffect)(() => {
|
|
29
27
|
registerComponentApi === null || registerComponentApi === void 0 ? void 0 : registerComponentApi({
|
|
@@ -13,32 +13,41 @@ exports.TabContext = (0, react_1.createContext)({
|
|
|
13
13
|
register: (tabItem) => { },
|
|
14
14
|
unRegister: (innerId) => { },
|
|
15
15
|
activeTabId: "",
|
|
16
|
+
getTabItems: () => [],
|
|
16
17
|
});
|
|
17
18
|
function useTabContextValue() {
|
|
18
19
|
const [tabItems, setTabItems] = (0, react_1.useState)(constants_1.EMPTY_ARRAY);
|
|
20
|
+
const tabItemsRef = (0, react_1.useRef)(constants_1.EMPTY_ARRAY);
|
|
21
|
+
tabItemsRef.current = tabItems;
|
|
19
22
|
const [activeTabId, setActiveTabId] = (0, react_1.useState)("");
|
|
23
|
+
const register = (0, react_1.useCallback)((tabItem) => {
|
|
24
|
+
setTabItems((0, immer_1.default)((draft) => {
|
|
25
|
+
const existing = draft.findIndex((col) => col.innerId === tabItem.innerId);
|
|
26
|
+
if (existing < 0) {
|
|
27
|
+
draft.push(tabItem);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
draft[existing] = tabItem;
|
|
31
|
+
}
|
|
32
|
+
}));
|
|
33
|
+
}, []);
|
|
34
|
+
const unRegister = (0, react_1.useCallback)((innerId) => {
|
|
35
|
+
setTabItems((0, immer_1.default)((draft) => {
|
|
36
|
+
return draft.filter((col) => col.innerId !== innerId);
|
|
37
|
+
}));
|
|
38
|
+
}, []);
|
|
39
|
+
const getTabItems = (0, react_1.useCallback)(() => {
|
|
40
|
+
return tabItemsRef.current;
|
|
41
|
+
}, []);
|
|
20
42
|
const tabContextValue = (0, react_1.useMemo)(() => {
|
|
21
43
|
return {
|
|
22
|
-
register
|
|
23
|
-
|
|
24
|
-
const existing = draft.findIndex((col) => col.innerId === tabItem.innerId);
|
|
25
|
-
if (existing < 0) {
|
|
26
|
-
draft.push(tabItem);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
draft[existing] = tabItem;
|
|
30
|
-
}
|
|
31
|
-
}));
|
|
32
|
-
},
|
|
33
|
-
unRegister: (innerId) => {
|
|
34
|
-
setTabItems((0, immer_1.default)((draft) => {
|
|
35
|
-
return draft.filter((col) => col.innerId !== innerId);
|
|
36
|
-
}));
|
|
37
|
-
},
|
|
44
|
+
register,
|
|
45
|
+
unRegister,
|
|
38
46
|
activeTabId,
|
|
39
47
|
setActiveTabId,
|
|
48
|
+
getTabItems,
|
|
40
49
|
};
|
|
41
|
-
}, [activeTabId]);
|
|
50
|
+
}, [register, unRegister, activeTabId, getTabItems]);
|
|
42
51
|
return {
|
|
43
52
|
tabItems,
|
|
44
53
|
tabContextValue,
|
|
@@ -21,9 +21,10 @@ const react_tabs_1 = require("@radix-ui/react-tabs");
|
|
|
21
21
|
const Tabs_module_scss_1 = __importDefault(require("../Tabs/Tabs.module.scss"));
|
|
22
22
|
const TabContext_1 = require("./TabContext");
|
|
23
23
|
exports.TabItemComponent = (0, react_2.forwardRef)(function TabItemComponent(_a, forwardedRef) {
|
|
24
|
+
var _b;
|
|
24
25
|
var { children, label, headerRenderer, style, id, activated } = _a, rest = __rest(_a, ["children", "label", "headerRenderer", "style", "id", "activated"]);
|
|
25
26
|
const innerId = (0, react_2.useId)();
|
|
26
|
-
const { register, unRegister, activeTabId } = (0, TabContext_1.useTabContext)();
|
|
27
|
+
const { register, unRegister, activeTabId, getTabItems } = (0, TabContext_1.useTabContext)();
|
|
27
28
|
(0, react_2.useEffect)(() => {
|
|
28
29
|
register({
|
|
29
30
|
label,
|
|
@@ -44,5 +45,9 @@ exports.TabItemComponent = (0, react_2.forwardRef)(function TabItemComponent(_a,
|
|
|
44
45
|
}, [activeTabId, innerId, activated]);
|
|
45
46
|
if (activeTabId !== innerId)
|
|
46
47
|
return null;
|
|
47
|
-
|
|
48
|
+
// Find the index of this tab for ordering
|
|
49
|
+
const tabItems = getTabItems();
|
|
50
|
+
const tabIndex = (_b = tabItems === null || tabItems === void 0 ? void 0 : tabItems.findIndex(item => item.innerId === innerId)) !== null && _b !== void 0 ? _b : 0;
|
|
51
|
+
const contentOrder = tabIndex * 2 + 1;
|
|
52
|
+
return ((0, react_1.createElement)(react_tabs_1.Content, Object.assign({}, rest, { key: innerId, value: innerId, className: Tabs_module_scss_1.default.tabsContent, ref: forwardedRef, style: Object.assign(Object.assign({}, style), { order: contentOrder }) }), children));
|
|
48
53
|
});
|
|
@@ -24,11 +24,30 @@ exports.TabsMd = (0, metadata_helpers_1.createMetadata)({
|
|
|
24
24
|
orientation: {
|
|
25
25
|
description: `This property indicates the orientation of the component. In horizontal orientation, ` +
|
|
26
26
|
`the tab sections are laid out on the left side of the content panel, while in vertical ` +
|
|
27
|
-
`orientation, the buttons are at the top
|
|
27
|
+
`orientation, the buttons are at the top. Note: This property is ignored when ` +
|
|
28
|
+
`accordionView is set to true.`,
|
|
28
29
|
availableValues: ["horizontal", "vertical"],
|
|
29
30
|
defaultValue: TabsNative_1.defaultProps.orientation,
|
|
30
31
|
valueType: "string",
|
|
31
32
|
},
|
|
33
|
+
tabAlignment: {
|
|
34
|
+
description: `This property controls how tabs are aligned within the tab header container in ` +
|
|
35
|
+
`horizontal orientation. Use 'start' to align tabs to the left, 'end' to align to the ` +
|
|
36
|
+
`right, 'center' to center the tabs, and 'stretch' to make tabs fill the full width ` +
|
|
37
|
+
`of the header. Note: This property is ignored when orientation is set to 'vertical' ` +
|
|
38
|
+
`or when accordionView is enabled.`,
|
|
39
|
+
availableValues: ["start", "end", "center", "stretch"],
|
|
40
|
+
defaultValue: TabsNative_1.defaultProps.tabAlignment,
|
|
41
|
+
valueType: "string",
|
|
42
|
+
},
|
|
43
|
+
accordionView: {
|
|
44
|
+
description: `When enabled, displays tabs in an accordion-like view where tab headers are stacked ` +
|
|
45
|
+
`vertically and only the active tab's content is visible. Each tab header remains visible ` +
|
|
46
|
+
`and clicking a header opens its content while closing others. When enabled, the ` +
|
|
47
|
+
`orientation property is ignored.`,
|
|
48
|
+
defaultValue: TabsNative_1.defaultProps.accordionView,
|
|
49
|
+
valueType: "boolean",
|
|
50
|
+
},
|
|
32
51
|
headerTemplate: Object.assign({}, (0, metadata_helpers_1.dComponent)(`This property declares the template for the clickable tab area.`)),
|
|
33
52
|
},
|
|
34
53
|
events: {
|
|
@@ -67,10 +86,10 @@ exports.TabsMd = (0, metadata_helpers_1.createMetadata)({
|
|
|
67
86
|
},
|
|
68
87
|
});
|
|
69
88
|
exports.tabsComponentRenderer = (0, renderers_1.createComponentRenderer)(COMP, exports.TabsMd, ({ extractValue, node, renderChild, className, registerComponentApi, lookupEventHandler }) => {
|
|
70
|
-
var _a, _b, _c;
|
|
89
|
+
var _a, _b, _c, _d, _e;
|
|
71
90
|
return ((0, jsx_runtime_1.jsx)(TabsNative_1.Tabs, { id: node === null || node === void 0 ? void 0 : node.uid, className: className, headerRenderer: ((_a = node === null || node === void 0 ? void 0 : node.props) === null || _a === void 0 ? void 0 : _a.headerTemplate)
|
|
72
91
|
? (item) => ((0, jsx_runtime_1.jsx)(container_helpers_1.MemoizedItem, { node: node.props.headerTemplate, itemKey: "$header", contextVars: {
|
|
73
92
|
$header: item,
|
|
74
93
|
}, renderChild: renderChild }))
|
|
75
|
-
: undefined, activeTab: extractValue((_b = node.props) === null || _b === void 0 ? void 0 : _b.activeTab), orientation: extractValue((_c = node.props) === null || _c === void 0 ? void 0 : _c.orientation), onDidChange: lookupEventHandler("didChange"), registerComponentApi: registerComponentApi, children: renderChild(node.children) }));
|
|
94
|
+
: undefined, activeTab: extractValue((_b = node.props) === null || _b === void 0 ? void 0 : _b.activeTab), orientation: extractValue((_c = node.props) === null || _c === void 0 ? void 0 : _c.orientation), tabAlignment: extractValue((_d = node.props) === null || _d === void 0 ? void 0 : _d.tabAlignment), accordionView: extractValue((_e = node.props) === null || _e === void 0 ? void 0 : _e.accordionView), onDidChange: lookupEventHandler("didChange"), registerComponentApi: registerComponentApi, children: renderChild(node.children) }));
|
|
76
95
|
});
|