@dev-dga/react 0.12.1 → 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.
- package/CHANGELOG.md +18 -0
- package/README.md +14 -8
- package/dist/{chunk-WRUVDZRI.js → chunk-4S2DSEXR.js} +4 -4
- package/dist/{chunk-GCOBDP4W.js → chunk-AR7K3D3Z.js} +9 -1
- package/dist/chunk-AR7K3D3Z.js.map +1 -0
- package/dist/{chunk-7GWM7F5C.js → chunk-BC2DJQ3Y.js} +23 -14
- package/dist/chunk-BC2DJQ3Y.js.map +1 -0
- package/dist/{chunk-DWCTUNFU.cjs → chunk-H7DMDBAG.cjs} +7 -2
- package/dist/chunk-H7DMDBAG.cjs.map +1 -0
- package/dist/{chunk-JAMYRBHS.js → chunk-J53OY747.js} +5 -5
- package/dist/{chunk-4WXBRKGZ.cjs → chunk-J7HSAVFF.cjs} +5 -5
- package/dist/{chunk-4WXBRKGZ.cjs.map → chunk-J7HSAVFF.cjs.map} +1 -1
- package/dist/{chunk-NJIQJHJS.js → chunk-MECGQLHL.js} +4 -4
- package/dist/{chunk-K27GNXBF.cjs → chunk-NGDKAG2O.cjs} +4 -4
- package/dist/{chunk-K27GNXBF.cjs.map → chunk-NGDKAG2O.cjs.map} +1 -1
- package/dist/{chunk-A4HS7CYD.cjs → chunk-NQGMWK5C.cjs} +10 -2
- package/dist/chunk-NQGMWK5C.cjs.map +1 -0
- package/dist/{chunk-GXF5IZEX.cjs → chunk-P7WYXL4A.cjs} +3 -3
- package/dist/{chunk-GXF5IZEX.cjs.map → chunk-P7WYXL4A.cjs.map} +1 -1
- package/dist/{chunk-6CDZ7ZBG.js → chunk-SQ7NQVEK.js} +7 -2
- package/dist/chunk-SQ7NQVEK.js.map +1 -0
- package/dist/{chunk-3JHIEAJG.cjs → chunk-SZ2AUE62.cjs} +33 -24
- package/dist/chunk-SZ2AUE62.cjs.map +1 -0
- package/dist/{chunk-7GAELGEB.cjs → chunk-TGM4JFWI.cjs} +3 -3
- package/dist/{chunk-7GAELGEB.cjs.map → chunk-TGM4JFWI.cjs.map} +1 -1
- package/dist/{chunk-SJN37JUC.cjs → chunk-TQLZL5MI.cjs} +29 -20
- package/dist/chunk-TQLZL5MI.cjs.map +1 -0
- package/dist/{chunk-EZRPCQSP.js → chunk-WLJHHTE2.js} +7 -7
- package/dist/{chunk-P7XKSXHH.js → chunk-XIJKAUCN.js} +20 -11
- package/dist/chunk-XIJKAUCN.js.map +1 -0
- package/dist/components/Card/Card.cjs +3 -3
- package/dist/components/Card/Card.js +2 -2
- package/dist/components/Card/index.cjs +3 -3
- package/dist/components/Card/index.js +2 -2
- package/dist/components/Chip/Chip.cjs +2 -2
- package/dist/components/Chip/Chip.js +1 -1
- package/dist/components/Chip/index.cjs +2 -2
- package/dist/components/Chip/index.js +1 -1
- package/dist/components/DatePicker/DatePicker.cjs +3 -3
- package/dist/components/DatePicker/DatePicker.js +2 -2
- package/dist/components/DatePicker/index.cjs +3 -3
- package/dist/components/DatePicker/index.js +2 -2
- package/dist/components/DateRangePicker/DateRangePicker.cjs +3 -3
- package/dist/components/DateRangePicker/DateRangePicker.js +2 -2
- package/dist/components/DateRangePicker/index.cjs +3 -3
- package/dist/components/DateRangePicker/index.js +2 -2
- package/dist/components/FileUpload/FileUpload.cjs +3 -3
- package/dist/components/FileUpload/FileUpload.js +2 -2
- package/dist/components/FileUpload/index.cjs +3 -3
- package/dist/components/FileUpload/index.js +2 -2
- package/dist/components/Filtration/Filtration.cjs +4 -4
- package/dist/components/Filtration/Filtration.js +3 -3
- package/dist/components/Filtration/index.cjs +4 -4
- package/dist/components/Filtration/index.js +3 -3
- package/dist/components/SearchBox/SearchBox.cjs +3 -3
- package/dist/components/SearchBox/SearchBox.js +2 -2
- package/dist/components/SearchBox/index.cjs +3 -3
- package/dist/components/SearchBox/index.js +2 -2
- package/dist/index.cjs +44 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +67 -67
- package/dist/internal/calendar/calendar-core.cjs +6 -2
- package/dist/internal/calendar/calendar-core.cjs.map +1 -1
- package/dist/internal/calendar/calendar-core.js +7 -3
- package/dist/internal/calendar/index.cjs +6 -2
- package/dist/internal/calendar/index.cjs.map +1 -1
- package/dist/internal/calendar/index.js +7 -3
- package/package.json +3 -3
- package/dist/chunk-3JHIEAJG.cjs.map +0 -1
- package/dist/chunk-6CDZ7ZBG.js.map +0 -1
- package/dist/chunk-7GWM7F5C.js.map +0 -1
- package/dist/chunk-A4HS7CYD.cjs.map +0 -1
- package/dist/chunk-DWCTUNFU.cjs.map +0 -1
- package/dist/chunk-GCOBDP4W.js.map +0 -1
- package/dist/chunk-P7XKSXHH.js.map +0 -1
- package/dist/chunk-SJN37JUC.cjs.map +0 -1
- /package/dist/{chunk-WRUVDZRI.js.map → chunk-4S2DSEXR.js.map} +0 -0
- /package/dist/{chunk-JAMYRBHS.js.map → chunk-J53OY747.js.map} +0 -0
- /package/dist/{chunk-NJIQJHJS.js.map → chunk-MECGQLHL.js.map} +0 -0
- /package/dist/{chunk-EZRPCQSP.js.map → chunk-WLJHHTE2.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
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
|
+
|
|
14
|
+
## 0.12.2
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- **DatePicker / DateRangePicker: locale-aware weekday header.** The calendar weekday row now renders the SDGA 2-letter form (`Su Mo Tu We Th Fr Sa`) in Latin locales, and distinct single letters (`ح ن ث ر خ ج س`) in Arabic, instead of collapsing every Arabic day to the shared article "ال". No API change.
|
|
19
|
+
- **Docs.** Refreshed the README component list for the 0.12.0 renames (`Input`→`TextInput`, `Combobox`→`Dropdown`, `Stat`→`Metric`, `Steps`→`ProgressIndicator`, `Alert`→`InlineAlert`, `Toast`→`NotificationToast`, `Badge`→`Tag`) and added the newer components; added an Accessibility section linking the new WCAG 2.2 AA conformance statement.
|
|
20
|
+
|
|
3
21
|
## 0.12.1
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -17,13 +17,13 @@ Requires `react@^19` and `react-dom@^19` (peer dependencies).
|
|
|
17
17
|
## Usage
|
|
18
18
|
|
|
19
19
|
```tsx
|
|
20
|
-
import '@dev-dga/css'; // required
|
|
21
|
-
import { DgaProvider, Button,
|
|
20
|
+
import '@dev-dga/css'; // required: components ship no styles
|
|
21
|
+
import { DgaProvider, Button, TextInput, Select, SelectItem, Switch } from '@dev-dga/react';
|
|
22
22
|
|
|
23
23
|
export default function App() {
|
|
24
24
|
return (
|
|
25
25
|
<DgaProvider>
|
|
26
|
-
<
|
|
26
|
+
<TextInput label="Email" type="email" helperText="We'll never share it." />
|
|
27
27
|
<Select label="Country" placeholder="Choose…">
|
|
28
28
|
<SelectItem value="sa">Saudi Arabia</SelectItem>
|
|
29
29
|
<SelectItem value="ae">United Arab Emirates</SelectItem>
|
|
@@ -93,15 +93,15 @@ function MyField({ label, helperText, error, errorMessage, ...rest }) {
|
|
|
93
93
|
|
|
94
94
|
## Components
|
|
95
95
|
|
|
96
|
-
**Form:** `Button` · `
|
|
96
|
+
**Form:** `Button` · `FloatingButton` (FAB) · `TextInput` · `Textarea` · `NumberInput` · `InputOTP` (OTP/PIN) · `SearchBox` · `TagInput` (token/chip) · `Checkbox` · `RadioGroup` + `Radio` · `Switch` · `Select` + `SelectItem` · `Dropdown` + `DropdownItem` (+ `DropdownGroup` · `DropdownSeparator`) · `DatePicker` + `DateRangePicker` (Hijri toggle) · `Slider` (single/range) · `Rating` (half-star) · `FileUpload` · `Toggle` · `ContentSwitcher` (segmented) · `Filtration` (faceted filter panel)
|
|
97
97
|
|
|
98
|
-
**Display:** `Card` (+ `CardImage`/`CardHeader`/`CardTitle`/`CardDescription`/`CardContent`/`CardFooter`) · `Table` (+ `TableHeader`/`TableBody`/`TableFooter`/`TableRow`/`TableHead`/`TableCell`/`TableCaption`) · `List` (+ `ListItem
|
|
98
|
+
**Display:** `Card` (+ `CardImage`/`CardHeader`/`CardIcon`/`CardTitle`/`CardDescription`/`CardContent`/`CardFooter`) · `Table` (+ `TableHeader`/`TableBody`/`TableFooter`/`TableRow`/`TableHead`/`TableCell`/`TableCaption`) · `List` (+ `ListItem`) · `StructuredList` (+ `StructuredListHeader`/`StructuredListBody`/`StructuredListRow`/`StructuredListCell`) · `Quote` · `Chip` · `Tag` · `StatusTag` · `Divider` · `Avatar` (+ `AvatarImage`/`AvatarFallback`/`AvatarGroup`) · `DescriptionList` (+ `DescriptionItem`/`DescriptionTerm`/`DescriptionDetails`) · `Metric` + `MetricGroup` (KPI tiles) · `PieChart`/`LineChart`/`BarChart` · `Timeline` (+ `TimelineItem`/`TimelineMarker`/`TimelineContent`/`TimelineTitle`/`TimelineDescription`/`TimelineTime`) · `EmptyState` (+ `EmptyStateMedia`/`EmptyStateTitle`/`EmptyStateDescription`/`EmptyStateActions`) · `CodeSnippet` + `CodeSnippetInline` · `DigitalStamp` (gov verification bar) · `SaudiRiyal` + `SaudiRiyalSymbol` · `Carousel` (+ `CarouselViewport`/`CarouselSlide`/`CarouselPrevious`/`CarouselNext`/`CarouselDots`)
|
|
99
99
|
|
|
100
|
-
**Feedback / overlay:** `Tooltip` · `
|
|
100
|
+
**Feedback / overlay:** `Tooltip` + `HelpIcon` · `InlineAlert` · `Notification` · `Modal` · `NotificationToast` + `toast()` (imperative API) · `Drawer` (off-canvas, 4 sides) · `SlideoutMenu` (slide-in nav panel) · `DropdownMenu` (compound w/ CheckboxItem, RadioGroup, Sub) · `Popover` (generic floating panel) · `Command` + `CommandDialog` (⌘K palette)
|
|
101
101
|
|
|
102
|
-
**Navigation:** `Tabs` · `Breadcrumb` · `Pagination` · `Accordion` · `
|
|
102
|
+
**Navigation:** `Tabs` · `Breadcrumb` · `Pagination` · `Accordion` · `ProgressIndicator` · `Sidebar` (app-shell, collapsible) · `Menubar` (File/Edit/View app-bar) · `Link` (styled `<a>`, `external`)
|
|
103
103
|
|
|
104
|
-
**Layout:** `ScrollArea` · `Collapsible` (+ `CollapsibleTrigger`/`CollapsibleContent`)
|
|
104
|
+
**Layout:** `ScrollArea` · `AspectRatio` · `Collapsible` (+ `CollapsibleTrigger`/`CollapsibleContent`)
|
|
105
105
|
|
|
106
106
|
**Status:** `Spinner` · `Skeleton` · `Progress` + `CircularProgress`
|
|
107
107
|
|
|
@@ -109,6 +109,12 @@ function MyField({ label, helperText, error, errorMessage, ...rest }) {
|
|
|
109
109
|
|
|
110
110
|
**Theming types:** `DgaTheme` · `PaletteName` · `ThemeColor`
|
|
111
111
|
|
|
112
|
+
## Accessibility
|
|
113
|
+
|
|
114
|
+
Built to **WCAG 2.2 Level AA**, following the WAI-ARIA Authoring Practices. Interactive widgets stand on Radix Primitives and React Aria for keyboard interaction, focus management, and ARIA semantics; automated axe-core checks run against every component (in LTR and RTL/Arabic), and Playwright specs verify keyboard navigation, focus traps, and RTL key inversion. Visible `:focus-visible` focus rings, Windows High Contrast Mode (`forced-colors`), `prefers-reduced-motion`, and direction-native RTL are supported library-wide.
|
|
115
|
+
|
|
116
|
+
Conformance is self-assessed, not independently audited. See the full [Accessibility Conformance Statement](https://dev-dga.vercel.app/?path=/docs/foundations-accessibility--docs) for per-criterion support, known limitations, and consumer responsibilities.
|
|
117
|
+
|
|
112
118
|
## Docs
|
|
113
119
|
|
|
114
120
|
[Live Storybook](https://dev-dga.vercel.app/) · [Source](https://github.com/DevDhaif/dev-dga)
|
|
@@ -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-
|
|
130
|
+
//# sourceMappingURL=chunk-4S2DSEXR.js.map
|
|
@@ -39,6 +39,12 @@ function composeLocale(dgaLocale, calendar) {
|
|
|
39
39
|
}
|
|
40
40
|
return isArabic ? `${base}-u-nu-latn` : base;
|
|
41
41
|
}
|
|
42
|
+
function weekdayStyleForLocale(locale) {
|
|
43
|
+
return locale.startsWith("ar") ? "narrow" : "short";
|
|
44
|
+
}
|
|
45
|
+
function formatWeekdayLabel(day, locale) {
|
|
46
|
+
return locale.startsWith("ar") ? day : day.slice(0, 2);
|
|
47
|
+
}
|
|
42
48
|
function secondaryDayNumber(date, mainCalendar) {
|
|
43
49
|
const other = mainCalendar === "hijri" ? GREGORIAN : ISLAMIC_UMALQURA;
|
|
44
50
|
return toCalendar(date, other).day;
|
|
@@ -200,6 +206,8 @@ export {
|
|
|
200
206
|
dateToCalendarDate,
|
|
201
207
|
calendarDateToDate,
|
|
202
208
|
composeLocale,
|
|
209
|
+
weekdayStyleForLocale,
|
|
210
|
+
formatWeekdayLabel,
|
|
203
211
|
secondaryDayNumber,
|
|
204
212
|
useCalendarChrome,
|
|
205
213
|
usePressedState,
|
|
@@ -207,4 +215,4 @@ export {
|
|
|
207
215
|
CalendarNavHeader,
|
|
208
216
|
renderDayContent
|
|
209
217
|
};
|
|
210
|
-
//# sourceMappingURL=chunk-
|
|
218
|
+
//# sourceMappingURL=chunk-AR7K3D3Z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/calendar/calendar-core.tsx"],"sourcesContent":["'use client';\n\n// Shared Calendar core consumed by both DatePicker (single date) and\n// DateRangePicker (date range). Everything here is calendar-system /\n// month-year-navigation / day-rendering logic that is identical regardless of\n// whether one date or a range is being selected — extracted so the two pickers\n// stay in lockstep on Hijri handling, Latin digits, and locale composition.\n//\n// NOT exported from the public barrel. Pickers import from here directly.\n\nimport { useContext, useMemo, useState, type ReactNode } from 'react';\nimport {\n CalendarStateContext as AriaCalendarStateContext,\n RangeCalendarStateContext as AriaRangeCalendarStateContext,\n} from 'react-aria-components';\nimport {\n CalendarDate,\n GregorianCalendar,\n IslamicUmalquraCalendar,\n toCalendar,\n type DateValue,\n} from '@internationalized/date';\nimport { ArrowLeft, ArrowRight, ChevronDown } from '../icons';\nimport { DgaContext } from '../../providers/DgaContext';\n\n// ─── Types ─── //\n\nexport type CalendarSystem = 'gregorian' | 'hijri';\n\nexport interface CalendarLabels {\n gregorian: string;\n hijri: string;\n}\n\n// Locale-aware accessible names for the calendar chrome's controls. Defaulted\n// in `useCalendarChrome` (Arabic when the DGA locale is `ar`) so a screen reader\n// in an Arabic UI doesn't announce these controls in English.\nexport interface CalendarA11yLabels {\n /** Accessible name for the popover trigger button. */\n openCalendar: string;\n /** Accessible name for the Gregorian↔Hijri tablist. */\n calendarSystem: string;\n}\n\n// ─── Date ↔ CalendarDate (Gregorian) normalization ─── //\n\n// Public APIs are `Date`-based so consumers don't take a dep on\n// `@internationalized/date`. Internally everything round-trips through a\n// Gregorian `CalendarDate` so the Hijri toggle is purely a *display* concern —\n// the stored value is always the same absolute day, regardless of which\n// calendar the user was looking at when they picked it.\n\nconst GREGORIAN = new GregorianCalendar();\nconst ISLAMIC_UMALQURA = new IslamicUmalquraCalendar();\n\nexport function dateToCalendarDate(date: Date | null | undefined): CalendarDate | null {\n if (!date) return null;\n // Extract LOCAL Y/M/D, not UTC. The contract is date-only; converting\n // through UTC would shift the day across timezone boundaries.\n return new CalendarDate(date.getFullYear(), date.getMonth() + 1, date.getDate());\n}\n\nexport function calendarDateToDate(value: DateValue | null | undefined): Date | null {\n if (!value) return null;\n // Defensive: if a non-Gregorian CalendarDate ever reaches here, convert.\n // Today the contract is Gregorian-only.\n const greg =\n value.calendar.identifier === 'gregory' ? value : toCalendar(value, new GregorianCalendar());\n return new Date(greg.year, greg.month - 1, greg.day);\n}\n\n// ─── Locale composition (DGA locale + optional calendar override) ─── //\n\nexport function composeLocale(dgaLocale: string, calendar: CalendarSystem): string {\n // Promote a bare 'ar'/'en' from DgaProvider to a regional tag so react-aria\n // picks the right defaults (week start, weekday names). 'ar-SA' matches the\n // DGA target audience; 'en-US' is the conventional English default.\n const base = dgaLocale === 'ar' ? 'ar-SA' : dgaLocale === 'en' ? 'en-US' : dgaLocale;\n // DGA convention: Latin digits (0–9) at all times, regardless of calendar or\n // UI language. Without this, `ar-*` locales default to Arabic-Indic numerals\n // (٠–٩) on segments + calendar cells, which makes month/year dropdowns and\n // cross-calendar comparisons harder to read. The Unicode `-u-` extension\n // carries both calendar and numbering-system keys when both apply.\n const isArabic = base.startsWith('ar');\n if (calendar === 'hijri') {\n return isArabic ? `${base}-u-ca-islamic-umalqura-nu-latn` : `${base}-u-ca-islamic-umalqura`;\n }\n return isArabic ? `${base}-u-nu-latn` : base;\n}\n\n// ─── Weekday header labels (SDGA 2-letter row) ─── //\n\n// SDGA 2-letter weekday row: Latin `short` (Sun/Mon…) slices to 2; Arabic `short` all share the \"ال\" article prefix (a blind slice collapses them to identical), so Arabic uses `narrow` (distinct single letters ح ن ث…) untouched. Keep the two fns coupled.\nexport function weekdayStyleForLocale(locale: string): 'narrow' | 'short' {\n return locale.startsWith('ar') ? 'narrow' : 'short';\n}\n\nexport function formatWeekdayLabel(day: string, locale: string): string {\n return locale.startsWith('ar') ? day : day.slice(0, 2);\n}\n\n// ─── Secondary-calendar helper ─── //\n\nexport function secondaryDayNumber(date: DateValue, mainCalendar: CalendarSystem): number {\n const other = mainCalendar === 'hijri' ? GREGORIAN : ISLAMIC_UMALQURA;\n return toCalendar(date, other).day;\n}\n\n// ─── Shared chrome hook (locale, portal, chevrons, labels) ─── //\n\n// Consolidates the DgaContext-derived bits both pickers need: the composed\n// react-aria locale, the body-portal container (theme inheritance), the\n// direction-swapped prev/next chevrons, and locale-aware default labels.\nexport function useCalendarChrome(calendarSystem: CalendarSystem, calendarLabels?: CalendarLabels) {\n const dgaCtx = useContext(DgaContext);\n const dgaLocale = dgaCtx?.locale ?? 'en';\n const dir = dgaCtx?.dir ?? 'ltr';\n\n const locale = useMemo(\n () => composeLocale(dgaLocale, calendarSystem),\n [dgaLocale, calendarSystem],\n );\n\n // react-aria's Popover renders to a portal under <body> by default. Re-anchor\n // it under DgaProvider's body-mounted portal so data-theme, theme vars, and\n // .ddga-theme-* classes inherit into the dropdown. Falls back to <body> when\n // used standalone (no provider).\n const portalContainer = (dgaCtx?.portalEl ?? dgaCtx?.rootEl ?? undefined) as Element | undefined;\n\n // In RTL, \"previous\" sits visually on the right and points right; \"next\" sits\n // on the left and points left. Swapping the icon components (rather than\n // CSS-flipping) is robust because it doesn't rely on the portal inheriting dir.\n const PrevArrow = dir === 'rtl' ? ArrowRight : ArrowLeft;\n const NextArrow = dir === 'rtl' ? ArrowLeft : ArrowRight;\n\n const resolvedLabels = useMemo<CalendarLabels>(() => {\n if (calendarLabels) return calendarLabels;\n return dgaLocale.startsWith('ar')\n ? { gregorian: 'ميلادي', hijri: 'هجري' }\n : { gregorian: 'Gregorian', hijri: 'Hijri' };\n }, [calendarLabels, dgaLocale]);\n\n const navLabels = useMemo(\n () =>\n dgaLocale.startsWith('ar')\n ? { month: 'الشهر', year: 'السنة' }\n : { month: 'Month', year: 'Year' },\n [dgaLocale],\n );\n\n const a11yLabels = useMemo<CalendarA11yLabels>(\n () =>\n dgaLocale.startsWith('ar')\n ? { openCalendar: 'فتح التقويم', calendarSystem: 'نظام التقويم' }\n : { openCalendar: 'Open calendar', calendarSystem: 'Calendar system' },\n [dgaLocale],\n );\n\n return {\n dgaLocale,\n dir,\n locale,\n portalContainer,\n PrevArrow,\n NextArrow,\n resolvedLabels,\n navLabels,\n a11yLabels,\n };\n}\n\n// ─── Pressed state (reliable on a react-aria Group) ─── //\n\n// CSS `:active` is unreliable on the picker trigger: it's a react-aria Group of\n// DateSegments + a Button whose usePress handling (preventDefault / pointer\n// capture) makes `:active` fire inconsistently depending on where you press.\n// Track pressed in JS via CAPTURE-phase pointer events (which fire on the Group\n// before any child can swallow them) and expose it as `data-pressed`. Spread\n// `pressHandlers` onto the trigger Group; gate the CSS with `[data-pressed]`.\nexport function usePressedState() {\n const [pressed, setPressed] = useState(false);\n return {\n pressed,\n pressHandlers: {\n onPointerDownCapture: () => setPressed(true),\n onPointerUpCapture: () => setPressed(false),\n onPointerCancelCapture: () => setPressed(false),\n onPointerLeave: () => setPressed(false),\n },\n };\n}\n\n// ─── Calendar-system toggle (Gregorian ↔ Hijri) ─── //\n\ninterface CalendarSystemToggleProps {\n value: CalendarSystem;\n onChange: (next: CalendarSystem) => void;\n labels: CalendarLabels;\n /** Localized accessible name for the tablist (from `useCalendarChrome`). */\n groupLabel: string;\n}\n\nexport function CalendarSystemToggle({\n value,\n onChange,\n labels,\n groupLabel,\n}: CalendarSystemToggleProps) {\n return (\n <div\n role=\"tablist\"\n aria-label={groupLabel}\n className=\"ddga-calendar-toggle\"\n data-slot=\"calendar-toggle\"\n >\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={value === 'gregorian'}\n className=\"ddga-calendar-toggle__button\"\n data-active={value === 'gregorian' ? '' : undefined}\n onClick={() => onChange('gregorian')}\n >\n {labels.gregorian}\n </button>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={value === 'hijri'}\n className=\"ddga-calendar-toggle__button\"\n data-active={value === 'hijri' ? '' : undefined}\n onClick={() => onChange('hijri')}\n >\n {labels.hijri}\n </button>\n </div>\n );\n}\n\n// ─── Calendar nav header (month + year dropdowns) ─── //\n\n// Rendered inside <Calendar>/<RangeCalendar> so it can consume the calendar\n// state context. Both single and range calendars expose the same\n// `focusedDate`/`setFocusedDate`/`minValue`/`maxValue` surface (CalendarStateBase),\n// so we read whichever context is populated — the component is calendar-kind\n// agnostic. Hooking the state directly keeps the dropdowns in sync with the\n// prev/next buttons and keyboard navigation automatically.\ninterface CalendarNavHeaderProps {\n locale: string;\n monthLabel: string;\n yearLabel: string;\n}\n\nexport function CalendarNavHeader({ locale, monthLabel, yearLabel }: CalendarNavHeaderProps) {\n // A given subtree lives inside exactly one of these; the other is null.\n const rangeState = useContext(AriaRangeCalendarStateContext);\n const singleState = useContext(AriaCalendarStateContext);\n const state = rangeState ?? singleState;\n\n // Pull state fields with safe fallbacks so the hooks below stay unconditional\n // (rules-of-hooks). Rendering still bails when state is null.\n const focusedDate = state?.focusedDate ?? null;\n const focusedYear = focusedDate?.year ?? 0;\n const focusedCalendar = focusedDate?.calendar ?? GREGORIAN;\n const minValue = state?.minValue ?? null;\n const maxValue = state?.maxValue ?? null;\n\n // Localized month names in the active calendar. Hijri months translate\n // correctly because the locale string carries `-u-ca-islamic-umalqura`.\n const monthNames = useMemo(() => {\n if (!focusedDate) return [];\n const fmt = new Intl.DateTimeFormat(locale, { month: 'long' });\n return Array.from({ length: 12 }, (_, i) => {\n const cd = new CalendarDate(focusedCalendar, focusedYear, i + 1, 1);\n const greg = toCalendar(cd, GREGORIAN);\n const js = new Date(greg.year, greg.month - 1, greg.day);\n return fmt.format(js);\n });\n }, [locale, focusedDate, focusedCalendar, focusedYear]);\n\n // Year range. min/maxValue are in the consumer's calendar (Gregorian); convert\n // to the focused calendar's year. Defaults span 100 years back to 30 forward.\n const yearOptions = useMemo(() => {\n if (!focusedDate) return [];\n const minY = minValue ? toCalendar(minValue, focusedCalendar).year : focusedYear - 100;\n const maxY = maxValue ? toCalendar(maxValue, focusedCalendar).year : focusedYear + 30;\n const start = Math.min(minY, focusedYear);\n const end = Math.max(maxY, focusedYear);\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n }, [focusedDate, focusedCalendar, focusedYear, minValue, maxValue]);\n\n if (!state || !focusedDate) return null;\n\n return (\n <div className=\"ddga-calendar__nav-selects\" data-slot=\"calendar-nav\">\n <select\n aria-label={monthLabel}\n className=\"ddga-calendar__select ddga-calendar__month-select\"\n data-slot=\"calendar-month-select\"\n value={focusedDate.month}\n onChange={(e) => state.setFocusedDate(focusedDate.set({ month: Number(e.target.value) }))}\n >\n {monthNames.map((name, i) => (\n <option key={i + 1} value={i + 1}>\n {name}\n </option>\n ))}\n </select>\n <span className=\"ddga-calendar__year-chip\">\n <select\n aria-label={yearLabel}\n className=\"ddga-calendar__select ddga-calendar__year-select\"\n data-slot=\"calendar-year-select\"\n value={focusedDate.year}\n onChange={(e) => state.setFocusedDate(focusedDate.set({ year: Number(e.target.value) }))}\n >\n {yearOptions.map((y) => (\n <option key={y} value={y}>\n {y}\n </option>\n ))}\n </select>\n <ChevronDown aria-hidden=\"true\" className=\"ddga-calendar__year-chevron\" />\n </span>\n </div>\n );\n}\n\n// ─── Day-cell content (primary number + optional secondary calendar number) ─── //\n\n// The visual content rendered inside a day cell, shared by both pickers. Takes\n// the already-formatted primary text (react-aria's `formattedDate`, or a bare\n// day number for the single picker's outside-month button) and stacks the other\n// calendar's day number beneath it when `showSecondary` is on.\nexport function renderDayContent(\n primary: ReactNode,\n opts: { showSecondary: boolean; date: DateValue; calendarSystem: CalendarSystem },\n): ReactNode {\n if (!opts.showSecondary) return primary;\n return (\n <>\n <span className=\"ddga-calendar__cell-primary\">{primary}</span>\n <span aria-hidden=\"true\" className=\"ddga-calendar__cell-secondary\">\n {secondaryDayNumber(opts.date, opts.calendarSystem)}\n </span>\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,10 +3,12 @@ import {
|
|
|
3
3
|
CalendarSystemToggle,
|
|
4
4
|
calendarDateToDate,
|
|
5
5
|
dateToCalendarDate,
|
|
6
|
+
formatWeekdayLabel,
|
|
6
7
|
renderDayContent,
|
|
7
8
|
useCalendarChrome,
|
|
8
|
-
usePressedState
|
|
9
|
-
|
|
9
|
+
usePressedState,
|
|
10
|
+
weekdayStyleForLocale
|
|
11
|
+
} from "./chunk-AR7K3D3Z.js";
|
|
10
12
|
import {
|
|
11
13
|
cn
|
|
12
14
|
} from "./chunk-7NTT2UXP.js";
|
|
@@ -275,17 +277,24 @@ function DatePicker({
|
|
|
275
277
|
)
|
|
276
278
|
] })
|
|
277
279
|
] }),
|
|
278
|
-
/* @__PURE__ */ jsxs(
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
280
|
+
/* @__PURE__ */ jsxs(
|
|
281
|
+
AriaCalendarGrid,
|
|
282
|
+
{
|
|
283
|
+
className: "ddga-calendar__grid",
|
|
284
|
+
weekdayStyle: weekdayStyleForLocale(dgaLocale),
|
|
285
|
+
children: [
|
|
286
|
+
/* @__PURE__ */ jsx(AriaCalendarGridHeader, { children: (day) => /* @__PURE__ */ jsx(AriaCalendarHeaderCell, { className: "ddga-calendar__weekday", children: formatWeekdayLabel(day, dgaLocale) }) }),
|
|
287
|
+
/* @__PURE__ */ jsx(AriaCalendarGridBody, { children: (date) => /* @__PURE__ */ jsx(
|
|
288
|
+
CalendarDayCell,
|
|
289
|
+
{
|
|
290
|
+
date,
|
|
291
|
+
showSecondary: showSecondaryCalendar,
|
|
292
|
+
calendarSystem
|
|
293
|
+
}
|
|
294
|
+
) })
|
|
295
|
+
]
|
|
296
|
+
}
|
|
297
|
+
)
|
|
289
298
|
] })
|
|
290
299
|
]
|
|
291
300
|
}
|
|
@@ -302,4 +311,4 @@ export {
|
|
|
302
311
|
datePickerVariants,
|
|
303
312
|
DatePicker
|
|
304
313
|
};
|
|
305
|
-
//# sourceMappingURL=chunk-
|
|
314
|
+
//# sourceMappingURL=chunk-BC2DJQ3Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useContext, useMemo, useState, type ReactNode } from 'react';\nimport {\n Button as AriaButton,\n Calendar as AriaCalendar,\n CalendarCell as AriaCalendarCell,\n CalendarGrid as AriaCalendarGrid,\n CalendarGridBody as AriaCalendarGridBody,\n CalendarGridHeader as AriaCalendarGridHeader,\n CalendarHeaderCell as AriaCalendarHeaderCell,\n CalendarStateContext as AriaCalendarStateContext,\n DateInput as AriaDateInput,\n DatePicker as AriaDatePicker,\n DateSegment as AriaDateSegment,\n Dialog as AriaDialog,\n FieldError as AriaFieldError,\n Group as AriaGroup,\n I18nProvider,\n Label as AriaLabel,\n Popover as AriaPopover,\n Text as AriaText,\n} from 'react-aria-components';\nimport { CalendarDate, type DateValue } from '@internationalized/date';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport {\n CalendarNavHeader,\n CalendarSystemToggle,\n calendarDateToDate,\n dateToCalendarDate,\n formatWeekdayLabel,\n renderDayContent,\n useCalendarChrome,\n usePressedState,\n weekdayStyleForLocale,\n type CalendarLabels,\n type CalendarSystem,\n} from '../../internal/calendar';\n\n// ─── 1. Variants ─── //\n\n// Applied to the Group (the trigger row). Heights match Input/Select sm/md so\n// a DatePicker lines up with other fields in a form row.\nconst datePickerTriggerVariants = cva('ddga-date-picker-trigger', {\n variants: {\n size: {\n md: 'ddga-date-picker-trigger--md',\n lg: 'ddga-date-picker-trigger--lg',\n },\n variant: {\n default: 'ddga-date-picker-trigger--default',\n 'filled-lighter': 'ddga-date-picker-trigger--filled-lighter',\n 'filled-darker': 'ddga-date-picker-trigger--filled-darker',\n },\n error: {\n true: 'ddga-date-picker-trigger--error',\n },\n },\n defaultVariants: {\n size: 'lg',\n variant: 'default',\n },\n});\n\n// Passthrough alias so the barrel `*Variants` convention holds across\n// components. Same value, different name.\nconst datePickerVariants = datePickerTriggerVariants;\n\n// ─── 2. Types ─── //\n\ninterface DatePickerProps extends VariantProps<typeof datePickerTriggerVariants> {\n /** Currently selected date (controlled). Local Y/M/D. */\n value?: Date | null;\n /** Initial value when uncontrolled. */\n defaultValue?: Date | null;\n /** Fires whenever the user picks a day. `null` when cleared. */\n onChange?: (value: Date | null) => void;\n /** Earliest pickable date (inclusive). */\n minValue?: Date;\n /** Latest pickable date (inclusive). */\n maxValue?: Date;\n /** Visible label above the trigger. */\n label?: ReactNode;\n /** Hint shown below the trigger. Hidden while an error message is showing. */\n helperText?: ReactNode;\n /** Message shown below the trigger when `error` is true. */\n errorMessage?: ReactNode;\n /** Marks the field invalid — sets `aria-invalid` and error styling. */\n error?: boolean;\n /** Marks the field required — adds the asterisk + `aria-required`. */\n required?: boolean;\n /** Disables the trigger entirely. */\n disabled?: boolean;\n /** Read-only: value is shown but not editable (segments + calendar locked). */\n readOnly?: boolean;\n /** Caller-supplied id for the field. */\n id?: string;\n /** Forwarded to the Group (the trigger row), matching Input/Select. */\n className?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n /**\n * Calendar system (controlled). Omit to let the user toggle freely with\n * the in-popover switch.\n */\n calendar?: CalendarSystem;\n /** Initial calendar system when uncontrolled. Defaults to `'gregorian'`. */\n defaultCalendar?: CalendarSystem;\n /** Fires whenever the calendar system toggles. */\n onCalendarChange?: (calendar: CalendarSystem) => void;\n /**\n * Show the Gregorian↔Hijri toggle inside the popover. Defaults to `true`,\n * but is forced off when `calendar` is controlled — a toggle that ignores\n * its click is a worse footgun than no toggle.\n */\n showCalendarToggle?: boolean;\n /** Override the toggle labels. Defaults are locale-aware (English / Arabic). */\n calendarLabels?: CalendarLabels;\n /**\n * When `true`, each day cell also shows the *other* calendar's day number\n * as small secondary text (e.g., Hijri active → Gregorian day shown small\n * underneath). Helps users cross-reference dates between calendar systems\n * without round-tripping the toggle. Defaults to `false`.\n */\n showSecondaryCalendar?: boolean;\n}\n\n// ─── 3. Outside-month cell wrapper (single-date only) ─── //\n\n// react-aria marks outside-month cells as disabled by design — the standard\n// Calendar UX uses arrows / dropdowns / keyboard for cross-month navigation.\n// But many DGA flows want one-click selection of an adjacent month's day, so\n// we render a parallel <button> for those cells that bypasses the disabled\n// state, drives `setFocusedDate` + `selectDate` manually, and preserves the\n// rest of react-aria's a11y wiring for inside-month cells.\n//\n// This lives in DatePicker (not the shared core) because its `isSelected` check\n// reads `state.value` as a single CalendarDate — that doesn't generalize to a\n// range, where `state.value` is `{ start, end }`. DateRangePicker uses\n// react-aria's default outside-month behavior instead.\nfunction CalendarDayCell({ date, showSecondary, calendarSystem }: CalendarDayCellProps) {\n const state = useContext(AriaCalendarStateContext);\n\n // Visible range start tells us the \"current\" month being shown. Anything\n // with a different (year, month) pair is outside-month.\n const start = state?.visibleRange.start;\n const isOutside = !!start && (date.year !== start.year || date.month !== start.month);\n\n // For outside-month cells, also confirm they're inside min/max bounds —\n // otherwise they should genuinely render disabled. `state.isInvalid` is\n // bounds-only (min/max); `isCellDisabled` also marks outside-month as\n // disabled internally, which would block our wrapper from activating.\n const isOutOfBounds = state ? state.isInvalid(date) : false;\n\n if (state && isOutside && !isOutOfBounds) {\n const selected = state.value;\n const isSelected =\n !!selected &&\n selected.year === date.year &&\n selected.month === date.month &&\n selected.day === date.day;\n\n const handleSelect = () => {\n // Update focused-month first so the visible page jumps, then commit the\n // selection. React batches these into one re-render.\n state.setFocusedDate(date);\n state.selectDate(date);\n };\n\n return (\n <td role=\"gridcell\">\n <button\n type=\"button\"\n // Outside the keyboard nav chain (react-aria's inside-month cells own\n // that). Mouse users get the shortcut; keyboard users navigate via\n // arrows or the month/year dropdowns.\n tabIndex={-1}\n className=\"ddga-calendar__cell\"\n data-outside-month=\"\"\n data-selected={isSelected ? '' : undefined}\n data-slot=\"date-picker-day-cell\"\n onClick={handleSelect}\n >\n {renderDayContent(date.day, { showSecondary, date, calendarSystem })}\n </button>\n </td>\n );\n }\n\n return (\n <AriaCalendarCell date={date} className=\"ddga-calendar__cell\">\n {({ formattedDate }) =>\n renderDayContent(formattedDate, { showSecondary, date, calendarSystem })\n }\n </AriaCalendarCell>\n );\n}\n\ninterface CalendarDayCellProps {\n date: CalendarDate;\n showSecondary: boolean;\n calendarSystem: CalendarSystem;\n}\n\n// ─── 4. Component ─── //\n\nfunction DatePicker({\n value: controlledValue,\n defaultValue,\n onChange,\n minValue,\n maxValue,\n label,\n helperText,\n errorMessage,\n error,\n required,\n disabled,\n readOnly,\n size,\n variant,\n id,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n calendar: controlledCalendar,\n defaultCalendar = 'gregorian',\n onCalendarChange,\n showCalendarToggle = true,\n calendarLabels,\n showSecondaryCalendar = false,\n}: DatePickerProps) {\n // ─ value: controlled or uncontrolled, always Gregorian internally ─\n const isValueControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState<CalendarDate | null>(() =>\n dateToCalendarDate(defaultValue),\n );\n const value = isValueControlled ? dateToCalendarDate(controlledValue) : internalValue;\n\n const handleAriaChange = useCallback(\n (next: DateValue | null) => {\n const nextCD = next ? new CalendarDate(next.year, next.month, next.day) : null;\n if (!isValueControlled) setInternalValue(nextCD);\n onChange?.(calendarDateToDate(nextCD));\n },\n [isValueControlled, onChange],\n );\n\n // ─ calendar system: controlled or uncontrolled ─\n const isCalendarControlled = controlledCalendar !== undefined;\n const [internalCalendar, setInternalCalendar] = useState<CalendarSystem>(defaultCalendar);\n const calendarSystem = isCalendarControlled ? controlledCalendar : internalCalendar;\n\n const setCalendar = useCallback(\n (next: CalendarSystem) => {\n if (!isCalendarControlled) setInternalCalendar(next);\n onCalendarChange?.(next);\n },\n [isCalendarControlled, onCalendarChange],\n );\n\n // ─ Shared chrome (locale, portal, chevrons, labels) ─\n const {\n dgaLocale,\n locale: ariaLocale,\n portalContainer,\n PrevArrow,\n NextArrow,\n resolvedLabels,\n navLabels,\n a11yLabels,\n } = useCalendarChrome(calendarSystem, calendarLabels);\n const { pressed, pressHandlers } = usePressedState();\n\n // ─ Bounds ─\n const ariaMinValue = useMemo(() => dateToCalendarDate(minValue) ?? undefined, [minValue]);\n const ariaMaxValue = useMemo(() => dateToCalendarDate(maxValue) ?? undefined, [maxValue]);\n\n // ─ Popover aria-label fallback ─\n // Dialog requires an accessible name; derive from the field label when\n // possible (string-only), else fall back to a generic so a11y stays valid\n // even when consumers compose a rich label node.\n const dialogAriaLabel =\n ariaLabel ??\n (typeof label === 'string'\n ? label\n : ariaLabelledBy\n ? undefined\n : dgaLocale.startsWith('ar')\n ? 'التاريخ'\n : 'Date');\n\n // ─ Toggle visibility ─\n const showToggle = showCalendarToggle && !isCalendarControlled;\n\n // ─ Derived field-message visibility (mirrors useFieldA11y rules) ─\n const hasError = !!error;\n const hasErrorMessage = hasError && errorMessage != null && errorMessage !== '';\n const hasHelper = !hasErrorMessage && helperText != null && helperText !== '';\n\n return (\n <I18nProvider locale={ariaLocale}>\n <AriaDatePicker\n value={value}\n onChange={handleAriaChange}\n minValue={ariaMinValue}\n maxValue={ariaMaxValue}\n isRequired={required}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isInvalid={hasError}\n shouldCloseOnSelect\n id={id}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className=\"ddga-field\"\n data-slot=\"date-picker-field\"\n >\n {label && (\n <AriaLabel className=\"ddga-date-picker__label\">\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"ddga-date-picker__required\">\n *\n </span>\n )}\n </AriaLabel>\n )}\n <AriaGroup\n data-slot=\"date-picker-trigger\"\n data-readonly={readOnly ? '' : undefined}\n data-pressed={pressed ? '' : undefined}\n {...pressHandlers}\n className={cn(datePickerTriggerVariants({ size, variant, error: hasError }), className)}\n >\n <AriaDateInput className=\"ddga-date-picker__input\" data-slot=\"date-picker-input\">\n {(segment) => (\n <AriaDateSegment\n segment={segment}\n className=\"ddga-date-picker__segment\"\n data-slot=\"date-picker-segment\"\n />\n )}\n </AriaDateInput>\n {/* SDGA field has no calendar icon — the field itself opens the\n calendar. The button is the (iconless) click surface filling the\n field's trailing space; segments stay editable. */}\n <AriaButton\n className=\"ddga-date-picker__open\"\n aria-label={a11yLabels.openCalendar}\n data-slot=\"date-picker-trigger-button\"\n />\n </AriaGroup>\n {hasHelper && (\n <AriaText\n slot=\"description\"\n className=\"ddga-field__message ddga-field__message--helper\"\n data-slot=\"field-helper\"\n >\n {helperText}\n </AriaText>\n )}\n {hasErrorMessage && (\n <AriaFieldError\n className=\"ddga-field__message ddga-field__message--error\"\n data-slot=\"field-error\"\n >\n {errorMessage}\n </AriaFieldError>\n )}\n <AriaPopover\n UNSTABLE_portalContainer={portalContainer}\n className=\"ddga-calendar-popover\"\n data-slot=\"date-picker-popover\"\n offset={6}\n // Keep some breathing room from the viewport edge so the popover\n // doesn't butt up against the bottom of the iframe in short\n // containers (the Storybook canvas case). Combined with the inner\n // Dialog's overflow:auto, the calendar will scroll if it can't fit.\n containerPadding={12}\n >\n <AriaDialog\n className=\"ddga-calendar-dialog\"\n data-slot=\"date-picker-dialog\"\n aria-label={dialogAriaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n {showToggle && (\n <CalendarSystemToggle\n value={calendarSystem}\n onChange={setCalendar}\n labels={resolvedLabels}\n groupLabel={a11yLabels.calendarSystem}\n />\n )}\n <AriaCalendar className=\"ddga-calendar\" data-slot=\"date-picker-calendar\">\n <header className=\"ddga-calendar__header\">\n <CalendarNavHeader\n locale={ariaLocale}\n monthLabel={navLabels.month}\n yearLabel={navLabels.year}\n />\n <div className=\"ddga-calendar__nav-group\">\n <AriaButton\n slot=\"previous\"\n className=\"ddga-calendar__nav\"\n data-slot=\"date-picker-calendar-prev\"\n >\n <PrevArrow aria-hidden=\"true\" />\n </AriaButton>\n <AriaButton\n slot=\"next\"\n className=\"ddga-calendar__nav\"\n data-slot=\"date-picker-calendar-next\"\n >\n <NextArrow aria-hidden=\"true\" />\n </AriaButton>\n </div>\n </header>\n <AriaCalendarGrid\n className=\"ddga-calendar__grid\"\n weekdayStyle={weekdayStyleForLocale(dgaLocale)}\n >\n <AriaCalendarGridHeader>\n {(day) => (\n <AriaCalendarHeaderCell className=\"ddga-calendar__weekday\">\n {formatWeekdayLabel(day, dgaLocale)}\n </AriaCalendarHeaderCell>\n )}\n </AriaCalendarGridHeader>\n <AriaCalendarGridBody>\n {(date) => (\n <CalendarDayCell\n date={date}\n showSecondary={showSecondaryCalendar}\n calendarSystem={calendarSystem}\n />\n )}\n </AriaCalendarGridBody>\n </AriaCalendarGrid>\n </AriaCalendar>\n </AriaDialog>\n </AriaPopover>\n </AriaDatePicker>\n </I18nProvider>\n );\n}\n\n// ─── 5. Exports ─── //\n\nexport { DatePicker, datePickerTriggerVariants, datePickerVariants };\nexport type { DatePickerProps, CalendarSystem, CalendarLabels };\n"],"mappings":"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","names":[]}
|
|
@@ -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-
|
|
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-
|
|
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-
|
|
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
|
|
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
|
|
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
|
-
|
|
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-
|
|
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":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACrBA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,8BAEK;AACP,mCAAkD;AAClD,kEAAoB;AAsIZ,+CAAA;AA9HR,IAAM,wBAAA,EAA0B,yCAAA,uBAAI,EAAyB;AAAA,EAC3D,QAAA,EAAU;AAAA,IACR,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM;AAAA,IACR;AAAA,EACF;AACF,CAAC,CAAA;AASD,IAAM,kBAAA,EAAoB,kCAAA,IAAiD,CAAA;AAoF3E,SAAS,UAAA,CAAW;AAAA,EAClB,QAAA,EAAU,IAAA;AAAA,EACV,IAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,aAAA,EAAe,KAAA,IAAS,KAAA,CAAA;AAC9B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,EAAA,EAAI,6BAAA,iBAAS,WAAA,UAAe,OAAK,CAAA;AACrE,EAAA,MAAM,WAAA,EAAa,aAAA,EAAe,KAAA,EAAO,YAAA;AAEzC,EAAA,MAAM,QAAA,EAAU,gCAAA;AAAA,IACd,CAAC,IAAA,EAAA,GAAkB;AACjB,MAAA,GAAA,CAAI,CAAC,YAAA,EAAc,eAAA,CAAgB,IAAI,CAAA;AACvC,sBAAA,YAAA,wBAAA,CAAe,IAAI,GAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,YAAY;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,IAAA,EAAM,4BAAA;AAAA,IACV,CAAA,EAAA,GAAA,CAAO,EAAE,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,QAAQ,CAAA,CAAA;AAAA,IAC5C,CAAC,OAAA,EAAS,UAAA,EAAY,OAAO;AAAA,EAC/B,CAAA;AAEA,EAAA,uBACE,6BAAA,iBAAC,CAAkB,QAAA,EAAlB,EAA2B,KAAA,EAAO,GAAA,EAChC,QAAA,EAAA,QAAA,kBACC,6BAAA,yBAAC,EAAA,EAAQ,IAAA,EAAM,UAAA,EAAY,YAAA,EAAc,OAAA,EACtC,SAAA,CACH,EAAA,EAEA,SAAA,CAEJ,CAAA;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,KAAA,EAAO,IAAA;AAAA,EACP,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2B;AACzB,EAAA,MAAM,IAAA,EAAM,+BAAA,iBAA4B,CAAA;AACxC,EAAA,MAAM,QAAA,mCAAU,GAAA,6BAAK,SAAA,UAAW,MAAA;AAEhC,EAAA,MAAM,OAAA,EAAS,2BAAA,KAAY,CAAA;AAC3B,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,SAAA,IAAa,aAAA,GAAgB,CAAC,QAAA,GAAW,CAAC,MAAA,CAAO,OAAA,EAAS;AACxE,MAAA,MAAA,CAAO,QAAA,EAAU,IAAA;AACjB,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,MAEF,CAAA;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,GAAA,CAAI,CAAC,OAAA,EAAS,OAAO,IAAA;AAErB,EAAA,MAAM,OAAA,kBACJ,6BAAA;AAAA,IAAC,wBAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA;AAAA,MACA,SAAA,mBAAW,SAAA,0BAAa,6BAAA,wBAAC,EAAA,EAAO,aAAA,EAAY,OAAA,CAAO,GAAA;AAAA,MACnD,OAAA,mBAAS,OAAA,0BAAW,6BAAA,6BAAC,EAAA,EAAY,aAAA,EAAY,OAAA,CAAO,GAAA;AAAA,MACpD,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,kCAAA,0BAAG,EAA4B,SAAS,CAAA;AAAA,MAClD,GAAG,KAAA;AAAA,MAEH;AAAA,IAAA;AAAA,EACH,CAAA;AAGF,EAAA,uBAAO,6BAAA,gCAAC,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,OAAA,CAAO,CAAA;AACzC;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd,GAAG;AACL,CAAA,EAA2B;AACzB,EAAA,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,SAAA,IAAa,aAAA,GAAgB,CAAC,UAAA,GAAa,CAAC,KAAA,CAAM,iBAAiB,CAAA,EAAG;AACpF,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,IACF,CAAA;AAAA,EACF;AACA,EAAA,uBACE,6BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,kCAAA,yBAAG,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG,KAAA;AAAA,MAEH;AAAA,IAAA;AAAA,EACH,CAAA;AAEJ;AAIA,SAAS,kBAAA,CAAmB,QAAA,EAAgC;AAC1D,EAAA,MAAM,MAAA,EAAQ,eAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AACvD,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,EAAA,mBACvB,8BAAA,eAAC,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,EAAA,EAAI,EAAA,kBAAI,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,0BAAA,EAA2B,aAAA,EAAY,OAAA,CAAO,EAAA,EAAK,IAAA;AAAA,IAC1E;AAAA,EAAA,EAAA,CAAA,EAFY,CAGf,CACD,CAAA;AACH;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,MAAM,CAAA,EAAyB;AAChF,EAAA,MAAM,IAAA,EAAM,+BAAA,iBAA4B,CAAA;AACxC,EAAA,MAAM,QAAA,mCAAU,GAAA,6BAAK,SAAA,UAAW,MAAA;AAEhC,EAAA,GAAA,CAAI,OAAA,EAAS;AACX,IAAA,uBACE,6BAAA;AAAA,MAAC,gCAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,kBAAA;AAAA,QACV,KAAA,EAAM,OAAA;AAAA,QACN,SAAA,EAAW,kCAAA,uBAAG,CAAwB,CAAA,EAAG,SAAS,CAAA;AAAA,QACjD,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,kBAAA,CAAmB,QAAQ;AAAA,MAAA;AAAA,IAC9B,CAAA;AAAA,EAEJ;AAEA,EAAA,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,SAAA,IAAa,aAAA,GAAgB,CAAC,KAAA,CAAM,YAAY,EAAA,GAAK,CAAC,KAAA,CAAM,iBAAiB,CAAA,EAAG;AAC9F,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,IACF,CAAA;AAAA,EACF;AAEA,EAAA,uBACE,6BAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,kCAAA,uBAAG,CAAwB,EAAE,MAAA,EAAQ,KAAK,CAAC,CAAA,EAAG,SAAS,CAAA;AAAA,MACjE,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,kBAAA,CAAmB,QAAQ;AAAA,IAAA;AAAA,EAC9B,CAAA;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA,EAAc,CAAC,CAAA,EAAA,GAAM,CAAA,CAAA,EAAI,CAAC,CAAA,YAAA,CAAA;AAAA,EAC1B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2B;AACzB,EAAA,MAAM,QAAA,EAAU,0BAAA,CAAM;AACtB,EAAA,uBACE,8BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,iBAAA,EAAiB,OAAA;AAAA,MACjB,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,kCAAA,yBAAG,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,8BAAA,GAAC,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAU,gCAAA,EACvB,QAAA,EAAA;AAAA,UAAA,KAAA;AAAA,UACA,MAAA,GAAS,KAAA,kBACR,8BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,gCAAA,EAAiC,QAAA,EAAA;AAAA,YAAA,GAAA;AAAA,YAAE,WAAA,CAAY,KAAK;AAAA,UAAA,EAAA,CAAE,EAAA,EACpE;AAAA,QAAA,EAAA,CACN,CAAA;AAAA,wBACA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAiC,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAC3D,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW,KAAA,EAAkB,KAAA,EAAuB;AAC3D,EAAA,OAAO,OAAO,MAAA,IAAU,SAAA,EAAW,MAAA,EAAQ,KAAA;AAC7C;AAEA,SAAS,wBAAA,CAAyB;AAAA,EAChC,OAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA,EAAa,KAAA;AAAA,EACb,iBAAA;AAAA,EACA,YAAA,EAAc,gBAAA;AAAA,EACd,aAAA;AAAA,EACA,cAAA,EAAgB,CAAC,SAAA,EAAA,GAAc,CAAA,KAAA,EAAQ,SAAS,CAAA,KAAA,CAAA;AAAA,EAChD,cAAA,EAAgB,WAAA;AAAA,EAChB,SAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd,iBAAA,EAAmB,cAAA;AAAA,EACnB,GAAG;AACL,CAAA,EAAkC;AAChC,EAAA,MAAM,aAAA,EAAe,MAAA,IAAU,KAAA,CAAA;AAC/B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,EAAA,EAAI,6BAAA,iBAAmB,YAAA,UAAgB,CAAC,GAAC,CAAA;AACrE,EAAA,MAAM,SAAA,EAAW,aAAA,EAAe,MAAA,EAAQ,QAAA;AAExC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,EAAA,EAAI,6BAAA,EAAW,CAAA;AACrC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,EAAA,EAAI,6BAAA,KAAc,CAAA;AAC9C,EAAA,MAAM,OAAA,EAAS,0BAAA,CAAM;AAErB,EAAA,MAAM,OAAA,EAAS,CAAC,QAAA,EAAA,GAAqB;AACnC,IAAA,MAAM,KAAA,EAAO,QAAA,CAAS,QAAA,CAAS,QAAQ,EAAA,EACnC,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,EAAA,GAAM,EAAA,IAAM,QAAQ,EAAA,EACrC,CAAC,GAAG,QAAA,EAAU,QAAQ,CAAA;AAC1B,IAAA,GAAA,CAAI,CAAC,YAAA,EAAc,WAAA,CAAY,IAAI,CAAA;AACnC,oBAAA,aAAA,0BAAA,CAAgB,IAAI,GAAA;AAAA,EACtB,CAAA;AAEA,EAAA,MAAM,SAAA,EAAW,4BAAA,CAAQ,EAAA,GAAM;AAC7B,IAAA,MAAM,EAAA,EAAI,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,WAAA,CAAY,CAAA;AACnC,IAAA,GAAA,CAAI,CAAC,WAAA,GAAc,CAAC,CAAA,EAAG,OAAO,OAAA;AAC9B,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAA,GAAM,UAAA,CAAW,CAAA,CAAE,KAAA,EAAO,CAAA,CAAE,KAAK,CAAA,CAAE,WAAA,CAAY,CAAA,CAAE,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACrF,CAAA,EAAG,CAAC,OAAA,EAAS,KAAA,EAAO,UAAU,CAAC,CAAA;AAE/B,EAAA,MAAM,YAAA,EAAc,cAAA,GAAiB,KAAA,GAAQ,QAAA,CAAS,OAAA,EAAS,aAAA;AAC/D,EAAA,MAAM,QAAA,EAAU,YAAA,GAAe,CAAC,SAAA,EAAW,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,aAAa,EAAA,EAAI,QAAA;AAC9E,EAAA,MAAM,UAAA,EAAY,YAAA,EAAc,QAAA,CAAS,OAAA,EAAA,kBAAU,aAAA,UAAiB,GAAA,EAAA,EAAK,CAAA;AAEzE,EAAA,uBACE,8BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,IAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MACZ,iBAAA,EAAiB,cAAA;AAAA,MACjB,WAAA,EAAU,4BAAA;AAAA,MACV,SAAA,EAAW,kCAAA,iCAAG,EAAmC,SAAS,CAAA;AAAA,MAEzD,QAAA,EAAA;AAAA,QAAA,WAAA,kBACC,6BAAA;AAAA,UAAC,2BAAA;AAAA,UAAA;AAAA,YACC,YAAA,EAAY,WAAA;AAAA,YACZ,WAAA,EAAa,iBAAA;AAAA,YACb,WAAA,EAAa,KAAA;AAAA,YACb,KAAA,EAAO,KAAA;AAAA,YACP,QAAA,EAAU,CAAC,KAAA,EAAA,GAAU,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,KAAK;AAAA,UAAA;AAAA,QAClD,EAAA,EACE,IAAA;AAAA,wBACJ,6BAAA,KAAC,EAAA,EAAI,EAAA,EAAI,MAAA,EAAQ,SAAA,EAAU,uCAAA,EACxB,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,EAAA,mBACZ,6BAAA;AAAA,UAAC,0BAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,IAAA;AAAA,YACL,KAAA,EAAO,GAAA,CAAI,KAAA;AAAA,YACX,OAAA,EAAS,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AAAA,YACpC,eAAA,EAAiB,CAAA,EAAA,GAAM,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAAA,YACvC,QAAA,EAAU,GAAA,CAAI,QAAA;AAAA,YACd,KAAA,kBACE,8BAAA,oBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,GAAA,CAAI,KAAA;AAAA,cACJ,GAAA,CAAI,MAAA,GAAS,KAAA,kBACZ,8BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,wCAAA,EAAyC,aAAA,EAAY,MAAA,EAClE,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBAAI,GAAA;AAAA,gBACH,GAAA,CAAI,KAAA;AAAA,gBAAM;AAAA,cAAA,EAAA,CACd,EAAA,EACE;AAAA,YAAA,EAAA,CACN;AAAA,UAAA,CAAA;AAAA,UAfG,GAAA,CAAI;AAAA,QAiBX,CACD,EAAA,CACH,CAAA;AAAA,QACC,YAAA,kBACC,8BAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,uCAAA;AAAA,YACV,eAAA,EAAe,QAAA;AAAA,YACf,eAAA,EAAe,MAAA;AAAA,YACf,OAAA,EAAS,CAAA,EAAA,GAAM,WAAA,CAAY,CAAC,IAAA,EAAA,GAAS,CAAC,IAAI,CAAA;AAAA,YAEzC,QAAA,EAAA;AAAA,cAAA,SAAA,EAAW,cAAA,EAAgB,aAAA,CAAc,SAAS,CAAA;AAAA,8BACnD,6BAAA;AAAA,gBAAC,6BAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,kCAAA,4CAAG,EAA8C,SAAA,GAAY,SAAS,CAAA;AAAA,kBACjF,aAAA,EAAY;AAAA,gBAAA;AAAA,cACd;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,EACE;AAAA,MAAA;AAAA,IAAA;AAAA,EACN,CAAA;AAEJ;AAEA,SAAS,oBAAA,CAAqB,EAAE,SAAA,EAAW,GAAG,MAAM,CAAA,EAA8B;AAChF,EAAA,uBACE,6BAAA;AAAA,IAAC,mBAAA,CAAoB,IAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,wBAAA;AAAA,MACV,SAAA,EAAW,kCAAA,6BAAG,EAA+B,SAAS,CAAA;AAAA,MACrD,GAAG;AAAA,IAAA;AAAA,EACN,CAAA;AAEJ;AAEA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,MAAM,CAAA,EAA0B;AAClF,EAAA,uBACE,8BAAA;AAAA,IAAC,mBAAA,CAAoB,IAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,kCAAA,wBAAG,EAA0B,SAAS,CAAA;AAAA,MAChD,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,6BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,SAAA,CAAS,CAAA;AAAA,wBAC1D,6BAAA,mBAAC,CAAoB,SAAA,EAApB,EAA8B,SAAA,EAAU,mCAAA,EACvC,QAAA,kBAAA,6BAAA,uBAAC,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,aAAA,EAAY,OAAA,CAAO,EAAA,CACtE;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,CAAA;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,WAAA,EAAa,eAAA;AAAA,EACb,WAAA,EAAa,cAAA;AAAA,EACb,YAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA,EAAe,IAAA;AAAA,EACf,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,IAAA,EAAM,+BAAA,iBAA4B,CAAA;AAExC,EAAA,MAAM,YAAA,EAAc,CAAA,EAAA,GAAM;AACxB,oBAAA,OAAA,0BAAA,CAAU,GAAA;AACV,IAAA,GAAA,CAAI,aAAA,mBAAgB,GAAA,6BAAK,SAAA,EAAS,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAAA,EACrD,CAAA;AAEA,EAAA,uBACE,8BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,kCAAA,wBAAG,EAA0B,SAAS,CAAA;AAAA,MAChD,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,8BAAA;AAAA,UAAC,wBAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,SAAA,EAAU,+BAAA;AAAA,YACV,OAAA,EAAS,WAAA;AAAA,YAER,QAAA,EAAA;AAAA,cAAA,UAAA;AAAA,cACA,aAAA,GAAgB,KAAA,EAAO,CAAA,EAAA,EAAK,YAAY,CAAA,CAAA,EAAA,EAAM;AAAA,YAAA;AAAA,UAAA;AAAA,QACjD,CAAA;AAAA,wBACA,6BAAA,wBAAC,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,OAAA,EACxC,QAAA,EAAA,WAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,CAAA;AAEJ;AD1GA;AACA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,+dAAC","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-
|
|
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
|
|
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-
|
|
272
|
+
//# sourceMappingURL=chunk-NGDKAG2O.cjs.map
|