@diwauhris/ui 1.0.0
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 +75 -0
- package/lib/assets/ui.css +154 -0
- package/lib/index.cjs +183 -0
- package/lib/index.mjs +65 -0
- package/lib/index10.cjs +33 -0
- package/lib/index10.cjs.map +1 -0
- package/lib/index10.mjs +33 -0
- package/lib/index10.mjs.map +1 -0
- package/lib/index11.cjs +16 -0
- package/lib/index11.cjs.map +1 -0
- package/lib/index11.mjs +16 -0
- package/lib/index11.mjs.map +1 -0
- package/lib/index12.cjs +16 -0
- package/lib/index12.cjs.map +1 -0
- package/lib/index12.mjs +15 -0
- package/lib/index12.mjs.map +1 -0
- package/lib/index13.cjs +57 -0
- package/lib/index13.cjs.map +1 -0
- package/lib/index13.mjs +57 -0
- package/lib/index13.mjs.map +1 -0
- package/lib/index14.cjs +10 -0
- package/lib/index14.cjs.map +1 -0
- package/lib/index14.mjs +10 -0
- package/lib/index14.mjs.map +1 -0
- package/lib/index15.cjs +30 -0
- package/lib/index15.cjs.map +1 -0
- package/lib/index15.mjs +30 -0
- package/lib/index15.mjs.map +1 -0
- package/lib/index16.cjs +28 -0
- package/lib/index16.cjs.map +1 -0
- package/lib/index16.mjs +26 -0
- package/lib/index16.mjs.map +1 -0
- package/lib/index17.cjs +43 -0
- package/lib/index17.cjs.map +1 -0
- package/lib/index17.mjs +43 -0
- package/lib/index17.mjs.map +1 -0
- package/lib/index18.cjs +59 -0
- package/lib/index18.cjs.map +1 -0
- package/lib/index18.mjs +59 -0
- package/lib/index18.mjs.map +1 -0
- package/lib/index19.cjs +67 -0
- package/lib/index19.cjs.map +1 -0
- package/lib/index19.mjs +67 -0
- package/lib/index19.mjs.map +1 -0
- package/lib/index2.cjs +33 -0
- package/lib/index2.mjs +13 -0
- package/lib/index20.cjs +79 -0
- package/lib/index20.cjs.map +1 -0
- package/lib/index20.mjs +79 -0
- package/lib/index20.mjs.map +1 -0
- package/lib/index21.cjs +105 -0
- package/lib/index21.cjs.map +1 -0
- package/lib/index21.mjs +104 -0
- package/lib/index21.mjs.map +1 -0
- package/lib/index22.cjs +50 -0
- package/lib/index22.cjs.map +1 -0
- package/lib/index22.mjs +50 -0
- package/lib/index22.mjs.map +1 -0
- package/lib/index23.cjs +143 -0
- package/lib/index23.cjs.map +1 -0
- package/lib/index23.mjs +143 -0
- package/lib/index23.mjs.map +1 -0
- package/lib/index25.cjs +177 -0
- package/lib/index25.cjs.map +1 -0
- package/lib/index25.mjs +175 -0
- package/lib/index25.mjs.map +1 -0
- package/lib/index26.cjs +108 -0
- package/lib/index26.cjs.map +1 -0
- package/lib/index26.mjs +108 -0
- package/lib/index26.mjs.map +1 -0
- package/lib/index27.cjs +120 -0
- package/lib/index27.cjs.map +1 -0
- package/lib/index27.mjs +120 -0
- package/lib/index27.mjs.map +1 -0
- package/lib/index28.cjs +54 -0
- package/lib/index28.cjs.map +1 -0
- package/lib/index28.mjs +54 -0
- package/lib/index28.mjs.map +1 -0
- package/lib/index29.cjs +100 -0
- package/lib/index29.cjs.map +1 -0
- package/lib/index29.mjs +100 -0
- package/lib/index29.mjs.map +1 -0
- package/lib/index3.cjs +38 -0
- package/lib/index3.cjs.map +1 -0
- package/lib/index3.mjs +38 -0
- package/lib/index3.mjs.map +1 -0
- package/lib/index30.cjs +27 -0
- package/lib/index30.cjs.map +1 -0
- package/lib/index30.mjs +27 -0
- package/lib/index30.mjs.map +1 -0
- package/lib/index31.cjs +72 -0
- package/lib/index31.cjs.map +1 -0
- package/lib/index31.mjs +72 -0
- package/lib/index31.mjs.map +1 -0
- package/lib/index32.cjs +19 -0
- package/lib/index32.cjs.map +1 -0
- package/lib/index32.mjs +19 -0
- package/lib/index32.mjs.map +1 -0
- package/lib/index33.cjs +25 -0
- package/lib/index33.cjs.map +1 -0
- package/lib/index33.mjs +25 -0
- package/lib/index33.mjs.map +1 -0
- package/lib/index34.cjs +55 -0
- package/lib/index34.cjs.map +1 -0
- package/lib/index34.mjs +51 -0
- package/lib/index34.mjs.map +1 -0
- package/lib/index35.cjs +25 -0
- package/lib/index35.cjs.map +1 -0
- package/lib/index35.mjs +25 -0
- package/lib/index35.mjs.map +1 -0
- package/lib/index36.cjs +54 -0
- package/lib/index36.cjs.map +1 -0
- package/lib/index36.mjs +49 -0
- package/lib/index36.mjs.map +1 -0
- package/lib/index37.cjs +130 -0
- package/lib/index37.cjs.map +1 -0
- package/lib/index37.mjs +128 -0
- package/lib/index37.mjs.map +1 -0
- package/lib/index38.cjs +106 -0
- package/lib/index38.cjs.map +1 -0
- package/lib/index38.mjs +102 -0
- package/lib/index38.mjs.map +1 -0
- package/lib/index39.cjs +137 -0
- package/lib/index39.cjs.map +1 -0
- package/lib/index39.mjs +137 -0
- package/lib/index39.mjs.map +1 -0
- package/lib/index4.cjs +24 -0
- package/lib/index4.cjs.map +1 -0
- package/lib/index4.mjs +24 -0
- package/lib/index4.mjs.map +1 -0
- package/lib/index40.cjs +130 -0
- package/lib/index40.cjs.map +1 -0
- package/lib/index40.mjs +126 -0
- package/lib/index40.mjs.map +1 -0
- package/lib/index41.cjs +60 -0
- package/lib/index41.cjs.map +1 -0
- package/lib/index41.mjs +58 -0
- package/lib/index41.mjs.map +1 -0
- package/lib/index42.cjs +105 -0
- package/lib/index42.cjs.map +1 -0
- package/lib/index42.mjs +105 -0
- package/lib/index42.mjs.map +1 -0
- package/lib/index43.cjs +47 -0
- package/lib/index43.cjs.map +1 -0
- package/lib/index43.mjs +42 -0
- package/lib/index43.mjs.map +1 -0
- package/lib/index44.cjs +40 -0
- package/lib/index44.cjs.map +1 -0
- package/lib/index44.mjs +35 -0
- package/lib/index44.mjs.map +1 -0
- package/lib/index45.cjs +91 -0
- package/lib/index45.cjs.map +1 -0
- package/lib/index45.mjs +91 -0
- package/lib/index45.mjs.map +1 -0
- package/lib/index46.cjs +180 -0
- package/lib/index46.cjs.map +1 -0
- package/lib/index46.mjs +180 -0
- package/lib/index46.mjs.map +1 -0
- package/lib/index47.cjs +61 -0
- package/lib/index47.cjs.map +1 -0
- package/lib/index47.mjs +61 -0
- package/lib/index47.mjs.map +1 -0
- package/lib/index48.cjs +165 -0
- package/lib/index48.cjs.map +1 -0
- package/lib/index48.mjs +161 -0
- package/lib/index48.mjs.map +1 -0
- package/lib/index49.cjs +83 -0
- package/lib/index49.cjs.map +1 -0
- package/lib/index49.mjs +83 -0
- package/lib/index49.mjs.map +1 -0
- package/lib/index5.cjs +39 -0
- package/lib/index5.cjs.map +1 -0
- package/lib/index5.mjs +39 -0
- package/lib/index5.mjs.map +1 -0
- package/lib/index50.cjs +100 -0
- package/lib/index50.cjs.map +1 -0
- package/lib/index50.mjs +100 -0
- package/lib/index50.mjs.map +1 -0
- package/lib/index51.cjs +116 -0
- package/lib/index51.cjs.map +1 -0
- package/lib/index51.mjs +113 -0
- package/lib/index51.mjs.map +1 -0
- package/lib/index52.cjs +93 -0
- package/lib/index52.cjs.map +1 -0
- package/lib/index52.mjs +93 -0
- package/lib/index52.mjs.map +1 -0
- package/lib/index53.cjs +120 -0
- package/lib/index53.cjs.map +1 -0
- package/lib/index53.mjs +120 -0
- package/lib/index53.mjs.map +1 -0
- package/lib/index54.cjs +53 -0
- package/lib/index54.cjs.map +1 -0
- package/lib/index54.mjs +50 -0
- package/lib/index54.mjs.map +1 -0
- package/lib/index55.cjs +130 -0
- package/lib/index55.cjs.map +1 -0
- package/lib/index55.mjs +127 -0
- package/lib/index55.mjs.map +1 -0
- package/lib/index56.cjs +36 -0
- package/lib/index56.cjs.map +1 -0
- package/lib/index56.mjs +35 -0
- package/lib/index56.mjs.map +1 -0
- package/lib/index57.cjs +47 -0
- package/lib/index57.cjs.map +1 -0
- package/lib/index57.mjs +47 -0
- package/lib/index57.mjs.map +1 -0
- package/lib/index58.cjs +97 -0
- package/lib/index58.cjs.map +1 -0
- package/lib/index58.mjs +97 -0
- package/lib/index58.mjs.map +1 -0
- package/lib/index59.cjs +120 -0
- package/lib/index59.cjs.map +1 -0
- package/lib/index59.mjs +116 -0
- package/lib/index59.mjs.map +1 -0
- package/lib/index6.cjs +29 -0
- package/lib/index6.cjs.map +1 -0
- package/lib/index6.mjs +29 -0
- package/lib/index6.mjs.map +1 -0
- package/lib/index60.cjs +34 -0
- package/lib/index60.cjs.map +1 -0
- package/lib/index60.mjs +34 -0
- package/lib/index60.mjs.map +1 -0
- package/lib/index61.cjs +62 -0
- package/lib/index61.cjs.map +1 -0
- package/lib/index61.mjs +62 -0
- package/lib/index61.mjs.map +1 -0
- package/lib/index62.cjs +213 -0
- package/lib/index62.cjs.map +1 -0
- package/lib/index62.mjs +213 -0
- package/lib/index62.mjs.map +1 -0
- package/lib/index63.cjs +42 -0
- package/lib/index63.cjs.map +1 -0
- package/lib/index63.mjs +42 -0
- package/lib/index63.mjs.map +1 -0
- package/lib/index64.cjs +86 -0
- package/lib/index64.cjs.map +1 -0
- package/lib/index64.mjs +86 -0
- package/lib/index64.mjs.map +1 -0
- package/lib/index65.cjs +156 -0
- package/lib/index65.cjs.map +1 -0
- package/lib/index65.mjs +156 -0
- package/lib/index65.mjs.map +1 -0
- package/lib/index66.cjs +107 -0
- package/lib/index66.cjs.map +1 -0
- package/lib/index66.mjs +106 -0
- package/lib/index66.mjs.map +1 -0
- package/lib/index67.cjs +52 -0
- package/lib/index67.cjs.map +1 -0
- package/lib/index67.mjs +52 -0
- package/lib/index67.mjs.map +1 -0
- package/lib/index68.cjs +125 -0
- package/lib/index68.cjs.map +1 -0
- package/lib/index68.mjs +115 -0
- package/lib/index68.mjs.map +1 -0
- package/lib/index69.cjs +34 -0
- package/lib/index69.cjs.map +1 -0
- package/lib/index69.mjs +29 -0
- package/lib/index69.mjs.map +1 -0
- package/lib/index7.cjs +17 -0
- package/lib/index7.cjs.map +1 -0
- package/lib/index7.mjs +17 -0
- package/lib/index7.mjs.map +1 -0
- package/lib/index8.cjs +86 -0
- package/lib/index8.cjs.map +1 -0
- package/lib/index8.mjs +86 -0
- package/lib/index8.mjs.map +1 -0
- package/lib/index9.cjs +29 -0
- package/lib/index9.cjs.map +1 -0
- package/lib/index9.mjs +29 -0
- package/lib/index9.mjs.map +1 -0
- package/lib/types/index.d.ts +1 -0
- package/package.json +68 -0
package/lib/index43.mjs
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { __exportAll } from "./index2.mjs";
|
|
2
|
+
//#region src/ui-library/tokens/dimension.ts
|
|
3
|
+
var dimension_exports = /* @__PURE__ */ __exportAll({ dimension: () => dimension });
|
|
4
|
+
/**
|
|
5
|
+
* DIWA Dimension Tokens
|
|
6
|
+
*
|
|
7
|
+
* Formalizes repeating dimension values identified in the Phase 9 audit.
|
|
8
|
+
* Values are numeric (pixels) or Tailwind class strings as appropriate.
|
|
9
|
+
*
|
|
10
|
+
* Resolved in Phase 11–12:
|
|
11
|
+
* - Dialog close icon aligned to size={16} (Phase 11).
|
|
12
|
+
* - ConfirmAction icon badge aligned to h-8 w-8 / rounded-lg (Phase 12).
|
|
13
|
+
*/
|
|
14
|
+
var dimension = {
|
|
15
|
+
icon: {
|
|
16
|
+
/** Standard close button icon — target 16, currently Dialog uses 18 */
|
|
17
|
+
close: 16,
|
|
18
|
+
/** Icon inside 32×32 header badge */
|
|
19
|
+
badgeSm: 16,
|
|
20
|
+
/** Alert/ConfirmDialog tone icons */
|
|
21
|
+
alert: 20,
|
|
22
|
+
/** Inline small action icons */
|
|
23
|
+
actionSm: 14,
|
|
24
|
+
/** Standard action icons in toolbars, buttons */
|
|
25
|
+
action: 16
|
|
26
|
+
},
|
|
27
|
+
iconBadge: {
|
|
28
|
+
/** Standard 32×32 header icon container — h-8 w-8 */
|
|
29
|
+
size: "h-8 w-8" },
|
|
30
|
+
control: {
|
|
31
|
+
/** Small control height */
|
|
32
|
+
sm: "h-9",
|
|
33
|
+
/** Default control height */
|
|
34
|
+
md: "h-10",
|
|
35
|
+
/** Large control height */
|
|
36
|
+
lg: "h-11"
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
//#endregion
|
|
40
|
+
export { dimension, dimension_exports };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=index43.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index43.mjs","names":[],"sources":["../src/ui-library/tokens/dimension.ts"],"sourcesContent":["/**\n * DIWA Dimension Tokens\n *\n * Formalizes repeating dimension values identified in the Phase 9 audit.\n * Values are numeric (pixels) or Tailwind class strings as appropriate.\n *\n * Resolved in Phase 11–12:\n * - Dialog close icon aligned to size={16} (Phase 11).\n * - ConfirmAction icon badge aligned to h-8 w-8 / rounded-lg (Phase 12).\n */\n\nexport const dimension = {\n // ── Icon sizes (lucide-react `size` prop values) ──────────────────────────\n\n icon: {\n /** Standard close button icon — target 16, currently Dialog uses 18 */\n close: 16,\n /** Icon inside 32×32 header badge */\n badgeSm: 16,\n /** Alert/ConfirmDialog tone icons */\n alert: 20,\n /** Inline small action icons */\n actionSm: 14,\n /** Standard action icons in toolbars, buttons */\n action: 16,\n },\n\n // ── Icon badge containers ─────────────────────────────────────────────────\n\n iconBadge: {\n /** Standard 32×32 header icon container — h-8 w-8 */\n size: 'h-8 w-8',\n },\n\n // ── Component heights ─────────────────────────────────────────────────────\n\n control: {\n /** Small control height */\n sm: 'h-9',\n /** Default control height */\n md: 'h-10',\n /** Large control height */\n lg: 'h-11',\n },\n} as const;\n"],"mappings":";;;;;;;;;;;;;AAWA,IAAa,YAAY;CAGvB,MAAM;;EAEJ,OAAa;;EAEb,SAAa;;EAEb,OAAa;;EAEb,UAAa;;EAEb,QAAa;CACf;CAIA,WAAW;;AAET,MAAQ,UACV;CAIA,SAAS;;EAEP,IAAI;;EAEJ,IAAI;;EAEJ,IAAI;CACN;AACF"}
|
package/lib/index44.cjs
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//#region src/ui-library/tokens/radius.ts
|
|
2
|
+
var radius_exports = /* @__PURE__ */ require("./index2.cjs").__exportAll({ radius: () => radius });
|
|
3
|
+
/**
|
|
4
|
+
* DIWA Radius Tokens
|
|
5
|
+
*
|
|
6
|
+
* Formalizes the border-radius vocabulary identified in the Phase 9 audit.
|
|
7
|
+
* Values are Tailwind utility class names.
|
|
8
|
+
*
|
|
9
|
+
* Design intent:
|
|
10
|
+
* - panel — full overlay/card surfaces (Modal, Dialog, Card, Drawer)
|
|
11
|
+
* - control — interactive form controls (Button, Input, Select)
|
|
12
|
+
* - pill — purely presentational (Badge pill tones, Spinner track)
|
|
13
|
+
* - badge-status — small status indicators with formal/rectangular feel
|
|
14
|
+
* - icon-badge — 32×32 icon containers in headers
|
|
15
|
+
*
|
|
16
|
+
* Note: rounded-xl previously appeared in legacy ConfirmAction inlined buttons
|
|
17
|
+
* (resolved in Phase 11) and the ConfirmAction icon badge (resolved in Phase 12).
|
|
18
|
+
*/
|
|
19
|
+
var radius = {
|
|
20
|
+
/** Overlay and card panel corners — rounded-lg */
|
|
21
|
+
panel: "rounded-lg",
|
|
22
|
+
/** Form controls and action buttons — rounded-md */
|
|
23
|
+
control: "rounded-md",
|
|
24
|
+
/** Pill badges and Spinner track — rounded-full */
|
|
25
|
+
pill: "rounded-full",
|
|
26
|
+
/** Status badge tones (formal/rectangular) — rounded */
|
|
27
|
+
badgeStatus: "rounded",
|
|
28
|
+
/** 32×32 icon badge containers in overlay headers — rounded-lg */
|
|
29
|
+
iconBadge: "rounded-lg"
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
exports.radius = radius;
|
|
33
|
+
Object.defineProperty(exports, "radius_exports", {
|
|
34
|
+
enumerable: true,
|
|
35
|
+
get: function() {
|
|
36
|
+
return radius_exports;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=index44.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index44.cjs","names":[],"sources":["../src/ui-library/tokens/radius.ts"],"sourcesContent":["/**\n * DIWA Radius Tokens\n *\n * Formalizes the border-radius vocabulary identified in the Phase 9 audit.\n * Values are Tailwind utility class names.\n *\n * Design intent:\n * - panel — full overlay/card surfaces (Modal, Dialog, Card, Drawer)\n * - control — interactive form controls (Button, Input, Select)\n * - pill — purely presentational (Badge pill tones, Spinner track)\n * - badge-status — small status indicators with formal/rectangular feel\n * - icon-badge — 32×32 icon containers in headers\n *\n * Note: rounded-xl previously appeared in legacy ConfirmAction inlined buttons\n * (resolved in Phase 11) and the ConfirmAction icon badge (resolved in Phase 12).\n */\n\nexport const radius = {\n /** Overlay and card panel corners — rounded-lg */\n panel: 'rounded-lg',\n /** Form controls and action buttons — rounded-md */\n control: 'rounded-md',\n /** Pill badges and Spinner track — rounded-full */\n pill: 'rounded-full',\n /** Status badge tones (formal/rectangular) — rounded */\n badgeStatus: 'rounded',\n /** 32×32 icon badge containers in overlay headers — rounded-lg */\n iconBadge: 'rounded-lg',\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,IAAa,SAAS;;CAEpB,OAAc;;CAEd,SAAc;;CAEd,MAAc;;CAEd,aAAc;;CAEd,WAAc;AAChB"}
|
package/lib/index44.mjs
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { __exportAll } from "./index2.mjs";
|
|
2
|
+
//#region src/ui-library/tokens/radius.ts
|
|
3
|
+
var radius_exports = /* @__PURE__ */ __exportAll({ radius: () => radius });
|
|
4
|
+
/**
|
|
5
|
+
* DIWA Radius Tokens
|
|
6
|
+
*
|
|
7
|
+
* Formalizes the border-radius vocabulary identified in the Phase 9 audit.
|
|
8
|
+
* Values are Tailwind utility class names.
|
|
9
|
+
*
|
|
10
|
+
* Design intent:
|
|
11
|
+
* - panel — full overlay/card surfaces (Modal, Dialog, Card, Drawer)
|
|
12
|
+
* - control — interactive form controls (Button, Input, Select)
|
|
13
|
+
* - pill — purely presentational (Badge pill tones, Spinner track)
|
|
14
|
+
* - badge-status — small status indicators with formal/rectangular feel
|
|
15
|
+
* - icon-badge — 32×32 icon containers in headers
|
|
16
|
+
*
|
|
17
|
+
* Note: rounded-xl previously appeared in legacy ConfirmAction inlined buttons
|
|
18
|
+
* (resolved in Phase 11) and the ConfirmAction icon badge (resolved in Phase 12).
|
|
19
|
+
*/
|
|
20
|
+
var radius = {
|
|
21
|
+
/** Overlay and card panel corners — rounded-lg */
|
|
22
|
+
panel: "rounded-lg",
|
|
23
|
+
/** Form controls and action buttons — rounded-md */
|
|
24
|
+
control: "rounded-md",
|
|
25
|
+
/** Pill badges and Spinner track — rounded-full */
|
|
26
|
+
pill: "rounded-full",
|
|
27
|
+
/** Status badge tones (formal/rectangular) — rounded */
|
|
28
|
+
badgeStatus: "rounded",
|
|
29
|
+
/** 32×32 icon badge containers in overlay headers — rounded-lg */
|
|
30
|
+
iconBadge: "rounded-lg"
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { radius, radius_exports };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=index44.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index44.mjs","names":[],"sources":["../src/ui-library/tokens/radius.ts"],"sourcesContent":["/**\n * DIWA Radius Tokens\n *\n * Formalizes the border-radius vocabulary identified in the Phase 9 audit.\n * Values are Tailwind utility class names.\n *\n * Design intent:\n * - panel — full overlay/card surfaces (Modal, Dialog, Card, Drawer)\n * - control — interactive form controls (Button, Input, Select)\n * - pill — purely presentational (Badge pill tones, Spinner track)\n * - badge-status — small status indicators with formal/rectangular feel\n * - icon-badge — 32×32 icon containers in headers\n *\n * Note: rounded-xl previously appeared in legacy ConfirmAction inlined buttons\n * (resolved in Phase 11) and the ConfirmAction icon badge (resolved in Phase 12).\n */\n\nexport const radius = {\n /** Overlay and card panel corners — rounded-lg */\n panel: 'rounded-lg',\n /** Form controls and action buttons — rounded-md */\n control: 'rounded-md',\n /** Pill badges and Spinner track — rounded-full */\n pill: 'rounded-full',\n /** Status badge tones (formal/rectangular) — rounded */\n badgeStatus: 'rounded',\n /** 32×32 icon badge containers in overlay headers — rounded-lg */\n iconBadge: 'rounded-lg',\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiBA,IAAa,SAAS;;CAEpB,OAAc;;CAEd,SAAc;;CAEd,MAAc;;CAEd,aAAc;;CAEd,WAAc;AAChB"}
|
package/lib/index45.cjs
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const require_Button = require("./index3.cjs");
|
|
2
|
+
const require_Modal = require("./index37.cjs");
|
|
3
|
+
const require_dimension = require("./index43.cjs");
|
|
4
|
+
const require_radius = require("./index44.cjs");
|
|
5
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
+
let react = require("react");
|
|
7
|
+
let lucide_react = require("lucide-react");
|
|
8
|
+
//#region src/ui-library/gallery/confirm-action/ConfirmAction.tsx
|
|
9
|
+
/**
|
|
10
|
+
* ConfirmAction — Gallery-native inline confirmation wrapper.
|
|
11
|
+
* Copied from shared/components/ConfirmAction.tsx.
|
|
12
|
+
* Updated to:
|
|
13
|
+
* - Import Modal from gallery-local modal directory
|
|
14
|
+
* - Use gallery Button component (Phase 11 — replaces legacy inlined btn* strings)
|
|
15
|
+
* - Use a simple inline ErrorBanner instead of importing from ui.tsx
|
|
16
|
+
*/
|
|
17
|
+
function ErrorBanner({ message }) {
|
|
18
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
19
|
+
className: "rounded-lg border border-rose-100 bg-rose-50 px-4 py-3 text-sm font-medium text-rose-700",
|
|
20
|
+
children: message
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function ConfirmAction({ title, message, label, description, confirmLabel = "Confirm", tone = "danger", disabled = false, onConfirm, children }) {
|
|
24
|
+
const [open, setOpen] = (0, react.useState)(false);
|
|
25
|
+
const [pending, setPending] = (0, react.useState)(false);
|
|
26
|
+
const [error, setError] = (0, react.useState)("");
|
|
27
|
+
const effectiveTitle = title || label || "Confirm";
|
|
28
|
+
const effectiveMessage = message || description || "Are you sure?";
|
|
29
|
+
const run = async () => {
|
|
30
|
+
setPending(true);
|
|
31
|
+
setError("");
|
|
32
|
+
try {
|
|
33
|
+
await onConfirm();
|
|
34
|
+
setOpen(false);
|
|
35
|
+
} catch (failure) {
|
|
36
|
+
setError(failure instanceof Error ? failure.message : "Action failed");
|
|
37
|
+
} finally {
|
|
38
|
+
setPending(false);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const trigger = typeof children === "function" ? children({
|
|
42
|
+
open: () => {
|
|
43
|
+
if (!disabled) setOpen(true);
|
|
44
|
+
},
|
|
45
|
+
disabled
|
|
46
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
47
|
+
className: "inline-flex",
|
|
48
|
+
onClick: () => {
|
|
49
|
+
if (!disabled) setOpen(true);
|
|
50
|
+
},
|
|
51
|
+
children
|
|
52
|
+
});
|
|
53
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [trigger, open && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Modal.default, {
|
|
54
|
+
title: effectiveTitle,
|
|
55
|
+
onClose: () => {
|
|
56
|
+
if (!pending) setOpen(false);
|
|
57
|
+
},
|
|
58
|
+
maxWidth: "max-w-md",
|
|
59
|
+
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
60
|
+
className: "flex items-center justify-end gap-3",
|
|
61
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Button.Button, {
|
|
62
|
+
variant: "outline",
|
|
63
|
+
onClick: () => setOpen(false),
|
|
64
|
+
disabled: pending,
|
|
65
|
+
children: "Cancel"
|
|
66
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Button.Button, {
|
|
67
|
+
variant: tone === "danger" ? "danger" : "primary",
|
|
68
|
+
onClick: () => void run(),
|
|
69
|
+
disabled: pending,
|
|
70
|
+
children: pending ? "Working..." : confirmLabel
|
|
71
|
+
})]
|
|
72
|
+
}),
|
|
73
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
74
|
+
className: "space-y-4",
|
|
75
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
76
|
+
className: "flex items-start gap-3",
|
|
77
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
78
|
+
className: `mt-0.5 flex ${require_dimension.dimension.iconBadge.size} shrink-0 items-center justify-center ${require_radius.radius.iconBadge} ${tone === "danger" ? "bg-rose-50 text-rose-500" : "bg-blue-50 text-brand-blue"}`,
|
|
79
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlertTriangle, { size: 18 })
|
|
80
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
81
|
+
className: "text-sm font-medium leading-relaxed text-slate-600",
|
|
82
|
+
children: effectiveMessage
|
|
83
|
+
})]
|
|
84
|
+
}), error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBanner, { message: error })]
|
|
85
|
+
})
|
|
86
|
+
})] });
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
exports.ConfirmAction = ConfirmAction;
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=index45.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index45.cjs","names":[],"sources":["../src/ui-library/gallery/confirm-action/ConfirmAction.tsx"],"sourcesContent":["/**\n * ConfirmAction — Gallery-native inline confirmation wrapper.\n * Copied from shared/components/ConfirmAction.tsx.\n * Updated to:\n * - Import Modal from gallery-local modal directory\n * - Use gallery Button component (Phase 11 — replaces legacy inlined btn* strings)\n * - Use a simple inline ErrorBanner instead of importing from ui.tsx\n */\nimport { useState, type ReactNode } from 'react';\nimport { AlertTriangle } from 'lucide-react';\nimport Modal from '../modal/Modal';\nimport { Button } from '../button/Button';\nimport { dimension } from '../../tokens/dimension';\nimport { radius } from '../../tokens/radius';\n\nfunction ErrorBanner({ message }: { message: string }) {\n return (\n <div className=\"rounded-lg border border-rose-100 bg-rose-50 px-4 py-3 text-sm font-medium text-rose-700\">\n {message}\n </div>\n );\n}\n\ninterface ConfirmActionRenderProps {\n open: () => void;\n disabled: boolean;\n}\n\ninterface ConfirmActionProps {\n title?: string;\n message?: ReactNode;\n label?: string;\n description?: string;\n confirmLabel?: string;\n tone?: 'danger' | 'primary';\n disabled?: boolean;\n onConfirm: () => Promise<void> | void;\n children: ((props: ConfirmActionRenderProps) => ReactNode) | ReactNode;\n}\n\nexport function ConfirmAction({\n title,\n message,\n label,\n description,\n confirmLabel = 'Confirm',\n tone = 'danger',\n disabled = false,\n onConfirm,\n children,\n}: ConfirmActionProps) {\n const [open, setOpen] = useState(false);\n const [pending, setPending] = useState(false);\n const [error, setError] = useState('');\n\n const effectiveTitle = title || label || 'Confirm';\n const effectiveMessage = message || description || 'Are you sure?';\n\n const run = async () => {\n setPending(true);\n setError('');\n try {\n await onConfirm();\n setOpen(false);\n } catch (failure) {\n setError(failure instanceof Error ? failure.message : 'Action failed');\n } finally {\n setPending(false);\n }\n };\n\n const trigger = typeof children === 'function'\n ? children({ open: () => { if (!disabled) setOpen(true); }, disabled })\n : (\n <span className=\"inline-flex\" onClick={() => { if (!disabled) setOpen(true); }}>\n {children}\n </span>\n );\n\n return (\n <>\n {trigger}\n {open && (\n <Modal\n title={effectiveTitle}\n onClose={() => { if (!pending) setOpen(false); }}\n maxWidth=\"max-w-md\"\n footer={\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n variant=\"outline\"\n onClick={() => setOpen(false)}\n disabled={pending}\n >\n Cancel\n </Button>\n <Button\n variant={tone === 'danger' ? 'danger' : 'primary'}\n onClick={() => void run()}\n disabled={pending}\n >\n {pending ? 'Working...' : confirmLabel}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"flex items-start gap-3\">\n <span className={`mt-0.5 flex ${dimension.iconBadge.size} shrink-0 items-center justify-center ${radius.iconBadge} ${tone === 'danger' ? 'bg-rose-50 text-rose-500' : 'bg-blue-50 text-brand-blue'}`}>\n <AlertTriangle size={18} />\n </span>\n <div className=\"text-sm font-medium leading-relaxed text-slate-600\">{effectiveMessage}</div>\n </div>\n {error && <ErrorBanner message={error} />}\n </div>\n </Modal>\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAeA,SAAS,YAAY,EAAE,WAAgC;CACrD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EACZ,UAAA;CACE,CAAA;AAET;AAmBA,SAAgB,cAAc,EAC5B,OACA,SACA,OACA,aACA,eAAe,WACf,OAAO,UACP,WAAW,OACX,WACA,YACqB;CACrB,MAAM,CAAC,MAAM,YAAA,GAAW,MAAA,SAAA,CAAS,KAAK;CACtC,MAAM,CAAC,SAAS,eAAA,GAAc,MAAA,SAAA,CAAS,KAAK;CAC5C,MAAM,CAAC,OAAO,aAAA,GAAY,MAAA,SAAA,CAAS,EAAE;CAErC,MAAM,iBAAiB,SAAS,SAAS;CACzC,MAAM,mBAAmB,WAAW,eAAe;CAEnD,MAAM,MAAM,YAAY;EACtB,WAAW,IAAI;EACf,SAAS,EAAE;EACX,IAAI;GACF,MAAM,UAAU;GAChB,QAAQ,KAAK;EACf,SAAS,SAAS;GAChB,SAAS,mBAAmB,QAAQ,QAAQ,UAAU,eAAe;EACvE,UAAU;GACR,WAAW,KAAK;EAClB;CACF;CAEA,MAAM,UAAU,OAAO,aAAa,aAChC,SAAS;EAAE,YAAY;GAAE,IAAI,CAAC,UAAU,QAAQ,IAAI;EAAG;EAAG;CAAS,CAAC,IAEpE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAc,eAAe;GAAE,IAAI,CAAC,UAAU,QAAQ,IAAI;EAAG;EAC1E;CACG,CAAA;CAGV,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACG,SACA,QACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,SAAD;EACE,OAAO;EACP,eAAe;GAAE,IAAI,CAAC,SAAS,QAAQ,KAAK;EAAG;EAC/C,UAAS;EACT,QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,QAAD;IACE,SAAQ;IACR,eAAe,QAAQ,KAAK;IAC5B,UAAU;IACX,UAAA;GAEO,CAAA,GACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,QAAD;IACE,SAAS,SAAS,WAAW,WAAW;IACxC,eAAe,KAAK,IAAI;IACxB,UAAU;IAET,UAAA,UAAU,eAAe;GACpB,CAAA,CACL;;EAGP,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAW,eAAe,kBAAA,UAAU,UAAU,KAAK,wCAAwC,eAAA,OAAO,UAAU,GAAG,SAAS,WAAW,6BAA6B;KACpK,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAA,eAAD,EAAe,MAAM,GAAK,CAAA;IACtB,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAAsD,UAAA;IAAsB,CAAA,CACxF;GACJ,CAAA,GAAA,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAa,SAAS,MAAQ,CAAA,CACrC;;CACA,CAAA,CAET,EAAA,CAAA;AAEN"}
|
package/lib/index45.mjs
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Button } from "./index3.mjs";
|
|
2
|
+
import Modal from "./index37.mjs";
|
|
3
|
+
import { dimension } from "./index43.mjs";
|
|
4
|
+
import { radius } from "./index44.mjs";
|
|
5
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { useState } from "react";
|
|
7
|
+
import { AlertTriangle } from "lucide-react";
|
|
8
|
+
//#region src/ui-library/gallery/confirm-action/ConfirmAction.tsx
|
|
9
|
+
/**
|
|
10
|
+
* ConfirmAction — Gallery-native inline confirmation wrapper.
|
|
11
|
+
* Copied from shared/components/ConfirmAction.tsx.
|
|
12
|
+
* Updated to:
|
|
13
|
+
* - Import Modal from gallery-local modal directory
|
|
14
|
+
* - Use gallery Button component (Phase 11 — replaces legacy inlined btn* strings)
|
|
15
|
+
* - Use a simple inline ErrorBanner instead of importing from ui.tsx
|
|
16
|
+
*/
|
|
17
|
+
function ErrorBanner({ message }) {
|
|
18
|
+
return /* @__PURE__ */ jsx("div", {
|
|
19
|
+
className: "rounded-lg border border-rose-100 bg-rose-50 px-4 py-3 text-sm font-medium text-rose-700",
|
|
20
|
+
children: message
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function ConfirmAction({ title, message, label, description, confirmLabel = "Confirm", tone = "danger", disabled = false, onConfirm, children }) {
|
|
24
|
+
const [open, setOpen] = useState(false);
|
|
25
|
+
const [pending, setPending] = useState(false);
|
|
26
|
+
const [error, setError] = useState("");
|
|
27
|
+
const effectiveTitle = title || label || "Confirm";
|
|
28
|
+
const effectiveMessage = message || description || "Are you sure?";
|
|
29
|
+
const run = async () => {
|
|
30
|
+
setPending(true);
|
|
31
|
+
setError("");
|
|
32
|
+
try {
|
|
33
|
+
await onConfirm();
|
|
34
|
+
setOpen(false);
|
|
35
|
+
} catch (failure) {
|
|
36
|
+
setError(failure instanceof Error ? failure.message : "Action failed");
|
|
37
|
+
} finally {
|
|
38
|
+
setPending(false);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const trigger = typeof children === "function" ? children({
|
|
42
|
+
open: () => {
|
|
43
|
+
if (!disabled) setOpen(true);
|
|
44
|
+
},
|
|
45
|
+
disabled
|
|
46
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
47
|
+
className: "inline-flex",
|
|
48
|
+
onClick: () => {
|
|
49
|
+
if (!disabled) setOpen(true);
|
|
50
|
+
},
|
|
51
|
+
children
|
|
52
|
+
});
|
|
53
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [trigger, open && /* @__PURE__ */ jsx(Modal, {
|
|
54
|
+
title: effectiveTitle,
|
|
55
|
+
onClose: () => {
|
|
56
|
+
if (!pending) setOpen(false);
|
|
57
|
+
},
|
|
58
|
+
maxWidth: "max-w-md",
|
|
59
|
+
footer: /* @__PURE__ */ jsxs("div", {
|
|
60
|
+
className: "flex items-center justify-end gap-3",
|
|
61
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
62
|
+
variant: "outline",
|
|
63
|
+
onClick: () => setOpen(false),
|
|
64
|
+
disabled: pending,
|
|
65
|
+
children: "Cancel"
|
|
66
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
67
|
+
variant: tone === "danger" ? "danger" : "primary",
|
|
68
|
+
onClick: () => void run(),
|
|
69
|
+
disabled: pending,
|
|
70
|
+
children: pending ? "Working..." : confirmLabel
|
|
71
|
+
})]
|
|
72
|
+
}),
|
|
73
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
74
|
+
className: "space-y-4",
|
|
75
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
76
|
+
className: "flex items-start gap-3",
|
|
77
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
78
|
+
className: `mt-0.5 flex ${dimension.iconBadge.size} shrink-0 items-center justify-center ${radius.iconBadge} ${tone === "danger" ? "bg-rose-50 text-rose-500" : "bg-blue-50 text-brand-blue"}`,
|
|
79
|
+
children: /* @__PURE__ */ jsx(AlertTriangle, { size: 18 })
|
|
80
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
81
|
+
className: "text-sm font-medium leading-relaxed text-slate-600",
|
|
82
|
+
children: effectiveMessage
|
|
83
|
+
})]
|
|
84
|
+
}), error && /* @__PURE__ */ jsx(ErrorBanner, { message: error })]
|
|
85
|
+
})
|
|
86
|
+
})] });
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
export { ConfirmAction };
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=index45.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index45.mjs","names":[],"sources":["../src/ui-library/gallery/confirm-action/ConfirmAction.tsx"],"sourcesContent":["/**\n * ConfirmAction — Gallery-native inline confirmation wrapper.\n * Copied from shared/components/ConfirmAction.tsx.\n * Updated to:\n * - Import Modal from gallery-local modal directory\n * - Use gallery Button component (Phase 11 — replaces legacy inlined btn* strings)\n * - Use a simple inline ErrorBanner instead of importing from ui.tsx\n */\nimport { useState, type ReactNode } from 'react';\nimport { AlertTriangle } from 'lucide-react';\nimport Modal from '../modal/Modal';\nimport { Button } from '../button/Button';\nimport { dimension } from '../../tokens/dimension';\nimport { radius } from '../../tokens/radius';\n\nfunction ErrorBanner({ message }: { message: string }) {\n return (\n <div className=\"rounded-lg border border-rose-100 bg-rose-50 px-4 py-3 text-sm font-medium text-rose-700\">\n {message}\n </div>\n );\n}\n\ninterface ConfirmActionRenderProps {\n open: () => void;\n disabled: boolean;\n}\n\ninterface ConfirmActionProps {\n title?: string;\n message?: ReactNode;\n label?: string;\n description?: string;\n confirmLabel?: string;\n tone?: 'danger' | 'primary';\n disabled?: boolean;\n onConfirm: () => Promise<void> | void;\n children: ((props: ConfirmActionRenderProps) => ReactNode) | ReactNode;\n}\n\nexport function ConfirmAction({\n title,\n message,\n label,\n description,\n confirmLabel = 'Confirm',\n tone = 'danger',\n disabled = false,\n onConfirm,\n children,\n}: ConfirmActionProps) {\n const [open, setOpen] = useState(false);\n const [pending, setPending] = useState(false);\n const [error, setError] = useState('');\n\n const effectiveTitle = title || label || 'Confirm';\n const effectiveMessage = message || description || 'Are you sure?';\n\n const run = async () => {\n setPending(true);\n setError('');\n try {\n await onConfirm();\n setOpen(false);\n } catch (failure) {\n setError(failure instanceof Error ? failure.message : 'Action failed');\n } finally {\n setPending(false);\n }\n };\n\n const trigger = typeof children === 'function'\n ? children({ open: () => { if (!disabled) setOpen(true); }, disabled })\n : (\n <span className=\"inline-flex\" onClick={() => { if (!disabled) setOpen(true); }}>\n {children}\n </span>\n );\n\n return (\n <>\n {trigger}\n {open && (\n <Modal\n title={effectiveTitle}\n onClose={() => { if (!pending) setOpen(false); }}\n maxWidth=\"max-w-md\"\n footer={\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n variant=\"outline\"\n onClick={() => setOpen(false)}\n disabled={pending}\n >\n Cancel\n </Button>\n <Button\n variant={tone === 'danger' ? 'danger' : 'primary'}\n onClick={() => void run()}\n disabled={pending}\n >\n {pending ? 'Working...' : confirmLabel}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"flex items-start gap-3\">\n <span className={`mt-0.5 flex ${dimension.iconBadge.size} shrink-0 items-center justify-center ${radius.iconBadge} ${tone === 'danger' ? 'bg-rose-50 text-rose-500' : 'bg-blue-50 text-brand-blue'}`}>\n <AlertTriangle size={18} />\n </span>\n <div className=\"text-sm font-medium leading-relaxed text-slate-600\">{effectiveMessage}</div>\n </div>\n {error && <ErrorBanner message={error} />}\n </div>\n </Modal>\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAeA,SAAS,YAAY,EAAE,WAAgC;CACrD,OACE,oBAAC,OAAD;EAAK,WAAU;EACZ,UAAA;CACE,CAAA;AAET;AAmBA,SAAgB,cAAc,EAC5B,OACA,SACA,OACA,aACA,eAAe,WACf,OAAO,UACP,WAAW,OACX,WACA,YACqB;CACrB,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,CAAC,OAAO,YAAY,SAAS,EAAE;CAErC,MAAM,iBAAiB,SAAS,SAAS;CACzC,MAAM,mBAAmB,WAAW,eAAe;CAEnD,MAAM,MAAM,YAAY;EACtB,WAAW,IAAI;EACf,SAAS,EAAE;EACX,IAAI;GACF,MAAM,UAAU;GAChB,QAAQ,KAAK;EACf,SAAS,SAAS;GAChB,SAAS,mBAAmB,QAAQ,QAAQ,UAAU,eAAe;EACvE,UAAU;GACR,WAAW,KAAK;EAClB;CACF;CAEA,MAAM,UAAU,OAAO,aAAa,aAChC,SAAS;EAAE,YAAY;GAAE,IAAI,CAAC,UAAU,QAAQ,IAAI;EAAG;EAAG;CAAS,CAAC,IAEpE,oBAAC,QAAD;EAAM,WAAU;EAAc,eAAe;GAAE,IAAI,CAAC,UAAU,QAAQ,IAAI;EAAG;EAC1E;CACG,CAAA;CAGV,OACE,qBAAA,UAAA,EAAA,UAAA,CACG,SACA,QACC,oBAAC,OAAD;EACE,OAAO;EACP,eAAe;GAAE,IAAI,CAAC,SAAS,QAAQ,KAAK;EAAG;EAC/C,UAAS;EACT,QACE,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,oBAAC,QAAD;IACE,SAAQ;IACR,eAAe,QAAQ,KAAK;IAC5B,UAAU;IACX,UAAA;GAEO,CAAA,GACR,oBAAC,QAAD;IACE,SAAS,SAAS,WAAW,WAAW;IACxC,eAAe,KAAK,IAAI;IACxB,UAAU;IAET,UAAA,UAAU,eAAe;GACpB,CAAA,CACL;;EAGP,UAAA,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,oBAAC,QAAD;KAAM,WAAW,eAAe,UAAU,UAAU,KAAK,wCAAwC,OAAO,UAAU,GAAG,SAAS,WAAW,6BAA6B;KACpK,UAAA,oBAAC,eAAD,EAAe,MAAM,GAAK,CAAA;IACtB,CAAA,GACN,oBAAC,OAAD;KAAK,WAAU;KAAsD,UAAA;IAAsB,CAAA,CACxF;GACJ,CAAA,GAAA,SAAS,oBAAC,aAAD,EAAa,SAAS,MAAQ,CAAA,CACrC;;CACA,CAAA,CAET,EAAA,CAAA;AAEN"}
|
package/lib/index46.cjs
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
2
|
+
let react = require("react");
|
|
3
|
+
let lucide_react = require("lucide-react");
|
|
4
|
+
let react_dom = require("react-dom");
|
|
5
|
+
//#region src/ui-library/gallery/command-palette/CommandPalette.tsx
|
|
6
|
+
/**
|
|
7
|
+
* CommandPalette — Design System Component
|
|
8
|
+
*
|
|
9
|
+
* A keyboard-driven command launcher overlay. Opens via a trigger
|
|
10
|
+
* (typically Cmd+K / Ctrl+K), shows a search input, and renders
|
|
11
|
+
* grouped command items.
|
|
12
|
+
*
|
|
13
|
+
* Accessibility:
|
|
14
|
+
* - role="dialog" + aria-modal="true" + aria-label
|
|
15
|
+
* - Search input has aria-label and aria-controls pointing to results
|
|
16
|
+
* - Results list uses role="listbox" with role="option" items
|
|
17
|
+
* - aria-selected on the highlighted item
|
|
18
|
+
* - Keyboard: ArrowUp/Down navigates, Enter activates, Escape closes
|
|
19
|
+
*
|
|
20
|
+
* This component is presentation-only: callers provide commands and
|
|
21
|
+
* handle the query / selection logic.
|
|
22
|
+
*/
|
|
23
|
+
function CommandPalette({ open, onClose, items, query, onQueryChange, placeholder = "Search commands…", "aria-label": ariaLabel = "Command palette" }) {
|
|
24
|
+
const inputRef = (0, react.useRef)(null);
|
|
25
|
+
const panelRef = (0, react.useRef)(null);
|
|
26
|
+
const listboxId = (0, react.useId)();
|
|
27
|
+
const [activeIndex, setActiveIndex] = (0, react.useState)(0);
|
|
28
|
+
(0, react.useEffect)(() => {
|
|
29
|
+
setActiveIndex(0);
|
|
30
|
+
}, [items]);
|
|
31
|
+
(0, react.useEffect)(() => {
|
|
32
|
+
if (!open) return;
|
|
33
|
+
const prev = document.body.style.overflow;
|
|
34
|
+
document.body.style.overflow = "hidden";
|
|
35
|
+
const timer = window.setTimeout(() => inputRef.current?.focus(), 0);
|
|
36
|
+
return () => {
|
|
37
|
+
clearTimeout(timer);
|
|
38
|
+
document.body.style.overflow = prev;
|
|
39
|
+
};
|
|
40
|
+
}, [open]);
|
|
41
|
+
(0, react.useEffect)(() => {
|
|
42
|
+
if (!open) return;
|
|
43
|
+
const handle = (e) => {
|
|
44
|
+
if (e.key === "Escape") {
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
onClose();
|
|
47
|
+
} else if (e.key === "ArrowDown") {
|
|
48
|
+
e.preventDefault();
|
|
49
|
+
setActiveIndex((i) => Math.min(i + 1, items.length - 1));
|
|
50
|
+
} else if (e.key === "ArrowUp") {
|
|
51
|
+
e.preventDefault();
|
|
52
|
+
setActiveIndex((i) => Math.max(i - 1, 0));
|
|
53
|
+
} else if (e.key === "Enter") {
|
|
54
|
+
e.preventDefault();
|
|
55
|
+
items[activeIndex]?.onSelect();
|
|
56
|
+
onClose();
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
document.addEventListener("keydown", handle);
|
|
60
|
+
return () => document.removeEventListener("keydown", handle);
|
|
61
|
+
}, [
|
|
62
|
+
open,
|
|
63
|
+
items,
|
|
64
|
+
activeIndex,
|
|
65
|
+
onClose
|
|
66
|
+
]);
|
|
67
|
+
if (!open) return null;
|
|
68
|
+
const groups = items.reduce((acc, item) => {
|
|
69
|
+
const g = item.group ?? "";
|
|
70
|
+
if (!acc[g]) acc[g] = [];
|
|
71
|
+
acc[g].push(item);
|
|
72
|
+
return acc;
|
|
73
|
+
}, {});
|
|
74
|
+
const groupEntries = Object.entries(groups);
|
|
75
|
+
return (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
76
|
+
className: "fixed inset-0 z-50 flex items-start justify-center pt-[10vh] px-4",
|
|
77
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
78
|
+
className: "absolute inset-0 bg-slate-900/50 backdrop-blur-sm",
|
|
79
|
+
"aria-hidden": "true",
|
|
80
|
+
onClick: onClose
|
|
81
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
82
|
+
ref: panelRef,
|
|
83
|
+
role: "dialog",
|
|
84
|
+
"aria-modal": "true",
|
|
85
|
+
"aria-label": ariaLabel,
|
|
86
|
+
className: "relative z-10 w-full max-w-lg rounded-2xl border border-slate-200 bg-white shadow-2xl overflow-hidden",
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
89
|
+
className: "flex items-center gap-3 px-4 py-3 border-b border-slate-100",
|
|
90
|
+
children: [
|
|
91
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Search, {
|
|
92
|
+
size: 16,
|
|
93
|
+
className: "shrink-0 text-slate-400",
|
|
94
|
+
"aria-hidden": "true"
|
|
95
|
+
}),
|
|
96
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
97
|
+
ref: inputRef,
|
|
98
|
+
type: "text",
|
|
99
|
+
role: "combobox",
|
|
100
|
+
"aria-expanded": items.length > 0,
|
|
101
|
+
"aria-controls": listboxId,
|
|
102
|
+
"aria-autocomplete": "list",
|
|
103
|
+
"aria-label": "Search commands",
|
|
104
|
+
value: query,
|
|
105
|
+
onChange: (e) => onQueryChange(e.target.value),
|
|
106
|
+
placeholder,
|
|
107
|
+
className: "flex-1 bg-transparent text-sm font-medium text-slate-900 outline-none placeholder:text-slate-400"
|
|
108
|
+
}),
|
|
109
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("kbd", {
|
|
110
|
+
className: "hidden shrink-0 rounded border border-slate-200 px-1.5 py-0.5 text-[10px] font-bold text-slate-400 sm:block",
|
|
111
|
+
children: "ESC"
|
|
112
|
+
})
|
|
113
|
+
]
|
|
114
|
+
}),
|
|
115
|
+
items.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
116
|
+
id: listboxId,
|
|
117
|
+
role: "listbox",
|
|
118
|
+
"aria-label": "Commands",
|
|
119
|
+
className: "max-h-72 overflow-y-auto py-1",
|
|
120
|
+
children: groupEntries.map(([group, groupItems]) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [group && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
121
|
+
className: "px-4 py-1.5 text-[10px] font-bold uppercase tracking-widest text-slate-400",
|
|
122
|
+
children: group
|
|
123
|
+
}), groupItems.map((item) => {
|
|
124
|
+
const globalIdx = items.indexOf(item);
|
|
125
|
+
const isActive = globalIdx === activeIndex;
|
|
126
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
127
|
+
role: "option",
|
|
128
|
+
"aria-selected": isActive,
|
|
129
|
+
onClick: () => {
|
|
130
|
+
item.onSelect();
|
|
131
|
+
onClose();
|
|
132
|
+
},
|
|
133
|
+
onMouseEnter: () => setActiveIndex(globalIdx),
|
|
134
|
+
className: `flex cursor-pointer items-center gap-3 px-4 py-2.5 transition ${isActive ? "bg-blue-50" : "hover:bg-slate-50"}`,
|
|
135
|
+
children: [
|
|
136
|
+
item.icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
137
|
+
className: `shrink-0 ${isActive ? "text-brand-blue" : "text-slate-400"}`,
|
|
138
|
+
"aria-hidden": "true",
|
|
139
|
+
children: item.icon
|
|
140
|
+
}),
|
|
141
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
142
|
+
className: "min-w-0 flex-1",
|
|
143
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
144
|
+
className: `text-sm font-semibold ${isActive ? "text-brand-blue" : "text-slate-700"}`,
|
|
145
|
+
children: item.label
|
|
146
|
+
}), item.description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
147
|
+
className: "text-xs font-medium text-slate-400",
|
|
148
|
+
children: item.description
|
|
149
|
+
})]
|
|
150
|
+
}),
|
|
151
|
+
isActive && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("kbd", {
|
|
152
|
+
className: "shrink-0 rounded border border-brand-blue/25 bg-blue-50 px-1.5 py-0.5 text-[10px] font-bold text-brand-blue",
|
|
153
|
+
children: "↵"
|
|
154
|
+
})
|
|
155
|
+
]
|
|
156
|
+
}, item.id);
|
|
157
|
+
})] }, group))
|
|
158
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
159
|
+
className: "px-4 py-8 text-center text-sm font-medium text-slate-400",
|
|
160
|
+
children: query ? `No results for "${query}"` : "Type to search commands"
|
|
161
|
+
}),
|
|
162
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
163
|
+
className: "flex items-center gap-3 border-t border-slate-100 px-4 py-2",
|
|
164
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Command, {
|
|
165
|
+
size: 11,
|
|
166
|
+
className: "text-slate-300",
|
|
167
|
+
"aria-hidden": "true"
|
|
168
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
169
|
+
className: "text-[10px] font-medium text-slate-400",
|
|
170
|
+
children: "↑↓ navigate · ↵ select · Esc close"
|
|
171
|
+
})]
|
|
172
|
+
})
|
|
173
|
+
]
|
|
174
|
+
})]
|
|
175
|
+
}), document.body);
|
|
176
|
+
}
|
|
177
|
+
//#endregion
|
|
178
|
+
exports.CommandPalette = CommandPalette;
|
|
179
|
+
|
|
180
|
+
//# sourceMappingURL=index46.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index46.cjs","names":[],"sources":["../src/ui-library/gallery/command-palette/CommandPalette.tsx"],"sourcesContent":["/**\n * CommandPalette — Design System Component\n *\n * A keyboard-driven command launcher overlay. Opens via a trigger\n * (typically Cmd+K / Ctrl+K), shows a search input, and renders\n * grouped command items.\n *\n * Accessibility:\n * - role=\"dialog\" + aria-modal=\"true\" + aria-label\n * - Search input has aria-label and aria-controls pointing to results\n * - Results list uses role=\"listbox\" with role=\"option\" items\n * - aria-selected on the highlighted item\n * - Keyboard: ArrowUp/Down navigates, Enter activates, Escape closes\n *\n * This component is presentation-only: callers provide commands and\n * handle the query / selection logic.\n */\n\nimport { useEffect, useId, useRef, useState, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Search, Command } from 'lucide-react';\n\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n icon?: ReactNode;\n group?: string;\n onSelect: () => void;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n /** All available commands — consumer filters by query. */\n items: CommandItem[];\n /** Current search query. */\n query: string;\n /** Called when search query changes. */\n onQueryChange: (q: string) => void;\n /** Placeholder in the search input. Default: \"Search commands…\" */\n placeholder?: string;\n /** aria-label for the dialog. Default: \"Command palette\" */\n 'aria-label'?: string;\n}\n\nexport function CommandPalette({\n open,\n onClose,\n items,\n query,\n onQueryChange,\n placeholder = 'Search commands\\u2026',\n 'aria-label': ariaLabel = 'Command palette',\n}: CommandPaletteProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const listboxId = useId();\n const [activeIndex, setActiveIndex] = useState(0);\n\n // Reset active index when items change\n // eslint-disable-next-line react-hooks/set-state-in-effect\n useEffect(() => { setActiveIndex(0); }, [items]);\n\n // Scroll lock + initial focus\n useEffect(() => {\n if (!open) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n const timer = window.setTimeout(() => inputRef.current?.focus(), 0);\n return () => {\n clearTimeout(timer);\n document.body.style.overflow = prev;\n };\n }, [open]);\n\n // Keyboard navigation\n useEffect(() => {\n if (!open) return;\n const handle = (e: KeyboardEvent) => {\n if (e.key === 'Escape') { e.preventDefault(); onClose(); }\n else if (e.key === 'ArrowDown') {\n e.preventDefault();\n setActiveIndex((i) => Math.min(i + 1, items.length - 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === 'Enter') {\n e.preventDefault();\n items[activeIndex]?.onSelect();\n onClose();\n }\n };\n document.addEventListener('keydown', handle);\n return () => document.removeEventListener('keydown', handle);\n }, [open, items, activeIndex, onClose]);\n\n if (!open) return null;\n\n // Group items\n const groups = items.reduce<Record<string, CommandItem[]>>((acc, item) => {\n const g = item.group ?? '';\n if (!acc[g]) acc[g] = [];\n acc[g]!.push(item);\n return acc;\n }, {});\n\n const groupEntries = Object.entries(groups);\n\n return createPortal(\n <div className=\"fixed inset-0 z-50 flex items-start justify-center pt-[10vh] px-4\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 bg-slate-900/50 backdrop-blur-sm\"\n aria-hidden=\"true\"\n onClick={onClose}\n />\n\n {/* Panel */}\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n className=\"relative z-10 w-full max-w-lg rounded-2xl border border-slate-200 bg-white shadow-2xl overflow-hidden\"\n >\n {/* Search row */}\n <div className=\"flex items-center gap-3 px-4 py-3 border-b border-slate-100\">\n <Search size={16} className=\"shrink-0 text-slate-400\" aria-hidden=\"true\" />\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={items.length > 0}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-label=\"Search commands\"\n value={query}\n onChange={(e) => onQueryChange(e.target.value)}\n placeholder={placeholder}\n className=\"flex-1 bg-transparent text-sm font-medium text-slate-900 outline-none placeholder:text-slate-400\"\n />\n <kbd className=\"hidden shrink-0 rounded border border-slate-200 px-1.5 py-0.5 text-[10px] font-bold text-slate-400 sm:block\">\n ESC\n </kbd>\n </div>\n\n {/* Results */}\n {items.length > 0 ? (\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label=\"Commands\"\n className=\"max-h-72 overflow-y-auto py-1\"\n >\n {groupEntries.map(([group, groupItems]) => (\n <div key={group}>\n {group && (\n <div className=\"px-4 py-1.5 text-[10px] font-bold uppercase tracking-widest text-slate-400\">\n {group}\n </div>\n )}\n {groupItems.map((item) => {\n const globalIdx = items.indexOf(item);\n const isActive = globalIdx === activeIndex;\n return (\n <div\n key={item.id}\n role=\"option\"\n aria-selected={isActive}\n onClick={() => { item.onSelect(); onClose(); }}\n onMouseEnter={() => setActiveIndex(globalIdx)}\n className={`flex cursor-pointer items-center gap-3 px-4 py-2.5 transition ${\n isActive ? 'bg-blue-50' : 'hover:bg-slate-50'\n }`}\n >\n {item.icon && (\n <span className={`shrink-0 ${isActive ? 'text-brand-blue' : 'text-slate-400'}`} aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className={`text-sm font-semibold ${isActive ? 'text-brand-blue' : 'text-slate-700'}`}>\n {item.label}\n </p>\n {item.description && (\n <p className=\"text-xs font-medium text-slate-400\">{item.description}</p>\n )}\n </div>\n {isActive && (\n <kbd className=\"shrink-0 rounded border border-brand-blue/25 bg-blue-50 px-1.5 py-0.5 text-[10px] font-bold text-brand-blue\">\n ↵\n </kbd>\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n ) : (\n <div className=\"px-4 py-8 text-center text-sm font-medium text-slate-400\">\n {query ? `No results for \"${query}\"` : 'Type to search commands'}\n </div>\n )}\n\n {/* Footer hint */}\n <div className=\"flex items-center gap-3 border-t border-slate-100 px-4 py-2\">\n <Command size={11} className=\"text-slate-300\" aria-hidden=\"true\" />\n <span className=\"text-[10px] font-medium text-slate-400\">\n ↑↓ navigate · ↵ select · Esc close\n </span>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n"],"mappings":"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"}
|