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.
- package/lib/opus-components.main.js +1110 -290
- package/lib/opus-components.main.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
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:
|
|
1126
|
-
danger:
|
|
1127
|
-
warning:
|
|
1128
|
-
success:
|
|
1129
|
-
info:
|
|
1130
|
-
notice:
|
|
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 =
|
|
1136
|
-
className =
|
|
1172
|
+
text = "",
|
|
1173
|
+
status = "info",
|
|
1174
|
+
className = "",
|
|
1137
1175
|
icon: Icon
|
|
1138
1176
|
} = _ref;
|
|
1139
|
-
const baseClasses =
|
|
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: "
|
|
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__(
|
|
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 =
|
|
4754
|
+
initialDate = "",
|
|
4755
|
+
label = "Select a Date:",
|
|
4628
4756
|
isValid = true,
|
|
4629
|
-
errorMessage =
|
|
4630
|
-
name =
|
|
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(
|
|
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,
|
|
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
|
|
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]
|
|
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
|
|
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
|
|
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: "
|
|
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
|
|
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:
|
|
5089
|
+
accentColor: "var(--color-primary-btn)"
|
|
4865
5090
|
},
|
|
4866
|
-
className: "
|
|
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]
|
|
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__(
|
|
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: "
|
|
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: "
|
|
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 ?
|
|
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: "
|
|
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: "
|
|
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 =
|
|
13843
|
+
label = "Test Label",
|
|
13507
13844
|
isValid = true,
|
|
13508
13845
|
required = false,
|
|
13509
|
-
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 =
|
|
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 ?
|
|
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
|
|
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]
|
|
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: "
|
|
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 ?
|
|
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]
|
|
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 =
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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__;
|