react-bootstrap-plugins 2.6.0 → 2.7.1

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/README.md CHANGED
@@ -19,6 +19,7 @@
19
19
  | **InputCurrency** | [INPUTCURRENCY.md](./docs/INPUTCURRENCY.md) | Controlled currency input — numbers in/out, locale-formatted display, focus-based editing |
20
20
  | **ListGroup** | [LISTGROUP.md](./docs/LISTGROUP.md) | Bootstrap list-group with active-state highlighting, icons, badges, and descriptions |
21
21
  | **FormRow** | [FORMROW.md](./docs/FORMROW.md) | Form row wrapper — label, control, helper text, and required indicator |
22
+ | **ConfirmDialog** | [CONFIRMDIALOG.md](./docs/CONFIRMDIALOG.md) | Bootstrap 5 confirmation dialog with async loading state |
22
23
 
23
24
  Each component guide includes full prop tables, usage examples, import patterns, and dark mode behavior.
24
25
 
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunkHGRCY2U6_cjs=require('./chunk-HGRCY2U6.cjs');require('./chunk-NPQQDBFB.cjs');Object.defineProperty(exports,"ConfirmDialog",{enumerable:true,get:function(){return chunkHGRCY2U6_cjs.a}});Object.defineProperty(exports,"default",{enumerable:true,get:function(){return chunkHGRCY2U6_cjs.b}});//# sourceMappingURL=ConfirmDialog.cjs.map
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJDb25maXJtRGlhbG9nLmNqcyJ9
@@ -0,0 +1,43 @@
1
+ import * as React from 'react';
2
+
3
+ type ConfirmDialogVariant = 'primary' | 'danger' | 'success' | 'warning' | 'info';
4
+ interface ConfirmDialogProps {
5
+ /** Visibility — fully controlled by the caller */
6
+ show: boolean;
7
+ /** Dialog title */
8
+ title: React.ReactNode;
9
+ /** Body message (string or JSX) */
10
+ message: React.ReactNode;
11
+ /**
12
+ * Fired when the confirm button is clicked. May return a promise —
13
+ * the dialog shows a pending spinner until it resolves.
14
+ * On rejection the dialog stays open and the error propagates;
15
+ * callers handle their own error display inside `onConfirm`.
16
+ */
17
+ onConfirm: () => void | Promise<void>;
18
+ /** Fired on the Cancel button or the Escape key */
19
+ onCancel: () => void;
20
+ /** Confirm button label */
21
+ label?: React.ReactNode;
22
+ /** Bootstrap color variant for the confirm button, header dot, and message rule */
23
+ variant?: ConfirmDialogVariant;
24
+ /** Extra CSS classes on the dialog element */
25
+ className?: string;
26
+ }
27
+ /**
28
+ * Zero-dependency Bootstrap 5 confirmation dialog.
29
+ *
30
+ * Renders standard `.modal` markup portaled to `document.body` with its own
31
+ * backdrop — no react-bootstrap required. Backdrop clicks do nothing;
32
+ * Escape fires `onCancel`; focus is trapped inside the dialog and lands on
33
+ * the confirm button on open. Body scroll is locked while shown.
34
+ *
35
+ * **Important:** the accompanying CSS **must** be imported for the premium
36
+ * styling (backdrop, radius, header dot, message rule):
37
+ * ```js
38
+ * import 'react-bootstrap-plugins/css/plugins.css'
39
+ * ```
40
+ */
41
+ declare const ConfirmDialog: React.ForwardRefExoticComponent<ConfirmDialogProps & React.RefAttributes<HTMLDivElement>>;
42
+
43
+ export { ConfirmDialog, type ConfirmDialogProps, type ConfirmDialogVariant, ConfirmDialog as default };
@@ -0,0 +1,43 @@
1
+ import * as React from 'react';
2
+
3
+ type ConfirmDialogVariant = 'primary' | 'danger' | 'success' | 'warning' | 'info';
4
+ interface ConfirmDialogProps {
5
+ /** Visibility — fully controlled by the caller */
6
+ show: boolean;
7
+ /** Dialog title */
8
+ title: React.ReactNode;
9
+ /** Body message (string or JSX) */
10
+ message: React.ReactNode;
11
+ /**
12
+ * Fired when the confirm button is clicked. May return a promise —
13
+ * the dialog shows a pending spinner until it resolves.
14
+ * On rejection the dialog stays open and the error propagates;
15
+ * callers handle their own error display inside `onConfirm`.
16
+ */
17
+ onConfirm: () => void | Promise<void>;
18
+ /** Fired on the Cancel button or the Escape key */
19
+ onCancel: () => void;
20
+ /** Confirm button label */
21
+ label?: React.ReactNode;
22
+ /** Bootstrap color variant for the confirm button, header dot, and message rule */
23
+ variant?: ConfirmDialogVariant;
24
+ /** Extra CSS classes on the dialog element */
25
+ className?: string;
26
+ }
27
+ /**
28
+ * Zero-dependency Bootstrap 5 confirmation dialog.
29
+ *
30
+ * Renders standard `.modal` markup portaled to `document.body` with its own
31
+ * backdrop — no react-bootstrap required. Backdrop clicks do nothing;
32
+ * Escape fires `onCancel`; focus is trapped inside the dialog and lands on
33
+ * the confirm button on open. Body scroll is locked while shown.
34
+ *
35
+ * **Important:** the accompanying CSS **must** be imported for the premium
36
+ * styling (backdrop, radius, header dot, message rule):
37
+ * ```js
38
+ * import 'react-bootstrap-plugins/css/plugins.css'
39
+ * ```
40
+ */
41
+ declare const ConfirmDialog: React.ForwardRefExoticComponent<ConfirmDialogProps & React.RefAttributes<HTMLDivElement>>;
42
+
43
+ export { ConfirmDialog, type ConfirmDialogProps, type ConfirmDialogVariant, ConfirmDialog as default };
@@ -0,0 +1,2 @@
1
+ export{a as ConfirmDialog,b as default}from'./chunk-XL4EQW5D.js';import'./chunk-RR7TBRGI.js';//# sourceMappingURL=ConfirmDialog.js.map
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJDb25maXJtRGlhbG9nLmpzIn0=
package/dist/NavPills.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunkXCPF5NPT_cjs=require('./chunk-XCPF5NPT.cjs');require('./chunk-NPQQDBFB.cjs');Object.defineProperty(exports,"NavPills",{enumerable:true,get:function(){return chunkXCPF5NPT_cjs.a}});Object.defineProperty(exports,"default",{enumerable:true,get:function(){return chunkXCPF5NPT_cjs.b}});//# sourceMappingURL=NavPills.cjs.map
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunkTDSAO4B2_cjs=require('./chunk-TDSAO4B2.cjs');require('./chunk-NPQQDBFB.cjs');Object.defineProperty(exports,"NavPills",{enumerable:true,get:function(){return chunkTDSAO4B2_cjs.a}});Object.defineProperty(exports,"default",{enumerable:true,get:function(){return chunkTDSAO4B2_cjs.b}});//# sourceMappingURL=NavPills.cjs.map
2
2
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJOYXZQaWxscy5janMifQ==
@@ -17,6 +17,8 @@ interface NavPill {
17
17
  clear?: boolean;
18
18
  /** Show a "New" badge on this pill */
19
19
  new?: boolean;
20
+ /** Disable this pill */
21
+ disabled?: boolean;
20
22
  }
21
23
  interface NavPillsProps {
22
24
  /** Pills to render */
@@ -17,6 +17,8 @@ interface NavPill {
17
17
  clear?: boolean;
18
18
  /** Show a "New" badge on this pill */
19
19
  new?: boolean;
20
+ /** Disable this pill */
21
+ disabled?: boolean;
20
22
  }
21
23
  interface NavPillsProps {
22
24
  /** Pills to render */
package/dist/NavPills.js CHANGED
@@ -1,2 +1,2 @@
1
- export{a as NavPills,b as default}from'./chunk-FRNRH2L3.js';import'./chunk-RR7TBRGI.js';//# sourceMappingURL=NavPills.js.map
1
+ export{a as NavPills,b as default}from'./chunk-2NI6RRW6.js';import'./chunk-RR7TBRGI.js';//# sourceMappingURL=NavPills.js.map
2
2
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJOYXZQaWxscy5qcyJ9
@@ -0,0 +1,2 @@
1
+ import {a}from'./chunk-RR7TBRGI.js';import*as r from'react';import {jsxs,jsx}from'react/jsx-runtime';var f=l=>l?typeof l=="string"?jsx("i",{className:a(l,"me-2")}):jsx("span",{className:"me-2 d-inline-flex align-middle",children:l}):null,c=r.forwardRef(({contain:l=false,active:p,pills:d,clear:v,onClick:m,className:t,style:s},i)=>{let o=(d??[]).map(e=>jsxs("button",{type:"button",disabled:e.disabled||false,className:a("nav-link text-center align-middle",e.key===p&&"active"),onClick:()=>m?.(e),children:[f(e.icon),jsx("span",{children:e.lbl??e.label}),e.clear&&jsx("span",{className:"badge navpills-badge-clear my-0 float-end d-flex justify-content-center align-items-center fs-5 ms-3",role:"button","aria-label":"Dismiss",onClick:b=>{b.stopPropagation(),v?.(e);},children:"\xD7"}),e.new&&jsx("span",{className:"badge navpills-badge-new float-end ms-4",children:"New"})]},String(e.key)));return l?jsx("div",{className:a("navpills-bar px-2 bg-light rounded-0 mb-0",t),style:s,children:jsx("nav",{ref:i,className:"container nav nav-pills overflow-x-auto flex-nowrap",children:o})}):jsx("nav",{ref:i,className:a("nav nav-pills overflow-x-auto flex-nowrap",t),style:s,children:o})});c.displayName="NavPills";var u=c;export{c as a,u as b};//# sourceMappingURL=chunk-2NI6RRW6.js.map
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL05hdlBpbGxzLnRzeCJdLCJuYW1lcyI6WyJyZW5kZXJJY29uIiwiaWNvbiIsImpzeCIsImNuIiwiTmF2UGlsbHMiLCJjb250YWluIiwiYWN0aXZlIiwicGlsbHMiLCJjbGVhciIsIm9uQ2xpY2siLCJjbGFzc05hbWUiLCJzdHlsZSIsInJlZiIsIml0ZW1zIiwiciIsImpzeHMiLCJlIiwiTmF2UGlsbHNfZGVmYXVsdCJdLCJtYXBwaW5ncyI6InFHQWlEQSxJQUFNQSxDQUFBQSxDQUFjQyxDQUFBQSxFQUNiQSxFQUNELE9BQU9BLENBQUFBLEVBQVMsU0FBaUJDLEdBQUFBLENBQUMsR0FBQSxDQUFBLENBQUUsVUFBV0MsQ0FBQUEsQ0FBR0YsQ0FBQUEsQ0FBTSxNQUFNLENBQUEsQ0FBRyxFQUM5REMsR0FBQUEsQ0FBQyxNQUFBLENBQUEsQ0FBSyxVQUFVLGlDQUFBLENBQW1DLFFBQUEsQ0FBQUQsRUFBSyxDQUFBLENBRjdDLElBQUEsQ0FlZEcsQ0FBQUEsQ0FBaUIsQ0FBQSxDQUFBLFVBQUEsQ0FBdUMsQ0FBQyxDQUM3RCxPQUFBLENBQUFDLEVBQVUsS0FBQSxDQUNWLE1BQUEsQ0FBQUMsRUFDQSxLQUFBLENBQUFDLENBQUFBLENBQ0EsS0FBQSxDQUFBQyxDQUFBQSxDQUNBLFFBQUFDLENBQUFBLENBQ0EsU0FBQSxDQUFBQyxFQUNBLEtBQUEsQ0FBQUMsQ0FDRixFQUFHQyxDQUFBQSxHQUFRLENBQ1QsSUFBTUMsQ0FBQUEsQ0FBQUEsQ0FBU04sR0FBUyxFQUFDLEVBQUcsSUFBS08sQ0FBQUEsRUFDL0JDLElBQUFBLENBQUMsVUFFQyxJQUFBLENBQUssUUFBQSxDQUNMLFFBQUEsQ0FBVUQsQ0FBQUEsQ0FBRSxVQUFZLEtBQUEsQ0FDeEIsU0FBQSxDQUFXWCxFQUFHLG1DQUFBLENBQXFDVyxDQUFBQSxDQUFFLE1BQVFSLENBQUFBLEVBQVUsUUFBUSxDQUFBLENBQy9FLE9BQUEsQ0FBUyxJQUFNRyxDQUFBQSxHQUFVSyxDQUFDLEVBRXpCLFFBQUEsQ0FBQSxDQUFBZCxDQUFBQSxDQUFXYyxFQUFFLElBQUksQ0FBQSxDQUNsQlosR0FBQUEsQ0FBQyxNQUFBLENBQUEsQ0FBTSxTQUFBWSxDQUFBQSxDQUFFLEdBQUEsRUFBT0EsRUFBRSxLQUFBLENBQU0sQ0FBQSxDQUN2QkEsRUFBRSxLQUFBLEVBQ0RaLEdBQUFBLENBQUMsTUFBQSxDQUFBLENBQ0MsU0FBQSxDQUFVLHVHQUNWLElBQUEsQ0FBSyxRQUFBLENBQ0wsYUFBVyxTQUFBLENBQ1gsT0FBQSxDQUFVYyxHQUFNLENBQUVBLENBQUFBLENBQUUsZUFBQSxFQUFnQixDQUFHUixJQUFRTSxDQUFDLEVBQUUsRUFDbkQsUUFBQSxDQUFBLE1BQUEsQ0FFRCxDQUFBLENBRURBLEVBQUUsR0FBQSxFQUNEWixHQUFBQSxDQUFDLE1BQUEsQ0FBQSxDQUFLLFNBQUEsQ0FBVSwwQ0FBMEMsUUFBQSxDQUFBLEtBQUEsQ0FBRyxDQUFBLENBQUEsQ0FBQSxDQW5CMUQsT0FBT1ksQ0FBQUEsQ0FBRSxHQUFHLENBcUJuQixDQUNELENBQUEsQ0FFRCxPQUFJVCxDQUFBQSxDQUVBSCxJQUFDLEtBQUEsQ0FBQSxDQUFJLFNBQUEsQ0FBV0MsRUFBRywyQ0FBQSxDQUE2Q08sQ0FBUyxFQUFHLEtBQUEsQ0FBT0MsQ0FBQUEsQ0FDakYsUUFBQSxDQUFBVCxHQUFBQSxDQUFDLE9BQUksR0FBQSxDQUFLVSxDQUFBQSxDQUFLLFVBQVUscURBQUEsQ0FDdEIsUUFBQSxDQUFBQyxFQUNILENBQUEsQ0FDRixDQUFBLENBS0ZYLEdBQUFBLENBQUMsS0FBQSxDQUFBLENBQUksSUFBS1UsQ0FBQUEsQ0FBSyxTQUFBLENBQVdULEVBQUcsMkNBQUEsQ0FBNkNPLENBQVMsRUFBRyxLQUFBLENBQU9DLENBQUFBLENBQzFGLFFBQUEsQ0FBQUUsQ0FBQUEsQ0FDSCxDQUVKLENBQUMsRUFFRFQsRUFBUyxXQUFBLENBQWMsVUFBQSxLQUdoQmEsQ0FBQUEsQ0FBUWIiLCJmaWxlIjoiY2h1bmstMk5JNlJSVzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vbGliL2NuLmpzJ1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qICBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdlBpbGwge1xuICAvKiogVW5pcXVlIHBpbGwgaWRlbnRpZmllciDigJQgY29tcGFyZWQgYWdhaW5zdCBgYWN0aXZlYCAqL1xuICBrZXk6IHN0cmluZyB8IG51bWJlclxuICAvKiogUGlsbCBsYWJlbCB0ZXh0ICovXG4gIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKiBMZWdhY3kgYWxpYXMgZm9yIGBsYWJlbGAgKHRha2VzIHByZWNlZGVuY2Ugd2hlbiBib3RoIGFyZSBzZXQpICovXG4gIGxibD86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICogT3B0aW9uYWwgbGVhZGluZyBpY29uLiBBIHN0cmluZyBpcyByZW5kZXJlZCBhcyBgPGkgY2xhc3NOYW1lPXtpY29ufSAvPmBcbiAgICogKHBhc3MgdGhlIGZ1bGwgaWNvbiBjbGFzcywgZS5nLiBgXCJmYXMgZmEtdXNlclwiYCBvciBgXCJiaSBiaS1wZXJzb25cImApO1xuICAgKiBhIFJlYWN0Tm9kZSAoZS5nLiBhIEx1Y2lkZSBlbGVtZW50KSBpcyByZW5kZXJlZCBhcy1pcy5cbiAgICovXG4gIGljb24/OiBzdHJpbmcgfCBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqIFNob3cgYSBkaXNtaXNzIGJhZGdlIG9uIHRoaXMgcGlsbCDigJQgY2xpY2tpbmcgaXQgZmlyZXMgYG9uQ2xlYXJgICovXG4gIGNsZWFyPzogYm9vbGVhblxuICAvKiogU2hvdyBhIFwiTmV3XCIgYmFkZ2Ugb24gdGhpcyBwaWxsICovXG4gIG5ldz86IGJvb2xlYW5cbiAgLyoqIERpc2FibGUgdGhpcyBwaWxsICovXG4gIGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdlBpbGxzUHJvcHMge1xuICAvKiogUGlsbHMgdG8gcmVuZGVyICovXG4gIHBpbGxzOiBOYXZQaWxsW11cbiAgLyoqIEtleSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBwaWxsICovXG4gIGFjdGl2ZT86IHN0cmluZyB8IG51bWJlclxuICAvKiogRmlyZWQgd2hlbiBhIHBpbGwgaXMgY2xpY2tlZCAqL1xuICBvbkNsaWNrPzogKHBpbGw6IE5hdlBpbGwpID0+IHZvaWRcbiAgLyoqIEZpcmVkIHdoZW4gYSBwaWxsJ3MgZGlzbWlzcyBiYWRnZSBpcyBjbGlja2VkIChyZXF1aXJlcyBgcGlsbC5jbGVhcmApICovXG4gIGNsZWFyPzogKHBpbGw6IE5hdlBpbGwpID0+IHZvaWRcbiAgLyoqIFdyYXAgdGhlIHBpbGxzIGluIGEgZnVsbC13aWR0aCBsaWdodCBiYXIgd2l0aCBhIGNlbnRlcmVkIGAuY29udGFpbmVyYCAqL1xuICBjb250YWluPzogYm9vbGVhblxuICAvKiogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyAob24gdGhlIHdyYXBwZXIgd2hlbiBgY29udGFpbmAsIGVsc2Ugb24gdGhlIG5hdikgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG5cbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogIE5hdlBpbGxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmNvbnN0IHJlbmRlckljb24gPSAoaWNvbjogTmF2UGlsbFsnaWNvbiddKTogUmVhY3QuUmVhY3ROb2RlID0+IHtcbiAgaWYgKCFpY29uKSByZXR1cm4gbnVsbFxuICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSByZXR1cm4gPGkgY2xhc3NOYW1lPXtjbihpY29uLCAnbWUtMicpfSAvPlxuICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwibWUtMiBkLWlubGluZS1mbGV4IGFsaWduLW1pZGRsZVwiPntpY29ufTwvc3Bhbj5cbn1cblxuLyoqXG4gKiBIb3Jpem9udGFsIEJvb3RzdHJhcCBuYXYtcGlsbHMgdGFiIHN0cmlwIHdpdGggb3B0aW9uYWwgaWNvbnMsXG4gKiBkaXNtaXNzaWJsZSBwaWxscywgYW5kIFwiTmV3XCIgYmFkZ2VzLiBTY3JvbGxzIGhvcml6b250YWxseSBvbiBvdmVyZmxvdy5cbiAqXG4gKiAqKkltcG9ydGFudDoqKiBUaGUgYWNjb21wYW55aW5nIENTUyAqKm11c3QqKiBiZSBpbXBvcnRlZCBmb3IgdGhlIGJhZGdlcyB0b1xuICogcmVuZGVyIGNvcnJlY3RseTpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ3JlYWN0LWJvb3RzdHJhcC1wbHVnaW5zL2Nzcy9wbHVnaW5zLmNzcydcbiAqIGBgYFxuICovXG5jb25zdCBOYXZQaWxscyA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTEVsZW1lbnQsIE5hdlBpbGxzUHJvcHM+KCh7XG4gIGNvbnRhaW4gPSBmYWxzZSxcbiAgYWN0aXZlLFxuICBwaWxscyxcbiAgY2xlYXIsXG4gIG9uQ2xpY2ssXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGVcbn0sIHJlZikgPT4ge1xuICBjb25zdCBpdGVtcyA9IChwaWxscyA/PyBbXSkubWFwKChyKSA9PiAoXG4gICAgPGJ1dHRvblxuICAgICAga2V5PXtTdHJpbmcoci5rZXkpfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkaXNhYmxlZD17ci5kaXNhYmxlZCB8fCBmYWxzZX1cbiAgICAgIGNsYXNzTmFtZT17Y24oJ25hdi1saW5rIHRleHQtY2VudGVyIGFsaWduLW1pZGRsZScsIHIua2V5ID09PSBhY3RpdmUgJiYgJ2FjdGl2ZScpfVxuICAgICAgb25DbGljaz17KCkgPT4gb25DbGljaz8uKHIpfVxuICAgID5cbiAgICAgIHtyZW5kZXJJY29uKHIuaWNvbil9XG4gICAgICA8c3Bhbj57ci5sYmwgPz8gci5sYWJlbH08L3NwYW4+XG4gICAgICB7ci5jbGVhciAmJiAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwiYmFkZ2UgbmF2cGlsbHMtYmFkZ2UtY2xlYXIgbXktMCBmbG9hdC1lbmQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZzLTUgbXMtM1wiXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRpc21pc3NcIlxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IGNsZWFyPy4ocikgfX1cbiAgICAgICAgPlxuICAgICAgICAgICZ0aW1lcztcbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIHtyLm5ldyAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJhZGdlIG5hdnBpbGxzLWJhZGdlLW5ldyBmbG9hdC1lbmQgbXMtNFwiPk5ldzwvc3Bhbj5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICkpXG5cbiAgaWYgKGNvbnRhaW4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NuKCduYXZwaWxscy1iYXIgcHgtMiBiZy1saWdodCByb3VuZGVkLTAgbWItMCcsIGNsYXNzTmFtZSl9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIDxuYXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT1cImNvbnRhaW5lciBuYXYgbmF2LXBpbGxzIG92ZXJmbG93LXgtYXV0byBmbGV4LW5vd3JhcFwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9uYXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxuYXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT17Y24oJ25hdiBuYXYtcGlsbHMgb3ZlcmZsb3cteC1hdXRvIGZsZXgtbm93cmFwJywgY2xhc3NOYW1lKX0gc3R5bGU9e3N0eWxlfT5cbiAgICAgIHtpdGVtc31cbiAgICA8L25hdj5cbiAgKVxufSlcblxuTmF2UGlsbHMuZGlzcGxheU5hbWUgPSAnTmF2UGlsbHMnXG5cbmV4cG9ydCB7IE5hdlBpbGxzIH1cbmV4cG9ydCBkZWZhdWx0IE5hdlBpbGxzXG4iXX0=
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkNPQQDBFB_cjs=require('./chunk-NPQQDBFB.cjs'),t=require('react'),reactDom=require('react-dom'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var t__namespace=/*#__PURE__*/_interopNamespace(t);var R=t__namespace.forwardRef(({show:n=false,title:h,message:E,onConfirm:N,onCancel:c,label:D="Confirm",variant:f="primary",className:C},k)=>{let[i,m]=t__namespace.useState(false),b=t__namespace.useId(),g=t__namespace.useId(),y=t__namespace.useRef(null),v=t__namespace.useRef(null),u=t__namespace.useRef(0);t__namespace.useEffect(()=>{n&&v.current?.focus();},[n]),t__namespace.useEffect(()=>{n||(u.current++,m(false));},[n]),t__namespace.useEffect(()=>{if(!n)return;let{body:e}=document,o=window.innerWidth-document.documentElement.clientWidth,r=e.style.overflow,s=e.style.paddingRight;return e.style.overflow="hidden",o>0&&(e.style.paddingRight=`${o}px`),()=>{e.style.overflow=r,e.style.paddingRight=s;}},[n]),t__namespace.useEffect(()=>{if(!n)return;let e=o=>{o.key==="Escape"&&!i&&c();};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[n,i,c]);let x=e=>{if(e.key!=="Tab")return;let o=y.current;if(!o)return;let r=Array.from(o.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')).filter(I=>!I.hasAttribute("disabled"));if(!r.length)return;let s=r[0],p=r[r.length-1];e.shiftKey&&document.activeElement===s?(e.preventDefault(),p.focus()):!e.shiftKey&&document.activeElement===p&&(e.preventDefault(),s.focus());},w=async()=>{if(i)return;let e=++u.current;m(true);try{await N();}finally{u.current===e&&m(false);}};return !n||typeof document>"u"?null:reactDom.createPortal(jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"confirmdialog-backdrop","aria-hidden":"true"}),jsxRuntime.jsx("div",{ref:k,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":b,"aria-describedby":g,className:chunkNPQQDBFB_cjs.a("modal confirmdialog d-block",C),onKeyDown:x,children:jsxRuntime.jsx("div",{ref:y,className:"modal-dialog modal-dialog-centered modal-sm",children:jsxRuntime.jsxs("div",{className:"modal-content",children:[jsxRuntime.jsxs("div",{className:"confirmdialog-header",children:[jsxRuntime.jsx("span",{className:chunkNPQQDBFB_cjs.a("confirmdialog-dot",`bg-${f}`),"aria-hidden":"true"}),jsxRuntime.jsx("h5",{className:"modal-title",id:b,children:h})]}),jsxRuntime.jsx("div",{id:g,className:chunkNPQQDBFB_cjs.a("confirmdialog-body border-start border-3",`border-${f}`),children:E}),jsxRuntime.jsxs("div",{className:"confirmdialog-footer",children:[jsxRuntime.jsx("button",{type:"button",className:"btn btn-light",onClick:c,disabled:i,children:"Cancel"}),jsxRuntime.jsxs("button",{ref:v,type:"button",className:chunkNPQQDBFB_cjs.a("btn",`btn-${f}`,"fw-semibold"),onClick:w,disabled:i,children:[i&&jsxRuntime.jsx("span",{className:"spinner-border spinner-border-sm me-2","aria-hidden":"true"}),D]})]})]})})})]}),document.body)});R.displayName="ConfirmDialog";var H=R;exports.a=R;exports.b=H;//# sourceMappingURL=chunk-HGRCY2U6.cjs.map
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1EaWFsb2cudHN4Il0sIm5hbWVzIjpbIkNvbmZpcm1EaWFsb2ciLCJ0Iiwic2hvdyIsInRpdGxlIiwibWVzc2FnZSIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIiwibGFiZWwiLCJ2YXJpYW50IiwiY2xhc3NOYW1lIiwicmVmIiwiaXNQZW5kaW5nIiwic2V0SXNQZW5kaW5nIiwidGl0bGVJZCIsIm1lc3NhZ2VJZCIsImRpYWxvZ1JlZiIsImNvbmZpcm1SZWYiLCJjb25maXJtUnVuUmVmIiwiYm9keSIsInNjcm9sbGJhcldpZHRoIiwicHJldk92ZXJmbG93IiwicHJldlBhZGRpbmdSaWdodCIsImhhbmRsZUtleSIsImUiLCJoYW5kbGVLZXlEb3duIiwicm9vdCIsImZvY3VzYWJsZXMiLCJlbCIsImZpcnN0IiwibGFzdCIsImhhbmRsZUNvbmZpcm1DbGljayIsInJ1bklkIiwiY3JlYXRlUG9ydGFsIiwianN4cyIsIkZyYWdtZW50IiwianN4IiwiY24iLCJDb25maXJtRGlhbG9nX2RlZmF1bHQiXSwibWFwcGluZ3MiOiJrZ0JBb0RBLElBQU1BLENBQUFBLENBQXNCQyxZQUFBLENBQUEsVUFBQSxDQUErQyxDQUFDLENBQzFFLEtBQUFDLENBQUFBLENBQU8sS0FBQSxDQUNQLEtBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxPQUFBLENBQUFDLENBQUFBLENBQ0EsVUFBQUMsQ0FBQUEsQ0FDQSxRQUFBLENBQUFDLENBQUFBLENBQ0EsS0FBQSxDQUFBQyxDQUFBQSxDQUFRLFNBQUEsQ0FDUixRQUFBQyxDQUFBQSxDQUFVLFNBQUEsQ0FDVixTQUFBLENBQUFDLENBQ0YsQ0FBQSxDQUFHQyxDQUFBQSxHQUFRLENBQ1QsR0FBTSxDQUFDQyxDQUFBQSxDQUFXQyxDQUFZLENBQUEsQ0FBVVgsWUFBQSxDQUFBLFFBQUEsQ0FBUyxLQUFLLENBQUEsQ0FDaERZLENBQUFBLENBQWdCWixZQUFBLENBQUEsS0FBQSxFQUFNLENBQ3RCYSxDQUFBQSxD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Q0FBQSxDQUFBLENBQ0YsQ0FBQSxDQUFBLENBQ0YsQ0FBQSxDQUNGLEVBQ0YsQ0FBQSxDQUFBLENBQ0YsQ0FBQSxDQUNBLFFBQUEsQ0FBUyxJQUNYLENBQ0YsQ0FBQyxFQUVEUCxDQUFBQSxDQUFjLFdBQUEsQ0FBYyxlQUFBLENBRzVCLElBQU9xQyxDQUFBQSxDQUFRckMiLCJmaWxlIjoiY2h1bmstSEdSQ1kyVTYuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uL2xpYi9jbi5qcydcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiAgVHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuZXhwb3J0IHR5cGUgQ29uZmlybURpYWxvZ1ZhcmlhbnQgPSAncHJpbWFyeScgfCAnZGFuZ2VyJyB8ICdzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdpbmZvJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpcm1EaWFsb2dQcm9wcyB7XG4gIC8qKiBWaXNpYmlsaXR5IOKAlCBmdWxseSBjb250cm9sbGVkIGJ5IHRoZSBjYWxsZXIgKi9cbiAgc2hvdzogYm9vbGVhblxuICAvKiogRGlhbG9nIHRpdGxlICovXG4gIHRpdGxlOiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqIEJvZHkgbWVzc2FnZSAoc3RyaW5nIG9yIEpTWCkgKi9cbiAgbWVzc2FnZTogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiBGaXJlZCB3aGVuIHRoZSBjb25maXJtIGJ1dHRvbiBpcyBjbGlja2VkLiBNYXkgcmV0dXJuIGEgcHJvbWlzZSDigJRcbiAgICogdGhlIGRpYWxvZyBzaG93cyBhIHBlbmRpbmcgc3Bpbm5lciB1bnRpbCBpdCByZXNvbHZlcy5cbiAgICogT24gcmVqZWN0aW9uIHRoZSBkaWFsb2cgc3RheXMgb3BlbiBhbmQgdGhlIGVycm9yIHByb3BhZ2F0ZXM7XG4gICAqIGNhbGxlcnMgaGFuZGxlIHRoZWlyIG93biBlcnJvciBkaXNwbGF5IGluc2lkZSBgb25Db25maXJtYC5cbiAgICovXG4gIG9uQ29uZmlybTogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbiAgLyoqIEZpcmVkIG9uIHRoZSBDYW5jZWwgYnV0dG9uIG9yIHRoZSBFc2NhcGUga2V5ICovXG4gIG9uQ2FuY2VsOiAoKSA9PiB2b2lkXG4gIC8qKiBDb25maXJtIGJ1dHRvbiBsYWJlbCAqL1xuICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKiogQm9vdHN0cmFwIGNvbG9yIHZhcmlhbnQgZm9yIHRoZSBjb25maXJtIGJ1dHRvbiwgaGVhZGVyIGRvdCwgYW5kIG1lc3NhZ2UgcnVsZSAqL1xuICB2YXJpYW50PzogQ29uZmlybURpYWxvZ1ZhcmlhbnRcbiAgLyoqIEV4dHJhIENTUyBjbGFzc2VzIG9uIHRoZSBkaWFsb2cgZWxlbWVudCAqL1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiAgQ29uZmlybURpYWxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBaZXJvLWRlcGVuZGVuY3kgQm9vdHN0cmFwIDUgY29uZmlybWF0aW9uIGRpYWxvZy5cbiAqXG4gKiBSZW5kZXJzIHN0YW5kYXJkIGAubW9kYWxgIG1hcmt1cCBwb3J0YWxlZCB0byBgZG9jdW1lbnQuYm9keWAgd2l0aCBpdHMgb3duXG4gKiBiYWNrZHJvcCDigJQgbm8gcmVhY3QtYm9vdHN0cmFwIHJlcXVpcmVkLiBCYWNrZHJvcCBjbGlja3MgZG8gbm90aGluZztcbiAqIEVzY2FwZSBmaXJlcyBgb25DYW5jZWxgOyBmb2N1cyBpcyB0cmFwcGVkIGluc2lkZSB0aGUgZGlhbG9nIGFuZCBsYW5kcyBvblxuICogdGhlIGNvbmZpcm0gYnV0dG9uIG9uIG9wZW4uIEJvZHkgc2Nyb2xsIGlzIGxvY2tlZCB3aGlsZSBzaG93bi5cbiAqXG4gKiAqKkltcG9ydGFudDoqKiB0aGUgYWNjb21wYW55aW5nIENTUyAqKm11c3QqKiBiZSBpbXBvcnRlZCBmb3IgdGhlIHByZW1pdW1cbiAqIHN0eWxpbmcgKGJhY2tkcm9wLCByYWRpdXMsIGhlYWRlciBkb3QsIG1lc3NhZ2UgcnVsZSk6XG4gKiBgYGBqc1xuICogaW1wb3J0ICdyZWFjdC1ib290c3RyYXAtcGx1Z2lucy9jc3MvcGx1Z2lucy5jc3MnXG4gKiBgYGBcbiAqL1xuY29uc3QgQ29uZmlybURpYWxvZyA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTERpdkVsZW1lbnQsIENvbmZpcm1EaWFsb2dQcm9wcz4oKHtcbiAgc2hvdyA9IGZhbHNlLFxuICB0aXRsZSxcbiAgbWVzc2FnZSxcbiAgb25Db25maXJtLFxuICBvbkNhbmNlbCxcbiAgbGFiZWwgPSAnQ29uZmlybScsXG4gIHZhcmlhbnQgPSAncHJpbWFyeScsXG4gIGNsYXNzTmFtZSxcbn0sIHJlZikgPT4ge1xuICBjb25zdCBbaXNQZW5kaW5nLCBzZXRJc1BlbmRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRpdGxlSWQgPSBSZWFjdC51c2VJZCgpXG4gIGNvbnN0IG1lc3NhZ2VJZCA9IFJlYWN0LnVzZUlkKClcbiAgY29uc3QgZGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjb25maXJtUmVmID0gUmVhY3QudXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuICBjb25zdCBjb25maXJtUnVuUmVmID0gUmVhY3QudXNlUmVmKDApXG5cbiAgLyogRm9jdXMgdGhlIHByaW1hcnkgYWN0aW9uIHdoZW4gdGhlIGRpYWxvZyBvcGVucyAqL1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG93KSBjb25maXJtUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgfSwgW3Nob3ddKVxuXG4gIC8qIFJlc2V0IHBlbmRpbmcgd2hlbiBjbG9zZWQg4oCUIGludmFsaWRhdGVzIGFueSBpbi1mbGlnaHQgY29uZmlybSAqL1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvdykge1xuICAgICAgY29uZmlybVJ1blJlZi5jdXJyZW50KytcbiAgICAgIHNldElzUGVuZGluZyhmYWxzZSlcbiAgICB9XG4gIH0sIFtzaG93XSlcblxuICAvKiBCb2R5IHNjcm9sbCBsb2NrIHdoaWxlIHNob3duIChjb21wZW5zYXRlIHNjcm9sbGJhciBkaXNhcHBlYXJhbmNlKSAqL1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvdykgcmV0dXJuXG4gICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gd2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICBjb25zdCBwcmV2T3ZlcmZsb3cgPSBib2R5LnN0eWxlLm92ZXJmbG93XG4gICAgY29uc3QgcHJldlBhZGRpbmdSaWdodCA9IGJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0XG4gICAgYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nXG4gICAgaWYgKHNjcm9sbGJhcldpZHRoID4gMCkgYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtzY3JvbGxiYXJXaWR0aH1weGBcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYm9keS5zdHlsZS5vdmVyZmxvdyA9IHByZXZPdmVyZmxvd1xuICAgICAgYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBwcmV2UGFkZGluZ1JpZ2h0XG4gICAgfVxuICB9LCBbc2hvd10pXG5cbiAgLyogRXNjYXBlIGNsb3NlcyAodW5sZXNzIGEgY29uZmlybSBpcyBwZW5kaW5nKSAqL1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvdykgcmV0dXJuXG4gICAgY29uc3QgaGFuZGxlS2V5ID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScgJiYgIWlzUGVuZGluZykgb25DYW5jZWwoKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5KVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5KVxuICB9LCBbc2hvdywgaXNQZW5kaW5nLCBvbkNhbmNlbF0pXG5cbiAgLyogVGFiIC8gU2hpZnQrVGFiIGN5Y2xlIHdpdGhpbiB0aGUgZGlhbG9nICovXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAoZS5rZXkgIT09ICdUYWInKSByZXR1cm5cbiAgICBjb25zdCByb290ID0gZGlhbG9nUmVmLmN1cnJlbnRcbiAgICBpZiAoIXJvb3QpIHJldHVyblxuICAgIGNvbnN0IGZvY3VzYWJsZXMgPSBBcnJheS5mcm9tKFxuICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignYnV0dG9uLCBbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknKVxuICAgICkuZmlsdGVyKChlbCkgPT4gIWVsLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSlcbiAgICBpZiAoIWZvY3VzYWJsZXMubGVuZ3RoKSByZXR1cm5cbiAgICBjb25zdCBmaXJzdCA9IGZvY3VzYWJsZXNbMF1cbiAgICBjb25zdCBsYXN0ID0gZm9jdXNhYmxlc1tmb2N1c2FibGVzLmxlbmd0aCAtIDFdXG4gICAgaWYgKGUuc2hpZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZmlyc3QpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgbGFzdC5mb2N1cygpXG4gICAgfSBlbHNlIGlmICghZS5zaGlmdEtleSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsYXN0KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGZpcnN0LmZvY3VzKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDb25maXJtQ2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzUGVuZGluZykgcmV0dXJuXG4gICAgY29uc3QgcnVuSWQgPSArK2NvbmZpcm1SdW5SZWYuY3VycmVudFxuICAgIHNldElzUGVuZGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBvbkNvbmZpcm0oKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoY29uZmlybVJ1blJlZi5jdXJyZW50ID09PSBydW5JZCkgc2V0SXNQZW5kaW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGlmICghc2hvdyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29uZmlybWRpYWxvZy1iYWNrZHJvcFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT17dGl0bGVJZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17bWVzc2FnZUlkfVxuICAgICAgICBjbGFzc05hbWU9e2NuKCdtb2RhbCBjb25maXJtZGlhbG9nIGQtYmxvY2snLCBjbGFzc05hbWUpfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIDxkaXYgcmVmPXtkaWFsb2dSZWZ9IGNsYXNzTmFtZT1cIm1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWQgbW9kYWwtc21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29uZmlybWRpYWxvZy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjbignY29uZmlybWRpYWxvZy1kb3QnLCBgYmctJHt2YXJpYW50fWApfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPVwibW9kYWwtdGl0bGVcIiBpZD17dGl0bGVJZH0+e3RpdGxlfTwvaDU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgaWQ9e21lc3NhZ2VJZH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignY29uZmlybWRpYWxvZy1ib2R5IGJvcmRlci1zdGFydCBib3JkZXItMycsIGBib3JkZXItJHt2YXJpYW50fWApfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bWVzc2FnZX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb25maXJtZGlhbG9nLWZvb3RlclwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWxpZ2h0XCIgb25DbGljaz17b25DYW5jZWx9IGRpc2FibGVkPXtpc1BlbmRpbmd9PlxuICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHJlZj17Y29uZmlybVJlZn1cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdidG4nLCBgYnRuLSR7dmFyaWFudH1gLCAnZnctc2VtaWJvbGQnKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb25maXJtQ2xpY2t9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzUGVuZGluZ31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtpc1BlbmRpbmcgJiYgPHNwYW4gY2xhc3NOYW1lPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+fVxuICAgICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8Lz4sXG4gICAgZG9jdW1lbnQuYm9keVxuICApXG59KVxuXG5Db25maXJtRGlhbG9nLmRpc3BsYXlOYW1lID0gJ0NvbmZpcm1EaWFsb2cnXG5cbmV4cG9ydCB7IENvbmZpcm1EaWFsb2cgfVxuZXhwb3J0IGRlZmF1bHQgQ29uZmlybURpYWxvZ1xuIl19
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkNPQQDBFB_cjs=require('./chunk-NPQQDBFB.cjs'),r=require('react'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var r__namespace=/*#__PURE__*/_interopNamespace(r);var f=l=>l?typeof l=="string"?jsxRuntime.jsx("i",{className:chunkNPQQDBFB_cjs.a(l,"me-2")}):jsxRuntime.jsx("span",{className:"me-2 d-inline-flex align-middle",children:l}):null,c=r__namespace.forwardRef(({contain:l=false,active:p,pills:d,clear:v,onClick:m,className:t,style:s},i)=>{let o=(d??[]).map(e=>jsxRuntime.jsxs("button",{type:"button",disabled:e.disabled||false,className:chunkNPQQDBFB_cjs.a("nav-link text-center align-middle",e.key===p&&"active"),onClick:()=>m?.(e),children:[f(e.icon),jsxRuntime.jsx("span",{children:e.lbl??e.label}),e.clear&&jsxRuntime.jsx("span",{className:"badge navpills-badge-clear my-0 float-end d-flex justify-content-center align-items-center fs-5 ms-3",role:"button","aria-label":"Dismiss",onClick:b=>{b.stopPropagation(),v?.(e);},children:"\xD7"}),e.new&&jsxRuntime.jsx("span",{className:"badge navpills-badge-new float-end ms-4",children:"New"})]},String(e.key)));return l?jsxRuntime.jsx("div",{className:chunkNPQQDBFB_cjs.a("navpills-bar px-2 bg-light rounded-0 mb-0",t),style:s,children:jsxRuntime.jsx("nav",{ref:i,className:"container nav nav-pills overflow-x-auto flex-nowrap",children:o})}):jsxRuntime.jsx("nav",{ref:i,className:chunkNPQQDBFB_cjs.a("nav nav-pills overflow-x-auto flex-nowrap",t),style:s,children:o})});c.displayName="NavPills";var u=c;exports.a=c;exports.b=u;//# sourceMappingURL=chunk-TDSAO4B2.cjs.map
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL05hdlBpbGxzLnRzeCJdLCJuYW1lcyI6WyJyZW5kZXJJY29uIiwiaWNvbiIsImpzeCIsImNuIiwiTmF2UGlsbHMiLCJyIiwiY29udGFpbiIsImFjdGl2ZSIsInBpbGxzIiwiY2xlYXIiLCJvbkNsaWNrIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJyZWYiLCJpdGVtcyIsImpzeHMiLCJlIiwiTmF2UGlsbHNfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Im9lQWlEQSxJQUFNQSxDQUFBQSxDQUFjQyxDQUFBQSxFQUNiQSxFQUNELE9BQU9BLENBQUFBLEVBQVMsU0FBaUJDLGNBQUFBLENBQUMsR0FBQSxDQUFBLENBQUUsVUFBV0MsbUJBQUFBLENBQUdGLENBQUFBLENBQU0sTUFBTSxDQUFBLENBQUcsRUFDOURDLGNBQUFBLENBQUMsTUFBQSxDQUFBLENBQUssVUFBVSxpQ0FBQSxDQUFtQyxRQUFBLENBQUFELEVBQUssQ0FBQSxDQUY3QyxJQUFBLENBZWRHLENBQUFBLENBQWlCQyxZQUFBLENBQUEsVUFBQSxDQUF1QyxDQUFDLENBQzdELE9BQUEsQ0FBQUMsRUFBVSxLQUFBLENBQ1YsTUFBQSxDQUFBQyxFQUNBLEtBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxLQUFBLENBQUFDLENBQUFBLENBQ0EsUUFBQUMsQ0FBQUEsQ0FDQSxTQUFBLENBQUFDLEVBQ0EsS0FBQSxDQUFBQyxDQUNGLEVBQUdDLENBQUFBLEdBQVEsQ0FDVCxJQUFNQyxDQUFBQSxDQUFBQSxDQUFTTixHQUFTLEVBQUMsRUFBRyxJQUFLSCxDQUFBQSxFQUMvQlUsZUFBQUEsQ0FBQyxVQUVDLElBQUEsQ0FBSyxRQUFBLENBQ0wsUUFBQSxDQUFVVixDQUFBQSxDQUFFLFVBQVksS0FBQSxDQUN4QixTQUFBLENBQVdGLG9CQUFHLG1DQUFBLENBQXFDRSxDQUFBQSxDQUFFLE1BQVFFLENBQUFBLEVBQVUsUUFBUSxDQUFBLENBQy9FLE9BQUEsQ0FBUyxJQUFNRyxDQUFBQSxHQUFVTCxDQUFDLEVBRXpCLFFBQUEsQ0FBQSxDQUFBTCxDQUFBQSxDQUFXSyxFQUFFLElBQUksQ0FBQSxDQUNsQkgsY0FBQUEsQ0FBQyxNQUFBLENBQUEsQ0FBTSxTQUFBRyxDQUFBQSxDQUFFLEdBQUEsRUFBT0EsRUFBRSxLQUFBLENBQU0sQ0FBQSxDQUN2QkEsRUFBRSxLQUFBLEVBQ0RILGNBQUFBLENBQUMsTUFBQSxDQUFBLENBQ0MsU0FBQSxDQUFVLHVHQUNWLElBQUEsQ0FBSyxRQUFBLENBQ0wsYUFBVyxTQUFBLENBQ1gsT0FBQSxDQUFVYyxHQUFNLENBQUVBLENBQUFBLENBQUUsZUFBQSxFQUFnQixDQUFHUCxJQUFRSixDQUFDLEVBQUUsRUFDbkQsUUFBQSxDQUFBLE1BQUEsQ0FFRCxDQUFBLENBRURBLEVBQUUsR0FBQSxFQUNESCxjQUFBQSxDQUFDLE1BQUEsQ0FBQSxDQUFLLFNBQUEsQ0FBVSwwQ0FBMEMsUUFBQSxDQUFBLEtBQUEsQ0FBRyxDQUFBLENBQUEsQ0FBQSxDQW5CMUQsT0FBT0csQ0FBQUEsQ0FBRSxHQUFHLENBcUJuQixDQUNELENBQUEsQ0FFRCxPQUFJQyxDQUFBQSxDQUVBSixlQUFDLEtBQUEsQ0FBQSxDQUFJLFNBQUEsQ0FBV0Msb0JBQUcsMkNBQUEsQ0FBNkNRLENBQVMsRUFBRyxLQUFBLENBQU9DLENBQUFBLENBQ2pGLFFBQUEsQ0FBQVYsY0FBQUEsQ0FBQyxPQUFJLEdBQUEsQ0FBS1csQ0FBQUEsQ0FBSyxVQUFVLHFEQUFBLENBQ3RCLFFBQUEsQ0FBQUMsRUFDSCxDQUFBLENBQ0YsQ0FBQSxDQUtGWixjQUFBQSxDQUFDLEtBQUEsQ0FBQSxDQUFJLElBQUtXLENBQUFBLENBQUssU0FBQSxDQUFXVixvQkFBRywyQ0FBQSxDQUE2Q1EsQ0FBUyxFQUFHLEtBQUEsQ0FBT0MsQ0FBQUEsQ0FDMUYsUUFBQSxDQUFBRSxDQUFBQSxDQUNILENBRUosQ0FBQyxFQUVEVixFQUFTLFdBQUEsQ0FBYyxVQUFBLEtBR2hCYSxDQUFBQSxDQUFRYiIsImZpbGUiOiJjaHVuay1URFNBTzRCMi5janMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vbGliL2NuLmpzJ1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qICBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdlBpbGwge1xuICAvKiogVW5pcXVlIHBpbGwgaWRlbnRpZmllciDigJQgY29tcGFyZWQgYWdhaW5zdCBgYWN0aXZlYCAqL1xuICBrZXk6IHN0cmluZyB8IG51bWJlclxuICAvKiogUGlsbCBsYWJlbCB0ZXh0ICovXG4gIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKiBMZWdhY3kgYWxpYXMgZm9yIGBsYWJlbGAgKHRha2VzIHByZWNlZGVuY2Ugd2hlbiBib3RoIGFyZSBzZXQpICovXG4gIGxibD86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICogT3B0aW9uYWwgbGVhZGluZyBpY29uLiBBIHN0cmluZyBpcyByZW5kZXJlZCBhcyBgPGkgY2xhc3NOYW1lPXtpY29ufSAvPmBcbiAgICogKHBhc3MgdGhlIGZ1bGwgaWNvbiBjbGFzcywgZS5nLiBgXCJmYXMgZmEtdXNlclwiYCBvciBgXCJiaSBiaS1wZXJzb25cImApO1xuICAgKiBhIFJlYWN0Tm9kZSAoZS5nLiBhIEx1Y2lkZSBlbGVtZW50KSBpcyByZW5kZXJlZCBhcy1pcy5cbiAgICovXG4gIGljb24/OiBzdHJpbmcgfCBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqIFNob3cgYSBkaXNtaXNzIGJhZGdlIG9uIHRoaXMgcGlsbCDigJQgY2xpY2tpbmcgaXQgZmlyZXMgYG9uQ2xlYXJgICovXG4gIGNsZWFyPzogYm9vbGVhblxuICAvKiogU2hvdyBhIFwiTmV3XCIgYmFkZ2Ugb24gdGhpcyBwaWxsICovXG4gIG5ldz86IGJvb2xlYW5cbiAgLyoqIERpc2FibGUgdGhpcyBwaWxsICovXG4gIGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdlBpbGxzUHJvcHMge1xuICAvKiogUGlsbHMgdG8gcmVuZGVyICovXG4gIHBpbGxzOiBOYXZQaWxsW11cbiAgLyoqIEtleSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBwaWxsICovXG4gIGFjdGl2ZT86IHN0cmluZyB8IG51bWJlclxuICAvKiogRmlyZWQgd2hlbiBhIHBpbGwgaXMgY2xpY2tlZCAqL1xuICBvbkNsaWNrPzogKHBpbGw6IE5hdlBpbGwpID0+IHZvaWRcbiAgLyoqIEZpcmVkIHdoZW4gYSBwaWxsJ3MgZGlzbWlzcyBiYWRnZSBpcyBjbGlja2VkIChyZXF1aXJlcyBgcGlsbC5jbGVhcmApICovXG4gIGNsZWFyPzogKHBpbGw6IE5hdlBpbGwpID0+IHZvaWRcbiAgLyoqIFdyYXAgdGhlIHBpbGxzIGluIGEgZnVsbC13aWR0aCBsaWdodCBiYXIgd2l0aCBhIGNlbnRlcmVkIGAuY29udGFpbmVyYCAqL1xuICBjb250YWluPzogYm9vbGVhblxuICAvKiogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyAob24gdGhlIHdyYXBwZXIgd2hlbiBgY29udGFpbmAsIGVsc2Ugb24gdGhlIG5hdikgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG5cbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogIE5hdlBpbGxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmNvbnN0IHJlbmRlckljb24gPSAoaWNvbjogTmF2UGlsbFsnaWNvbiddKTogUmVhY3QuUmVhY3ROb2RlID0+IHtcbiAgaWYgKCFpY29uKSByZXR1cm4gbnVsbFxuICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSByZXR1cm4gPGkgY2xhc3NOYW1lPXtjbihpY29uLCAnbWUtMicpfSAvPlxuICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwibWUtMiBkLWlubGluZS1mbGV4IGFsaWduLW1pZGRsZVwiPntpY29ufTwvc3Bhbj5cbn1cblxuLyoqXG4gKiBIb3Jpem9udGFsIEJvb3RzdHJhcCBuYXYtcGlsbHMgdGFiIHN0cmlwIHdpdGggb3B0aW9uYWwgaWNvbnMsXG4gKiBkaXNtaXNzaWJsZSBwaWxscywgYW5kIFwiTmV3XCIgYmFkZ2VzLiBTY3JvbGxzIGhvcml6b250YWxseSBvbiBvdmVyZmxvdy5cbiAqXG4gKiAqKkltcG9ydGFudDoqKiBUaGUgYWNjb21wYW55aW5nIENTUyAqKm11c3QqKiBiZSBpbXBvcnRlZCBmb3IgdGhlIGJhZGdlcyB0b1xuICogcmVuZGVyIGNvcnJlY3RseTpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ3JlYWN0LWJvb3RzdHJhcC1wbHVnaW5zL2Nzcy9wbHVnaW5zLmNzcydcbiAqIGBgYFxuICovXG5jb25zdCBOYXZQaWxscyA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTEVsZW1lbnQsIE5hdlBpbGxzUHJvcHM+KCh7XG4gIGNvbnRhaW4gPSBmYWxzZSxcbiAgYWN0aXZlLFxuICBwaWxscyxcbiAgY2xlYXIsXG4gIG9uQ2xpY2ssXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGVcbn0sIHJlZikgPT4ge1xuICBjb25zdCBpdGVtcyA9IChwaWxscyA/PyBbXSkubWFwKChyKSA9PiAoXG4gICAgPGJ1dHRvblxuICAgICAga2V5PXtTdHJpbmcoci5rZXkpfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkaXNhYmxlZD17ci5kaXNhYmxlZCB8fCBmYWxzZX1cbiAgICAgIGNsYXNzTmFtZT17Y24oJ25hdi1saW5rIHRleHQtY2VudGVyIGFsaWduLW1pZGRsZScsIHIua2V5ID09PSBhY3RpdmUgJiYgJ2FjdGl2ZScpfVxuICAgICAgb25DbGljaz17KCkgPT4gb25DbGljaz8uKHIpfVxuICAgID5cbiAgICAgIHtyZW5kZXJJY29uKHIuaWNvbil9XG4gICAgICA8c3Bhbj57ci5sYmwgPz8gci5sYWJlbH08L3NwYW4+XG4gICAgICB7ci5jbGVhciAmJiAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwiYmFkZ2UgbmF2cGlsbHMtYmFkZ2UtY2xlYXIgbXktMCBmbG9hdC1lbmQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZzLTUgbXMtM1wiXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRpc21pc3NcIlxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IGNsZWFyPy4ocikgfX1cbiAgICAgICAgPlxuICAgICAgICAgICZ0aW1lcztcbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIHtyLm5ldyAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJhZGdlIG5hdnBpbGxzLWJhZGdlLW5ldyBmbG9hdC1lbmQgbXMtNFwiPk5ldzwvc3Bhbj5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICkpXG5cbiAgaWYgKGNvbnRhaW4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NuKCduYXZwaWxscy1iYXIgcHgtMiBiZy1saWdodCByb3VuZGVkLTAgbWItMCcsIGNsYXNzTmFtZSl9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIDxuYXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT1cImNvbnRhaW5lciBuYXYgbmF2LXBpbGxzIG92ZXJmbG93LXgtYXV0byBmbGV4LW5vd3JhcFwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9uYXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxuYXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT17Y24oJ25hdiBuYXYtcGlsbHMgb3ZlcmZsb3cteC1hdXRvIGZsZXgtbm93cmFwJywgY2xhc3NOYW1lKX0gc3R5bGU9e3N0eWxlfT5cbiAgICAgIHtpdGVtc31cbiAgICA8L25hdj5cbiAgKVxufSlcblxuTmF2UGlsbHMuZGlzcGxheU5hbWUgPSAnTmF2UGlsbHMnXG5cbmV4cG9ydCB7IE5hdlBpbGxzIH1cbmV4cG9ydCBkZWZhdWx0IE5hdlBpbGxzXG4iXX0=
@@ -0,0 +1,2 @@
1
+ import {a}from'./chunk-RR7TBRGI.js';import*as t from'react';import {createPortal}from'react-dom';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var R=t.forwardRef(({show:n=false,title:h,message:E,onConfirm:N,onCancel:c,label:D="Confirm",variant:f="primary",className:C},k)=>{let[i,m]=t.useState(false),b=t.useId(),g=t.useId(),y=t.useRef(null),v=t.useRef(null),u=t.useRef(0);t.useEffect(()=>{n&&v.current?.focus();},[n]),t.useEffect(()=>{n||(u.current++,m(false));},[n]),t.useEffect(()=>{if(!n)return;let{body:e}=document,o=window.innerWidth-document.documentElement.clientWidth,r=e.style.overflow,s=e.style.paddingRight;return e.style.overflow="hidden",o>0&&(e.style.paddingRight=`${o}px`),()=>{e.style.overflow=r,e.style.paddingRight=s;}},[n]),t.useEffect(()=>{if(!n)return;let e=o=>{o.key==="Escape"&&!i&&c();};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[n,i,c]);let x=e=>{if(e.key!=="Tab")return;let o=y.current;if(!o)return;let r=Array.from(o.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')).filter(I=>!I.hasAttribute("disabled"));if(!r.length)return;let s=r[0],p=r[r.length-1];e.shiftKey&&document.activeElement===s?(e.preventDefault(),p.focus()):!e.shiftKey&&document.activeElement===p&&(e.preventDefault(),s.focus());},w=async()=>{if(i)return;let e=++u.current;m(true);try{await N();}finally{u.current===e&&m(false);}};return !n||typeof document>"u"?null:createPortal(jsxs(Fragment,{children:[jsx("div",{className:"confirmdialog-backdrop","aria-hidden":"true"}),jsx("div",{ref:k,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":b,"aria-describedby":g,className:a("modal confirmdialog d-block",C),onKeyDown:x,children:jsx("div",{ref:y,className:"modal-dialog modal-dialog-centered modal-sm",children:jsxs("div",{className:"modal-content",children:[jsxs("div",{className:"confirmdialog-header",children:[jsx("span",{className:a("confirmdialog-dot",`bg-${f}`),"aria-hidden":"true"}),jsx("h5",{className:"modal-title",id:b,children:h})]}),jsx("div",{id:g,className:a("confirmdialog-body border-start border-3",`border-${f}`),children:E}),jsxs("div",{className:"confirmdialog-footer",children:[jsx("button",{type:"button",className:"btn btn-light",onClick:c,disabled:i,children:"Cancel"}),jsxs("button",{ref:v,type:"button",className:a("btn",`btn-${f}`,"fw-semibold"),onClick:w,disabled:i,children:[i&&jsx("span",{className:"spinner-border spinner-border-sm me-2","aria-hidden":"true"}),D]})]})]})})})]}),document.body)});R.displayName="ConfirmDialog";var H=R;export{R as a,H as b};//# sourceMappingURL=chunk-XL4EQW5D.js.map
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1EaWFsb2cudHN4Il0sIm5hbWVzIjpbIkNvbmZpcm1EaWFsb2ciLCJzaG93IiwidGl0bGUiLCJtZXNzYWdlIiwib25Db25maXJtIiwib25DYW5jZWwiLCJsYWJlbCIsInZhcmlhbnQiLCJjbGFzc05hbWUiLCJyZWYiLCJpc1BlbmRpbmciLCJzZXRJc1BlbmRpbmciLCJ0aXRsZUlkIiwibWVzc2FnZUlkIiwiZGlhbG9nUmVmIiwiY29uZmlybVJlZiIsImNvbmZpcm1SdW5SZWYiLCJib2R5Iiwic2Nyb2xsYmFyV2lkdGgiLCJwcmV2T3ZlcmZsb3ciLCJwcmV2UGFkZGluZ1JpZ2h0IiwiaGFuZGxlS2V5IiwiZSIsImhhbmRsZUtleURvd24iLCJyb290IiwiZm9jdXNhYmxlcyIsImVsIiwiZmlyc3QiLCJsYXN0IiwiaGFuZGxlQ29uZmlybUNsaWNrIiwicnVuSWQiLCJjcmVhdGVQb3J0YWwiLCJqc3hzIiwiRnJhZ21lbnQiLCJqc3giLCJjbiIsIkNvbmZpcm1EaWFsb2dfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Im1KQW9EQSxJQUFNQSxDQUFBQSxDQUFzQixDQUFBLENBQUEsVUFBQSxDQUErQyxDQUFDLENBQzFFLEtBQUFDLENBQUFBLENBQU8sS0FBQSxDQUNQLEtBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxPQUFBLENBQUFDLENBQUFBLENBQ0EsVUFBQUMsQ0FBQUEsQ0FDQSxRQUFBLENBQUFDLENBQUFBLENBQ0EsS0FBQSxDQUFBQyxDQUFBQSxDQUFRLFNBQUEsQ0FDUixRQUFBQyxDQUFBQSxDQUFVLFNBQUEsQ0FDVixTQUFBLENBQUFDLENBQ0YsQ0FBQSxDQUFHQyxDQUFBQSxHQUFRLENBQ1QsR0FBTSxDQUFDQyxDQUFBQSxDQUFXQyxDQUFZLENBQUEsQ0FBVSxDQUFBLENBQUEsUUFBQSxDQUFTLEtBQUssQ0FBQSxDQUNoREMsQ0FBQUEsQ0FBZ0IsQ0FBQSxDQUFBLEtBQUEsRUFBTSxDQUN0QkMsQ0FBQUEsQ0FBa0IsQ0FB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LENBQ0YsQ0FBQSxDQUNGLEVBQ0YsQ0FBQSxDQUFBLENBQ0YsQ0FBQSxDQUNBLFFBQUEsQ0FBUyxJQUNYLENBQ0YsQ0FBQyxFQUVETixDQUFBQSxDQUFjLFdBQUEsQ0FBYyxlQUFBLENBRzVCLElBQU9vQyxDQUFBQSxDQUFRcEMiLCJmaWxlIjoiY2h1bmstWEw0RVFXNUQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vbGliL2NuLmpzJ1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qICBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5leHBvcnQgdHlwZSBDb25maXJtRGlhbG9nVmFyaWFudCA9ICdwcmltYXJ5JyB8ICdkYW5nZXInIHwgJ3N1Y2Nlc3MnIHwgJ3dhcm5pbmcnIHwgJ2luZm8nXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlybURpYWxvZ1Byb3BzIHtcbiAgLyoqIFZpc2liaWxpdHkg4oCUIGZ1bGx5IGNvbnRyb2xsZWQgYnkgdGhlIGNhbGxlciAqL1xuICBzaG93OiBib29sZWFuXG4gIC8qKiBEaWFsb2cgdGl0bGUgKi9cbiAgdGl0bGU6IFJlYWN0LlJlYWN0Tm9kZVxuICAvKiogQm9keSBtZXNzYWdlIChzdHJpbmcgb3IgSlNYKSAqL1xuICBtZXNzYWdlOiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqXG4gICAqIEZpcmVkIHdoZW4gdGhlIGNvbmZpcm0gYnV0dG9uIGlzIGNsaWNrZWQuIE1heSByZXR1cm4gYSBwcm9taXNlIOKAlFxuICAgKiB0aGUgZGlhbG9nIHNob3dzIGEgcGVuZGluZyBzcGlubmVyIHVudGlsIGl0IHJlc29sdmVzLlxuICAgKiBPbiByZWplY3Rpb24gdGhlIGRpYWxvZyBzdGF5cyBvcGVuIGFuZCB0aGUgZXJyb3IgcHJvcGFnYXRlcztcbiAgICogY2FsbGVycyBoYW5kbGUgdGhlaXIgb3duIGVycm9yIGRpc3BsYXkgaW5zaWRlIGBvbkNvbmZpcm1gLlxuICAgKi9cbiAgb25Db25maXJtOiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuICAvKiogRmlyZWQgb24gdGhlIENhbmNlbCBidXR0b24gb3IgdGhlIEVzY2FwZSBrZXkgKi9cbiAgb25DYW5jZWw6ICgpID0+IHZvaWRcbiAgLyoqIENvbmZpcm0gYnV0dG9uIGxhYmVsICovXG4gIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKiBCb290c3RyYXAgY29sb3IgdmFyaWFudCBmb3IgdGhlIGNvbmZpcm0gYnV0dG9uLCBoZWFkZXIgZG90LCBhbmQgbWVzc2FnZSBydWxlICovXG4gIHZhcmlhbnQ/OiBDb25maXJtRGlhbG9nVmFyaWFudFxuICAvKiogRXh0cmEgQ1NTIGNsYXNzZXMgb24gdGhlIGRpYWxvZyBlbGVtZW50ICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qICBDb25maXJtRGlhbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFplcm8tZGVwZW5kZW5jeSBCb290c3RyYXAgNSBjb25maXJtYXRpb24gZGlhbG9nLlxuICpcbiAqIFJlbmRlcnMgc3RhbmRhcmQgYC5tb2RhbGAgbWFya3VwIHBvcnRhbGVkIHRvIGBkb2N1bWVudC5ib2R5YCB3aXRoIGl0cyBvd25cbiAqIGJhY2tkcm9wIOKAlCBubyByZWFjdC1ib290c3RyYXAgcmVxdWlyZWQuIEJhY2tkcm9wIGNsaWNrcyBkbyBub3RoaW5nO1xuICogRXNjYXBlIGZpcmVzIGBvbkNhbmNlbGA7IGZvY3VzIGlzIHRyYXBwZWQgaW5zaWRlIHRoZSBkaWFsb2cgYW5kIGxhbmRzIG9uXG4gKiB0aGUgY29uZmlybSBidXR0b24gb24gb3Blbi4gQm9keSBzY3JvbGwgaXMgbG9ja2VkIHdoaWxlIHNob3duLlxuICpcbiAqICoqSW1wb3J0YW50OioqIHRoZSBhY2NvbXBhbnlpbmcgQ1NTICoqbXVzdCoqIGJlIGltcG9ydGVkIGZvciB0aGUgcHJlbWl1bVxuICogc3R5bGluZyAoYmFja2Ryb3AsIHJhZGl1cywgaGVhZGVyIGRvdCwgbWVzc2FnZSBydWxlKTpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ3JlYWN0LWJvb3RzdHJhcC1wbHVnaW5zL2Nzcy9wbHVnaW5zLmNzcydcbiAqIGBgYFxuICovXG5jb25zdCBDb25maXJtRGlhbG9nID0gUmVhY3QuZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgQ29uZmlybURpYWxvZ1Byb3BzPigoe1xuICBzaG93ID0gZmFsc2UsXG4gIHRpdGxlLFxuICBtZXNzYWdlLFxuICBvbkNvbmZpcm0sXG4gIG9uQ2FuY2VsLFxuICBsYWJlbCA9ICdDb25maXJtJyxcbiAgdmFyaWFudCA9ICdwcmltYXJ5JyxcbiAgY2xhc3NOYW1lLFxufSwgcmVmKSA9PiB7XG4gIGNvbnN0IFtpc1BlbmRpbmcsIHNldElzUGVuZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgdGl0bGVJZCA9IFJlYWN0LnVzZUlkKClcbiAgY29uc3QgbWVzc2FnZUlkID0gUmVhY3QudXNlSWQoKVxuICBjb25zdCBkaWFsb2dSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNvbmZpcm1SZWYgPSBSZWFjdC51c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNvbmZpcm1SdW5SZWYgPSBSZWFjdC51c2VSZWYoMClcblxuICAvKiBGb2N1cyB0aGUgcHJpbWFyeSBhY3Rpb24gd2hlbiB0aGUgZGlhbG9nIG9wZW5zICovXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3cpIGNvbmZpcm1SZWYuY3VycmVudD8uZm9jdXMoKVxuICB9LCBbc2hvd10pXG5cbiAgLyogUmVzZXQgcGVuZGluZyB3aGVuIGNsb3NlZCDigJQgaW52YWxpZGF0ZXMgYW55IGluLWZsaWdodCBjb25maXJtICovXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzaG93KSB7XG4gICAgICBjb25maXJtUnVuUmVmLmN1cnJlbnQrK1xuICAgICAgc2V0SXNQZW5kaW5nKGZhbHNlKVxuICAgIH1cbiAgfSwgW3Nob3ddKVxuXG4gIC8qIEJvZHkgc2Nyb2xsIGxvY2sgd2hpbGUgc2hvd24gKGNvbXBlbnNhdGUgc2Nyb2xsYmFyIGRpc2FwcGVhcmFuY2UpICovXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzaG93KSByZXR1cm5cbiAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aFxuICAgIGNvbnN0IHByZXZPdmVyZmxvdyA9IGJvZHkuc3R5bGUub3ZlcmZsb3dcbiAgICBjb25zdCBwcmV2UGFkZGluZ1JpZ2h0ID0gYm9keS5zdHlsZS5wYWRkaW5nUmlnaHRcbiAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcbiAgICBpZiAoc2Nyb2xsYmFyV2lkdGggPiAwKSBib2R5LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke3Njcm9sbGJhcldpZHRofXB4YFxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gcHJldk92ZXJmbG93XG4gICAgICBib2R5LnN0eWxlLnBhZGRpbmdSaWdodCA9IHByZXZQYWRkaW5nUmlnaHRcbiAgICB9XG4gIH0sIFtzaG93XSlcblxuICAvKiBFc2NhcGUgY2xvc2VzICh1bmxlc3MgYSBjb25maXJtIGlzIHBlbmRpbmcpICovXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzaG93KSByZXR1cm5cbiAgICBjb25zdCBoYW5kbGVLZXkgPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJyAmJiAhaXNQZW5kaW5nKSBvbkNhbmNlbCgpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXkpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXkpXG4gIH0sIFtzaG93LCBpc1BlbmRpbmcsIG9uQ2FuY2VsXSlcblxuICAvKiBUYWIgLyBTaGlmdCtUYWIgY3ljbGUgd2l0aGluIHRoZSBkaWFsb2cgKi9cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLmtleSAhPT0gJ1RhYicpIHJldHVyblxuICAgIGNvbnN0IHJvb3QgPSBkaWFsb2dSZWYuY3VycmVudFxuICAgIGlmICghcm9vdCkgcmV0dXJuXG4gICAgY29uc3QgZm9jdXNhYmxlcyA9IEFycmF5LmZyb20oXG4gICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCdidXR0b24sIFtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKScpXG4gICAgKS5maWx0ZXIoKGVsKSA9PiAhZWwuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKVxuICAgIGlmICghZm9jdXNhYmxlcy5sZW5ndGgpIHJldHVyblxuICAgIGNvbnN0IGZpcnN0ID0gZm9jdXNhYmxlc1swXVxuICAgIGNvbnN0IGxhc3QgPSBmb2N1c2FibGVzW2ZvY3VzYWJsZXMubGVuZ3RoIC0gMV1cbiAgICBpZiAoZS5zaGlmdEtleSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmaXJzdCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBsYXN0LmZvY3VzKClcbiAgICB9IGVsc2UgaWYgKCFlLnNoaWZ0S2V5ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGxhc3QpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgZmlyc3QuZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1DbGljayA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNQZW5kaW5nKSByZXR1cm5cbiAgICBjb25zdCBydW5JZCA9ICsrY29uZmlybVJ1blJlZi5jdXJyZW50XG4gICAgc2V0SXNQZW5kaW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG9uQ29uZmlybSgpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChjb25maXJtUnVuUmVmLmN1cnJlbnQgPT09IHJ1bklkKSBzZXRJc1BlbmRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgaWYgKCFzaG93IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChcbiAgICA8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb25maXJtZGlhbG9nLWJhY2tkcm9wXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXt0aXRsZUlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXttZXNzYWdlSWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y24oJ21vZGFsIGNvbmZpcm1kaWFsb2cgZC1ibG9jaycsIGNsYXNzTmFtZSl9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgID5cbiAgICAgICAgPGRpdiByZWY9e2RpYWxvZ1JlZn0gY2xhc3NOYW1lPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZCBtb2RhbC1zbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb25maXJtZGlhbG9nLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2NuKCdjb25maXJtZGlhbG9nLWRvdCcsIGBiZy0ke3ZhcmlhbnR9YCl9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9XCJtb2RhbC10aXRsZVwiIGlkPXt0aXRsZUlkfT57dGl0bGV9PC9oNT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBpZD17bWVzc2FnZUlkfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdjb25maXJtZGlhbG9nLWJvZHkgYm9yZGVyLXN0YXJ0IGJvcmRlci0zJywgYGJvcmRlci0ke3ZhcmlhbnR9YCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbmZpcm1kaWFsb2ctZm9vdGVyXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tbGlnaHRcIiBvbkNsaWNrPXtvbkNhbmNlbH0gZGlzYWJsZWQ9e2lzUGVuZGluZ30+XG4gICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgcmVmPXtjb25maXJtUmVmfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ2J0bicsIGBidG4tJHt2YXJpYW50fWAsICdmdy1zZW1pYm9sZCcpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1DbGlja31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNQZW5kaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2lzUGVuZGluZyAmJiA8c3BhbiBjbGFzc05hbWU9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbSBtZS0yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz59XG4gICAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvPixcbiAgICBkb2N1bWVudC5ib2R5XG4gIClcbn0pXG5cbkNvbmZpcm1EaWFsb2cuZGlzcGxheU5hbWUgPSAnQ29uZmlybURpYWxvZydcblxuZXhwb3J0IHsgQ29uZmlybURpYWxvZyB9XG5leHBvcnQgZGVmYXVsdCBDb25maXJtRGlhbG9nXG4iXX0=
@@ -1 +1 @@
1
- .input-group>.datepicker-wrapper,.input-group>.searchselect-wrapper{flex:auto;position:relative;width:1%!important;min-width:0!important}.input-group>.datepicker-wrapper:not(:first-child) .form-control,.input-group>.searchselect-wrapper:not(:first-child) .form-select{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.datepicker-wrapper:not(:last-child) .form-control,.input-group>.searchselect-wrapper:not(:last-child) .form-select{border-top-right-radius:0;border-bottom-right-radius:0}.datepicker-popover{border-radius:var(--bs-border-radius,.375rem);-webkit-user-select:none;user-select:none;box-shadow:0 .5rem 1rem #00000026}.datepicker-popover--wide{min-width:420px}.datepicker-calendar{min-width:260px}.datepicker-days-header,.datepicker-days-grid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.datepicker-day-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;text-align:center;width:34px;padding:2px 0;font-size:.7rem;font-weight:600}.datepicker-day{width:34px;height:34px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0 auto;padding:0;font-size:.8rem;font-weight:400;transition:background-color .15s ease-in-out,color .15s ease-in-out;display:flex}.datepicker-day:hover:not(:disabled):not(.datepicker-day--selected){background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-day--today{border:1px solid var(--bs-border-color,#dee2e6);font-weight:700}.datepicker-day--selected{font-weight:600;background-color:var(--bs-primary,#0d6efd)!important;color:#fff!important}.datepicker-day--outside{color:var(--bs-tertiary-color,#adb5bd);opacity:.45;pointer-events:none}.datepicker-day--disabled{color:var(--bs-tertiary-color,#adb5bd);opacity:.35;cursor:not-allowed;pointer-events:none}.datepicker-year-picker{min-width:260px}.datepicker-year-grid{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.datepicker-year-cell{text-align:center;padding:6px 4px;font-size:.85rem}.datepicker-time{min-width:120px}.datepicker-time-col{flex-direction:column;flex:none;align-items:center;width:52px;display:flex}.datepicker-time-col-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;letter-spacing:.04em;-webkit-user-select:none;user-select:none;margin-bottom:2px;font-size:.6rem;font-weight:600}.datepicker-time-col-scroll{scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth;flex-direction:column;align-items:center;gap:1px;height:220px;display:flex;overflow-y:scroll}.datepicker-time-col-scroll::-webkit-scrollbar{display:none}.datepicker-time-item{width:44px;height:30px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:.82rem;font-weight:500;transition:background-color .1s,color .1s;display:flex}.datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff;font-weight:600}.datepicker-time-item--ampm{width:46px;height:36px;font-size:.78rem}.datepicker-time-separator{color:var(--bs-body-color,#212529);flex:none;align-self:center;margin-top:14px;font-size:1.1rem;font-weight:600}.datepicker-footer{border-bottom-left-radius:var(--bs-border-radius,.375rem);border-bottom-right-radius:var(--bs-border-radius,.375rem)}[data-bs-theme=dark] .datepicker-popover{background-color:var(--bs-body-bg,#212529);border-color:var(--bs-border-color,#495057)}[data-bs-theme=dark] .datepicker-day:hover:not(:disabled):not(.datepicker-day--selected),[data-bs-theme=dark] .datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#2c3e50)}[data-bs-theme=dark] .datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff}[data-bs-theme=dark] .datepicker-footer{border-top-color:var(--bs-border-color,#495057)}@media (max-width:575.98px){.datepicker-popover{overflow-x:hidden;max-width:calc(100vw - 8px)!important}.datepicker-popover--wide .d-flex.flex-row{flex-direction:column!important}.datepicker-popover--wide .vr{display:none}.datepicker-day{width:28px;height:28px;font-size:.72rem}.datepicker-day-label{width:28px;font-size:.62rem}.datepicker-calendar,.datepicker-year-picker{min-width:210px}.datepicker-time-col-scroll{height:200px}.datepicker-time-item{width:38px;height:26px;font-size:.75rem}.datepicker-time-item--ampm{width:40px;height:32px}.datepicker-time-separator{margin-top:12px;font-size:1rem}.datepicker-footer .btn{min-height:34px;padding:6px 8px;font-size:.8rem}.datepicker-year-cell{min-height:34px;padding:8px 4px;font-size:.8rem}}.navpills-bar{padding-top:4px;padding-bottom:4px}.navpills-badge-clear{color:var(--bs-danger,#dc3545);background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .12);cursor:pointer;font-size:10px;line-height:1.2}.navpills-badge-clear:hover{background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .25)}.nav-link.active .navpills-badge-clear{color:#fff;background-color:#cf1515d5}.navpills-badge-new{color:var(--bs-success,#198754);background-color:rgba(var(--bs-success-rgb,25, 135, 84), .12);border:1px solid var(--bs-success,#198754)}.nav-link.active .navpills-badge-new{color:#fff;background-color:#fff3;border-color:#fff9}
1
+ .input-group>.datepicker-wrapper,.input-group>.searchselect-wrapper{flex:auto;position:relative;width:1%!important;min-width:0!important}.input-group>.datepicker-wrapper:not(:first-child) .form-control,.input-group>.searchselect-wrapper:not(:first-child) .form-select{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.datepicker-wrapper:not(:last-child) .form-control,.input-group>.searchselect-wrapper:not(:last-child) .form-select{border-top-right-radius:0;border-bottom-right-radius:0}.datepicker-popover{border-radius:var(--bs-border-radius,.375rem);-webkit-user-select:none;user-select:none;box-shadow:0 .5rem 1rem #00000026}.datepicker-popover--wide{min-width:420px}.datepicker-calendar{min-width:260px}.datepicker-days-header,.datepicker-days-grid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.datepicker-day-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;text-align:center;width:34px;padding:2px 0;font-size:.7rem;font-weight:600}.datepicker-day{width:34px;height:34px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0 auto;padding:0;font-size:.8rem;font-weight:400;transition:background-color .15s ease-in-out,color .15s ease-in-out;display:flex}.datepicker-day:hover:not(:disabled):not(.datepicker-day--selected){background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-day--today{border:1px solid var(--bs-border-color,#dee2e6);font-weight:700}.datepicker-day--selected{font-weight:600;background-color:var(--bs-primary,#0d6efd)!important;color:#fff!important}.datepicker-day--outside{color:var(--bs-tertiary-color,#adb5bd);opacity:.45;pointer-events:none}.datepicker-day--disabled{color:var(--bs-tertiary-color,#adb5bd);opacity:.35;cursor:not-allowed;pointer-events:none}.datepicker-year-picker{min-width:260px}.datepicker-year-grid{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.datepicker-year-cell{text-align:center;padding:6px 4px;font-size:.85rem}.datepicker-time{min-width:120px}.datepicker-time-col{flex-direction:column;flex:none;align-items:center;width:52px;display:flex}.datepicker-time-col-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;letter-spacing:.04em;-webkit-user-select:none;user-select:none;margin-bottom:2px;font-size:.6rem;font-weight:600}.datepicker-time-col-scroll{scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth;flex-direction:column;align-items:center;gap:1px;height:220px;display:flex;overflow-y:scroll}.datepicker-time-col-scroll::-webkit-scrollbar{display:none}.datepicker-time-item{width:44px;height:30px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:.82rem;font-weight:500;transition:background-color .1s,color .1s;display:flex}.datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff;font-weight:600}.datepicker-time-item--ampm{width:46px;height:36px;font-size:.78rem}.datepicker-time-separator{color:var(--bs-body-color,#212529);flex:none;align-self:center;margin-top:14px;font-size:1.1rem;font-weight:600}.datepicker-footer{border-bottom-left-radius:var(--bs-border-radius,.375rem);border-bottom-right-radius:var(--bs-border-radius,.375rem)}[data-bs-theme=dark] .datepicker-popover{background-color:var(--bs-body-bg,#212529);border-color:var(--bs-border-color,#495057)}[data-bs-theme=dark] .datepicker-day:hover:not(:disabled):not(.datepicker-day--selected),[data-bs-theme=dark] .datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#2c3e50)}[data-bs-theme=dark] .datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff}[data-bs-theme=dark] .datepicker-footer{border-top-color:var(--bs-border-color,#495057)}@media (max-width:575.98px){.datepicker-popover{overflow-x:hidden;max-width:calc(100vw - 8px)!important}.datepicker-popover--wide .d-flex.flex-row{flex-direction:column!important}.datepicker-popover--wide .vr{display:none}.datepicker-day{width:28px;height:28px;font-size:.72rem}.datepicker-day-label{width:28px;font-size:.62rem}.datepicker-calendar,.datepicker-year-picker{min-width:210px}.datepicker-time-col-scroll{height:200px}.datepicker-time-item{width:38px;height:26px;font-size:.75rem}.datepicker-time-item--ampm{width:40px;height:32px}.datepicker-time-separator{margin-top:12px;font-size:1rem}.datepicker-footer .btn{min-height:34px;padding:6px 8px;font-size:.8rem}.datepicker-year-cell{min-height:34px;padding:8px 4px;font-size:.8rem}}.navpills-bar{padding-top:4px;padding-bottom:4px}.navpills-badge-clear{color:var(--bs-danger,#dc3545);background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .12);cursor:pointer;font-size:10px;line-height:1.2}.navpills-badge-clear:hover{background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .25)}.nav-link.active .navpills-badge-clear{color:#fff;background-color:#cf1515d5}.navpills-badge-new{color:var(--bs-success,#198754);background-color:rgba(var(--bs-success-rgb,25, 135, 84), .12);border:1px solid var(--bs-success,#198754)}.nav-link.active .navpills-badge-new{color:#fff;background-color:#fff3;border-color:#fff9}.confirmdialog-backdrop{z-index:1050;background:#00000080;position:fixed;top:0;bottom:0;left:0;right:0}.confirmdialog .modal-content{border:1px solid var(--bs-border-color,#dee2e6);border-radius:12px;box-shadow:0 12px 40px #00000026}.confirmdialog-header{align-items:center;gap:8px;padding:16px 18px 12px;display:flex}.confirmdialog-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.confirmdialog-header .modal-title{font-weight:600}.confirmdialog-body{color:var(--bs-secondary-color,#6c757d);padding:4px 18px 16px 34px;font-size:.875rem;line-height:1.55}.confirmdialog-footer{justify-content:flex-end;gap:8px;padding:12px 18px 16px;display:flex}
@@ -1 +1 @@
1
- .input-group>.datepicker-wrapper,.input-group>.searchselect-wrapper{flex:auto;position:relative;width:1%!important;min-width:0!important}.input-group>.datepicker-wrapper:not(:first-child) .form-control,.input-group>.searchselect-wrapper:not(:first-child) .form-select{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.datepicker-wrapper:not(:last-child) .form-control,.input-group>.searchselect-wrapper:not(:last-child) .form-select{border-top-right-radius:0;border-bottom-right-radius:0}.datepicker-popover{border-radius:var(--bs-border-radius,.375rem);-webkit-user-select:none;user-select:none;box-shadow:0 .5rem 1rem #00000026}.datepicker-popover--wide{min-width:420px}.datepicker-calendar{min-width:260px}.datepicker-days-header,.datepicker-days-grid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.datepicker-day-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;text-align:center;width:34px;padding:2px 0;font-size:.7rem;font-weight:600}.datepicker-day{width:34px;height:34px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0 auto;padding:0;font-size:.8rem;font-weight:400;transition:background-color .15s ease-in-out,color .15s ease-in-out;display:flex}.datepicker-day:hover:not(:disabled):not(.datepicker-day--selected){background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-day--today{border:1px solid var(--bs-border-color,#dee2e6);font-weight:700}.datepicker-day--selected{font-weight:600;background-color:var(--bs-primary,#0d6efd)!important;color:#fff!important}.datepicker-day--outside{color:var(--bs-tertiary-color,#adb5bd);opacity:.45;pointer-events:none}.datepicker-day--disabled{color:var(--bs-tertiary-color,#adb5bd);opacity:.35;cursor:not-allowed;pointer-events:none}.datepicker-year-picker{min-width:260px}.datepicker-year-grid{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.datepicker-year-cell{text-align:center;padding:6px 4px;font-size:.85rem}.datepicker-time{min-width:120px}.datepicker-time-col{flex-direction:column;flex:none;align-items:center;width:52px;display:flex}.datepicker-time-col-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;letter-spacing:.04em;-webkit-user-select:none;user-select:none;margin-bottom:2px;font-size:.6rem;font-weight:600}.datepicker-time-col-scroll{scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth;flex-direction:column;align-items:center;gap:1px;height:220px;display:flex;overflow-y:scroll}.datepicker-time-col-scroll::-webkit-scrollbar{display:none}.datepicker-time-item{width:44px;height:30px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:.82rem;font-weight:500;transition:background-color .1s,color .1s;display:flex}.datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff;font-weight:600}.datepicker-time-item--ampm{width:46px;height:36px;font-size:.78rem}.datepicker-time-separator{color:var(--bs-body-color,#212529);flex:none;align-self:center;margin-top:14px;font-size:1.1rem;font-weight:600}.datepicker-footer{border-bottom-left-radius:var(--bs-border-radius,.375rem);border-bottom-right-radius:var(--bs-border-radius,.375rem)}[data-bs-theme=dark] .datepicker-popover{background-color:var(--bs-body-bg,#212529);border-color:var(--bs-border-color,#495057)}[data-bs-theme=dark] .datepicker-day:hover:not(:disabled):not(.datepicker-day--selected),[data-bs-theme=dark] .datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#2c3e50)}[data-bs-theme=dark] .datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff}[data-bs-theme=dark] .datepicker-footer{border-top-color:var(--bs-border-color,#495057)}@media (max-width:575.98px){.datepicker-popover{overflow-x:hidden;max-width:calc(100vw - 8px)!important}.datepicker-popover--wide .d-flex.flex-row{flex-direction:column!important}.datepicker-popover--wide .vr{display:none}.datepicker-day{width:28px;height:28px;font-size:.72rem}.datepicker-day-label{width:28px;font-size:.62rem}.datepicker-calendar,.datepicker-year-picker{min-width:210px}.datepicker-time-col-scroll{height:200px}.datepicker-time-item{width:38px;height:26px;font-size:.75rem}.datepicker-time-item--ampm{width:40px;height:32px}.datepicker-time-separator{margin-top:12px;font-size:1rem}.datepicker-footer .btn{min-height:34px;padding:6px 8px;font-size:.8rem}.datepicker-year-cell{min-height:34px;padding:8px 4px;font-size:.8rem}}.navpills-bar{padding-top:4px;padding-bottom:4px}.navpills-badge-clear{color:var(--bs-danger,#dc3545);background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .12);cursor:pointer;font-size:10px;line-height:1.2}.navpills-badge-clear:hover{background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .25)}.nav-link.active .navpills-badge-clear{color:#fff;background-color:#cf1515d5}.navpills-badge-new{color:var(--bs-success,#198754);background-color:rgba(var(--bs-success-rgb,25, 135, 84), .12);border:1px solid var(--bs-success,#198754)}.nav-link.active .navpills-badge-new{color:#fff;background-color:#fff3;border-color:#fff9}
1
+ .input-group>.datepicker-wrapper,.input-group>.searchselect-wrapper{flex:auto;position:relative;width:1%!important;min-width:0!important}.input-group>.datepicker-wrapper:not(:first-child) .form-control,.input-group>.searchselect-wrapper:not(:first-child) .form-select{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.datepicker-wrapper:not(:last-child) .form-control,.input-group>.searchselect-wrapper:not(:last-child) .form-select{border-top-right-radius:0;border-bottom-right-radius:0}.datepicker-popover{border-radius:var(--bs-border-radius,.375rem);-webkit-user-select:none;user-select:none;box-shadow:0 .5rem 1rem #00000026}.datepicker-popover--wide{min-width:420px}.datepicker-calendar{min-width:260px}.datepicker-days-header,.datepicker-days-grid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.datepicker-day-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;text-align:center;width:34px;padding:2px 0;font-size:.7rem;font-weight:600}.datepicker-day{width:34px;height:34px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0 auto;padding:0;font-size:.8rem;font-weight:400;transition:background-color .15s ease-in-out,color .15s ease-in-out;display:flex}.datepicker-day:hover:not(:disabled):not(.datepicker-day--selected){background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-day--today{border:1px solid var(--bs-border-color,#dee2e6);font-weight:700}.datepicker-day--selected{font-weight:600;background-color:var(--bs-primary,#0d6efd)!important;color:#fff!important}.datepicker-day--outside{color:var(--bs-tertiary-color,#adb5bd);opacity:.45;pointer-events:none}.datepicker-day--disabled{color:var(--bs-tertiary-color,#adb5bd);opacity:.35;cursor:not-allowed;pointer-events:none}.datepicker-year-picker{min-width:260px}.datepicker-year-grid{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.datepicker-year-cell{text-align:center;padding:6px 4px;font-size:.85rem}.datepicker-time{min-width:120px}.datepicker-time-col{flex-direction:column;flex:none;align-items:center;width:52px;display:flex}.datepicker-time-col-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;letter-spacing:.04em;-webkit-user-select:none;user-select:none;margin-bottom:2px;font-size:.6rem;font-weight:600}.datepicker-time-col-scroll{scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth;flex-direction:column;align-items:center;gap:1px;height:220px;display:flex;overflow-y:scroll}.datepicker-time-col-scroll::-webkit-scrollbar{display:none}.datepicker-time-item{width:44px;height:30px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:.82rem;font-weight:500;transition:background-color .1s,color .1s;display:flex}.datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff;font-weight:600}.datepicker-time-item--ampm{width:46px;height:36px;font-size:.78rem}.datepicker-time-separator{color:var(--bs-body-color,#212529);flex:none;align-self:center;margin-top:14px;font-size:1.1rem;font-weight:600}.datepicker-footer{border-bottom-left-radius:var(--bs-border-radius,.375rem);border-bottom-right-radius:var(--bs-border-radius,.375rem)}[data-bs-theme=dark] .datepicker-popover{background-color:var(--bs-body-bg,#212529);border-color:var(--bs-border-color,#495057)}[data-bs-theme=dark] .datepicker-day:hover:not(:disabled):not(.datepicker-day--selected),[data-bs-theme=dark] .datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#2c3e50)}[data-bs-theme=dark] .datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff}[data-bs-theme=dark] .datepicker-footer{border-top-color:var(--bs-border-color,#495057)}@media (max-width:575.98px){.datepicker-popover{overflow-x:hidden;max-width:calc(100vw - 8px)!important}.datepicker-popover--wide .d-flex.flex-row{flex-direction:column!important}.datepicker-popover--wide .vr{display:none}.datepicker-day{width:28px;height:28px;font-size:.72rem}.datepicker-day-label{width:28px;font-size:.62rem}.datepicker-calendar,.datepicker-year-picker{min-width:210px}.datepicker-time-col-scroll{height:200px}.datepicker-time-item{width:38px;height:26px;font-size:.75rem}.datepicker-time-item--ampm{width:40px;height:32px}.datepicker-time-separator{margin-top:12px;font-size:1rem}.datepicker-footer .btn{min-height:34px;padding:6px 8px;font-size:.8rem}.datepicker-year-cell{min-height:34px;padding:8px 4px;font-size:.8rem}}.navpills-bar{padding-top:4px;padding-bottom:4px}.navpills-badge-clear{color:var(--bs-danger,#dc3545);background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .12);cursor:pointer;font-size:10px;line-height:1.2}.navpills-badge-clear:hover{background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .25)}.nav-link.active .navpills-badge-clear{color:#fff;background-color:#cf1515d5}.navpills-badge-new{color:var(--bs-success,#198754);background-color:rgba(var(--bs-success-rgb,25, 135, 84), .12);border:1px solid var(--bs-success,#198754)}.nav-link.active .navpills-badge-new{color:#fff;background-color:#fff3;border-color:#fff9}.confirmdialog-backdrop{z-index:1050;background:#00000080;position:fixed;top:0;bottom:0;left:0;right:0}.confirmdialog .modal-content{border:1px solid var(--bs-border-color,#dee2e6);border-radius:12px;box-shadow:0 12px 40px #00000026}.confirmdialog-header{align-items:center;gap:8px;padding:16px 18px 12px;display:flex}.confirmdialog-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.confirmdialog-header .modal-title{font-weight:600}.confirmdialog-body{color:var(--bs-secondary-color,#6c757d);padding:4px 18px 16px 34px;font-size:.875rem;line-height:1.55}.confirmdialog-footer{justify-content:flex-end;gap:8px;padding:12px 18px 16px;display:flex}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkAQJZQLFZ_cjs=require('./chunk-AQJZQLFZ.cjs'),chunkIMNWS57Y_cjs=require('./chunk-IMNWS57Y.cjs'),chunkDMKBSV5Q_cjs=require('./chunk-DMKBSV5Q.cjs'),chunkXVAXFFB3_cjs=require('./chunk-XVAXFFB3.cjs'),chunkAWU5XGMI_cjs=require('./chunk-AWU5XGMI.cjs'),chunk2Q4NZKMX_cjs=require('./chunk-2Q4NZKMX.cjs'),chunk5IOLZUVD_cjs=require('./chunk-5IOLZUVD.cjs'),chunkM3OUUXZG_cjs=require('./chunk-M3OUUXZG.cjs'),chunkXCPF5NPT_cjs=require('./chunk-XCPF5NPT.cjs');require('./chunk-NPQQDBFB.cjs');var chunkH2ULQLGP_cjs=require('./chunk-H2ULQLGP.cjs');Object.defineProperty(exports,"InputCurrency",{enumerable:true,get:function(){return chunkAQJZQLFZ_cjs.a}});Object.defineProperty(exports,"ListGroup",{enumerable:true,get:function(){return chunkIMNWS57Y_cjs.a}});Object.defineProperty(exports,"FormRow",{enumerable:true,get:function(){return chunkDMKBSV5Q_cjs.a}});Object.defineProperty(exports,"DatePicker",{enumerable:true,get:function(){return chunkXVAXFFB3_cjs.a}});Object.defineProperty(exports,"SearchSelect",{enumerable:true,get:function(){return chunkAWU5XGMI_cjs.a}});Object.defineProperty(exports,"Label",{enumerable:true,get:function(){return chunk2Q4NZKMX_cjs.a}});Object.defineProperty(exports,"TableLoading",{enumerable:true,get:function(){return chunk5IOLZUVD_cjs.a}});Object.defineProperty(exports,"AutoTextarea",{enumerable:true,get:function(){return chunkM3OUUXZG_cjs.a}});Object.defineProperty(exports,"NavPills",{enumerable:true,get:function(){return chunkXCPF5NPT_cjs.a}});Object.defineProperty(exports,"AutoDisplay",{enumerable:true,get:function(){return chunkH2ULQLGP_cjs.a}});//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var chunkAQJZQLFZ_cjs=require('./chunk-AQJZQLFZ.cjs'),chunkIMNWS57Y_cjs=require('./chunk-IMNWS57Y.cjs'),chunkDMKBSV5Q_cjs=require('./chunk-DMKBSV5Q.cjs'),chunkHGRCY2U6_cjs=require('./chunk-HGRCY2U6.cjs'),chunkXVAXFFB3_cjs=require('./chunk-XVAXFFB3.cjs'),chunkAWU5XGMI_cjs=require('./chunk-AWU5XGMI.cjs'),chunk2Q4NZKMX_cjs=require('./chunk-2Q4NZKMX.cjs'),chunk5IOLZUVD_cjs=require('./chunk-5IOLZUVD.cjs'),chunkM3OUUXZG_cjs=require('./chunk-M3OUUXZG.cjs'),chunkTDSAO4B2_cjs=require('./chunk-TDSAO4B2.cjs');require('./chunk-NPQQDBFB.cjs');var chunkH2ULQLGP_cjs=require('./chunk-H2ULQLGP.cjs');Object.defineProperty(exports,"InputCurrency",{enumerable:true,get:function(){return chunkAQJZQLFZ_cjs.a}});Object.defineProperty(exports,"ListGroup",{enumerable:true,get:function(){return chunkIMNWS57Y_cjs.a}});Object.defineProperty(exports,"FormRow",{enumerable:true,get:function(){return chunkDMKBSV5Q_cjs.a}});Object.defineProperty(exports,"ConfirmDialog",{enumerable:true,get:function(){return chunkHGRCY2U6_cjs.a}});Object.defineProperty(exports,"DatePicker",{enumerable:true,get:function(){return chunkXVAXFFB3_cjs.a}});Object.defineProperty(exports,"SearchSelect",{enumerable:true,get:function(){return chunkAWU5XGMI_cjs.a}});Object.defineProperty(exports,"Label",{enumerable:true,get:function(){return chunk2Q4NZKMX_cjs.a}});Object.defineProperty(exports,"TableLoading",{enumerable:true,get:function(){return chunk5IOLZUVD_cjs.a}});Object.defineProperty(exports,"AutoTextarea",{enumerable:true,get:function(){return chunkM3OUUXZG_cjs.a}});Object.defineProperty(exports,"NavPills",{enumerable:true,get:function(){return chunkTDSAO4B2_cjs.a}});Object.defineProperty(exports,"AutoDisplay",{enumerable:true,get:function(){return chunkH2ULQLGP_cjs.a}});//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJpbmRleC5janMifQ==
package/dist/index.d.cts CHANGED
@@ -8,4 +8,5 @@ export { AutoDisplay, AutoDisplayProps } from './AutoDisplay.cjs';
8
8
  export { InputCurrency, InputCurrencyProps } from './InputCurrency.cjs';
9
9
  export { ListGroup, ListGroupItem, ListGroupProps } from './ListGroup.cjs';
10
10
  export { FormRow, FormRowProps } from './FormRow.cjs';
11
+ export { ConfirmDialog, ConfirmDialogProps, ConfirmDialogVariant } from './ConfirmDialog.cjs';
11
12
  import 'react';
package/dist/index.d.ts CHANGED
@@ -8,4 +8,5 @@ export { AutoDisplay, AutoDisplayProps } from './AutoDisplay.js';
8
8
  export { InputCurrency, InputCurrencyProps } from './InputCurrency.js';
9
9
  export { ListGroup, ListGroupItem, ListGroupProps } from './ListGroup.js';
10
10
  export { FormRow, FormRowProps } from './FormRow.js';
11
+ export { ConfirmDialog, ConfirmDialogProps, ConfirmDialogVariant } from './ConfirmDialog.js';
11
12
  import 'react';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{a as InputCurrency}from'./chunk-7N56SRTN.js';export{a as ListGroup}from'./chunk-3NEKISL5.js';export{a as FormRow}from'./chunk-6MGNNSRS.js';export{a as DatePicker}from'./chunk-RPHCR4FK.js';export{a as SearchSelect}from'./chunk-ZCAQ7S2A.js';export{a as Label}from'./chunk-HYB5IGJK.js';export{a as TableLoading}from'./chunk-7LXLWNUR.js';export{a as AutoTextarea}from'./chunk-KKWFIJKN.js';export{a as NavPills}from'./chunk-FRNRH2L3.js';import'./chunk-RR7TBRGI.js';export{a as AutoDisplay}from'./chunk-2UX7JYM3.js';//# sourceMappingURL=index.js.map
1
+ export{a as InputCurrency}from'./chunk-7N56SRTN.js';export{a as ListGroup}from'./chunk-3NEKISL5.js';export{a as FormRow}from'./chunk-6MGNNSRS.js';export{a as ConfirmDialog}from'./chunk-XL4EQW5D.js';export{a as DatePicker}from'./chunk-RPHCR4FK.js';export{a as SearchSelect}from'./chunk-ZCAQ7S2A.js';export{a as Label}from'./chunk-HYB5IGJK.js';export{a as TableLoading}from'./chunk-7LXLWNUR.js';export{a as AutoTextarea}from'./chunk-KKWFIJKN.js';export{a as NavPills}from'./chunk-2NI6RRW6.js';import'./chunk-RR7TBRGI.js';export{a as AutoDisplay}from'./chunk-2UX7JYM3.js';//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJpbmRleC5qcyJ9
@@ -0,0 +1,60 @@
1
+ # ConfirmDialog
2
+
3
+ Zero-dependency Bootstrap 5 confirmation dialog with async loading state. Premium "Refined Minimal" styling — soft radius, variant-colored header dot, variant rule on the message.
4
+
5
+ ## Import
6
+
7
+ ```js
8
+ import ConfirmDialog from 'react-bootstrap-plugins/ConfirmDialog'
9
+ // or
10
+ import { ConfirmDialog } from 'react-bootstrap-plugins'
11
+ // Required CSS
12
+ import 'react-bootstrap-plugins/css/plugins.css'
13
+ ```
14
+
15
+ Requires Bootstrap 5 CSS loaded in your app.
16
+
17
+ ## Usage
18
+
19
+ ```jsx
20
+ const [deleteTarget, setDeleteTarget] = useState(null)
21
+
22
+ <ConfirmDialog
23
+ show={!!deleteTarget}
24
+ title="Delete Report Card"
25
+ message="Are you sure you want to delete this report card? This action cannot be undone."
26
+ label="Confirm Delete"
27
+ variant="danger"
28
+ onConfirm={async () => {
29
+ await deleteReportCard(deleteTarget.id) // spinner shows until this settles
30
+ setDeleteTarget(null) // caller controls closing
31
+ }}
32
+ onCancel={() => setDeleteTarget(null)}
33
+ />
34
+ ```
35
+
36
+ The dialog is fully controlled: it never closes itself. Close by setting `show={false}`.
37
+
38
+ ## Props
39
+
40
+ | Prop | Type | Default | Description |
41
+ |------|------|---------|-------------|
42
+ | `show` | `boolean` | required | Visibility — controlled by the caller |
43
+ | `title` | `ReactNode` | required | Dialog title |
44
+ | `message` | `ReactNode` | required | Body message (string or JSX) |
45
+ | `onConfirm` | `() => void \| Promise<void>` | required | Fired on confirm. A returned promise drives the pending spinner; on rejection the dialog stays open and the error propagates — handle error display (toasts) inside `onConfirm` |
46
+ | `onCancel` | `() => void` | required | Fired on the Cancel button or Escape key |
47
+ | `label` | `ReactNode` | `"Confirm"` | Confirm button label |
48
+ | `variant` | `"primary" \| "danger" \| "success" \| "warning" \| "info"` | `"primary"` | Color variant for the confirm button, header dot, and message rule |
49
+ | `className` | `string` | — | Extra classes on the dialog element |
50
+
51
+ ## Behavior
52
+
53
+ - **Backdrop click does nothing** — safe for destructive confirms.
54
+ - **Escape** fires `onCancel` (ignored while a confirm is pending).
55
+ - **Async loading**: while `onConfirm`'s promise is unresolved, the confirm button shows a `spinner-border spinner-border-sm` and both buttons are disabled.
56
+ - **Accessibility**: `role="dialog"` + `aria-modal`, labelled by the title and described by the message; Tab / Shift+Tab cycle within the dialog; focus lands on the confirm button on open; body scroll is locked while shown.
57
+
58
+ ## Dark Mode
59
+
60
+ All colors use Bootstrap CSS variables — the dialog adapts automatically via `[data-bs-theme="dark"]`.
@@ -0,0 +1,549 @@
1
+ # ConfirmDialog Plugin Implementation Plan
2
+
3
+ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
+
5
+ **Goal:** Add a premium zero-dependency `ConfirmDialog` component to react-bootstrap-plugins and migrate the portal's local ConfirmDialog in CBCAlevelReviewResults.jsx to it.
6
+
7
+ **Architecture:** Bootstrap 5 modal markup rendered via `createPortal` to `document.body` — backdrop div + `.modal > .modal-dialog.modal-dialog-centered.modal-sm > .modal-content`. No react-bootstrap, no animation, fully controlled via `show`. "Refined Minimal" premium styling appended to `src/css/plugins.css`. Async `onConfirm` drives a pending spinner state.
8
+
9
+ **Tech Stack:** TypeScript + React 18 (forwardRef, hooks), Bootstrap 5 CSS (classes + CSS variables), tsup build, pnpm.
10
+
11
+ **Testing note (documented deviation, spec-approved):** the package has no test runner (`"test": "echo 'Tests passed'"`). Verification = `pnpm run build` (tsup + dts + CSS) after each task, plus a live smoke checklist in the portal at the end. No vitest is added.
12
+
13
+ **Spec:** `docs/superpowers/specs/2026-08-19-confirmdialog-plugin-design.md`
14
+
15
+ ---
16
+
17
+ ### Task 1: ConfirmDialog component
18
+
19
+ **Files:**
20
+ - Create: `/media/robert/Development/Allios Apps/allios-global/react-bootstrap-plugins/src/components/ConfirmDialog.tsx`
21
+
22
+ - [ ] **Step 1: Write the component**
23
+
24
+ ```tsx
25
+ import * as React from 'react'
26
+ import { createPortal } from 'react-dom'
27
+ import { cn } from '../lib/cn.js'
28
+
29
+ /* ------------------------------------------------------------------ */
30
+ /* Types */
31
+ /* ------------------------------------------------------------------ */
32
+
33
+ export type ConfirmDialogVariant = 'primary' | 'danger' | 'success' | 'warning' | 'info'
34
+
35
+ export interface ConfirmDialogProps {
36
+ /** Visibility — fully controlled by the caller */
37
+ show: boolean
38
+ /** Dialog title */
39
+ title: React.ReactNode
40
+ /** Body message (string or JSX) */
41
+ message: React.ReactNode
42
+ /**
43
+ * Fired when the confirm button is clicked. May return a promise —
44
+ * the dialog shows a pending spinner until it resolves.
45
+ * On rejection the dialog stays open and the error propagates;
46
+ * callers handle their own error display inside `onConfirm`.
47
+ */
48
+ onConfirm: () => void | Promise<void>
49
+ /** Fired on the Cancel button or the Escape key */
50
+ onCancel: () => void
51
+ /** Confirm button label */
52
+ label?: React.ReactNode
53
+ /** Bootstrap color variant for the confirm button, header dot, and message rule */
54
+ variant?: ConfirmDialogVariant
55
+ /** Extra CSS classes on the dialog element */
56
+ className?: string
57
+ }
58
+
59
+ /* ------------------------------------------------------------------ */
60
+ /* ConfirmDialog */
61
+ /* ------------------------------------------------------------------ */
62
+
63
+ /**
64
+ * Zero-dependency Bootstrap 5 confirmation dialog.
65
+ *
66
+ * Renders standard `.modal` markup portaled to `document.body` with its own
67
+ * backdrop — no react-bootstrap required. Backdrop clicks do nothing;
68
+ * Escape fires `onCancel`; focus is trapped inside the dialog and lands on
69
+ * the confirm button on open. Body scroll is locked while shown.
70
+ *
71
+ * **Important:** the accompanying CSS **must** be imported for the premium
72
+ * styling (backdrop, radius, header dot, message rule):
73
+ * ```js
74
+ * import 'react-bootstrap-plugins/css/plugins.css'
75
+ * ```
76
+ */
77
+ const ConfirmDialog = React.forwardRef<HTMLDivElement, ConfirmDialogProps>(({
78
+ show = false,
79
+ title,
80
+ message,
81
+ onConfirm,
82
+ onCancel,
83
+ label = 'Confirm',
84
+ variant = 'primary',
85
+ className,
86
+ }, ref) => {
87
+ const [isPending, setIsPending] = React.useState(false)
88
+ const titleId = React.useId()
89
+ const messageId = React.useId()
90
+ const dialogRef = React.useRef<HTMLDivElement>(null)
91
+ const confirmRef = React.useRef<HTMLButtonElement>(null)
92
+
93
+ /* Focus the primary action when the dialog opens */
94
+ React.useEffect(() => {
95
+ if (show) confirmRef.current?.focus()
96
+ }, [show])
97
+
98
+ /* Body scroll lock while shown (compensate scrollbar disappearance) */
99
+ React.useEffect(() => {
100
+ if (!show) return
101
+ const { body } = document
102
+ const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth
103
+ const prevOverflow = body.style.overflow
104
+ const prevPaddingRight = body.style.paddingRight
105
+ body.style.overflow = 'hidden'
106
+ if (scrollbarWidth > 0) body.style.paddingRight = `${scrollbarWidth}px`
107
+ return () => {
108
+ body.style.overflow = prevOverflow
109
+ body.style.paddingRight = prevPaddingRight
110
+ }
111
+ }, [show])
112
+
113
+ /* Escape closes (unless a confirm is pending) */
114
+ React.useEffect(() => {
115
+ if (!show) return
116
+ const handleKey = (e: KeyboardEvent) => {
117
+ if (e.key === 'Escape' && !isPending) onCancel()
118
+ }
119
+ document.addEventListener('keydown', handleKey)
120
+ return () => document.removeEventListener('keydown', handleKey)
121
+ }, [show, isPending, onCancel])
122
+
123
+ /* Tab / Shift+Tab cycle within the dialog */
124
+ const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {
125
+ if (e.key !== 'Tab') return
126
+ const root = dialogRef.current
127
+ if (!root) return
128
+ const focusables = Array.from(
129
+ root.querySelectorAll<HTMLElement>('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')
130
+ ).filter((el) => !el.hasAttribute('disabled'))
131
+ if (!focusables.length) return
132
+ const first = focusables[0]
133
+ const last = focusables[focusables.length - 1]
134
+ if (e.shiftKey && document.activeElement === first) {
135
+ e.preventDefault()
136
+ last.focus()
137
+ } else if (!e.shiftKey && document.activeElement === last) {
138
+ e.preventDefault()
139
+ first.focus()
140
+ }
141
+ }
142
+
143
+ const handleConfirmClick = async () => {
144
+ if (isPending) return
145
+ setIsPending(true)
146
+ try {
147
+ await onConfirm()
148
+ } finally {
149
+ setIsPending(false)
150
+ }
151
+ }
152
+
153
+ if (!show || typeof document === 'undefined') return null
154
+
155
+ return createPortal(
156
+ <>
157
+ <div className="confirmdialog-backdrop" aria-hidden="true" />
158
+ <div
159
+ ref={ref}
160
+ tabIndex={-1}
161
+ role="dialog"
162
+ aria-modal="true"
163
+ aria-labelledby={titleId}
164
+ aria-describedby={messageId}
165
+ className={cn('modal confirmdialog d-block', className)}
166
+ onKeyDown={handleKeyDown}
167
+ >
168
+ <div ref={dialogRef} className="modal-dialog modal-dialog-centered modal-sm">
169
+ <div className="modal-content">
170
+ <div className="confirmdialog-header">
171
+ <span className={cn('confirmdialog-dot', `bg-${variant}`)} aria-hidden="true" />
172
+ <h5 className="modal-title" id={titleId}>{title}</h5>
173
+ </div>
174
+ <div
175
+ id={messageId}
176
+ className={cn('confirmdialog-body border-start border-3', `border-${variant}`)}
177
+ >
178
+ {message}
179
+ </div>
180
+ <div className="confirmdialog-footer">
181
+ <button type="button" className="btn btn-light" onClick={onCancel} disabled={isPending}>
182
+ Cancel
183
+ </button>
184
+ <button
185
+ ref={confirmRef}
186
+ type="button"
187
+ className={cn('btn', `btn-${variant}`, 'fw-semibold')}
188
+ onClick={handleConfirmClick}
189
+ disabled={isPending}
190
+ >
191
+ {isPending && <span className="spinner-border spinner-border-sm me-2" aria-hidden="true" />}
192
+ {label}
193
+ </button>
194
+ </div>
195
+ </div>
196
+ </div>
197
+ </div>
198
+ </>,
199
+ document.body
200
+ )
201
+ })
202
+
203
+ ConfirmDialog.displayName = 'ConfirmDialog'
204
+
205
+ export { ConfirmDialog }
206
+ export default ConfirmDialog
207
+ ```
208
+
209
+ - [ ] **Step 2: Verify types compile**
210
+
211
+ Run: `cd "/media/robert/Development/Allios Apps/allios-global/react-bootstrap-plugins" && pnpm run build:types`
212
+ Expected: exit 0, `DTS Build success`
213
+
214
+ - [ ] **Step 3: Commit**
215
+
216
+ ```bash
217
+ git add src/components/ConfirmDialog.tsx
218
+ git commit -m "feat: add ConfirmDialog component"
219
+ ```
220
+
221
+ ---
222
+
223
+ ### Task 2: ConfirmDialog styles
224
+
225
+ **Files:**
226
+ - Modify: `/media/robert/Development/Allios Apps/allios-global/react-bootstrap-plugins/src/css/plugins.css` (append at end of file)
227
+
228
+ - [ ] **Step 1: Append the ConfirmDialog CSS section**
229
+
230
+ Append exactly this to the end of `src/css/plugins.css`:
231
+
232
+ ```css
233
+ /* ==========================================================================
234
+ ConfirmDialog — "Refined Minimal" premium confirmation dialog
235
+ Bootstrap 5 modal markup portaled to document.body. Theme-aware via
236
+ --bs-* variables (dark mode works automatically).
237
+ ========================================================================== */
238
+
239
+ .confirmdialog-backdrop {
240
+ position: fixed;
241
+ inset: 0;
242
+ z-index: 1050;
243
+ background: rgba(0, 0, 0, 0.5);
244
+ }
245
+
246
+ .confirmdialog .modal-content {
247
+ border: 1px solid var(--bs-border-color, #dee2e6);
248
+ border-radius: 12px;
249
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15);
250
+ }
251
+
252
+ .confirmdialog-header {
253
+ display: flex;
254
+ align-items: center;
255
+ gap: 8px;
256
+ padding: 16px 18px 12px;
257
+ }
258
+
259
+ .confirmdialog-dot {
260
+ width: 8px;
261
+ height: 8px;
262
+ border-radius: 50%;
263
+ flex-shrink: 0;
264
+ }
265
+
266
+ .confirmdialog-header .modal-title {
267
+ font-weight: 600;
268
+ }
269
+
270
+ .confirmdialog-body {
271
+ padding: 4px 18px 16px 34px;
272
+ color: var(--bs-secondary-color, #6c757d);
273
+ font-size: 0.875rem;
274
+ line-height: 1.55;
275
+ }
276
+
277
+ .confirmdialog-footer {
278
+ display: flex;
279
+ justify-content: flex-end;
280
+ gap: 8px;
281
+ padding: 12px 18px 16px;
282
+ }
283
+ ```
284
+
285
+ - [ ] **Step 2: Verify CSS builds**
286
+
287
+ Run: `cd "/media/robert/Development/Allios Apps/allios-global/react-bootstrap-plugins" && pnpm run build`
288
+ Expected: exit 0, output includes `✓ plugins.css (minified)` and `CSS built successfully.`
289
+
290
+ - [ ] **Step 3: Commit**
291
+
292
+ ```bash
293
+ git add src/css/plugins.css
294
+ git commit -m "style: add ConfirmDialog premium styles"
295
+ ```
296
+
297
+ ---
298
+
299
+ ### Task 3: Package wiring
300
+
301
+ **Files:**
302
+ - Modify: `/media/robert/Development/Allios Apps/allios-global/react-bootstrap-plugins/tsup.config.ts`
303
+ - Modify: `/media/robert/Development/Allios Apps/allios-global/react-bootstrap-plugins/package.json`
304
+ - Modify: `/media/robert/Development/Allios Apps/allios-global/react-bootstrap-plugins/src/index.ts`
305
+
306
+ - [ ] **Step 1: Add tsup entry**
307
+
308
+ In `tsup.config.ts`, add one line to the `entry` object after the `FormRow` line:
309
+
310
+ ```ts
311
+ ConfirmDialog: 'src/components/ConfirmDialog.tsx',
312
+ ```
313
+
314
+ - [ ] **Step 2: Add exports map entry**
315
+
316
+ In `package.json`, after the `"./FormRow"` block (it ends with `},`), add:
317
+
318
+ ```json
319
+ "./ConfirmDialog": {
320
+ "import": {
321
+ "types": "./dist/ConfirmDialog.d.ts",
322
+ "default": "./dist/ConfirmDialog.js"
323
+ },
324
+ "require": {
325
+ "types": "./dist/ConfirmDialog.d.ts",
326
+ "default": "./dist/ConfirmDialog.cjs"
327
+ }
328
+ },
329
+ ```
330
+
331
+ - [ ] **Step 3: Bump version**
332
+
333
+ In `package.json`, change `"version": "2.6.0"` to `"version": "2.7.0"`.
334
+
335
+ - [ ] **Step 4: Add keywords**
336
+
337
+ In `package.json`, in the `keywords` array, add before `"ui-components"`:
338
+
339
+ ```json
340
+ "confirm-dialog",
341
+ "confirmation",
342
+ "modal",
343
+ ```
344
+
345
+ - [ ] **Step 5: Barrel export**
346
+
347
+ In `src/index.ts`, after the `FormRow` export lines, add:
348
+
349
+ ```ts
350
+ export { ConfirmDialog } from './components/ConfirmDialog.js'
351
+ ```
352
+
353
+ and after the `FormRowProps` type export line:
354
+
355
+ ```ts
356
+ export type { ConfirmDialogProps, ConfirmDialogVariant } from './components/ConfirmDialog.js'
357
+ ```
358
+
359
+ - [ ] **Step 6: Verify full build and dist output**
360
+
361
+ Run: `cd "/media/robert/Development/Allios Apps/allios-global/react-bootstrap-plugins" && pnpm run build && ls dist/ConfirmDialog.*`
362
+ Expected: exit 0, and output lists exactly `ConfirmDialog.cjs`, `ConfirmDialog.d.cts`, `ConfirmDialog.d.mts`, `ConfirmDialog.d.ts`, `ConfirmDialog.js`
363
+
364
+ - [ ] **Step 7: Commit**
365
+
366
+ ```bash
367
+ git add tsup.config.ts package.json src/index.ts
368
+ git commit -m "feat: wire ConfirmDialog into build, exports, and barrel"
369
+ ```
370
+
371
+ ---
372
+
373
+ ### Task 4: Documentation
374
+
375
+ **Files:**
376
+ - Create: `/media/robert/Development/Allios Apps/allios-global/react-bootstrap-plugins/docs/CONFIRMDIALOG.md`
377
+ - Modify: `/media/robert/Development/Allios Apps/allios-global/react-bootstrap-plugins/README.md`
378
+
379
+ - [ ] **Step 1: Write the component guide**
380
+
381
+ Create `docs/CONFIRMDIALOG.md`:
382
+
383
+ ```markdown
384
+ # ConfirmDialog
385
+
386
+ Zero-dependency Bootstrap 5 confirmation dialog with async loading state. Premium "Refined Minimal" styling — soft radius, variant-colored header dot, variant rule on the message.
387
+
388
+ ## Import
389
+
390
+ ```js
391
+ import ConfirmDialog from 'react-bootstrap-plugins/ConfirmDialog'
392
+ // or
393
+ import { ConfirmDialog } from 'react-bootstrap-plugins'
394
+ // Required CSS
395
+ import 'react-bootstrap-plugins/css/plugins.css'
396
+ ```
397
+
398
+ Requires Bootstrap 5 CSS loaded in your app.
399
+
400
+ ## Usage
401
+
402
+ ```jsx
403
+ const [deleteTarget, setDeleteTarget] = useState(null)
404
+
405
+ <ConfirmDialog
406
+ show={!!deleteTarget}
407
+ title="Delete Report Card"
408
+ message="Are you sure you want to delete this report card? This action cannot be undone."
409
+ label="Confirm Delete"
410
+ variant="danger"
411
+ onConfirm={async () => {
412
+ await deleteReportCard(deleteTarget.id) // spinner shows until this settles
413
+ setDeleteTarget(null) // caller controls closing
414
+ }}
415
+ onCancel={() => setDeleteTarget(null)}
416
+ />
417
+ ```
418
+
419
+ The dialog is fully controlled: it never closes itself. Close by setting `show={false}`.
420
+
421
+ ## Props
422
+
423
+ | Prop | Type | Default | Description |
424
+ |------|------|---------|-------------|
425
+ | `show` | `boolean` | required | Visibility — controlled by the caller |
426
+ | `title` | `ReactNode` | required | Dialog title |
427
+ | `message` | `ReactNode` | required | Body message (string or JSX) |
428
+ | `onConfirm` | `() => void \| Promise<void>` | required | Fired on confirm. A returned promise drives the pending spinner; on rejection the dialog stays open and the error propagates — handle error display (toasts) inside `onConfirm` |
429
+ | `onCancel` | `() => void` | required | Fired on the Cancel button or Escape key |
430
+ | `label` | `ReactNode` | `"Confirm"` | Confirm button label |
431
+ | `variant` | `"primary" \| "danger" \| "success" \| "warning" \| "info"` | `"primary"` | Color variant for the confirm button, header dot, and message rule |
432
+ | `className` | `string` | — | Extra classes on the dialog element |
433
+
434
+ ## Behavior
435
+
436
+ - **Backdrop click does nothing** — safe for destructive confirms.
437
+ - **Escape** fires `onCancel` (ignored while a confirm is pending).
438
+ - **Async loading**: while `onConfirm`'s promise is unresolved, the confirm button shows a `spinner-border spinner-border-sm` and both buttons are disabled.
439
+ - **Accessibility**: `role="dialog"` + `aria-modal`, labelled by the title and described by the message; Tab / Shift+Tab cycle within the dialog; focus lands on the confirm button on open; body scroll is locked while shown.
440
+
441
+ ## Dark Mode
442
+
443
+ All colors use Bootstrap CSS variables — the dialog adapts automatically via `[data-bs-theme="dark"]`.
444
+ ```
445
+
446
+ - [ ] **Step 2: Add README table row**
447
+
448
+ In `README.md`, add after the `**FormRow**` row in the Components table:
449
+
450
+ ```markdown
451
+ | **ConfirmDialog** | [CONFIRMDIALOG.md](./docs/CONFIRMDIALOG.md) | Bootstrap 5 confirmation dialog with async loading state |
452
+ ```
453
+
454
+ - [ ] **Step 3: Commit**
455
+
456
+ ```bash
457
+ git add docs/CONFIRMDIALOG.md README.md
458
+ git commit -m "docs: add ConfirmDialog guide and README entry"
459
+ ```
460
+
461
+ ---
462
+
463
+ ### Task 5: Publish to npm (user action)
464
+
465
+ - [ ] **Step 1: Dry run**
466
+
467
+ Run: `cd "/media/robert/Development/Allios Apps/allios-global/react-bootstrap-plugins" && pnpm publish --dry-run`
468
+ Expected: package contents include `dist/ConfirmDialog.*`, `dist/css/plugins.css`, `dist/index.*`
469
+
470
+ - [ ] **Step 2: Publish**
471
+
472
+ Run: `pnpm publish --no-git-checks`
473
+ Expected: publishes `react-bootstrap-plugins@2.7.0` to npm
474
+
475
+ ---
476
+
477
+ ### Task 6: Portal migration (allios-swiftplus-dashboard)
478
+
479
+ **Files:**
480
+ - Modify: `/media/robert/Development/Allios Apps/allios-global/allios-swiftplus-dashboard/src/views/academics/CBCAlevelReviewResults.jsx`
481
+
482
+ - [ ] **Step 1: Remove the local ConfirmDialog component**
483
+
484
+ Locate by content (currently lines 150–166, but the file has uncommitted edits so line numbers may have shifted): delete the entire local component starting at `const ConfirmDialog = ({ show, title, message, onConfirm, onCancel, confirmLabel = 'Confirm', variant = 'primary' }) => {` through the component's closing `}` (the one after its `<Modal>...</Modal>` return, before the next top-level declaration). Do not remove anything else.
485
+
486
+ - [ ] **Step 2: Add plugin imports**
487
+
488
+ In the import block, after the existing `import AutoDisplay from 'react-bootstrap-plugins/AutoDisplay'` line, add:
489
+
490
+ ```jsx
491
+ import ConfirmDialog from 'react-bootstrap-plugins/ConfirmDialog'
492
+ import 'react-bootstrap-plugins/css/plugins.css'
493
+ ```
494
+
495
+ - [ ] **Step 3: Update the call site (around line 3664)**
496
+
497
+ Change the prop name `confirmLabel` to `label`:
498
+
499
+ ```jsx
500
+ <ConfirmDialog
501
+ show={!!deleteConfirm}
502
+ title="Delete Report Card"
503
+ message="Are you sure you want to delete this report card? This action cannot be undone."
504
+ label="Confirm Delete"
505
+ variant="danger"
506
+ onConfirm={() => handleDelete(deleteConfirm)}
507
+ onCancel={() => setDeleteConfirm(null)}
508
+ />
509
+ ```
510
+
511
+ Everything else stays — `handleDelete` is async, so the pending spinner will show while the delete API call runs.
512
+
513
+ - [ ] **Step 4: Verify no leftover references**
514
+
515
+ Run: `grep -n "confirmLabel" "/media/robert/Development/Allios Apps/allios-global/allios-swiftplus-dashboard/src/views/academics/CBCAlevelReviewResults.jsx"`
516
+ Expected: no output
517
+
518
+ - [ ] **Step 5: Commit**
519
+
520
+ ```bash
521
+ git add src/views/academics/CBCAlevelReviewResults.jsx
522
+ git commit -m "refactor: use react-bootstrap-plugins ConfirmDialog for report card deletion"
523
+ ```
524
+
525
+ ---
526
+
527
+ ### Task 7: Portal verification (user action)
528
+
529
+ - [ ] **Step 1: Bump the installed package**
530
+
531
+ Run: `cd "/media/robert/Development/Allios Apps/allios-global/allios-swiftplus-dashboard" && pnpm update react-bootstrap-plugins && grep '"react-bootstrap-plugins"' package.json`
532
+ Expected: package.json shows `^2.7.0`
533
+
534
+ - [ ] **Step 2: Smoke check in the running app**
535
+
536
+ Start the dev server (`pnpm dev` — the user runs this) and on the CBC A-Level results page open the Delete Report Card confirm dialog:
537
+
538
+ 1. Dialog appears instantly (no animation), centered, ~300px wide, 12px radius, thin border, soft shadow.
539
+ 2. Header shows a small red dot + "Delete Report Card" (semibold); body message has a 3px red left rule, muted text; footer has `Cancel` (btn-light) + `Confirm Delete` (btn-danger).
540
+ 3. Click Confirm Delete → button shows a spinner and both buttons disable while the API call runs; dialog closes on success; success toast appears.
541
+ 4. Press Escape → dialog closes (onCancel fires), no deletion.
542
+ 5. Click the dimmed backdrop → nothing happens.
543
+ 6. Tab / Shift+Tab cycle stays within the dialog.
544
+ 7. Toggle dark mode → dialog adapts (dot, rule, and buttons use theme colors).
545
+ 8. The page behind the dialog does not scroll.
546
+
547
+ - [ ] **Step 3: Done**
548
+
549
+ After the smoke check passes, the feature is complete. Tag the plugin repo: `git tag v2.7.0 && git push origin v2.7.0`.
@@ -0,0 +1,128 @@
1
+ # ConfirmDialog Plugin — Design Spec
2
+
3
+ > **Date:** 2026-08-19 | **Status:** Approved | **Package:** react-bootstrap-plugins
4
+
5
+ ## Overview
6
+
7
+ Add a `ConfirmDialog` component to `react-bootstrap-plugins` — a zero-dependency Bootstrap 5 confirmation modal with async loading state. Derived from the local `ConfirmDialog` used in `CBCAlevelReviewResults.jsx` of the SwiftPlus portal, restyled to a "Refined Minimal" premium direction (soft radius, thin border, variant-colored dot + left rule on the message).
8
+
9
+ **Decisions made during brainstorming:**
10
+
11
+ - Style direction: **B — Refined Minimal** (user-selected over Ledger Register and Dispatch Notice mockups).
12
+ - Rendering approach: **Bootstrap 5 modal markup via `createPortal`** — no react-bootstrap, no native `<dialog>`, preserving the package's zero-runtime-dependency contract.
13
+ - Features beyond the `nextPlugins.md` spec: **async loading state only**. Escape-close and static backdrop are baseline accessibility, not premium extras.
14
+ - **No animation** — dialog mounts/unmounts instantly with `show` (user decision).
15
+ - Scope: build the plugin **and** migrate the portal usage in `CBCAlevelReviewResults.jsx`.
16
+
17
+ ## API Design
18
+
19
+ ### Props
20
+
21
+ | Prop | Type | Default | Description |
22
+ |------|------|---------|-------------|
23
+ | `show` | `boolean` | required | Visibility — fully controlled by the caller |
24
+ | `title` | `ReactNode` | required | Dialog title |
25
+ | `message` | `ReactNode` | required | Body message (string or JSX) |
26
+ | `onConfirm` | `() => void \| Promise<void>` | required | Fired on confirm; may return a promise to drive the loading state |
27
+ | `onCancel` | `() => void` | required | Fired on Cancel button or Escape key |
28
+ | `label` | `ReactNode` | `"Confirm"` | Confirm button label |
29
+ | `variant` | `"primary" \| "danger" \| "success" \| "warning" \| "info"` | `"primary"` | Bootstrap color variant for the confirm button, dot, and message rule |
30
+ | `className` | `string` | — | Extra CSS classes on the dialog |
31
+
32
+ ### Async contract
33
+
34
+ - On confirm click: set pending, `await onConfirm()`, reset pending (try/finally — no catch).
35
+ - Pending state: `spinner-border spinner-border-sm` inside the confirm button, both buttons disabled, Escape ignored.
36
+ - On rejection: pending resets, dialog stays open, error propagates to the caller (callers handle their own error toasts inside `onConfirm`).
37
+
38
+ ### Controlled pattern
39
+
40
+ The plugin never closes itself. Callers close by setting `show={false}` — matches the existing usage where `handleDelete` clears `deleteConfirm` after the API call succeeds.
41
+
42
+ ## DOM Structure
43
+
44
+ ```html
45
+ <div class="confirmdialog-backdrop"></div> <!-- portaled to document.body -->
46
+ <div class="modal confirmdialog d-block" role="dialog" aria-modal="true"
47
+ aria-labelledby="cd-title" aria-describedby="cd-message" tabindex="-1">
48
+ <div class="modal-dialog modal-dialog-centered modal-sm">
49
+ <div class="modal-content">
50
+ <div class="confirmdialog-header">
51
+ <span class="confirmdialog-dot bg-{variant}" aria-hidden="true"></span>
52
+ <h5 class="modal-title" id="cd-title">{title}</h5>
53
+ </div>
54
+ <div class="confirmdialog-body" id="cd-message">{message}</div>
55
+ <div class="confirmdialog-footer">
56
+ <button type="button" class="btn btn-light" onClick={onCancel}>Cancel</button>
57
+ <button type="button" class="btn btn-{variant}" onClick={handleConfirm}>
58
+ {pending && <span class="spinner-border spinner-border-sm me-2" />}
59
+ {label}
60
+ </button>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ ```
66
+
67
+ Rendered via `createPortal(…, document.body)`. When `show` is `false`, nothing is rendered. No close ✕ button (confirm dialogs are resolved through the two actions). Unique ids via `React.useId()` to avoid collisions between multiple mounted dialogs.
68
+
69
+ ## Behavior
70
+
71
+ - **Backdrop click does nothing** — preserves the portal's current `backdrop="static"` behavior for destructive confirms.
72
+ - **Escape** fires `onCancel`, except while pending.
73
+ - **Focus management**:
74
+ - On open: focus the confirm button (the primary action).
75
+ - Trap: Tab / Shift+Tab cycle within the dialog (header, body, footer buttons) via a keydown handler on the dialog root.
76
+ - **Scroll lock**: set `document.body.style.overflow = "hidden"` while open; restore previous value on close; compensate `padding-right` when the scrollbar disappears.
77
+ - **Cleanup**: all listeners and body styles restored in the unmount cleanup.
78
+
79
+ ## Styling (plugins.css)
80
+
81
+ Appended to `src/css/plugins.css` under a `/* ConfirmDialog */` section, prefixed `.confirmdialog-*`, all colors via Bootstrap 5 CSS variables (theme-aware — dark mode works for free):
82
+
83
+ | Element | Treatment |
84
+ |---|---|
85
+ | Backdrop | Fixed, full-viewport, `background: rgba(0, 0, 0, 0.5)` (as CSS var default), `z-index: 1050` (below Bootstrap modal z-index 1055) |
86
+ | `.modal-content` | `border-radius: 12px`, `1px solid var(--bs-border-color)`, soft shadow `0 12px 40px rgba(0,0,0,.15)` |
87
+ | Header | Padding `16px 18px 12px`, no bottom border; inline 8px round dot using Bootstrap `bg-{variant}` class; semibold title |
88
+ | Body | Message in `var(--bs-secondary-color)`-ish muted text, `3px solid` left rule in the variant color, `padding: 4px 18px 16px 34px` (indented past the rule) |
89
+ | Footer | Padding `12px 18px 16px`, no top border, `justify-content: flex-end`, gap `8px` |
90
+ | Buttons | Native Bootstrap classes: `btn btn-light` (Cancel), `btn btn-{variant}` (Confirm, `fw-semibold`) |
91
+
92
+ Consumers must import `react-bootstrap-plugins/css/plugins.css` (same rule as DatePicker/SearchSelect) and have Bootstrap 5 CSS loaded.
93
+
94
+ ## Package Wiring
95
+
96
+ | File | Change |
97
+ |---|---|
98
+ | `src/components/ConfirmDialog.tsx` | New component — arrow function + `forwardRef`, named + default export, `displayName` |
99
+ | `src/css/plugins.css` | Append `.confirmdialog-*` styles |
100
+ | `tsup.config.ts` | Add entry `ConfirmDialog: 'src/components/ConfirmDialog.tsx'` |
101
+ | `package.json` | Add `./ConfirmDialog` export map entry (import/require + types); keywords `confirm-dialog`, `confirmation`, `modal`; bump version `2.6.0 → 2.7.0` |
102
+ | `src/index.ts` | Barrel export |
103
+ | `docs/CONFIRMDIALOG.md` | Component doc — API table, usage, CSS import note |
104
+ | `README.md` | Add to component list |
105
+
106
+ Follow the package conventions: relative imports only (no `@/`), internal `cn()` from `../lib/cn.js`, no new dependencies.
107
+
108
+ ## Portal Migration (allios-swiftplus-dashboard)
109
+
110
+ 1. `src/views/academics/CBCAlevelReviewResults.jsx`:
111
+ - Delete the local `ConfirmDialog` component (lines 150–166).
112
+ - Import `ConfirmDialog` from `react-bootstrap-plugins/ConfirmDialog`.
113
+ - At the call site: rename `confirmLabel` → `label`; `show`, `title`, `message`, `variant="danger"`, `onConfirm`, `onCancel` unchanged.
114
+ 2. Confirm `react-bootstrap-plugins/css/plugins.css` is imported in the portal (check `src/index.css` / layout); add if missing.
115
+ 3. Bump the portal's installed package to `2.7.0` (`pnpm add react-bootstrap-plugins@latest`).
116
+
117
+ ## Verification
118
+
119
+ - `pnpm run build` in `react-bootstrap-plugins` must pass (tsup bundles ESM+CJS, generates `.d.ts`/`.d.mts`/`.d.cts`, CSS copied by `scripts/build-css.mjs`).
120
+ - `pnpm publish --dry-run` shows the new entry files.
121
+ - Live smoke check in the portal (user runs the app): open the delete dialog on the CBC A-Level results page — confirm loading spinner on async delete, Escape cancel, backdrop click does nothing, Tab cycles within the dialog, dark mode renders correctly.
122
+ - No unit-test framework exists in the package (`"test": "echo 'Tests passed'"`) — verified by build + smoke check instead of the testing pyramid. **Documented deviation.**
123
+
124
+ ## Out of Scope
125
+
126
+ - Sizes beyond `modal-sm` (spec doesn't mention them; current usage is `size="sm"`).
127
+ - A close ✕ button, header icons beyond the variant dot, footer customization slots.
128
+ - Migration of any other local confirm modals in the portal (future follow-up).
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "react-bootstrap-plugins",
3
- "version": "2.6.0",
3
+ "version": "2.7.1",
4
4
  "description": "Production-grade Bootstrap 5 UI plugins for React — DatePicker, SearchSelect, Label, TableLoading, InputCurrency, and more. Zero runtime dependencies beyond React.",
5
5
  "license": "MIT",
6
6
  "author": {
7
7
  "name": "Tumwesigye Robert",
8
- "url": "https://allios.app"
8
+ "url": "https://github.com/robert0531"
9
9
  },
10
10
  "type": "module",
11
11
  "main": "./dist/index.cjs",
@@ -122,6 +122,16 @@
122
122
  "default": "./dist/FormRow.cjs"
123
123
  }
124
124
  },
125
+ "./ConfirmDialog": {
126
+ "import": {
127
+ "types": "./dist/ConfirmDialog.d.ts",
128
+ "default": "./dist/ConfirmDialog.js"
129
+ },
130
+ "require": {
131
+ "types": "./dist/ConfirmDialog.d.ts",
132
+ "default": "./dist/ConfirmDialog.cjs"
133
+ }
134
+ },
125
135
  "./css/plugins.css": "./dist/css/plugins.css",
126
136
  "./css/datepicker.css": "./dist/css/datepicker.css"
127
137
  },
@@ -140,15 +150,6 @@
140
150
  "LICENSE",
141
151
  "README.md"
142
152
  ],
143
- "scripts": {
144
- "build": "tsup && node scripts/build-css.mjs",
145
- "build:types": "tsup --dts-only",
146
- "dev": "tsup --watch",
147
- "prepublishOnly": "pnpm run build",
148
- "lint": "echo 'Lint passed'",
149
- "test": "echo 'Tests passed'",
150
- "push": "npm publish --no-git-checks"
151
- },
152
153
  "keywords": [
153
154
  "react",
154
155
  "bootstrap",
@@ -169,6 +170,9 @@
169
170
  "tabs",
170
171
  "list-group",
171
172
  "listgroup",
173
+ "confirm-dialog",
174
+ "confirmation",
175
+ "modal",
172
176
  "ui-components",
173
177
  "react-bootstrap",
174
178
  "form-controls",
@@ -214,5 +218,13 @@
214
218
  },
215
219
  "publishConfig": {
216
220
  "access": "public"
221
+ },
222
+ "scripts": {
223
+ "build": "tsup && node scripts/build-css.mjs",
224
+ "build:types": "tsup --dts-only",
225
+ "dev": "tsup --watch",
226
+ "lint": "echo 'Lint passed'",
227
+ "test": "echo 'Tests passed'",
228
+ "push": "pnpm publish --no-git-checks"
217
229
  }
218
- }
230
+ }
@@ -1,2 +0,0 @@
1
- import {a}from'./chunk-RR7TBRGI.js';import*as r from'react';import {jsxs,jsx}from'react/jsx-runtime';var N=l=>l?typeof l=="string"?jsx("i",{className:a(l,"me-2")}):jsx("span",{className:"me-2 d-inline-flex align-middle",children:l}):null,c=r.forwardRef(({contain:l=false,active:p,pills:v,clear:m,onClick:d,className:t,style:i},s)=>{let o=(v??[]).map(e=>jsxs("button",{type:"button",className:a("nav-link text-center align-middle",e.key===p&&"active"),onClick:()=>d?.(e),children:[N(e.icon),jsx("span",{children:e.lbl??e.label}),e.clear&&jsx("span",{className:"badge navpills-badge-clear my-0 float-end d-flex justify-content-center align-items-center fs-5 ms-3",role:"button","aria-label":"Dismiss",onClick:f=>{f.stopPropagation(),m?.(e);},children:"\xD7"}),e.new&&jsx("span",{className:"badge navpills-badge-new float-end ms-4",children:"New"})]},String(e.key)));return l?jsx("div",{className:a("navpills-bar px-2 bg-light rounded-0 mb-0",t),style:i,children:jsx("nav",{ref:s,className:"container nav nav-pills overflow-x-auto flex-nowrap",children:o})}):jsx("nav",{ref:s,className:a("nav nav-pills overflow-x-auto flex-nowrap",t),style:i,children:o})});c.displayName="NavPills";var u=c;export{c as a,u as b};//# sourceMappingURL=chunk-FRNRH2L3.js.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL05hdlBpbGxzLnRzeCJdLCJuYW1lcyI6WyJyZW5kZXJJY29uIiwiaWNvbiIsImpzeCIsImNuIiwiTmF2UGlsbHMiLCJjb250YWluIiwiYWN0aXZlIiwicGlsbHMiLCJjbGVhciIsIm9uQ2xpY2siLCJjbGFzc05hbWUiLCJzdHlsZSIsInJlZiIsIml0ZW1zIiwiciIsImpzeHMiLCJlIiwiTmF2UGlsbHNfZGVmYXVsdCJdLCJtYXBwaW5ncyI6InFHQStDQSxJQUFNQSxDQUFBQSxDQUFjQyxDQUFBQSxFQUNiQSxFQUNELE9BQU9BLENBQUFBLEVBQVMsU0FBaUJDLEdBQUFBLENBQUMsR0FBQSxDQUFBLENBQUUsVUFBV0MsQ0FBQUEsQ0FBR0YsQ0FBQUEsQ0FBTSxNQUFNLENBQUEsQ0FBRyxFQUM5REMsR0FBQUEsQ0FBQyxNQUFBLENBQUEsQ0FBSyxTQUFBLENBQVUsaUNBQUEsQ0FBbUMsU0FBQUQsQ0FBQUEsQ0FBSyxDQUFBLENBRjdDLElBQUEsQ0FlZEcsQ0FBQUEsQ0FBaUIsYUFBdUMsQ0FBQyxDQUM3RCxRQUFBQyxDQUFBQSxDQUFVLEtBQUEsQ0FDVixPQUFBQyxDQUFBQSxDQUNBLEtBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxLQUFBLENBQUFDLEVBQ0EsT0FBQSxDQUFBQyxDQUFBQSxDQUNBLFNBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxNQUFBQyxDQUNGLENBQUEsQ0FBR0MsQ0FBQUEsR0FBUSxDQUNULElBQU1DLENBQUFBLENBQUFBLENBQVNOLENBQUFBLEVBQVMsRUFBQyxFQUFHLEdBQUEsQ0FBS08sR0FDL0JDLElBQUFBLENBQUMsUUFBQSxDQUFBLENBRUMsSUFBQSxDQUFLLFFBQUEsQ0FDTCxVQUFXWixDQUFBQSxDQUFHLG1DQUFBLENBQXFDVyxFQUFFLEdBQUEsR0FBUVIsQ0FBQUEsRUFBVSxRQUFRLENBQUEsQ0FDL0UsT0FBQSxDQUFTLElBQU1HLENBQUFBLEdBQVVLLENBQUMsQ0FBQSxDQUV6QixRQUFBLENBQUEsQ0FBQWQsRUFBV2MsQ0FBQUEsQ0FBRSxJQUFJLEVBQ2xCWixHQUFBQSxDQUFDLE1BQUEsQ0FBQSxDQUFNLFFBQUEsQ0FBQVksQ0FBQUEsQ0FBRSxLQUFPQSxDQUFBQSxDQUFFLEtBQUEsQ0FBTSxDQUFBLENBQ3ZCQSxDQUFBQSxDQUFFLE9BQ0RaLEdBQUFBLENBQUMsTUFBQSxDQUFBLENBQ0MsU0FBQSxDQUFVLHNHQUFBLENBQ1YsS0FBSyxRQUFBLENBQ0wsWUFBQSxDQUFXLFVBQ1gsT0FBQSxDQUFVYyxDQUFBQSxFQUFNLENBQUVBLENBQUFBLENBQUUsZUFBQSxFQUFnQixDQUFHUixDQUFBQSxHQUFRTSxDQUFDLEVBQUUsQ0FBQSxDQUNuRCxnQkFFRCxDQUFBLENBRURBLENBQUFBLENBQUUsS0FDRFosR0FBQUEsQ0FBQyxNQUFBLENBQUEsQ0FBSyxTQUFBLENBQVUseUNBQUEsQ0FBMEMsZUFBRyxDQUFBLENBQUEsQ0FBQSxDQWxCMUQsTUFBQSxDQUFPWSxFQUFFLEdBQUcsQ0FvQm5CLENBQ0QsQ0FBQSxDQUVELE9BQUlULENBQUFBLENBRUFILEdBQUFBLENBQUMsT0FBSSxTQUFBLENBQVdDLENBQUFBLENBQUcsMkNBQUEsQ0FBNkNPLENBQVMsRUFBRyxLQUFBLENBQU9DLENBQUFBLENBQ2pGLFFBQUEsQ0FBQVQsR0FBQUEsQ0FBQyxPQUFJLEdBQUEsQ0FBS1UsQ0FBQUEsQ0FBSyxVQUFVLHFEQUFBLENBQ3RCLFFBQUEsQ0FBQUMsRUFDSCxDQUFBLENBQ0YsQ0FBQSxDQUtGWCxHQUFBQSxDQUFDLEtBQUEsQ0FBQSxDQUFJLElBQUtVLENBQUFBLENBQUssU0FBQSxDQUFXVCxFQUFHLDJDQUFBLENBQTZDTyxDQUFTLEVBQUcsS0FBQSxDQUFPQyxDQUFBQSxDQUMxRixRQUFBLENBQUFFLENBQUFBLENBQ0gsQ0FFSixDQUFDLEVBRURULEVBQVMsV0FBQSxDQUFjLFVBQUEsS0FHaEJhLENBQUFBLENBQVFiIiwiZmlsZSI6ImNodW5rLUZSTlJIMkwzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uL2xpYi9jbi5qcydcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiAgVHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuZXhwb3J0IGludGVyZmFjZSBOYXZQaWxsIHtcbiAgLyoqIFVuaXF1ZSBwaWxsIGlkZW50aWZpZXIg4oCUIGNvbXBhcmVkIGFnYWluc3QgYGFjdGl2ZWAgKi9cbiAga2V5OiBzdHJpbmcgfCBudW1iZXJcbiAgLyoqIFBpbGwgbGFiZWwgdGV4dCAqL1xuICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKiogTGVnYWN5IGFsaWFzIGZvciBgbGFiZWxgICh0YWtlcyBwcmVjZWRlbmNlIHdoZW4gYm90aCBhcmUgc2V0KSAqL1xuICBsYmw/OiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGxlYWRpbmcgaWNvbi4gQSBzdHJpbmcgaXMgcmVuZGVyZWQgYXMgYDxpIGNsYXNzTmFtZT17aWNvbn0gLz5gXG4gICAqIChwYXNzIHRoZSBmdWxsIGljb24gY2xhc3MsIGUuZy4gYFwiZmFzIGZhLXVzZXJcImAgb3IgYFwiYmkgYmktcGVyc29uXCJgKTtcbiAgICogYSBSZWFjdE5vZGUgKGUuZy4gYSBMdWNpZGUgZWxlbWVudCkgaXMgcmVuZGVyZWQgYXMtaXMuXG4gICAqL1xuICBpY29uPzogc3RyaW5nIHwgUmVhY3QuUmVhY3ROb2RlXG4gIC8qKiBTaG93IGEgZGlzbWlzcyBiYWRnZSBvbiB0aGlzIHBpbGwg4oCUIGNsaWNraW5nIGl0IGZpcmVzIGBvbkNsZWFyYCAqL1xuICBjbGVhcj86IGJvb2xlYW5cbiAgLyoqIFNob3cgYSBcIk5ld1wiIGJhZGdlIG9uIHRoaXMgcGlsbCAqL1xuICBuZXc/OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2UGlsbHNQcm9wcyB7XG4gIC8qKiBQaWxscyB0byByZW5kZXIgKi9cbiAgcGlsbHM6IE5hdlBpbGxbXVxuICAvKiogS2V5IG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHBpbGwgKi9cbiAgYWN0aXZlPzogc3RyaW5nIHwgbnVtYmVyXG4gIC8qKiBGaXJlZCB3aGVuIGEgcGlsbCBpcyBjbGlja2VkICovXG4gIG9uQ2xpY2s/OiAocGlsbDogTmF2UGlsbCkgPT4gdm9pZFxuICAvKiogRmlyZWQgd2hlbiBhIHBpbGwncyBkaXNtaXNzIGJhZGdlIGlzIGNsaWNrZWQgKHJlcXVpcmVzIGBwaWxsLmNsZWFyYCkgKi9cbiAgY2xlYXI/OiAocGlsbDogTmF2UGlsbCkgPT4gdm9pZFxuICAvKiogV3JhcCB0aGUgcGlsbHMgaW4gYSBmdWxsLXdpZHRoIGxpZ2h0IGJhciB3aXRoIGEgY2VudGVyZWQgYC5jb250YWluZXJgICovXG4gIGNvbnRhaW4/OiBib29sZWFuXG4gIC8qKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIChvbiB0aGUgd3JhcHBlciB3aGVuIGBjb250YWluYCwgZWxzZSBvbiB0aGUgbmF2KSAqL1xuICBjbGFzc05hbWU/OiBzdHJpbmdcblxuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiAgTmF2UGlsbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuY29uc3QgcmVuZGVySWNvbiA9IChpY29uOiBOYXZQaWxsWydpY29uJ10pOiBSZWFjdC5SZWFjdE5vZGUgPT4ge1xuICBpZiAoIWljb24pIHJldHVybiBudWxsXG4gIGlmICh0eXBlb2YgaWNvbiA9PT0gJ3N0cmluZycpIHJldHVybiA8aSBjbGFzc05hbWU9e2NuKGljb24sICdtZS0yJyl9IC8+XG4gIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJtZS0yIGQtaW5saW5lLWZsZXggYWxpZ24tbWlkZGxlXCI+e2ljb259PC9zcGFuPlxufVxuXG4vKipcbiAqIEhvcml6b250YWwgQm9vdHN0cmFwIG5hdi1waWxscyB0YWIgc3RyaXAgd2l0aCBvcHRpb25hbCBpY29ucyxcbiAqIGRpc21pc3NpYmxlIHBpbGxzLCBhbmQgXCJOZXdcIiBiYWRnZXMuIFNjcm9sbHMgaG9yaXpvbnRhbGx5IG9uIG92ZXJmbG93LlxuICpcbiAqICoqSW1wb3J0YW50OioqIFRoZSBhY2NvbXBhbnlpbmcgQ1NTICoqbXVzdCoqIGJlIGltcG9ydGVkIGZvciB0aGUgYmFkZ2VzIHRvXG4gKiByZW5kZXIgY29ycmVjdGx5OlxuICogYGBganNcbiAqIGltcG9ydCAncmVhY3QtYm9vdHN0cmFwLXBsdWdpbnMvY3NzL3BsdWdpbnMuY3NzJ1xuICogYGBgXG4gKi9cbmNvbnN0IE5hdlBpbGxzID0gUmVhY3QuZm9yd2FyZFJlZjxIVE1MRWxlbWVudCwgTmF2UGlsbHNQcm9wcz4oKHtcbiAgY29udGFpbiA9IGZhbHNlLFxuICBhY3RpdmUsXG4gIHBpbGxzLFxuICBjbGVhcixcbiAgb25DbGljayxcbiAgY2xhc3NOYW1lLFxuICBzdHlsZVxufSwgcmVmKSA9PiB7XG4gIGNvbnN0IGl0ZW1zID0gKHBpbGxzID8/IFtdKS5tYXAoKHIpID0+IChcbiAgICA8YnV0dG9uXG4gICAgICBrZXk9e1N0cmluZyhyLmtleSl9XG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ25hdi1saW5rIHRleHQtY2VudGVyIGFsaWduLW1pZGRsZScsIHIua2V5ID09PSBhY3RpdmUgJiYgJ2FjdGl2ZScpfVxuICAgICAgb25DbGljaz17KCkgPT4gb25DbGljaz8uKHIpfVxuICAgID5cbiAgICAgIHtyZW5kZXJJY29uKHIuaWNvbil9XG4gICAgICA8c3Bhbj57ci5sYmwgPz8gci5sYWJlbH08L3NwYW4+XG4gICAgICB7ci5jbGVhciAmJiAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwiYmFkZ2UgbmF2cGlsbHMtYmFkZ2UtY2xlYXIgbXktMCBmbG9hdC1lbmQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZzLTUgbXMtM1wiXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRpc21pc3NcIlxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IGNsZWFyPy4ocikgfX1cbiAgICAgICAgPlxuICAgICAgICAgICZ0aW1lcztcbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIHtyLm5ldyAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJhZGdlIG5hdnBpbGxzLWJhZGdlLW5ldyBmbG9hdC1lbmQgbXMtNFwiPk5ldzwvc3Bhbj5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICkpXG5cbiAgaWYgKGNvbnRhaW4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NuKCduYXZwaWxscy1iYXIgcHgtMiBiZy1saWdodCByb3VuZGVkLTAgbWItMCcsIGNsYXNzTmFtZSl9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIDxuYXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT1cImNvbnRhaW5lciBuYXYgbmF2LXBpbGxzIG92ZXJmbG93LXgtYXV0byBmbGV4LW5vd3JhcFwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9uYXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxuYXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT17Y24oJ25hdiBuYXYtcGlsbHMgb3ZlcmZsb3cteC1hdXRvIGZsZXgtbm93cmFwJywgY2xhc3NOYW1lKX0gc3R5bGU9e3N0eWxlfT5cbiAgICAgIHtpdGVtc31cbiAgICA8L25hdj5cbiAgKVxufSlcblxuTmF2UGlsbHMuZGlzcGxheU5hbWUgPSAnTmF2UGlsbHMnXG5cbmV4cG9ydCB7IE5hdlBpbGxzIH1cbmV4cG9ydCBkZWZhdWx0IE5hdlBpbGxzXG4iXX0=
@@ -1,2 +0,0 @@
1
- 'use strict';var chunkNPQQDBFB_cjs=require('./chunk-NPQQDBFB.cjs'),r=require('react'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var r__namespace=/*#__PURE__*/_interopNamespace(r);var N=l=>l?typeof l=="string"?jsxRuntime.jsx("i",{className:chunkNPQQDBFB_cjs.a(l,"me-2")}):jsxRuntime.jsx("span",{className:"me-2 d-inline-flex align-middle",children:l}):null,c=r__namespace.forwardRef(({contain:l=false,active:p,pills:v,clear:m,onClick:d,className:t,style:i},s)=>{let o=(v??[]).map(e=>jsxRuntime.jsxs("button",{type:"button",className:chunkNPQQDBFB_cjs.a("nav-link text-center align-middle",e.key===p&&"active"),onClick:()=>d?.(e),children:[N(e.icon),jsxRuntime.jsx("span",{children:e.lbl??e.label}),e.clear&&jsxRuntime.jsx("span",{className:"badge navpills-badge-clear my-0 float-end d-flex justify-content-center align-items-center fs-5 ms-3",role:"button","aria-label":"Dismiss",onClick:f=>{f.stopPropagation(),m?.(e);},children:"\xD7"}),e.new&&jsxRuntime.jsx("span",{className:"badge navpills-badge-new float-end ms-4",children:"New"})]},String(e.key)));return l?jsxRuntime.jsx("div",{className:chunkNPQQDBFB_cjs.a("navpills-bar px-2 bg-light rounded-0 mb-0",t),style:i,children:jsxRuntime.jsx("nav",{ref:s,className:"container nav nav-pills overflow-x-auto flex-nowrap",children:o})}):jsxRuntime.jsx("nav",{ref:s,className:chunkNPQQDBFB_cjs.a("nav nav-pills overflow-x-auto flex-nowrap",t),style:i,children:o})});c.displayName="NavPills";var u=c;exports.a=c;exports.b=u;//# sourceMappingURL=chunk-XCPF5NPT.cjs.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL05hdlBpbGxzLnRzeCJdLCJuYW1lcyI6WyJyZW5kZXJJY29uIiwiaWNvbiIsImpzeCIsImNuIiwiTmF2UGlsbHMiLCJyIiwiY29udGFpbiIsImFjdGl2ZSIsInBpbGxzIiwiY2xlYXIiLCJvbkNsaWNrIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJyZWYiLCJpdGVtcyIsImpzeHMiLCJlIiwiTmF2UGlsbHNfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Im9lQStDQSxJQUFNQSxDQUFBQSxDQUFjQyxDQUFBQSxFQUNiQSxFQUNELE9BQU9BLENBQUFBLEVBQVMsU0FBaUJDLGNBQUFBLENBQUMsR0FBQSxDQUFBLENBQUUsVUFBV0MsbUJBQUFBLENBQUdGLENBQUFBLENBQU0sTUFBTSxDQUFBLENBQUcsRUFDOURDLGNBQUFBLENBQUMsTUFBQSxDQUFBLENBQUssU0FBQSxDQUFVLGlDQUFBLENBQW1DLFNBQUFELENBQUFBLENBQUssQ0FBQSxDQUY3QyxJQUFBLENBZWRHLENBQUFBLENBQWlCQyx3QkFBdUMsQ0FBQyxDQUM3RCxRQUFBQyxDQUFBQSxDQUFVLEtBQUEsQ0FDVixPQUFBQyxDQUFBQSxDQUNBLEtBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxLQUFBLENBQUFDLEVBQ0EsT0FBQSxDQUFBQyxDQUFBQSxDQUNBLFNBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxNQUFBQyxDQUNGLENBQUEsQ0FBR0MsQ0FBQUEsR0FBUSxDQUNULElBQU1DLENBQUFBLENBQUFBLENBQVNOLENBQUFBLEVBQVMsRUFBQyxFQUFHLEdBQUEsQ0FBS0gsR0FDL0JVLGVBQUFBLENBQUMsUUFBQSxDQUFBLENBRUMsSUFBQSxDQUFLLFFBQUEsQ0FDTCxVQUFXWixtQkFBQUEsQ0FBRyxtQ0FBQSxDQUFxQ0UsRUFBRSxHQUFBLEdBQVFFLENBQUFBLEVBQVUsUUFBUSxDQUFBLENBQy9FLE9BQUEsQ0FBUyxJQUFNRyxDQUFBQSxHQUFVTCxDQUFDLENBQUEsQ0FFekIsUUFBQSxDQUFBLENBQUFMLEVBQVdLLENBQUFBLENBQUUsSUFBSSxFQUNsQkgsY0FBQUEsQ0FBQyxNQUFBLENBQUEsQ0FBTSxRQUFBLENBQUFHLENBQUFBLENBQUUsS0FBT0EsQ0FBQUEsQ0FBRSxLQUFBLENBQU0sQ0FBQSxDQUN2QkEsQ0FBQUEsQ0FBRSxPQUNESCxjQUFBQSxDQUFDLE1BQUEsQ0FBQSxDQUNDLFNBQUEsQ0FBVSxzR0FBQSxDQUNWLEtBQUssUUFBQSxDQUNMLFlBQUEsQ0FBVyxVQUNYLE9BQUEsQ0FBVWMsQ0FBQUEsRUFBTSxDQUFFQSxDQUFBQSxDQUFFLGVBQUEsRUFBZ0IsQ0FBR1AsQ0FBQUEsR0FBUUosQ0FBQyxFQUFFLENBQUEsQ0FDbkQsZ0JBRUQsQ0FBQSxDQUVEQSxDQUFBQSxDQUFFLEtBQ0RILGNBQUFBLENBQUMsTUFBQSxDQUFBLENBQUssU0FBQSxDQUFVLHlDQUFBLENBQTBDLGVBQUcsQ0FBQSxDQUFBLENBQUEsQ0FsQjFELE1BQUEsQ0FBT0csRUFBRSxHQUFHLENBb0JuQixDQUNELENBQUEsQ0FFRCxPQUFJQyxDQUFBQSxDQUVBSixjQUFBQSxDQUFDLE9BQUksU0FBQSxDQUFXQyxtQkFBQUEsQ0FBRywyQ0FBQSxDQUE2Q1EsQ0FBUyxFQUFHLEtBQUEsQ0FBT0MsQ0FBQUEsQ0FDakYsUUFBQSxDQUFBVixjQUFBQSxDQUFDLE9BQUksR0FBQSxDQUFLVyxDQUFBQSxDQUFLLFVBQVUscURBQUEsQ0FDdEIsUUFBQSxDQUFBQyxFQUNILENBQUEsQ0FDRixDQUFBLENBS0ZaLGNBQUFBLENBQUMsS0FBQSxDQUFBLENBQUksSUFBS1csQ0FBQUEsQ0FBSyxTQUFBLENBQVdWLG9CQUFHLDJDQUFBLENBQTZDUSxDQUFTLEVBQUcsS0FBQSxDQUFPQyxDQUFBQSxDQUMxRixRQUFBLENBQUFFLENBQUFBLENBQ0gsQ0FFSixDQUFDLEVBRURWLEVBQVMsV0FBQSxDQUFjLFVBQUEsS0FHaEJhLENBQUFBLENBQVFiIiwiZmlsZSI6ImNodW5rLVhDUEY1TlBULmNqcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi9saWIvY24uanMnXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogIFR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2UGlsbCB7XG4gIC8qKiBVbmlxdWUgcGlsbCBpZGVudGlmaWVyIOKAlCBjb21wYXJlZCBhZ2FpbnN0IGBhY3RpdmVgICovXG4gIGtleTogc3RyaW5nIHwgbnVtYmVyXG4gIC8qKiBQaWxsIGxhYmVsIHRleHQgKi9cbiAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqIExlZ2FjeSBhbGlhcyBmb3IgYGxhYmVsYCAodGFrZXMgcHJlY2VkZW5jZSB3aGVuIGJvdGggYXJlIHNldCkgKi9cbiAgbGJsPzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiBPcHRpb25hbCBsZWFkaW5nIGljb24uIEEgc3RyaW5nIGlzIHJlbmRlcmVkIGFzIGA8aSBjbGFzc05hbWU9e2ljb259IC8+YFxuICAgKiAocGFzcyB0aGUgZnVsbCBpY29uIGNsYXNzLCBlLmcuIGBcImZhcyBmYS11c2VyXCJgIG9yIGBcImJpIGJpLXBlcnNvblwiYCk7XG4gICAqIGEgUmVhY3ROb2RlIChlLmcuIGEgTHVjaWRlIGVsZW1lbnQpIGlzIHJlbmRlcmVkIGFzLWlzLlxuICAgKi9cbiAgaWNvbj86IHN0cmluZyB8IFJlYWN0LlJlYWN0Tm9kZVxuICAvKiogU2hvdyBhIGRpc21pc3MgYmFkZ2Ugb24gdGhpcyBwaWxsIOKAlCBjbGlja2luZyBpdCBmaXJlcyBgb25DbGVhcmAgKi9cbiAgY2xlYXI/OiBib29sZWFuXG4gIC8qKiBTaG93IGEgXCJOZXdcIiBiYWRnZSBvbiB0aGlzIHBpbGwgKi9cbiAgbmV3PzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdlBpbGxzUHJvcHMge1xuICAvKiogUGlsbHMgdG8gcmVuZGVyICovXG4gIHBpbGxzOiBOYXZQaWxsW11cbiAgLyoqIEtleSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBwaWxsICovXG4gIGFjdGl2ZT86IHN0cmluZyB8IG51bWJlclxuICAvKiogRmlyZWQgd2hlbiBhIHBpbGwgaXMgY2xpY2tlZCAqL1xuICBvbkNsaWNrPzogKHBpbGw6IE5hdlBpbGwpID0+IHZvaWRcbiAgLyoqIEZpcmVkIHdoZW4gYSBwaWxsJ3MgZGlzbWlzcyBiYWRnZSBpcyBjbGlja2VkIChyZXF1aXJlcyBgcGlsbC5jbGVhcmApICovXG4gIGNsZWFyPzogKHBpbGw6IE5hdlBpbGwpID0+IHZvaWRcbiAgLyoqIFdyYXAgdGhlIHBpbGxzIGluIGEgZnVsbC13aWR0aCBsaWdodCBiYXIgd2l0aCBhIGNlbnRlcmVkIGAuY29udGFpbmVyYCAqL1xuICBjb250YWluPzogYm9vbGVhblxuICAvKiogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyAob24gdGhlIHdyYXBwZXIgd2hlbiBgY29udGFpbmAsIGVsc2Ugb24gdGhlIG5hdikgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG5cbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogIE5hdlBpbGxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmNvbnN0IHJlbmRlckljb24gPSAoaWNvbjogTmF2UGlsbFsnaWNvbiddKTogUmVhY3QuUmVhY3ROb2RlID0+IHtcbiAgaWYgKCFpY29uKSByZXR1cm4gbnVsbFxuICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSByZXR1cm4gPGkgY2xhc3NOYW1lPXtjbihpY29uLCAnbWUtMicpfSAvPlxuICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwibWUtMiBkLWlubGluZS1mbGV4IGFsaWduLW1pZGRsZVwiPntpY29ufTwvc3Bhbj5cbn1cblxuLyoqXG4gKiBIb3Jpem9udGFsIEJvb3RzdHJhcCBuYXYtcGlsbHMgdGFiIHN0cmlwIHdpdGggb3B0aW9uYWwgaWNvbnMsXG4gKiBkaXNtaXNzaWJsZSBwaWxscywgYW5kIFwiTmV3XCIgYmFkZ2VzLiBTY3JvbGxzIGhvcml6b250YWxseSBvbiBvdmVyZmxvdy5cbiAqXG4gKiAqKkltcG9ydGFudDoqKiBUaGUgYWNjb21wYW55aW5nIENTUyAqKm11c3QqKiBiZSBpbXBvcnRlZCBmb3IgdGhlIGJhZGdlcyB0b1xuICogcmVuZGVyIGNvcnJlY3RseTpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ3JlYWN0LWJvb3RzdHJhcC1wbHVnaW5zL2Nzcy9wbHVnaW5zLmNzcydcbiAqIGBgYFxuICovXG5jb25zdCBOYXZQaWxscyA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTEVsZW1lbnQsIE5hdlBpbGxzUHJvcHM+KCh7XG4gIGNvbnRhaW4gPSBmYWxzZSxcbiAgYWN0aXZlLFxuICBwaWxscyxcbiAgY2xlYXIsXG4gIG9uQ2xpY2ssXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGVcbn0sIHJlZikgPT4ge1xuICBjb25zdCBpdGVtcyA9IChwaWxscyA/PyBbXSkubWFwKChyKSA9PiAoXG4gICAgPGJ1dHRvblxuICAgICAga2V5PXtTdHJpbmcoci5rZXkpfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKCduYXYtbGluayB0ZXh0LWNlbnRlciBhbGlnbi1taWRkbGUnLCByLmtleSA9PT0gYWN0aXZlICYmICdhY3RpdmUnKX1cbiAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2xpY2s/LihyKX1cbiAgICA+XG4gICAgICB7cmVuZGVySWNvbihyLmljb24pfVxuICAgICAgPHNwYW4+e3IubGJsID8/IHIubGFiZWx9PC9zcGFuPlxuICAgICAge3IuY2xlYXIgJiYgKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cImJhZGdlIG5hdnBpbGxzLWJhZGdlLWNsZWFyIG15LTAgZmxvYXQtZW5kIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmcy01IG1zLTNcIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJEaXNtaXNzXCJcbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4geyBlLnN0b3BQcm9wYWdhdGlvbigpOyBjbGVhcj8uKHIpIH19XG4gICAgICAgID5cbiAgICAgICAgICAmdGltZXM7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICl9XG4gICAgICB7ci5uZXcgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJiYWRnZSBuYXZwaWxscy1iYWRnZS1uZXcgZmxvYXQtZW5kIG1zLTRcIj5OZXc8L3NwYW4+XG4gICAgICApfVxuICAgIDwvYnV0dG9uPlxuICApKVxuXG4gIGlmIChjb250YWluKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbignbmF2cGlsbHMtYmFyIHB4LTIgYmctbGlnaHQgcm91bmRlZC0wIG1iLTAnLCBjbGFzc05hbWUpfSBzdHlsZT17c3R5bGV9PlxuICAgICAgICA8bmF2IHJlZj17cmVmfSBjbGFzc05hbWU9XCJjb250YWluZXIgbmF2IG5hdi1waWxscyBvdmVyZmxvdy14LWF1dG8gZmxleC1ub3dyYXBcIj5cbiAgICAgICAgICB7aXRlbXN9XG4gICAgICAgIDwvbmF2PlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bmF2IHJlZj17cmVmfSBjbGFzc05hbWU9e2NuKCduYXYgbmF2LXBpbGxzIG92ZXJmbG93LXgtYXV0byBmbGV4LW5vd3JhcCcsIGNsYXNzTmFtZSl9IHN0eWxlPXtzdHlsZX0+XG4gICAgICB7aXRlbXN9XG4gICAgPC9uYXY+XG4gIClcbn0pXG5cbk5hdlBpbGxzLmRpc3BsYXlOYW1lID0gJ05hdlBpbGxzJ1xuXG5leHBvcnQgeyBOYXZQaWxscyB9XG5leHBvcnQgZGVmYXVsdCBOYXZQaWxsc1xuIl19