@capillarytech/blaze-ui 5.0.6 → 5.0.8

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.
Files changed (73) hide show
  1. package/.npmrc +2 -0
  2. package/CapCondition/messages.d.ts +85 -0
  3. package/CapCondition/messages.d.ts.map +1 -0
  4. package/CapConditionPreview/MIGRATION_ANALYSIS.md +70 -0
  5. package/CapConditionPreview/README.md +40 -0
  6. package/CapConditionPreview/constants.d.ts +24 -0
  7. package/CapConditionPreview/constants.d.ts.map +1 -0
  8. package/CapConditionPreview/index.d.ts +7 -0
  9. package/CapConditionPreview/index.d.ts.map +1 -0
  10. package/CapConditionPreview/index.js +132 -184
  11. package/CapConditionPreview/index.js.map +1 -1
  12. package/CapConditionPreview/tests/USE_CASES_CapConditionPreview.md +65 -0
  13. package/CapConditionPreview/types.d.ts +82 -0
  14. package/CapConditionPreview/types.d.ts.map +1 -0
  15. package/CapListLayout/index.js +193 -25
  16. package/CapListLayout/index.js.map +1 -1
  17. package/CapNavigation/index.js +6 -7
  18. package/CapNavigation/index.js.map +1 -1
  19. package/CapSteps/Status.md +40 -0
  20. package/CapSteps/index.d.ts +30 -0
  21. package/CapSteps/index.d.ts.map +1 -0
  22. package/CapSteps/index.js +657 -24
  23. package/CapSteps/index.js.map +1 -1
  24. package/CapSteps/types.d.ts +26 -0
  25. package/CapSteps/types.d.ts.map +1 -0
  26. package/CapTab/README.md +406 -0
  27. package/CapTab/Status.md +104 -0
  28. package/CapTab/index.d.ts +1 -27
  29. package/CapTab/index.d.ts.map +1 -1
  30. package/CapTab/index.js +56 -7
  31. package/CapTab/index.js.map +1 -1
  32. package/CapTab/tests/USE_CASE_GAPS.md +143 -0
  33. package/CapTab/types.d.ts +29 -0
  34. package/CapTab/types.d.ts.map +1 -0
  35. package/CapTabV3/ANALYSIS.md +60 -0
  36. package/CapTabV3/README.md +156 -0
  37. package/CapTabV3/Status.md +52 -0
  38. package/CapTabV3/index.d.ts +9 -0
  39. package/CapTabV3/index.d.ts.map +1 -0
  40. package/CapTabV3/index.js +105 -67
  41. package/CapTabV3/index.js.map +1 -1
  42. package/CapTabV3/tests/USE_CASE_GAPS.md +149 -0
  43. package/CapTabV3/types.d.ts +28 -0
  44. package/CapTabV3/types.d.ts.map +1 -0
  45. package/CapTable/README.md +160 -0
  46. package/CapTable/Status.md +41 -0
  47. package/CapTable/index.d.ts +2 -21
  48. package/CapTable/index.d.ts.map +1 -1
  49. package/CapTable/index.js +193 -25
  50. package/CapTable/index.js.map +1 -1
  51. package/CapTable/types.d.ts +46 -0
  52. package/CapTable/types.d.ts.map +1 -0
  53. package/CapTable/utils.d.ts +24 -0
  54. package/CapTable/utils.d.ts.map +1 -0
  55. package/CapTimePicker/index.js +51 -129
  56. package/CapTimePicker/index.js.map +1 -1
  57. package/CapUserProfile/index.js +6 -7
  58. package/CapUserProfile/index.js.map +1 -1
  59. package/CapVerticalGroupTable/index.js +193 -25
  60. package/CapVerticalGroupTable/index.js.map +1 -1
  61. package/index.d.ts +7 -3
  62. package/index.d.ts.map +1 -1
  63. package/index.js +1271 -233
  64. package/index.js.map +1 -1
  65. package/package.json +1 -1
  66. package/utils/getCapThemeConfig.d.ts.map +1 -1
  67. package/utils/index.js +9 -1
  68. package/utils/index.js.map +1 -1
  69. package/.DS_Store +0 -0
  70. package/CapTimePicker/index.d.ts +0 -11
  71. package/CapTimePicker/index.d.ts.map +0 -1
  72. package/CapTimePicker/types.d.ts +0 -95
  73. 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, `.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)}`, ""]);
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);
@@ -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)