opus-toolkit-components 1.6.0 → 1.6.2

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.
@@ -108,26 +108,6 @@ module.exports = function (list, options) {
108
108
 
109
109
  /***/ }),
110
110
 
111
- /***/ 113:
112
- /***/ ((module) => {
113
-
114
-
115
-
116
- /* istanbul ignore next */
117
- function styleTagTransform(css, styleElement) {
118
- if (styleElement.styleSheet) {
119
- styleElement.styleSheet.cssText = css;
120
- } else {
121
- while (styleElement.firstChild) {
122
- styleElement.removeChild(styleElement.firstChild);
123
- }
124
- styleElement.appendChild(document.createTextNode(css));
125
- }
126
- }
127
- module.exports = styleTagTransform;
128
-
129
- /***/ }),
130
-
131
111
  /***/ 126:
132
112
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
133
113
 
@@ -397,24 +377,22 @@ if (true) {
397
377
  /***/ }),
398
378
 
399
379
  /***/ 494:
400
- /***/ ((module, __webpack_exports__, __webpack_require__) => {
401
-
402
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
403
- /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
404
- /* harmony export */ });
405
- /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);
406
- /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
407
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);
408
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
409
- // Imports
380
+ /***/ ((module) => {
410
381
 
411
382
 
412
- var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
413
- // Module
414
- ___CSS_LOADER_EXPORT___.push([module.id, `.wrapper{width:100%}.wrapper table{width:100%}.wrapper table thead th:first-of-type{border-top-left-radius:8px}.wrapper table thead th:last-of-type{border-top-right-radius:8px}.wrapper table tbody tr:last-of-type td:first-of-type{border-bottom-left-radius:8px}.wrapper table tbody tr:last-of-type td:last-of-type{border-bottom-right-radius:8px}@media(max-width: 640px){.wrapper td::before{content:attr(data-label);display:block;font-weight:600;text-transform:uppercase;margin-bottom:.25rem;color:var(--color-text-strong)}.wrapper tr{display:block}.wrapper td{display:block}.wrapper thead{display:none}.wrapper button{width:100%}}`, "",{"version":3,"sources":["webpack://./src/components/Tables/table.scss"],"names":[],"mappings":"AAAA,SACE,UAAA,CAEA,eACE,UAAA,CAII,sCACE,0BAAA,CAGF,qCACE,2BAAA,CASE,sDACE,6BAAA,CAGF,qDACE,8BAAA,CAQZ,yBACE,oBACE,wBAAA,CACA,aAAA,CACA,eAAA,CACA,wBAAA,CACA,oBAAA,CACA,8BAAA,CAGF,YACE,aAAA,CAGF,YACE,aAAA,CAGF,eACE,YAAA,CAGF,gBACE,UAAA,CAAA","sourcesContent":[".wrapper {\r\n width: 100%;\r\n\r\n table {\r\n width: 100%;\r\n\r\n thead {\r\n th {\r\n &:first-of-type {\r\n border-top-left-radius: 8px;\r\n }\r\n\r\n &:last-of-type {\r\n border-top-right-radius: 8px;\r\n }\r\n }\r\n }\r\n\r\n tbody {\r\n tr {\r\n &:last-of-type {\r\n td {\r\n &:first-of-type {\r\n border-bottom-left-radius: 8px;\r\n }\r\n\r\n &:last-of-type {\r\n border-bottom-right-radius: 8px;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n @media (max-width: 640px) {\r\n td::before {\r\n content: attr(data-label);\r\n display: block;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n margin-bottom: 0.25rem;\r\n color: var(--color-text-strong);\r\n }\r\n\r\n tr {\r\n display: block;\r\n }\r\n\r\n td {\r\n display: block;\r\n }\r\n\r\n thead {\r\n display: none;\r\n }\r\n\r\n button {\r\n width: 100%;\r\n }\r\n }\r\n}"],"sourceRoot":""}]);
415
- // Exports
416
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
417
383
 
384
+ /* istanbul ignore next */
385
+ function styleTagTransform(css, styleElement) {
386
+ if (styleElement.styleSheet) {
387
+ styleElement.styleSheet.cssText = css;
388
+ } else {
389
+ while (styleElement.firstChild) {
390
+ styleElement.removeChild(styleElement.firstChild);
391
+ }
392
+ styleElement.appendChild(document.createTextNode(css));
393
+ }
394
+ }
395
+ module.exports = styleTagTransform;
418
396
 
419
397
  /***/ }),
420
398
 
@@ -561,6 +539,28 @@ ___CSS_LOADER_EXPORT___.push([module.id, ``, "",{"version":3,"sources":[],"names
561
539
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
562
540
 
563
541
 
542
+ /***/ }),
543
+
544
+ /***/ 875:
545
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
546
+
547
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
548
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
549
+ /* harmony export */ });
550
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);
551
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
552
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);
553
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
554
+ // Imports
555
+
556
+
557
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
558
+ // Module
559
+ ___CSS_LOADER_EXPORT___.push([module.id, `.wrapper{width:100%}.wrapper table{width:100%}.wrapper table thead th:first-of-type{border-top-left-radius:8px}.wrapper table thead th:last-of-type{border-top-right-radius:8px}.wrapper table tbody tr:last-of-type td:first-of-type{border-bottom-left-radius:8px}.wrapper table tbody tr:last-of-type td:last-of-type{border-bottom-right-radius:8px}@media(max-width: 640px){.wrapper td::before{content:attr(data-label);display:block;font-weight:600;text-transform:uppercase;margin-bottom:.25rem;color:var(--color-text-strong)}.wrapper tr{display:block}.wrapper td{display:block}.wrapper thead{display:none}.wrapper button{width:100%}}`, "",{"version":3,"sources":["webpack://./src/components/Tables/table.scss"],"names":[],"mappings":"AAAA,SACE,UAAA,CAEA,eACE,UAAA,CAII,sCACE,0BAAA,CAGF,qCACE,2BAAA,CASE,sDACE,6BAAA,CAGF,qDACE,8BAAA,CAQZ,yBACE,oBACE,wBAAA,CACA,aAAA,CACA,eAAA,CACA,wBAAA,CACA,oBAAA,CACA,8BAAA,CAGF,YACE,aAAA,CAGF,YACE,aAAA,CAGF,eACE,YAAA,CAGF,gBACE,UAAA,CAAA","sourcesContent":[".wrapper {\r\n width: 100%;\r\n\r\n table {\r\n width: 100%;\r\n\r\n thead {\r\n th {\r\n &:first-of-type {\r\n border-top-left-radius: 8px;\r\n }\r\n\r\n &:last-of-type {\r\n border-top-right-radius: 8px;\r\n }\r\n }\r\n }\r\n\r\n tbody {\r\n tr {\r\n &:last-of-type {\r\n td {\r\n &:first-of-type {\r\n border-bottom-left-radius: 8px;\r\n }\r\n\r\n &:last-of-type {\r\n border-bottom-right-radius: 8px;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n @media (max-width: 640px) {\r\n td::before {\r\n content: attr(data-label);\r\n display: block;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n margin-bottom: 0.25rem;\r\n color: var(--color-text-strong);\r\n }\r\n\r\n tr {\r\n display: block;\r\n }\r\n\r\n td {\r\n display: block;\r\n }\r\n\r\n thead {\r\n display: none;\r\n }\r\n\r\n button {\r\n width: 100%;\r\n }\r\n }\r\n}"],"sourceRoot":""}]);
560
+ // Exports
561
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
562
+
563
+
564
564
  /***/ }),
565
565
 
566
566
  /***/ 908:
@@ -695,17 +695,23 @@ __webpack_require__.r(__webpack_exports__);
695
695
  // EXPORTS
696
696
  __webpack_require__.d(__webpack_exports__, {
697
697
  Accordion: () => (/* reexport */ Accordions_Accordion),
698
+ BarLayout: () => (/* reexport */ BarLayout_BarLayout),
698
699
  Button: () => (/* reexport */ Button),
699
700
  Card: () => (/* reexport */ Card),
700
701
  Checkbox: () => (/* reexport */ Checkbox),
701
702
  CookieBanner: () => (/* reexport */ Cookie),
702
703
  DatePicker: () => (/* reexport */ DatePicker),
703
704
  Dropdown: () => (/* reexport */ Dropdown),
705
+ Footer: () => (/* reexport */ Footer_Footer),
706
+ Header: () => (/* reexport */ Header_Header),
707
+ Icon: () => (/* reexport */ Icon_Icon),
704
708
  Input: () => (/* reexport */ Inputs_Input),
705
709
  Loader: () => (/* reexport */ Loader),
706
710
  Modal: () => (/* reexport */ Modals_Modal),
707
711
  Navbar: () => (/* reexport */ Navbar_Navbar),
712
+ PageTemplate: () => (/* reexport */ PageTemplate_PageTemplate),
708
713
  Pill: () => (/* reexport */ Pills_Pill),
714
+ ProfileCard: () => (/* reexport */ ProfileCard),
709
715
  RadioButton: () => (/* reexport */ Radios_RadioButton),
710
716
  Sidebar: () => (/* reexport */ Sidebar),
711
717
  Table: () => (/* reexport */ Table),
@@ -1122,26 +1128,58 @@ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
1122
1128
 
1123
1129
 
1124
1130
  const statusClasses = {
1125
- primary: 'bg-[--color-primary-btn] text-[--color-white]',
1126
- danger: 'bg-[--color-util-red] text-[--color-white]',
1127
- warning: 'bg-[--color-util-amber] text-[--color-white]',
1128
- success: 'bg-[--color-util-green] text-[--color-white]',
1129
- info: 'bg-[--color-util-blue] text-[--color-white]',
1130
- notice: 'bg-[--color-util-yellow] text-[--color-black]'
1131
+ primary: "bg-[--color-primary-btn] text-[--color-white]",
1132
+ danger: "bg-[--color-util-red] text-[--color-white]",
1133
+ warning: "bg-[--color-util-amber] text-[--color-white]",
1134
+ success: "bg-[--color-util-green] text-[--color-white]",
1135
+ info: "bg-[--color-util-blue] text-[--color-white]",
1136
+ notice: "bg-[--color-util-yellow] text-[--color-black]"
1131
1137
  };
1138
+
1139
+ /**
1140
+ * Allowed pill status values.
1141
+ * @typedef {'primary'|'danger'|'warning'|'success'|'info'|'notice'} PillStatus
1142
+ */
1143
+
1144
+ /**
1145
+ * Icon component type — any valid SVG React component.
1146
+ * @typedef {(props: React.SVGProps<SVGSVGElement>) => JSX.Element} IconComponent
1147
+ */
1148
+
1149
+ /**
1150
+ * Props for the Pill component.
1151
+ *
1152
+ * @typedef {Object} PillProps
1153
+ * @property {string} [text='']
1154
+ * Text displayed inside the pill.
1155
+ *
1156
+ * @property {PillStatus} [status='info']
1157
+ * Determines visual colors of the pill.
1158
+ *
1159
+ * @property {string} [className]
1160
+ * Additional class names.
1161
+ *
1162
+ * @property {IconComponent} [icon]
1163
+ * Optional icon displayed before the text.
1164
+ */
1165
+
1166
+ /**
1167
+ * @param {PillProps & React.HTMLAttributes<HTMLSpanElement>} props
1168
+ */
1169
+
1132
1170
  const Pill = _ref => {
1133
1171
  let {
1134
- text = '',
1135
- status = 'info',
1136
- className = '',
1172
+ text = "",
1173
+ status = "info",
1174
+ className = "",
1137
1175
  icon: Icon
1138
1176
  } = _ref;
1139
- const baseClasses = 'inline-flex items-center gap-1 text-xs font-medium px-3 py-1 rounded-full';
1177
+ const baseClasses = "inline-flex items-center gap-1 text-xs font-medium px-3 py-1 rounded-full";
1140
1178
  const statusClass = statusClasses[status] || statusClasses.info;
1141
1179
  return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)("span", {
1142
1180
  className: "".concat(baseClasses, " ").concat(statusClass, " ").concat(className),
1143
1181
  children: [Icon && /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(Icon, {
1144
- className: "w-4 h-4"
1182
+ className: "h-4 w-4"
1145
1183
  }), text]
1146
1184
  });
1147
1185
  };
@@ -1193,6 +1231,50 @@ const elementMap = {
1193
1231
  caption: "span",
1194
1232
  label: "label"
1195
1233
  };
1234
+
1235
+ /**
1236
+ * Allowed typographical variants for the Text component.
1237
+ * @typedef {'h1'|'h2'|'h3'|'h4'|'h5'|'h6'|'body'|'small'|'caption'|'label'} TextVariant
1238
+ */
1239
+
1240
+ /**
1241
+ * Polymorphic HTML element types supported in `as`.
1242
+ * @typedef {keyof JSX.IntrinsicElements | React.ComponentType<any>} TextAs
1243
+ */
1244
+
1245
+ /**
1246
+ * Props for the Text component.
1247
+ *
1248
+ * @typedef {Object} TextProps
1249
+ *
1250
+ * @property {TextVariant} [variant='body']
1251
+ * Controls the typography style.
1252
+ *
1253
+ * @property {TextAs} [as]
1254
+ * Optional override for the underlying HTML element.
1255
+ *
1256
+ * @property {string} [className]
1257
+ * Extra CSS classes.
1258
+ *
1259
+ * @property {string} [color='text-[--color-text-strong]']
1260
+ * Tailwind/text color classes.
1261
+ *
1262
+ * @property {React.ReactNode} [children]
1263
+ * Text content.
1264
+ *
1265
+ * @property {string} [name]
1266
+ * Name used to generate `data-cy`.
1267
+ *
1268
+ * @property {string} [dataCy]
1269
+ * Optional override for auto-generated data-cy attribute.
1270
+ */
1271
+
1272
+ /**
1273
+ * Text component with typography variants and polymorphic rendering.
1274
+ *
1275
+ * @param {TextProps & React.HTMLAttributes<HTMLElement>} props
1276
+ */
1277
+
1196
1278
  function Text(_ref) {
1197
1279
  let {
1198
1280
  variant = "body",
@@ -1222,54 +1304,54 @@ function Text(_ref) {
1222
1304
 
1223
1305
 
1224
1306
 
1225
- /**
1226
- * @typedef {Object} AccordionProps
1227
- *
1228
- * @property {string | React.ReactNode} title
1229
- * Title rendered inside the header.
1230
- *
1231
- * @property {Function} [handleToggle]
1232
- * Optional external toggle handler called with (index).
1233
- *
1234
- * @property {number} [activeIndex]
1235
- * Controlled active index. If provided, the accordion becomes controlled.
1236
- *
1237
- * @property {number} index
1238
- * This accordion's position in a list.
1239
- *
1240
- * @property {boolean} [isPreview]
1241
- * If true, accordion goes into preview mode.
1242
- *
1243
- * @property {boolean} [isLocked]
1244
- * If true, accordion cannot toggle.
1245
- *
1246
- * @property {Function} [onExitPreview]
1247
- * Callback fired when exiting preview mode.
1248
- *
1249
- * @property {React.ReactNode} content
1250
- * Accordion expanded content.
1251
- *
1252
- * @property {React.ReactNode} [preview]
1253
- * Rendered when in preview mode and not active.
1254
- *
1255
- * @property {boolean} [isPill]
1256
- * Whether to show a status pill.
1257
- *
1258
- * @property {string} [pillText]
1259
- * Label inside the pill.
1260
- *
1261
- * @property {'success'|'warning'|'error'|'info'|string} [pillStatus]
1262
- * Visual status for the pill.
1263
- *
1264
- * @property {React.ReactNode} [pillIcon]
1265
- * Optional icon inside the pill.
1266
- *
1267
- * @property {boolean} [disabled]
1268
- * Disables interaction with the accordion.
1307
+ /**
1308
+ * @typedef {Object} AccordionProps
1309
+ *
1310
+ * @property {string | React.ReactNode} title
1311
+ * Title rendered inside the header.
1312
+ *
1313
+ * @property {Function} [handleToggle]
1314
+ * Optional external toggle handler called with (index).
1315
+ *
1316
+ * @property {number} [activeIndex]
1317
+ * Controlled active index. If provided, the accordion becomes controlled.
1318
+ *
1319
+ * @property {number} index
1320
+ * This accordion's position in a list.
1321
+ *
1322
+ * @property {boolean} [isPreview]
1323
+ * If true, accordion goes into preview mode.
1324
+ *
1325
+ * @property {boolean} [isLocked]
1326
+ * If true, accordion cannot toggle.
1327
+ *
1328
+ * @property {Function} [onExitPreview]
1329
+ * Callback fired when exiting preview mode.
1330
+ *
1331
+ * @property {React.ReactNode} content
1332
+ * Accordion expanded content.
1333
+ *
1334
+ * @property {React.ReactNode} [preview]
1335
+ * Rendered when in preview mode and not active.
1336
+ *
1337
+ * @property {boolean} [isPill]
1338
+ * Whether to show a status pill.
1339
+ *
1340
+ * @property {string} [pillText]
1341
+ * Label inside the pill.
1342
+ *
1343
+ * @property {'success'|'warning'|'error'|'info'|string} [pillStatus]
1344
+ * Visual status for the pill.
1345
+ *
1346
+ * @property {React.ReactNode} [pillIcon]
1347
+ * Optional icon inside the pill.
1348
+ *
1349
+ * @property {boolean} [disabled]
1350
+ * Disables interaction with the accordion.
1269
1351
  */
1270
1352
 
1271
- /**
1272
- * @param {AccordionProps} props
1353
+ /**
1354
+ * @param {AccordionProps} props
1273
1355
  */
1274
1356
 
1275
1357
  const Accordion = _ref => {
@@ -1373,7 +1455,7 @@ var setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(
1373
1455
  var insertStyleElement = __webpack_require__(540);
1374
1456
  var insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement);
1375
1457
  // EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js
1376
- var styleTagTransform = __webpack_require__(113);
1458
+ var styleTagTransform = __webpack_require__(494);
1377
1459
  var styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform);
1378
1460
  // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./src/components/Buttons/button.scss
1379
1461
  var Buttons_button = __webpack_require__(833);
@@ -4191,80 +4273,80 @@ function AiTwotoneWarning (props) {
4191
4273
  // Import a spinner icon
4192
4274
 
4193
4275
 
4194
- /**
4195
- * @typedef {'primary'|'secondary'|'tertiary'|'outline'|'destructive'} ButtonRank
4276
+ /**
4277
+ * @typedef {'primary'|'secondary'|'tertiary'|'outline'|'destructive'} ButtonRank
4196
4278
  */
4197
4279
 
4198
- /**
4199
- * @typedef {'default'|'disabled'} ButtonState
4280
+ /**
4281
+ * @typedef {'default'|'disabled'} ButtonState
4200
4282
  */
4201
4283
 
4202
- /**
4203
- * @typedef {'sm'|'md'|'lg'|'xl'|string} ButtonSize
4204
- * (Supports custom tailwind text sizes too)
4284
+ /**
4285
+ * @typedef {'sm'|'md'|'lg'|'xl'|string} ButtonSize
4286
+ * (Supports custom tailwind text sizes too)
4205
4287
  */
4206
4288
 
4207
- /**
4208
- * Icon component type from react-icons or your own components
4209
- * @typedef {(props: React.SVGProps<SVGSVGElement>) => JSX.Element} IconComponent
4289
+ /**
4290
+ * Icon component type from react-icons or your own components
4291
+ * @typedef {(props: React.SVGProps<SVGSVGElement>) => JSX.Element} IconComponent
4210
4292
  */
4211
4293
 
4212
- /**
4213
- * @typedef {Object} ButtonProps
4214
- *
4215
- * @property {'button'|'submit'|'reset'} [type]
4216
- * Native button type.
4217
- *
4218
- * @property {ButtonRank} [rank]
4219
- * Visual rank: primary, secondary, etc.
4220
- *
4221
- * @property {ButtonState} [state]
4222
- * Current state (default, disabled).
4223
- *
4224
- * @property {string} [text]
4225
- * Text shown inside the button (ignored when isSaving is true).
4226
- *
4227
- * @property {ButtonSize} [size]
4228
- * Tailwind text size (sm, md, lg, xl).
4229
- *
4230
- * @property {string} [name]
4231
- * Standard HTML name attribute + for data-cy.
4232
- *
4233
- * @property {string} [dataCy]
4234
- * Override for auto-generated test selector.
4235
- *
4236
- * @property {number} [tabIndex]
4237
- *
4238
- * @property {boolean} [isFullWidth]
4239
- * Expand to full container width.
4240
- *
4241
- * @property {IconComponent} [icon]
4242
- * Optional icon component (left or right).
4243
- *
4244
- * @property {'left'|'right'} [iconPosition]
4245
- * Position of icon.
4246
- *
4247
- * @property {boolean} [isIconAnimated]
4248
- * Enables subtle translate animation on hover.
4249
- *
4250
- * @property {boolean} [isSaving]
4251
- * Shows a spinner and disables all interaction.
4252
- *
4253
- * @property {string} [savingText]
4254
- * Text shown when isSaving = true.
4255
- *
4256
- * @property {string} [className]
4257
- * Extra custom classes.
4258
- *
4259
- * @property {string} [title]
4260
- * Adds accessible label / tooltip.
4261
- *
4262
- * @property {(event: React.MouseEvent<HTMLButtonElement>) => void} [onClick]
4263
- * Click handler. Not called during saving or disabled state.
4294
+ /**
4295
+ * @typedef {Object} ButtonProps
4296
+ *
4297
+ * @property {'button'|'submit'|'reset'} [type]
4298
+ * Native button type.
4299
+ *
4300
+ * @property {ButtonRank} [rank]
4301
+ * Visual rank: primary, secondary, etc.
4302
+ *
4303
+ * @property {ButtonState} [state]
4304
+ * Current state (default, disabled).
4305
+ *
4306
+ * @property {string} [text]
4307
+ * Text shown inside the button (ignored when isSaving is true).
4308
+ *
4309
+ * @property {ButtonSize} [size]
4310
+ * Tailwind text size (sm, md, lg, xl).
4311
+ *
4312
+ * @property {string} [name]
4313
+ * Standard HTML name attribute + for data-cy.
4314
+ *
4315
+ * @property {string} [dataCy]
4316
+ * Override for auto-generated test selector.
4317
+ *
4318
+ * @property {number} [tabIndex]
4319
+ *
4320
+ * @property {boolean} [isFullWidth]
4321
+ * Expand to full container width.
4322
+ *
4323
+ * @property {IconComponent} [icon]
4324
+ * Optional icon component (left or right).
4325
+ *
4326
+ * @property {'left'|'right'} [iconPosition]
4327
+ * Position of icon.
4328
+ *
4329
+ * @property {boolean} [isIconAnimated]
4330
+ * Enables subtle translate animation on hover.
4331
+ *
4332
+ * @property {boolean} [isSaving]
4333
+ * Shows a spinner and disables all interaction.
4334
+ *
4335
+ * @property {string} [savingText]
4336
+ * Text shown when isSaving = true.
4337
+ *
4338
+ * @property {string} [className]
4339
+ * Extra custom classes.
4340
+ *
4341
+ * @property {string} [title]
4342
+ * Adds accessible label / tooltip.
4343
+ *
4344
+ * @property {(event: React.MouseEvent<HTMLButtonElement>) => void} [onClick]
4345
+ * Click handler. Not called during saving or disabled state.
4264
4346
  */
4265
4347
 
4266
- /**
4267
- * @param {ButtonProps & React.ButtonHTMLAttributes<HTMLButtonElement>} props
4348
+ /**
4349
+ * @param {ButtonProps & React.ButtonHTMLAttributes<HTMLButtonElement>} props
4268
4350
  */
4269
4351
 
4270
4352
  function Button(_ref) {
@@ -4341,29 +4423,29 @@ function clsx_r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;e
4341
4423
 
4342
4424
 
4343
4425
 
4344
- /**
4345
- * The visual intent / theme of the Card.
4346
- * @typedef {'default'|'info'|'warning'|'success'|'error'|'brand'|'brandSecondary'} CardIntent
4426
+ /**
4427
+ * The visual intent / theme of the Card.
4428
+ * @typedef {'default'|'info'|'warning'|'success'|'error'|'brand'|'brandSecondary'} CardIntent
4347
4429
  */
4348
4430
 
4349
- /**
4350
- * Props for the Card component.
4351
- *
4352
- * @typedef {Object} CardProps
4353
- * @property {CardIntent} [intent]
4354
- * Controls the background + text color theme of the card.
4355
- *
4356
- * @property {string} [className]
4357
- * Additional custom class names.
4358
- *
4359
- * @property {React.ReactNode} [children]
4360
- * Card content.
4431
+ /**
4432
+ * Props for the Card component.
4433
+ *
4434
+ * @typedef {Object} CardProps
4435
+ * @property {CardIntent} [intent]
4436
+ * Controls the background + text color theme of the card.
4437
+ *
4438
+ * @property {string} [className]
4439
+ * Additional custom class names.
4440
+ *
4441
+ * @property {React.ReactNode} [children]
4442
+ * Card content.
4361
4443
  */
4362
4444
 
4363
- /**
4364
- * Card component with typed JSDoc for TS autocomplete.
4365
- *
4366
- * @param {CardProps & React.HTMLAttributes<HTMLDivElement>} props
4445
+ /**
4446
+ * Card component with typed JSDoc for TS autocomplete.
4447
+ *
4448
+ * @param {CardProps & React.HTMLAttributes<HTMLDivElement>} props
4367
4449
  */
4368
4450
 
4369
4451
  function Card(_ref) {
@@ -4399,75 +4481,75 @@ function Input_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var
4399
4481
 
4400
4482
 
4401
4483
 
4402
- /**
4403
- * Icon component type — any React component that renders an SVG.
4404
- * @typedef {(props: React.SVGProps<SVGSVGElement>) => JSX.Element} IconComponent
4484
+ /**
4485
+ * Icon component type — any React component that renders an SVG.
4486
+ * @typedef {(props: React.SVGProps<SVGSVGElement>) => JSX.Element} IconComponent
4405
4487
  */
4406
4488
 
4407
- /**
4408
- * Custom component type for supplementary UI below input.
4409
- * Must be a React component.
4410
- * @typedef {(props: any) => JSX.Element} CustomComponent
4489
+ /**
4490
+ * Custom component type for supplementary UI below input.
4491
+ * Must be a React component.
4492
+ * @typedef {(props: any) => JSX.Element} CustomComponent
4411
4493
  */
4412
4494
 
4413
- /**
4414
- * Input component props.
4415
- *
4416
- * @typedef {Object} InputProps
4417
- *
4418
- * @property {string} label
4419
- * Label displayed above the input.
4420
- *
4421
- * @property {string} [placeholder]
4422
- *
4423
- * @property {'text'|'email'|'password'|'number'|'search'|'tel'|'url'|'date'|'datetime-local'|'month'|'time'|'week'|string} [type]
4424
- * HTML input type.
4425
- *
4426
- * @property {string|number} [tabIndex]
4427
- *
4428
- * @property {string} [title]
4429
- *
4430
- * @property {string} [name]
4431
- *
4432
- * @property {boolean} [isValid]
4433
- * Whether the field is valid — shows error text if false.
4434
- *
4435
- * @property {string} [errorMessage]
4436
- *
4437
- * @property {(event: React.ChangeEvent<HTMLInputElement>) => void} [onChange]
4438
- * Change handler using your preferred full event signature.
4439
- *
4440
- * @property {string} [className]
4441
- *
4442
- * @property {string|number} [value]
4443
- *
4444
- * @property {IconComponent} [Icon]
4445
- *
4446
- * @property {'left'|'right'} [iconPosition]
4447
- * Icon placement inside the input.
4448
- *
4449
- * @property {boolean} [isAnimated]
4450
- * Enables focus animation on the icon.
4451
- *
4452
- * @property {boolean} [required]
4453
- *
4454
- * @property {boolean} [disabled]
4455
- *
4456
- * @property {boolean} [shouldRenderCustomComponent]
4457
- *
4458
- * @property {CustomComponent} [customComponent]
4459
- *
4460
- * @property {Object<string, any>} [customComponentProps]
4461
- *
4462
- * @property {string} [dataCy]
4463
- * Override for auto-generated test selector.
4495
+ /**
4496
+ * Input component props.
4497
+ *
4498
+ * @typedef {Object} InputProps
4499
+ *
4500
+ * @property {string} label
4501
+ * Label displayed above the input.
4502
+ *
4503
+ * @property {string} [placeholder]
4504
+ *
4505
+ * @property {'text'|'email'|'password'|'number'|'search'|'tel'|'url'|'date'|'datetime-local'|'month'|'time'|'week'|string} [type]
4506
+ * HTML input type.
4507
+ *
4508
+ * @property {string|number} [tabIndex]
4509
+ *
4510
+ * @property {string} [title]
4511
+ *
4512
+ * @property {string} [name]
4513
+ *
4514
+ * @property {boolean} [isValid]
4515
+ * Whether the field is valid — shows error text if false.
4516
+ *
4517
+ * @property {string} [errorMessage]
4518
+ *
4519
+ * @property {(event: React.ChangeEvent<HTMLInputElement>) => void} [onChange]
4520
+ * Change handler using your preferred full event signature.
4521
+ *
4522
+ * @property {string} [className]
4523
+ *
4524
+ * @property {string|number} [value]
4525
+ *
4526
+ * @property {IconComponent} [Icon]
4527
+ *
4528
+ * @property {'left'|'right'} [iconPosition]
4529
+ * Icon placement inside the input.
4530
+ *
4531
+ * @property {boolean} [isAnimated]
4532
+ * Enables focus animation on the icon.
4533
+ *
4534
+ * @property {boolean} [required]
4535
+ *
4536
+ * @property {boolean} [disabled]
4537
+ *
4538
+ * @property {boolean} [shouldRenderCustomComponent]
4539
+ *
4540
+ * @property {CustomComponent} [customComponent]
4541
+ *
4542
+ * @property {Object<string, any>} [customComponentProps]
4543
+ *
4544
+ * @property {string} [dataCy]
4545
+ * Override for auto-generated test selector.
4464
4546
  */
4465
4547
 
4466
- /**
4467
- * ForwardRef Input component with complete JSDoc typings.
4468
- *
4469
- * @param {InputProps & React.InputHTMLAttributes<HTMLInputElement>} props
4470
- * @param {React.Ref<HTMLInputElement>} ref
4548
+ /**
4549
+ * ForwardRef Input component with complete JSDoc typings.
4550
+ *
4551
+ * @param {InputProps & React.InputHTMLAttributes<HTMLInputElement>} props
4552
+ * @param {React.Ref<HTMLInputElement>} ref
4471
4553
  */
4472
4554
 
4473
4555
  const Input = /*#__PURE__*/(0,external_commonjs_react_commonjs2_react_amd_react_root_React_.forwardRef)((_ref, ref) => {
@@ -4621,33 +4703,79 @@ var datepicker_update = injectStylesIntoStyleTag_default()(datepicker/* default
4621
4703
 
4622
4704
 
4623
4705
 
4706
+ /**
4707
+ * Custom change event type used by your date components.
4708
+ * @typedef {{ target: { name: string, value: string } }} DatePickerChangeEvent
4709
+ */
4710
+
4711
+ /**
4712
+ * Props for DatePicker.
4713
+ *
4714
+ * @typedef {Object} DatePickerProps
4715
+ *
4716
+ * @property {string} [initialDate]
4717
+ * Initial date value (ISO or human-readable). Converted internally.
4718
+ *
4719
+ * @property {string} [label]
4720
+ * Label above the input.
4721
+ *
4722
+ * @property {boolean} [isValid]
4723
+ * Controls validation styles + error message display.
4724
+ *
4725
+ * @property {string} [errorMessage]
4726
+ * Message shown when isValid = false.
4727
+ *
4728
+ * @property {string} [name]
4729
+ * Input field name and event target name.
4730
+ *
4731
+ * @property {(event: DatePickerChangeEvent) => void} [onChange]
4732
+ * Custom event format with `event.target.name` & `event.target.value` in ISO.
4733
+ *
4734
+ * @property {string} [value]
4735
+ * External controlled value (ISO or slash-format). Normalized automatically.
4736
+ *
4737
+ * @property {string} [className]
4738
+ *
4739
+ * @property {string} [title]
4740
+ *
4741
+ * @property {boolean} [required]
4742
+ *
4743
+ * @property {string} [dataCy]
4744
+ *
4745
+ * @property {boolean} [disabled]
4746
+ */
4747
+
4748
+ /**
4749
+ * @param {DatePickerProps & React.HTMLAttributes<HTMLDivElement>} props
4750
+ */
4751
+
4624
4752
  function DatePicker(_ref) {
4625
4753
  let {
4626
- initialDate = '',
4627
- label = 'Select a Date:',
4754
+ initialDate = "",
4755
+ label = "Select a Date:",
4628
4756
  isValid = true,
4629
- errorMessage = 'Error message',
4630
- name = 'date',
4757
+ errorMessage = "Error message",
4758
+ name = "date",
4631
4759
  onChange,
4632
4760
  value,
4633
- className = '',
4634
- title = '',
4761
+ className = "",
4762
+ title = "",
4635
4763
  required = false,
4636
4764
  dataCy,
4637
4765
  disabled = false
4638
4766
  } = _ref;
4639
- const [selectedDate, setSelectedDate] = (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useState)('');
4767
+ const [selectedDate, setSelectedDate] = (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useState)("");
4640
4768
  const inputRef = (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useRef)(null);
4641
4769
  const normalizeToInputFormat = dateString => {
4642
- if (!dateString) return '';
4643
- const [datePart] = dateString.split(' '); // Remove time if present
4770
+ if (!dateString) return "";
4771
+ const [datePart] = dateString.split(" "); // Remove time if present
4644
4772
 
4645
4773
  if (/^\d{4}-\d{2}-\d{2}$/.test(datePart)) {
4646
4774
  return datePart; // Already ISO format
4647
4775
  }
4648
- const parts = datePart.split('/');
4649
- if (parts.length !== 3) return '';
4650
- const [part1, part2, part3] = parts.map(p => p.padStart(2, '0'));
4776
+ const parts = datePart.split("/");
4777
+ if (parts.length !== 3) return "";
4778
+ const [part1, part2, part3] = parts.map(p => p.padStart(2, "0"));
4651
4779
  if (parseInt(part1, 10) > 12) {
4652
4780
  // Assume dd/MM/yyyy
4653
4781
  const [day, month, year] = [part1, part2, part3];
@@ -4682,14 +4810,14 @@ function DatePicker(_ref) {
4682
4810
  }
4683
4811
  };
4684
4812
  return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)("div", {
4685
- className: "relative flex flex-col mb-4",
4813
+ className: "relative mb-4 flex flex-col",
4686
4814
  children: [/*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)(Text, {
4687
4815
  as: "label",
4688
4816
  variant: "label",
4689
4817
  htmlFor: name,
4690
4818
  className: "mb-1",
4691
4819
  children: [label, required && /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("span", {
4692
- className: "text-[--color-util-red] ml-1",
4820
+ className: "ml-1 text-[--color-util-red]",
4693
4821
  children: "*"
4694
4822
  })]
4695
4823
  }), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("input", {
@@ -4708,15 +4836,15 @@ function DatePicker(_ref) {
4708
4836
  }),
4709
4837
  "aria-invalid": !isValid,
4710
4838
  "aria-describedby": !isValid ? "".concat(name, "-error") : undefined,
4711
- className: "w-full py-2 px-3 pr-10 rounded-md bg-[--color-input-bg] border ".concat(isValid ? 'border-[--color-stroke]' : 'border-[--color-util-red]', " text-md font-normal text-[--color-text-strong] ").concat(disabled ? 'opacity-50 cursor-not-allowed' : '', " ").concat(className)
4839
+ className: "w-full rounded-md border bg-[--color-input-bg] px-3 py-2 pr-10 ".concat(isValid ? "border-[--color-stroke]" : "border-[--color-util-red]", " text-md font-normal text-[--color-text-strong] ").concat(disabled ? "cursor-not-allowed opacity-50" : "", " ").concat(className)
4712
4840
  }), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("button", {
4713
4841
  type: "button",
4714
4842
  onClick: handleIconClick,
4715
- className: "absolute top-1/2 mt-1 right-3 transform datepicker-icon-button",
4843
+ className: "datepicker-icon-button absolute right-3 top-1/2 mt-1 transform",
4716
4844
  "aria-label": "Open date picker",
4717
4845
  disabled: disabled,
4718
4846
  children: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(esm_CalendarIcon, {
4719
- className: "w-5 h-5 ".concat(disabled ? 'text-[--color-text-disabled]' : 'text-[--color-text-weak] hover:text-[--color-primary-btn-hover]', " transition")
4847
+ className: "h-5 w-5 ".concat(disabled ? "text-[--color-text-disabled]" : "text-[--color-text-weak] hover:text-[--color-primary-btn-hover]", " transition")
4720
4848
  })
4721
4849
  }), !isValid && /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(Text, {
4722
4850
  as: "span",
@@ -4732,6 +4860,60 @@ function DatePicker(_ref) {
4732
4860
 
4733
4861
 
4734
4862
 
4863
+ /**
4864
+ * A single radio option.
4865
+ * @typedef {Object} RadioOption
4866
+ * @property {string|number} value
4867
+ * @property {string} label
4868
+ */
4869
+
4870
+ /**
4871
+ * Custom event format used by your form components.
4872
+ * @typedef {{ target: { name: string, value: string|number } }} RadioChangeEvent
4873
+ */
4874
+
4875
+ /**
4876
+ * Props for the RadioButton component.
4877
+ *
4878
+ * @typedef {Object} RadioButtonProps
4879
+ *
4880
+ * @property {string} label
4881
+ * Form label above the radio group.
4882
+ *
4883
+ * @property {RadioOption[]} [options]
4884
+ * Array of selectable radio items.
4885
+ *
4886
+ * @property {string} name
4887
+ * Name of the radio group (required for grouping).
4888
+ *
4889
+ * @property {string|number} [value]
4890
+ * Currently selected value.
4891
+ *
4892
+ * @property {(event: RadioChangeEvent) => void} [onChange]
4893
+ * Custom event handler following your design system.
4894
+ *
4895
+ * @property {string} [className]
4896
+ *
4897
+ * @property {string|number} [tabIndex]
4898
+ *
4899
+ * @property {string} [title]
4900
+ *
4901
+ * @property {boolean} [isValid]
4902
+ * Controls error message + styles.
4903
+ *
4904
+ * @property {string} [errorMessage]
4905
+ *
4906
+ * @property {boolean} [required]
4907
+ *
4908
+ * @property {string} [dataCy]
4909
+ *
4910
+ * @property {boolean} [disabled]
4911
+ */
4912
+
4913
+ /**
4914
+ * @param {RadioButtonProps & React.HTMLAttributes<HTMLDivElement>} props
4915
+ */
4916
+
4735
4917
  const RadioButton = _ref => {
4736
4918
  let {
4737
4919
  label,
@@ -4826,6 +5008,49 @@ RadioButton.displayName = "RadioButton";
4826
5008
 
4827
5009
 
4828
5010
 
5011
+ /**
5012
+ * Custom change event format used across your form components.
5013
+ * Matches your Input / Dropdown / DatePicker pattern.
5014
+ *
5015
+ * @typedef {{ target: { name: string, value: boolean } }} CheckboxChangeEvent
5016
+ */
5017
+
5018
+ /**
5019
+ * Props for Checkbox.
5020
+ *
5021
+ * @typedef {Object} CheckboxProps
5022
+ *
5023
+ * @property {string} label
5024
+ * Label displayed next to the checkbox.
5025
+ *
5026
+ * @property {string} name
5027
+ * Name used in the emitted onChange event.
5028
+ *
5029
+ * @property {(event: CheckboxChangeEvent) => void} [onChange]
5030
+ * Receives `{ target: { name, value } }`.
5031
+ *
5032
+ * @property {boolean} [value]
5033
+ * Whether the checkbox is checked.
5034
+ *
5035
+ * @property {boolean} [isValid]
5036
+ * Controls error styling.
5037
+ *
5038
+ * @property {string} [errorMessage]
5039
+ * Error text shown below the checkbox.
5040
+ *
5041
+ * @property {boolean} [disabled]
5042
+ * Prevents user interaction.
5043
+ *
5044
+ * @property {string} [title]
5045
+ *
5046
+ * @property {string} [dataCy]
5047
+ * Override test selector.
5048
+ */
5049
+
5050
+ /**
5051
+ * @param {CheckboxProps & React.HTMLAttributes<HTMLDivElement>} props
5052
+ */
5053
+
4829
5054
  function Checkbox(_ref) {
4830
5055
  let {
4831
5056
  label,
@@ -4833,7 +5058,7 @@ function Checkbox(_ref) {
4833
5058
  onChange,
4834
5059
  value = false,
4835
5060
  isValid = true,
4836
- errorMessage = '',
5061
+ errorMessage = "",
4837
5062
  disabled = false,
4838
5063
  title,
4839
5064
  dataCy
@@ -4842,7 +5067,7 @@ function Checkbox(_ref) {
4842
5067
  const errorId = "".concat(id, "-error");
4843
5068
  const showError = !isValid && errorMessage;
4844
5069
  return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)("div", {
4845
- className: "flex flex-col mb-4",
5070
+ className: "mb-4 flex flex-col",
4846
5071
  children: [/*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)("div", {
4847
5072
  className: "flex items-center",
4848
5073
  children: [/*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("input", {
@@ -4861,9 +5086,9 @@ function Checkbox(_ref) {
4861
5086
  "aria-describedby": showError ? errorId : undefined,
4862
5087
  "aria-disabled": disabled,
4863
5088
  style: {
4864
- accentColor: 'var(--color-primary-btn)'
5089
+ accentColor: "var(--color-primary-btn)"
4865
5090
  },
4866
- className: "\n mr-2 \n rounded-sm\n ".concat(disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer')
5091
+ className: "mr-2 rounded-sm ".concat(disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer")
4867
5092
  }), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(Text, {
4868
5093
  variant: "label",
4869
5094
  as: "label",
@@ -4874,13 +5099,13 @@ function Checkbox(_ref) {
4874
5099
  id: errorId,
4875
5100
  variant: "small",
4876
5101
  as: "span",
4877
- className: "text-[--color-util-red] mt-1",
5102
+ className: "mt-1 text-[--color-util-red]",
4878
5103
  children: errorMessage
4879
5104
  })]
4880
5105
  });
4881
5106
  }
4882
5107
  // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./src/components/Tables/table.scss
4883
- var table = __webpack_require__(494);
5108
+ var table = __webpack_require__(875);
4884
5109
  ;// ./src/components/Tables/table.scss
4885
5110
 
4886
5111
 
@@ -4912,37 +5137,87 @@ var table_update = injectStylesIntoStyleTag_default()(table/* default */.A, tabl
4912
5137
 
4913
5138
 
4914
5139
 
5140
+ /**
5141
+ * A column definition for the table.
5142
+ *
5143
+ * @typedef {Object} TableColumn
5144
+ * @property {string} key
5145
+ * The key used to read the row value.
5146
+ *
5147
+ * @property {string} header
5148
+ * The column header text.
5149
+ *
5150
+ * @property {(row: any) => React.ReactNode} [render]
5151
+ * Optional custom renderer for this column.
5152
+ */
5153
+
5154
+ /**
5155
+ * Props for the Table component.
5156
+ *
5157
+ * @typedef {Object} TableProps
5158
+ *
5159
+ * @property {TableColumn[]} [data=[]]
5160
+ * Array of column definitions.
5161
+ *
5162
+ * @property {any[]} [rows=[]]
5163
+ * Array of row objects. Row shape is flexible.
5164
+ *
5165
+ * @property {string} [className='']
5166
+ * Extra classes for the outer wrapper.
5167
+ *
5168
+ * @property {string} [rowClassName='']
5169
+ * Classes applied to each table row.
5170
+ *
5171
+ * @property {string} [cellClassName='']
5172
+ * Classes applied to each table cell.
5173
+ *
5174
+ * @property {string} [headRowClassName='']
5175
+ * Classes for the `<thead>` row.
5176
+ *
5177
+ * @property {string} [headCellClassName='']
5178
+ * Classes for header `<th>` cells.
5179
+ *
5180
+ * @property {(row: any, index: number) => string|number} [rowKeyExtractor]
5181
+ * Extractor for row key (defaults to index).
5182
+ */
5183
+
5184
+ /**
5185
+ * Responsive Table with JSDoc types.
5186
+ *
5187
+ * @param {TableProps & React.HTMLAttributes<HTMLDivElement>} props
5188
+ */
5189
+
4915
5190
  function Table(_ref) {
4916
5191
  let {
4917
5192
  data = [],
4918
5193
  rows = [],
4919
- className = '',
4920
- rowClassName = '',
4921
- cellClassName = '',
4922
- headRowClassName = '',
4923
- headCellClassName = '',
5194
+ className = "",
5195
+ rowClassName = "",
5196
+ cellClassName = "",
5197
+ headRowClassName = "",
5198
+ headCellClassName = "",
4924
5199
  rowKeyExtractor = (row, index) => index
4925
5200
  } = _ref;
4926
5201
  return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
4927
5202
  className: "wrapper w-full ".concat(className),
4928
5203
  children: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)("table", {
4929
- className: "\r min-w-full \r table-auto \r text-left \r border-collapse \r table",
5204
+ className: "table min-w-full table-auto border-collapse text-left",
4930
5205
  children: [/*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("thead", {
4931
5206
  className: "hidden sm:table-header-group",
4932
5207
  children: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("tr", {
4933
5208
  className: "bg-[--color-table-head-bg] ".concat(headRowClassName),
4934
5209
  children: data.map(column => /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("th", {
4935
- className: "\n border-b border-[--color-stroke] \n py-2 px-4 \n text-sm font-normal text-[--color-table-head-txt] ".concat(headCellClassName),
5210
+ className: "border-b border-[--color-stroke] px-4 py-2 text-sm font-normal text-[--color-table-head-txt] ".concat(headCellClassName),
4936
5211
  children: column.header
4937
5212
  }, column.key))
4938
5213
  })
4939
5214
  }), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("tbody", {
4940
5215
  children: rows.map((row, index) => {
4941
- const backgroundClass = index % 2 === 0 ? 'bg-[--color-table-row-bg-even]' : 'bg-[--color-table-row-bg-odd]';
5216
+ const backgroundClass = index % 2 === 0 ? "bg-[--color-table-row-bg-even]" : "bg-[--color-table-row-bg-odd]";
4942
5217
  return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("tr", {
4943
- className: "block \n sm:table-row \n mb-4 sm:mb-0 \n rounded-lg sm:rounded-none \n border sm:border-0 border-[--color-stroke] \n p-4 sm:p-0 \n shadow-sm sm:shadow-none \n hover:bg-[--color-table-row-bg-hover] ".concat(backgroundClass, " ").concat(rowClassName),
5218
+ className: "mb-4 block rounded-lg border border-[--color-stroke] p-4 shadow-sm hover:bg-[--color-table-row-bg-hover] sm:mb-0 sm:table-row sm:rounded-none sm:border-0 sm:p-0 sm:shadow-none ".concat(backgroundClass, " ").concat(rowClassName),
4944
5219
  children: data.map(column => /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("td", {
4945
- className: "\n block sm:table-cell \n lg:px-4 lg:py-2 \n text-sm text-[--color-text-weak] ".concat(cellClassName),
5220
+ className: "block text-sm text-[--color-text-weak] sm:table-cell lg:px-4 lg:py-2 ".concat(cellClassName),
4946
5221
  "data-label": column.header,
4947
5222
  children: column.render ? column.render(row) : row[column.key]
4948
5223
  }, column.key))
@@ -13500,21 +13775,83 @@ const esm_ChevronDownIcon_ForwardRef = /*#__PURE__*/ external_commonjs_react_com
13500
13775
 
13501
13776
 
13502
13777
 
13778
+ /**
13779
+ * @typedef {Object} DropdownItem
13780
+ * @property {string} label
13781
+ * @property {string|number} value
13782
+ */
13783
+
13784
+ /**
13785
+ * Icon component type — any React SVG component.
13786
+ * @typedef {(props: React.SVGProps<SVGSVGElement>) => JSX.Element} IconComponent
13787
+ */
13788
+
13789
+ /**
13790
+ * Custom event type emitted by your onChange (matching your pattern).
13791
+ * @typedef {{ target: { name: string, value: string|number } }} DropdownChangeEvent
13792
+ */
13793
+
13794
+ /**
13795
+ * @typedef {Object} DropdownProps
13796
+ *
13797
+ * @property {DropdownItem[]} [items]
13798
+ * Array of dropdown options.
13799
+ *
13800
+ * @property {string} [label]
13801
+ * Label above the dropdown.
13802
+ *
13803
+ * @property {boolean} [isValid]
13804
+ * Whether the field is valid.
13805
+ *
13806
+ * @property {boolean} [required]
13807
+ * Whether a * is appended.
13808
+ *
13809
+ * @property {string} [placeholder]
13810
+ *
13811
+ * @property {string} [name]
13812
+ *
13813
+ * @property {string} [className]
13814
+ *
13815
+ * @property {string} [title]
13816
+ *
13817
+ * @property {string|number} [tabIndex]
13818
+ *
13819
+ * @property {(event: DropdownChangeEvent) => void} [onChange]
13820
+ * Uses your preferred event signature: `event.target.name` / `event.target.value`.
13821
+ *
13822
+ * @property {string|number} [value]
13823
+ * Selected item value.
13824
+ *
13825
+ * @property {IconComponent} [Icon]
13826
+ * Optional decorative icon.
13827
+ *
13828
+ * @property {string} [errorMessage]
13829
+ *
13830
+ * @property {boolean} [disabled]
13831
+ *
13832
+ * @property {string} [dataCy]
13833
+ * Override for auto-generated data-cy attribute.
13834
+ */
13835
+
13836
+ /**
13837
+ * @param {DropdownProps & React.HTMLAttributes<HTMLDivElement>} props
13838
+ */
13839
+
13503
13840
  function Dropdown(_ref) {
13504
13841
  let {
13505
13842
  items = [],
13506
- label = 'Test Label',
13843
+ label = "Test Label",
13507
13844
  isValid = true,
13508
13845
  required = false,
13509
- placeholder = 'Example Placeholder',
13846
+ placeholder = "Example Placeholder",
13510
13847
  name,
13511
- className = '',
13512
- title = '',
13513
- tabIndex = '',
13848
+ className = "",
13849
+ title = "",
13850
+ tabIndex = "",
13514
13851
  onChange,
13515
13852
  value,
13516
13853
  Icon,
13517
- errorMessage = 'This field is required',
13854
+ errorMessage = "This field is required",
13518
13855
  disabled = false,
13519
13856
  dataCy
13520
13857
  } = _ref;
@@ -13523,7 +13860,7 @@ function Dropdown(_ref) {
13523
13860
  const newSelectedItem = items.find(item => item.value === value) || null;
13524
13861
  setSelectedItem(newSelectedItem);
13525
13862
  }, [value, items]);
13526
- const inputClasses = "inline-flex w-full justify-between items-center rounded-md bg-[--color-input-bg] text-md font-normal border p-2 text-[--color-text-strong] ".concat(isValid ? 'border-[--color-stroke]' : 'border-utilRed1000', " ").concat(disabled ? 'opacity-50 cursor-not-allowed' : '');
13863
+ const inputClasses = "inline-flex w-full justify-between items-center rounded-md bg-[--color-input-bg] text-md font-normal border p-2 text-[--color-text-strong] ".concat(isValid ? "border-[--color-stroke]" : "border-utilRed1000", " ").concat(disabled ? "opacity-50 cursor-not-allowed" : "");
13527
13864
  const handleSelect = item => {
13528
13865
  if (disabled) return;
13529
13866
  setSelectedItem(item);
@@ -13536,7 +13873,7 @@ function Dropdown(_ref) {
13536
13873
  onChange === null || onChange === void 0 || onChange(event);
13537
13874
  };
13538
13875
  return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)("div", {
13539
- className: "flex flex-col mb-4 ".concat(className),
13876
+ className: "mb-4 flex flex-col ".concat(className),
13540
13877
  children: [/*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)(Text, {
13541
13878
  as: "label",
13542
13879
  variant: "label",
@@ -13575,10 +13912,10 @@ function Dropdown(_ref) {
13575
13912
  })]
13576
13913
  }), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(solid_esm_ChevronDownIcon, {
13577
13914
  "aria-hidden": "true",
13578
- className: "ml-3 mr-1 h-5 w-5 text-[--color-text-strong] bg-transparent transition-transform duration-200 ".concat(open ? 'rotate-180' : 'rotate-0')
13915
+ className: "ml-3 mr-1 h-5 w-5 bg-transparent text-[--color-text-strong] transition-transform duration-200 ".concat(open ? "rotate-180" : "rotate-0")
13579
13916
  })]
13580
13917
  }), !disabled && /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(yt, {
13581
- className: "\r absolute \r left-0 \r z-10 \r mt-2 \r w-[100%] \r origin-top-right \r rounded-md \r bg-[--color-primary-bg] \r shadow-lg \r ring-1 \r ring-[--color-stroke] \r ring-opacity-1 \r focus:outline-none \r max-h-48 \r overflow-y-auto\r ",
13918
+ className: "ring-opacity-1 absolute left-0 z-10 mt-2 max-h-48 w-[100%] origin-top-right overflow-y-auto rounded-md bg-[--color-primary-bg] shadow-lg ring-1 ring-[--color-stroke] focus:outline-none",
13582
13919
  children: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
13583
13920
  className: "py-1",
13584
13921
  children: items.map((item, index) => /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(gt, {
@@ -13589,7 +13926,7 @@ function Dropdown(_ref) {
13589
13926
  return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("button", {
13590
13927
  type: "button",
13591
13928
  onClick: () => handleSelect(item),
13592
- className: "block w-full px-4 py-2 text-left text-sm text-[--color-text-strong] ".concat(active ? 'bg-[--color-input-bg]' : ''),
13929
+ className: "block w-full px-4 py-2 text-left text-sm text-[--color-text-strong] ".concat(active ? "bg-[--color-input-bg]" : ""),
13593
13930
  children: item.label
13594
13931
  });
13595
13932
  }
@@ -13602,7 +13939,7 @@ function Dropdown(_ref) {
13602
13939
  as: "span",
13603
13940
  variant: "small",
13604
13941
  id: "".concat(name, "-error"),
13605
- className: "text-[--color-util-red] mt-1",
13942
+ className: "mt-1 text-[--color-util-red]",
13606
13943
  children: errorMessage
13607
13944
  })]
13608
13945
  });
@@ -13650,6 +13987,30 @@ var c247_icon_only_2x_png_default = /*#__PURE__*/__webpack_require__.n(c247_icon
13650
13987
 
13651
13988
 
13652
13989
 
13990
+ /**
13991
+ * Props for the Navbar component.
13992
+ *
13993
+ * @typedef {Object} NavbarProps
13994
+ *
13995
+ * @property {React.ReactNode} [children]
13996
+ * Content displayed on the right side of the navbar.
13997
+ *
13998
+ * @property {string} [logo]
13999
+ * Custom logo URL. Defaults to toolkit logos.
14000
+ *
14001
+ * @property {string} [className]
14002
+ * Extra class names for the navbar wrapper.
14003
+ *
14004
+ * @property {string} [maxWidth="1200px"]
14005
+ * Max width of the inner content container.
14006
+ */
14007
+
14008
+ /**
14009
+ * Responsive Navbar with optional custom logo and region for child content.
14010
+ *
14011
+ * @param {NavbarProps & React.HTMLAttributes<HTMLElement>} props
14012
+ */
14013
+
13653
14014
  const Navbar = _ref => {
13654
14015
  let {
13655
14016
  children,
@@ -13689,12 +14050,36 @@ var c247_loader_gif_default = /*#__PURE__*/__webpack_require__.n(c247_loader_gif
13689
14050
  // In production, it's better to let the parent control rendering to keep Loader focused on UI.
13690
14051
  // This change would improve testability, flexibility, and follow React best practices.
13691
14052
 
14053
+ /**
14054
+ * Props for the Loader component.
14055
+ *
14056
+ * @typedef {Object} LoaderProps
14057
+ *
14058
+ * @property {boolean} isLoading
14059
+ * Determines whether the loader is visible.
14060
+ *
14061
+ * @property {string} [loaderText='loading...']
14062
+ * Optional text displayed beneath the spinner.
14063
+ *
14064
+ * @property {React.ReactNode} [customLoader]
14065
+ * Custom loader element (replaces default GIF).
14066
+ *
14067
+ * @property {string} [className]
14068
+ * Extra class names applied to the outer container.
14069
+ */
14070
+
14071
+ /**
14072
+ * Loader overlay that covers the entire screen.
14073
+ *
14074
+ * @param {LoaderProps & React.HTMLAttributes<HTMLDivElement>} props
14075
+ */
14076
+
13692
14077
  function Loader(_ref) {
13693
14078
  let {
13694
14079
  isLoading,
13695
- loaderText = 'loading...',
14080
+ loaderText = "loading...",
13696
14081
  customLoader,
13697
- className = ''
14082
+ className = ""
13698
14083
  } = _ref;
13699
14084
  return isLoading && /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)("div", {
13700
14085
  className: "fixed inset-0 z-50 flex items-center justify-center",
@@ -13744,6 +14129,52 @@ const XMarkIcon_ForwardRef = /*#__PURE__*/ external_commonjs_react_commonjs2_rea
13744
14129
 
13745
14130
 
13746
14131
 
14132
+ /**
14133
+ * Props for the Modal component.
14134
+ *
14135
+ * @typedef {Object} ModalProps
14136
+ *
14137
+ * @property {boolean} isOpen
14138
+ * Whether the modal is visible.
14139
+ *
14140
+ * @property {() => void} [onClose]
14141
+ * Callback fired when the modal requests to close (Escape key or close button).
14142
+ *
14143
+ * @property {boolean} [isLoading]
14144
+ * Shows a loader overlay inside the modal content.
14145
+ *
14146
+ * @property {string} [loaderText]
14147
+ * Text passed to the loader when isLoading = true.
14148
+ *
14149
+ * @property {React.ReactNode} [header]
14150
+ * Content rendered in the modal header.
14151
+ *
14152
+ * @property {boolean} [hideHeader]
14153
+ * If true, the header section is hidden.
14154
+ *
14155
+ * @property {React.ReactNode} [body]
14156
+ * Content rendered in the modal body.
14157
+ *
14158
+ * @property {React.ReactNode} [footer]
14159
+ * Content rendered in the modal footer.
14160
+ *
14161
+ * @property {boolean} [hideFooter]
14162
+ * If true, the footer section is hidden.
14163
+ *
14164
+ * @property {string} [className]
14165
+ * Additional classes for the modal container.
14166
+ *
14167
+ * @property {string} [footerClassName]
14168
+ *
14169
+ * @property {string} [headerClassName]
14170
+ */
14171
+
14172
+ /**
14173
+ * Modal component written in JavaScript but fully typed using JSDoc.
14174
+ *
14175
+ * @param {ModalProps & React.HTMLAttributes<HTMLDivElement>} props
14176
+ */
14177
+
13747
14178
  const Modal = _ref => {
13748
14179
  let {
13749
14180
  isOpen,
@@ -13753,11 +14184,13 @@ const Modal = _ref => {
13753
14184
  header,
13754
14185
  body,
13755
14186
  footer,
14187
+ hideHeader = false,
14188
+ hideFooter = false,
13756
14189
  className = "",
13757
14190
  footerClassName = "",
13758
14191
  headerClassName = ""
13759
14192
  } = _ref;
13760
- // Hook must be called unconditionally
14193
+ // Hook must be called unconditionally
13761
14194
  (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useEffect)(() => {
13762
14195
  const handleEscape = e => {
13763
14196
  if (e.key === "Escape" && isOpen) {
@@ -13768,7 +14201,7 @@ const Modal = _ref => {
13768
14201
  return () => document.removeEventListener("keydown", handleEscape);
13769
14202
  }, [isOpen, onClose]);
13770
14203
 
13771
- // Conditional render *after* hooks
14204
+ // Conditional render *after* hooks
13772
14205
  if (!isOpen) return null;
13773
14206
  return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
13774
14207
  className: "fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50",
@@ -13785,7 +14218,7 @@ const Modal = _ref => {
13785
14218
  loaderText: loaderText,
13786
14219
  className: "relative z-20 h-[110px] w-[150px]"
13787
14220
  })
13788
- }), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
14221
+ }), !hideHeader && /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
13789
14222
  className: "relative z-0 flex justify-end pb-3",
13790
14223
  children: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("button", {
13791
14224
  onClick: onClose,
@@ -13806,7 +14239,7 @@ const Modal = _ref => {
13806
14239
  id: "modal-description",
13807
14240
  className: "relative z-0 my-4 text-[--color-text-weak]",
13808
14241
  children: body
13809
- }), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
14242
+ }), !hideFooter && /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
13810
14243
  className: "relative z-0 text-[--color-text-weak] ".concat(footerClassName),
13811
14244
  children: footer
13812
14245
  })]
@@ -22511,6 +22944,53 @@ const C247Tasks = props => /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(task
22511
22944
 
22512
22945
 
22513
22946
 
22947
+ /**
22948
+ * All valid keys for heroicons.
22949
+ * @typedef {keyof typeof HeroIcons} HeroIconName
22950
+ */
22951
+
22952
+ /**
22953
+ * All valid keys for your custom C247 icons.
22954
+ * @typedef {keyof typeof C247Icons} C247IconName
22955
+ */
22956
+
22957
+ /**
22958
+ * Allowed icon name type (union of dynamic keys).
22959
+ * @typedef {HeroIconName | C247IconName} IconName
22960
+ */
22961
+
22962
+ /**
22963
+ * Which icon library to use.
22964
+ * @typedef {'hero'|'c247'} IconLibrary
22965
+ */
22966
+
22967
+ /**
22968
+ * Props for the generic Icon component.
22969
+ *
22970
+ * @typedef {Object} IconProps
22971
+ *
22972
+ * @property {IconName} name
22973
+ * The dynamic icon name to render.
22974
+ *
22975
+ * @property {IconLibrary} [library='hero']
22976
+ * Which icon set to render from.
22977
+ *
22978
+ * @property {number} [size=18]
22979
+ * Icon size in pixels.
22980
+ *
22981
+ * @property {string} [className]
22982
+ * Extra classes for styling.
22983
+ *
22984
+ * @property {string} [color]
22985
+ * Optional CSS color override.
22986
+ */
22987
+
22988
+ /**
22989
+ * Generic Icon component supporting HeroIcons and C247 icons.
22990
+ *
22991
+ * @param {IconProps & React.SVGProps<SVGSVGElement>} props
22992
+ */
22993
+
22514
22994
  /**
22515
22995
  * Generic Icon component supporting HeroIcons and C247 icons.
22516
22996
  *
@@ -22554,6 +23034,48 @@ function SidebarItem_objectWithoutPropertiesLoose(r, e) { if (null == r) return
22554
23034
 
22555
23035
 
22556
23036
 
23037
+ /**
23038
+ * Icon props (importing from your Icon component typedef).
23039
+ * @typedef {import('../Icon/Icon').IconProps} IconProps
23040
+ */
23041
+
23042
+ /**
23043
+ * A sidebar leaf item (no children).
23044
+ * @typedef {Object} SidebarItemMenu
23045
+ * @property {string|number} key
23046
+ * @property {string} name
23047
+ * @property {string} [path]
23048
+ * @property {string} [href]
23049
+ * @property {IconProps} [iconProps]
23050
+ */
23051
+
23052
+ /**
23053
+ * Props for SidebarItem.
23054
+ *
23055
+ * @typedef {Object} SidebarItemProps
23056
+ *
23057
+ * @property {SidebarItemMenu} menu
23058
+ * The menu item to render.
23059
+ *
23060
+ * @property {boolean} open
23061
+ * Whether the sidebar is expanded.
23062
+ *
23063
+ * @property {boolean} [active=false]
23064
+ * Whether this item is currently active.
23065
+ *
23066
+ * @property {keyof JSX.IntrinsicElements | React.ComponentType<any>} [as='div']
23067
+ * Polymorphic wrapper: div, a, button, Link, etc.
23068
+ *
23069
+ * @property {() => void} [onClick]
23070
+ * Fired when the item is clicked.
23071
+ */
23072
+
23073
+ /**
23074
+ * Fully typed SidebarItem component.
23075
+ *
23076
+ * @param {SidebarItemProps & React.HTMLAttributes<HTMLElement>} props
23077
+ */
23078
+
22557
23079
  function SidebarItem(_ref) {
22558
23080
  let {
22559
23081
  menu,
@@ -22600,6 +23122,57 @@ function SidebarGroup_toPrimitive(t, r) { if ("object" != typeof t || !t) return
22600
23122
 
22601
23123
 
22602
23124
 
23125
+ /**
23126
+ * Icon props used by your dynamic Icon component (optional).
23127
+ * @typedef {import('../Icon/Icon').IconProps} IconProps
23128
+ */
23129
+
23130
+ /**
23131
+ * A single child menu item.
23132
+ * @typedef {Object} SidebarChild
23133
+ * @property {string|number} key
23134
+ * @property {string} name
23135
+ * @property {string} [path]
23136
+ * @property {string} [href]
23137
+ * @property {IconProps} [iconProps]
23138
+ */
23139
+
23140
+ /**
23141
+ * Sidebar group object containing children.
23142
+ * @typedef {Object} SidebarGroupMenu
23143
+ * @property {string|number} key
23144
+ * @property {string} name
23145
+ * @property {SidebarChild[]} children
23146
+ * @property {IconProps} [iconProps]
23147
+ */
23148
+
23149
+ /**
23150
+ * Props for SidebarGroup component.
23151
+ *
23152
+ * @typedef {Object} SidebarGroupProps
23153
+ *
23154
+ * @property {SidebarGroupMenu} menu
23155
+ * The group menu containing children.
23156
+ *
23157
+ * @property {boolean} open
23158
+ * Whether the sidebar is currently expanded.
23159
+ *
23160
+ * @property {string|number|null} activeItem
23161
+ * The currently selected menu item key.
23162
+ *
23163
+ * @property {(key: string|number) => void} onItemClick
23164
+ * Handler fired when a child item is selected.
23165
+ *
23166
+ * @property {(open: boolean) => void} toggleSidebar
23167
+ * Used to open the sidebar when clicking a group.
23168
+ */
23169
+
23170
+ /**
23171
+ * Fully typed SidebarGroup component.
23172
+ *
23173
+ * @param {SidebarGroupProps & React.HTMLAttributes<HTMLDivElement>} props
23174
+ */
23175
+
22603
23176
  function SidebarGroup(_ref) {
22604
23177
  let {
22605
23178
  menu,
@@ -22680,6 +23253,31 @@ function Link(_ref) {
22680
23253
 
22681
23254
 
22682
23255
 
23256
+ /**
23257
+ * Shape of the user object
23258
+ * @typedef {Object} ProfileCardUser
23259
+ * @property {string} name
23260
+ * @property {string} role
23261
+ */
23262
+
23263
+ /**
23264
+ * Props for ProfileCard.
23265
+ *
23266
+ * @typedef {Object} ProfileCardProps
23267
+ *
23268
+ * @property {ProfileCardUser} user
23269
+ * The user object containing name + role.
23270
+ *
23271
+ * @property {string} [href]
23272
+ * If provided, the card becomes a link instead of a div.
23273
+ */
23274
+
23275
+ /**
23276
+ * ProfileCard with polymorphic wrapper (Link or div).
23277
+ *
23278
+ * @param {ProfileCardProps & React.HTMLAttributes<HTMLDivElement>} props
23279
+ */
23280
+
22683
23281
  function ProfileCard(_ref) {
22684
23282
  let {
22685
23283
  user,
@@ -22767,6 +23365,68 @@ var sidebar_update = injectStylesIntoStyleTag_default()(sidebar/* default */.A,
22767
23365
 
22768
23366
 
22769
23367
 
23368
+ /**
23369
+ * A single menu item (no children).
23370
+ * @typedef {Object} SidebarMenuItem
23371
+ * @property {string|number} key
23372
+ * @property {string} name
23373
+ * @property {string} [icon] // optional icon name depending on your app
23374
+ * @property {string} [href] // optional link target
23375
+ */
23376
+
23377
+ /**
23378
+ * A grouped menu entry with children.
23379
+ * @typedef {Object} SidebarMenuGroup
23380
+ * @property {string|number} key
23381
+ * @property {string} name
23382
+ * @property {SidebarMenuItem[]} children
23383
+ */
23384
+
23385
+ /**
23386
+ * A full menu entry (either group or leaf item).
23387
+ * @typedef {SidebarMenuItem | SidebarMenuGroup} SidebarMenu
23388
+ */
23389
+
23390
+ /**
23391
+ * Minimal shape expected for SidebarProfile.
23392
+ * @typedef {Object} SidebarUser
23393
+ * @property {string|number} id
23394
+ * @property {string} name
23395
+ * @property {string} role
23396
+ * @property {string} [avatar] // optional depending on your design
23397
+ */
23398
+
23399
+ /**
23400
+ * Props for Sidebar.
23401
+ *
23402
+ * @typedef {Object} SidebarProps
23403
+ *
23404
+ * @property {SidebarMenu[]} menus
23405
+ * All sidebar menu items (groups + items).
23406
+ *
23407
+ * @property {SidebarUser} user
23408
+ * The current logged-in user.
23409
+ *
23410
+ * @property {string|number|null} [activeItem]
23411
+ * Key of the currently selected item.
23412
+ *
23413
+ * @property {(key: string|number) => void} [onItemClick]
23414
+ * Fired when a menu item is clicked.
23415
+ *
23416
+ * @property {string} [logo]
23417
+ * Optional logo override.
23418
+ *
23419
+ * @property {string} [searchValue='']
23420
+ *
23421
+ * @property {(value: string) => void} [onSearchChange]
23422
+ */
23423
+
23424
+ /**
23425
+ * Fully typed Sidebar component.
23426
+ *
23427
+ * @param {SidebarProps & React.HTMLAttributes<HTMLDivElement>} props
23428
+ */
23429
+
22770
23430
  function Sidebar(_ref) {
22771
23431
  let {
22772
23432
  menus,
@@ -22849,6 +23509,160 @@ function Sidebar(_ref) {
22849
23509
  })
22850
23510
  });
22851
23511
  }
23512
+ ;// ./src/components/BarLayout/BarLayout.jsx
23513
+
23514
+ /**
23515
+ * @typedef {Object} BarLayoutProps
23516
+ * @property {React.ReactNode} [left] Left content area
23517
+ * @property {React.ReactNode} [center] Center content area
23518
+ * @property {React.ReactNode} [right] Right content area
23519
+ * @property {string} [className] Optional wrapper class
23520
+ */
23521
+
23522
+ /**
23523
+ * @param {BarLayoutProps} props
23524
+ */
23525
+
23526
+ const BarLayout = _ref => {
23527
+ let {
23528
+ left,
23529
+ center,
23530
+ right,
23531
+ className = ""
23532
+ } = _ref;
23533
+ return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)("div", {
23534
+ className: "flex w-full items-center justify-between ".concat(className),
23535
+ children: [/*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
23536
+ className: "flex-1",
23537
+ children: left
23538
+ }), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
23539
+ className: "flex-auto text-center",
23540
+ children: center
23541
+ }), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
23542
+ className: "flex flex-1 justify-end",
23543
+ children: right
23544
+ })]
23545
+ });
23546
+ };
23547
+ /* harmony default export */ const BarLayout_BarLayout = (BarLayout);
23548
+ ;// ./src/components/Header/Header.jsx
23549
+
23550
+
23551
+
23552
+ /**
23553
+ * @typedef {Object} HeaderProps
23554
+ * @property {string} title Header title text left slot
23555
+ * @property {React.ReactNode} [center] center content slot
23556
+ * @property {React.ReactNode} [right] Right content slot
23557
+ * @property {string} [className] Optional wrapper class
23558
+ */
23559
+
23560
+ /**
23561
+ * @param {HeaderProps} props
23562
+ */
23563
+
23564
+ const Header = _ref => {
23565
+ let {
23566
+ title,
23567
+ center,
23568
+ right
23569
+ } = _ref;
23570
+ return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
23571
+ className: "w-full px-4 py-2",
23572
+ children: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(BarLayout_BarLayout, {
23573
+ left: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(Text, {
23574
+ variant: "h3",
23575
+ children: title
23576
+ }),
23577
+ center: center,
23578
+ right: right
23579
+ })
23580
+ });
23581
+ };
23582
+ /* harmony default export */ const Header_Header = (Header);
23583
+ ;// ./src/components/Footer/Footer.jsx
23584
+
23585
+
23586
+ /**
23587
+ * @typedef {Object} FooterProps
23588
+ * @property {React.ReactNode} [left] Left footer content
23589
+ * @property {React.ReactNode} [center] Center footer content
23590
+ * @property {React.ReactNode} [right] Right footer content
23591
+ * @property {string} [className] Optional wrapper class
23592
+ */
23593
+
23594
+ /**
23595
+ * @param {FooterProps} props
23596
+ */
23597
+
23598
+ const Footer = _ref => {
23599
+ let {
23600
+ left,
23601
+ center,
23602
+ right
23603
+ } = _ref;
23604
+ return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("div", {
23605
+ className: "w-full px-4 py-2",
23606
+ children: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(BarLayout_BarLayout, {
23607
+ left: left,
23608
+ center: center,
23609
+ right: right
23610
+ })
23611
+ });
23612
+ };
23613
+ /* harmony default export */ const Footer_Footer = (Footer);
23614
+ ;// ./src/components/PageTemplate/PageTemplate.jsx
23615
+
23616
+
23617
+
23618
+
23619
+ /**
23620
+ * @typedef {Object} PageTemplateProps
23621
+ *
23622
+ * @property {string} [headerTitle] Title passed to left Header
23623
+ * @property {React.ReactNode} [headerCenter] Center slot of Header
23624
+ * @property {React.ReactNode} [headerRight] Right slot of Header
23625
+ *
23626
+ * @property {React.ReactNode} [footerLeft] Left slot of Footer
23627
+ * @property {React.ReactNode} [footerCenter] Center slot of Footer
23628
+ * @property {React.ReactNode} [footerRight] Right slot of Footer
23629
+ *
23630
+ * @property {React.ReactNode} children Main page content
23631
+ * @property {string} [className] Optional wrapper class
23632
+ */
23633
+
23634
+ /**
23635
+ * @param {PageTemplateProps} props
23636
+ */
23637
+
23638
+ const PageTemplate = _ref => {
23639
+ let {
23640
+ headerTitle,
23641
+ headerCenter,
23642
+ headerRight,
23643
+ footerLeft,
23644
+ footerCenter,
23645
+ footerRight,
23646
+ children,
23647
+ className = ""
23648
+ } = _ref;
23649
+ return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)("div", {
23650
+ className: "flex min-h-screen w-full flex-col ".concat(className),
23651
+ children: [/*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(Header_Header, {
23652
+ title: headerTitle,
23653
+ center: headerCenter,
23654
+ right: headerRight
23655
+ }), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("main", {
23656
+ className: "flex-1 p-6",
23657
+ children: children
23658
+ }), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(Footer_Footer, {
23659
+ left: footerLeft,
23660
+ center: footerCenter,
23661
+ right: footerRight
23662
+ })]
23663
+ });
23664
+ };
23665
+ /* harmony default export */ const PageTemplate_PageTemplate = (PageTemplate);
22852
23666
  ;// ./src/index.js
22853
23667
 
22854
23668
 
@@ -22864,6 +23678,12 @@ function Sidebar(_ref) {
22864
23678
 
22865
23679
 
22866
23680
 
23681
+
23682
+
23683
+
23684
+
23685
+
23686
+
22867
23687
 
22868
23688
 
22869
23689
  module.exports = __webpack_exports__;