@dev-dga/react 0.10.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/{chunk-YJQZQS7P.js → chunk-GNL72FRN.js} +2 -2
- package/dist/{chunk-W6B7GJLN.cjs → chunk-NU3WUSG7.cjs} +2 -2
- package/dist/chunk-NU3WUSG7.cjs.map +1 -0
- package/dist/{chunk-FWGFOC2T.js → chunk-RSXDPFXK.js} +2 -2
- package/dist/chunk-RSXDPFXK.js.map +1 -0
- package/dist/{chunk-2HZGIP5V.cjs → chunk-VMAJ34DC.cjs} +3 -3
- package/dist/{chunk-2HZGIP5V.cjs.map → chunk-VMAJ34DC.cjs.map} +1 -1
- package/dist/components/FileUpload/FileUpload.cjs +3 -3
- package/dist/components/FileUpload/FileUpload.js +2 -2
- package/dist/components/FileUpload/index.cjs +3 -3
- package/dist/components/FileUpload/index.js +2 -2
- package/dist/components/Progress/Progress.cjs +2 -2
- package/dist/components/Progress/Progress.js +1 -1
- package/dist/components/Progress/index.cjs +2 -2
- package/dist/components/Progress/index.js +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.js +2 -2
- package/package.json +3 -3
- package/dist/chunk-FWGFOC2T.js.map +0 -1
- package/dist/chunk-W6B7GJLN.cjs.map +0 -1
- /package/dist/{chunk-YJQZQS7P.js.map → chunk-GNL72FRN.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @dev-dga/react
|
|
2
2
|
|
|
3
|
+
## 0.10.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- **Progress — the determinate bar fills the correct direction in RTL.** The fill used a physical `translateX(${pct - 100}%)`, which always slides left — so under `dir="rtl"` the bar mirrored as an LTR fill. It now sizes the indicator via the logical `inline-size` (anchored to the track's inline-start), so it fills from the right in RTL automatically, with no JS direction read. No API change — bars simply mirror correctly. Also adds a repo gate (a test that flags new physical-direction CSS / inline `translateX` in source). Rides the `@dev-dga/css` change in lockstep.
|
|
8
|
+
|
|
3
9
|
## 0.10.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Progress
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RSXDPFXK.js";
|
|
4
4
|
import {
|
|
5
5
|
Button
|
|
6
6
|
} from "./chunk-4RU33BRQ.js";
|
|
@@ -221,4 +221,4 @@ function FileUpload({
|
|
|
221
221
|
export {
|
|
222
222
|
FileUpload
|
|
223
223
|
};
|
|
224
|
-
//# sourceMappingURL=chunk-
|
|
224
|
+
//# sourceMappingURL=chunk-GNL72FRN.js.map
|
|
@@ -60,7 +60,7 @@ function Progress({ value = null, max = 100, size, color, className, ...props })
|
|
|
60
60
|
{
|
|
61
61
|
"data-slot": "progress-indicator",
|
|
62
62
|
className: "ddga-progress__indicator",
|
|
63
|
-
style: isIndeterminate ? void 0 : {
|
|
63
|
+
style: isIndeterminate ? void 0 : { inlineSize: `${pct}%` }
|
|
64
64
|
}
|
|
65
65
|
)
|
|
66
66
|
}
|
|
@@ -186,4 +186,4 @@ function CircularProgress({
|
|
|
186
186
|
|
|
187
187
|
|
|
188
188
|
exports.progressVariants = progressVariants; exports.circularProgressVariants = circularProgressVariants; exports.Progress = Progress; exports.CircularProgress = CircularProgress;
|
|
189
|
-
//# sourceMappingURL=chunk-
|
|
189
|
+
//# sourceMappingURL=chunk-NU3WUSG7.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-NU3WUSG7.cjs","../src/components/Progress/Progress.tsx"],"names":[],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-NU3WUSG7.cjs","sourcesContent":[null,"'use client';\n\nimport { Progress as ProgressPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ─── 1. Variants ─── //\n\nconst progressVariants = cva('ddga-progress', {\n variants: {\n size: {\n sm: 'ddga-progress--sm',\n md: 'ddga-progress--md',\n lg: 'ddga-progress--lg',\n },\n color: {\n primary: 'ddga-progress--primary',\n success: 'ddga-progress--success',\n warning: 'ddga-progress--warning',\n destructive: 'ddga-progress--destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'primary',\n },\n});\n\nconst circularProgressVariants = cva('ddga-circular-progress', {\n variants: {\n size: {\n sm: 'ddga-circular-progress--sm',\n md: 'ddga-circular-progress--md',\n lg: 'ddga-circular-progress--lg',\n },\n color: {\n primary: 'ddga-circular-progress--primary',\n success: 'ddga-circular-progress--success',\n warning: 'ddga-circular-progress--warning',\n destructive: 'ddga-circular-progress--destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'primary',\n },\n});\n\n// ─── 2. Linear Progress (Radix) ─── //\n\ntype ProgressOwnProps = VariantProps<typeof progressVariants> & {\n /**\n * Current progress. `null` (or omitted) renders the indeterminate animation.\n * Otherwise clamp yourself to `[0, max]` — Radix Progress assumes the value\n * is in range.\n */\n value?: number | null;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /**\n * Accessible label for the progressbar. Required for assistive tech —\n * Radix logs a warning if neither `aria-label` nor `aria-labelledby` is set.\n */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n};\n\ntype ProgressProps = ProgressOwnProps &\n Omit<React.ComponentProps<typeof ProgressPrimitive.Root>, keyof ProgressOwnProps>;\n\nfunction Progress({ value = null, max = 100, size, color, className, ...props }: ProgressProps) {\n const isIndeterminate = value === null;\n const pct = isIndeterminate ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n value={value}\n max={max}\n className={cn(progressVariants({ size, color }), className)}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"ddga-progress__indicator\"\n // Fill via logical `inline-size`, not a physical `translateX`: the\n // indicator is anchored to the track's inline-start, so it fills from\n // the left in LTR and the right in RTL automatically — no direction\n // read in JS. (A `translateX(-N%)` always slid left, mirroring wrong.)\n style={isIndeterminate ? undefined : { inlineSize: `${pct}%` }}\n />\n </ProgressPrimitive.Root>\n );\n}\n\n// ─── 3. Circular Progress (custom SVG) ─── //\n\ntype CircularProgressOwnProps = VariantProps<typeof circularProgressVariants> & {\n value?: number | null;\n max?: number;\n /** Stroke width in px. Defaults to 4 (sm) / 5 (md) / 6 (lg). */\n thickness?: number;\n /**\n * Render the ring as `segments` discrete arcs (a radial stepper) instead of a\n * continuous arc. Pass an integer `>= 2`; values below that fall back to the\n * continuous ring. The number of filled segments is `round(pct × segments)`,\n * so `value={3} max={5} segments={5}` fills 3. Segmented mode is determinate —\n * a `null` value renders 0 filled (no spinner).\n */\n segments?: number;\n /** Render the label inside the ring (`%`, or `filled/segments` when segmented). */\n showLabel?: boolean;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n};\n\ntype CircularProgressProps = CircularProgressOwnProps &\n Omit<React.ComponentProps<'div'>, keyof CircularProgressOwnProps>;\n\nconst CIRCULAR_SIZES = { sm: 32, md: 48, lg: 72 } as const;\nconst CIRCULAR_DEFAULT_THICKNESS = { sm: 4, md: 5, lg: 6 } as const;\n// Fraction of each segment's angular slot left as the gap between segments.\nconst SEGMENT_GAP_FRACTION = 0.16;\n\nfunction CircularProgress({\n value = null,\n max = 100,\n size,\n color,\n thickness,\n segments,\n showLabel = false,\n className,\n ...props\n}: CircularProgressProps) {\n if (process.env.NODE_ENV === 'development' && !props['aria-label'] && !props['aria-labelledby']) {\n // Linear Progress inherits Radix's no-label warning; CircularProgress is a\n // hand-built `role=\"progressbar\"`, so it needs its own. The ring `showLabel`\n // is aria-hidden decoration, not an accessible name.\n console.warn(\n '[dga/Progress] <CircularProgress> has no accessible name. Pass `aria-label` or ' +\n '`aria-labelledby` so screen-reader users know what the progress represents.',\n );\n }\n\n const isIndeterminate = value === null;\n const isSegmented = typeof segments === 'number' && segments >= 2;\n const sizeKey = size ?? 'md';\n const diameter = CIRCULAR_SIZES[sizeKey];\n const strokeWidth = thickness ?? CIRCULAR_DEFAULT_THICKNESS[sizeKey];\n const radius = (diameter - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const center = diameter / 2;\n\n const pct = isIndeterminate ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n const dashOffset = isIndeterminate ? circumference * 0.75 : circumference * (1 - pct / 100);\n\n // Mirror Radix Progress's data-state vocabulary so CSS can use a single\n // selector across linear + circular.\n const state = isIndeterminate ? 'indeterminate' : value >= max ? 'complete' : 'loading';\n\n // Segmented (radial-stepper) geometry: split the ring into `segments` arcs\n // with gaps. Each segment is a single dash of `segLen`, rotated into its slot;\n // the gap is centered so segments stay evenly spaced. Determinate-only.\n const segmentEls =\n isSegmented && segments\n ? (() => {\n const filled = isIndeterminate ? 0 : Math.round((pct / 100) * segments);\n const segAngle = 360 / segments;\n const gapAngle = segAngle * SEGMENT_GAP_FRACTION;\n const segLen = circumference * ((1 - SEGMENT_GAP_FRACTION) / segments);\n return Array.from({ length: segments }, (_, i) => (\n <circle\n key={i}\n className={cn(\n 'ddga-circular-progress__segment',\n i < filled && 'ddga-circular-progress__segment--filled',\n )}\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n // Butt caps, not round: round caps extend strokeWidth/2 past each\n // arc end and would swallow the gap (overlapping at small sizes).\n strokeLinecap=\"butt\"\n strokeDasharray={`${segLen} ${circumference}`}\n transform={`rotate(${-90 + i * segAngle + gapAngle / 2} ${center} ${center})`}\n />\n ));\n })()\n : null;\n\n const labelText = isSegmented\n ? `${segments ? Math.round((pct / 100) * segments) : 0}/${segments}`\n : `${Math.round(pct)}%`;\n\n return (\n <div\n data-slot=\"circular-progress\"\n data-state={state}\n data-segmented={isSegmented ? '' : undefined}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={isIndeterminate ? undefined : value}\n className={cn(circularProgressVariants({ size, color }), className)}\n style={{ inlineSize: diameter, blockSize: diameter }}\n {...props}\n >\n <svg\n className=\"ddga-circular-progress__svg\"\n viewBox={`0 0 ${diameter} ${diameter}`}\n width={diameter}\n height={diameter}\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {isSegmented ? (\n segmentEls\n ) : (\n <>\n <circle\n className=\"ddga-circular-progress__track\"\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n />\n <circle\n className=\"ddga-circular-progress__indicator\"\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n transform={`rotate(-90 ${center} ${center})`}\n />\n </>\n )}\n </svg>\n {showLabel && !isIndeterminate ? (\n <span className=\"ddga-circular-progress__label\" aria-hidden=\"true\">\n {labelText}\n </span>\n ) : null}\n </div>\n );\n}\n\n// ─── 4. Exports ─── //\n\nexport { Progress, CircularProgress, progressVariants, circularProgressVariants };\nexport type { ProgressProps, CircularProgressProps };\n"]}
|
|
@@ -60,7 +60,7 @@ function Progress({ value = null, max = 100, size, color, className, ...props })
|
|
|
60
60
|
{
|
|
61
61
|
"data-slot": "progress-indicator",
|
|
62
62
|
className: "ddga-progress__indicator",
|
|
63
|
-
style: isIndeterminate ? void 0 : {
|
|
63
|
+
style: isIndeterminate ? void 0 : { inlineSize: `${pct}%` }
|
|
64
64
|
}
|
|
65
65
|
)
|
|
66
66
|
}
|
|
@@ -186,4 +186,4 @@ export {
|
|
|
186
186
|
Progress,
|
|
187
187
|
CircularProgress
|
|
188
188
|
};
|
|
189
|
-
//# sourceMappingURL=chunk-
|
|
189
|
+
//# sourceMappingURL=chunk-RSXDPFXK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Progress/Progress.tsx"],"sourcesContent":["'use client';\n\nimport { Progress as ProgressPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ─── 1. Variants ─── //\n\nconst progressVariants = cva('ddga-progress', {\n variants: {\n size: {\n sm: 'ddga-progress--sm',\n md: 'ddga-progress--md',\n lg: 'ddga-progress--lg',\n },\n color: {\n primary: 'ddga-progress--primary',\n success: 'ddga-progress--success',\n warning: 'ddga-progress--warning',\n destructive: 'ddga-progress--destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'primary',\n },\n});\n\nconst circularProgressVariants = cva('ddga-circular-progress', {\n variants: {\n size: {\n sm: 'ddga-circular-progress--sm',\n md: 'ddga-circular-progress--md',\n lg: 'ddga-circular-progress--lg',\n },\n color: {\n primary: 'ddga-circular-progress--primary',\n success: 'ddga-circular-progress--success',\n warning: 'ddga-circular-progress--warning',\n destructive: 'ddga-circular-progress--destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'primary',\n },\n});\n\n// ─── 2. Linear Progress (Radix) ─── //\n\ntype ProgressOwnProps = VariantProps<typeof progressVariants> & {\n /**\n * Current progress. `null` (or omitted) renders the indeterminate animation.\n * Otherwise clamp yourself to `[0, max]` — Radix Progress assumes the value\n * is in range.\n */\n value?: number | null;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /**\n * Accessible label for the progressbar. Required for assistive tech —\n * Radix logs a warning if neither `aria-label` nor `aria-labelledby` is set.\n */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n};\n\ntype ProgressProps = ProgressOwnProps &\n Omit<React.ComponentProps<typeof ProgressPrimitive.Root>, keyof ProgressOwnProps>;\n\nfunction Progress({ value = null, max = 100, size, color, className, ...props }: ProgressProps) {\n const isIndeterminate = value === null;\n const pct = isIndeterminate ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n value={value}\n max={max}\n className={cn(progressVariants({ size, color }), className)}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"ddga-progress__indicator\"\n // Fill via logical `inline-size`, not a physical `translateX`: the\n // indicator is anchored to the track's inline-start, so it fills from\n // the left in LTR and the right in RTL automatically — no direction\n // read in JS. (A `translateX(-N%)` always slid left, mirroring wrong.)\n style={isIndeterminate ? undefined : { inlineSize: `${pct}%` }}\n />\n </ProgressPrimitive.Root>\n );\n}\n\n// ─── 3. Circular Progress (custom SVG) ─── //\n\ntype CircularProgressOwnProps = VariantProps<typeof circularProgressVariants> & {\n value?: number | null;\n max?: number;\n /** Stroke width in px. Defaults to 4 (sm) / 5 (md) / 6 (lg). */\n thickness?: number;\n /**\n * Render the ring as `segments` discrete arcs (a radial stepper) instead of a\n * continuous arc. Pass an integer `>= 2`; values below that fall back to the\n * continuous ring. The number of filled segments is `round(pct × segments)`,\n * so `value={3} max={5} segments={5}` fills 3. Segmented mode is determinate —\n * a `null` value renders 0 filled (no spinner).\n */\n segments?: number;\n /** Render the label inside the ring (`%`, or `filled/segments` when segmented). */\n showLabel?: boolean;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n};\n\ntype CircularProgressProps = CircularProgressOwnProps &\n Omit<React.ComponentProps<'div'>, keyof CircularProgressOwnProps>;\n\nconst CIRCULAR_SIZES = { sm: 32, md: 48, lg: 72 } as const;\nconst CIRCULAR_DEFAULT_THICKNESS = { sm: 4, md: 5, lg: 6 } as const;\n// Fraction of each segment's angular slot left as the gap between segments.\nconst SEGMENT_GAP_FRACTION = 0.16;\n\nfunction CircularProgress({\n value = null,\n max = 100,\n size,\n color,\n thickness,\n segments,\n showLabel = false,\n className,\n ...props\n}: CircularProgressProps) {\n if (process.env.NODE_ENV === 'development' && !props['aria-label'] && !props['aria-labelledby']) {\n // Linear Progress inherits Radix's no-label warning; CircularProgress is a\n // hand-built `role=\"progressbar\"`, so it needs its own. The ring `showLabel`\n // is aria-hidden decoration, not an accessible name.\n console.warn(\n '[dga/Progress] <CircularProgress> has no accessible name. Pass `aria-label` or ' +\n '`aria-labelledby` so screen-reader users know what the progress represents.',\n );\n }\n\n const isIndeterminate = value === null;\n const isSegmented = typeof segments === 'number' && segments >= 2;\n const sizeKey = size ?? 'md';\n const diameter = CIRCULAR_SIZES[sizeKey];\n const strokeWidth = thickness ?? CIRCULAR_DEFAULT_THICKNESS[sizeKey];\n const radius = (diameter - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const center = diameter / 2;\n\n const pct = isIndeterminate ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n const dashOffset = isIndeterminate ? circumference * 0.75 : circumference * (1 - pct / 100);\n\n // Mirror Radix Progress's data-state vocabulary so CSS can use a single\n // selector across linear + circular.\n const state = isIndeterminate ? 'indeterminate' : value >= max ? 'complete' : 'loading';\n\n // Segmented (radial-stepper) geometry: split the ring into `segments` arcs\n // with gaps. Each segment is a single dash of `segLen`, rotated into its slot;\n // the gap is centered so segments stay evenly spaced. Determinate-only.\n const segmentEls =\n isSegmented && segments\n ? (() => {\n const filled = isIndeterminate ? 0 : Math.round((pct / 100) * segments);\n const segAngle = 360 / segments;\n const gapAngle = segAngle * SEGMENT_GAP_FRACTION;\n const segLen = circumference * ((1 - SEGMENT_GAP_FRACTION) / segments);\n return Array.from({ length: segments }, (_, i) => (\n <circle\n key={i}\n className={cn(\n 'ddga-circular-progress__segment',\n i < filled && 'ddga-circular-progress__segment--filled',\n )}\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n // Butt caps, not round: round caps extend strokeWidth/2 past each\n // arc end and would swallow the gap (overlapping at small sizes).\n strokeLinecap=\"butt\"\n strokeDasharray={`${segLen} ${circumference}`}\n transform={`rotate(${-90 + i * segAngle + gapAngle / 2} ${center} ${center})`}\n />\n ));\n })()\n : null;\n\n const labelText = isSegmented\n ? `${segments ? Math.round((pct / 100) * segments) : 0}/${segments}`\n : `${Math.round(pct)}%`;\n\n return (\n <div\n data-slot=\"circular-progress\"\n data-state={state}\n data-segmented={isSegmented ? '' : undefined}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={isIndeterminate ? undefined : value}\n className={cn(circularProgressVariants({ size, color }), className)}\n style={{ inlineSize: diameter, blockSize: diameter }}\n {...props}\n >\n <svg\n className=\"ddga-circular-progress__svg\"\n viewBox={`0 0 ${diameter} ${diameter}`}\n width={diameter}\n height={diameter}\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {isSegmented ? (\n segmentEls\n ) : (\n <>\n <circle\n className=\"ddga-circular-progress__track\"\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n />\n <circle\n className=\"ddga-circular-progress__indicator\"\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n transform={`rotate(-90 ${center} ${center})`}\n />\n </>\n )}\n </svg>\n {showLabel && !isIndeterminate ? (\n <span className=\"ddga-circular-progress__label\" aria-hidden=\"true\">\n {labelText}\n </span>\n ) : null}\n </div>\n );\n}\n\n// ─── 4. Exports ─── //\n\nexport { Progress, CircularProgress, progressVariants, circularProgressVariants };\nexport type { ProgressProps, CircularProgressProps };\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkNU3WUSG7cjs = require('./chunk-NU3WUSG7.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
var _chunkUK2SFZIQcjs = require('./chunk-UK2SFZIQ.cjs');
|
|
@@ -188,7 +188,7 @@ function FileUpload({
|
|
|
188
188
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "ddga-file-upload__item-meta", children: formatBytes(item.file.size) })
|
|
189
189
|
] }),
|
|
190
190
|
status === "uploading" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
191
|
-
|
|
191
|
+
_chunkNU3WUSG7cjs.Progress,
|
|
192
192
|
{
|
|
193
193
|
size: "sm",
|
|
194
194
|
value: _nullishCoalesce(item.progress, () => ( 0)),
|
|
@@ -221,4 +221,4 @@ function FileUpload({
|
|
|
221
221
|
|
|
222
222
|
|
|
223
223
|
exports.FileUpload = FileUpload;
|
|
224
|
-
//# sourceMappingURL=chunk-
|
|
224
|
+
//# sourceMappingURL=chunk-VMAJ34DC.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-2HZGIP5V.cjs","../src/components/FileUpload/FileUpload.tsx"],"names":[],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-2HZGIP5V.cjs","sourcesContent":[null,"'use client';\n\nimport { useRef, useState, type ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\nimport { useFieldA11y, FieldMessage } from '../../field';\nimport { Button } from '../Button';\nimport { Progress } from '../Progress';\nimport { Upload, Check, AlertCircle, Close } from '../../internal/icons';\n\n// ─── 1. Types ─── //\n\ntype FileStatus = 'pending' | 'uploading' | 'success' | 'error';\n\n/** Reason codes attached to a rejected file. */\ntype RejectionCode = 'file-too-large' | 'file-invalid-type' | 'too-many-files';\n\n/**\n * A controlled file entry. The consumer owns this array and is responsible for\n * performing the actual upload, updating `status`/`progress`, and assigning a\n * stable `id` (used as the React key and the `onRemove` target).\n */\ninterface UploadFile {\n /** Stable, consumer-assigned id. Used as the React key and remove target. */\n id: string;\n /** The native File. */\n file: File;\n /** Defaults to `'pending'`. Drives the per-row affordance. */\n status?: FileStatus;\n /** 0–100. Rendered as a {@link Progress} bar while `status === 'uploading'`. */\n progress?: number;\n /** Shown inline (red) while `status === 'error'`. */\n error?: string;\n}\n\ninterface FileRejection {\n file: File;\n errors: RejectionCode[];\n}\n\ninterface FileUploadProps {\n /** Controlled list of files to render. The consumer is the source of truth. */\n files: UploadFile[];\n /** Called with the files that passed validation. The consumer wraps each in\n * an {@link UploadFile} (assigning an `id`) and starts the upload. */\n onFilesAdded: (accepted: File[]) => void;\n /** Called with files that failed validation. Never enter `files`. */\n onFilesRejected?: (rejections: FileRejection[]) => void;\n /** Per-row remove handler. Omit to hide the remove button. */\n onRemove?: (id: string) => void;\n\n /** Native `accept` string (e.g. `'image/*,.pdf'`). Also drives validation. */\n accept?: string;\n /** Maximum size per file, in bytes. */\n maxSize?: number;\n /** Maximum total files (existing + incoming). When `multiple` is false this\n * is forced to 1. */\n maxFiles?: number;\n /** Allow selecting/dropping more than one file. Defaults to true. */\n multiple?: boolean;\n /** Disables the drop zone and the picker. */\n disabled?: boolean;\n /** Marks the field required: renders the asterisk and sets the input's\n * `required` attribute. */\n required?: boolean;\n\n /** Visible field label, auto-associated to the input. */\n label?: ReactNode;\n /** Hint shown below the field. Hidden while an error message is showing. */\n helperText?: ReactNode;\n /** Message shown below the field when `error` is true. */\n errorMessage?: ReactNode;\n /** Marks the field invalid: sets `aria-invalid` and error styling. */\n error?: boolean;\n\n /** Drop-zone instructional copy. Defaults to a bilingual-friendly EN string. */\n hint?: ReactNode;\n /** Accessible label for the per-row remove button. Defaults to `'Remove'`. */\n removeLabel?: string;\n\n id?: string;\n className?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n}\n\n// ─── 2. Validation helpers (local — no shared util until a 2nd use case) ─── //\n\nfunction matchesAccept(file: File, accept?: string): boolean {\n if (!accept) return true;\n const tokens = accept\n .split(',')\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean);\n if (tokens.length === 0) return true;\n\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith('.')) return name.endsWith(token);\n if (token.endsWith('/*')) return type.startsWith(token.slice(0, token.indexOf('/') + 1));\n return type === token;\n });\n}\n\ninterface ValidationConfig {\n accept?: string;\n maxSize?: number;\n maxFiles?: number;\n /** Files already in the list — counts against `maxFiles`. */\n currentCount: number;\n}\n\nfunction splitFiles(incoming: File[], config: ValidationConfig) {\n const { accept, maxSize, maxFiles, currentCount } = config;\n const accepted: File[] = [];\n const rejections: FileRejection[] = [];\n\n for (const file of incoming) {\n const errors: RejectionCode[] = [];\n if (!matchesAccept(file, accept)) errors.push('file-invalid-type');\n if (maxSize != null && file.size > maxSize) errors.push('file-too-large');\n\n if (errors.length > 0) {\n rejections.push({ file, errors });\n continue;\n }\n // Count check last, and only for otherwise-valid files: a slot is consumed\n // only by a file that would actually be accepted.\n if (maxFiles != null && currentCount + accepted.length >= maxFiles) {\n rejections.push({ file, errors: ['too-many-files'] });\n continue;\n }\n accepted.push(file);\n }\n\n return { accepted, rejections };\n}\n\nconst UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const;\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const exponent = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), UNITS.length - 1);\n const value = bytes / 1024 ** exponent;\n // Whole numbers for bytes; one decimal for KB+.\n return `${exponent === 0 ? value : value.toFixed(1)} ${UNITS[exponent]}`;\n}\n\n// ─── 3. Component ─── //\n\nfunction FileUpload({\n files,\n onFilesAdded,\n onFilesRejected,\n onRemove,\n accept,\n maxSize,\n maxFiles,\n multiple = true,\n disabled = false,\n required,\n label,\n helperText,\n errorMessage,\n error,\n hint = 'Drag files here, or click to browse',\n removeLabel = 'Remove',\n id: externalId,\n className,\n ...props\n}: FileUploadProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n const { fieldId, errorId, helperId, hasError, hasErrorMessage, hasHelper, controlProps } =\n useFieldA11y({\n name: 'FileUpload',\n id: externalId,\n label,\n error,\n errorMessage,\n helperText,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby'],\n });\n\n // Single-select forces a hard cap of 1, regardless of maxFiles.\n const effectiveMaxFiles = multiple ? maxFiles : 1;\n\n function process(incoming: File[]) {\n if (disabled || incoming.length === 0) return;\n const { accepted, rejections } = splitFiles(incoming, {\n accept,\n maxSize,\n maxFiles: effectiveMaxFiles,\n currentCount: files.length,\n });\n if (accepted.length > 0) onFilesAdded(accepted);\n if (rejections.length > 0) onFilesRejected?.(rejections);\n }\n\n function handleInputChange(event: React.ChangeEvent<HTMLInputElement>) {\n process(Array.from(event.target.files ?? []));\n // Reset so selecting the same file again re-fires `change`.\n event.target.value = '';\n }\n\n function handleDrop(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n setIsDragging(false);\n if (disabled) return;\n process(Array.from(event.dataTransfer.files));\n }\n\n function handleDragOver(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n if (!disabled) setIsDragging(true);\n }\n\n function handleDragLeave(event: React.DragEvent<HTMLDivElement>) {\n // Ignore dragleave events bubbling up from descendants.\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n setIsDragging(false);\n }\n }\n\n return (\n <div data-slot=\"file-upload-field\" className={cn('ddga-field', 'ddga-file-upload', className)}>\n {label && (\n <label htmlFor={fieldId} className=\"ddga-file-upload__label\">\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"ddga-file-upload__required\">\n *\n </span>\n )}\n </label>\n )}\n\n {/* The drop zone is a click target that proxies to the hidden input.\n The input itself stays focusable (keyboard users tab to it and press\n Space/Enter to open the picker); drag-and-drop is a mouse-only\n enhancement layered on top. */}\n <div\n data-slot=\"file-upload-dropzone\"\n className={cn(\n 'ddga-file-upload__dropzone',\n hasError && 'ddga-file-upload__dropzone--error',\n )}\n data-dragging={isDragging || undefined}\n data-disabled={disabled || undefined}\n aria-disabled={disabled || undefined}\n onClick={() => {\n if (!disabled) inputRef.current?.click();\n }}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <Upload className=\"ddga-file-upload__icon\" aria-hidden=\"true\" />\n <span className=\"ddga-file-upload__hint\">{hint}</span>\n <input\n {...controlProps}\n ref={inputRef}\n type=\"file\"\n className=\"ddga-file-upload__input\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n required={required}\n onChange={handleInputChange}\n // The dropzone's onClick calls inputRef.click(); without stopping\n // propagation, that programmatic click bubbles back to the dropzone\n // and re-triggers it — infinite recursion. Native label/keyboard\n // activation of the input is unaffected.\n onClick={(event) => event.stopPropagation()}\n data-slot=\"file-upload-input\"\n />\n </div>\n\n {hasErrorMessage && (\n <FieldMessage id={errorId} variant=\"error\">\n {errorMessage}\n </FieldMessage>\n )}\n {hasHelper && (\n <FieldMessage id={helperId} variant=\"helper\">\n {helperText}\n </FieldMessage>\n )}\n\n {files.length > 0 && (\n <ul data-slot=\"file-upload-list\" className=\"ddga-file-upload__list\">\n {files.map((item) => {\n const status = item.status ?? 'pending';\n return (\n <li\n key={item.id}\n data-slot=\"file-upload-item\"\n data-status={status}\n className=\"ddga-file-upload__item\"\n >\n <span className=\"ddga-file-upload__item-icon\" aria-hidden=\"true\">\n {status === 'success' ? (\n <Check />\n ) : status === 'error' ? (\n <AlertCircle />\n ) : (\n <Upload />\n )}\n </span>\n\n <div className=\"ddga-file-upload__item-main\">\n <div className=\"ddga-file-upload__item-head\">\n <span className=\"ddga-file-upload__item-name\" title={item.file.name}>\n {item.file.name}\n </span>\n <span className=\"ddga-file-upload__item-meta\">\n {formatBytes(item.file.size)}\n </span>\n </div>\n\n {status === 'uploading' && (\n <Progress\n size=\"sm\"\n value={item.progress ?? 0}\n aria-label={`Uploading ${item.file.name}`}\n className=\"ddga-file-upload__item-progress\"\n />\n )}\n\n {status === 'error' && item.error && (\n <span role=\"alert\" className=\"ddga-file-upload__item-error\">\n {item.error}\n </span>\n )}\n </div>\n\n {onRemove && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={`${removeLabel}: ${item.file.name}`}\n onClick={() => onRemove(item.id)}\n className=\"ddga-file-upload__item-remove\"\n >\n <Close aria-hidden=\"true\" />\n </Button>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n}\n\n// ─── 4. Exports ─── //\n\nexport { FileUpload };\nexport type { FileUploadProps, UploadFile, FileRejection, FileStatus, RejectionCode };\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-VMAJ34DC.cjs","../src/components/FileUpload/FileUpload.tsx"],"names":[],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-VMAJ34DC.cjs","sourcesContent":[null,"'use client';\n\nimport { useRef, useState, type ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\nimport { useFieldA11y, FieldMessage } from '../../field';\nimport { Button } from '../Button';\nimport { Progress } from '../Progress';\nimport { Upload, Check, AlertCircle, Close } from '../../internal/icons';\n\n// ─── 1. Types ─── //\n\ntype FileStatus = 'pending' | 'uploading' | 'success' | 'error';\n\n/** Reason codes attached to a rejected file. */\ntype RejectionCode = 'file-too-large' | 'file-invalid-type' | 'too-many-files';\n\n/**\n * A controlled file entry. The consumer owns this array and is responsible for\n * performing the actual upload, updating `status`/`progress`, and assigning a\n * stable `id` (used as the React key and the `onRemove` target).\n */\ninterface UploadFile {\n /** Stable, consumer-assigned id. Used as the React key and remove target. */\n id: string;\n /** The native File. */\n file: File;\n /** Defaults to `'pending'`. Drives the per-row affordance. */\n status?: FileStatus;\n /** 0–100. Rendered as a {@link Progress} bar while `status === 'uploading'`. */\n progress?: number;\n /** Shown inline (red) while `status === 'error'`. */\n error?: string;\n}\n\ninterface FileRejection {\n file: File;\n errors: RejectionCode[];\n}\n\ninterface FileUploadProps {\n /** Controlled list of files to render. The consumer is the source of truth. */\n files: UploadFile[];\n /** Called with the files that passed validation. The consumer wraps each in\n * an {@link UploadFile} (assigning an `id`) and starts the upload. */\n onFilesAdded: (accepted: File[]) => void;\n /** Called with files that failed validation. Never enter `files`. */\n onFilesRejected?: (rejections: FileRejection[]) => void;\n /** Per-row remove handler. Omit to hide the remove button. */\n onRemove?: (id: string) => void;\n\n /** Native `accept` string (e.g. `'image/*,.pdf'`). Also drives validation. */\n accept?: string;\n /** Maximum size per file, in bytes. */\n maxSize?: number;\n /** Maximum total files (existing + incoming). When `multiple` is false this\n * is forced to 1. */\n maxFiles?: number;\n /** Allow selecting/dropping more than one file. Defaults to true. */\n multiple?: boolean;\n /** Disables the drop zone and the picker. */\n disabled?: boolean;\n /** Marks the field required: renders the asterisk and sets the input's\n * `required` attribute. */\n required?: boolean;\n\n /** Visible field label, auto-associated to the input. */\n label?: ReactNode;\n /** Hint shown below the field. Hidden while an error message is showing. */\n helperText?: ReactNode;\n /** Message shown below the field when `error` is true. */\n errorMessage?: ReactNode;\n /** Marks the field invalid: sets `aria-invalid` and error styling. */\n error?: boolean;\n\n /** Drop-zone instructional copy. Defaults to a bilingual-friendly EN string. */\n hint?: ReactNode;\n /** Accessible label for the per-row remove button. Defaults to `'Remove'`. */\n removeLabel?: string;\n\n id?: string;\n className?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n}\n\n// ─── 2. Validation helpers (local — no shared util until a 2nd use case) ─── //\n\nfunction matchesAccept(file: File, accept?: string): boolean {\n if (!accept) return true;\n const tokens = accept\n .split(',')\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean);\n if (tokens.length === 0) return true;\n\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith('.')) return name.endsWith(token);\n if (token.endsWith('/*')) return type.startsWith(token.slice(0, token.indexOf('/') + 1));\n return type === token;\n });\n}\n\ninterface ValidationConfig {\n accept?: string;\n maxSize?: number;\n maxFiles?: number;\n /** Files already in the list — counts against `maxFiles`. */\n currentCount: number;\n}\n\nfunction splitFiles(incoming: File[], config: ValidationConfig) {\n const { accept, maxSize, maxFiles, currentCount } = config;\n const accepted: File[] = [];\n const rejections: FileRejection[] = [];\n\n for (const file of incoming) {\n const errors: RejectionCode[] = [];\n if (!matchesAccept(file, accept)) errors.push('file-invalid-type');\n if (maxSize != null && file.size > maxSize) errors.push('file-too-large');\n\n if (errors.length > 0) {\n rejections.push({ file, errors });\n continue;\n }\n // Count check last, and only for otherwise-valid files: a slot is consumed\n // only by a file that would actually be accepted.\n if (maxFiles != null && currentCount + accepted.length >= maxFiles) {\n rejections.push({ file, errors: ['too-many-files'] });\n continue;\n }\n accepted.push(file);\n }\n\n return { accepted, rejections };\n}\n\nconst UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const;\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const exponent = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), UNITS.length - 1);\n const value = bytes / 1024 ** exponent;\n // Whole numbers for bytes; one decimal for KB+.\n return `${exponent === 0 ? value : value.toFixed(1)} ${UNITS[exponent]}`;\n}\n\n// ─── 3. Component ─── //\n\nfunction FileUpload({\n files,\n onFilesAdded,\n onFilesRejected,\n onRemove,\n accept,\n maxSize,\n maxFiles,\n multiple = true,\n disabled = false,\n required,\n label,\n helperText,\n errorMessage,\n error,\n hint = 'Drag files here, or click to browse',\n removeLabel = 'Remove',\n id: externalId,\n className,\n ...props\n}: FileUploadProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n const { fieldId, errorId, helperId, hasError, hasErrorMessage, hasHelper, controlProps } =\n useFieldA11y({\n name: 'FileUpload',\n id: externalId,\n label,\n error,\n errorMessage,\n helperText,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby'],\n });\n\n // Single-select forces a hard cap of 1, regardless of maxFiles.\n const effectiveMaxFiles = multiple ? maxFiles : 1;\n\n function process(incoming: File[]) {\n if (disabled || incoming.length === 0) return;\n const { accepted, rejections } = splitFiles(incoming, {\n accept,\n maxSize,\n maxFiles: effectiveMaxFiles,\n currentCount: files.length,\n });\n if (accepted.length > 0) onFilesAdded(accepted);\n if (rejections.length > 0) onFilesRejected?.(rejections);\n }\n\n function handleInputChange(event: React.ChangeEvent<HTMLInputElement>) {\n process(Array.from(event.target.files ?? []));\n // Reset so selecting the same file again re-fires `change`.\n event.target.value = '';\n }\n\n function handleDrop(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n setIsDragging(false);\n if (disabled) return;\n process(Array.from(event.dataTransfer.files));\n }\n\n function handleDragOver(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n if (!disabled) setIsDragging(true);\n }\n\n function handleDragLeave(event: React.DragEvent<HTMLDivElement>) {\n // Ignore dragleave events bubbling up from descendants.\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n setIsDragging(false);\n }\n }\n\n return (\n <div data-slot=\"file-upload-field\" className={cn('ddga-field', 'ddga-file-upload', className)}>\n {label && (\n <label htmlFor={fieldId} className=\"ddga-file-upload__label\">\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"ddga-file-upload__required\">\n *\n </span>\n )}\n </label>\n )}\n\n {/* The drop zone is a click target that proxies to the hidden input.\n The input itself stays focusable (keyboard users tab to it and press\n Space/Enter to open the picker); drag-and-drop is a mouse-only\n enhancement layered on top. */}\n <div\n data-slot=\"file-upload-dropzone\"\n className={cn(\n 'ddga-file-upload__dropzone',\n hasError && 'ddga-file-upload__dropzone--error',\n )}\n data-dragging={isDragging || undefined}\n data-disabled={disabled || undefined}\n aria-disabled={disabled || undefined}\n onClick={() => {\n if (!disabled) inputRef.current?.click();\n }}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <Upload className=\"ddga-file-upload__icon\" aria-hidden=\"true\" />\n <span className=\"ddga-file-upload__hint\">{hint}</span>\n <input\n {...controlProps}\n ref={inputRef}\n type=\"file\"\n className=\"ddga-file-upload__input\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n required={required}\n onChange={handleInputChange}\n // The dropzone's onClick calls inputRef.click(); without stopping\n // propagation, that programmatic click bubbles back to the dropzone\n // and re-triggers it — infinite recursion. Native label/keyboard\n // activation of the input is unaffected.\n onClick={(event) => event.stopPropagation()}\n data-slot=\"file-upload-input\"\n />\n </div>\n\n {hasErrorMessage && (\n <FieldMessage id={errorId} variant=\"error\">\n {errorMessage}\n </FieldMessage>\n )}\n {hasHelper && (\n <FieldMessage id={helperId} variant=\"helper\">\n {helperText}\n </FieldMessage>\n )}\n\n {files.length > 0 && (\n <ul data-slot=\"file-upload-list\" className=\"ddga-file-upload__list\">\n {files.map((item) => {\n const status = item.status ?? 'pending';\n return (\n <li\n key={item.id}\n data-slot=\"file-upload-item\"\n data-status={status}\n className=\"ddga-file-upload__item\"\n >\n <span className=\"ddga-file-upload__item-icon\" aria-hidden=\"true\">\n {status === 'success' ? (\n <Check />\n ) : status === 'error' ? (\n <AlertCircle />\n ) : (\n <Upload />\n )}\n </span>\n\n <div className=\"ddga-file-upload__item-main\">\n <div className=\"ddga-file-upload__item-head\">\n <span className=\"ddga-file-upload__item-name\" title={item.file.name}>\n {item.file.name}\n </span>\n <span className=\"ddga-file-upload__item-meta\">\n {formatBytes(item.file.size)}\n </span>\n </div>\n\n {status === 'uploading' && (\n <Progress\n size=\"sm\"\n value={item.progress ?? 0}\n aria-label={`Uploading ${item.file.name}`}\n className=\"ddga-file-upload__item-progress\"\n />\n )}\n\n {status === 'error' && item.error && (\n <span role=\"alert\" className=\"ddga-file-upload__item-error\">\n {item.error}\n </span>\n )}\n </div>\n\n {onRemove && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={`${removeLabel}: ${item.file.name}`}\n onClick={() => onRemove(item.id)}\n className=\"ddga-file-upload__item-remove\"\n >\n <Close aria-hidden=\"true\" />\n </Button>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n}\n\n// ─── 4. Exports ─── //\n\nexport { FileUpload };\nexport type { FileUploadProps, UploadFile, FileRejection, FileStatus, RejectionCode };\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkVMAJ34DCcjs = require('../../chunk-VMAJ34DC.cjs');
|
|
5
5
|
require('../../chunk-ELDHIKFD.cjs');
|
|
6
|
-
require('../../chunk-
|
|
6
|
+
require('../../chunk-NU3WUSG7.cjs');
|
|
7
7
|
require('../../chunk-EACNRR3C.cjs');
|
|
8
8
|
require('../../chunk-UK2SFZIQ.cjs');
|
|
9
9
|
require('../../chunk-3RUIKBH4.cjs');
|
|
@@ -15,5 +15,5 @@ require('../../chunk-NH3KGR65.cjs');
|
|
|
15
15
|
require('../../chunk-V6MXOJQ4.cjs');
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
exports.FileUpload =
|
|
18
|
+
exports.FileUpload = _chunkVMAJ34DCcjs.FileUpload;
|
|
19
19
|
//# sourceMappingURL=FileUpload.cjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
FileUpload
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-GNL72FRN.js";
|
|
5
5
|
import "../../chunk-IW7UX7SA.js";
|
|
6
|
-
import "../../chunk-
|
|
6
|
+
import "../../chunk-RSXDPFXK.js";
|
|
7
7
|
import "../../chunk-N5JDL4VE.js";
|
|
8
8
|
import "../../chunk-4RU33BRQ.js";
|
|
9
9
|
import "../../chunk-TH3ITGUM.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../../chunk-5QWBRWSN.cjs');
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkVMAJ34DCcjs = require('../../chunk-VMAJ34DC.cjs');
|
|
5
5
|
require('../../chunk-ELDHIKFD.cjs');
|
|
6
|
-
require('../../chunk-
|
|
6
|
+
require('../../chunk-NU3WUSG7.cjs');
|
|
7
7
|
require('../../chunk-EACNRR3C.cjs');
|
|
8
8
|
require('../../chunk-UK2SFZIQ.cjs');
|
|
9
9
|
require('../../chunk-3RUIKBH4.cjs');
|
|
@@ -15,5 +15,5 @@ require('../../chunk-NH3KGR65.cjs');
|
|
|
15
15
|
require('../../chunk-V6MXOJQ4.cjs');
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
exports.FileUpload =
|
|
18
|
+
exports.FileUpload = _chunkVMAJ34DCcjs.FileUpload;
|
|
19
19
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import "../../chunk-MZALAXZZ.js";
|
|
2
2
|
import {
|
|
3
3
|
FileUpload
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-GNL72FRN.js";
|
|
5
5
|
import "../../chunk-IW7UX7SA.js";
|
|
6
|
-
import "../../chunk-
|
|
6
|
+
import "../../chunk-RSXDPFXK.js";
|
|
7
7
|
import "../../chunk-N5JDL4VE.js";
|
|
8
8
|
import "../../chunk-4RU33BRQ.js";
|
|
9
9
|
import "../../chunk-TH3ITGUM.js";
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkNU3WUSG7cjs = require('../../chunk-NU3WUSG7.cjs');
|
|
8
8
|
require('../../chunk-V6MXOJQ4.cjs');
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
exports.CircularProgress =
|
|
14
|
+
exports.CircularProgress = _chunkNU3WUSG7cjs.CircularProgress; exports.Progress = _chunkNU3WUSG7cjs.Progress; exports.circularProgressVariants = _chunkNU3WUSG7cjs.circularProgressVariants; exports.progressVariants = _chunkNU3WUSG7cjs.progressVariants;
|
|
15
15
|
//# sourceMappingURL=Progress.cjs.map
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkNU3WUSG7cjs = require('../../chunk-NU3WUSG7.cjs');
|
|
8
8
|
require('../../chunk-V6MXOJQ4.cjs');
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
exports.CircularProgress =
|
|
14
|
+
exports.CircularProgress = _chunkNU3WUSG7cjs.CircularProgress; exports.Progress = _chunkNU3WUSG7cjs.Progress; exports.circularProgressVariants = _chunkNU3WUSG7cjs.circularProgressVariants; exports.progressVariants = _chunkNU3WUSG7cjs.progressVariants;
|
|
15
15
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs
CHANGED
|
@@ -307,14 +307,14 @@ var _chunkBGKYCKNMcjs = require('./chunk-BGKYCKNM.cjs');
|
|
|
307
307
|
require('./chunk-5QWBRWSN.cjs');
|
|
308
308
|
|
|
309
309
|
|
|
310
|
-
var
|
|
310
|
+
var _chunkVMAJ34DCcjs = require('./chunk-VMAJ34DC.cjs');
|
|
311
311
|
require('./chunk-ELDHIKFD.cjs');
|
|
312
312
|
|
|
313
313
|
|
|
314
314
|
|
|
315
315
|
|
|
316
316
|
|
|
317
|
-
var
|
|
317
|
+
var _chunkNU3WUSG7cjs = require('./chunk-NU3WUSG7.cjs');
|
|
318
318
|
require('./chunk-BQWUA4C7.cjs');
|
|
319
319
|
|
|
320
320
|
|
|
@@ -733,5 +733,5 @@ var _chunkV6MXOJQ4cjs = require('./chunk-V6MXOJQ4.cjs');
|
|
|
733
733
|
|
|
734
734
|
|
|
735
735
|
|
|
736
|
-
exports.Accordion = _chunkGMBIFJOAcjs.Accordion; exports.AccordionContent = _chunkGMBIFJOAcjs.AccordionContent; exports.AccordionItem = _chunkGMBIFJOAcjs.AccordionItem; exports.AccordionTrigger = _chunkGMBIFJOAcjs.AccordionTrigger; exports.Alert = _chunkOGZKNZS6cjs.Alert; exports.AlertDescription = _chunkOGZKNZS6cjs.AlertDescription; exports.AlertTitle = _chunkOGZKNZS6cjs.AlertTitle; exports.AspectRatio = _chunkLTU2OBLVcjs.AspectRatio; exports.Avatar = _chunkVSC3A6VBcjs.Avatar; exports.AvatarFallback = _chunkVSC3A6VBcjs.AvatarFallback; exports.AvatarGroup = _chunkVSC3A6VBcjs.AvatarGroup; exports.AvatarImage = _chunkVSC3A6VBcjs.AvatarImage; exports.Badge = _chunkFEUMA5IScjs.Badge; exports.Breadcrumb = _chunkMGZO7MBNcjs.Breadcrumb; exports.BreadcrumbEllipsis = _chunkMGZO7MBNcjs.BreadcrumbEllipsis; exports.BreadcrumbItem = _chunkMGZO7MBNcjs.BreadcrumbItem; exports.BreadcrumbLink = _chunkMGZO7MBNcjs.BreadcrumbLink; exports.BreadcrumbList = _chunkMGZO7MBNcjs.BreadcrumbList; exports.BreadcrumbPage = _chunkMGZO7MBNcjs.BreadcrumbPage; exports.BreadcrumbSeparator = _chunkMGZO7MBNcjs.BreadcrumbSeparator; exports.Button = _chunkUK2SFZIQcjs.Button; exports.Card = _chunkZ5XJ5S7Ucjs.Card; exports.CardContent = _chunkZ5XJ5S7Ucjs.CardContent; exports.CardDescription = _chunkZ5XJ5S7Ucjs.CardDescription; exports.CardFooter = _chunkZ5XJ5S7Ucjs.CardFooter; exports.CardHeader = _chunkZ5XJ5S7Ucjs.CardHeader; exports.CardImage = _chunkZ5XJ5S7Ucjs.CardImage; exports.CardTitle = _chunkZ5XJ5S7Ucjs.CardTitle; exports.Checkbox = _chunkYVQOUGWGcjs.Checkbox; exports.CircularProgress = _chunkW6B7GJLNcjs.CircularProgress; exports.Collapsible = _chunkOBDWY2XPcjs.Collapsible; exports.CollapsibleContent = _chunkOBDWY2XPcjs.CollapsibleContent; exports.CollapsibleTrigger = _chunkOBDWY2XPcjs.CollapsibleTrigger; exports.Combobox = _chunkCVQFSXRRcjs.Combobox; exports.ComboboxGroup = _chunkCVQFSXRRcjs.ComboboxGroup; exports.ComboboxItem = _chunkCVQFSXRRcjs.ComboboxItem; exports.ComboboxSeparator = _chunkCVQFSXRRcjs.ComboboxSeparator; exports.Command = _chunkATOT5N34cjs.Command; exports.CommandDialog = _chunkATOT5N34cjs.CommandDialog; exports.CommandEmpty = _chunkATOT5N34cjs.CommandEmpty; exports.CommandGroup = _chunkATOT5N34cjs.CommandGroup; exports.CommandInput = _chunkATOT5N34cjs.CommandInput; exports.CommandItem = _chunkATOT5N34cjs.CommandItem; exports.CommandList = _chunkATOT5N34cjs.CommandList; exports.CommandSeparator = _chunkATOT5N34cjs.CommandSeparator; exports.DatePicker = _chunkAYIS62JRcjs.DatePicker; exports.DateRangePicker = _chunkWI4WQGF6cjs.DateRangePicker; exports.DescriptionDetails = _chunkMQ7YUUAJcjs.DescriptionDetails; exports.DescriptionItem = _chunkMQ7YUUAJcjs.DescriptionItem; exports.DescriptionList = _chunkMQ7YUUAJcjs.DescriptionList; exports.DescriptionTerm = _chunkMQ7YUUAJcjs.DescriptionTerm; exports.DgaProvider = _chunkP2CSX4DZcjs.DgaProvider; exports.Divider = _chunkTTHWYBQBcjs.Divider; exports.Drawer = _chunkKPZ5T4DWcjs.Drawer; exports.DrawerBody = _chunkKPZ5T4DWcjs.DrawerBody; exports.DrawerClose = _chunkKPZ5T4DWcjs.DrawerClose; exports.DrawerContent = _chunkKPZ5T4DWcjs.DrawerContent; exports.DrawerDescription = _chunkKPZ5T4DWcjs.DrawerDescription; exports.DrawerFooter = _chunkKPZ5T4DWcjs.DrawerFooter; exports.DrawerHeader = _chunkKPZ5T4DWcjs.DrawerHeader; exports.DrawerTitle = _chunkKPZ5T4DWcjs.DrawerTitle; exports.DrawerTrigger = _chunkKPZ5T4DWcjs.DrawerTrigger; exports.DropdownMenu = _chunk4U5TTO6Ecjs.DropdownMenu; exports.DropdownMenuCheckboxItem = _chunk4U5TTO6Ecjs.DropdownMenuCheckboxItem; exports.DropdownMenuContent = _chunk4U5TTO6Ecjs.DropdownMenuContent; exports.DropdownMenuGroup = _chunk4U5TTO6Ecjs.DropdownMenuGroup; exports.DropdownMenuItem = _chunk4U5TTO6Ecjs.DropdownMenuItem; exports.DropdownMenuLabel = _chunk4U5TTO6Ecjs.DropdownMenuLabel; exports.DropdownMenuRadioGroup = _chunk4U5TTO6Ecjs.DropdownMenuRadioGroup; exports.DropdownMenuRadioItem = _chunk4U5TTO6Ecjs.DropdownMenuRadioItem; exports.DropdownMenuSeparator = _chunk4U5TTO6Ecjs.DropdownMenuSeparator; exports.DropdownMenuSub = _chunk4U5TTO6Ecjs.DropdownMenuSub; exports.DropdownMenuSubContent = _chunk4U5TTO6Ecjs.DropdownMenuSubContent; exports.DropdownMenuSubTrigger = _chunk4U5TTO6Ecjs.DropdownMenuSubTrigger; exports.DropdownMenuTrigger = _chunk4U5TTO6Ecjs.DropdownMenuTrigger; exports.EmptyState = _chunkBGKYCKNMcjs.EmptyState; exports.EmptyStateActions = _chunkBGKYCKNMcjs.EmptyStateActions; exports.EmptyStateDescription = _chunkBGKYCKNMcjs.EmptyStateDescription; exports.EmptyStateMedia = _chunkBGKYCKNMcjs.EmptyStateMedia; exports.EmptyStateTitle = _chunkBGKYCKNMcjs.EmptyStateTitle; exports.FieldMessage = _chunkN4FHLSNVcjs.FieldMessage; exports.FileUpload = _chunk2HZGIP5Vcjs.FileUpload; exports.Input = _chunkO74TNSJDcjs.Input; exports.InputOTP = _chunk3X7ORLG5cjs.InputOTP; exports.Link = _chunk4T6QBG46cjs.Link; exports.List = _chunkA6RVSF5Vcjs.List; exports.ListItem = _chunkA6RVSF5Vcjs.ListItem; exports.ListItemAction = _chunkA6RVSF5Vcjs.ListItemAction; exports.ListItemContent = _chunkA6RVSF5Vcjs.ListItemContent; exports.ListItemIcon = _chunkA6RVSF5Vcjs.ListItemIcon; exports.Menubar = _chunkCNAMOK3Zcjs.Menubar; exports.MenubarCheckboxItem = _chunkCNAMOK3Zcjs.MenubarCheckboxItem; exports.MenubarContent = _chunkCNAMOK3Zcjs.MenubarContent; exports.MenubarGroup = _chunkCNAMOK3Zcjs.MenubarGroup; exports.MenubarItem = _chunkCNAMOK3Zcjs.MenubarItem; exports.MenubarLabel = _chunkCNAMOK3Zcjs.MenubarLabel; exports.MenubarMenu = _chunkCNAMOK3Zcjs.MenubarMenu; exports.MenubarRadioGroup = _chunkCNAMOK3Zcjs.MenubarRadioGroup; exports.MenubarRadioItem = _chunkCNAMOK3Zcjs.MenubarRadioItem; exports.MenubarSeparator = _chunkCNAMOK3Zcjs.MenubarSeparator; exports.MenubarSub = _chunkCNAMOK3Zcjs.MenubarSub; exports.MenubarSubContent = _chunkCNAMOK3Zcjs.MenubarSubContent; exports.MenubarSubTrigger = _chunkCNAMOK3Zcjs.MenubarSubTrigger; exports.MenubarTrigger = _chunkCNAMOK3Zcjs.MenubarTrigger; exports.Modal = _chunkI6BOBHO6cjs.Modal; exports.ModalBody = _chunkI6BOBHO6cjs.ModalBody; exports.ModalClose = _chunkI6BOBHO6cjs.ModalClose; exports.ModalContent = _chunkI6BOBHO6cjs.ModalContent; exports.ModalDescription = _chunkI6BOBHO6cjs.ModalDescription; exports.ModalFooter = _chunkI6BOBHO6cjs.ModalFooter; exports.ModalHeader = _chunkI6BOBHO6cjs.ModalHeader; exports.ModalTitle = _chunkI6BOBHO6cjs.ModalTitle; exports.ModalTrigger = _chunkI6BOBHO6cjs.ModalTrigger; exports.NumberInput = _chunkJWUYPAFCcjs.NumberInput; exports.Pagination = _chunkUPIDCMZIcjs.Pagination; exports.PaginationContent = _chunkUPIDCMZIcjs.PaginationContent; exports.PaginationEllipsis = _chunkUPIDCMZIcjs.PaginationEllipsis; exports.PaginationItem = _chunkUPIDCMZIcjs.PaginationItem; exports.PaginationLink = _chunkUPIDCMZIcjs.PaginationLink; exports.PaginationNext = _chunkUPIDCMZIcjs.PaginationNext; exports.PaginationPrevious = _chunkUPIDCMZIcjs.PaginationPrevious; exports.Popover = _chunkEXAPMLPAcjs.Popover; exports.PopoverAnchor = _chunkEXAPMLPAcjs.PopoverAnchor; exports.PopoverClose = _chunkEXAPMLPAcjs.PopoverClose; exports.PopoverContent = _chunkEXAPMLPAcjs.PopoverContent; exports.PopoverTrigger = _chunkEXAPMLPAcjs.PopoverTrigger; exports.Progress = _chunkW6B7GJLNcjs.Progress; exports.Quote = _chunkGLWMKKLRcjs.Quote; exports.QuoteAuthor = _chunkGLWMKKLRcjs.QuoteAuthor; exports.QuoteCaption = _chunkGLWMKKLRcjs.QuoteCaption; exports.QuoteContent = _chunkGLWMKKLRcjs.QuoteContent; exports.QuoteSource = _chunkGLWMKKLRcjs.QuoteSource; exports.Radio = _chunkCBCUQUHIcjs.Radio; exports.RadioGroup = _chunkCBCUQUHIcjs.RadioGroup; exports.Rating = _chunkPZWJQNCYcjs.Rating; exports.ScrollArea = _chunkVYOETLZUcjs.ScrollArea; exports.SearchBox = _chunk6BZMLKCUcjs.SearchBox; exports.Select = _chunkYH44Q6CIcjs.Select; exports.SelectItem = _chunkYH44Q6CIcjs.SelectItem; exports.Sidebar = _chunkCISRE6BCcjs.Sidebar; exports.SidebarContent = _chunkCISRE6BCcjs.SidebarContent; exports.SidebarFooter = _chunkCISRE6BCcjs.SidebarFooter; exports.SidebarGroup = _chunk3MEIVAYOcjs.SidebarGroup; exports.SidebarGroupAction = _chunk3MEIVAYOcjs.SidebarGroupAction; exports.SidebarGroupContent = _chunk3MEIVAYOcjs.SidebarGroupContent; exports.SidebarGroupLabel = _chunk3MEIVAYOcjs.SidebarGroupLabel; exports.SidebarHeader = _chunkCISRE6BCcjs.SidebarHeader; exports.SidebarInset = _chunkCISRE6BCcjs.SidebarInset; exports.SidebarMenu = _chunkNUC6WJU4cjs.SidebarMenu; exports.SidebarMenuAction = _chunkNUC6WJU4cjs.SidebarMenuAction; exports.SidebarMenuBadge = _chunkNUC6WJU4cjs.SidebarMenuBadge; exports.SidebarMenuButton = _chunkNUC6WJU4cjs.SidebarMenuButton; exports.SidebarMenuItem = _chunkNUC6WJU4cjs.SidebarMenuItem; exports.SidebarMenuSkeleton = _chunkNUC6WJU4cjs.SidebarMenuSkeleton; exports.SidebarMenuSub = _chunkNUC6WJU4cjs.SidebarMenuSub; exports.SidebarMenuSubButton = _chunkNUC6WJU4cjs.SidebarMenuSubButton; exports.SidebarMenuSubItem = _chunkNUC6WJU4cjs.SidebarMenuSubItem; exports.SidebarProvider = _chunkCISRE6BCcjs.SidebarProvider; exports.SidebarRail = _chunkCISRE6BCcjs.SidebarRail; exports.SidebarSeparator = _chunkCISRE6BCcjs.SidebarSeparator; exports.SidebarTrigger = _chunkCISRE6BCcjs.SidebarTrigger; exports.Skeleton = _chunkP2JM7CUDcjs.Skeleton; exports.Slider = _chunkSTJDMXL7cjs.Slider; exports.Spinner = _chunkNQGCAXTWcjs.Spinner; exports.Stat = _chunkKRIWNW4Acjs.Stat; exports.StatChange = _chunkKRIWNW4Acjs.StatChange; exports.StatChart = _chunkKRIWNW4Acjs.StatChart; exports.StatGroup = _chunkAM2OVOQVcjs.StatGroup; exports.StatLabel = _chunkKRIWNW4Acjs.StatLabel; exports.StatValue = _chunkKRIWNW4Acjs.StatValue; exports.Step = _chunkDMWYQSO4cjs.Step; exports.StepDescription = _chunkDMWYQSO4cjs.StepDescription; exports.StepIndicator = _chunkDMWYQSO4cjs.StepIndicator; exports.StepTitle = _chunkDMWYQSO4cjs.StepTitle; exports.Steps = _chunkDMWYQSO4cjs.Steps; exports.Switch = _chunkD4ZUV7FDcjs.Switch; exports.Table = _chunkWB5AEG5Dcjs.Table; exports.TableBody = _chunkWB5AEG5Dcjs.TableBody; exports.TableCaption = _chunkWB5AEG5Dcjs.TableCaption; exports.TableCell = _chunkWB5AEG5Dcjs.TableCell; exports.TableFooter = _chunkWB5AEG5Dcjs.TableFooter; exports.TableHead = _chunkWB5AEG5Dcjs.TableHead; exports.TableHeader = _chunkWB5AEG5Dcjs.TableHeader; exports.TableRow = _chunkWB5AEG5Dcjs.TableRow; exports.Tabs = _chunkURC4A3GEcjs.Tabs; exports.TabsContent = _chunkURC4A3GEcjs.TabsContent; exports.TabsList = _chunkURC4A3GEcjs.TabsList; exports.TabsTrigger = _chunkURC4A3GEcjs.TabsTrigger; exports.TagInput = _chunkBBGCS5PZcjs.TagInput; exports.Textarea = _chunkC3YKGPQMcjs.Textarea; exports.Timeline = _chunkTM3FOGLKcjs.Timeline; exports.TimelineContent = _chunkTM3FOGLKcjs.TimelineContent; exports.TimelineDescription = _chunkTM3FOGLKcjs.TimelineDescription; exports.TimelineItem = _chunkTM3FOGLKcjs.TimelineItem; exports.TimelineMarker = _chunkTM3FOGLKcjs.TimelineMarker; exports.TimelineTime = _chunkTM3FOGLKcjs.TimelineTime; exports.TimelineTitle = _chunkTM3FOGLKcjs.TimelineTitle; exports.Toaster = _chunkK5P2VY5Jcjs.Toaster; exports.Toggle = _chunk23C5MSXZcjs.Toggle; exports.ToggleGroup = _chunk23C5MSXZcjs.ToggleGroup; exports.ToggleGroupItem = _chunk23C5MSXZcjs.ToggleGroupItem; exports.Tooltip = _chunkLG2IADSZcjs.Tooltip; exports.TooltipContent = _chunkLG2IADSZcjs.TooltipContent; exports.TooltipTrigger = _chunkLG2IADSZcjs.TooltipTrigger; exports.accordionVariants = _chunkGMBIFJOAcjs.accordionVariants; exports.alertVariants = _chunkOGZKNZS6cjs.alertVariants; exports.avatarVariants = _chunkVSC3A6VBcjs.avatarVariants; exports.badgeVariants = _chunkFEUMA5IScjs.badgeVariants; exports.breadcrumbVariants = _chunkMGZO7MBNcjs.breadcrumbVariants; exports.buttonVariants = _chunkUK2SFZIQcjs.buttonVariants; exports.cardVariants = _chunkZ5XJ5S7Ucjs.cardVariants; exports.checkboxVariants = _chunkYVQOUGWGcjs.checkboxVariants; exports.circularProgressVariants = _chunkW6B7GJLNcjs.circularProgressVariants; exports.cn = _chunkV6MXOJQ4cjs.cn; exports.comboboxTriggerVariants = _chunkCVQFSXRRcjs.comboboxTriggerVariants; exports.comboboxVariants = _chunkCVQFSXRRcjs.comboboxVariants; exports.commandVariants = _chunkATOT5N34cjs.commandVariants; exports.createToast = _chunkBGS3MCQZcjs.createToast; exports.createToastStore = _chunkBGS3MCQZcjs.createToastStore; exports.datePickerVariants = _chunkAYIS62JRcjs.datePickerVariants; exports.dateRangePickerTriggerVariants = _chunkWI4WQGF6cjs.dateRangePickerTriggerVariants; exports.dateRangePickerVariants = _chunkWI4WQGF6cjs.dateRangePickerVariants; exports.descriptionListVariants = _chunkMQ7YUUAJcjs.descriptionListVariants; exports.dividerVariants = _chunkTTHWYBQBcjs.dividerVariants; exports.drawerVariants = _chunkKPZ5T4DWcjs.drawerVariants; exports.dropdownMenuVariants = _chunk4U5TTO6Ecjs.dropdownMenuVariants; exports.emptyStateVariants = _chunkBGKYCKNMcjs.emptyStateVariants; exports.inputOTPVariants = _chunk3X7ORLG5cjs.inputOTPVariants; exports.inputVariants = _chunkO74TNSJDcjs.inputVariants; exports.linkVariants = _chunk4T6QBG46cjs.linkVariants; exports.listVariants = _chunkA6RVSF5Vcjs.listVariants; exports.menubarContentVariants = _chunkCNAMOK3Zcjs.menubarContentVariants; exports.menubarTriggerVariants = _chunkCNAMOK3Zcjs.menubarTriggerVariants; exports.modalContentVariants = _chunkI6BOBHO6cjs.modalContentVariants; exports.numberInputVariants = _chunkJWUYPAFCcjs.numberInputVariants; exports.paginationLinkVariants = _chunkUPIDCMZIcjs.paginationLinkVariants; exports.paginationRange = _chunkJ7GWUCFMcjs.paginationRange; exports.paginationVariants = _chunkUPIDCMZIcjs.paginationVariants; exports.popoverContentVariants = _chunkEXAPMLPAcjs.popoverContentVariants; exports.progressVariants = _chunkW6B7GJLNcjs.progressVariants; exports.quoteVariants = _chunkGLWMKKLRcjs.quoteVariants; exports.radioGroupVariants = _chunkCBCUQUHIcjs.radioGroupVariants; exports.radioVariants = _chunkCBCUQUHIcjs.radioVariants; exports.ratingVariants = _chunkPZWJQNCYcjs.ratingVariants; exports.scrollAreaVariants = _chunkVYOETLZUcjs.scrollAreaVariants; exports.selectTriggerVariants = _chunkYH44Q6CIcjs.selectTriggerVariants; exports.sidebarMenuButtonVariants = _chunkNUC6WJU4cjs.sidebarMenuButtonVariants; exports.sidebarMenuSubButtonVariants = _chunkNUC6WJU4cjs.sidebarMenuSubButtonVariants; exports.skeletonVariants = _chunkP2JM7CUDcjs.skeletonVariants; exports.sliderVariants = _chunkSTJDMXL7cjs.sliderVariants; exports.spinnerVariants = _chunkNQGCAXTWcjs.spinnerVariants; exports.statGroupVariants = _chunkAM2OVOQVcjs.statGroupVariants; exports.statVariants = _chunkKRIWNW4Acjs.statVariants; exports.stepVariants = _chunkDMWYQSO4cjs.stepVariants; exports.stepsVariants = _chunkDMWYQSO4cjs.stepsVariants; exports.switchVariants = _chunkD4ZUV7FDcjs.switchVariants; exports.tableVariants = _chunkWB5AEG5Dcjs.tableVariants; exports.tabsListVariants = _chunkURC4A3GEcjs.tabsListVariants; exports.tabsVariants = _chunkURC4A3GEcjs.tabsVariants; exports.tagInputVariants = _chunkBBGCS5PZcjs.tagInputVariants; exports.textareaVariants = _chunkC3YKGPQMcjs.textareaVariants; exports.timelineMarkerVariants = _chunkTM3FOGLKcjs.timelineMarkerVariants; exports.timelineVariants = _chunkTM3FOGLKcjs.timelineVariants; exports.toast = _chunkBGS3MCQZcjs.toast; exports.toastStore = _chunkBGS3MCQZcjs.toastStore; exports.toastVariants = _chunkK5P2VY5Jcjs.toastVariants; exports.toastViewportVariants = _chunkK5P2VY5Jcjs.toastViewportVariants; exports.toggleGroupVariants = _chunk23C5MSXZcjs.toggleGroupVariants; exports.toggleVariants = _chunk23C5MSXZcjs.toggleVariants; exports.tooltipContentVariants = _chunkLG2IADSZcjs.tooltipContentVariants; exports.useDga = _chunkFQLVTLUIcjs.useDga; exports.useDir = _chunkBPFCWXSNcjs.useDir; exports.useFieldA11y = _chunkNH3KGR65cjs.useFieldA11y; exports.useIsMobile = _chunkVXR7IJMHcjs.useIsMobile; exports.useSidebar = _chunkYUJZEQJWcjs.useSidebar;
|
|
736
|
+
exports.Accordion = _chunkGMBIFJOAcjs.Accordion; exports.AccordionContent = _chunkGMBIFJOAcjs.AccordionContent; exports.AccordionItem = _chunkGMBIFJOAcjs.AccordionItem; exports.AccordionTrigger = _chunkGMBIFJOAcjs.AccordionTrigger; exports.Alert = _chunkOGZKNZS6cjs.Alert; exports.AlertDescription = _chunkOGZKNZS6cjs.AlertDescription; exports.AlertTitle = _chunkOGZKNZS6cjs.AlertTitle; exports.AspectRatio = _chunkLTU2OBLVcjs.AspectRatio; exports.Avatar = _chunkVSC3A6VBcjs.Avatar; exports.AvatarFallback = _chunkVSC3A6VBcjs.AvatarFallback; exports.AvatarGroup = _chunkVSC3A6VBcjs.AvatarGroup; exports.AvatarImage = _chunkVSC3A6VBcjs.AvatarImage; exports.Badge = _chunkFEUMA5IScjs.Badge; exports.Breadcrumb = _chunkMGZO7MBNcjs.Breadcrumb; exports.BreadcrumbEllipsis = _chunkMGZO7MBNcjs.BreadcrumbEllipsis; exports.BreadcrumbItem = _chunkMGZO7MBNcjs.BreadcrumbItem; exports.BreadcrumbLink = _chunkMGZO7MBNcjs.BreadcrumbLink; exports.BreadcrumbList = _chunkMGZO7MBNcjs.BreadcrumbList; exports.BreadcrumbPage = _chunkMGZO7MBNcjs.BreadcrumbPage; exports.BreadcrumbSeparator = _chunkMGZO7MBNcjs.BreadcrumbSeparator; exports.Button = _chunkUK2SFZIQcjs.Button; exports.Card = _chunkZ5XJ5S7Ucjs.Card; exports.CardContent = _chunkZ5XJ5S7Ucjs.CardContent; exports.CardDescription = _chunkZ5XJ5S7Ucjs.CardDescription; exports.CardFooter = _chunkZ5XJ5S7Ucjs.CardFooter; exports.CardHeader = _chunkZ5XJ5S7Ucjs.CardHeader; exports.CardImage = _chunkZ5XJ5S7Ucjs.CardImage; exports.CardTitle = _chunkZ5XJ5S7Ucjs.CardTitle; exports.Checkbox = _chunkYVQOUGWGcjs.Checkbox; exports.CircularProgress = _chunkNU3WUSG7cjs.CircularProgress; exports.Collapsible = _chunkOBDWY2XPcjs.Collapsible; exports.CollapsibleContent = _chunkOBDWY2XPcjs.CollapsibleContent; exports.CollapsibleTrigger = _chunkOBDWY2XPcjs.CollapsibleTrigger; exports.Combobox = _chunkCVQFSXRRcjs.Combobox; exports.ComboboxGroup = _chunkCVQFSXRRcjs.ComboboxGroup; exports.ComboboxItem = _chunkCVQFSXRRcjs.ComboboxItem; exports.ComboboxSeparator = _chunkCVQFSXRRcjs.ComboboxSeparator; exports.Command = _chunkATOT5N34cjs.Command; exports.CommandDialog = _chunkATOT5N34cjs.CommandDialog; exports.CommandEmpty = _chunkATOT5N34cjs.CommandEmpty; exports.CommandGroup = _chunkATOT5N34cjs.CommandGroup; exports.CommandInput = _chunkATOT5N34cjs.CommandInput; exports.CommandItem = _chunkATOT5N34cjs.CommandItem; exports.CommandList = _chunkATOT5N34cjs.CommandList; exports.CommandSeparator = _chunkATOT5N34cjs.CommandSeparator; exports.DatePicker = _chunkAYIS62JRcjs.DatePicker; exports.DateRangePicker = _chunkWI4WQGF6cjs.DateRangePicker; exports.DescriptionDetails = _chunkMQ7YUUAJcjs.DescriptionDetails; exports.DescriptionItem = _chunkMQ7YUUAJcjs.DescriptionItem; exports.DescriptionList = _chunkMQ7YUUAJcjs.DescriptionList; exports.DescriptionTerm = _chunkMQ7YUUAJcjs.DescriptionTerm; exports.DgaProvider = _chunkP2CSX4DZcjs.DgaProvider; exports.Divider = _chunkTTHWYBQBcjs.Divider; exports.Drawer = _chunkKPZ5T4DWcjs.Drawer; exports.DrawerBody = _chunkKPZ5T4DWcjs.DrawerBody; exports.DrawerClose = _chunkKPZ5T4DWcjs.DrawerClose; exports.DrawerContent = _chunkKPZ5T4DWcjs.DrawerContent; exports.DrawerDescription = _chunkKPZ5T4DWcjs.DrawerDescription; exports.DrawerFooter = _chunkKPZ5T4DWcjs.DrawerFooter; exports.DrawerHeader = _chunkKPZ5T4DWcjs.DrawerHeader; exports.DrawerTitle = _chunkKPZ5T4DWcjs.DrawerTitle; exports.DrawerTrigger = _chunkKPZ5T4DWcjs.DrawerTrigger; exports.DropdownMenu = _chunk4U5TTO6Ecjs.DropdownMenu; exports.DropdownMenuCheckboxItem = _chunk4U5TTO6Ecjs.DropdownMenuCheckboxItem; exports.DropdownMenuContent = _chunk4U5TTO6Ecjs.DropdownMenuContent; exports.DropdownMenuGroup = _chunk4U5TTO6Ecjs.DropdownMenuGroup; exports.DropdownMenuItem = _chunk4U5TTO6Ecjs.DropdownMenuItem; exports.DropdownMenuLabel = _chunk4U5TTO6Ecjs.DropdownMenuLabel; exports.DropdownMenuRadioGroup = _chunk4U5TTO6Ecjs.DropdownMenuRadioGroup; exports.DropdownMenuRadioItem = _chunk4U5TTO6Ecjs.DropdownMenuRadioItem; exports.DropdownMenuSeparator = _chunk4U5TTO6Ecjs.DropdownMenuSeparator; exports.DropdownMenuSub = _chunk4U5TTO6Ecjs.DropdownMenuSub; exports.DropdownMenuSubContent = _chunk4U5TTO6Ecjs.DropdownMenuSubContent; exports.DropdownMenuSubTrigger = _chunk4U5TTO6Ecjs.DropdownMenuSubTrigger; exports.DropdownMenuTrigger = _chunk4U5TTO6Ecjs.DropdownMenuTrigger; exports.EmptyState = _chunkBGKYCKNMcjs.EmptyState; exports.EmptyStateActions = _chunkBGKYCKNMcjs.EmptyStateActions; exports.EmptyStateDescription = _chunkBGKYCKNMcjs.EmptyStateDescription; exports.EmptyStateMedia = _chunkBGKYCKNMcjs.EmptyStateMedia; exports.EmptyStateTitle = _chunkBGKYCKNMcjs.EmptyStateTitle; exports.FieldMessage = _chunkN4FHLSNVcjs.FieldMessage; exports.FileUpload = _chunkVMAJ34DCcjs.FileUpload; exports.Input = _chunkO74TNSJDcjs.Input; exports.InputOTP = _chunk3X7ORLG5cjs.InputOTP; exports.Link = _chunk4T6QBG46cjs.Link; exports.List = _chunkA6RVSF5Vcjs.List; exports.ListItem = _chunkA6RVSF5Vcjs.ListItem; exports.ListItemAction = _chunkA6RVSF5Vcjs.ListItemAction; exports.ListItemContent = _chunkA6RVSF5Vcjs.ListItemContent; exports.ListItemIcon = _chunkA6RVSF5Vcjs.ListItemIcon; exports.Menubar = _chunkCNAMOK3Zcjs.Menubar; exports.MenubarCheckboxItem = _chunkCNAMOK3Zcjs.MenubarCheckboxItem; exports.MenubarContent = _chunkCNAMOK3Zcjs.MenubarContent; exports.MenubarGroup = _chunkCNAMOK3Zcjs.MenubarGroup; exports.MenubarItem = _chunkCNAMOK3Zcjs.MenubarItem; exports.MenubarLabel = _chunkCNAMOK3Zcjs.MenubarLabel; exports.MenubarMenu = _chunkCNAMOK3Zcjs.MenubarMenu; exports.MenubarRadioGroup = _chunkCNAMOK3Zcjs.MenubarRadioGroup; exports.MenubarRadioItem = _chunkCNAMOK3Zcjs.MenubarRadioItem; exports.MenubarSeparator = _chunkCNAMOK3Zcjs.MenubarSeparator; exports.MenubarSub = _chunkCNAMOK3Zcjs.MenubarSub; exports.MenubarSubContent = _chunkCNAMOK3Zcjs.MenubarSubContent; exports.MenubarSubTrigger = _chunkCNAMOK3Zcjs.MenubarSubTrigger; exports.MenubarTrigger = _chunkCNAMOK3Zcjs.MenubarTrigger; exports.Modal = _chunkI6BOBHO6cjs.Modal; exports.ModalBody = _chunkI6BOBHO6cjs.ModalBody; exports.ModalClose = _chunkI6BOBHO6cjs.ModalClose; exports.ModalContent = _chunkI6BOBHO6cjs.ModalContent; exports.ModalDescription = _chunkI6BOBHO6cjs.ModalDescription; exports.ModalFooter = _chunkI6BOBHO6cjs.ModalFooter; exports.ModalHeader = _chunkI6BOBHO6cjs.ModalHeader; exports.ModalTitle = _chunkI6BOBHO6cjs.ModalTitle; exports.ModalTrigger = _chunkI6BOBHO6cjs.ModalTrigger; exports.NumberInput = _chunkJWUYPAFCcjs.NumberInput; exports.Pagination = _chunkUPIDCMZIcjs.Pagination; exports.PaginationContent = _chunkUPIDCMZIcjs.PaginationContent; exports.PaginationEllipsis = _chunkUPIDCMZIcjs.PaginationEllipsis; exports.PaginationItem = _chunkUPIDCMZIcjs.PaginationItem; exports.PaginationLink = _chunkUPIDCMZIcjs.PaginationLink; exports.PaginationNext = _chunkUPIDCMZIcjs.PaginationNext; exports.PaginationPrevious = _chunkUPIDCMZIcjs.PaginationPrevious; exports.Popover = _chunkEXAPMLPAcjs.Popover; exports.PopoverAnchor = _chunkEXAPMLPAcjs.PopoverAnchor; exports.PopoverClose = _chunkEXAPMLPAcjs.PopoverClose; exports.PopoverContent = _chunkEXAPMLPAcjs.PopoverContent; exports.PopoverTrigger = _chunkEXAPMLPAcjs.PopoverTrigger; exports.Progress = _chunkNU3WUSG7cjs.Progress; exports.Quote = _chunkGLWMKKLRcjs.Quote; exports.QuoteAuthor = _chunkGLWMKKLRcjs.QuoteAuthor; exports.QuoteCaption = _chunkGLWMKKLRcjs.QuoteCaption; exports.QuoteContent = _chunkGLWMKKLRcjs.QuoteContent; exports.QuoteSource = _chunkGLWMKKLRcjs.QuoteSource; exports.Radio = _chunkCBCUQUHIcjs.Radio; exports.RadioGroup = _chunkCBCUQUHIcjs.RadioGroup; exports.Rating = _chunkPZWJQNCYcjs.Rating; exports.ScrollArea = _chunkVYOETLZUcjs.ScrollArea; exports.SearchBox = _chunk6BZMLKCUcjs.SearchBox; exports.Select = _chunkYH44Q6CIcjs.Select; exports.SelectItem = _chunkYH44Q6CIcjs.SelectItem; exports.Sidebar = _chunkCISRE6BCcjs.Sidebar; exports.SidebarContent = _chunkCISRE6BCcjs.SidebarContent; exports.SidebarFooter = _chunkCISRE6BCcjs.SidebarFooter; exports.SidebarGroup = _chunk3MEIVAYOcjs.SidebarGroup; exports.SidebarGroupAction = _chunk3MEIVAYOcjs.SidebarGroupAction; exports.SidebarGroupContent = _chunk3MEIVAYOcjs.SidebarGroupContent; exports.SidebarGroupLabel = _chunk3MEIVAYOcjs.SidebarGroupLabel; exports.SidebarHeader = _chunkCISRE6BCcjs.SidebarHeader; exports.SidebarInset = _chunkCISRE6BCcjs.SidebarInset; exports.SidebarMenu = _chunkNUC6WJU4cjs.SidebarMenu; exports.SidebarMenuAction = _chunkNUC6WJU4cjs.SidebarMenuAction; exports.SidebarMenuBadge = _chunkNUC6WJU4cjs.SidebarMenuBadge; exports.SidebarMenuButton = _chunkNUC6WJU4cjs.SidebarMenuButton; exports.SidebarMenuItem = _chunkNUC6WJU4cjs.SidebarMenuItem; exports.SidebarMenuSkeleton = _chunkNUC6WJU4cjs.SidebarMenuSkeleton; exports.SidebarMenuSub = _chunkNUC6WJU4cjs.SidebarMenuSub; exports.SidebarMenuSubButton = _chunkNUC6WJU4cjs.SidebarMenuSubButton; exports.SidebarMenuSubItem = _chunkNUC6WJU4cjs.SidebarMenuSubItem; exports.SidebarProvider = _chunkCISRE6BCcjs.SidebarProvider; exports.SidebarRail = _chunkCISRE6BCcjs.SidebarRail; exports.SidebarSeparator = _chunkCISRE6BCcjs.SidebarSeparator; exports.SidebarTrigger = _chunkCISRE6BCcjs.SidebarTrigger; exports.Skeleton = _chunkP2JM7CUDcjs.Skeleton; exports.Slider = _chunkSTJDMXL7cjs.Slider; exports.Spinner = _chunkNQGCAXTWcjs.Spinner; exports.Stat = _chunkKRIWNW4Acjs.Stat; exports.StatChange = _chunkKRIWNW4Acjs.StatChange; exports.StatChart = _chunkKRIWNW4Acjs.StatChart; exports.StatGroup = _chunkAM2OVOQVcjs.StatGroup; exports.StatLabel = _chunkKRIWNW4Acjs.StatLabel; exports.StatValue = _chunkKRIWNW4Acjs.StatValue; exports.Step = _chunkDMWYQSO4cjs.Step; exports.StepDescription = _chunkDMWYQSO4cjs.StepDescription; exports.StepIndicator = _chunkDMWYQSO4cjs.StepIndicator; exports.StepTitle = _chunkDMWYQSO4cjs.StepTitle; exports.Steps = _chunkDMWYQSO4cjs.Steps; exports.Switch = _chunkD4ZUV7FDcjs.Switch; exports.Table = _chunkWB5AEG5Dcjs.Table; exports.TableBody = _chunkWB5AEG5Dcjs.TableBody; exports.TableCaption = _chunkWB5AEG5Dcjs.TableCaption; exports.TableCell = _chunkWB5AEG5Dcjs.TableCell; exports.TableFooter = _chunkWB5AEG5Dcjs.TableFooter; exports.TableHead = _chunkWB5AEG5Dcjs.TableHead; exports.TableHeader = _chunkWB5AEG5Dcjs.TableHeader; exports.TableRow = _chunkWB5AEG5Dcjs.TableRow; exports.Tabs = _chunkURC4A3GEcjs.Tabs; exports.TabsContent = _chunkURC4A3GEcjs.TabsContent; exports.TabsList = _chunkURC4A3GEcjs.TabsList; exports.TabsTrigger = _chunkURC4A3GEcjs.TabsTrigger; exports.TagInput = _chunkBBGCS5PZcjs.TagInput; exports.Textarea = _chunkC3YKGPQMcjs.Textarea; exports.Timeline = _chunkTM3FOGLKcjs.Timeline; exports.TimelineContent = _chunkTM3FOGLKcjs.TimelineContent; exports.TimelineDescription = _chunkTM3FOGLKcjs.TimelineDescription; exports.TimelineItem = _chunkTM3FOGLKcjs.TimelineItem; exports.TimelineMarker = _chunkTM3FOGLKcjs.TimelineMarker; exports.TimelineTime = _chunkTM3FOGLKcjs.TimelineTime; exports.TimelineTitle = _chunkTM3FOGLKcjs.TimelineTitle; exports.Toaster = _chunkK5P2VY5Jcjs.Toaster; exports.Toggle = _chunk23C5MSXZcjs.Toggle; exports.ToggleGroup = _chunk23C5MSXZcjs.ToggleGroup; exports.ToggleGroupItem = _chunk23C5MSXZcjs.ToggleGroupItem; exports.Tooltip = _chunkLG2IADSZcjs.Tooltip; exports.TooltipContent = _chunkLG2IADSZcjs.TooltipContent; exports.TooltipTrigger = _chunkLG2IADSZcjs.TooltipTrigger; exports.accordionVariants = _chunkGMBIFJOAcjs.accordionVariants; exports.alertVariants = _chunkOGZKNZS6cjs.alertVariants; exports.avatarVariants = _chunkVSC3A6VBcjs.avatarVariants; exports.badgeVariants = _chunkFEUMA5IScjs.badgeVariants; exports.breadcrumbVariants = _chunkMGZO7MBNcjs.breadcrumbVariants; exports.buttonVariants = _chunkUK2SFZIQcjs.buttonVariants; exports.cardVariants = _chunkZ5XJ5S7Ucjs.cardVariants; exports.checkboxVariants = _chunkYVQOUGWGcjs.checkboxVariants; exports.circularProgressVariants = _chunkNU3WUSG7cjs.circularProgressVariants; exports.cn = _chunkV6MXOJQ4cjs.cn; exports.comboboxTriggerVariants = _chunkCVQFSXRRcjs.comboboxTriggerVariants; exports.comboboxVariants = _chunkCVQFSXRRcjs.comboboxVariants; exports.commandVariants = _chunkATOT5N34cjs.commandVariants; exports.createToast = _chunkBGS3MCQZcjs.createToast; exports.createToastStore = _chunkBGS3MCQZcjs.createToastStore; exports.datePickerVariants = _chunkAYIS62JRcjs.datePickerVariants; exports.dateRangePickerTriggerVariants = _chunkWI4WQGF6cjs.dateRangePickerTriggerVariants; exports.dateRangePickerVariants = _chunkWI4WQGF6cjs.dateRangePickerVariants; exports.descriptionListVariants = _chunkMQ7YUUAJcjs.descriptionListVariants; exports.dividerVariants = _chunkTTHWYBQBcjs.dividerVariants; exports.drawerVariants = _chunkKPZ5T4DWcjs.drawerVariants; exports.dropdownMenuVariants = _chunk4U5TTO6Ecjs.dropdownMenuVariants; exports.emptyStateVariants = _chunkBGKYCKNMcjs.emptyStateVariants; exports.inputOTPVariants = _chunk3X7ORLG5cjs.inputOTPVariants; exports.inputVariants = _chunkO74TNSJDcjs.inputVariants; exports.linkVariants = _chunk4T6QBG46cjs.linkVariants; exports.listVariants = _chunkA6RVSF5Vcjs.listVariants; exports.menubarContentVariants = _chunkCNAMOK3Zcjs.menubarContentVariants; exports.menubarTriggerVariants = _chunkCNAMOK3Zcjs.menubarTriggerVariants; exports.modalContentVariants = _chunkI6BOBHO6cjs.modalContentVariants; exports.numberInputVariants = _chunkJWUYPAFCcjs.numberInputVariants; exports.paginationLinkVariants = _chunkUPIDCMZIcjs.paginationLinkVariants; exports.paginationRange = _chunkJ7GWUCFMcjs.paginationRange; exports.paginationVariants = _chunkUPIDCMZIcjs.paginationVariants; exports.popoverContentVariants = _chunkEXAPMLPAcjs.popoverContentVariants; exports.progressVariants = _chunkNU3WUSG7cjs.progressVariants; exports.quoteVariants = _chunkGLWMKKLRcjs.quoteVariants; exports.radioGroupVariants = _chunkCBCUQUHIcjs.radioGroupVariants; exports.radioVariants = _chunkCBCUQUHIcjs.radioVariants; exports.ratingVariants = _chunkPZWJQNCYcjs.ratingVariants; exports.scrollAreaVariants = _chunkVYOETLZUcjs.scrollAreaVariants; exports.selectTriggerVariants = _chunkYH44Q6CIcjs.selectTriggerVariants; exports.sidebarMenuButtonVariants = _chunkNUC6WJU4cjs.sidebarMenuButtonVariants; exports.sidebarMenuSubButtonVariants = _chunkNUC6WJU4cjs.sidebarMenuSubButtonVariants; exports.skeletonVariants = _chunkP2JM7CUDcjs.skeletonVariants; exports.sliderVariants = _chunkSTJDMXL7cjs.sliderVariants; exports.spinnerVariants = _chunkNQGCAXTWcjs.spinnerVariants; exports.statGroupVariants = _chunkAM2OVOQVcjs.statGroupVariants; exports.statVariants = _chunkKRIWNW4Acjs.statVariants; exports.stepVariants = _chunkDMWYQSO4cjs.stepVariants; exports.stepsVariants = _chunkDMWYQSO4cjs.stepsVariants; exports.switchVariants = _chunkD4ZUV7FDcjs.switchVariants; exports.tableVariants = _chunkWB5AEG5Dcjs.tableVariants; exports.tabsListVariants = _chunkURC4A3GEcjs.tabsListVariants; exports.tabsVariants = _chunkURC4A3GEcjs.tabsVariants; exports.tagInputVariants = _chunkBBGCS5PZcjs.tagInputVariants; exports.textareaVariants = _chunkC3YKGPQMcjs.textareaVariants; exports.timelineMarkerVariants = _chunkTM3FOGLKcjs.timelineMarkerVariants; exports.timelineVariants = _chunkTM3FOGLKcjs.timelineVariants; exports.toast = _chunkBGS3MCQZcjs.toast; exports.toastStore = _chunkBGS3MCQZcjs.toastStore; exports.toastVariants = _chunkK5P2VY5Jcjs.toastVariants; exports.toastViewportVariants = _chunkK5P2VY5Jcjs.toastViewportVariants; exports.toggleGroupVariants = _chunk23C5MSXZcjs.toggleGroupVariants; exports.toggleVariants = _chunk23C5MSXZcjs.toggleVariants; exports.tooltipContentVariants = _chunkLG2IADSZcjs.tooltipContentVariants; exports.useDga = _chunkFQLVTLUIcjs.useDga; exports.useDir = _chunkBPFCWXSNcjs.useDir; exports.useFieldA11y = _chunkNH3KGR65cjs.useFieldA11y; exports.useIsMobile = _chunkVXR7IJMHcjs.useIsMobile; exports.useSidebar = _chunkYUJZEQJWcjs.useSidebar;
|
|
737
737
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -307,14 +307,14 @@ import {
|
|
|
307
307
|
import "./chunk-MZALAXZZ.js";
|
|
308
308
|
import {
|
|
309
309
|
FileUpload
|
|
310
|
-
} from "./chunk-
|
|
310
|
+
} from "./chunk-GNL72FRN.js";
|
|
311
311
|
import "./chunk-IW7UX7SA.js";
|
|
312
312
|
import {
|
|
313
313
|
CircularProgress,
|
|
314
314
|
Progress,
|
|
315
315
|
circularProgressVariants,
|
|
316
316
|
progressVariants
|
|
317
|
-
} from "./chunk-
|
|
317
|
+
} from "./chunk-RSXDPFXK.js";
|
|
318
318
|
import "./chunk-4SDRJW3D.js";
|
|
319
319
|
import {
|
|
320
320
|
DatePicker,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dev-dga/react",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "React 19 components for the DGA (Digital Government Authority) design system , accessible, RTL-native, dark-mode ready.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -56,12 +56,12 @@
|
|
|
56
56
|
"cmdk": "^1.1.1",
|
|
57
57
|
"radix-ui": "^1.0.0",
|
|
58
58
|
"react-aria-components": "^1.17.0",
|
|
59
|
-
"@dev-dga/tokens": "0.10.
|
|
59
|
+
"@dev-dga/tokens": "0.10.1"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
|
62
62
|
"react": "^19.0.0",
|
|
63
63
|
"react-dom": "^19.0.0",
|
|
64
|
-
"@dev-dga/css": "0.10.
|
|
64
|
+
"@dev-dga/css": "0.10.1"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@storybook/react-vite": "^10.2.15",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Progress/Progress.tsx"],"sourcesContent":["'use client';\n\nimport { Progress as ProgressPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ─── 1. Variants ─── //\n\nconst progressVariants = cva('ddga-progress', {\n variants: {\n size: {\n sm: 'ddga-progress--sm',\n md: 'ddga-progress--md',\n lg: 'ddga-progress--lg',\n },\n color: {\n primary: 'ddga-progress--primary',\n success: 'ddga-progress--success',\n warning: 'ddga-progress--warning',\n destructive: 'ddga-progress--destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'primary',\n },\n});\n\nconst circularProgressVariants = cva('ddga-circular-progress', {\n variants: {\n size: {\n sm: 'ddga-circular-progress--sm',\n md: 'ddga-circular-progress--md',\n lg: 'ddga-circular-progress--lg',\n },\n color: {\n primary: 'ddga-circular-progress--primary',\n success: 'ddga-circular-progress--success',\n warning: 'ddga-circular-progress--warning',\n destructive: 'ddga-circular-progress--destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'primary',\n },\n});\n\n// ─── 2. Linear Progress (Radix) ─── //\n\ntype ProgressOwnProps = VariantProps<typeof progressVariants> & {\n /**\n * Current progress. `null` (or omitted) renders the indeterminate animation.\n * Otherwise clamp yourself to `[0, max]` — Radix Progress assumes the value\n * is in range.\n */\n value?: number | null;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /**\n * Accessible label for the progressbar. Required for assistive tech —\n * Radix logs a warning if neither `aria-label` nor `aria-labelledby` is set.\n */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n};\n\ntype ProgressProps = ProgressOwnProps &\n Omit<React.ComponentProps<typeof ProgressPrimitive.Root>, keyof ProgressOwnProps>;\n\nfunction Progress({ value = null, max = 100, size, color, className, ...props }: ProgressProps) {\n const isIndeterminate = value === null;\n const pct = isIndeterminate ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n value={value}\n max={max}\n className={cn(progressVariants({ size, color }), className)}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"ddga-progress__indicator\"\n style={isIndeterminate ? undefined : { transform: `translateX(${pct - 100}%)` }}\n />\n </ProgressPrimitive.Root>\n );\n}\n\n// ─── 3. Circular Progress (custom SVG) ─── //\n\ntype CircularProgressOwnProps = VariantProps<typeof circularProgressVariants> & {\n value?: number | null;\n max?: number;\n /** Stroke width in px. Defaults to 4 (sm) / 5 (md) / 6 (lg). */\n thickness?: number;\n /**\n * Render the ring as `segments` discrete arcs (a radial stepper) instead of a\n * continuous arc. Pass an integer `>= 2`; values below that fall back to the\n * continuous ring. The number of filled segments is `round(pct × segments)`,\n * so `value={3} max={5} segments={5}` fills 3. Segmented mode is determinate —\n * a `null` value renders 0 filled (no spinner).\n */\n segments?: number;\n /** Render the label inside the ring (`%`, or `filled/segments` when segmented). */\n showLabel?: boolean;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n};\n\ntype CircularProgressProps = CircularProgressOwnProps &\n Omit<React.ComponentProps<'div'>, keyof CircularProgressOwnProps>;\n\nconst CIRCULAR_SIZES = { sm: 32, md: 48, lg: 72 } as const;\nconst CIRCULAR_DEFAULT_THICKNESS = { sm: 4, md: 5, lg: 6 } as const;\n// Fraction of each segment's angular slot left as the gap between segments.\nconst SEGMENT_GAP_FRACTION = 0.16;\n\nfunction CircularProgress({\n value = null,\n max = 100,\n size,\n color,\n thickness,\n segments,\n showLabel = false,\n className,\n ...props\n}: CircularProgressProps) {\n if (process.env.NODE_ENV === 'development' && !props['aria-label'] && !props['aria-labelledby']) {\n // Linear Progress inherits Radix's no-label warning; CircularProgress is a\n // hand-built `role=\"progressbar\"`, so it needs its own. The ring `showLabel`\n // is aria-hidden decoration, not an accessible name.\n console.warn(\n '[dga/Progress] <CircularProgress> has no accessible name. Pass `aria-label` or ' +\n '`aria-labelledby` so screen-reader users know what the progress represents.',\n );\n }\n\n const isIndeterminate = value === null;\n const isSegmented = typeof segments === 'number' && segments >= 2;\n const sizeKey = size ?? 'md';\n const diameter = CIRCULAR_SIZES[sizeKey];\n const strokeWidth = thickness ?? CIRCULAR_DEFAULT_THICKNESS[sizeKey];\n const radius = (diameter - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const center = diameter / 2;\n\n const pct = isIndeterminate ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n const dashOffset = isIndeterminate ? circumference * 0.75 : circumference * (1 - pct / 100);\n\n // Mirror Radix Progress's data-state vocabulary so CSS can use a single\n // selector across linear + circular.\n const state = isIndeterminate ? 'indeterminate' : value >= max ? 'complete' : 'loading';\n\n // Segmented (radial-stepper) geometry: split the ring into `segments` arcs\n // with gaps. Each segment is a single dash of `segLen`, rotated into its slot;\n // the gap is centered so segments stay evenly spaced. Determinate-only.\n const segmentEls =\n isSegmented && segments\n ? (() => {\n const filled = isIndeterminate ? 0 : Math.round((pct / 100) * segments);\n const segAngle = 360 / segments;\n const gapAngle = segAngle * SEGMENT_GAP_FRACTION;\n const segLen = circumference * ((1 - SEGMENT_GAP_FRACTION) / segments);\n return Array.from({ length: segments }, (_, i) => (\n <circle\n key={i}\n className={cn(\n 'ddga-circular-progress__segment',\n i < filled && 'ddga-circular-progress__segment--filled',\n )}\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n // Butt caps, not round: round caps extend strokeWidth/2 past each\n // arc end and would swallow the gap (overlapping at small sizes).\n strokeLinecap=\"butt\"\n strokeDasharray={`${segLen} ${circumference}`}\n transform={`rotate(${-90 + i * segAngle + gapAngle / 2} ${center} ${center})`}\n />\n ));\n })()\n : null;\n\n const labelText = isSegmented\n ? `${segments ? Math.round((pct / 100) * segments) : 0}/${segments}`\n : `${Math.round(pct)}%`;\n\n return (\n <div\n data-slot=\"circular-progress\"\n data-state={state}\n data-segmented={isSegmented ? '' : undefined}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={isIndeterminate ? undefined : value}\n className={cn(circularProgressVariants({ size, color }), className)}\n style={{ inlineSize: diameter, blockSize: diameter }}\n {...props}\n >\n <svg\n className=\"ddga-circular-progress__svg\"\n viewBox={`0 0 ${diameter} ${diameter}`}\n width={diameter}\n height={diameter}\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {isSegmented ? (\n segmentEls\n ) : (\n <>\n <circle\n className=\"ddga-circular-progress__track\"\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n />\n <circle\n className=\"ddga-circular-progress__indicator\"\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n transform={`rotate(-90 ${center} ${center})`}\n />\n </>\n )}\n </svg>\n {showLabel && !isIndeterminate ? (\n <span className=\"ddga-circular-progress__label\" aria-hidden=\"true\">\n {labelText}\n </span>\n ) : null}\n </div>\n );\n}\n\n// ─── 4. Exports ─── //\n\nexport { Progress, CircularProgress, progressVariants, circularProgressVariants };\nexport type { ProgressProps, CircularProgressProps };\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-W6B7GJLN.cjs","../src/components/Progress/Progress.tsx"],"names":[],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-W6B7GJLN.cjs","sourcesContent":[null,"'use client';\n\nimport { Progress as ProgressPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ─── 1. Variants ─── //\n\nconst progressVariants = cva('ddga-progress', {\n variants: {\n size: {\n sm: 'ddga-progress--sm',\n md: 'ddga-progress--md',\n lg: 'ddga-progress--lg',\n },\n color: {\n primary: 'ddga-progress--primary',\n success: 'ddga-progress--success',\n warning: 'ddga-progress--warning',\n destructive: 'ddga-progress--destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'primary',\n },\n});\n\nconst circularProgressVariants = cva('ddga-circular-progress', {\n variants: {\n size: {\n sm: 'ddga-circular-progress--sm',\n md: 'ddga-circular-progress--md',\n lg: 'ddga-circular-progress--lg',\n },\n color: {\n primary: 'ddga-circular-progress--primary',\n success: 'ddga-circular-progress--success',\n warning: 'ddga-circular-progress--warning',\n destructive: 'ddga-circular-progress--destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'primary',\n },\n});\n\n// ─── 2. Linear Progress (Radix) ─── //\n\ntype ProgressOwnProps = VariantProps<typeof progressVariants> & {\n /**\n * Current progress. `null` (or omitted) renders the indeterminate animation.\n * Otherwise clamp yourself to `[0, max]` — Radix Progress assumes the value\n * is in range.\n */\n value?: number | null;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /**\n * Accessible label for the progressbar. Required for assistive tech —\n * Radix logs a warning if neither `aria-label` nor `aria-labelledby` is set.\n */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n};\n\ntype ProgressProps = ProgressOwnProps &\n Omit<React.ComponentProps<typeof ProgressPrimitive.Root>, keyof ProgressOwnProps>;\n\nfunction Progress({ value = null, max = 100, size, color, className, ...props }: ProgressProps) {\n const isIndeterminate = value === null;\n const pct = isIndeterminate ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n value={value}\n max={max}\n className={cn(progressVariants({ size, color }), className)}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"ddga-progress__indicator\"\n style={isIndeterminate ? undefined : { transform: `translateX(${pct - 100}%)` }}\n />\n </ProgressPrimitive.Root>\n );\n}\n\n// ─── 3. Circular Progress (custom SVG) ─── //\n\ntype CircularProgressOwnProps = VariantProps<typeof circularProgressVariants> & {\n value?: number | null;\n max?: number;\n /** Stroke width in px. Defaults to 4 (sm) / 5 (md) / 6 (lg). */\n thickness?: number;\n /**\n * Render the ring as `segments` discrete arcs (a radial stepper) instead of a\n * continuous arc. Pass an integer `>= 2`; values below that fall back to the\n * continuous ring. The number of filled segments is `round(pct × segments)`,\n * so `value={3} max={5} segments={5}` fills 3. Segmented mode is determinate —\n * a `null` value renders 0 filled (no spinner).\n */\n segments?: number;\n /** Render the label inside the ring (`%`, or `filled/segments` when segmented). */\n showLabel?: boolean;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n};\n\ntype CircularProgressProps = CircularProgressOwnProps &\n Omit<React.ComponentProps<'div'>, keyof CircularProgressOwnProps>;\n\nconst CIRCULAR_SIZES = { sm: 32, md: 48, lg: 72 } as const;\nconst CIRCULAR_DEFAULT_THICKNESS = { sm: 4, md: 5, lg: 6 } as const;\n// Fraction of each segment's angular slot left as the gap between segments.\nconst SEGMENT_GAP_FRACTION = 0.16;\n\nfunction CircularProgress({\n value = null,\n max = 100,\n size,\n color,\n thickness,\n segments,\n showLabel = false,\n className,\n ...props\n}: CircularProgressProps) {\n if (process.env.NODE_ENV === 'development' && !props['aria-label'] && !props['aria-labelledby']) {\n // Linear Progress inherits Radix's no-label warning; CircularProgress is a\n // hand-built `role=\"progressbar\"`, so it needs its own. The ring `showLabel`\n // is aria-hidden decoration, not an accessible name.\n console.warn(\n '[dga/Progress] <CircularProgress> has no accessible name. Pass `aria-label` or ' +\n '`aria-labelledby` so screen-reader users know what the progress represents.',\n );\n }\n\n const isIndeterminate = value === null;\n const isSegmented = typeof segments === 'number' && segments >= 2;\n const sizeKey = size ?? 'md';\n const diameter = CIRCULAR_SIZES[sizeKey];\n const strokeWidth = thickness ?? CIRCULAR_DEFAULT_THICKNESS[sizeKey];\n const radius = (diameter - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const center = diameter / 2;\n\n const pct = isIndeterminate ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n const dashOffset = isIndeterminate ? circumference * 0.75 : circumference * (1 - pct / 100);\n\n // Mirror Radix Progress's data-state vocabulary so CSS can use a single\n // selector across linear + circular.\n const state = isIndeterminate ? 'indeterminate' : value >= max ? 'complete' : 'loading';\n\n // Segmented (radial-stepper) geometry: split the ring into `segments` arcs\n // with gaps. Each segment is a single dash of `segLen`, rotated into its slot;\n // the gap is centered so segments stay evenly spaced. Determinate-only.\n const segmentEls =\n isSegmented && segments\n ? (() => {\n const filled = isIndeterminate ? 0 : Math.round((pct / 100) * segments);\n const segAngle = 360 / segments;\n const gapAngle = segAngle * SEGMENT_GAP_FRACTION;\n const segLen = circumference * ((1 - SEGMENT_GAP_FRACTION) / segments);\n return Array.from({ length: segments }, (_, i) => (\n <circle\n key={i}\n className={cn(\n 'ddga-circular-progress__segment',\n i < filled && 'ddga-circular-progress__segment--filled',\n )}\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n // Butt caps, not round: round caps extend strokeWidth/2 past each\n // arc end and would swallow the gap (overlapping at small sizes).\n strokeLinecap=\"butt\"\n strokeDasharray={`${segLen} ${circumference}`}\n transform={`rotate(${-90 + i * segAngle + gapAngle / 2} ${center} ${center})`}\n />\n ));\n })()\n : null;\n\n const labelText = isSegmented\n ? `${segments ? Math.round((pct / 100) * segments) : 0}/${segments}`\n : `${Math.round(pct)}%`;\n\n return (\n <div\n data-slot=\"circular-progress\"\n data-state={state}\n data-segmented={isSegmented ? '' : undefined}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={isIndeterminate ? undefined : value}\n className={cn(circularProgressVariants({ size, color }), className)}\n style={{ inlineSize: diameter, blockSize: diameter }}\n {...props}\n >\n <svg\n className=\"ddga-circular-progress__svg\"\n viewBox={`0 0 ${diameter} ${diameter}`}\n width={diameter}\n height={diameter}\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {isSegmented ? (\n segmentEls\n ) : (\n <>\n <circle\n className=\"ddga-circular-progress__track\"\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n />\n <circle\n className=\"ddga-circular-progress__indicator\"\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n transform={`rotate(-90 ${center} ${center})`}\n />\n </>\n )}\n </svg>\n {showLabel && !isIndeterminate ? (\n <span className=\"ddga-circular-progress__label\" aria-hidden=\"true\">\n {labelText}\n </span>\n ) : null}\n </div>\n );\n}\n\n// ─── 4. Exports ─── //\n\nexport { Progress, CircularProgress, progressVariants, circularProgressVariants };\nexport type { ProgressProps, CircularProgressProps };\n"]}
|
|
File without changes
|