@dev-dga/react 0.12.2 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/{chunk-WRUVDZRI.js → chunk-4S2DSEXR.js} +4 -4
  3. package/dist/{chunk-DWCTUNFU.cjs → chunk-H7DMDBAG.cjs} +7 -2
  4. package/dist/chunk-H7DMDBAG.cjs.map +1 -0
  5. package/dist/{chunk-JAMYRBHS.js → chunk-J53OY747.js} +5 -5
  6. package/dist/{chunk-4WXBRKGZ.cjs → chunk-J7HSAVFF.cjs} +5 -5
  7. package/dist/{chunk-4WXBRKGZ.cjs.map → chunk-J7HSAVFF.cjs.map} +1 -1
  8. package/dist/{chunk-NJIQJHJS.js → chunk-MECGQLHL.js} +4 -4
  9. package/dist/{chunk-K27GNXBF.cjs → chunk-NGDKAG2O.cjs} +4 -4
  10. package/dist/{chunk-K27GNXBF.cjs.map → chunk-NGDKAG2O.cjs.map} +1 -1
  11. package/dist/{chunk-GXF5IZEX.cjs → chunk-P7WYXL4A.cjs} +3 -3
  12. package/dist/{chunk-GXF5IZEX.cjs.map → chunk-P7WYXL4A.cjs.map} +1 -1
  13. package/dist/{chunk-6CDZ7ZBG.js → chunk-SQ7NQVEK.js} +7 -2
  14. package/dist/chunk-SQ7NQVEK.js.map +1 -0
  15. package/dist/{chunk-7GAELGEB.cjs → chunk-TGM4JFWI.cjs} +3 -3
  16. package/dist/{chunk-7GAELGEB.cjs.map → chunk-TGM4JFWI.cjs.map} +1 -1
  17. package/dist/{chunk-EZRPCQSP.js → chunk-WLJHHTE2.js} +7 -7
  18. package/dist/components/Card/Card.cjs +3 -3
  19. package/dist/components/Card/Card.js +2 -2
  20. package/dist/components/Card/index.cjs +3 -3
  21. package/dist/components/Card/index.js +2 -2
  22. package/dist/components/Chip/Chip.cjs +2 -2
  23. package/dist/components/Chip/Chip.js +1 -1
  24. package/dist/components/Chip/index.cjs +2 -2
  25. package/dist/components/Chip/index.js +1 -1
  26. package/dist/components/FileUpload/FileUpload.cjs +3 -3
  27. package/dist/components/FileUpload/FileUpload.js +2 -2
  28. package/dist/components/FileUpload/index.cjs +3 -3
  29. package/dist/components/FileUpload/index.js +2 -2
  30. package/dist/components/Filtration/Filtration.cjs +4 -4
  31. package/dist/components/Filtration/Filtration.js +3 -3
  32. package/dist/components/Filtration/index.cjs +4 -4
  33. package/dist/components/Filtration/index.js +3 -3
  34. package/dist/components/SearchBox/SearchBox.cjs +3 -3
  35. package/dist/components/SearchBox/SearchBox.js +2 -2
  36. package/dist/components/SearchBox/index.cjs +3 -3
  37. package/dist/components/SearchBox/index.js +2 -2
  38. package/dist/index.cjs +52 -52
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.d.cts +2 -1
  41. package/dist/index.d.ts +2 -1
  42. package/dist/index.js +75 -75
  43. package/package.json +3 -3
  44. package/dist/chunk-6CDZ7ZBG.js.map +0 -1
  45. package/dist/chunk-DWCTUNFU.cjs.map +0 -1
  46. /package/dist/{chunk-WRUVDZRI.js.map → chunk-4S2DSEXR.js.map} +0 -0
  47. /package/dist/{chunk-JAMYRBHS.js.map → chunk-J53OY747.js.map} +0 -0
  48. /package/dist/{chunk-NJIQJHJS.js.map → chunk-MECGQLHL.js.map} +0 -0
  49. /package/dist/{chunk-EZRPCQSP.js.map → chunk-WLJHHTE2.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @dev-dga/react
2
2
 
3
+ ## 0.13.0
4
+
5
+ ### Minor Changes
6
+
7
+ - **Chip: new `onColor` prop.** For chips on a colored or dark surface — a white-ramp pill with ink text (SDGA On-color). Style-agnostic: primary and neutral render identically. Additive; existing chips are unchanged.
8
+
9
+ ### Patch Changes
10
+
11
+ - **Slider: SDGA thumb ring.** The thumb now carries the official 1px `border-success` (#067647) ring around its brand-green fill (matching the Platforms Code "Control"), replacing the plain solid circle. Visual only, no API change. (Ships in `@dev-dga/css`.)
12
+ - **Field underline: smoother focus/pressed transition** across all six field controls (text-input, textarea, number-input, dropdown, date-picker, date-range-picker) — now `400ms ease-out` (was 150ms). Visual only. (Ships in `@dev-dga/css`.)
13
+
3
14
  ## 0.12.2
4
15
 
5
16
  ### Patch Changes
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  TextInput
3
3
  } from "./chunk-4HBVLISS.js";
4
- import {
5
- Button
6
- } from "./chunk-GQAX2CH6.js";
7
4
  import {
8
5
  Close,
9
6
  HelpCircleGlyph,
10
7
  Mic,
11
8
  SearchGlyph
12
9
  } from "./chunk-FFGALWM2.js";
10
+ import {
11
+ Button
12
+ } from "./chunk-GQAX2CH6.js";
13
13
  import {
14
14
  cn
15
15
  } from "./chunk-7NTT2UXP.js";
@@ -127,4 +127,4 @@ function SearchBox({
127
127
  export {
128
128
  SearchBox
129
129
  };
130
- //# sourceMappingURL=chunk-WRUVDZRI.js.map
130
+ //# sourceMappingURL=chunk-4S2DSEXR.js.map
@@ -20,6 +20,10 @@ var chipVariants = _classvarianceauthority.cva.call(void 0, "ddga-chip", {
20
20
  },
21
21
  rounded: {
22
22
  true: "ddga-chip--rounded"
23
+ },
24
+ /** For chips on a colored/dark surface: a white-ramp pill with ink text (SDGA On-color). */
25
+ onColor: {
26
+ true: "ddga-chip--on-color"
23
27
  }
24
28
  },
25
29
  defaultVariants: {
@@ -31,6 +35,7 @@ function Chip({
31
35
  variant,
32
36
  size,
33
37
  rounded,
38
+ onColor,
34
39
  selected,
35
40
  defaultSelected = false,
36
41
  onSelectedChange,
@@ -56,7 +61,7 @@ function Chip({
56
61
  "aria-disabled": disabled || void 0,
57
62
  "data-slot": "chip",
58
63
  "aria-pressed": isSelected,
59
- className: _chunkV6MXOJQ4cjs.cn.call(void 0, chipVariants({ variant, size, rounded }), className),
64
+ className: _chunkV6MXOJQ4cjs.cn.call(void 0, chipVariants({ variant, size, rounded, onColor }), className),
60
65
  onClick: (e) => {
61
66
  if (disabled) {
62
67
  e.preventDefault();
@@ -82,4 +87,4 @@ function Chip({
82
87
 
83
88
 
84
89
  exports.chipVariants = chipVariants; exports.Chip = Chip;
85
- //# sourceMappingURL=chunk-DWCTUNFU.cjs.map
90
+ //# sourceMappingURL=chunk-H7DMDBAG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-H7DMDBAG.cjs","../src/components/Chip/Chip.tsx"],"names":[],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-H7DMDBAG.cjs","sourcesContent":[null,"'use client';\n\nimport { useState, type ReactNode } from 'react';\nimport { Slot as SlotPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst chipVariants = cva('ddga-chip', {\n variants: {\n variant: {\n primary: 'ddga-chip--primary',\n neutral: 'ddga-chip--neutral',\n },\n size: {\n sm: 'ddga-chip--sm',\n md: 'ddga-chip--md',\n lg: 'ddga-chip--lg',\n },\n rounded: {\n true: 'ddga-chip--rounded',\n },\n /** For chips on a colored/dark surface: a white-ramp pill with ink text (SDGA On-color). */\n onColor: {\n true: 'ddga-chip--on-color',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n});\n\ninterface ChipProps\n extends Omit<React.ComponentProps<'button'>, 'onChange'>, VariantProps<typeof chipVariants> {\n /** Controlled selected state — drives `aria-pressed` and the filled treatment. */\n selected?: boolean;\n /** Uncontrolled initial selected state. */\n defaultSelected?: boolean;\n /** Called with the next selected value when the chip toggles. */\n onSelectedChange?: (selected: boolean) => void;\n /** Leading icon (inherits the chip text colour; 14px, 16px at `lg`). */\n leadingIcon?: ReactNode;\n /** Trailing icon. */\n trailingIcon?: ReactNode;\n /** Render as the child element (Radix `Slot`) — e.g. wrap a router link. */\n asChild?: boolean;\n}\n\n/**\n * Interactive selectable chip (SDGA \"Chip\") — a toggle button, distinct from the\n * static `Tag` (SDGA \"Tags\"). Selecting fills the chip (`#1B8354` primary / gray-700 neutral).\n */\nfunction Chip({\n variant,\n size,\n rounded,\n onColor,\n selected,\n defaultSelected = false,\n onSelectedChange,\n leadingIcon,\n trailingIcon,\n asChild,\n className,\n children,\n disabled,\n onClick,\n type = 'button',\n ...props\n}: ChipProps) {\n const isControlled = selected !== undefined;\n const [internal, setInternal] = useState(defaultSelected);\n const isSelected = isControlled ? selected : internal;\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n\n return (\n <Comp\n // type/native disabled only apply to <button>; in asChild mode lean on\n // aria-disabled + tabIndex (CSS matches [aria-disabled='true'] too).\n {...(asChild ? {} : { type, disabled })}\n {...(asChild && disabled ? { tabIndex: -1 } : {})}\n aria-disabled={disabled || undefined}\n data-slot=\"chip\"\n aria-pressed={isSelected}\n className={cn(chipVariants({ variant, size, rounded, onColor }), className)}\n onClick={(e) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n if (e.defaultPrevented) return;\n const next = !isSelected;\n if (!isControlled) setInternal(next);\n onSelectedChange?.(next);\n }}\n {...props}\n >\n {leadingIcon != null && (\n <span className=\"ddga-chip__icon\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )}\n {asChild ? (\n <SlotPrimitive.Slottable>{children}</SlotPrimitive.Slottable>\n ) : (\n children != null && <span className=\"ddga-chip__label\">{children}</span>\n )}\n {trailingIcon != null && (\n <span className=\"ddga-chip__icon\" aria-hidden=\"true\">\n {trailingIcon}\n </span>\n )}\n </Comp>\n );\n}\n\nexport { Chip, chipVariants };\nexport type { ChipProps };\n"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SearchBox
3
- } from "./chunk-WRUVDZRI.js";
3
+ } from "./chunk-4S2DSEXR.js";
4
4
  import {
5
5
  Popover,
6
6
  PopoverContent,
@@ -9,14 +9,14 @@ import {
9
9
  import {
10
10
  Checkbox
11
11
  } from "./chunk-TNIRKGXY.js";
12
- import {
13
- Button
14
- } from "./chunk-GQAX2CH6.js";
15
12
  import {
16
13
  Check,
17
14
  ChevronDown,
18
15
  Filter
19
16
  } from "./chunk-FFGALWM2.js";
17
+ import {
18
+ Button
19
+ } from "./chunk-GQAX2CH6.js";
20
20
  import {
21
21
  cn
22
22
  } from "./chunk-7NTT2UXP.js";
@@ -372,4 +372,4 @@ export {
372
372
  FiltrationOption,
373
373
  FiltrationFooter
374
374
  };
375
- //# sourceMappingURL=chunk-JAMYRBHS.js.map
375
+ //# sourceMappingURL=chunk-J53OY747.js.map
@@ -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 _chunk7GAELGEBcjs = require('./chunk-7GAELGEB.cjs');
3
+ var _chunkTGM4JFWIcjs = require('./chunk-TGM4JFWI.cjs');
4
4
 
5
5
 
6
6
 
@@ -11,12 +11,12 @@ var _chunkBNCUXVZFcjs = require('./chunk-BNCUXVZF.cjs');
11
11
  var _chunkFV6E33FYcjs = require('./chunk-FV6E33FY.cjs');
12
12
 
13
13
 
14
- var _chunk5NENDJOMcjs = require('./chunk-5NENDJOM.cjs');
15
14
 
16
15
 
16
+ var _chunkYS2JJ73Mcjs = require('./chunk-YS2JJ73M.cjs');
17
17
 
18
18
 
19
- var _chunkYS2JJ73Mcjs = require('./chunk-YS2JJ73M.cjs');
19
+ var _chunk5NENDJOMcjs = require('./chunk-5NENDJOM.cjs');
20
20
 
21
21
 
22
22
  var _chunkV6MXOJQ4cjs = require('./chunk-V6MXOJQ4.cjs');
@@ -242,7 +242,7 @@ function FiltrationCheckboxFilter({
242
242
  className: _chunkV6MXOJQ4cjs.cn.call(void 0, "ddga-filtration-checkbox-filter", className),
243
243
  children: [
244
244
  searchable ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
245
- _chunk7GAELGEBcjs.SearchBox,
245
+ _chunkTGM4JFWIcjs.SearchBox,
246
246
  {
247
247
  "aria-label": searchLabel,
248
248
  placeholder: searchPlaceholder,
@@ -372,4 +372,4 @@ function FiltrationFooter({
372
372
 
373
373
 
374
374
  exports.filtrationPanelVariants = filtrationPanelVariants; exports.Filtration = Filtration; exports.FiltrationTrigger = FiltrationTrigger; exports.FiltrationResults = FiltrationResults; exports.FiltrationPanel = FiltrationPanel; exports.FiltrationSection = FiltrationSection; exports.FiltrationCheckboxFilter = FiltrationCheckboxFilter; exports.FiltrationOptionList = FiltrationOptionList; exports.FiltrationOption = FiltrationOption; exports.FiltrationFooter = FiltrationFooter;
375
- //# sourceMappingURL=chunk-4WXBRKGZ.cjs.map
375
+ //# sourceMappingURL=chunk-J7HSAVFF.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-4WXBRKGZ.cjs","../src/components/Filtration/Filtration.tsx"],"names":["Fragment"],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-4WXBRKGZ.cjs","sourcesContent":[null,"'use client';\n\nimport {\n Children,\n Fragment,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { RadioGroup as RadioGroupPrimitive } from 'radix-ui';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { Button, type ButtonProps } from '../Button';\nimport { Popover, PopoverTrigger, PopoverContent } from '../Popover';\nimport { Checkbox } from '../Checkbox';\nimport { SearchBox } from '../SearchBox';\nimport { Check, Filter, ChevronDown } from '../../internal/icons';\n\nconst filtrationPanelVariants = cva('ddga-filtration-panel', {\n variants: {\n inline: {\n true: 'ddga-filtration-panel--inline',\n },\n },\n});\n\ninterface FiltrationContextValue {\n /** `true` = floating overlay (Popover); `false` = embedded inline panel. */\n overlay: boolean;\n open: boolean;\n setOpen: (open: boolean) => void;\n}\n\nconst FiltrationContext = createContext<FiltrationContextValue | null>(null);\n\ninterface FiltrationProps {\n /** Floating overlay anchored to the trigger (default) vs an embedded inline panel. */\n overlay?: boolean;\n /** Controlled open state (overlay only). */\n open?: boolean;\n /** Uncontrolled initial open state (overlay only). */\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n}\n\ntype FiltrationTriggerProps = Omit<ButtonProps, 'variant' | 'asChild'>;\n\ninterface FiltrationResultsProps extends React.ComponentProps<'div'> {\n /** Names the applied-filters chip group for assistive tech, e.g. \"Applied filters\". */\n 'aria-label'?: string;\n}\n\ntype FiltrationPanelProps = Omit<React.ComponentProps<typeof PopoverContent>, 'size' | 'arrow'>;\n\ninterface FiltrationSectionProps extends React.ComponentProps<'div'> {\n /** Section heading (Text sm/Semibold). */\n label: ReactNode;\n /** Selected-count badge; rendered via `formatCount`. */\n count?: number;\n /** Maps `count` → the suffix text. Defaults to `(n selections)`. Override for i18n. */\n formatCount?: (count: number) => ReactNode;\n}\n\ninterface FiltrationCheckboxOption {\n value: string;\n label: ReactNode;\n /** Optional trailing count, e.g. number of matching results. */\n count?: number;\n disabled?: boolean;\n}\n\ninterface FiltrationCheckboxFilterProps extends Omit<React.ComponentProps<'div'>, 'defaultValue'> {\n options: FiltrationCheckboxOption[];\n /** Controlled selected values. */\n value?: string[];\n /** Uncontrolled initial selected values. */\n defaultValue?: string[];\n onValueChange?: (next: string[]) => void;\n /** Show a search field that filters options by label. */\n searchable?: boolean;\n searchPlaceholder?: string;\n /** Accessible label for the search field (it has no visible label). */\n searchLabel?: string;\n /** Collapse to the first N options behind a \"Show more\" toggle. */\n collapseAfter?: number;\n /** Maps the hidden-count → the expand button label. Default `Show {n} more`. */\n showMoreLabel?: (remaining: number) => ReactNode;\n showLessLabel?: ReactNode;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n className?: string;\n}\n\ntype FiltrationOptionListProps = Omit<\n React.ComponentProps<typeof RadioGroupPrimitive.Root>,\n 'asChild'\n>;\n\ninterface FiltrationOptionProps extends Omit<\n React.ComponentProps<typeof RadioGroupPrimitive.Item>,\n 'children'\n> {\n children: ReactNode;\n}\n\ninterface FiltrationFooterProps extends React.ComponentProps<'div'> {\n applyLabel?: ReactNode;\n clearLabel?: ReactNode;\n /** Appended to the apply label as `(n)`. */\n appliedCount?: number;\n onApply?: () => void;\n onClear?: () => void;\n /** Close the overlay when Apply is pressed (overlay only). Default `true`. */\n closeOnApply?: boolean;\n}\n\nfunction Filtration({\n overlay = true,\n open,\n defaultOpen,\n onOpenChange,\n children,\n}: FiltrationProps) {\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const actualOpen = isControlled ? open : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const ctx = useMemo<FiltrationContextValue>(\n () => ({ overlay, open: actualOpen, setOpen }),\n [overlay, actualOpen, setOpen],\n );\n\n return (\n <FiltrationContext.Provider value={ctx}>\n {overlay ? (\n <Popover open={actualOpen} onOpenChange={setOpen}>\n {children}\n </Popover>\n ) : (\n children\n )}\n </FiltrationContext.Provider>\n );\n}\n\nfunction FiltrationTrigger({\n size = 'lg',\n startIcon,\n endIcon,\n className,\n children,\n ...props\n}: FiltrationTriggerProps) {\n const ctx = useContext(FiltrationContext);\n const overlay = ctx?.overlay ?? true;\n\n const warned = useRef(false);\n useEffect(() => {\n if (process.env.NODE_ENV !== 'production' && !overlay && !warned.current) {\n warned.current = true;\n console.warn(\n '[@dev-dga/react] <FiltrationTrigger> only renders in overlay mode. In an inline ' +\n '<Filtration overlay={false}> the panel is always visible, so the trigger is omitted.',\n );\n }\n }, [overlay]);\n\n if (!overlay) return null;\n\n const button = (\n <Button\n variant=\"black\"\n size={size}\n startIcon={startIcon ?? <Filter aria-hidden=\"true\" />}\n endIcon={endIcon ?? <ChevronDown aria-hidden=\"true\" />}\n data-slot=\"filtration-trigger\"\n className={cn('ddga-filtration__trigger', className)}\n {...props}\n >\n {children}\n </Button>\n );\n\n return <PopoverTrigger asChild>{button}</PopoverTrigger>;\n}\n\nfunction FiltrationResults({\n className,\n children,\n 'aria-label': ariaLabel,\n ...props\n}: FiltrationResultsProps) {\n if (process.env.NODE_ENV !== 'production' && !ariaLabel && !props['aria-labelledby']) {\n console.warn(\n '[@dev-dga/react] <FiltrationResults> should have an `aria-label` (e.g. \"Applied filters\") so the chip group has an accessible name.',\n );\n }\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel}\n data-slot=\"filtration-results\"\n className={cn('ddga-filtration-results', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// SDGA draws an explicit hairline between every panel child (sections + footer),\n// inset 8px each side and floating in the 8px inter-child gap — not an edge border.\nfunction interleaveDividers(children: ReactNode): ReactNode {\n const items = Children.toArray(children).filter(Boolean);\n return items.map((child, i) => (\n <Fragment key={i}>\n {i > 0 ? <div className=\"ddga-filtration__divider\" aria-hidden=\"true\" /> : null}\n {child}\n </Fragment>\n ));\n}\n\nfunction FiltrationPanel({ className, children, ...props }: FiltrationPanelProps) {\n const ctx = useContext(FiltrationContext);\n const overlay = ctx?.overlay ?? true;\n\n if (overlay) {\n return (\n <PopoverContent\n data-slot=\"filtration-panel\"\n align=\"start\"\n className={cn(filtrationPanelVariants(), className)}\n {...props}\n >\n {interleaveDividers(children)}\n </PopoverContent>\n );\n }\n\n if (process.env.NODE_ENV !== 'production' && !props['aria-label'] && !props['aria-labelledby']) {\n console.warn(\n '[@dev-dga/react] An inline <FiltrationPanel> should have an `aria-label` or `aria-labelledby` so the region has an accessible name.',\n );\n }\n\n return (\n <section\n data-slot=\"filtration-panel\"\n className={cn(filtrationPanelVariants({ inline: true }), className)}\n {...props}\n >\n {interleaveDividers(children)}\n </section>\n );\n}\n\nfunction FiltrationSection({\n label,\n count,\n formatCount = (n) => `(${n} selections)`,\n className,\n children,\n ...props\n}: FiltrationSectionProps) {\n const labelId = useId();\n return (\n <div\n role=\"group\"\n aria-labelledby={labelId}\n data-slot=\"filtration-section\"\n className={cn('ddga-filtration-section', className)}\n {...props}\n >\n <p id={labelId} className=\"ddga-filtration-section__label\">\n {label}\n {count != null ? (\n <span className=\"ddga-filtration-section__count\"> {formatCount(count)}</span>\n ) : null}\n </p>\n <div className=\"ddga-filtration-section__body\">{children}</div>\n </div>\n );\n}\n\nfunction optionText(label: ReactNode, value: string): string {\n return typeof label === 'string' ? label : value;\n}\n\nfunction FiltrationCheckboxFilter({\n options,\n value,\n defaultValue,\n onValueChange,\n searchable = false,\n searchPlaceholder,\n searchLabel = 'Search options',\n collapseAfter,\n showMoreLabel = (remaining) => `Show ${remaining} more`,\n showLessLabel = 'Show less',\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n ...rest\n}: FiltrationCheckboxFilterProps) {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<string[]>(defaultValue ?? []);\n const selected = isControlled ? value : internal;\n\n const [query, setQuery] = useState('');\n const [expanded, setExpanded] = useState(false);\n const listId = useId();\n\n const toggle = (optValue: string) => {\n const next = selected.includes(optValue)\n ? selected.filter((v) => v !== optValue)\n : [...selected, optValue];\n if (!isControlled) setInternal(next);\n onValueChange?.(next);\n };\n\n const filtered = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!searchable || !q) return options;\n return options.filter((o) => optionText(o.label, o.value).toLowerCase().includes(q));\n }, [options, query, searchable]);\n\n const collapsible = collapseAfter != null && filtered.length > collapseAfter;\n const visible = collapsible && !expanded ? filtered.slice(0, collapseAfter) : filtered;\n const remaining = collapsible ? filtered.length - (collapseAfter ?? 0) : 0;\n\n return (\n <div\n {...rest}\n role=\"group\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n data-slot=\"filtration-checkbox-filter\"\n className={cn('ddga-filtration-checkbox-filter', className)}\n >\n {searchable ? (\n <SearchBox\n aria-label={searchLabel}\n placeholder={searchPlaceholder}\n voiceSearch={false}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n />\n ) : null}\n <div id={listId} className=\"ddga-filtration-checkbox-filter__list\">\n {visible.map((opt) => (\n <Checkbox\n key={opt.value}\n size=\"sm\"\n value={opt.value}\n checked={selected.includes(opt.value)}\n onCheckedChange={() => toggle(opt.value)}\n disabled={opt.disabled}\n label={\n <>\n {opt.label}\n {opt.count != null ? (\n <span className=\"ddga-filtration-checkbox-filter__count\" aria-hidden=\"true\">\n {' '}\n ({opt.count})\n </span>\n ) : null}\n </>\n }\n />\n ))}\n </div>\n {collapsible ? (\n <button\n type=\"button\"\n className=\"ddga-filtration-checkbox-filter__more\"\n aria-expanded={expanded}\n aria-controls={listId}\n onClick={() => setExpanded((prev) => !prev)}\n >\n {expanded ? showLessLabel : showMoreLabel(remaining)}\n <ChevronDown\n className={cn('ddga-filtration-checkbox-filter__more-icon', expanded && 'is-open')}\n aria-hidden=\"true\"\n />\n </button>\n ) : null}\n </div>\n );\n}\n\nfunction FiltrationOptionList({ className, ...props }: FiltrationOptionListProps) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"filtration-option-list\"\n className={cn('ddga-filtration-option-list', className)}\n {...props}\n />\n );\n}\n\nfunction FiltrationOption({ className, children, ...props }: FiltrationOptionProps) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"filtration-option\"\n className={cn('ddga-filtration-option', className)}\n {...props}\n >\n <span className=\"ddga-filtration-option__label\">{children}</span>\n <RadioGroupPrimitive.Indicator className=\"ddga-filtration-option__indicator\">\n <Check className=\"ddga-filtration-option__check\" aria-hidden=\"true\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nfunction FiltrationFooter({\n applyLabel = 'Apply Filters',\n clearLabel = 'Clear Filter',\n appliedCount,\n onApply,\n onClear,\n closeOnApply = true,\n className,\n ...props\n}: FiltrationFooterProps) {\n const ctx = useContext(FiltrationContext);\n\n const handleApply = () => {\n onApply?.();\n if (closeOnApply && ctx?.overlay) ctx.setOpen(false);\n };\n\n return (\n <div\n data-slot=\"filtration-footer\"\n className={cn('ddga-filtration-footer', className)}\n {...props}\n >\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"ddga-filtration-footer__apply\"\n onClick={handleApply}\n >\n {applyLabel}\n {appliedCount != null ? ` (${appliedCount})` : ''}\n </Button>\n <Button variant=\"ghost\" size=\"lg\" onClick={onClear}>\n {clearLabel}\n </Button>\n </div>\n );\n}\n\nexport {\n Filtration,\n FiltrationTrigger,\n FiltrationResults,\n FiltrationPanel,\n FiltrationSection,\n FiltrationCheckboxFilter,\n FiltrationOptionList,\n FiltrationOption,\n FiltrationFooter,\n filtrationPanelVariants,\n};\nexport type {\n FiltrationProps,\n FiltrationTriggerProps,\n FiltrationResultsProps,\n FiltrationPanelProps,\n FiltrationSectionProps,\n FiltrationCheckboxFilterProps,\n FiltrationCheckboxOption,\n FiltrationOptionListProps,\n FiltrationOptionProps,\n FiltrationFooterProps,\n};\n"]}
1
+ {"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-J7HSAVFF.cjs","../src/components/Filtration/Filtration.tsx"],"names":["Fragment"],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-J7HSAVFF.cjs","sourcesContent":[null,"'use client';\n\nimport {\n Children,\n Fragment,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { RadioGroup as RadioGroupPrimitive } from 'radix-ui';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { Button, type ButtonProps } from '../Button';\nimport { Popover, PopoverTrigger, PopoverContent } from '../Popover';\nimport { Checkbox } from '../Checkbox';\nimport { SearchBox } from '../SearchBox';\nimport { Check, Filter, ChevronDown } from '../../internal/icons';\n\nconst filtrationPanelVariants = cva('ddga-filtration-panel', {\n variants: {\n inline: {\n true: 'ddga-filtration-panel--inline',\n },\n },\n});\n\ninterface FiltrationContextValue {\n /** `true` = floating overlay (Popover); `false` = embedded inline panel. */\n overlay: boolean;\n open: boolean;\n setOpen: (open: boolean) => void;\n}\n\nconst FiltrationContext = createContext<FiltrationContextValue | null>(null);\n\ninterface FiltrationProps {\n /** Floating overlay anchored to the trigger (default) vs an embedded inline panel. */\n overlay?: boolean;\n /** Controlled open state (overlay only). */\n open?: boolean;\n /** Uncontrolled initial open state (overlay only). */\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n}\n\ntype FiltrationTriggerProps = Omit<ButtonProps, 'variant' | 'asChild'>;\n\ninterface FiltrationResultsProps extends React.ComponentProps<'div'> {\n /** Names the applied-filters chip group for assistive tech, e.g. \"Applied filters\". */\n 'aria-label'?: string;\n}\n\ntype FiltrationPanelProps = Omit<React.ComponentProps<typeof PopoverContent>, 'size' | 'arrow'>;\n\ninterface FiltrationSectionProps extends React.ComponentProps<'div'> {\n /** Section heading (Text sm/Semibold). */\n label: ReactNode;\n /** Selected-count badge; rendered via `formatCount`. */\n count?: number;\n /** Maps `count` → the suffix text. Defaults to `(n selections)`. Override for i18n. */\n formatCount?: (count: number) => ReactNode;\n}\n\ninterface FiltrationCheckboxOption {\n value: string;\n label: ReactNode;\n /** Optional trailing count, e.g. number of matching results. */\n count?: number;\n disabled?: boolean;\n}\n\ninterface FiltrationCheckboxFilterProps extends Omit<React.ComponentProps<'div'>, 'defaultValue'> {\n options: FiltrationCheckboxOption[];\n /** Controlled selected values. */\n value?: string[];\n /** Uncontrolled initial selected values. */\n defaultValue?: string[];\n onValueChange?: (next: string[]) => void;\n /** Show a search field that filters options by label. */\n searchable?: boolean;\n searchPlaceholder?: string;\n /** Accessible label for the search field (it has no visible label). */\n searchLabel?: string;\n /** Collapse to the first N options behind a \"Show more\" toggle. */\n collapseAfter?: number;\n /** Maps the hidden-count → the expand button label. Default `Show {n} more`. */\n showMoreLabel?: (remaining: number) => ReactNode;\n showLessLabel?: ReactNode;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n className?: string;\n}\n\ntype FiltrationOptionListProps = Omit<\n React.ComponentProps<typeof RadioGroupPrimitive.Root>,\n 'asChild'\n>;\n\ninterface FiltrationOptionProps extends Omit<\n React.ComponentProps<typeof RadioGroupPrimitive.Item>,\n 'children'\n> {\n children: ReactNode;\n}\n\ninterface FiltrationFooterProps extends React.ComponentProps<'div'> {\n applyLabel?: ReactNode;\n clearLabel?: ReactNode;\n /** Appended to the apply label as `(n)`. */\n appliedCount?: number;\n onApply?: () => void;\n onClear?: () => void;\n /** Close the overlay when Apply is pressed (overlay only). Default `true`. */\n closeOnApply?: boolean;\n}\n\nfunction Filtration({\n overlay = true,\n open,\n defaultOpen,\n onOpenChange,\n children,\n}: FiltrationProps) {\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const actualOpen = isControlled ? open : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const ctx = useMemo<FiltrationContextValue>(\n () => ({ overlay, open: actualOpen, setOpen }),\n [overlay, actualOpen, setOpen],\n );\n\n return (\n <FiltrationContext.Provider value={ctx}>\n {overlay ? (\n <Popover open={actualOpen} onOpenChange={setOpen}>\n {children}\n </Popover>\n ) : (\n children\n )}\n </FiltrationContext.Provider>\n );\n}\n\nfunction FiltrationTrigger({\n size = 'lg',\n startIcon,\n endIcon,\n className,\n children,\n ...props\n}: FiltrationTriggerProps) {\n const ctx = useContext(FiltrationContext);\n const overlay = ctx?.overlay ?? true;\n\n const warned = useRef(false);\n useEffect(() => {\n if (process.env.NODE_ENV !== 'production' && !overlay && !warned.current) {\n warned.current = true;\n console.warn(\n '[@dev-dga/react] <FiltrationTrigger> only renders in overlay mode. In an inline ' +\n '<Filtration overlay={false}> the panel is always visible, so the trigger is omitted.',\n );\n }\n }, [overlay]);\n\n if (!overlay) return null;\n\n const button = (\n <Button\n variant=\"black\"\n size={size}\n startIcon={startIcon ?? <Filter aria-hidden=\"true\" />}\n endIcon={endIcon ?? <ChevronDown aria-hidden=\"true\" />}\n data-slot=\"filtration-trigger\"\n className={cn('ddga-filtration__trigger', className)}\n {...props}\n >\n {children}\n </Button>\n );\n\n return <PopoverTrigger asChild>{button}</PopoverTrigger>;\n}\n\nfunction FiltrationResults({\n className,\n children,\n 'aria-label': ariaLabel,\n ...props\n}: FiltrationResultsProps) {\n if (process.env.NODE_ENV !== 'production' && !ariaLabel && !props['aria-labelledby']) {\n console.warn(\n '[@dev-dga/react] <FiltrationResults> should have an `aria-label` (e.g. \"Applied filters\") so the chip group has an accessible name.',\n );\n }\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel}\n data-slot=\"filtration-results\"\n className={cn('ddga-filtration-results', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// SDGA draws an explicit hairline between every panel child (sections + footer),\n// inset 8px each side and floating in the 8px inter-child gap — not an edge border.\nfunction interleaveDividers(children: ReactNode): ReactNode {\n const items = Children.toArray(children).filter(Boolean);\n return items.map((child, i) => (\n <Fragment key={i}>\n {i > 0 ? <div className=\"ddga-filtration__divider\" aria-hidden=\"true\" /> : null}\n {child}\n </Fragment>\n ));\n}\n\nfunction FiltrationPanel({ className, children, ...props }: FiltrationPanelProps) {\n const ctx = useContext(FiltrationContext);\n const overlay = ctx?.overlay ?? true;\n\n if (overlay) {\n return (\n <PopoverContent\n data-slot=\"filtration-panel\"\n align=\"start\"\n className={cn(filtrationPanelVariants(), className)}\n {...props}\n >\n {interleaveDividers(children)}\n </PopoverContent>\n );\n }\n\n if (process.env.NODE_ENV !== 'production' && !props['aria-label'] && !props['aria-labelledby']) {\n console.warn(\n '[@dev-dga/react] An inline <FiltrationPanel> should have an `aria-label` or `aria-labelledby` so the region has an accessible name.',\n );\n }\n\n return (\n <section\n data-slot=\"filtration-panel\"\n className={cn(filtrationPanelVariants({ inline: true }), className)}\n {...props}\n >\n {interleaveDividers(children)}\n </section>\n );\n}\n\nfunction FiltrationSection({\n label,\n count,\n formatCount = (n) => `(${n} selections)`,\n className,\n children,\n ...props\n}: FiltrationSectionProps) {\n const labelId = useId();\n return (\n <div\n role=\"group\"\n aria-labelledby={labelId}\n data-slot=\"filtration-section\"\n className={cn('ddga-filtration-section', className)}\n {...props}\n >\n <p id={labelId} className=\"ddga-filtration-section__label\">\n {label}\n {count != null ? (\n <span className=\"ddga-filtration-section__count\"> {formatCount(count)}</span>\n ) : null}\n </p>\n <div className=\"ddga-filtration-section__body\">{children}</div>\n </div>\n );\n}\n\nfunction optionText(label: ReactNode, value: string): string {\n return typeof label === 'string' ? label : value;\n}\n\nfunction FiltrationCheckboxFilter({\n options,\n value,\n defaultValue,\n onValueChange,\n searchable = false,\n searchPlaceholder,\n searchLabel = 'Search options',\n collapseAfter,\n showMoreLabel = (remaining) => `Show ${remaining} more`,\n showLessLabel = 'Show less',\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n ...rest\n}: FiltrationCheckboxFilterProps) {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<string[]>(defaultValue ?? []);\n const selected = isControlled ? value : internal;\n\n const [query, setQuery] = useState('');\n const [expanded, setExpanded] = useState(false);\n const listId = useId();\n\n const toggle = (optValue: string) => {\n const next = selected.includes(optValue)\n ? selected.filter((v) => v !== optValue)\n : [...selected, optValue];\n if (!isControlled) setInternal(next);\n onValueChange?.(next);\n };\n\n const filtered = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!searchable || !q) return options;\n return options.filter((o) => optionText(o.label, o.value).toLowerCase().includes(q));\n }, [options, query, searchable]);\n\n const collapsible = collapseAfter != null && filtered.length > collapseAfter;\n const visible = collapsible && !expanded ? filtered.slice(0, collapseAfter) : filtered;\n const remaining = collapsible ? filtered.length - (collapseAfter ?? 0) : 0;\n\n return (\n <div\n {...rest}\n role=\"group\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n data-slot=\"filtration-checkbox-filter\"\n className={cn('ddga-filtration-checkbox-filter', className)}\n >\n {searchable ? (\n <SearchBox\n aria-label={searchLabel}\n placeholder={searchPlaceholder}\n voiceSearch={false}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n />\n ) : null}\n <div id={listId} className=\"ddga-filtration-checkbox-filter__list\">\n {visible.map((opt) => (\n <Checkbox\n key={opt.value}\n size=\"sm\"\n value={opt.value}\n checked={selected.includes(opt.value)}\n onCheckedChange={() => toggle(opt.value)}\n disabled={opt.disabled}\n label={\n <>\n {opt.label}\n {opt.count != null ? (\n <span className=\"ddga-filtration-checkbox-filter__count\" aria-hidden=\"true\">\n {' '}\n ({opt.count})\n </span>\n ) : null}\n </>\n }\n />\n ))}\n </div>\n {collapsible ? (\n <button\n type=\"button\"\n className=\"ddga-filtration-checkbox-filter__more\"\n aria-expanded={expanded}\n aria-controls={listId}\n onClick={() => setExpanded((prev) => !prev)}\n >\n {expanded ? showLessLabel : showMoreLabel(remaining)}\n <ChevronDown\n className={cn('ddga-filtration-checkbox-filter__more-icon', expanded && 'is-open')}\n aria-hidden=\"true\"\n />\n </button>\n ) : null}\n </div>\n );\n}\n\nfunction FiltrationOptionList({ className, ...props }: FiltrationOptionListProps) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"filtration-option-list\"\n className={cn('ddga-filtration-option-list', className)}\n {...props}\n />\n );\n}\n\nfunction FiltrationOption({ className, children, ...props }: FiltrationOptionProps) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"filtration-option\"\n className={cn('ddga-filtration-option', className)}\n {...props}\n >\n <span className=\"ddga-filtration-option__label\">{children}</span>\n <RadioGroupPrimitive.Indicator className=\"ddga-filtration-option__indicator\">\n <Check className=\"ddga-filtration-option__check\" aria-hidden=\"true\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nfunction FiltrationFooter({\n applyLabel = 'Apply Filters',\n clearLabel = 'Clear Filter',\n appliedCount,\n onApply,\n onClear,\n closeOnApply = true,\n className,\n ...props\n}: FiltrationFooterProps) {\n const ctx = useContext(FiltrationContext);\n\n const handleApply = () => {\n onApply?.();\n if (closeOnApply && ctx?.overlay) ctx.setOpen(false);\n };\n\n return (\n <div\n data-slot=\"filtration-footer\"\n className={cn('ddga-filtration-footer', className)}\n {...props}\n >\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"ddga-filtration-footer__apply\"\n onClick={handleApply}\n >\n {applyLabel}\n {appliedCount != null ? ` (${appliedCount})` : ''}\n </Button>\n <Button variant=\"ghost\" size=\"lg\" onClick={onClear}>\n {clearLabel}\n </Button>\n </div>\n );\n}\n\nexport {\n Filtration,\n FiltrationTrigger,\n FiltrationResults,\n FiltrationPanel,\n FiltrationSection,\n FiltrationCheckboxFilter,\n FiltrationOptionList,\n FiltrationOption,\n FiltrationFooter,\n filtrationPanelVariants,\n};\nexport type {\n FiltrationProps,\n FiltrationTriggerProps,\n FiltrationResultsProps,\n FiltrationPanelProps,\n FiltrationSectionProps,\n FiltrationCheckboxFilterProps,\n FiltrationCheckboxOption,\n FiltrationOptionListProps,\n FiltrationOptionProps,\n FiltrationFooterProps,\n};\n"]}
@@ -1,10 +1,10 @@
1
- import {
2
- Button
3
- } from "./chunk-GQAX2CH6.js";
4
1
  import {
5
2
  Check,
6
3
  ChevronDown
7
4
  } from "./chunk-FFGALWM2.js";
5
+ import {
6
+ Button
7
+ } from "./chunk-GQAX2CH6.js";
8
8
  import {
9
9
  cn
10
10
  } from "./chunk-7NTT2UXP.js";
@@ -261,4 +261,4 @@ export {
261
261
  CardFooter,
262
262
  CardExpandableContent
263
263
  };
264
- //# sourceMappingURL=chunk-NJIQJHJS.js.map
264
+ //# sourceMappingURL=chunk-MECGQLHL.js.map
@@ -1,15 +1,15 @@
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 _chunk5NENDJOMcjs = require('./chunk-5NENDJOM.cjs');
4
3
 
5
4
 
6
- var _chunkJCOUZVG3cjs = require('./chunk-JCOUZVG3.cjs');
7
5
 
6
+ var _chunkYS2JJ73Mcjs = require('./chunk-YS2JJ73M.cjs');
8
7
 
9
8
 
9
+ var _chunk5NENDJOMcjs = require('./chunk-5NENDJOM.cjs');
10
10
 
11
11
 
12
- var _chunkYS2JJ73Mcjs = require('./chunk-YS2JJ73M.cjs');
12
+ var _chunkJCOUZVG3cjs = require('./chunk-JCOUZVG3.cjs');
13
13
 
14
14
 
15
15
  var _chunk3UT22WQMcjs = require('./chunk-3UT22WQM.cjs');
@@ -269,4 +269,4 @@ function FileUpload({
269
269
 
270
270
 
271
271
  exports.FileUpload = FileUpload;
272
- //# sourceMappingURL=chunk-K27GNXBF.cjs.map
272
+ //# sourceMappingURL=chunk-NGDKAG2O.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-K27GNXBF.cjs","../src/components/FileUpload/FileUpload.tsx"],"names":[],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-K27GNXBF.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 { Spinner } from '../Spinner';\nimport { Upload, Check, Exclamation, Close } from '../../internal/icons';\n\ntype FileStatus = '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`, and assigning a stable `id`\n * (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 `'uploading'`. Drives the per-row indicator. */\n status?: FileStatus;\n /** Shown in the row's second line (red) while `status === 'error'`. */\n error?: string;\n}\n\ninterface FileRejection {\n file: File;\n errors: RejectionCode[];\n}\n\ninterface FileUploadProps extends Omit<\n React.ComponentProps<'input'>,\n | 'onChange'\n | 'type'\n | 'accept'\n | 'multiple'\n | 'required'\n | 'disabled'\n | 'className'\n | 'id'\n | 'children'\n | 'title'\n> {\n variant?: 'dropzone' | 'button';\n\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 / button 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 title?: ReactNode;\n description?: ReactNode;\n buttonLabel?: 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 /** 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\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 last: only an otherwise-valid file consumes a slot.\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\nfunction FileRow({\n item,\n onRemove,\n removeLabel,\n}: {\n item: UploadFile;\n onRemove?: (id: string) => void;\n removeLabel: string;\n}) {\n const status = item.status ?? 'uploading';\n return (\n <li\n data-slot=\"file-upload-item\"\n data-status={status}\n className={cn(\n 'ddga-file-upload__file',\n status === 'error' && 'ddga-file-upload__file--error',\n )}\n >\n <div className=\"ddga-file-upload__file-main\">\n {status === 'uploading' ? (\n <span className=\"ddga-file-upload__file-indicator ddga-file-upload__file-indicator--loading\">\n <Spinner aria-label={`Uploading ${item.file.name}`} />\n </span>\n ) : (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'ddga-file-upload__file-indicator',\n `ddga-file-upload__file-indicator--${status}`,\n )}\n >\n {status === 'success' ? <Check /> : <Exclamation />}\n </span>\n )}\n\n <span className=\"ddga-file-upload__file-name\" dir=\"auto\" title={item.file.name}>\n {item.file.name}\n </span>\n\n {onRemove && (\n <button\n type=\"button\"\n className=\"ddga-file-upload__file-remove\"\n aria-label={`${removeLabel}: ${item.file.name}`}\n onClick={() => onRemove(item.id)}\n >\n <Close aria-hidden=\"true\" />\n </button>\n )}\n </div>\n\n {status === 'error' && item.error && (\n <div className=\"ddga-file-upload__file-error-row\">\n <span role=\"alert\" className=\"ddga-file-upload__file-error\">\n {item.error}\n </span>\n </div>\n )}\n </li>\n );\n}\n\nfunction FileUpload({\n variant = 'dropzone',\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 title = 'Drag and drop files here to upload',\n description,\n buttonLabel = 'Browse Files',\n errorMessage,\n error,\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, hasErrorMessage, controlProps } = useFieldA11y({\n name: 'FileUpload',\n id: externalId,\n label,\n error,\n errorMessage,\n helperText: description,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby'],\n });\n\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 openPicker() {\n if (!disabled) inputRef.current?.click();\n }\n\n function handleInputChange(event: React.ChangeEvent<HTMLInputElement>) {\n process(Array.from(event.target.files ?? []));\n // Reset so re-selecting the same file 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 bubbling from descendants.\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n setIsDragging(false);\n }\n }\n\n const labelNode = label && (\n <label htmlFor={fieldId} className=\"ddga-file-upload__label\">\n {required && (\n <span aria-hidden=\"true\" className=\"ddga-file-upload__required\">\n *\n </span>\n )}\n {label}\n </label>\n );\n\n const descriptionNode = description && (\n <span id={helperId} className=\"ddga-file-upload__description\">\n {description}\n </span>\n );\n\n const fileInput = (\n <input\n {...props}\n {...controlProps}\n ref={inputRef}\n type=\"file\"\n tabIndex={-1}\n className=\"ddga-file-upload__input\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n required={required}\n onChange={handleInputChange}\n // Guard the openPicker() recursion: the programmatic input.click() would\n // bubble back to the dropzone's onClick.\n onClick={(event) => event.stopPropagation()}\n data-slot=\"file-upload-input\"\n />\n );\n\n // SDGA Single: the file row replaces the trigger once the one file is chosen.\n const showTrigger = variant === 'dropzone' || multiple || files.length === 0;\n\n return (\n <div\n data-slot=\"file-upload-field\"\n data-variant={variant}\n className={cn('ddga-field', 'ddga-file-upload', className)}\n >\n {variant === 'dropzone' ? (\n <>\n {labelNode}\n <div\n data-slot=\"file-upload-dropzone\"\n className=\"ddga-file-upload__dropzone\"\n data-dragging={isDragging || undefined}\n data-disabled={disabled || undefined}\n aria-disabled={disabled || undefined}\n onClick={openPicker}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <svg className=\"ddga-file-upload__border\" aria-hidden=\"true\" focusable=\"false\">\n <rect width=\"100%\" height=\"100%\" rx=\"4\" ry=\"4\" />\n </svg>\n <Upload className=\"ddga-file-upload__icon\" aria-hidden=\"true\" />\n <div className=\"ddga-file-upload__copy\">\n <span className=\"ddga-file-upload__title\">{title}</span>\n {descriptionNode}\n </div>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"md\"\n disabled={disabled}\n className=\"ddga-file-upload__browse\"\n onClick={(event) => {\n event.stopPropagation();\n openPicker();\n }}\n >\n {buttonLabel}\n </Button>\n {fileInput}\n </div>\n </>\n ) : (\n <>\n <div className=\"ddga-file-upload__header\">\n {labelNode}\n {descriptionNode}\n </div>\n {showTrigger && (\n <Button\n type=\"button\"\n variant=\"black\"\n size=\"md\"\n disabled={disabled}\n className=\"ddga-file-upload__browse\"\n onClick={openPicker}\n >\n {buttonLabel}\n </Button>\n )}\n {fileInput}\n </>\n )}\n\n {hasErrorMessage && (\n <FieldMessage id={errorId} variant=\"error\">\n {errorMessage}\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 <FileRow key={item.id} item={item} onRemove={onRemove} removeLabel={removeLabel} />\n ))}\n </ul>\n )}\n </div>\n );\n}\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-NGDKAG2O.cjs","../src/components/FileUpload/FileUpload.tsx"],"names":[],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-NGDKAG2O.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 { Spinner } from '../Spinner';\nimport { Upload, Check, Exclamation, Close } from '../../internal/icons';\n\ntype FileStatus = '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`, and assigning a stable `id`\n * (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 `'uploading'`. Drives the per-row indicator. */\n status?: FileStatus;\n /** Shown in the row's second line (red) while `status === 'error'`. */\n error?: string;\n}\n\ninterface FileRejection {\n file: File;\n errors: RejectionCode[];\n}\n\ninterface FileUploadProps extends Omit<\n React.ComponentProps<'input'>,\n | 'onChange'\n | 'type'\n | 'accept'\n | 'multiple'\n | 'required'\n | 'disabled'\n | 'className'\n | 'id'\n | 'children'\n | 'title'\n> {\n variant?: 'dropzone' | 'button';\n\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 / button 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 title?: ReactNode;\n description?: ReactNode;\n buttonLabel?: 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 /** 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\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 last: only an otherwise-valid file consumes a slot.\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\nfunction FileRow({\n item,\n onRemove,\n removeLabel,\n}: {\n item: UploadFile;\n onRemove?: (id: string) => void;\n removeLabel: string;\n}) {\n const status = item.status ?? 'uploading';\n return (\n <li\n data-slot=\"file-upload-item\"\n data-status={status}\n className={cn(\n 'ddga-file-upload__file',\n status === 'error' && 'ddga-file-upload__file--error',\n )}\n >\n <div className=\"ddga-file-upload__file-main\">\n {status === 'uploading' ? (\n <span className=\"ddga-file-upload__file-indicator ddga-file-upload__file-indicator--loading\">\n <Spinner aria-label={`Uploading ${item.file.name}`} />\n </span>\n ) : (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'ddga-file-upload__file-indicator',\n `ddga-file-upload__file-indicator--${status}`,\n )}\n >\n {status === 'success' ? <Check /> : <Exclamation />}\n </span>\n )}\n\n <span className=\"ddga-file-upload__file-name\" dir=\"auto\" title={item.file.name}>\n {item.file.name}\n </span>\n\n {onRemove && (\n <button\n type=\"button\"\n className=\"ddga-file-upload__file-remove\"\n aria-label={`${removeLabel}: ${item.file.name}`}\n onClick={() => onRemove(item.id)}\n >\n <Close aria-hidden=\"true\" />\n </button>\n )}\n </div>\n\n {status === 'error' && item.error && (\n <div className=\"ddga-file-upload__file-error-row\">\n <span role=\"alert\" className=\"ddga-file-upload__file-error\">\n {item.error}\n </span>\n </div>\n )}\n </li>\n );\n}\n\nfunction FileUpload({\n variant = 'dropzone',\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 title = 'Drag and drop files here to upload',\n description,\n buttonLabel = 'Browse Files',\n errorMessage,\n error,\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, hasErrorMessage, controlProps } = useFieldA11y({\n name: 'FileUpload',\n id: externalId,\n label,\n error,\n errorMessage,\n helperText: description,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby'],\n });\n\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 openPicker() {\n if (!disabled) inputRef.current?.click();\n }\n\n function handleInputChange(event: React.ChangeEvent<HTMLInputElement>) {\n process(Array.from(event.target.files ?? []));\n // Reset so re-selecting the same file 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 bubbling from descendants.\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n setIsDragging(false);\n }\n }\n\n const labelNode = label && (\n <label htmlFor={fieldId} className=\"ddga-file-upload__label\">\n {required && (\n <span aria-hidden=\"true\" className=\"ddga-file-upload__required\">\n *\n </span>\n )}\n {label}\n </label>\n );\n\n const descriptionNode = description && (\n <span id={helperId} className=\"ddga-file-upload__description\">\n {description}\n </span>\n );\n\n const fileInput = (\n <input\n {...props}\n {...controlProps}\n ref={inputRef}\n type=\"file\"\n tabIndex={-1}\n className=\"ddga-file-upload__input\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n required={required}\n onChange={handleInputChange}\n // Guard the openPicker() recursion: the programmatic input.click() would\n // bubble back to the dropzone's onClick.\n onClick={(event) => event.stopPropagation()}\n data-slot=\"file-upload-input\"\n />\n );\n\n // SDGA Single: the file row replaces the trigger once the one file is chosen.\n const showTrigger = variant === 'dropzone' || multiple || files.length === 0;\n\n return (\n <div\n data-slot=\"file-upload-field\"\n data-variant={variant}\n className={cn('ddga-field', 'ddga-file-upload', className)}\n >\n {variant === 'dropzone' ? (\n <>\n {labelNode}\n <div\n data-slot=\"file-upload-dropzone\"\n className=\"ddga-file-upload__dropzone\"\n data-dragging={isDragging || undefined}\n data-disabled={disabled || undefined}\n aria-disabled={disabled || undefined}\n onClick={openPicker}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <svg className=\"ddga-file-upload__border\" aria-hidden=\"true\" focusable=\"false\">\n <rect width=\"100%\" height=\"100%\" rx=\"4\" ry=\"4\" />\n </svg>\n <Upload className=\"ddga-file-upload__icon\" aria-hidden=\"true\" />\n <div className=\"ddga-file-upload__copy\">\n <span className=\"ddga-file-upload__title\">{title}</span>\n {descriptionNode}\n </div>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"md\"\n disabled={disabled}\n className=\"ddga-file-upload__browse\"\n onClick={(event) => {\n event.stopPropagation();\n openPicker();\n }}\n >\n {buttonLabel}\n </Button>\n {fileInput}\n </div>\n </>\n ) : (\n <>\n <div className=\"ddga-file-upload__header\">\n {labelNode}\n {descriptionNode}\n </div>\n {showTrigger && (\n <Button\n type=\"button\"\n variant=\"black\"\n size=\"md\"\n disabled={disabled}\n className=\"ddga-file-upload__browse\"\n onClick={openPicker}\n >\n {buttonLabel}\n </Button>\n )}\n {fileInput}\n </>\n )}\n\n {hasErrorMessage && (\n <FieldMessage id={errorId} variant=\"error\">\n {errorMessage}\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 <FileRow key={item.id} item={item} onRemove={onRemove} removeLabel={removeLabel} />\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nexport { FileUpload };\nexport type { FileUploadProps, UploadFile, FileRejection, FileStatus, RejectionCode };\n"]}
@@ -1,10 +1,10 @@
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 _chunk5NENDJOMcjs = require('./chunk-5NENDJOM.cjs');
4
3
 
4
+ var _chunkYS2JJ73Mcjs = require('./chunk-YS2JJ73M.cjs');
5
5
 
6
6
 
7
- var _chunkYS2JJ73Mcjs = require('./chunk-YS2JJ73M.cjs');
7
+ var _chunk5NENDJOMcjs = require('./chunk-5NENDJOM.cjs');
8
8
 
9
9
 
10
10
  var _chunkV6MXOJQ4cjs = require('./chunk-V6MXOJQ4.cjs');
@@ -261,4 +261,4 @@ function CardExpandableContent({ asChild, className, ...props }) {
261
261
 
262
262
 
263
263
  exports.cardVariants = cardVariants; exports.Card = Card; exports.CardImage = CardImage; exports.CardHeader = CardHeader; exports.CardIcon = CardIcon; exports.CardTitle = CardTitle; exports.CardDescription = CardDescription; exports.CardContent = CardContent; exports.CardFooter = CardFooter; exports.CardExpandableContent = CardExpandableContent;
264
- //# sourceMappingURL=chunk-GXF5IZEX.cjs.map
264
+ //# sourceMappingURL=chunk-P7WYXL4A.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-GXF5IZEX.cjs","../src/components/Card/Card.tsx"],"names":[],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-GXF5IZEX.cjs","sourcesContent":[null,"'use client';\n\nimport { useState, useId, useContext, createContext } from 'react';\nimport { Slot as SlotPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { Check, ChevronDown } from '../../internal/icons';\nimport { Button } from '../Button';\n\nconst cardVariants = cva('ddga-card', {\n variants: {\n variant: {\n default: 'ddga-card--default',\n outline: 'ddga-card--outline',\n elevated: 'ddga-card--elevated',\n plain: 'ddga-card--plain',\n filled: 'ddga-card--filled',\n gradient: 'ddga-card--gradient',\n ghost: 'ddga-card--ghost',\n },\n padding: {\n sm: 'ddga-card--padding-sm',\n md: 'ddga-card--padding-md',\n lg: 'ddga-card--padding-lg',\n },\n orientation: {\n vertical: 'ddga-card--vertical',\n horizontal: 'ddga-card--horizontal',\n },\n interactive: {\n true: 'ddga-card--interactive',\n },\n },\n defaultVariants: {\n variant: 'default',\n padding: 'md',\n orientation: 'vertical',\n },\n});\n\n// Shares expanded state + content id between the chevron toggle and CardExpandableContent.\nconst CardContext = createContext<{ expanded: boolean; contentId: string } | null>(null);\n\ninterface CardProps extends React.ComponentProps<'div'>, VariantProps<typeof cardVariants> {\n /** Render as the single child element instead of a `<div>` (see Button). */\n asChild?: boolean;\n /**\n * DGA Disabled state — mutes the surface (gray-200 bg / gray-400 text + icon)\n * and marks the card `aria-disabled`. Suppresses Selectable toggling.\n */\n disabled?: boolean;\n /**\n * DGA Type=Selectable — the whole card becomes a checkbox (`role=\"checkbox\"`,\n * Space toggles) with a checkbox indicator at the top inline-end. Controlled\n * via `selected` or uncontrolled via `defaultSelected`. Ignores `asChild`.\n */\n selectable?: boolean;\n /** Controlled selected state (Selectable). */\n selected?: boolean;\n /** Uncontrolled initial selected state (Selectable). */\n defaultSelected?: boolean;\n /** Fires with the next selected value when the user toggles a Selectable card. */\n onSelectedChange?: (selected: boolean) => void;\n /**\n * DGA Type=Expandable — renders a chevron toggle (icon-only Subtle button) at\n * the bottom inline-end that shows/hides a `<CardExpandableContent>` region.\n * Controlled via `expanded` or uncontrolled via `defaultExpanded`.\n */\n expandable?: boolean;\n /** Controlled expanded state (Expandable). */\n expanded?: boolean;\n /** Uncontrolled initial expanded state (Expandable). */\n defaultExpanded?: boolean;\n /** Fires with the next expanded value when the user toggles an Expandable card. */\n onExpandedChange?: (expanded: boolean) => void;\n /** Accessible label for the expand/collapse toggle. Default `'Toggle details'`. */\n expandLabel?: string;\n}\n\ntype CardSectionProps = React.ComponentProps<'div'> & { asChild?: boolean };\n\ntype CardIconProps = CardSectionProps & {\n /**\n * Render the DGA Platforms Code \"Featured Icon\" treatment — a 48px brand-light\n * circle around the glyph (vs the bare inline icon). Pair with the SDGA Card\n * pattern (featured icon → title → content → footer).\n */\n featured?: boolean;\n};\n\ninterface CardTitleProps extends React.ComponentProps<'h3'> {\n /** Override the heading element (e.g. render an `<h2>` or `<a>`). */\n asChild?: boolean;\n}\n\ntype CardDescriptionProps = React.ComponentProps<'p'> & { asChild?: boolean };\n\ninterface CardImageProps extends React.ComponentProps<'img'> {\n /**\n * Aspect ratio of the image in vertical orientation (e.g. `'16/9'`, `'4/3'`,\n * `'1/1'`). Default `'16/9'`. Ignored in horizontal orientation — the image\n * fills the card's full height there.\n */\n aspectRatio?: string;\n}\n\nfunction Card({\n variant,\n padding,\n orientation,\n interactive,\n asChild,\n disabled,\n selectable,\n selected,\n defaultSelected,\n onSelectedChange,\n expandable,\n expanded,\n defaultExpanded,\n onExpandedChange,\n expandLabel = 'Toggle details',\n className,\n children,\n onClick,\n onKeyDown,\n ...props\n}: CardProps) {\n // Dev-only: a selectable card is a `role=\"checkbox\"`, which takes its name\n // from aria-label/aria-labelledby (not its text content).\n if (process.env.NODE_ENV === 'development' && selectable) {\n if (!props['aria-label'] && !props['aria-labelledby']) {\n console.warn(\n '[@dev-dga/react] A selectable Card renders as a checkbox and needs an ' +\n 'aria-label or aria-labelledby for screen-reader users.',\n );\n }\n }\n\n const [internalSelected, setInternalSelected] = useState(defaultSelected ?? false);\n const isSelected = selected ?? internalSelected;\n const toggleSelected = () => {\n if (disabled) return;\n const next = !isSelected;\n if (selected === undefined) setInternalSelected(next);\n onSelectedChange?.(next);\n };\n\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded ?? false);\n const isExpanded = expanded ?? internalExpanded;\n const contentId = useId();\n const toggleExpanded = () => {\n if (disabled) return;\n const next = !isExpanded;\n if (expanded === undefined) setInternalExpanded(next);\n onExpandedChange?.(next);\n };\n\n // Selectable/Expandable add sibling elements, so the card can't be a Slot\n // (Slot needs exactly one child). They are mutually exclusive DGA Types.\n const hasExtras = selectable || expandable;\n const Comp = asChild && !hasExtras ? SlotPrimitive.Slot : 'div';\n\n const selectableProps = selectable\n ? {\n role: 'checkbox' as const,\n 'aria-checked': isSelected,\n 'aria-disabled': disabled || undefined,\n tabIndex: disabled ? -1 : 0,\n 'data-state': isSelected ? ('checked' as const) : ('unchecked' as const),\n onClick: (e: React.MouseEvent<HTMLDivElement>) => {\n toggleSelected();\n onClick?.(e);\n },\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === ' ') {\n e.preventDefault();\n toggleSelected();\n }\n onKeyDown?.(e);\n },\n }\n : // A bare `interactive` card (no asChild wrapper) is a whole-card click target →\n // make it keyboard-operable and announced as a button, else it's mouse-only.\n interactive && !expandable && !asChild\n ? {\n role: 'button' as const,\n 'aria-disabled': disabled || undefined,\n tabIndex: disabled ? -1 : 0,\n onClick,\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n e.currentTarget.click();\n }\n onKeyDown?.(e);\n },\n }\n : { onClick, onKeyDown };\n\n const card = (\n <Comp\n data-slot=\"card\"\n data-orientation={orientation ?? 'vertical'}\n data-disabled={disabled || undefined}\n data-expanded={expandable ? isExpanded : undefined}\n aria-disabled={disabled && !selectable ? true : undefined}\n className={cn(\n cardVariants({ variant, padding, orientation, interactive }),\n disabled && 'ddga-card--disabled',\n selectable && 'ddga-card--selectable',\n expandable && 'ddga-card--expandable',\n className,\n )}\n {...selectableProps}\n {...props}\n >\n {hasExtras ? (\n <>\n {selectable && (\n <span className=\"ddga-card__select-indicator\" aria-hidden>\n <span\n className=\"ddga-card__checkbox\"\n data-state={isSelected ? 'checked' : 'unchecked'}\n >\n {isSelected && <Check className=\"ddga-card__checkbox-check\" />}\n </span>\n </span>\n )}\n {children}\n {expandable && (\n <div className=\"ddga-card__expand-row\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={expandLabel}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n disabled={disabled}\n onClick={toggleExpanded}\n >\n <ChevronDown\n className={cn('ddga-card__chevron', isExpanded && 'ddga-card__chevron--up')}\n />\n </Button>\n </div>\n )}\n </>\n ) : (\n // Plain card: pass children straight through so `asChild` (Slot) still\n // receives a single element.\n children\n )}\n </Comp>\n );\n\n return expandable ? (\n <CardContext.Provider value={{ expanded: isExpanded, contentId }}>{card}</CardContext.Provider>\n ) : (\n card\n );\n}\n\nfunction CardImage({ aspectRatio = '16/9', className, style, ...props }: CardImageProps) {\n return (\n <img\n data-slot=\"card-image\"\n className={cn('ddga-card__image', className)}\n style={\n {\n '--ddga-card-image-aspect': aspectRatio,\n ...style,\n } as React.CSSProperties\n }\n {...props}\n />\n );\n}\n\nfunction CardHeader({ asChild, className, ...props }: CardSectionProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return <Comp data-slot=\"card-header\" className={cn('ddga-card__header', className)} {...props} />;\n}\n\n// Decorative (`aria-hidden`) by default; pass `aria-hidden={false}` when the icon is the sole label.\nfunction CardIcon({ asChild, featured, className, ...props }: CardIconProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return (\n <Comp\n data-slot=\"card-icon\"\n aria-hidden\n className={cn('ddga-card__icon', featured && 'ddga-card__icon--featured', className)}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ asChild, className, ...props }: CardTitleProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'h3';\n return <Comp data-slot=\"card-title\" className={cn('ddga-card__title', className)} {...props} />;\n}\n\nfunction CardDescription({ asChild, className, ...props }: CardDescriptionProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'p';\n return (\n <Comp\n data-slot=\"card-description\"\n className={cn('ddga-card__description', className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ asChild, className, ...props }: CardSectionProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return (\n <Comp data-slot=\"card-content\" className={cn('ddga-card__content', className)} {...props} />\n );\n}\n\nfunction CardFooter({ asChild, className, ...props }: CardSectionProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return <Comp data-slot=\"card-footer\" className={cn('ddga-card__footer', className)} {...props} />;\n}\n\n// The collapsible region of an Expandable card — reads the Card's expanded state\n// via context; `hidden` removes it from layout + a11y tree when collapsed.\nfunction CardExpandableContent({ asChild, className, ...props }: CardSectionProps) {\n const ctx = useContext(CardContext);\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return (\n <Comp\n data-slot=\"card-expandable-content\"\n id={ctx?.contentId}\n hidden={ctx ? !ctx.expanded : undefined}\n className={cn('ddga-card__expandable-content', className)}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardImage,\n CardIcon,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n CardExpandableContent,\n cardVariants,\n};\nexport type {\n CardProps,\n CardImageProps,\n CardSectionProps,\n CardIconProps,\n CardTitleProps,\n CardDescriptionProps,\n};\n"]}
1
+ {"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-P7WYXL4A.cjs","../src/components/Card/Card.tsx"],"names":[],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-P7WYXL4A.cjs","sourcesContent":[null,"'use client';\n\nimport { useState, useId, useContext, createContext } from 'react';\nimport { Slot as SlotPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { Check, ChevronDown } from '../../internal/icons';\nimport { Button } from '../Button';\n\nconst cardVariants = cva('ddga-card', {\n variants: {\n variant: {\n default: 'ddga-card--default',\n outline: 'ddga-card--outline',\n elevated: 'ddga-card--elevated',\n plain: 'ddga-card--plain',\n filled: 'ddga-card--filled',\n gradient: 'ddga-card--gradient',\n ghost: 'ddga-card--ghost',\n },\n padding: {\n sm: 'ddga-card--padding-sm',\n md: 'ddga-card--padding-md',\n lg: 'ddga-card--padding-lg',\n },\n orientation: {\n vertical: 'ddga-card--vertical',\n horizontal: 'ddga-card--horizontal',\n },\n interactive: {\n true: 'ddga-card--interactive',\n },\n },\n defaultVariants: {\n variant: 'default',\n padding: 'md',\n orientation: 'vertical',\n },\n});\n\n// Shares expanded state + content id between the chevron toggle and CardExpandableContent.\nconst CardContext = createContext<{ expanded: boolean; contentId: string } | null>(null);\n\ninterface CardProps extends React.ComponentProps<'div'>, VariantProps<typeof cardVariants> {\n /** Render as the single child element instead of a `<div>` (see Button). */\n asChild?: boolean;\n /**\n * DGA Disabled state — mutes the surface (gray-200 bg / gray-400 text + icon)\n * and marks the card `aria-disabled`. Suppresses Selectable toggling.\n */\n disabled?: boolean;\n /**\n * DGA Type=Selectable — the whole card becomes a checkbox (`role=\"checkbox\"`,\n * Space toggles) with a checkbox indicator at the top inline-end. Controlled\n * via `selected` or uncontrolled via `defaultSelected`. Ignores `asChild`.\n */\n selectable?: boolean;\n /** Controlled selected state (Selectable). */\n selected?: boolean;\n /** Uncontrolled initial selected state (Selectable). */\n defaultSelected?: boolean;\n /** Fires with the next selected value when the user toggles a Selectable card. */\n onSelectedChange?: (selected: boolean) => void;\n /**\n * DGA Type=Expandable — renders a chevron toggle (icon-only Subtle button) at\n * the bottom inline-end that shows/hides a `<CardExpandableContent>` region.\n * Controlled via `expanded` or uncontrolled via `defaultExpanded`.\n */\n expandable?: boolean;\n /** Controlled expanded state (Expandable). */\n expanded?: boolean;\n /** Uncontrolled initial expanded state (Expandable). */\n defaultExpanded?: boolean;\n /** Fires with the next expanded value when the user toggles an Expandable card. */\n onExpandedChange?: (expanded: boolean) => void;\n /** Accessible label for the expand/collapse toggle. Default `'Toggle details'`. */\n expandLabel?: string;\n}\n\ntype CardSectionProps = React.ComponentProps<'div'> & { asChild?: boolean };\n\ntype CardIconProps = CardSectionProps & {\n /**\n * Render the DGA Platforms Code \"Featured Icon\" treatment — a 48px brand-light\n * circle around the glyph (vs the bare inline icon). Pair with the SDGA Card\n * pattern (featured icon → title → content → footer).\n */\n featured?: boolean;\n};\n\ninterface CardTitleProps extends React.ComponentProps<'h3'> {\n /** Override the heading element (e.g. render an `<h2>` or `<a>`). */\n asChild?: boolean;\n}\n\ntype CardDescriptionProps = React.ComponentProps<'p'> & { asChild?: boolean };\n\ninterface CardImageProps extends React.ComponentProps<'img'> {\n /**\n * Aspect ratio of the image in vertical orientation (e.g. `'16/9'`, `'4/3'`,\n * `'1/1'`). Default `'16/9'`. Ignored in horizontal orientation — the image\n * fills the card's full height there.\n */\n aspectRatio?: string;\n}\n\nfunction Card({\n variant,\n padding,\n orientation,\n interactive,\n asChild,\n disabled,\n selectable,\n selected,\n defaultSelected,\n onSelectedChange,\n expandable,\n expanded,\n defaultExpanded,\n onExpandedChange,\n expandLabel = 'Toggle details',\n className,\n children,\n onClick,\n onKeyDown,\n ...props\n}: CardProps) {\n // Dev-only: a selectable card is a `role=\"checkbox\"`, which takes its name\n // from aria-label/aria-labelledby (not its text content).\n if (process.env.NODE_ENV === 'development' && selectable) {\n if (!props['aria-label'] && !props['aria-labelledby']) {\n console.warn(\n '[@dev-dga/react] A selectable Card renders as a checkbox and needs an ' +\n 'aria-label or aria-labelledby for screen-reader users.',\n );\n }\n }\n\n const [internalSelected, setInternalSelected] = useState(defaultSelected ?? false);\n const isSelected = selected ?? internalSelected;\n const toggleSelected = () => {\n if (disabled) return;\n const next = !isSelected;\n if (selected === undefined) setInternalSelected(next);\n onSelectedChange?.(next);\n };\n\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded ?? false);\n const isExpanded = expanded ?? internalExpanded;\n const contentId = useId();\n const toggleExpanded = () => {\n if (disabled) return;\n const next = !isExpanded;\n if (expanded === undefined) setInternalExpanded(next);\n onExpandedChange?.(next);\n };\n\n // Selectable/Expandable add sibling elements, so the card can't be a Slot\n // (Slot needs exactly one child). They are mutually exclusive DGA Types.\n const hasExtras = selectable || expandable;\n const Comp = asChild && !hasExtras ? SlotPrimitive.Slot : 'div';\n\n const selectableProps = selectable\n ? {\n role: 'checkbox' as const,\n 'aria-checked': isSelected,\n 'aria-disabled': disabled || undefined,\n tabIndex: disabled ? -1 : 0,\n 'data-state': isSelected ? ('checked' as const) : ('unchecked' as const),\n onClick: (e: React.MouseEvent<HTMLDivElement>) => {\n toggleSelected();\n onClick?.(e);\n },\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === ' ') {\n e.preventDefault();\n toggleSelected();\n }\n onKeyDown?.(e);\n },\n }\n : // A bare `interactive` card (no asChild wrapper) is a whole-card click target →\n // make it keyboard-operable and announced as a button, else it's mouse-only.\n interactive && !expandable && !asChild\n ? {\n role: 'button' as const,\n 'aria-disabled': disabled || undefined,\n tabIndex: disabled ? -1 : 0,\n onClick,\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n e.currentTarget.click();\n }\n onKeyDown?.(e);\n },\n }\n : { onClick, onKeyDown };\n\n const card = (\n <Comp\n data-slot=\"card\"\n data-orientation={orientation ?? 'vertical'}\n data-disabled={disabled || undefined}\n data-expanded={expandable ? isExpanded : undefined}\n aria-disabled={disabled && !selectable ? true : undefined}\n className={cn(\n cardVariants({ variant, padding, orientation, interactive }),\n disabled && 'ddga-card--disabled',\n selectable && 'ddga-card--selectable',\n expandable && 'ddga-card--expandable',\n className,\n )}\n {...selectableProps}\n {...props}\n >\n {hasExtras ? (\n <>\n {selectable && (\n <span className=\"ddga-card__select-indicator\" aria-hidden>\n <span\n className=\"ddga-card__checkbox\"\n data-state={isSelected ? 'checked' : 'unchecked'}\n >\n {isSelected && <Check className=\"ddga-card__checkbox-check\" />}\n </span>\n </span>\n )}\n {children}\n {expandable && (\n <div className=\"ddga-card__expand-row\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={expandLabel}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n disabled={disabled}\n onClick={toggleExpanded}\n >\n <ChevronDown\n className={cn('ddga-card__chevron', isExpanded && 'ddga-card__chevron--up')}\n />\n </Button>\n </div>\n )}\n </>\n ) : (\n // Plain card: pass children straight through so `asChild` (Slot) still\n // receives a single element.\n children\n )}\n </Comp>\n );\n\n return expandable ? (\n <CardContext.Provider value={{ expanded: isExpanded, contentId }}>{card}</CardContext.Provider>\n ) : (\n card\n );\n}\n\nfunction CardImage({ aspectRatio = '16/9', className, style, ...props }: CardImageProps) {\n return (\n <img\n data-slot=\"card-image\"\n className={cn('ddga-card__image', className)}\n style={\n {\n '--ddga-card-image-aspect': aspectRatio,\n ...style,\n } as React.CSSProperties\n }\n {...props}\n />\n );\n}\n\nfunction CardHeader({ asChild, className, ...props }: CardSectionProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return <Comp data-slot=\"card-header\" className={cn('ddga-card__header', className)} {...props} />;\n}\n\n// Decorative (`aria-hidden`) by default; pass `aria-hidden={false}` when the icon is the sole label.\nfunction CardIcon({ asChild, featured, className, ...props }: CardIconProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return (\n <Comp\n data-slot=\"card-icon\"\n aria-hidden\n className={cn('ddga-card__icon', featured && 'ddga-card__icon--featured', className)}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ asChild, className, ...props }: CardTitleProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'h3';\n return <Comp data-slot=\"card-title\" className={cn('ddga-card__title', className)} {...props} />;\n}\n\nfunction CardDescription({ asChild, className, ...props }: CardDescriptionProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'p';\n return (\n <Comp\n data-slot=\"card-description\"\n className={cn('ddga-card__description', className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ asChild, className, ...props }: CardSectionProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return (\n <Comp data-slot=\"card-content\" className={cn('ddga-card__content', className)} {...props} />\n );\n}\n\nfunction CardFooter({ asChild, className, ...props }: CardSectionProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return <Comp data-slot=\"card-footer\" className={cn('ddga-card__footer', className)} {...props} />;\n}\n\n// The collapsible region of an Expandable card — reads the Card's expanded state\n// via context; `hidden` removes it from layout + a11y tree when collapsed.\nfunction CardExpandableContent({ asChild, className, ...props }: CardSectionProps) {\n const ctx = useContext(CardContext);\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return (\n <Comp\n data-slot=\"card-expandable-content\"\n id={ctx?.contentId}\n hidden={ctx ? !ctx.expanded : undefined}\n className={cn('ddga-card__expandable-content', className)}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardImage,\n CardIcon,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n CardExpandableContent,\n cardVariants,\n};\nexport type {\n CardProps,\n CardImageProps,\n CardSectionProps,\n CardIconProps,\n CardTitleProps,\n CardDescriptionProps,\n};\n"]}
@@ -20,6 +20,10 @@ var chipVariants = cva("ddga-chip", {
20
20
  },
21
21
  rounded: {
22
22
  true: "ddga-chip--rounded"
23
+ },
24
+ /** For chips on a colored/dark surface: a white-ramp pill with ink text (SDGA On-color). */
25
+ onColor: {
26
+ true: "ddga-chip--on-color"
23
27
  }
24
28
  },
25
29
  defaultVariants: {
@@ -31,6 +35,7 @@ function Chip({
31
35
  variant,
32
36
  size,
33
37
  rounded,
38
+ onColor,
34
39
  selected,
35
40
  defaultSelected = false,
36
41
  onSelectedChange,
@@ -56,7 +61,7 @@ function Chip({
56
61
  "aria-disabled": disabled || void 0,
57
62
  "data-slot": "chip",
58
63
  "aria-pressed": isSelected,
59
- className: cn(chipVariants({ variant, size, rounded }), className),
64
+ className: cn(chipVariants({ variant, size, rounded, onColor }), className),
60
65
  onClick: (e) => {
61
66
  if (disabled) {
62
67
  e.preventDefault();
@@ -82,4 +87,4 @@ export {
82
87
  chipVariants,
83
88
  Chip
84
89
  };
85
- //# sourceMappingURL=chunk-6CDZ7ZBG.js.map
90
+ //# sourceMappingURL=chunk-SQ7NQVEK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Chip/Chip.tsx"],"sourcesContent":["'use client';\n\nimport { useState, type ReactNode } from 'react';\nimport { Slot as SlotPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst chipVariants = cva('ddga-chip', {\n variants: {\n variant: {\n primary: 'ddga-chip--primary',\n neutral: 'ddga-chip--neutral',\n },\n size: {\n sm: 'ddga-chip--sm',\n md: 'ddga-chip--md',\n lg: 'ddga-chip--lg',\n },\n rounded: {\n true: 'ddga-chip--rounded',\n },\n /** For chips on a colored/dark surface: a white-ramp pill with ink text (SDGA On-color). */\n onColor: {\n true: 'ddga-chip--on-color',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n});\n\ninterface ChipProps\n extends Omit<React.ComponentProps<'button'>, 'onChange'>, VariantProps<typeof chipVariants> {\n /** Controlled selected state — drives `aria-pressed` and the filled treatment. */\n selected?: boolean;\n /** Uncontrolled initial selected state. */\n defaultSelected?: boolean;\n /** Called with the next selected value when the chip toggles. */\n onSelectedChange?: (selected: boolean) => void;\n /** Leading icon (inherits the chip text colour; 14px, 16px at `lg`). */\n leadingIcon?: ReactNode;\n /** Trailing icon. */\n trailingIcon?: ReactNode;\n /** Render as the child element (Radix `Slot`) — e.g. wrap a router link. */\n asChild?: boolean;\n}\n\n/**\n * Interactive selectable chip (SDGA \"Chip\") — a toggle button, distinct from the\n * static `Tag` (SDGA \"Tags\"). Selecting fills the chip (`#1B8354` primary / gray-700 neutral).\n */\nfunction Chip({\n variant,\n size,\n rounded,\n onColor,\n selected,\n defaultSelected = false,\n onSelectedChange,\n leadingIcon,\n trailingIcon,\n asChild,\n className,\n children,\n disabled,\n onClick,\n type = 'button',\n ...props\n}: ChipProps) {\n const isControlled = selected !== undefined;\n const [internal, setInternal] = useState(defaultSelected);\n const isSelected = isControlled ? selected : internal;\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n\n return (\n <Comp\n // type/native disabled only apply to <button>; in asChild mode lean on\n // aria-disabled + tabIndex (CSS matches [aria-disabled='true'] too).\n {...(asChild ? {} : { type, disabled })}\n {...(asChild && disabled ? { tabIndex: -1 } : {})}\n aria-disabled={disabled || undefined}\n data-slot=\"chip\"\n aria-pressed={isSelected}\n className={cn(chipVariants({ variant, size, rounded, onColor }), className)}\n onClick={(e) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n if (e.defaultPrevented) return;\n const next = !isSelected;\n if (!isControlled) setInternal(next);\n onSelectedChange?.(next);\n }}\n {...props}\n >\n {leadingIcon != null && (\n <span className=\"ddga-chip__icon\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )}\n {asChild ? (\n <SlotPrimitive.Slottable>{children}</SlotPrimitive.Slottable>\n ) : (\n children != null && <span className=\"ddga-chip__label\">{children}</span>\n )}\n {trailingIcon != null && (\n <span className=\"ddga-chip__icon\" aria-hidden=\"true\">\n {trailingIcon}\n </span>\n )}\n </Comp>\n );\n}\n\nexport { Chip, chipVariants };\nexport type { ChipProps };\n"],"mappings":";;;;;AAEA,SAAS,gBAAgC;AACzC,SAAS,QAAQ,qBAAqB;AACtC,SAAS,WAA8B;AAwEnC,SAuBI,KAvBJ;AArEJ,IAAM,eAAe,IAAI,aAAa;AAAA,EACpC,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,IACR;AAAA;AAAA,IAEA,SAAS;AAAA,MACP,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AACF,CAAC;AAsBD,SAAS,KAAK;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAAc;AACZ,QAAM,eAAe,aAAa;AAClC,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,eAAe;AACxD,QAAM,aAAa,eAAe,WAAW;AAC7C,QAAM,OAAO,UAAU,cAAc,OAAO;AAE5C,SACE;AAAA,IAAC;AAAA;AAAA,MAGE,GAAI,UAAU,CAAC,IAAI,EAAE,MAAM,SAAS;AAAA,MACpC,GAAI,WAAW,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC;AAAA,MAC/C,iBAAe,YAAY;AAAA,MAC3B,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,WAAW,GAAG,aAAa,EAAE,SAAS,MAAM,SAAS,QAAQ,CAAC,GAAG,SAAS;AAAA,MAC1E,SAAS,CAAC,MAAM;AACd,YAAI,UAAU;AACZ,YAAE,eAAe;AACjB;AAAA,QACF;AACA,kBAAU,CAAC;AACX,YAAI,EAAE,iBAAkB;AACxB,cAAM,OAAO,CAAC;AACd,YAAI,CAAC,aAAc,aAAY,IAAI;AACnC,2BAAmB,IAAI;AAAA,MACzB;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,uBAAe,QACd,oBAAC,UAAK,WAAU,mBAAkB,eAAY,QAC3C,uBACH;AAAA,QAED,UACC,oBAAC,cAAc,WAAd,EAAyB,UAAS,IAEnC,YAAY,QAAQ,oBAAC,UAAK,WAAU,oBAAoB,UAAS;AAAA,QAElE,gBAAgB,QACf,oBAAC,UAAK,WAAU,mBAAkB,eAAY,QAC3C,wBACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}