@pihanga2/shadcn 0.2.5 → 0.2.7

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.
Files changed (110) hide show
  1. package/AGENT.building-cards.md +87 -0
  2. package/AGENT.using-cards.md +47 -0
  3. package/README.md +7 -1
  4. package/cards/avatar/avatar.component.d.ts +11 -0
  5. package/cards/avatar/avatar.component.js +26 -0
  6. package/cards/avatar/avatar.component.js.map +1 -0
  7. package/cards/avatar/avatar.types.d.ts +46 -0
  8. package/cards/avatar/avatar.types.js +7 -0
  9. package/cards/avatar/avatar.types.js.map +1 -0
  10. package/cards/avatar/index.d.ts +1 -0
  11. package/cards/avatar/index.js +12 -0
  12. package/cards/avatar/index.js.map +1 -0
  13. package/cards/badge/badge.component.js +4 -4
  14. package/cards/codeMirror/codeMirror.component.d.ts +4 -0
  15. package/cards/codeMirror/codeMirror.types.d.ts +83 -0
  16. package/cards/codeMirror/index.d.ts +1 -0
  17. package/cards/collapsibleCard/collapsibleCard.component.d.ts +4 -0
  18. package/cards/collapsibleCard/collapsibleCard.component.js +61 -0
  19. package/cards/collapsibleCard/collapsibleCard.component.js.map +1 -0
  20. package/cards/collapsibleCard/collapsibleCard.types.d.ts +91 -0
  21. package/cards/collapsibleCard/collapsibleCard.types.js +7 -0
  22. package/cards/collapsibleCard/collapsibleCard.types.js.map +1 -0
  23. package/cards/collapsibleCard/index.d.ts +1 -0
  24. package/cards/collapsibleCard/index.js +13 -0
  25. package/cards/collapsibleCard/index.js.map +1 -0
  26. package/cards/collapsibleCard.d.ts +1 -0
  27. package/cards/dataTable/dataTable.component.js +43 -42
  28. package/cards/dataTable/dataTable.component.js.map +1 -1
  29. package/cards/dataTable/dataTable.types.d.ts +26 -2
  30. package/cards/dataTable/dataTable.types.js +1 -0
  31. package/cards/dataTable/dataTable.types.js.map +1 -1
  32. package/cards/drawer/drawer.component.d.ts +4 -0
  33. package/cards/drawer/drawer.component.js +83 -0
  34. package/cards/drawer/drawer.component.js.map +1 -0
  35. package/cards/drawer/drawer.types.d.ts +95 -0
  36. package/cards/drawer/drawer.types.js +11 -0
  37. package/cards/drawer/drawer.types.js.map +1 -0
  38. package/cards/drawer/index.d.ts +1 -0
  39. package/cards/drawer/index.js +13 -0
  40. package/cards/drawer/index.js.map +1 -0
  41. package/cards/dropDownMenu/dropdown-menu.ui.js +41 -41
  42. package/cards/emptyCard/emptyCard.component.d.ts +4 -0
  43. package/cards/emptyCard/emptyCard.types.d.ts +36 -0
  44. package/cards/emptyCard/index.d.ts +1 -0
  45. package/cards/emptyCard.d.ts +1 -7
  46. package/cards/fileDrop/fileDrop.component.js +1 -1
  47. package/cards/fileDrop/fileDrop.css +1 -0
  48. package/cards/flexGrid/flexGrid.types.d.ts +1 -2
  49. package/cards/flexGrid/flexGrid.types.js.map +1 -1
  50. package/cards/graphin/eventDispatcher.component.d.ts +3 -1
  51. package/cards/graphin/graphin.types.d.ts +14 -0
  52. package/cards/infoCard/index.d.ts +1 -0
  53. package/cards/infoCard/index.js +12 -0
  54. package/cards/infoCard/index.js.map +1 -0
  55. package/cards/infoCard/infoCard.component.d.ts +4 -0
  56. package/cards/infoCard/infoCard.component.js +55 -0
  57. package/cards/infoCard/infoCard.component.js.map +1 -0
  58. package/cards/infoCard/infoCard.types.d.ts +65 -0
  59. package/cards/infoCard/infoCard.types.js +7 -0
  60. package/cards/infoCard/infoCard.types.js.map +1 -0
  61. package/cards/infoCard.d.ts +1 -0
  62. package/cards/jsonViewer/jsonViewer.component.js +1 -1
  63. package/cards/jsonViewer/jsonViewer.css +1 -0
  64. package/cards/list/list.component.js +21 -21
  65. package/cards/loadingOverlay/loadingOverlay.component.js +1 -1
  66. package/cards/loadingOverlay/loadingOverlay.css +1 -0
  67. package/cards/pageWithNavbar/pageWithNavbar.component.js +1 -1
  68. package/cards/pageWithNavbar/pageWithNavbar.css +1 -0
  69. package/cards/pageWithNavbarMeta/index.d.ts +1 -0
  70. package/cards/pageWithNavbarMeta/index.js +118 -0
  71. package/cards/pageWithNavbarMeta/index.js.map +1 -0
  72. package/cards/pageWithNavbarMeta/pageWithNavbarMeta.types.d.ts +78 -0
  73. package/cards/pageWithNavbarMeta/pageWithNavbarMeta.types.js +7 -0
  74. package/cards/pageWithNavbarMeta/pageWithNavbarMeta.types.js.map +1 -0
  75. package/cards/pasteTarget/pasteTarget.component.js +1 -1
  76. package/cards/pasteTarget/pasteTarget.css +1 -0
  77. package/cards/scrollbarWithAnnotations/index.d.ts +1 -0
  78. package/cards/scrollbarWithAnnotations/index.js +13 -0
  79. package/cards/scrollbarWithAnnotations/index.js.map +1 -0
  80. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.component.d.ts +23 -0
  81. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.component.js +78 -0
  82. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.component.js.map +1 -0
  83. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.css +1 -0
  84. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.types.d.ts +123 -0
  85. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.types.js +7 -0
  86. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.types.js.map +1 -0
  87. package/cards/slider/slider.component.js +67 -48
  88. package/cards/slider/slider.component.js.map +1 -1
  89. package/cards/slider/slider.types.d.ts +31 -0
  90. package/cards/slider/slider.types.js.map +1 -1
  91. package/cards/stepper/stepper.component.js +1 -1
  92. package/cards/stepper/stepper.css +1 -0
  93. package/cards/toggleGroup/toggleGroup.component.js +1 -1
  94. package/cards/toggleGroup/toggleGroup.component.js.map +1 -1
  95. package/components/ui/avatar.js +5 -5
  96. package/components/ui/badge.js +7 -7
  97. package/components/ui/button.js +6 -6
  98. package/components/ui/card.js +50 -0
  99. package/components/ui/card.js.map +1 -0
  100. package/components/ui/drawer.js +79 -0
  101. package/components/ui/drawer.js.map +1 -0
  102. package/components/ui/field.js +16 -16
  103. package/components/ui/label.js +3 -3
  104. package/components/ui/separator.js +1 -1
  105. package/components/ui/toggle-group.js +5 -5
  106. package/components/ui/toggle.js +2 -2
  107. package/lib/utils.d.ts +15 -0
  108. package/lib/utils.js.map +1 -1
  109. package/package.json +39 -3
  110. package/pihanga-shadcn.css +0 -2
@@ -2,10 +2,10 @@ import { cn as e } from "../../lib/utils.js";
2
2
  import { Label as t } from "./label.js";
3
3
  import "./separator.js";
4
4
  import { useMemo as n } from "react";
5
- import { cva as r } from "class-variance-authority";
6
- import { jsx as i } from "react/jsx-runtime";
5
+ import { jsx as r } from "react/jsx-runtime";
6
+ import { cva as i } from "class-variance-authority";
7
7
  //#region src/components/ui/field.tsx
8
- var a = r("group/field flex w-full gap-3 data-[invalid=true]:text-destructive", {
8
+ var a = i("group/field flex w-full gap-3 data-[invalid=true]:text-destructive", {
9
9
  variants: { orientation: {
10
10
  vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
11
11
  horizontal: [
@@ -21,40 +21,40 @@ var a = r("group/field flex w-full gap-3 data-[invalid=true]:text-destructive",
21
21
  } },
22
22
  defaultVariants: { orientation: "vertical" }
23
23
  });
24
- function o({ className: t, orientation: n = "vertical", ...r }) {
25
- return /* @__PURE__ */ i("div", {
24
+ function o({ className: t, orientation: n = "vertical", ...i }) {
25
+ return /* @__PURE__ */ r("div", {
26
26
  role: "group",
27
27
  "data-slot": "field",
28
28
  "data-orientation": n,
29
29
  className: e(a({ orientation: n }), t),
30
- ...r
30
+ ...i
31
31
  });
32
32
  }
33
- function s({ className: n, ...r }) {
34
- return /* @__PURE__ */ i(t, {
33
+ function s({ className: n, ...i }) {
34
+ return /* @__PURE__ */ r(t, {
35
35
  "data-slot": "field-label",
36
36
  className: e("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4", "has-data-[state=checked]:border-primary has-data-[state=checked]:bg-primary/5 dark:has-data-[state=checked]:bg-primary/10", n),
37
- ...r
37
+ ...i
38
38
  });
39
39
  }
40
40
  function c({ className: t, ...n }) {
41
- return /* @__PURE__ */ i("p", {
41
+ return /* @__PURE__ */ r("p", {
42
42
  "data-slot": "field-description",
43
43
  className: e("text-sm leading-normal font-normal text-muted-foreground group-has-[[data-orientation=horizontal]]/field:text-balance", "last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5", "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", t),
44
44
  ...n
45
45
  });
46
46
  }
47
- function l({ className: t, children: r, errors: a, ...o }) {
47
+ function l({ className: t, children: i, errors: a, ...o }) {
48
48
  let s = n(() => {
49
- if (r) return r;
49
+ if (i) return i;
50
50
  if (!a?.length) return null;
51
51
  let e = [...new Map(a.map((e) => [e?.message, e])).values()];
52
- return e?.length == 1 ? e[0]?.message : /* @__PURE__ */ i("ul", {
52
+ return e?.length == 1 ? e[0]?.message : /* @__PURE__ */ r("ul", {
53
53
  className: "ml-4 flex list-disc flex-col gap-1",
54
- children: e.map((e, t) => e?.message && /* @__PURE__ */ i("li", { children: e.message }, t))
54
+ children: e.map((e, t) => e?.message && /* @__PURE__ */ r("li", { children: e.message }, t))
55
55
  });
56
- }, [r, a]);
57
- return s ? /* @__PURE__ */ i("div", {
56
+ }, [i, a]);
57
+ return s ? /* @__PURE__ */ r("div", {
58
58
  role: "alert",
59
59
  "data-slot": "field-error",
60
60
  className: e("text-sm font-normal text-destructive", t),
@@ -1,10 +1,10 @@
1
1
  import { cn as e } from "../../lib/utils.js";
2
2
  import "react";
3
- import { jsx as t } from "react/jsx-runtime";
4
- import { Label as n } from "radix-ui";
3
+ import { Label as t } from "radix-ui";
4
+ import { jsx as n } from "react/jsx-runtime";
5
5
  //#region src/components/ui/label.tsx
6
6
  function r({ className: r, ...i }) {
7
- return /* @__PURE__ */ t(n.Root, {
7
+ return /* @__PURE__ */ n(t.Root, {
8
8
  "data-slot": "label",
9
9
  className: e("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", r),
10
10
  ...i
@@ -1,5 +1,5 @@
1
1
  "use client";
2
2
  import "../../lib/utils.js";
3
3
  import "react";
4
- import "react/jsx-runtime";
5
4
  import "radix-ui";
5
+ import "react/jsx-runtime";
@@ -2,9 +2,9 @@
2
2
  import { cn as e } from "../../lib/utils.js";
3
3
  import { toggleVariants as t } from "./toggle.js";
4
4
  import * as n from "react";
5
+ import { ToggleGroup as r } from "radix-ui";
6
+ import { jsx as i } from "react/jsx-runtime";
5
7
  import "class-variance-authority";
6
- import { jsx as r } from "react/jsx-runtime";
7
- import { ToggleGroup as i } from "radix-ui";
8
8
  //#region src/components/ui/toggle-group.tsx
9
9
  var a = n.createContext({
10
10
  size: "default",
@@ -12,7 +12,7 @@ var a = n.createContext({
12
12
  spacing: 0
13
13
  });
14
14
  function o({ className: t, variant: n, size: o, spacing: s = 0, children: c, ...l }) {
15
- return /* @__PURE__ */ r(i.Root, {
15
+ return /* @__PURE__ */ i(r.Root, {
16
16
  "data-slot": "toggle-group",
17
17
  "data-variant": n,
18
18
  "data-size": o,
@@ -20,7 +20,7 @@ function o({ className: t, variant: n, size: o, spacing: s = 0, children: c, ...
20
20
  style: { "--gap": s },
21
21
  className: e("group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs", t),
22
22
  ...l,
23
- children: /* @__PURE__ */ r(a.Provider, {
23
+ children: /* @__PURE__ */ i(a.Provider, {
24
24
  value: {
25
25
  variant: n,
26
26
  size: o,
@@ -32,7 +32,7 @@ function o({ className: t, variant: n, size: o, spacing: s = 0, children: c, ...
32
32
  }
33
33
  function s({ className: o, children: s, variant: c, size: l, ...u }) {
34
34
  let d = n.useContext(a);
35
- return /* @__PURE__ */ r(i.Item, {
35
+ return /* @__PURE__ */ i(r.Item, {
36
36
  "data-slot": "toggle-group-item",
37
37
  "data-variant": d.variant || c,
38
38
  "data-size": d.size || l,
@@ -1,8 +1,8 @@
1
1
  import "../../lib/utils.js";
2
2
  import "react";
3
- import { cva as e } from "class-variance-authority";
4
- import "react/jsx-runtime";
5
3
  import "radix-ui";
4
+ import "react/jsx-runtime";
5
+ import { cva as e } from "class-variance-authority";
6
6
  //#region src/components/ui/toggle.tsx
7
7
  var t = e("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
8
8
  variants: {
package/lib/utils.d.ts CHANGED
@@ -1,2 +1,17 @@
1
1
  import { ClassValue } from 'clsx';
2
2
  export declare function cn(...inputs: ClassValue[]): string;
3
+ /**
4
+ * Returns "#000000" or "#ffffff" for maximum contrast against the given background color (hex or rgb).
5
+ *
6
+ * Based on WCAG relative luminance, which models human visual perception:
7
+ * L = 0.2126·R + 0.7152·G + 0.0722·B
8
+ *
9
+ * The weights reflect how sensitive our eyes are to each channel —
10
+ * green contributes 71% of perceived brightness, red ~21%, blue only 7%.
11
+ * This means a vivid red like #c0392b is perceptually *dim* (L≈0.11), so
12
+ * white text (contrast 8.7:1) beats black text (2.4:1) against it.
13
+ *
14
+ * The threshold L > 0.179 is the luminance midpoint where both black and
15
+ * white achieve ~4.5:1 contrast — the WCAG AA minimum.
16
+ */
17
+ export declare function contrastColor(bg: string, threshold?: number): "#000000" | "#ffffff";
package/lib/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../src/lib/utils.ts"],"sourcesContent":["import {clsx, type ClassValue} from \"clsx\";\nimport {twMerge} from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":";;;AAGA,SAAgB,EAAG,GAAG,GAAsB;CAC1C,OAAO,EAAQ,EAAK,CAAM,CAAC;AAC7B"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../src/lib/utils.ts"],"sourcesContent":["import {clsx, type ClassValue} from \"clsx\";\nimport {twMerge} from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Returns \"#000000\" or \"#ffffff\" for maximum contrast against the given background color (hex or rgb).\n *\n * Based on WCAG relative luminance, which models human visual perception:\n * L = 0.2126·R + 0.7152·G + 0.0722·B\n *\n * The weights reflect how sensitive our eyes are to each channel —\n * green contributes 71% of perceived brightness, red ~21%, blue only 7%.\n * This means a vivid red like #c0392b is perceptually *dim* (L≈0.11), so\n * white text (contrast 8.7:1) beats black text (2.4:1) against it.\n *\n * The threshold L > 0.179 is the luminance midpoint where both black and\n * white achieve ~4.5:1 contrast — the WCAG AA minimum.\n */\nexport function contrastColor(\n bg: string,\n threshold = 0.179,\n): \"#000000\" | \"#ffffff\" {\n const m = bg.match(/\\w\\w/g) ?? bg.match(/\\d+/g);\n const [r, g, b] = bg.startsWith(\"#\")\n ? (bg.length === 4\n ? [bg[1] + bg[1], bg[2] + bg[2], bg[3] + bg[3]]\n : [bg.slice(1, 3), bg.slice(3, 5), bg.slice(5, 7)]\n ).map((h) => parseInt(h, 16))\n : (m ?? []).map(Number);\n // WCAG relative luminance\n const toLinear = (c: number) => {\n const s = c / 255;\n return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n };\n const L = 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n return L > threshold ? \"#000000\" : \"#ffffff\";\n}\n"],"mappings":";;;AAGA,SAAgB,EAAG,GAAG,GAAsB;CAC1C,OAAO,EAAQ,EAAK,CAAM,CAAC;AAC7B"}
package/package.json CHANGED
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "@pihanga2/shadcn",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "description": "Pihanga core card components built on shadcn/ui and Radix UI — the npm distribution of pihanga-shadcn.",
5
5
  "type": "module",
6
6
  "exports": {
7
+ "./cards/avatar": {
8
+ "import": "./cards/avatar/index.js",
9
+ "types": "./cards/avatar/index.d.ts"
10
+ },
7
11
  "./cards/badge": {
8
12
  "import": "./cards/badge/index.js",
9
13
  "types": "./cards/badge/index.d.ts"
@@ -20,6 +24,10 @@
20
24
  "import": "./cards/checkbox/index.js",
21
25
  "types": "./cards/checkbox/index.d.ts"
22
26
  },
27
+ "./cards/collapsibleCard": {
28
+ "import": "./cards/collapsibleCard/index.js",
29
+ "types": "./cards/collapsibleCard/index.d.ts"
30
+ },
23
31
  "./cards/conditional": {
24
32
  "import": "./cards/conditional/index.js",
25
33
  "types": "./cards/conditional/index.d.ts"
@@ -32,6 +40,10 @@
32
40
  "import": "./cards/dialog/index.js",
33
41
  "types": "./cards/dialog/index.d.ts"
34
42
  },
43
+ "./cards/drawer": {
44
+ "import": "./cards/drawer/index.js",
45
+ "types": "./cards/drawer/index.d.ts"
46
+ },
35
47
  "./cards/dropDownMenu": {
36
48
  "import": "./cards/dropDownMenu/index.js",
37
49
  "types": "./cards/dropDownMenu/index.d.ts"
@@ -56,6 +68,10 @@
56
68
  "import": "./cards/framework/index.js",
57
69
  "types": "./cards/framework/index.d.ts"
58
70
  },
71
+ "./cards/infoCard": {
72
+ "import": "./cards/infoCard/index.js",
73
+ "types": "./cards/infoCard/index.d.ts"
74
+ },
59
75
  "./cards/input": {
60
76
  "import": "./cards/input/index.js",
61
77
  "types": "./cards/input/index.d.ts"
@@ -92,6 +108,10 @@
92
108
  "import": "./cards/pageWithNavbar/index.js",
93
109
  "types": "./cards/pageWithNavbar/index.d.ts"
94
110
  },
111
+ "./cards/pageWithNavbarMeta": {
112
+ "import": "./cards/pageWithNavbarMeta/index.js",
113
+ "types": "./cards/pageWithNavbarMeta/index.d.ts"
114
+ },
95
115
  "./cards/pasteTarget": {
96
116
  "import": "./cards/pasteTarget/index.js",
97
117
  "types": "./cards/pasteTarget/index.d.ts"
@@ -100,6 +120,10 @@
100
120
  "import": "./cards/resizable/index.js",
101
121
  "types": "./cards/resizable/index.d.ts"
102
122
  },
123
+ "./cards/scrollbarWithAnnotations": {
124
+ "import": "./cards/scrollbarWithAnnotations/index.js",
125
+ "types": "./cards/scrollbarWithAnnotations/index.d.ts"
126
+ },
103
127
  "./cards/select": {
104
128
  "import": "./cards/select/index.js",
105
129
  "types": "./cards/select/index.d.ts"
@@ -151,22 +175,30 @@
151
175
  "./cards/icons": {
152
176
  "import": "./cards/icons.js",
153
177
  "types": "./cards/icons.d.ts"
178
+ },
179
+ "./lib/utils": {
180
+ "import": "./lib/utils.js",
181
+ "types": "./lib/utils.d.ts"
154
182
  }
155
183
  },
156
184
  "sideEffects": [
185
+ "./cards/avatar/index.js",
157
186
  "./cards/badge/index.js",
158
187
  "./cards/box/index.js",
159
188
  "./cards/button/index.js",
160
189
  "./cards/checkbox/index.js",
190
+ "./cards/collapsibleCard/index.js",
161
191
  "./cards/conditional/index.js",
162
192
  "./cards/dataTable/index.js",
163
193
  "./cards/dialog/index.js",
194
+ "./cards/drawer/index.js",
164
195
  "./cards/dropDownMenu/index.js",
165
196
  "./cards/field/index.js",
166
197
  "./cards/fileDrop/index.js",
167
198
  "./cards/flexGrid/index.js",
168
199
  "./cards/form/index.js",
169
200
  "./cards/framework/index.js",
201
+ "./cards/infoCard/index.js",
170
202
  "./cards/input/index.js",
171
203
  "./cards/jsonViewer/index.js",
172
204
  "./cards/list/index.js",
@@ -176,8 +208,10 @@
176
208
  "./cards/modeToggle/index.js",
177
209
  "./cards/navbarSearch/index.js",
178
210
  "./cards/pageWithNavbar/index.js",
211
+ "./cards/pageWithNavbarMeta/index.js",
179
212
  "./cards/pasteTarget/index.js",
180
213
  "./cards/resizable/index.js",
214
+ "./cards/scrollbarWithAnnotations/index.js",
181
215
  "./cards/select/index.js",
182
216
  "./cards/slider/index.js",
183
217
  "./cards/sliderValue/index.js",
@@ -208,10 +242,11 @@
208
242
  "peerDependencies": {
209
243
  "react": "^19.1.0",
210
244
  "react-dom": "^19.1.0",
211
- "@pihanga2/core": "*",
245
+ "@pihanga2/core": "^0.3.21",
212
246
  "@pihanga2/cards": "*"
213
247
  },
214
248
  "dependencies": {
249
+ "@radix-ui/react-collapsible": "^1.1.20",
215
250
  "@radix-ui/react-dialog": "^1.1.15",
216
251
  "@radix-ui/react-dropdown-menu": "^2.1.16",
217
252
  "@radix-ui/react-menubar": "^1.1.16",
@@ -229,6 +264,7 @@
229
264
  "react-json-view-lite": "^2.5.0",
230
265
  "react-resizable-panels": "^2.0.0",
231
266
  "sonner": "^2.0.7",
232
- "tailwind-merge": "^3.3.0"
267
+ "tailwind-merge": "^3.3.0",
268
+ "vaul": "^1.1.2"
233
269
  }
234
270
  }
@@ -1,2 +0,0 @@
1
- .pi-file-drop-root label{border:2px dashed #999;flex-grow:1;justify-content:space-between;max-width:100%;display:flex}.pi-file-drop-root .dropzone-msg{cursor:pointer;text-align:center;flex-grow:4;margin:3em 0}.pi-file-drop-root .pi-progress{max-width:100%;padding:1.25em}.pi-file-drop-root .pi-progress-label{font-size:1rem;font-weight:600;line-height:1.5rem}.pi-file-drop -root.pi-progress-container{background-color:#dadfe5;border-radius:4px;height:1rem;display:flex;position:relative;overflow:hidden}.pi-file-drop-root .pi-progress-bar{color:#fff;background-color:#0054a6;flex-direction:column;justify-content:center;display:flex;overflow:hidden}.pi-file-drop-root .pi-progress .label{font-size:1em;display:block}._GzYRV{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;line-height:1.2}._3eOF8{margin-right:5px;font-weight:700}._3eOF8+._3eOF8{margin-left:-5px}._1MFti{cursor:pointer}._f10Tu{-webkit-user-select:none;user-select:none;margin-right:5px;font-size:1.2em}._1UmXx:after{content:"▸"}._1LId0:after{content:"▾"}._1pNG9{margin-right:5px}._1pNG9:after{content:"...";font-size:.8em}._2IvMF{background:#eee}._2bkNM{margin:0;padding:0 10px}._1BXBN{margin:0;padding:0}._1MGIk{color:#000;margin-right:5px;font-weight:600}._3uHL6{color:#000}._2T6PJ,._1Gho6{color:#df113a}._vGjyY{color:#2a3f3c}._1bQdo{color:#0b75f5}._3zQKs{color:#469038}._1xvuR{color:#43413d}._oLqym,._2AXVT,._2KJWg{color:#000}._11RoI{background:#002b36}._17H2C,._3QHg2,._3fDAz{color:#fdf6e3}._2bSDX{color:#fdf6e3;margin-right:5px;font-weight:bolder}._gsbQL{color:#fdf6e3}._LaAZe,._GTKgm{color:#81b5ac}._Chy1W{color:#cb4b16}._2bveF{color:#d33682}._2vRm-{color:#ae81ff}._1prJR{color:#268bd2}.jv-wrapper{position:relative}.jv-copy-btn{z-index:10;width:22px;height:22px;color:hsl(var(--muted-foreground,0 0% 55%));cursor:pointer;opacity:.35;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:opacity .15s,color .15s,background .15s,border-color .15s;display:inline-flex;position:absolute;top:4px;right:4px}.jv-wrapper:hover .jv-copy-btn,.jv-wrapper:focus-within .jv-copy-btn{opacity:1}.jv-copy-btn:hover{color:hsl(var(--foreground));background:hsl(var(--muted,0 0% 96%));border-color:hsl(var(--border,0 0% 88%))}.jv-copy-btn--done{opacity:1;color:#2e7d32}.dark .jv-copy-btn--done{color:#81c784}.jv-container{white-space:pre-wrap;word-wrap:break-word;color:var(--foreground);background:0 0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;font-size:12.5px;font-weight:400;line-height:1.55}.jv-basic-child{margin:0;padding:0 0 0 1.1em;display:block;position:relative}.jv-label{color:var(--foreground);margin-right:0;font-weight:400}.jv-clickable-label{color:var(--foreground);cursor:pointer;margin-right:0;font-weight:400}.jv-clickable-label:hover{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.jv-punctuation{color:var(--foreground);font-weight:400}.jv-expand-icon,.jv-collapse-icon{width:1em;color:hsl(var(--muted-foreground,0 0% 55%));-webkit-user-select:none;user-select:none;cursor:pointer;justify-content:center;align-items:center;font-size:.65em;line-height:1;display:inline-flex;position:absolute;top:.775em;left:0;transform:translateY(-50%)}.jv-expand-icon:after{content:"▶"}.jv-collapse-icon:after{content:"▼"}.jv-collapsed-content{cursor:pointer;color:hsl(var(--muted-foreground,0 0% 55%))}.jv-collapsed-content:after{content:" …"}.jv-child-fields-container{border-left:1px solid hsl(var(--border,0 0% 88%));margin:0 0 0 .3em;padding:0 0 0 1.25em}.jv-null,.jv-undefined{color:#c0392b}.jv-string{color:#2e7d32}.jv-number{color:#1565c0}.jv-boolean{color:#00796b}.jv-other{color:var(--foreground)}.dark .jv-string{color:#81c784}.dark .jv-number{color:#64b5f6}.dark .jv-boolean{color:#4db6ac}.dark .jv-null,.dark .jv-undefined{color:#ef9a9a}.dark .jv-child-fields-container{border-left-color:hsl(var(--border,0 0% 25%))}.overlay-wrapper{flex-direction:column;width:100%;min-width:0;display:flex;position:relative}.overlay-wrapper.is-loading.fill-parent{min-height:12rem}.overlay-content{flex-direction:column;flex-grow:1;width:100%;min-width:0;display:flex;position:relative;overflow-y:hidden}.overlay-wrapper.fill-parent .overlay-content{min-height:inherit}.loading-overlay{opacity:0;pointer-events:none;z-index:2;background:oklch(100% 0 0/.7);justify-content:center;align-items:center;transition:opacity .15s;display:flex;position:absolute;inset:0}.overlay-wrapper.viewport-centered .loading-overlay{z-index:50;position:fixed;inset:0}.dark .loading-overlay{background:oklch(14.5% 0 0/.5)}.overlay-wrapper.is-loading .loading-overlay{opacity:1;pointer-events:auto}.loading-overlay__content{color:var(--muted-foreground);align-items:center;gap:.5rem;font-size:.875rem;display:flex}.window{justify-content:center;width:100%;height:100%;display:flex}.page{flex-direction:column;flex:1;width:100%;height:100%;display:flex}.header{border-bottom:1px solid var(--border);background-color:var(--background);flex-shrink:0;align-items:center;gap:1rem;padding-left:1rem;padding-right:1rem;display:flex}@media (width>=768px){.header{padding-left:1.5rem;padding-right:1.5rem}}.title-section{align-items:center;gap:.5rem;display:inline-flex}.title-section .title-icon{flex-shrink:0;width:1.5rem;height:1.5rem}.title-section .title-text{color:var(--foreground);font-size:1.125rem;font-weight:600;line-height:1.75rem}.nav-md{display:none}@media (width>=768px){.nav-md{flex-direction:row;align-items:center;gap:1.25rem;display:flex}}@media (width>=1024px){.nav-md{gap:1.5rem}}.nav-md .nav-link{color:var(--muted-foreground);padding-left:0;padding-right:0;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.nav-md .nav-link:hover{color:var(--foreground)}.nav-sm{gap:1.5rem;padding:1rem;font-size:1.125rem;font-weight:500;line-height:1.75rem;display:grid}.nav-sm .nav-link{color:var(--muted-foreground);justify-content:flex-start;padding-left:0;padding-right:0;font-size:1.125rem;line-height:1.75rem}.nav-sm .nav-link:hover{color:var(--foreground)}.header-actions{align-items:center;gap:.5rem;margin-left:auto;display:flex}@media (width>=1024px){.header-actions{gap:1rem}}.main{background-color:var(--background);flex:1;min-height:0;padding:.5rem 1rem;overflow-y:auto}@media (width>=768px){.main{padding:1rem 2rem}}.footer{background-color:var(--background);color:var(--muted-foreground);flex-shrink:0;padding:.5rem 1rem}@media (width>=768px){.footer{padding:1rem 2rem}}.pihanga-paste-target{border:2px dashed #999}.pihanga-paste-target .paste-target-msg-title{font-size:1.2em}.pihanga-paste-target textarea:focus{outline:none}.pihanga-paste-target-focused{border-width:3px;border-color:#007bff}.pihanga-paste-target-focused .paste-target-focus-reminder{display:none}.pi-stepper{--pi-stepper-indicator-size-sm:1.5rem;--pi-stepper-indicator-size-md:2rem;--pi-stepper-indicator-size-lg:2.5rem;--pi-stepper-indicator-size:var(--pi-stepper-indicator-size-md);--pi-stepper-connector-thickness:2px;--pi-stepper-connector-min-height:1.5rem;--pi-stepper-label-max-width:6rem}.pi-stepper--sm{--pi-stepper-indicator-size:var(--pi-stepper-indicator-size-sm)}.pi-stepper--md{--pi-stepper-indicator-size:var(--pi-stepper-indicator-size-md)}.pi-stepper--lg{--pi-stepper-indicator-size:var(--pi-stepper-indicator-size-lg)}.pi-stepper__indicator{transition:background-color .2s,border-color .2s,color .2s,outline-color .2s}.pi-stepper__indicator--clickable{cursor:pointer}.pi-stepper__indicator--clickable:hover{opacity:.8}.pi-stepper__indicator--static{cursor:default}.pi-stepper__connector{transition:background-color .3s}.pi-stepper__connector--vertical{min-height:var(--pi-stepper-connector-min-height)}.pi-stepper__label-title{transition:color .2s}
2
- /*$vite$:1*/