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 +1 -0
- package/dist/ConfirmDialog.cjs +2 -0
- package/dist/ConfirmDialog.d.cts +43 -0
- package/dist/ConfirmDialog.d.ts +43 -0
- package/dist/ConfirmDialog.js +2 -0
- package/dist/NavPills.cjs +1 -1
- package/dist/NavPills.d.cts +2 -0
- package/dist/NavPills.d.ts +2 -0
- package/dist/NavPills.js +1 -1
- package/dist/chunk-2NI6RRW6.js +2 -0
- package/dist/chunk-HGRCY2U6.cjs +2 -0
- package/dist/chunk-TDSAO4B2.cjs +2 -0
- package/dist/chunk-XL4EQW5D.js +2 -0
- package/dist/css/datepicker.css +1 -1
- package/dist/css/plugins.css +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/docs/CONFIRMDIALOG.md +60 -0
- package/docs/superpowers/plans/2026-08-19-confirmdialog-plugin.md +549 -0
- package/docs/superpowers/specs/2026-08-19-confirmdialog-plugin-design.md +128 -0
- package/package.json +24 -12
- package/dist/chunk-FRNRH2L3.js +0 -2
- package/dist/chunk-XCPF5NPT.cjs +0 -2
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
|
|
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==
|
package/dist/NavPills.d.cts
CHANGED
package/dist/NavPills.d.ts
CHANGED
package/dist/NavPills.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as NavPills,b as default}from'./chunk-
|
|
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=
|
package/dist/css/datepicker.css
CHANGED
|
@@ -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/css/plugins.css
CHANGED
|
@@ -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'),
|
|
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-
|
|
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.
|
|
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://
|
|
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
|
+
}
|
package/dist/chunk-FRNRH2L3.js
DELETED
|
@@ -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=
|
package/dist/chunk-XCPF5NPT.cjs
DELETED
|
@@ -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
|