zudoku 0.52.1 → 0.53.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.
Files changed (110) hide show
  1. package/dist/app/demo.js +2 -2
  2. package/dist/app/demo.js.map +1 -1
  3. package/dist/app/main.js +4 -4
  4. package/dist/app/standalone.js +3 -3
  5. package/dist/app/standalone.js.map +1 -1
  6. package/dist/config/validators/validate.d.ts +2 -2
  7. package/dist/config/validators/validate.js +3 -3
  8. package/dist/config/validators/validate.js.map +1 -1
  9. package/dist/flat-config.d.ts +325 -0
  10. package/dist/lib/components/Autocomplete.js +1 -1
  11. package/dist/lib/components/Autocomplete.js.map +1 -1
  12. package/dist/lib/components/Banner.js +1 -1
  13. package/dist/lib/components/Banner.js.map +1 -1
  14. package/dist/lib/components/Footer.js +1 -1
  15. package/dist/lib/components/Footer.js.map +1 -1
  16. package/dist/lib/components/Header.js +10 -10
  17. package/dist/lib/components/Header.js.map +1 -1
  18. package/dist/lib/components/Main.js +1 -1
  19. package/dist/lib/components/MobileTopNavigation.js +1 -1
  20. package/dist/lib/components/navigation/NavigationWrapper.js +1 -1
  21. package/dist/lib/core/ZudokuContext.d.ts +4 -4
  22. package/dist/lib/core/ZudokuContext.js +2 -2
  23. package/dist/lib/plugins/openapi/playground/BodyPanel.d.ts +2 -2
  24. package/dist/lib/plugins/openapi/playground/BodyPanel.js +4 -3
  25. package/dist/lib/plugins/openapi/playground/BodyPanel.js.map +1 -1
  26. package/dist/lib/plugins/openapi/playground/Headers.js +1 -1
  27. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  28. package/dist/lib/plugins/openapi/playground/PathParams.js +1 -1
  29. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  30. package/dist/lib/plugins/openapi/playground/Playground.js +8 -13
  31. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  32. package/dist/lib/plugins/openapi/playground/QueryParams.js +2 -2
  33. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  34. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.d.ts +3 -1
  35. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.js +5 -2
  36. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.js.map +1 -1
  37. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +6 -4
  38. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
  39. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.d.ts +3 -1
  40. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js +2 -2
  41. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js.map +1 -1
  42. package/dist/lib/ui/Dialog.js +1 -1
  43. package/dist/lib/ui/Dialog.js.map +1 -1
  44. package/dist/vite/build.js +1 -1
  45. package/dist/vite/dev-server.js +1 -1
  46. package/lib/{Command-CPtGTZAL.js → Command-xsbs2uhf.js} +2 -2
  47. package/lib/{Command-CPtGTZAL.js.map → Command-xsbs2uhf.js.map} +1 -1
  48. package/lib/{Dialog-DGlrUTCS.js → Dialog-CiIdyz6a.js} +3 -3
  49. package/lib/Dialog-CiIdyz6a.js.map +1 -0
  50. package/lib/{MdxPage-D-QSUlMf.js → MdxPage-swXPJ0gf.js} +3 -3
  51. package/lib/{MdxPage-D-QSUlMf.js.map → MdxPage-swXPJ0gf.js.map} +1 -1
  52. package/lib/{OasProvider-DKB2uJU-.js → OasProvider-CDAM3TB1.js} +2 -2
  53. package/lib/{OasProvider-DKB2uJU-.js.map → OasProvider-CDAM3TB1.js.map} +1 -1
  54. package/lib/{OperationList-CccIt45w.js → OperationList-C9Hb9ql8.js} +6 -6
  55. package/lib/{OperationList-CccIt45w.js.map → OperationList-C9Hb9ql8.js.map} +1 -1
  56. package/lib/{Pagination-ClHXydm9.js → Pagination-VGlgeCmS.js} +2 -2
  57. package/lib/{Pagination-ClHXydm9.js.map → Pagination-VGlgeCmS.js.map} +1 -1
  58. package/lib/{RouteGuard-Bd-ppFbi.js → RouteGuard-CbKd7_9h.js} +2 -2
  59. package/lib/{RouteGuard-Bd-ppFbi.js.map → RouteGuard-CbKd7_9h.js.map} +1 -1
  60. package/lib/{SchemaList-DY3FBF2U.js → SchemaList-BAbh1BXO.js} +4 -4
  61. package/lib/{SchemaList-DY3FBF2U.js.map → SchemaList-BAbh1BXO.js.map} +1 -1
  62. package/lib/{SchemaView-matL2maR.js → SchemaView-C2Io712T.js} +3 -3
  63. package/lib/{SchemaView-matL2maR.js.map → SchemaView-C2Io712T.js.map} +1 -1
  64. package/lib/{SignUp-CfojO4Pb.js → SignUp-5RUdVhnq.js} +2 -2
  65. package/lib/{SignUp-CfojO4Pb.js.map → SignUp-5RUdVhnq.js.map} +1 -1
  66. package/lib/{circular-CqHpo7-e.js → circular-B42RaanD.js} +2 -2
  67. package/lib/{circular-CqHpo7-e.js.map → circular-B42RaanD.js.map} +1 -1
  68. package/lib/{createServer-ByKo3XCG.js → createServer-BKFsRuuk.js} +3 -3
  69. package/lib/{createServer-ByKo3XCG.js.map → createServer-BKFsRuuk.js.map} +1 -1
  70. package/lib/{errors-BsabiSKg.js → errors-CF2X_x5o.js} +3 -3
  71. package/lib/{errors-BsabiSKg.js.map → errors-CF2X_x5o.js.map} +1 -1
  72. package/lib/{index-CEfpz8vY.js → index-B6Re5_cx.js} +843 -832
  73. package/lib/index-B6Re5_cx.js.map +1 -0
  74. package/lib/{index-BIbCx5Fh.js → index-CLy1XyH0.js} +14 -14
  75. package/lib/{index-BIbCx5Fh.js.map → index-CLy1XyH0.js.map} +1 -1
  76. package/lib/ui/Command.js +1 -1
  77. package/lib/ui/Dialog.js +23 -23
  78. package/lib/ui/Dialog.js.map +1 -1
  79. package/lib/zudoku.auth-azureb2c.js +1 -1
  80. package/lib/zudoku.auth-clerk.js +1 -1
  81. package/lib/zudoku.auth-openid.js +1 -1
  82. package/lib/zudoku.components.js +2 -2
  83. package/lib/zudoku.plugin-api-catalog.js +2 -2
  84. package/lib/zudoku.plugin-api-keys.js +1 -1
  85. package/lib/zudoku.plugin-markdown.js +1 -1
  86. package/lib/zudoku.plugin-openapi.js +1 -1
  87. package/lib/zudoku.plugin-search-pagefind.js +3 -3
  88. package/package.json +1 -1
  89. package/src/app/demo.tsx +2 -2
  90. package/src/app/main.tsx +4 -4
  91. package/src/app/standalone.tsx +3 -3
  92. package/src/lib/components/Autocomplete.tsx +1 -1
  93. package/src/lib/components/Banner.tsx +1 -1
  94. package/src/lib/components/Footer.tsx +1 -1
  95. package/src/lib/components/Header.tsx +15 -17
  96. package/src/lib/components/Main.tsx +1 -1
  97. package/src/lib/components/MobileTopNavigation.tsx +2 -2
  98. package/src/lib/components/navigation/NavigationWrapper.tsx +1 -1
  99. package/src/lib/core/ZudokuContext.ts +5 -5
  100. package/src/lib/plugins/openapi/playground/BodyPanel.tsx +6 -5
  101. package/src/lib/plugins/openapi/playground/Headers.tsx +1 -1
  102. package/src/lib/plugins/openapi/playground/PathParams.tsx +1 -1
  103. package/src/lib/plugins/openapi/playground/Playground.tsx +73 -84
  104. package/src/lib/plugins/openapi/playground/QueryParams.tsx +3 -1
  105. package/src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx +13 -2
  106. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +22 -17
  107. package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +6 -0
  108. package/src/lib/ui/Dialog.tsx +2 -2
  109. package/lib/Dialog-DGlrUTCS.js.map +0 -1
  110. package/lib/index-CEfpz8vY.js.map +0 -1
@@ -397,101 +397,88 @@ export const Playground = ({
397
397
  />
398
398
 
399
399
  <div className="grid grid-cols-[1fr_1px_1fr] text-sm">
400
- <div className="col-span-3 p-4 border-b">
401
- <div className="flex gap-2 items-stretch">
402
- <div className="flex flex-1 items-center w-full border rounded-md relative overflow-hidden">
403
- <div className="border-r p-2 bg-muted rounded-l-md self-stretch font-semibold font-mono flex items-center">
404
- {method.toUpperCase()}
405
- </div>
406
- <div className="items-center px-2 font-mono text-xs break-all leading-6 relative h-full w-full">
407
- <div className="h-full py-1.5">
408
- {serverSelect}
409
- <UrlPath url={url} />
410
- <UrlQueryParams />
411
- </div>
412
- <div
413
- className="h-full bg-primary/25 absolute left-0 -bottom-0 z-10 transition-all duration-300 ease-in-out"
414
- style={{
415
- opacity: isFinished ? 0 : 1,
416
- width: isFinished ? 0 : `${progress * 100}%`,
417
- }}
418
- />
419
- </div>
420
- <div className="px-1">
421
- <Button
422
- type="button"
423
- onClick={() => {
424
- copyToClipboard(
425
- createUrl(
426
- server ?? selectedServer,
427
- url,
428
- form.getValues(),
429
- ).toString(),
430
- );
431
- }}
432
- variant="ghost"
433
- size="icon-xs"
434
- className={cn(
435
- "hover:opacity-100 transition",
436
- isCopied
437
- ? "text-emerald-600 opacity-100"
438
- : "opacity-50",
439
- )}
440
- >
441
- {isCopied ? (
442
- <CheckIcon className="text-green-500" size={14} />
443
- ) : (
444
- <CopyIcon size={14} />
445
- )}
446
- </Button>
400
+ <div className="col-span-3 p-4 border-b flex gap-2 items-stretch">
401
+ <div className="flex flex-1 items-center w-full border rounded-md relative overflow-hidden">
402
+ <div className="border-r p-2 bg-muted rounded-l-md self-stretch font-semibold font-mono flex items-center">
403
+ {method.toUpperCase()}
404
+ </div>
405
+ <div className="items-center px-2 font-mono text-xs break-all leading-6 relative h-full w-full">
406
+ <div className="h-full py-1.5">
407
+ {serverSelect}
408
+ <UrlPath url={url} />
409
+ <UrlQueryParams />
447
410
  </div>
448
411
  </div>
449
-
450
- <Button
451
- type="submit"
452
- variant={queryMutation.isPending ? "destructive" : "default"}
453
- onClick={(e) => {
454
- if (queryMutation.isPending) {
455
- abortControllerRef.current?.abort(
456
- "Request cancelled by user",
412
+ <div className="px-1">
413
+ <Button
414
+ type="button"
415
+ onClick={() => {
416
+ copyToClipboard(
417
+ createUrl(
418
+ server ?? selectedServer,
419
+ url,
420
+ form.getValues(),
421
+ ).toString(),
457
422
  );
458
- e.preventDefault();
459
- }
460
- }}
461
- className="w-18"
462
- >
463
- {queryMutation.isPending ? "Cancel" : "Send"}
464
- </Button>
423
+ }}
424
+ variant="ghost"
425
+ size="icon-xs"
426
+ className={cn(
427
+ "hover:opacity-100 transition",
428
+ isCopied ? "text-emerald-600 opacity-100" : "opacity-50",
429
+ )}
430
+ >
431
+ {isCopied ? (
432
+ <CheckIcon className="text-green-500" size={14} />
433
+ ) : (
434
+ <CopyIcon size={14} />
435
+ )}
436
+ </Button>
437
+ </div>
465
438
  </div>
439
+
440
+ <Button
441
+ type="submit"
442
+ variant={queryMutation.isPending ? "destructive" : "default"}
443
+ onClick={(e) => {
444
+ if (queryMutation.isPending) {
445
+ abortControllerRef.current?.abort(
446
+ "Request cancelled by user",
447
+ );
448
+ e.preventDefault();
449
+ }
450
+ }}
451
+ className="w-18"
452
+ >
453
+ {queryMutation.isPending ? "Cancel" : "Send"}
454
+ </Button>
466
455
  </div>
467
456
  <div className="relative overflow-y-auto h-[80vh]">
468
457
  {identities.data?.length !== 0 && (
469
- <div className="flex flex-col gap-2">
470
- <div className="flex flex-col gap-2">
471
- <Collapsible defaultOpen>
472
- <CollapsibleHeaderTrigger>
473
- <IdCardLanyardIcon size={16} />
474
- <CollapsibleHeader className="col-span-2">
475
- Authentication
476
- </CollapsibleHeader>
477
- </CollapsibleHeaderTrigger>
478
- <CollapsibleContent className="CollapsibleContent">
479
- <IdentitySelector
480
- value={identity}
481
- identities={identities.data ?? []}
482
- setValue={(value) => setValue("identity", value)}
483
- />
484
- </CollapsibleContent>
485
- </Collapsible>
486
- </div>
487
- </div>
458
+ <Collapsible defaultOpen>
459
+ <CollapsibleHeaderTrigger>
460
+ <IdCardLanyardIcon size={16} />
461
+ <CollapsibleHeader className="col-span-2">
462
+ Authentication
463
+ </CollapsibleHeader>
464
+ </CollapsibleHeaderTrigger>
465
+ <CollapsibleContent className="CollapsibleContent">
466
+ <IdentitySelector
467
+ value={identity}
468
+ identities={identities.data ?? []}
469
+ setValue={(value) => setValue("identity", value)}
470
+ />
471
+ </CollapsibleContent>
472
+ </Collapsible>
488
473
  )}
489
474
 
490
475
  {pathParams.length > 0 && (
491
476
  <Collapsible defaultOpen>
492
- <CollapsibleHeaderTrigger className="border-t">
477
+ <CollapsibleHeaderTrigger>
493
478
  <ShapesIcon size={16} />
494
- <CollapsibleHeader>Path Parameters</CollapsibleHeader>
479
+ <CollapsibleHeader className="col-span-2">
480
+ Path Parameters
481
+ </CollapsibleHeader>
495
482
  </CollapsibleHeaderTrigger>
496
483
  <CollapsibleContent className="CollapsibleContent">
497
484
  <PathParams url={url} control={control} />
@@ -506,12 +493,14 @@ export const Playground = ({
506
493
  schemaHeaders={headers}
507
494
  lockedHeaders={authorizationFields?.headers}
508
495
  />
509
- {isBodySupported && <BodyPanel examples={examples} />}
496
+ {isBodySupported && <BodyPanel content={examples} />}
510
497
  </div>
511
498
  <div className="w-full bg-muted-foreground/20" />
512
499
  <ResultPanel
513
500
  queryMutation={queryMutation}
514
501
  showLongRunningWarning={showLongRunningWarning}
502
+ isFinished={isFinished}
503
+ progress={progress}
515
504
  tip={
516
505
  <div className="text-xs w-full">
517
506
  <span className="text-muted-foreground">
@@ -90,6 +90,7 @@ export const QueryParams = ({
90
90
  render={({ field }) =>
91
91
  !requiredFields[i] ? (
92
92
  <Autocomplete
93
+ placeholder="Name"
93
94
  value={field.value}
94
95
  options={schemaQueryParams.map((param) => param.name)}
95
96
  onChange={(e) => {
@@ -131,7 +132,8 @@ export const QueryParams = ({
131
132
  setValue(`queryParams.${i}.active`, true);
132
133
  }
133
134
  }}
134
- placeholder="Enter value"
135
+ placeholder="Value"
136
+ aria-label="Query parameter value"
135
137
  className="w-full border-0 p-0 m-0 shadow-none focus-visible:ring-0 text-xs font-mono"
136
138
  />
137
139
  );
@@ -59,10 +59,14 @@ export const ResponseStatusBar = ({
59
59
  status,
60
60
  time,
61
61
  size,
62
+ isFinished,
63
+ progress,
62
64
  }: {
63
65
  status?: number;
64
66
  time?: number;
65
67
  size?: number;
68
+ isFinished: boolean;
69
+ progress: number;
66
70
  }) => {
67
71
  const statusCodeMap: Record<number, string> = {
68
72
  200: "OK",
@@ -78,7 +82,7 @@ export const ResponseStatusBar = ({
78
82
  };
79
83
 
80
84
  return (
81
- <div className="flex h-10 text-xs gap-4 px-4 items-center justify-between font-mono border-b">
85
+ <div className="relative flex h-10 text-xs gap-4 px-4 items-center justify-between font-mono border-b">
82
86
  <div className="flex items-center gap-2">
83
87
  <ResponseCodeCircle status={status} /> {status ?? "Sending Request..."}
84
88
  {status ? ` ${statusCodeMap[status]}` : ""}
@@ -86,7 +90,7 @@ export const ResponseStatusBar = ({
86
90
  <div className="flex gap-2">
87
91
  <div>
88
92
  <span className="text-muted-foreground">Size</span>{" "}
89
- <span className="inline-block text-end w-[5ch]">
93
+ <span className="inline-block text-end min-w-[5ch]">
90
94
  {size ? humanFileSize(size) : "- B"}
91
95
  </span>
92
96
  </div>
@@ -97,6 +101,13 @@ export const ResponseStatusBar = ({
97
101
  ms
98
102
  </div>
99
103
  </div>
104
+ <div
105
+ className="h-full bg-neutral-500/10 absolute left-0 -bottom-0 z-10 transition-all duration-200 ease-in-out"
106
+ style={{
107
+ opacity: isFinished ? 0 : 1,
108
+ width: isFinished ? 0 : `${progress * 100}%`,
109
+ }}
110
+ />
100
111
  </div>
101
112
  );
102
113
  };
@@ -19,6 +19,7 @@ import {
19
19
  SelectTrigger,
20
20
  SelectValue,
21
21
  } from "zudoku/ui/Select.js";
22
+ import createVariantComponent from "../../../../util/createVariantComponent.js";
22
23
  import { humanFileSize } from "../../../../util/humanFileSize.js";
23
24
  import {
24
25
  CollapsibleHeader,
@@ -82,6 +83,13 @@ const sortHeadersByRelevance = (
82
83
 
83
84
  const MAX_HEADERS_TO_SHOW = 3;
84
85
 
86
+ const Row = createVariantComponent(
87
+ "div",
88
+ "grid-cols-subgrid grid border-b col-span-full px-4 py-1.5 font-mono text-xs",
89
+ );
90
+
91
+ const RowContent = createVariantComponent("div", "py-1 break-all");
92
+
85
93
  export const ResponseTab = ({
86
94
  body = "",
87
95
  headers,
@@ -134,14 +142,11 @@ export const ResponseTab = ({
134
142
 
135
143
  const sortedHeaders = sortHeadersByRelevance([...headers]);
136
144
 
137
- const headerStyle =
138
- "grid-cols-subgrid grid border-b col-span-full px-4 py-1.5 font-mono text-xs";
139
-
140
145
  return (
141
146
  <>
142
147
  <Collapsible defaultOpen>
143
148
  <CollapsibleHeaderTrigger>
144
- <CornerDownLeftIcon size={16} />
149
+ <CornerDownRightIcon size={16} />
145
150
  <CollapsibleHeader className="col-span-2">
146
151
  Header Request
147
152
  </CollapsibleHeader>
@@ -151,10 +156,10 @@ export const ResponseTab = ({
151
156
  {request.headers
152
157
  .slice(0, MAX_HEADERS_TO_SHOW)
153
158
  .map(([key, value]) => (
154
- <div key={key} className={headerStyle}>
155
- <div className="">{key}</div>
156
- <div className="break-all">{value}</div>
157
- </div>
159
+ <Row key={key}>
160
+ <RowContent>{key}</RowContent>
161
+ <RowContent>{value}</RowContent>
162
+ </Row>
158
163
  ))}
159
164
  </div>
160
165
  </CollapsibleContent>
@@ -162,7 +167,7 @@ export const ResponseTab = ({
162
167
 
163
168
  <Collapsible defaultOpen>
164
169
  <CollapsibleHeaderTrigger>
165
- <CornerDownRightIcon size={16} />
170
+ <CornerDownLeftIcon size={16} />
166
171
  <CollapsibleHeader className="col-span-2">
167
172
  Header Response
168
173
  </CollapsibleHeader>
@@ -170,10 +175,10 @@ export const ResponseTab = ({
170
175
  <CollapsibleContent>
171
176
  <div className="grid grid-cols-2 gap-x-6 text-sm">
172
177
  {sortedHeaders.slice(0, MAX_HEADERS_TO_SHOW).map(([key, value]) => (
173
- <div key={key} className={headerStyle}>
174
- <div className="">{key}</div>
175
- <div className="break-all line-clamp-1">{value}</div>
176
- </div>
178
+ <Row key={key}>
179
+ <RowContent>{key}</RowContent>
180
+ <RowContent>{value}</RowContent>
181
+ </Row>
177
182
  ))}
178
183
  {sortedHeaders.length > MAX_HEADERS_TO_SHOW && (
179
184
  <Collapsible className="col-span-full grid-cols-subgrid grid group">
@@ -188,10 +193,10 @@ export const ResponseTab = ({
188
193
  {sortedHeaders
189
194
  .slice(MAX_HEADERS_TO_SHOW)
190
195
  .map(([key, value]) => (
191
- <div key={key} className={headerStyle}>
192
- <div className="">{key}</div>
193
- <div className="break-all ">{value}</div>
194
- </div>
196
+ <Row key={key}>
197
+ <RowContent>{key}</RowContent>
198
+ <RowContent>{value}</RowContent>
199
+ </Row>
195
200
  ))}
196
201
  </CollapsibleContent>
197
202
  </Collapsible>
@@ -13,11 +13,15 @@ export const ResultPanel = ({
13
13
  showLongRunningWarning,
14
14
  onCancel,
15
15
  tip,
16
+ isFinished,
17
+ progress,
16
18
  }: {
17
19
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
20
  queryMutation: UseMutationResult<PlaygroundResult, Error, any>;
19
21
  showLongRunningWarning?: boolean;
20
22
  onCancel?: () => void;
23
+ isFinished: boolean;
24
+ progress: number;
21
25
  tip?: React.ReactNode;
22
26
  }) => {
23
27
  return (
@@ -27,6 +31,8 @@ export const ResultPanel = ({
27
31
  status={queryMutation.data?.status}
28
32
  time={queryMutation.data?.time}
29
33
  size={queryMutation.data?.size}
34
+ isFinished={isFinished}
35
+ progress={progress}
30
36
  />
31
37
  )}
32
38
  {queryMutation.error ? (
@@ -45,8 +45,8 @@ const DialogContent = React.forwardRef<
45
45
  >
46
46
  {children}
47
47
  {showCloseButton && (
48
- <DialogPrimitive.Close className="absolute -right-2 -top-2 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
49
- <XIcon className="h-4 w-4" />
48
+ <DialogPrimitive.Close className="absolute left-1 top-1 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
49
+ <XIcon className="h-3 w-3" strokeWidth={2} />
50
50
  <span className="sr-only">Close</span>
51
51
  </DialogPrimitive.Close>
52
52
  )}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Dialog-DGlrUTCS.js","sources":["../src/lib/ui/Dialog.tsx"],"sourcesContent":["import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport * as React from \"react\";\n\nimport { XIcon } from \"lucide-react\";\nimport { cn } from \"../util/cn.js\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n }\n>(({ className, children, showCloseButton = true, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close className=\"absolute -right-2 -top-2 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <XIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n"],"names":["Dialog","DialogPrimitive","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","React","className","props","ref","jsx","cn","DialogContent","children","showCloseButton","jsxs","XIcon","DialogHeader","DialogFooter","DialogTitle","DialogDescription"],"mappings":";;;;;AAMA,MAAMA,IAASC,EAAgB,MAEzBC,IAAgBD,EAAgB,SAEhCE,IAAeF,EAAgB,QAE/BG,IAAcH,EAAgB,OAE9BI,IAAgBC,EAAM,WAG1B,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAM,GAAGC,MAC1BC,gBAAAA,EAAA;AAAA,EAACT,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAQ;AAAA,IACA,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IACF;AAAA,IACC,GAAGC;AAAA,EAAA;AACN,CACD;AACDH,EAAc,cAAcJ,EAAgB,QAAQ;AAEpD,MAAMW,IAAgBN,EAAM,WAK1B,CAAC,EAAE,WAAAC,GAAW,UAAAM,GAAU,iBAAAC,IAAkB,IAAM,GAAGN,EAAS,GAAAC,6BAC3DN,GACC,EAAA,UAAA;AAAA,EAAAO,gBAAAA,EAAA,IAACL,GAAc,EAAA;AAAA,EACfU,gBAAAA,EAAA;AAAA,IAACd,EAAgB;AAAA,IAAhB;AAAA,MACC,KAAAQ;AAAA,MACA,WAAWE;AAAA,QACT;AAAA,QACAJ;AAAA,MACF;AAAA,MACC,GAAGC;AAAA,MAEH,UAAA;AAAA,QAAAK;AAAA,QACAC,KACEC,gBAAAA,EAAA,KAAAd,EAAgB,OAAhB,EAAsB,WAAU,qRAC/B,UAAA;AAAA,UAACS,gBAAAA,EAAAA,IAAAM,GAAA,EAAM,WAAU,UAAU,CAAA;AAAA,UAC1BN,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,WAAU,UAAK,QAAA,CAAA;AAAA,QAAA,EACjC,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAEJ,GACF,CACD;AACDE,EAAc,cAAcX,EAAgB,QAAQ;AAEpD,MAAMgB,IAAe,CAAC;AAAA,EACpB,WAAAV;AAAA,EACA,GAAGC;AACL,MACEE,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAJ;AAAA,IACF;AAAA,IACC,GAAGC;AAAA,EAAA;AACN;AAEFS,EAAa,cAAc;AAE3B,MAAMC,IAAe,CAAC;AAAA,EACpB,WAAAX;AAAA,EACA,GAAGC;AACL,MACEE,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAJ;AAAA,IACF;AAAA,IACC,GAAGC;AAAA,EAAA;AACN;AAEFU,EAAa,cAAc;AAErB,MAAAC,IAAcb,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAM,GAAGC,MAC1BC,gBAAAA,EAAA;AAAA,EAACT,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAQ;AAAA,IACA,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IACF;AAAA,IACC,GAAGC;AAAA,EAAA;AACN,CACD;AACDW,EAAY,cAAclB,EAAgB,MAAM;AAE1C,MAAAmB,IAAoBd,EAAM,WAG9B,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAM,GAAGC,MAC1BC,gBAAAA,EAAA;AAAA,EAACT,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAQ;AAAA,IACA,WAAWE,EAAG,iCAAiCJ,CAAS;AAAA,IACvD,GAAGC;AAAA,EAAA;AACN,CACD;AACDY,EAAkB,cAAcnB,EAAgB,YAAY;"}