@pihanga2/shadcn 0.2.4 → 0.2.6

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 (81) hide show
  1. package/AGENT.building-cards.md +87 -0
  2. package/AGENT.using-cards.md +47 -0
  3. package/README.md +5 -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/dataTable/dataTable.component.js +43 -42
  18. package/cards/dataTable/dataTable.component.js.map +1 -1
  19. package/cards/dataTable/dataTable.types.d.ts +26 -2
  20. package/cards/dataTable/dataTable.types.js +1 -0
  21. package/cards/dataTable/dataTable.types.js.map +1 -1
  22. package/cards/drawer/drawer.component.d.ts +4 -0
  23. package/cards/drawer/drawer.component.js +83 -0
  24. package/cards/drawer/drawer.component.js.map +1 -0
  25. package/cards/drawer/drawer.types.d.ts +95 -0
  26. package/cards/drawer/drawer.types.js +11 -0
  27. package/cards/drawer/drawer.types.js.map +1 -0
  28. package/cards/drawer/index.d.ts +1 -0
  29. package/cards/drawer/index.js +13 -0
  30. package/cards/drawer/index.js.map +1 -0
  31. package/cards/dropDownMenu/dropdown-menu.ui.js +41 -41
  32. package/cards/emptyCard/index.d.ts +7 -0
  33. package/cards/fileDrop/fileDrop.component.js +1 -1
  34. package/cards/fileDrop/fileDrop.css +1 -0
  35. package/cards/graphin/eventDispatcher.component.d.ts +2 -1
  36. package/cards/graphin/graphin.types.d.ts +14 -0
  37. package/cards/jsonViewer/jsonViewer.component.js +1 -1
  38. package/cards/jsonViewer/jsonViewer.css +1 -0
  39. package/cards/list/list.component.js +21 -21
  40. package/cards/loadingOverlay/loadingOverlay.component.js +1 -1
  41. package/cards/loadingOverlay/loadingOverlay.css +1 -0
  42. package/cards/pageWithNavbar/pageWithNavbar.component.js +1 -1
  43. package/cards/pageWithNavbar/pageWithNavbar.css +1 -0
  44. package/cards/pageWithNavbarMeta/index.d.ts +1 -0
  45. package/cards/pageWithNavbarMeta/index.js +118 -0
  46. package/cards/pageWithNavbarMeta/index.js.map +1 -0
  47. package/cards/pageWithNavbarMeta/pageWithNavbarMeta.types.d.ts +78 -0
  48. package/cards/pageWithNavbarMeta/pageWithNavbarMeta.types.js +7 -0
  49. package/cards/pageWithNavbarMeta/pageWithNavbarMeta.types.js.map +1 -0
  50. package/cards/pasteTarget/pasteTarget.component.js +1 -1
  51. package/cards/pasteTarget/pasteTarget.css +1 -0
  52. package/cards/scrollbarWithAnnotations/index.d.ts +1 -0
  53. package/cards/scrollbarWithAnnotations/index.js +13 -0
  54. package/cards/scrollbarWithAnnotations/index.js.map +1 -0
  55. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.component.d.ts +23 -0
  56. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.component.js +78 -0
  57. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.component.js.map +1 -0
  58. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.css +1 -0
  59. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.types.d.ts +123 -0
  60. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.types.js +7 -0
  61. package/cards/scrollbarWithAnnotations/scrollbarWithAnnotations.types.js.map +1 -0
  62. package/cards/slider/slider.component.js +67 -48
  63. package/cards/slider/slider.component.js.map +1 -1
  64. package/cards/slider/slider.types.d.ts +31 -0
  65. package/cards/slider/slider.types.js.map +1 -1
  66. package/cards/stepper/stepper.component.js +1 -1
  67. package/cards/stepper/stepper.css +1 -0
  68. package/components/ui/avatar.js +5 -5
  69. package/components/ui/badge.js +7 -7
  70. package/components/ui/button.js +6 -6
  71. package/components/ui/drawer.js +79 -0
  72. package/components/ui/drawer.js.map +1 -0
  73. package/components/ui/field.js +16 -16
  74. package/components/ui/label.js +3 -3
  75. package/components/ui/separator.js +1 -1
  76. package/components/ui/toggle-group.js +5 -5
  77. package/components/ui/toggle.js +2 -2
  78. package/lib/utils.d.ts +15 -0
  79. package/lib/utils.js.map +1 -1
  80. package/package.json +28 -3
  81. 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.4",
3
+ "version": "0.2.6",
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"
@@ -32,6 +36,10 @@
32
36
  "import": "./cards/dialog/index.js",
33
37
  "types": "./cards/dialog/index.d.ts"
34
38
  },
39
+ "./cards/drawer": {
40
+ "import": "./cards/drawer/index.js",
41
+ "types": "./cards/drawer/index.d.ts"
42
+ },
35
43
  "./cards/dropDownMenu": {
36
44
  "import": "./cards/dropDownMenu/index.js",
37
45
  "types": "./cards/dropDownMenu/index.d.ts"
@@ -92,6 +100,10 @@
92
100
  "import": "./cards/pageWithNavbar/index.js",
93
101
  "types": "./cards/pageWithNavbar/index.d.ts"
94
102
  },
103
+ "./cards/pageWithNavbarMeta": {
104
+ "import": "./cards/pageWithNavbarMeta/index.js",
105
+ "types": "./cards/pageWithNavbarMeta/index.d.ts"
106
+ },
95
107
  "./cards/pasteTarget": {
96
108
  "import": "./cards/pasteTarget/index.js",
97
109
  "types": "./cards/pasteTarget/index.d.ts"
@@ -100,6 +112,10 @@
100
112
  "import": "./cards/resizable/index.js",
101
113
  "types": "./cards/resizable/index.d.ts"
102
114
  },
115
+ "./cards/scrollbarWithAnnotations": {
116
+ "import": "./cards/scrollbarWithAnnotations/index.js",
117
+ "types": "./cards/scrollbarWithAnnotations/index.d.ts"
118
+ },
103
119
  "./cards/select": {
104
120
  "import": "./cards/select/index.js",
105
121
  "types": "./cards/select/index.d.ts"
@@ -151,9 +167,14 @@
151
167
  "./cards/icons": {
152
168
  "import": "./cards/icons.js",
153
169
  "types": "./cards/icons.d.ts"
170
+ },
171
+ "./lib/utils": {
172
+ "import": "./lib/utils.js",
173
+ "types": "./lib/utils.d.ts"
154
174
  }
155
175
  },
156
176
  "sideEffects": [
177
+ "./cards/avatar/index.js",
157
178
  "./cards/badge/index.js",
158
179
  "./cards/box/index.js",
159
180
  "./cards/button/index.js",
@@ -161,6 +182,7 @@
161
182
  "./cards/conditional/index.js",
162
183
  "./cards/dataTable/index.js",
163
184
  "./cards/dialog/index.js",
185
+ "./cards/drawer/index.js",
164
186
  "./cards/dropDownMenu/index.js",
165
187
  "./cards/field/index.js",
166
188
  "./cards/fileDrop/index.js",
@@ -176,8 +198,10 @@
176
198
  "./cards/modeToggle/index.js",
177
199
  "./cards/navbarSearch/index.js",
178
200
  "./cards/pageWithNavbar/index.js",
201
+ "./cards/pageWithNavbarMeta/index.js",
179
202
  "./cards/pasteTarget/index.js",
180
203
  "./cards/resizable/index.js",
204
+ "./cards/scrollbarWithAnnotations/index.js",
181
205
  "./cards/select/index.js",
182
206
  "./cards/slider/index.js",
183
207
  "./cards/sliderValue/index.js",
@@ -208,7 +232,7 @@
208
232
  "peerDependencies": {
209
233
  "react": "^19.1.0",
210
234
  "react-dom": "^19.1.0",
211
- "@pihanga2/core": "*",
235
+ "@pihanga2/core": "^0.3.21",
212
236
  "@pihanga2/cards": "*"
213
237
  },
214
238
  "dependencies": {
@@ -229,6 +253,7 @@
229
253
  "react-json-view-lite": "^2.5.0",
230
254
  "react-resizable-panels": "^2.0.0",
231
255
  "sonner": "^2.0.7",
232
- "tailwind-merge": "^3.3.0"
256
+ "tailwind-merge": "^3.3.0",
257
+ "vaul": "^1.1.2"
233
258
  }
234
259
  }
@@ -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*/