@capillarytech/blaze-ui 5.0.6 → 5.0.7
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/.npmrc +2 -0
- package/CapCondition/messages.d.ts +85 -0
- package/CapCondition/messages.d.ts.map +1 -0
- package/CapConditionPreview/MIGRATION_ANALYSIS.md +70 -0
- package/CapConditionPreview/README.md +40 -0
- package/CapConditionPreview/constants.d.ts +24 -0
- package/CapConditionPreview/constants.d.ts.map +1 -0
- package/CapConditionPreview/index.d.ts +7 -0
- package/CapConditionPreview/index.d.ts.map +1 -0
- package/CapConditionPreview/index.js +131 -183
- package/CapConditionPreview/index.js.map +1 -1
- package/CapConditionPreview/tests/USE_CASES_CapConditionPreview.md +65 -0
- package/CapConditionPreview/types.d.ts +82 -0
- package/CapConditionPreview/types.d.ts.map +1 -0
- package/CapListLayout/index.js +193 -25
- package/CapListLayout/index.js.map +1 -1
- package/CapNavigation/index.js +6 -7
- package/CapNavigation/index.js.map +1 -1
- package/CapSteps/Status.md +40 -0
- package/CapSteps/index.d.ts +30 -0
- package/CapSteps/index.d.ts.map +1 -0
- package/CapSteps/index.js +657 -24
- package/CapSteps/index.js.map +1 -1
- package/CapSteps/types.d.ts +26 -0
- package/CapSteps/types.d.ts.map +1 -0
- package/CapTab/README.md +406 -0
- package/CapTab/Status.md +104 -0
- package/CapTab/index.d.ts +1 -27
- package/CapTab/index.d.ts.map +1 -1
- package/CapTab/index.js +56 -7
- package/CapTab/index.js.map +1 -1
- package/CapTab/tests/USE_CASE_GAPS.md +143 -0
- package/CapTab/types.d.ts +29 -0
- package/CapTab/types.d.ts.map +1 -0
- package/CapTabV3/ANALYSIS.md +60 -0
- package/CapTabV3/README.md +156 -0
- package/CapTabV3/Status.md +52 -0
- package/CapTabV3/index.d.ts +9 -0
- package/CapTabV3/index.d.ts.map +1 -0
- package/CapTabV3/index.js +105 -67
- package/CapTabV3/index.js.map +1 -1
- package/CapTabV3/tests/USE_CASE_GAPS.md +149 -0
- package/CapTabV3/types.d.ts +28 -0
- package/CapTabV3/types.d.ts.map +1 -0
- package/CapTable/README.md +160 -0
- package/CapTable/Status.md +41 -0
- package/CapTable/index.d.ts +2 -21
- package/CapTable/index.d.ts.map +1 -1
- package/CapTable/index.js +193 -25
- package/CapTable/index.js.map +1 -1
- package/CapTable/types.d.ts +46 -0
- package/CapTable/types.d.ts.map +1 -0
- package/CapTable/utils.d.ts +24 -0
- package/CapTable/utils.d.ts.map +1 -0
- package/CapTimePicker/index.js +51 -129
- package/CapTimePicker/index.js.map +1 -1
- package/CapUserProfile/index.js +6 -7
- package/CapUserProfile/index.js.map +1 -1
- package/CapVerticalGroupTable/index.js +193 -25
- package/CapVerticalGroupTable/index.js.map +1 -1
- package/index.d.ts +7 -3
- package/index.d.ts.map +1 -1
- package/index.js +1271 -233
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/utils/getCapThemeConfig.d.ts.map +1 -1
- package/utils/index.js +9 -1
- package/utils/index.js.map +1 -1
- package/.DS_Store +0 -0
- package/CapTimePicker/index.d.ts +0 -11
- package/CapTimePicker/index.d.ts.map +0 -1
- package/CapTimePicker/types.d.ts +0 -95
- package/CapTimePicker/types.d.ts.map +0 -1
package/CapTab/index.js
CHANGED
|
@@ -86,15 +86,30 @@ var ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_require__(31601);
|
|
|
86
86
|
var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(76314);
|
|
87
87
|
var ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);
|
|
88
88
|
// Module
|
|
89
|
-
___CSS_LOADER_EXPORT___.push([module.id,
|
|
89
|
+
___CSS_LOADER_EXPORT___.push([module.id, ``, ""]);
|
|
90
90
|
// Exports
|
|
91
|
-
___CSS_LOADER_EXPORT___.locals = {
|
|
92
|
-
"cap-tab-wrapper": `cap-tab-wrapper`,
|
|
93
|
-
"slideInFromRight": `slideInFromRight`
|
|
94
|
-
};
|
|
91
|
+
___CSS_LOADER_EXPORT___.locals = {};
|
|
95
92
|
module.exports = ___CSS_LOADER_EXPORT___;
|
|
96
93
|
|
|
97
94
|
|
|
95
|
+
/***/ }),
|
|
96
|
+
|
|
97
|
+
/***/ 19224:
|
|
98
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
99
|
+
|
|
100
|
+
"use strict";
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
exports.__esModule = true;
|
|
104
|
+
exports["default"] = logDeprecationWarning;
|
|
105
|
+
var _isNil = _interopRequireDefault(__webpack_require__(69843));
|
|
106
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
107
|
+
function logDeprecationWarning(componentName, deprecatedPropName, deprecatedPropValue, replacementPropName) {
|
|
108
|
+
// @ts-ignore - process.env is provided by webpack/build tools
|
|
109
|
+
if (false) // removed by dead control flow
|
|
110
|
+
{}
|
|
111
|
+
}
|
|
112
|
+
|
|
98
113
|
/***/ }),
|
|
99
114
|
|
|
100
115
|
/***/ 21020:
|
|
@@ -328,6 +343,38 @@ function domAPI(options) {
|
|
|
328
343
|
}
|
|
329
344
|
module.exports = domAPI;
|
|
330
345
|
|
|
346
|
+
/***/ }),
|
|
347
|
+
|
|
348
|
+
/***/ 69843:
|
|
349
|
+
/***/ ((module) => {
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Checks if `value` is `null` or `undefined`.
|
|
353
|
+
*
|
|
354
|
+
* @static
|
|
355
|
+
* @memberOf _
|
|
356
|
+
* @since 4.0.0
|
|
357
|
+
* @category Lang
|
|
358
|
+
* @param {*} value The value to check.
|
|
359
|
+
* @returns {boolean} Returns `true` if `value` is nullish, else `false`.
|
|
360
|
+
* @example
|
|
361
|
+
*
|
|
362
|
+
* _.isNil(null);
|
|
363
|
+
* // => true
|
|
364
|
+
*
|
|
365
|
+
* _.isNil(void 0);
|
|
366
|
+
* // => true
|
|
367
|
+
*
|
|
368
|
+
* _.isNil(NaN);
|
|
369
|
+
* // => false
|
|
370
|
+
*/
|
|
371
|
+
function isNil(value) {
|
|
372
|
+
return value == null;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
module.exports = isNil;
|
|
376
|
+
|
|
377
|
+
|
|
331
378
|
/***/ }),
|
|
332
379
|
|
|
333
380
|
/***/ 74848:
|
|
@@ -653,6 +700,7 @@ exports["default"] = void 0;
|
|
|
653
700
|
var _antdV = __webpack_require__(64273);
|
|
654
701
|
var _classnames = _interopRequireDefault(__webpack_require__(46942));
|
|
655
702
|
var _react = _interopRequireDefault(__webpack_require__(9206));
|
|
703
|
+
var _logDeprecationWarning = _interopRequireDefault(__webpack_require__(19224));
|
|
656
704
|
var _styles = _interopRequireDefault(__webpack_require__(5020));
|
|
657
705
|
var _jsxRuntime = __webpack_require__(74848);
|
|
658
706
|
const _excluded = ["panes", "className", "animated", "type", "size", "tabPlacement", "tabPosition"];
|
|
@@ -661,8 +709,6 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
|
|
|
661
709
|
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
662
710
|
const clsPrefix = 'cap-tab-v2';
|
|
663
711
|
|
|
664
|
-
// Deprecated values from old API
|
|
665
|
-
|
|
666
712
|
// v6 TabPlacement type: 'top' | 'end' | 'bottom' | 'start'
|
|
667
713
|
// Map deprecated values to valid v6 values
|
|
668
714
|
const mapTabPlacement = value => {
|
|
@@ -726,6 +772,9 @@ const CapTab = _ref => {
|
|
|
726
772
|
tabPosition
|
|
727
773
|
} = _ref,
|
|
728
774
|
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
775
|
+
// Development warning for deprecated prop usage
|
|
776
|
+
(0, _logDeprecationWarning.default)('CapTab', 'tabPosition', tabPosition, 'tabPlacement');
|
|
777
|
+
|
|
729
778
|
// Support both new `tabPlacement` and deprecated `tabPosition` props
|
|
730
779
|
// Map old values: left → start, right → end
|
|
731
780
|
const finalTabPlacement = mapTabPlacement(tabPlacement || tabPosition);
|
package/CapTab/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CapTab/index.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,MAAkG;AAClG,MAAiG;AACjG,MAA+F;AAC/F,MAAkH;AAClH,MAA2G;AAC3G;AACA,MAA2M;AAC3M;AACA;;AAEA;;AAEA;AACA,wBAAwB,kHAAa;AACrC,iBAAiB,uGAAa;AAC9B,iBAAiB,wGAAM;AACvB,6BAA6B,sGAAkB;;AAE/C,aAAa,0GAAG,CAAC,8KAAO;;;;AAIqJ;AAC7K,OAAO,iEAAe,8KAAO,IAAI,qLAAc,GAAG,qLAAc,YAAY,EAAC;;;;;;;;;ACxB7E,kC;;;;;;;;ACAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oC;;;;;;;ACTA;AACA,+CAA+C,mBAAO,CAAC,KAA4D;AACnH,kCAAkC,mBAAO,CAAC,KAAmD;AAC7F;AACA;AACA,iGAAiG,yBAAyB,SAAS,gBAAgB,oDAAoD,gBAAgB,kBAAkB,6CAA6C,oEAAoE,4BAA4B,KAAK,2BAA2B,UAAU,GAAG,wBAAwB,WAAW,6CAA6C,8DAA8D;AACjjB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa,MAAM,mBAAO,CAAC,IAAO,6KAA6K;AAC/M,kBAAkB,UAAU,eAAe,qBAAqB,6BAA6B,0BAA0B,0DAA0D,4EAA4E,OAAO,wDAAwD,gBAAgB,GAAG,WAAW,GAAG,YAAY;;;;;;;;;ACV5V;;AAEb;AACA;AACA,E;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB;;AAEhB;AACA;;AAEA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK,KAA6B;AAClC;AACA;AACA,GAAG,SAAS,IAA4E;AACxF;AACA,EAAE,iCAAqB,EAAE,mCAAE;AAC3B;AACA,GAAG;AAAA,kGAAC;AACJ,GAAG,KAAK;AAAA,EAEN;AACF,CAAC;;;;;;;;;AC5EY;;AAEb;AACA;AACA,cAAc,KAAwC,GAAG,sBAAiB,GAAG,CAAI;AACjF;AACA;AACA;AACA;AACA,gD;;;;;;;;ACTA,oC;;;;;;;;ACAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,oDAAoD;AACpD;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wB;;;;;;;;ACrFa;;AAEb,IAAI,IAAqC;AACzC,EAAE,2CAAqE;AACvE,EAAE,KAAK;AAAA,EAEN;;;;;;;;;ACNY;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA,gDAAgD;AAChD;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sFAAsF,qBAAqB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iDAAiD,qBAAqB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sDAAsD,qBAAqB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;ACpFa;;AAEb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kC;;;;;;;;ACjCa;;AAEb;AACA;AACA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;UCnFA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA,E;;;;;WCPA,wF;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D,E;;;;;WCNA,mC;;;;;;;;;;;;;ACAA,IAAAA,MAAA,GAAAC,mBAAA;AAEA,IAAAC,WAAA,GAAAC,sBAAA,CAAAF,mBAAA;AACA,IAAAG,MAAA,GAAAD,sBAAA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","sources":["webpack://@capillarytech/blaze-ui/./components/CapTab/styles.scss?c35c","webpack://@capillarytech/blaze-ui/external commonjs2 {\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\",\"root\":\"React\"}","webpack://@capillarytech/blaze-ui/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://@capillarytech/blaze-ui/./components/CapTab/styles.scss","webpack://@capillarytech/blaze-ui/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://@capillarytech/blaze-ui/./node_modules/css-loader/dist/runtime/noSourceMaps.js","webpack://@capillarytech/blaze-ui/./node_modules/classnames/index.js","webpack://@capillarytech/blaze-ui/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://@capillarytech/blaze-ui/external commonjs2 \"antd-v5\"","webpack://@capillarytech/blaze-ui/./node_modules/style-loader/dist/runtime/singletonStyleDomAPI.js","webpack://@capillarytech/blaze-ui/./node_modules/react/jsx-runtime.js","webpack://@capillarytech/blaze-ui/./node_modules/css-loader/dist/runtime/api.js","webpack://@capillarytech/blaze-ui/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://@capillarytech/blaze-ui/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://@capillarytech/blaze-ui/webpack/bootstrap","webpack://@capillarytech/blaze-ui/webpack/runtime/compat get default export","webpack://@capillarytech/blaze-ui/webpack/runtime/define property getters","webpack://@capillarytech/blaze-ui/webpack/runtime/hasOwnProperty shorthand","webpack://@capillarytech/blaze-ui/webpack/runtime/make namespace object","webpack://@capillarytech/blaze-ui/webpack/runtime/nonce","webpack://@capillarytech/blaze-ui/./components/CapTab/index.tsx"],"sourcesContent":["\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/singletonStyleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n \n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./styles.scss\";\n \n \n\nvar options = {};\n\n;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./styles.scss\";\n export default content && content.locals ? content.locals : undefined;\n","module.exports = require(\"react\");","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","// Imports\nvar ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/noSourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.cap-tab-wrapper .ant-tabs .ant-tabs-nav .ant-tabs-tab{padding:.857rem 1.142rem;margin:0;font-weight:500}.cap-tab-wrapper .ant-tabs .ant-tabs-content-holder{overflow:hidden;position:relative}.cap-tab-wrapper .ant-tabs .ant-tabs-tabpane{animation:slideInFromRight .3s cubic-bezier(0.645, 0.045, 0.355, 1)}@keyframes slideInFromRight{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}.cap-tab-wrapper .ant-tabs .ant-tabs-content{transition:transform .3s cubic-bezier(0.645, 0.045, 0.355, 1)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"cap-tab-wrapper\": `cap-tab-wrapper`,\n\t\"slideInFromRight\": `slideInFromRight`\n};\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","\"use strict\";\n\nmodule.exports = function (i) {\n return i[1];\n};","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","module.exports = require(\"antd-v5\");","\"use strict\";\n\n/* istanbul ignore next */\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join(\"\\n\");\n };\n}();\n\n/* istanbul ignore next */\nfunction apply(styleElement, index, remove, obj) {\n var css;\n if (remove) {\n css = \"\";\n } else {\n css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n }\n\n // For old IE\n /* istanbul ignore if */\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = styleElement.childNodes;\n if (childNodes[index]) {\n styleElement.removeChild(childNodes[index]);\n }\n if (childNodes.length) {\n styleElement.insertBefore(cssNode, childNodes[index]);\n } else {\n styleElement.appendChild(cssNode);\n }\n }\n}\nvar singletonData = {\n singleton: null,\n singletonCounter: 0\n};\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") return {\n update: function update() {},\n remove: function remove() {}\n };\n\n // eslint-disable-next-line no-undef,no-use-before-define\n var styleIndex = singletonData.singletonCounter++;\n var styleElement =\n // eslint-disable-next-line no-undef,no-use-before-define\n singletonData.singleton || (\n // eslint-disable-next-line no-undef,no-use-before-define\n singletonData.singleton = options.insertStyleElement(options));\n return {\n update: function update(obj) {\n apply(styleElement, styleIndex, false, obj);\n },\n remove: function remove(obj) {\n apply(styleElement, styleIndex, true, obj);\n }\n };\n}\nmodule.exports = domAPI;","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nc = undefined;","import { Tabs } from 'antd-v5';\nimport type { TabsProps } from 'antd-v5';\nimport classNames from 'classnames';\nimport React from 'react';\n\nimport styles from './styles.scss';\n\nconst clsPrefix = 'cap-tab-v2';\n\nexport interface TabPaneData {\n key?: string;\n tab?: React.ReactNode;\n content?: React.ReactNode;\n disabled?: boolean;\n [key: string]: unknown;\n}\n\n// Deprecated values from old API\ntype DeprecatedTabPosition = 'top' | 'right' | 'bottom' | 'left';\n\n// v6 TabPlacement type: 'top' | 'end' | 'bottom' | 'start'\n// Map deprecated values to valid v6 values\nconst mapTabPlacement = (\n value: DeprecatedTabPosition | TabsProps['tabPlacement'] | undefined\n): TabsProps['tabPlacement'] => {\n if (value === 'left') return 'start';\n if (value === 'right') return 'end';\n return value as TabsProps['tabPlacement'];\n};\n\n/**\n * Generate stable fallback key based on pane content for React reconciliation\n * Uses pane.tab or pane.content to create deterministic keys\n */\nconst getStableFallbackKey = (pane: TabPaneData, idx: number): string => {\n // Try to extract string representation from tab or content\n let tabStr = '';\n let contentStr = '';\n\n if (pane.tab) {\n if (typeof pane.tab === 'string') {\n tabStr = pane.tab;\n } else if (typeof pane.tab === 'number') {\n tabStr = String(pane.tab);\n } else if (React.isValidElement(pane.tab)) {\n // Try to extract text content from React element\n const children = (pane.tab as React.ReactElement).props?.children;\n tabStr = typeof children === 'string' ? children : String(children || '');\n }\n }\n\n if (pane.content) {\n if (typeof pane.content === 'string') {\n contentStr = pane.content;\n } else if (typeof pane.content === 'number') {\n contentStr = String(pane.content);\n } else if (React.isValidElement(pane.content)) {\n // Try to extract text content from React element\n const children = (pane.content as React.ReactElement).props?.children;\n contentStr = typeof children === 'string' ? children : String(children || '');\n }\n }\n\n // Create deterministic composite key from tab/content\n // This ensures same content = same key even if order changes\n if (tabStr) {\n return `tab-${tabStr.slice(0, 20)}-${idx}`;\n }\n if (contentStr) {\n return `content-${contentStr.slice(0, 20)}-${idx}`;\n }\n // Last resort: use index but prefix it for clarity\n return `pane-${idx}`;\n};\n\nexport interface CapTabProps\n extends Omit<TabsProps, 'items' | 'children' | 'tabPosition' | 'tabPlacement'> {\n panes?: TabPaneData[];\n className?: string;\n animated?: boolean | { inkBar?: boolean; tabPane?: boolean };\n type?: 'line' | 'card' | 'editable-card';\n /**\n * Tab placement (v6 API)\n */\n tabPlacement?: TabsProps['tabPlacement'];\n /**\n * @deprecated Use `tabPlacement` instead. Will be removed in next major version.\n * Accepts: 'top' | 'right' | 'bottom' | 'left'\n */\n tabPosition?: DeprecatedTabPosition | TabsProps['tabPlacement'];\n}\n\nconst CapTab: React.FC<CapTabProps> = ({\n panes = [],\n className,\n animated,\n type = 'line',\n size = 'middle',\n tabPlacement,\n tabPosition,\n ...rest\n}) => {\n // Support both new `tabPlacement` and deprecated `tabPosition` props\n // Map old values: left → start, right → end\n const finalTabPlacement = mapTabPlacement(tabPlacement || tabPosition);\n\n // Default: animated = true, but false when type=\"card\" (matching old behavior)\n // Convert boolean to object format for Ant Design v6\n const defaultAnimated = type !== 'card';\n const animatedValue = animated !== undefined ? animated : defaultAnimated;\n const animationConfig =\n typeof animatedValue === 'boolean'\n ? animatedValue\n ? { inkBar: true, tabPane: true }\n : false\n : animatedValue;\n\n // Convert panes to items format (v6 API)\n const items = panes.map((pane, index) => {\n const key = pane.key || getStableFallbackKey(pane, index);\n return {\n key,\n label: pane.tab,\n children: pane.content,\n disabled: pane.disabled,\n };\n });\n\n return (\n <div className={styles['cap-tab-wrapper']}>\n <div className={classNames(styles['cap-tab-v2-wrapper'], className)}>\n <Tabs\n className={classNames(styles[clsPrefix], className)}\n animated={animationConfig}\n type={type}\n size={size as TabsProps['size']}\n tabPlacement={finalTabPlacement}\n items={items}\n {...rest}\n />\n </div>\n </div>\n );\n};\n\nexport default CapTab;\n"],"names":["_antdV","require","_classnames","_interopRequireDefault","_react","_styles","_jsxRuntime","_excluded","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","_objectWithoutPropertiesLoose","indexOf","clsPrefix","mapTabPlacement","value","getStableFallbackKey","pane","idx","tabStr","contentStr","tab","String","React","isValidElement","_props","children","props","content","_props2","slice","CapTab","_ref","panes","className","animated","type","size","tabPlacement","tabPosition","rest","finalTabPlacement","defaultAnimated","animatedValue","undefined","animationConfig","inkBar","tabPane","items","map","index","key","label","disabled","jsx","styles","classNames","Tabs","_default","exports"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"CapTab/index.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,MAAkG;AAClG,MAAiG;AACjG,MAA+F;AAC/F,MAAkH;AAClH,MAA2G;AAC3G;AACA,MAA2M;AAC3M;AACA;;AAEA;;AAEA;AACA,wBAAwB,kHAAa;AACrC,iBAAiB,uGAAa;AAC9B,iBAAiB,wGAAM;AACvB,6BAA6B,sGAAkB;;AAE/C,aAAa,0GAAG,CAAC,8KAAO;;;;AAIqJ;AAC7K,OAAO,iEAAe,8KAAO,IAAI,qLAAc,GAAG,qLAAc,YAAY,EAAC;;;;;;;;;ACxB7E,kC;;;;;;;;ACAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oC;;;;;;;ACTA;AACA,+CAA+C,mBAAO,CAAC,KAA4D;AACnH,kCAAkC,mBAAO,CAAC,KAAmD;AAC7F;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACRA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,mBAAA;AAAiC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElB,SAASG,qBAAqBA,CAC3CC,aAAqB,EACrBC,kBAA0B,EAC1BC,mBAA4B,EAC5BC,mBAA2B,EACrB;EACN;EACA,IAAIC,KAAqE,EAAE;AAAA,EAI1E;AACH,C;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa,MAAM,mBAAO,CAAC,IAAO,6KAA6K;AAC/M,kBAAkB,UAAU,eAAe,qBAAqB,6BAA6B,0BAA0B,0DAA0D,4EAA4E,OAAO,wDAAwD,gBAAgB,GAAG,WAAW,GAAG,YAAY;;;;;;;;;ACV5V;;AAEb;AACA;AACA,E;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB;;AAEhB;AACA;;AAEA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK,KAA6B;AAClC;AACA;AACA,GAAG,SAAS,IAA4E;AACxF;AACA,EAAE,iCAAqB,EAAE,mCAAE;AAC3B;AACA,GAAG;AAAA,kGAAC;AACJ,GAAG,KAAK;AAAA,EAEN;AACF,CAAC;;;;;;;;;AC5EY;;AAEb;AACA;AACA,cAAc,KAAwC,GAAG,sBAAiB,GAAG,CAAI;AACjF;AACA;AACA;AACA;AACA,gD;;;;;;;;ACTA,oC;;;;;;;;ACAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,oDAAoD;AACpD;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wB;;;;;;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;ACxBa;;AAEb,IAAI,IAAqC;AACzC,EAAE,2CAAqE;AACvE,EAAE,KAAK;AAAA,EAEN;;;;;;;;;ACNY;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA,gDAAgD;AAChD;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sFAAsF,qBAAqB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iDAAiD,qBAAqB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sDAAsD,qBAAqB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;ACpFa;;AAEb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kC;;;;;;;;ACjCa;;AAEb;AACA;AACA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;UCnFA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iC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","sources":["webpack://@capillarytech/blaze-ui/./components/CapTab/styles.scss?c35c","webpack://@capillarytech/blaze-ui/external commonjs2 {\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\",\"root\":\"React\"}","webpack://@capillarytech/blaze-ui/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://@capillarytech/blaze-ui/./components/CapTab/styles.scss","webpack://@capillarytech/blaze-ui/./components/utils/logDeprecationWarning.ts","webpack://@capillarytech/blaze-ui/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://@capillarytech/blaze-ui/./node_modules/css-loader/dist/runtime/noSourceMaps.js","webpack://@capillarytech/blaze-ui/./node_modules/classnames/index.js","webpack://@capillarytech/blaze-ui/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://@capillarytech/blaze-ui/external commonjs2 \"antd-v5\"","webpack://@capillarytech/blaze-ui/./node_modules/style-loader/dist/runtime/singletonStyleDomAPI.js","webpack://@capillarytech/blaze-ui/./node_modules/lodash/isNil.js","webpack://@capillarytech/blaze-ui/./node_modules/react/jsx-runtime.js","webpack://@capillarytech/blaze-ui/./node_modules/css-loader/dist/runtime/api.js","webpack://@capillarytech/blaze-ui/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://@capillarytech/blaze-ui/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://@capillarytech/blaze-ui/webpack/bootstrap","webpack://@capillarytech/blaze-ui/webpack/runtime/compat get default export","webpack://@capillarytech/blaze-ui/webpack/runtime/define property getters","webpack://@capillarytech/blaze-ui/webpack/runtime/hasOwnProperty shorthand","webpack://@capillarytech/blaze-ui/webpack/runtime/make namespace object","webpack://@capillarytech/blaze-ui/webpack/runtime/nonce","webpack://@capillarytech/blaze-ui/./components/CapTab/index.tsx"],"sourcesContent":["\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/singletonStyleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n \n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./styles.scss\";\n \n \n\nvar options = {};\n\n;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./styles.scss\";\n export default content && content.locals ? content.locals : undefined;\n","module.exports = require(\"react\");","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","// Imports\nvar ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/noSourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ``, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {};\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","import isNil from 'lodash/isNil';\n\nexport default function logDeprecationWarning(\n componentName: string,\n deprecatedPropName: string,\n deprecatedPropValue: unknown,\n replacementPropName: string\n): void {\n // @ts-ignore - process.env is provided by webpack/build tools\n if (process.env.NODE_ENV === 'development' && !isNil(deprecatedPropValue)) {\n console.warn(\n `[${componentName}] \"${deprecatedPropName}\" is deprecated. Use \"${replacementPropName}\".`\n );\n }\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","\"use strict\";\n\nmodule.exports = function (i) {\n return i[1];\n};","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","module.exports = require(\"antd-v5\");","\"use strict\";\n\n/* istanbul ignore next */\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join(\"\\n\");\n };\n}();\n\n/* istanbul ignore next */\nfunction apply(styleElement, index, remove, obj) {\n var css;\n if (remove) {\n css = \"\";\n } else {\n css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n }\n\n // For old IE\n /* istanbul ignore if */\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = styleElement.childNodes;\n if (childNodes[index]) {\n styleElement.removeChild(childNodes[index]);\n }\n if (childNodes.length) {\n styleElement.insertBefore(cssNode, childNodes[index]);\n } else {\n styleElement.appendChild(cssNode);\n }\n }\n}\nvar singletonData = {\n singleton: null,\n singletonCounter: 0\n};\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") return {\n update: function update() {},\n remove: function remove() {}\n };\n\n // eslint-disable-next-line no-undef,no-use-before-define\n var styleIndex = singletonData.singletonCounter++;\n var styleElement =\n // eslint-disable-next-line no-undef,no-use-before-define\n singletonData.singleton || (\n // eslint-disable-next-line no-undef,no-use-before-define\n singletonData.singleton = options.insertStyleElement(options));\n return {\n update: function update(obj) {\n apply(styleElement, styleIndex, false, obj);\n },\n remove: function remove(obj) {\n apply(styleElement, styleIndex, true, obj);\n }\n };\n}\nmodule.exports = domAPI;","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nmodule.exports = isNil;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nc = undefined;","import { Tabs } from 'antd-v5';\nimport type { TabsProps } from 'antd-v5';\nimport classNames from 'classnames';\nimport React from 'react';\n\nimport logDeprecationWarning from '../utils/logDeprecationWarning';\n\nimport styles from './styles.scss';\nimport type { CapTabProps, DeprecatedTabPosition, TabPaneData } from './types';\n\nconst clsPrefix = 'cap-tab-v2';\n\n// v6 TabPlacement type: 'top' | 'end' | 'bottom' | 'start'\n// Map deprecated values to valid v6 values\nconst mapTabPlacement = (\n value: DeprecatedTabPosition | TabsProps['tabPlacement'] | undefined\n): TabsProps['tabPlacement'] => {\n if (value === 'left') return 'start';\n if (value === 'right') return 'end';\n return value as TabsProps['tabPlacement'];\n};\n\n/**\n * Generate stable fallback key based on pane content for React reconciliation\n * Uses pane.tab or pane.content to create deterministic keys\n */\nconst getStableFallbackKey = (pane: TabPaneData, idx: number): string => {\n // Try to extract string representation from tab or content\n let tabStr = '';\n let contentStr = '';\n\n if (pane.tab) {\n if (typeof pane.tab === 'string') {\n tabStr = pane.tab;\n } else if (typeof pane.tab === 'number') {\n tabStr = String(pane.tab);\n } else if (React.isValidElement(pane.tab)) {\n // Try to extract text content from React element\n const children = (pane.tab as React.ReactElement).props?.children;\n tabStr = typeof children === 'string' ? children : String(children || '');\n }\n }\n\n if (pane.content) {\n if (typeof pane.content === 'string') {\n contentStr = pane.content;\n } else if (typeof pane.content === 'number') {\n contentStr = String(pane.content);\n } else if (React.isValidElement(pane.content)) {\n // Try to extract text content from React element\n const children = (pane.content as React.ReactElement).props?.children;\n contentStr = typeof children === 'string' ? children : String(children || '');\n }\n }\n\n // Create deterministic composite key from tab/content\n // This ensures same content = same key even if order changes\n if (tabStr) {\n return `tab-${tabStr.slice(0, 20)}-${idx}`;\n }\n if (contentStr) {\n return `content-${contentStr.slice(0, 20)}-${idx}`;\n }\n // Last resort: use index but prefix it for clarity\n return `pane-${idx}`;\n};\n\nconst CapTab: React.FC<CapTabProps> = ({\n panes = [],\n className,\n animated,\n type = 'line',\n size = 'middle',\n tabPlacement,\n tabPosition,\n ...rest\n}) => {\n // Development warning for deprecated prop usage\n logDeprecationWarning('CapTab', 'tabPosition', tabPosition, 'tabPlacement');\n\n // Support both new `tabPlacement` and deprecated `tabPosition` props\n // Map old values: left → start, right → end\n const finalTabPlacement = mapTabPlacement(tabPlacement || tabPosition);\n\n // Default: animated = true, but false when type=\"card\" (matching old behavior)\n // Convert boolean to object format for Ant Design v6\n const defaultAnimated = type !== 'card';\n const animatedValue = animated !== undefined ? animated : defaultAnimated;\n const animationConfig =\n typeof animatedValue === 'boolean'\n ? animatedValue\n ? { inkBar: true, tabPane: true }\n : false\n : animatedValue;\n\n // Convert panes to items format (v6 API)\n const items = panes.map((pane, index) => {\n const key = pane.key || getStableFallbackKey(pane, index);\n return {\n key,\n label: pane.tab,\n children: pane.content,\n disabled: pane.disabled,\n };\n });\n\n return (\n <div className={styles['cap-tab-wrapper']}>\n <div className={classNames(styles['cap-tab-v2-wrapper'], className)}>\n <Tabs\n className={classNames(styles[clsPrefix], className)}\n animated={animationConfig}\n type={type}\n size={size as TabsProps['size']}\n tabPlacement={finalTabPlacement}\n items={items}\n {...rest}\n />\n </div>\n </div>\n );\n};\n\nexport default CapTab;\n"],"names":["_isNil","_interopRequireDefault","require","e","__esModule","default","logDeprecationWarning","componentName","deprecatedPropName","deprecatedPropValue","replacementPropName","process","env","NODE_ENV","isNil","console","warn","_antdV","_classnames","_react","_logDeprecationWarning","_styles","_jsxRuntime","_excluded","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","_objectWithoutPropertiesLoose","indexOf","clsPrefix","mapTabPlacement","value","getStableFallbackKey","pane","idx","tabStr","contentStr","tab","String","React","isValidElement","_props","children","props","content","_props2","slice","CapTab","_ref","panes","className","animated","type","size","tabPlacement","tabPosition","rest","finalTabPlacement","defaultAnimated","animatedValue","undefined","animationConfig","inkBar","tabPane","items","map","index","key","label","disabled","jsx","styles","classNames","Tabs","_default","exports"],"sourceRoot":""}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# CapTab Use Case Gaps Analysis
|
|
2
|
+
|
|
3
|
+
## Phase 0: Google Sheets Access
|
|
4
|
+
|
|
5
|
+
**Status**: ⚠️ **Unable to access Google Sheets**
|
|
6
|
+
|
|
7
|
+
- MCP Server `google_sheets` was not available
|
|
8
|
+
- Spreadsheet ID: `1Xt8l8Q6Hw0cUYV65SlGvGcPnOtzprr0fukDR9UWJ3kg`
|
|
9
|
+
- Tab: `CapTab`
|
|
10
|
+
|
|
11
|
+
**Action Required**: Manual review of Google Sheets to compare use cases against component implementation.
|
|
12
|
+
|
|
13
|
+
**Note**: Tests were created based on component implementation analysis, existing Storybook stories, and standard tab component requirements.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Phase 2: Test Implementation
|
|
18
|
+
|
|
19
|
+
**Status**: ✅ **Complete & Optimized**
|
|
20
|
+
|
|
21
|
+
**Test Coverage**: Comprehensive unit tests implemented covering:
|
|
22
|
+
- Default rendering and initialization
|
|
23
|
+
- Prop variations (types, sizes, placements, animations) - consolidated with `it.each`
|
|
24
|
+
- User interactions (click, keyboard navigation, focus) - consolidated with `it.each`
|
|
25
|
+
- Callbacks and event handlers
|
|
26
|
+
- Edge cases (empty states, null/undefined values, ReactNode handling) - consolidated
|
|
27
|
+
- Accessibility (ARIA attributes, keyboard navigation)
|
|
28
|
+
- Backward compatibility (deprecated props)
|
|
29
|
+
- Data flow and state management
|
|
30
|
+
- Conditional rendering logic - consolidated with `it.each`
|
|
31
|
+
- Key generation for panes without explicit keys (including ReactNode edge cases)
|
|
32
|
+
- Wrapper structure and CSS classes
|
|
33
|
+
- Animation config edge cases
|
|
34
|
+
- mapTabPlacement edge cases
|
|
35
|
+
|
|
36
|
+
**Optimizations Applied**:
|
|
37
|
+
- Removed duplicate tests (consolidated ~159 tests to ~102 tests)
|
|
38
|
+
- Used `it.each` for repetitive test patterns
|
|
39
|
+
- Consolidated similar edge case tests
|
|
40
|
+
- Added missing coverage for key generation edge cases (ReactNode without children, minimal panes)
|
|
41
|
+
- Improved test maintainability and readability
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Phase 1: Use Cases NOT Fulfilled by CapTab
|
|
46
|
+
|
|
47
|
+
Based on component analysis, the following use cases are **NOT** currently supported:
|
|
48
|
+
|
|
49
|
+
### 1. **Loading States**
|
|
50
|
+
- ❌ **Loading indicator**: No loading state for tabs or tab content
|
|
51
|
+
- ❌ **Skeleton loading**: No skeleton/placeholder while content loads
|
|
52
|
+
- ❌ **Async content loading**: No built-in support for lazy loading tab content
|
|
53
|
+
|
|
54
|
+
### 2. **Error States**
|
|
55
|
+
- ❌ **Error handling**: No error state display for failed tab content
|
|
56
|
+
- ❌ **Error boundaries**: No error boundary integration for tab panes
|
|
57
|
+
- ❌ **Retry mechanisms**: No retry functionality for failed content
|
|
58
|
+
|
|
59
|
+
### 3. **Empty States**
|
|
60
|
+
- ❌ **Custom empty state**: No custom empty state message when panes array is empty
|
|
61
|
+
- ❌ **Empty tab content**: No empty state for individual tab panes with no content
|
|
62
|
+
- ❌ **Empty state callbacks**: No callback when empty state is displayed
|
|
63
|
+
|
|
64
|
+
### 4. **Advanced Interactions**
|
|
65
|
+
- ❌ **Drag and drop**: No ability to reorder tabs via drag and drop
|
|
66
|
+
- ❌ **Tab closing**: No built-in close button for tabs (except editable-card type)
|
|
67
|
+
- ❌ **Tab duplication**: No ability to duplicate tabs
|
|
68
|
+
- ❌ **Tab context menu**: No right-click context menu for tabs
|
|
69
|
+
- ❌ **Tab tooltips**: No tooltip support for tab labels
|
|
70
|
+
|
|
71
|
+
### 5. **Customization**
|
|
72
|
+
- ❌ **Custom tab icons**: No built-in icon prop support (requires ReactNode)
|
|
73
|
+
- ❌ **Tab badges/notifications**: No badge or notification count display
|
|
74
|
+
- ❌ **Custom tab styling per pane**: All tabs use same styling
|
|
75
|
+
- ❌ **Tab width customization**: No per-tab width control
|
|
76
|
+
- ❌ **Tab alignment options**: Limited alignment options beyond centered
|
|
77
|
+
|
|
78
|
+
### 6. **Data Features**
|
|
79
|
+
- ❌ **Tab persistence**: No localStorage/sessionStorage persistence
|
|
80
|
+
- ❌ **Tab state management**: No built-in state management integration
|
|
81
|
+
- ❌ **Tab analytics**: No analytics/tracking hooks
|
|
82
|
+
- ❌ **Tab validation**: No validation before tab switch
|
|
83
|
+
- ❌ **Tab dependencies**: No way to show/enforce tab dependencies
|
|
84
|
+
|
|
85
|
+
### 7. **Accessibility Enhancements**
|
|
86
|
+
- ❌ **Custom ARIA labels**: No per-tab ARIA label customization
|
|
87
|
+
- ❌ **Screen reader announcements**: No custom announcements for tab changes
|
|
88
|
+
- ❌ **Focus management**: Limited focus management options
|
|
89
|
+
- ❌ **Skip links**: No skip-to-content links
|
|
90
|
+
|
|
91
|
+
### 8. **Performance Features**
|
|
92
|
+
- ❌ **Lazy loading**: No lazy loading for tab content
|
|
93
|
+
- ❌ **Virtual scrolling**: No virtual scrolling for many tabs
|
|
94
|
+
- ❌ **Content preloading**: No preloading for adjacent tabs
|
|
95
|
+
- ❌ **Memoization helpers**: No built-in memoization for tab content
|
|
96
|
+
|
|
97
|
+
### 9. **Integration Features**
|
|
98
|
+
- ❌ **URL synchronization**: No URL hash/query param sync
|
|
99
|
+
- ❌ **Router integration**: No direct router integration
|
|
100
|
+
- ❌ **Form integration**: No form state preservation across tabs
|
|
101
|
+
- ❌ **Multi-tab selection**: No multi-select mode
|
|
102
|
+
|
|
103
|
+
### 10. **Developer Experience**
|
|
104
|
+
- ❌ **Tab refs**: No ref forwarding for individual tabs
|
|
105
|
+
- ❌ **Tab lifecycle hooks**: No onMount/onUnmount callbacks per tab
|
|
106
|
+
- ❌ **Tab validation callbacks**: No beforeChange validation
|
|
107
|
+
- ❌ **Tab animation callbacks**: No animation start/end callbacks
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Component Capabilities (Verified)
|
|
112
|
+
|
|
113
|
+
### ✅ **Supported Features**:
|
|
114
|
+
- ✅ Basic tab rendering with panes prop
|
|
115
|
+
- ✅ Multiple tab types (line, card, editable-card)
|
|
116
|
+
- ✅ Tab sizes (small, middle, large)
|
|
117
|
+
- ✅ Tab placements (top, bottom, start, end)
|
|
118
|
+
- ✅ Controlled and uncontrolled modes
|
|
119
|
+
- ✅ Disabled tabs
|
|
120
|
+
- ✅ Custom className
|
|
121
|
+
- ✅ Animation configuration (boolean or object)
|
|
122
|
+
- ✅ ReactNode support for tab labels and content
|
|
123
|
+
- ✅ Backward compatibility with deprecated props
|
|
124
|
+
- ✅ onChange callback for tab switching
|
|
125
|
+
- ✅ onEdit callback for editable-card type
|
|
126
|
+
- ✅ Stable key generation for panes without keys
|
|
127
|
+
- ✅ All Ant Design Tabs props via rest spread
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Recommendations
|
|
132
|
+
|
|
133
|
+
1. **High Priority**: Add loading states and error handling for better UX
|
|
134
|
+
2. **Medium Priority**: Add URL synchronization and router integration
|
|
135
|
+
3. **Low Priority**: Add advanced features like drag-and-drop and tab badges
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Notes
|
|
140
|
+
|
|
141
|
+
- Component is a wrapper around Ant Design v6 Tabs
|
|
142
|
+
- Most missing features can be implemented by consumers using Ant Design props
|
|
143
|
+
- Focus should be on features that require component-level logic
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { TabsProps } from 'antd-v5';
|
|
2
|
+
import type React from 'react';
|
|
3
|
+
export interface TabPaneData {
|
|
4
|
+
key?: string;
|
|
5
|
+
tab?: React.ReactNode;
|
|
6
|
+
content?: React.ReactNode;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
export type DeprecatedTabPosition = 'top' | 'right' | 'bottom' | 'left';
|
|
11
|
+
export interface CapTabProps extends Omit<TabsProps, 'items' | 'children' | 'tabPosition' | 'tabPlacement'> {
|
|
12
|
+
panes?: TabPaneData[];
|
|
13
|
+
className?: string;
|
|
14
|
+
animated?: boolean | {
|
|
15
|
+
inkBar?: boolean;
|
|
16
|
+
tabPane?: boolean;
|
|
17
|
+
};
|
|
18
|
+
type?: 'line' | 'card' | 'editable-card';
|
|
19
|
+
/**
|
|
20
|
+
* Tab placement (v6 API)
|
|
21
|
+
*/
|
|
22
|
+
tabPlacement?: TabsProps['tabPlacement'];
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated Use `tabPlacement` instead. Will be removed in next major version.
|
|
25
|
+
* Accepts: 'top' | 'right' | 'bottom' | 'left'
|
|
26
|
+
*/
|
|
27
|
+
tabPosition?: DeprecatedTabPosition | TabsProps['tabPlacement'];
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../components/CapTab/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExE,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,CAAC;IAC9E,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7D,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,eAAe,CAAC;IACzC;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACzC;;;OAGG;IACH,WAAW,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;CACjE"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Analysis Report for CapTabV3
|
|
2
|
+
|
|
3
|
+
## 1. Antd Style Overrides Found
|
|
4
|
+
|
|
5
|
+
| Line # | Old Override | Token Path | Token Value |
|
|
6
|
+
|--------|-------------|------------|-------------|
|
|
7
|
+
| 8 | `.ant-tabs-nav .ant-tabs-tab { padding: $CAP_SPACE_12 $CAP_SPACE_16 }` | `components.Tabs.itemPadding` | `'12px 16px'` (0.857rem 1.142rem) |
|
|
8
|
+
| 9 | `.ant-tabs-nav .ant-tabs-tab { font-weight: $FONT_WEIGHT_MEDIUM }` | `components.Tabs.itemFontWeight` | `500` |
|
|
9
|
+
| 10 | `.ant-tabs-nav .ant-tabs-tab { color: $FONT_COLOR_02 }` | `components.Tabs.colorText` | `#5e6c84` (already set) |
|
|
10
|
+
| 13 | `.ant-tabs-nav .ant-tabs-tab-active { color: $FONT_COLOR_01 }` | `components.Tabs.itemActiveColor` | `#091e42` (already set) |
|
|
11
|
+
| 16 | `.ant-tabs-nav .ant-tabs-tab:hover { color: $FONT_COLOR_01 }` | `components.Tabs.itemHoverColor` | `#091e42` (already set) |
|
|
12
|
+
| 17 | `.ant-tabs-nav .ant-tabs-tab:hover { background-color: #faf9f4 }` | `components.Tabs.itemHoverBg` | `#faf9f4` |
|
|
13
|
+
| 23 | `.ant-tabs-tab-disabled.ant-tabs-tab-active { color: $FONT_COLOR_03 }` | `components.Tabs.itemSelectedColorDisabled` | `#97a0af` |
|
|
14
|
+
| 25 | `.ant-tabs-tab-disabled { color: $FONT_COLOR_04 }` | `components.Tabs.colorTextDisabled` | `#b3bac5` (needs override) |
|
|
15
|
+
| 33 | `.ant-tabs-card .ant-tabs-tab-active { color: $FONT_COLOR_01 }` | `components.Tabs.itemSelectedColor` | `#091e42` (already set) |
|
|
16
|
+
| 37 | `.ant-tabs-ink-bar { background-color: $CAP_G01 }` | `components.Tabs.inkBarColor` | `#091e42` (already set) |
|
|
17
|
+
|
|
18
|
+
**Total overrides found**: 10
|
|
19
|
+
**New tokens needed**: `itemPadding`, `itemFontWeight`, `itemHoverBg`, `itemSelectedColorDisabled`, `colorTextDisabled` override
|
|
20
|
+
|
|
21
|
+
## 2. API Breaking Changes
|
|
22
|
+
|
|
23
|
+
**CRITICAL**: Reference `MIGRATION_CHANGELOG_TEMPLATE.md` for Ant Design prop deprecations.
|
|
24
|
+
|
|
25
|
+
| Old API | New API | Affected Props | Source |
|
|
26
|
+
|---------|---------|----------------|--------|
|
|
27
|
+
| `tabPosition` | `tabPlacement` | `tabPosition` prop | Ant Design v6 Tabs API |
|
|
28
|
+
| `TabPane` children | `items` prop | Internal implementation | Ant Design v6 Tabs API |
|
|
29
|
+
|
|
30
|
+
**Reference**: Ant Design v6 Tabs component uses `tabPlacement` instead of `tabPosition`, and `items` prop instead of `TabPane` children.
|
|
31
|
+
|
|
32
|
+
## 3. Backward Compatibility Plan
|
|
33
|
+
|
|
34
|
+
**CRITICAL**: Follow the format in `MIGRATION_CHANGELOG_TEMPLATE.md` for documenting deprecated props.
|
|
35
|
+
|
|
36
|
+
| Deprecated Prop | Replacement | Fallback Logic | Documentation Source |
|
|
37
|
+
|----------------|-------------|----------------|----------------------|
|
|
38
|
+
| `tabPosition` | `tabPlacement` | `tabPlacement ?? tabPosition` with value mapping (`left` → `start`, `right` → `end`) | Ant Design v6 Tabs API |
|
|
39
|
+
|
|
40
|
+
**Reference**: The component already implements backward compatibility for `tabPosition` prop with value mapping.
|
|
41
|
+
|
|
42
|
+
## 4. Type Definitions Needed
|
|
43
|
+
|
|
44
|
+
- ✅ `CapTabV3Props` - Already exists in types.ts
|
|
45
|
+
- ✅ `TabPaneData` - Already exists in types.ts
|
|
46
|
+
- ✅ `DeprecatedTabPosition` - Already exists in types.ts
|
|
47
|
+
|
|
48
|
+
All required types are already defined in types.ts.
|
|
49
|
+
|
|
50
|
+
## 5. DOM Structure Analysis (CRITICAL)
|
|
51
|
+
|
|
52
|
+
- **Original DOM structure**: Based on current implementation, the component wraps `Tabs` in a `Row` component with className `cap-tab-v3-wrapper`
|
|
53
|
+
- **Wrapper elements**: `Row` wrapper exists in current implementation
|
|
54
|
+
- **Component hierarchy**: `Row` → `Tabs` (with className `cap-tab-v3`)
|
|
55
|
+
- **Planned changes**:
|
|
56
|
+
- Remove `Row` wrapper if it wasn't in original (need to verify original component)
|
|
57
|
+
- Keep `Tabs` component structure
|
|
58
|
+
- Preserve className handling
|
|
59
|
+
|
|
60
|
+
**Note**: Need to verify if `Row` wrapper existed in original cap-ui-library component. If not, it should be removed to preserve exact DOM structure.
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# CapTabV3
|
|
2
|
+
|
|
3
|
+
CapTabV3 component migrated from Ant Design v3 to v6.
|
|
4
|
+
|
|
5
|
+
## Migration Summary
|
|
6
|
+
|
|
7
|
+
This component has been migrated to use Ant Design v6 APIs and design tokens.
|
|
8
|
+
|
|
9
|
+
## Breaking Changes
|
|
10
|
+
|
|
11
|
+
**No breaking changes** - The component maintains **100% backward compatibility** with existing code. Deprecated Ant Design APIs (`tabPosition` prop) continue to work exactly as before. However, deprecated APIs will show console warnings in development mode and should be migrated to the new API for future compatibility.
|
|
12
|
+
|
|
13
|
+
## Deprecated Props
|
|
14
|
+
|
|
15
|
+
The following Ant Design component APIs are deprecated but still supported for backward compatibility:
|
|
16
|
+
|
|
17
|
+
### `tabPosition` (Ant Design Tabs Component)
|
|
18
|
+
|
|
19
|
+
- **Status:** ⚠️ Deprecated
|
|
20
|
+
- **Ant Design Component:** Tabs
|
|
21
|
+
- **Deprecated Prop:** `tabPosition`
|
|
22
|
+
- **Replacement:** Use `tabPlacement` prop instead
|
|
23
|
+
- **Migration:** Replace `tabPosition` with `tabPlacement` (note: `left` → `start`, `right` → `end`)
|
|
24
|
+
- **Removal:** Will be removed in next major version
|
|
25
|
+
|
|
26
|
+
**Before (Deprecated):**
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import CapTabV3 from '@capillarytech/blaze-ui';
|
|
30
|
+
|
|
31
|
+
<CapTabV3
|
|
32
|
+
panes={panes}
|
|
33
|
+
tabPosition="left"
|
|
34
|
+
/>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**After (Recommended):**
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import CapTabV3 from '@capillarytech/blaze-ui';
|
|
41
|
+
|
|
42
|
+
<CapTabV3
|
|
43
|
+
panes={panes}
|
|
44
|
+
tabPlacement="start"
|
|
45
|
+
/>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Value Mapping:**
|
|
49
|
+
- `left` → `start`
|
|
50
|
+
- `right` → `end`
|
|
51
|
+
- `top` → `top` (unchanged)
|
|
52
|
+
- `bottom` → `bottom` (unchanged)
|
|
53
|
+
|
|
54
|
+
**Note:** A deprecation warning will be shown in development mode when using `tabPosition` instead of `tabPlacement`.
|
|
55
|
+
|
|
56
|
+
### Internal Implementation: `TabPane` Component (Ant Design Tabs Component)
|
|
57
|
+
|
|
58
|
+
- **Status:** ⚠️ Deprecated (Internal Implementation)
|
|
59
|
+
- **Ant Design Component:** Tabs
|
|
60
|
+
- **Deprecated API:** `TabPane` children pattern
|
|
61
|
+
- **Replacement:** Ant Design v6 uses `items` prop instead
|
|
62
|
+
- **Note:** This is an internal implementation detail. Consumers should continue using the `panes` prop as before. The component handles the conversion internally.
|
|
63
|
+
|
|
64
|
+
**Consumer Impact:** None - The component internally converts `panes` prop to the new `items` format. No changes required for consumers.
|
|
65
|
+
|
|
66
|
+
## Deprecated APIs Summary
|
|
67
|
+
|
|
68
|
+
| Deprecated API | Ant Design Component | Replacement | Removal Version |
|
|
69
|
+
|----------------|---------------------|-------------|----------------|
|
|
70
|
+
| `tabPosition` prop | Tabs | `tabPlacement` prop | Next major version |
|
|
71
|
+
| `TabPane` children (internal) | Tabs | `items` prop (internal) | Next major version |
|
|
72
|
+
|
|
73
|
+
## Backward Compatibility
|
|
74
|
+
|
|
75
|
+
- `tabPosition` prop is still accepted and automatically mapped to `tabPlacement`
|
|
76
|
+
- A deprecation warning will be shown in development mode when using `tabPosition`
|
|
77
|
+
- All existing code using `tabPosition` will continue to work without modifications
|
|
78
|
+
- The component internally handles conversion from `panes` prop to Ant Design v6 `items` format
|
|
79
|
+
|
|
80
|
+
## Prop Changes
|
|
81
|
+
|
|
82
|
+
| Prop | Status | Notes |
|
|
83
|
+
|------|--------|-------|
|
|
84
|
+
| `panes` | ✅ Unchanged | Array of tab panes with key, tab label, content, and optional disabled state |
|
|
85
|
+
| `activeKey` | ✅ Unchanged | Controlled active tab key |
|
|
86
|
+
| `onTabChange` | ✅ Unchanged | Callback function called when tab changes |
|
|
87
|
+
| `className` | ✅ Unchanged | Custom CSS class name |
|
|
88
|
+
| `tabPlacement` | ✅ New | Preferred prop name for tab placement (v6 API) |
|
|
89
|
+
| `tabPosition` | ⚠️ Deprecated | Use `tabPlacement` instead. Still supported for backward compatibility |
|
|
90
|
+
| All other Ant Design Tabs props | ✅ Unchanged | Passed through to underlying Tabs component |
|
|
91
|
+
|
|
92
|
+
## Migration Guide
|
|
93
|
+
|
|
94
|
+
1. **Replace `tabPosition` prop with `tabPlacement`:**
|
|
95
|
+
```tsx
|
|
96
|
+
// Before
|
|
97
|
+
<CapTabV3 panes={panes} tabPosition="left" />
|
|
98
|
+
|
|
99
|
+
// After
|
|
100
|
+
<CapTabV3 panes={panes} tabPlacement="start" />
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
2. **Update value mappings:**
|
|
104
|
+
- `left` → `start`
|
|
105
|
+
- `right` → `end`
|
|
106
|
+
- `top` → `top` (unchanged)
|
|
107
|
+
- `bottom` → `bottom` (unchanged)
|
|
108
|
+
|
|
109
|
+
3. **No changes required for `panes` prop** - The component handles internal conversion automatically.
|
|
110
|
+
|
|
111
|
+
## Usage Examples
|
|
112
|
+
|
|
113
|
+
### Basic Usage
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
import CapTabV3 from '@capillarytech/blaze-ui';
|
|
117
|
+
|
|
118
|
+
<CapTabV3
|
|
119
|
+
panes={[
|
|
120
|
+
{
|
|
121
|
+
key: '1',
|
|
122
|
+
tab: 'Tab 1',
|
|
123
|
+
content: <div>Content for Tab 1</div>,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
key: '2',
|
|
127
|
+
tab: 'Tab 2',
|
|
128
|
+
content: <div>Content for Tab 2</div>,
|
|
129
|
+
},
|
|
130
|
+
]}
|
|
131
|
+
/>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### With Tab Placement (v6 API)
|
|
135
|
+
|
|
136
|
+
```tsx
|
|
137
|
+
<CapTabV3
|
|
138
|
+
panes={panes}
|
|
139
|
+
tabPlacement="start"
|
|
140
|
+
/>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Backward Compatibility
|
|
144
|
+
|
|
145
|
+
```tsx
|
|
146
|
+
// Old API still works (deprecated)
|
|
147
|
+
<CapTabV3 panes={panes} tabPosition="left" />
|
|
148
|
+
|
|
149
|
+
// New API (recommended)
|
|
150
|
+
<CapTabV3 panes={panes} tabPlacement="start" />
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## References
|
|
154
|
+
|
|
155
|
+
- [Ant Design Tabs Component](https://ant.design/components/tabs)
|
|
156
|
+
- [Ant Design v6 Migration Guide](https://ant.design/docs/react/migration-v6)
|