@nswds/app 1.33.0 → 1.35.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/dist/index.cjs CHANGED
@@ -29,6 +29,7 @@ var SelectPrimitive = require('@radix-ui/react-select');
29
29
  var PopoverPrimitive = require('@radix-ui/react-popover');
30
30
  var LabelPrimitive = require('@radix-ui/react-label');
31
31
  var RadioGroupPrimitive = require('@radix-ui/react-radio-group');
32
+ var lucideReact = require('lucide-react');
32
33
  var TabsPrimitive2 = require('@radix-ui/react-tabs');
33
34
  var CollapsiblePrimitive = require('@radix-ui/react-collapsible');
34
35
  var usehooks = require('@uidotdev/usehooks');
@@ -52,6 +53,10 @@ var RechartsPrimitive = require('recharts');
52
53
  var react = require('@remixicon/react');
53
54
  var tailwindVariants = require('tailwind-variants');
54
55
  var HoverCardPrimitives = require('@radix-ui/react-hover-card');
56
+ var AlertDialogPrimitive = require('@radix-ui/react-alert-dialog');
57
+ var reactDayPicker = require('react-day-picker');
58
+ var useEmblaCarousel = require('embla-carousel-react');
59
+ var inputOtp = require('input-otp');
55
60
  var slugify = require('@sindresorhus/slugify');
56
61
  var zustand = require('zustand');
57
62
  var middleware = require('zustand/middleware');
@@ -108,6 +113,8 @@ var SliderPrimitive__namespace = /*#__PURE__*/_interopNamespace(SliderPrimitive)
108
113
  var SwitchPrimitive__namespace = /*#__PURE__*/_interopNamespace(SwitchPrimitive);
109
114
  var RechartsPrimitive__namespace = /*#__PURE__*/_interopNamespace(RechartsPrimitive);
110
115
  var HoverCardPrimitives__namespace = /*#__PURE__*/_interopNamespace(HoverCardPrimitives);
116
+ var AlertDialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(AlertDialogPrimitive);
117
+ var useEmblaCarousel__default = /*#__PURE__*/_interopDefault(useEmblaCarousel);
111
118
 
112
119
  // src/components/Accordion.tsx
113
120
  var Icons = {
@@ -2000,7 +2007,18 @@ function Checkbox({ className, ...props }) {
2000
2007
  {
2001
2008
  "data-slot": "checkbox",
2002
2009
  className: cn(
2003
- "peer border-grey-200 dark:bg-input/30 data-[state=checked]:bg-primary-800 data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary-800 data-[state=checked]:border-primary-800 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
2010
+ // Base styles
2011
+ "peer border-primary-800 flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-[4px] border shadow-xs ring-offset-white transition-shadow outline-none",
2012
+ // Dark mode styles
2013
+ "dark:bg-input/30",
2014
+ // Checked styles
2015
+ "data-[state=checked]:bg-primary-800 dark:data-[state=checked]:bg-primary data-[state=checked]:bg-white data-[state=checked]:text-white",
2016
+ // Focus styles
2017
+ "focus:border-grey-600 focus:ring-primary-650/70 ring-offset-white focus:ring-2 focus:ring-offset-2 focus:outline-none",
2018
+ // aria-invalid styles
2019
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
2020
+ // Disabled styles
2021
+ "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
2004
2022
  className
2005
2023
  ),
2006
2024
  ...props,
@@ -2008,8 +2026,8 @@ function Checkbox({ className, ...props }) {
2008
2026
  CheckboxPrimitive__namespace.Indicator,
2009
2027
  {
2010
2028
  "data-slot": "checkbox-indicator",
2011
- className: "flex items-center justify-center text-current transition-none",
2012
- children: /* @__PURE__ */ jsxRuntime.jsx(Icons.check, { className: "size-3.5" })
2029
+ className: "bg-primary-800 flex items-center justify-center rounded-[4px] text-current transition-none",
2030
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icons.check, { className: "size-6" })
2013
2031
  }
2014
2032
  )
2015
2033
  }
@@ -2172,15 +2190,15 @@ function SelectTrigger({
2172
2190
  "data-size": size,
2173
2191
  className: cn(
2174
2192
  // Base styles
2175
- "border-nsw-grey-600 [&_svg:not([class*='text-'])]:text-nsw-grey-600 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2193
+ "border-grey-600 [&_svg:not([class*='text-'])]:text-grey-600 flex w-full items-center justify-between gap-2 rounded-sm border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2176
2194
  // Disabled styles
2177
- "disabled:cursor-not-allowed disabled:opacity-50",
2195
+ "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
2178
2196
  // aria-invalid styles
2179
2197
  "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
2180
2198
  // Focus styles
2181
2199
  "focus:outline-primary-650/70 focus:outline focus:outline-2 focus:outline-offset-2",
2182
2200
  // Placeholder styles
2183
- "data-[placeholder]:text-nsw-grey-600",
2201
+ "data-[placeholder]:text-grey-600",
2184
2202
  // Dark mode styles
2185
2203
  "dark:bg-input/30 dark:hover:bg-input/50",
2186
2204
  // Size styles
@@ -2207,8 +2225,9 @@ function SelectContent({
2207
2225
  "data-slot": "select-content",
2208
2226
  className: cn(
2209
2227
  // Base styles
2210
- "text-nsw-grey-800 bg-white",
2211
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
2228
+ "text-grey-800 border-grey-200 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-sm border bg-white shadow-md",
2229
+ // State styles
2230
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
2212
2231
  position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
2213
2232
  className
2214
2233
  ),
@@ -2236,7 +2255,7 @@ function SelectLabel({ className, ...props }) {
2236
2255
  SelectPrimitive__namespace.Label,
2237
2256
  {
2238
2257
  "data-slot": "select-label",
2239
- className: cn("text-nsw-grey-600 px-2 py-1.5 text-xs", className),
2258
+ className: cn("text-grey-600 px-2 py-1.5 text-xs", className),
2240
2259
  ...props
2241
2260
  }
2242
2261
  );
@@ -2251,7 +2270,7 @@ function SelectItem({
2251
2270
  {
2252
2271
  "data-slot": "select-item",
2253
2272
  className: cn(
2254
- "focus:bg-primary-800/10 focus:text-primary-800 [&_svg:not([class*='text-'])]:text-nsw-grey-600 relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:font-bold data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-6 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
2273
+ "focus:bg-primary-800/10 focus:text-primary-800 [&_svg:not([class*='text-'])]:text-grey-600 relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:font-bold data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-6 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
2255
2274
  className
2256
2275
  ),
2257
2276
  ...props,
@@ -2270,7 +2289,7 @@ function SelectSeparator({
2270
2289
  SelectPrimitive__namespace.Separator,
2271
2290
  {
2272
2291
  "data-slot": "select-separator",
2273
- className: cn("bg-nsw-primary-800/20 pointer-events-none -mx-1 my-1 h-px", className),
2292
+ className: cn("bg-primary-800/20 pointer-events-none -mx-1 my-1 h-px", className),
2274
2293
  ...props
2275
2294
  }
2276
2295
  );
@@ -2376,7 +2395,16 @@ function RadioGroupItem({
2376
2395
  {
2377
2396
  "data-slot": "radio-group-item",
2378
2397
  className: cn(
2379
- "border-nsw-grey-200 text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
2398
+ // Base styles
2399
+ "border-primary-800 text-primary-800 aspect-square size-8 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none",
2400
+ // Dark mode styles
2401
+ "dark:bg-input/30",
2402
+ // Focus styles
2403
+ "focus:border-grey-600 focus:ring-primary-650/70 ring-offset-white focus:ring-2 focus:ring-offset-2 focus:outline-none",
2404
+ // aria-invalid styles
2405
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
2406
+ // Disabled styles
2407
+ "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
2380
2408
  className
2381
2409
  ),
2382
2410
  ...props,
@@ -2384,8 +2412,11 @@ function RadioGroupItem({
2384
2412
  RadioGroupPrimitive__namespace.Indicator,
2385
2413
  {
2386
2414
  "data-slot": "radio-group-indicator",
2387
- className: "relative flex items-center justify-center",
2388
- children: /* @__PURE__ */ jsxRuntime.jsx(Icons.circle, { className: "fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" })
2415
+ className: cn(
2416
+ // Base styles
2417
+ "relative flex items-center justify-center"
2418
+ ),
2419
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleIcon, { className: "fill-primary-800 absolute top-1/2 left-1/2 size-6 -translate-x-1/2 -translate-y-1/2" })
2389
2420
  }
2390
2421
  )
2391
2422
  }
@@ -7482,7 +7513,7 @@ function Heading({
7482
7513
 
7483
7514
  // package.json
7484
7515
  var package_default = {
7485
- version: "1.32.0"};
7516
+ version: "1.34.0"};
7486
7517
  function Logo(props) {
7487
7518
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7488
7519
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "NSW Government" }),
@@ -7669,15 +7700,15 @@ function Input({ className, type, ...props }) {
7669
7700
  "data-slot": "input",
7670
7701
  className: cn(
7671
7702
  // Base styles
7672
- "border-nsw-grey-200 flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none md:text-sm",
7703
+ "border-nsw-grey-600 flex h-12 w-full min-w-0 rounded-sm border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none md:text-sm",
7673
7704
  // Selection styles
7674
- "selection:bg-primary-800 selection:text-primary-foreground",
7705
+ "selection:bg-primary-800 selection:text-white",
7675
7706
  // Placeholder styles
7676
- "placeholder:text-muted-foreground",
7707
+ "placeholder:text-grey-500",
7677
7708
  // File input styles
7678
- "file:text-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium",
7709
+ "file:text-grey-800 file:inline-flex file:h-10 file:border-0 file:bg-transparent file:text-sm file:font-medium",
7679
7710
  // Focus styles
7680
- "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
7711
+ "focus-visible:border-grey-600 focus-visible:ring-primary-650/70 ring-offset-white focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",
7681
7712
  // Disabled styles
7682
7713
  "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
7683
7714
  // aria-invalid styles
@@ -9087,7 +9118,17 @@ function Switch({ className, ...props }) {
9087
9118
  {
9088
9119
  "data-slot": "switch",
9089
9120
  className: cn(
9090
- "peer data-[state=checked]:bg-primary-800 data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
9121
+ "peer border-grey-600 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none",
9122
+ // state styles
9123
+ "data-[state=unchecked]:bg-input data-[state=checked]:bg-primary-800",
9124
+ // Dark mode styles
9125
+ "dark:data-[state=unchecked]:bg-input/80",
9126
+ // Focus styles
9127
+ "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
9128
+ // aria-invalid styles
9129
+ "",
9130
+ // Disabled styles
9131
+ "disabled:cursor-not-allowed disabled:opacity-50",
9091
9132
  className
9092
9133
  ),
9093
9134
  ...props,
@@ -9096,7 +9137,11 @@ function Switch({ className, ...props }) {
9096
9137
  {
9097
9138
  "data-slot": "switch-thumb",
9098
9139
  className: cn(
9099
- "bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
9140
+ "bg-background pointer-events-none block size-4 rounded-full ring-0 transition-transform",
9141
+ // state styles
9142
+ "data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0",
9143
+ // Dark mode styles
9144
+ "dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground"
9100
9145
  )
9101
9146
  }
9102
9147
  )
@@ -9407,7 +9452,16 @@ function Textarea({ className, ...props }) {
9407
9452
  {
9408
9453
  "data-slot": "textarea",
9409
9454
  className: cn(
9410
- "border-nsw-grey-200 placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
9455
+ // Base styles
9456
+ "border-nsw-grey-600 dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-sm border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none md:text-sm",
9457
+ // Placeholder styles
9458
+ "placeholder:text-grey-500",
9459
+ // Focus styles
9460
+ "focus-visible:border-grey-600 focus-visible:ring-primary-650/70 ring-offset-white focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",
9461
+ // Disabled styles
9462
+ "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
9463
+ // aria-invalid styles
9464
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
9411
9465
  className
9412
9466
  ),
9413
9467
  ...props
@@ -13917,6 +13971,512 @@ var Tracker = React15__namespace.default.forwardRef(
13917
13971
  }
13918
13972
  );
13919
13973
  Tracker.displayName = "Tracker";
13974
+ function AlertDialog({ ...props }) {
13975
+ return /* @__PURE__ */ jsxRuntime.jsx(AlertDialogPrimitive__namespace.Root, { "data-slot": "alert-dialog", ...props });
13976
+ }
13977
+ function AlertDialogTrigger({
13978
+ ...props
13979
+ }) {
13980
+ return /* @__PURE__ */ jsxRuntime.jsx(AlertDialogPrimitive__namespace.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
13981
+ }
13982
+ function AlertDialogPortal({ ...props }) {
13983
+ return /* @__PURE__ */ jsxRuntime.jsx(AlertDialogPrimitive__namespace.Portal, { "data-slot": "alert-dialog-portal", ...props });
13984
+ }
13985
+ function AlertDialogOverlay({
13986
+ className,
13987
+ ...props
13988
+ }) {
13989
+ return /* @__PURE__ */ jsxRuntime.jsx(
13990
+ AlertDialogPrimitive__namespace.Overlay,
13991
+ {
13992
+ "data-slot": "alert-dialog-overlay",
13993
+ className: cn(
13994
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
13995
+ className
13996
+ ),
13997
+ ...props
13998
+ }
13999
+ );
14000
+ }
14001
+ function AlertDialogContent({
14002
+ className,
14003
+ ...props
14004
+ }) {
14005
+ return /* @__PURE__ */ jsxRuntime.jsxs(AlertDialogPortal, { children: [
14006
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDialogOverlay, {}),
14007
+ /* @__PURE__ */ jsxRuntime.jsx(
14008
+ AlertDialogPrimitive__namespace.Content,
14009
+ {
14010
+ "data-slot": "alert-dialog-content",
14011
+ className: cn(
14012
+ "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
14013
+ className
14014
+ ),
14015
+ ...props
14016
+ }
14017
+ )
14018
+ ] });
14019
+ }
14020
+ function AlertDialogHeader({ className, ...props }) {
14021
+ return /* @__PURE__ */ jsxRuntime.jsx(
14022
+ "div",
14023
+ {
14024
+ "data-slot": "alert-dialog-header",
14025
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
14026
+ ...props
14027
+ }
14028
+ );
14029
+ }
14030
+ function AlertDialogFooter({ className, ...props }) {
14031
+ return /* @__PURE__ */ jsxRuntime.jsx(
14032
+ "div",
14033
+ {
14034
+ "data-slot": "alert-dialog-footer",
14035
+ className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
14036
+ ...props
14037
+ }
14038
+ );
14039
+ }
14040
+ function AlertDialogTitle({
14041
+ className,
14042
+ ...props
14043
+ }) {
14044
+ return /* @__PURE__ */ jsxRuntime.jsx(
14045
+ AlertDialogPrimitive__namespace.Title,
14046
+ {
14047
+ "data-slot": "alert-dialog-title",
14048
+ className: cn("text-lg font-semibold", className),
14049
+ ...props
14050
+ }
14051
+ );
14052
+ }
14053
+ function AlertDialogDescription({
14054
+ className,
14055
+ ...props
14056
+ }) {
14057
+ return /* @__PURE__ */ jsxRuntime.jsx(
14058
+ AlertDialogPrimitive__namespace.Description,
14059
+ {
14060
+ "data-slot": "alert-dialog-description",
14061
+ className: cn("text-muted-foreground text-sm", className),
14062
+ ...props
14063
+ }
14064
+ );
14065
+ }
14066
+ function AlertDialogAction({
14067
+ className,
14068
+ ...props
14069
+ }) {
14070
+ return /* @__PURE__ */ jsxRuntime.jsx(AlertDialogPrimitive__namespace.Action, { className: cn(buttonVariants(), className), ...props });
14071
+ }
14072
+ function AlertDialogCancel({
14073
+ className,
14074
+ ...props
14075
+ }) {
14076
+ return /* @__PURE__ */ jsxRuntime.jsx(
14077
+ AlertDialogPrimitive__namespace.Cancel,
14078
+ {
14079
+ className: cn(buttonVariants({ variant: "outline" }), className),
14080
+ ...props
14081
+ }
14082
+ );
14083
+ }
14084
+ function Calendar({
14085
+ className,
14086
+ classNames,
14087
+ showOutsideDays = true,
14088
+ captionLayout = "label",
14089
+ buttonVariant = "ghost",
14090
+ formatters,
14091
+ components,
14092
+ ...props
14093
+ }) {
14094
+ const defaultClassNames = reactDayPicker.getDefaultClassNames();
14095
+ const buttonColor = "light";
14096
+ return /* @__PURE__ */ jsxRuntime.jsx(
14097
+ reactDayPicker.DayPicker,
14098
+ {
14099
+ showOutsideDays,
14100
+ className: cn(
14101
+ "bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
14102
+ String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
14103
+ String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
14104
+ className
14105
+ ),
14106
+ captionLayout,
14107
+ formatters: {
14108
+ formatMonthDropdown: (date) => date.toLocaleString("default", { month: "short" }),
14109
+ ...formatters
14110
+ },
14111
+ classNames: {
14112
+ root: cn("w-fit", defaultClassNames.root),
14113
+ months: cn("flex gap-4 flex-col md:flex-row relative", defaultClassNames.months),
14114
+ month: cn("flex flex-col w-full gap-4", defaultClassNames.month),
14115
+ nav: cn(
14116
+ "flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",
14117
+ defaultClassNames.nav
14118
+ ),
14119
+ button_previous: cn(
14120
+ buttonVariants({ variant: buttonVariant }),
14121
+ "size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",
14122
+ defaultClassNames.button_previous
14123
+ ),
14124
+ button_next: cn(
14125
+ buttonVariants({ variant: buttonVariant }),
14126
+ "size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",
14127
+ defaultClassNames.button_next
14128
+ ),
14129
+ month_caption: cn(
14130
+ "flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",
14131
+ defaultClassNames.month_caption
14132
+ ),
14133
+ dropdowns: cn(
14134
+ "w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",
14135
+ defaultClassNames.dropdowns
14136
+ ),
14137
+ dropdown_root: cn(
14138
+ "relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",
14139
+ defaultClassNames.dropdown_root
14140
+ ),
14141
+ dropdown: cn("absolute inset-0 opacity-0", defaultClassNames.dropdown),
14142
+ caption_label: cn(
14143
+ "select-none font-medium",
14144
+ captionLayout === "label" ? "text-sm" : "rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",
14145
+ defaultClassNames.caption_label
14146
+ ),
14147
+ table: "w-full border-collapse",
14148
+ weekdays: cn("flex", defaultClassNames.weekdays),
14149
+ weekday: cn(
14150
+ "text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",
14151
+ defaultClassNames.weekday
14152
+ ),
14153
+ week: cn("flex w-full mt-2", defaultClassNames.week),
14154
+ week_number_header: cn("select-none w-(--cell-size)", defaultClassNames.week_number_header),
14155
+ week_number: cn(
14156
+ "text-[0.8rem] select-none text-muted-foreground",
14157
+ defaultClassNames.week_number
14158
+ ),
14159
+ day: cn(
14160
+ "relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",
14161
+ defaultClassNames.day
14162
+ ),
14163
+ range_start: cn("rounded-l-md bg-accent", defaultClassNames.range_start),
14164
+ range_middle: cn("rounded-none", defaultClassNames.range_middle),
14165
+ range_end: cn("rounded-r-md bg-accent", defaultClassNames.range_end),
14166
+ today: cn(
14167
+ "bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",
14168
+ defaultClassNames.today
14169
+ ),
14170
+ outside: cn(
14171
+ "text-muted-foreground aria-selected:text-muted-foreground",
14172
+ defaultClassNames.outside
14173
+ ),
14174
+ disabled: cn("text-muted-foreground opacity-50", defaultClassNames.disabled),
14175
+ hidden: cn("invisible", defaultClassNames.hidden),
14176
+ ...classNames
14177
+ },
14178
+ components: {
14179
+ Root: ({ className: className2, rootRef, ...props2 }) => {
14180
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "calendar", ref: rootRef, className: cn(className2), ...props2 });
14181
+ },
14182
+ Chevron: ({ className: className2, orientation, ...props2 }) => {
14183
+ if (orientation === "left") {
14184
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: cn("size-4", className2), ...props2 });
14185
+ }
14186
+ if (orientation === "right") {
14187
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: cn("size-4", className2), ...props2 });
14188
+ }
14189
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
14190
+ },
14191
+ DayButton: (dayButtonProps) => /* @__PURE__ */ jsxRuntime.jsx(CalendarDayButton, { ...dayButtonProps, color: buttonColor }),
14192
+ WeekNumber: ({ children, ...props2 }) => {
14193
+ return /* @__PURE__ */ jsxRuntime.jsx("td", { ...props2, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) });
14194
+ },
14195
+ ...components
14196
+ },
14197
+ ...props
14198
+ }
14199
+ );
14200
+ }
14201
+ function CalendarDayButton({
14202
+ className,
14203
+ day,
14204
+ modifiers,
14205
+ children,
14206
+ color,
14207
+ ...props
14208
+ }) {
14209
+ const defaultClassNames = reactDayPicker.getDefaultClassNames();
14210
+ const ref = React15__namespace.useRef(null);
14211
+ React15__namespace.useEffect(() => {
14212
+ if (modifiers.focused) ref.current?.focus();
14213
+ }, [modifiers.focused]);
14214
+ return /* @__PURE__ */ jsxRuntime.jsx(
14215
+ Button2,
14216
+ {
14217
+ ref,
14218
+ variant: "ghost",
14219
+ size: "icon",
14220
+ color,
14221
+ "data-day": day.date.toLocaleDateString(),
14222
+ "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
14223
+ "data-range-start": modifiers.range_start,
14224
+ "data-range-end": modifiers.range_end,
14225
+ "data-range-middle": modifiers.range_middle,
14226
+ className: cn(
14227
+ "data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",
14228
+ defaultClassNames.day,
14229
+ className
14230
+ ),
14231
+ ...props,
14232
+ children
14233
+ }
14234
+ );
14235
+ }
14236
+ var CarouselContext = React15__namespace.createContext(null);
14237
+ function useCarousel() {
14238
+ const context = React15__namespace.useContext(CarouselContext);
14239
+ if (!context) {
14240
+ throw new Error("useCarousel must be used within a <Carousel />");
14241
+ }
14242
+ return context;
14243
+ }
14244
+ function Carousel({
14245
+ orientation = "horizontal",
14246
+ opts,
14247
+ setApi,
14248
+ plugins,
14249
+ className,
14250
+ children,
14251
+ ...props
14252
+ }) {
14253
+ const [carouselRef, api] = useEmblaCarousel__default.default(
14254
+ {
14255
+ ...opts,
14256
+ axis: orientation === "horizontal" ? "x" : "y"
14257
+ },
14258
+ plugins
14259
+ );
14260
+ const [canScrollPrev, setCanScrollPrev] = React15__namespace.useState(false);
14261
+ const [canScrollNext, setCanScrollNext] = React15__namespace.useState(false);
14262
+ const onSelect = React15__namespace.useCallback((api2) => {
14263
+ if (!api2) return;
14264
+ setCanScrollPrev(api2.canScrollPrev());
14265
+ setCanScrollNext(api2.canScrollNext());
14266
+ }, []);
14267
+ const scrollPrev = React15__namespace.useCallback(() => {
14268
+ api?.scrollPrev();
14269
+ }, [api]);
14270
+ const scrollNext = React15__namespace.useCallback(() => {
14271
+ api?.scrollNext();
14272
+ }, [api]);
14273
+ const handleKeyDown = React15__namespace.useCallback(
14274
+ (event) => {
14275
+ if (event.key === "ArrowLeft") {
14276
+ event.preventDefault();
14277
+ scrollPrev();
14278
+ } else if (event.key === "ArrowRight") {
14279
+ event.preventDefault();
14280
+ scrollNext();
14281
+ }
14282
+ },
14283
+ [scrollPrev, scrollNext]
14284
+ );
14285
+ React15__namespace.useEffect(() => {
14286
+ if (!api || !setApi) return;
14287
+ setApi(api);
14288
+ }, [api, setApi]);
14289
+ React15__namespace.useEffect(() => {
14290
+ if (!api) return;
14291
+ onSelect(api);
14292
+ api.on("reInit", onSelect);
14293
+ api.on("select", onSelect);
14294
+ return () => {
14295
+ api?.off("select", onSelect);
14296
+ };
14297
+ }, [api, onSelect]);
14298
+ return /* @__PURE__ */ jsxRuntime.jsx(
14299
+ CarouselContext.Provider,
14300
+ {
14301
+ value: {
14302
+ carouselRef,
14303
+ api,
14304
+ opts,
14305
+ orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
14306
+ scrollPrev,
14307
+ scrollNext,
14308
+ canScrollPrev,
14309
+ canScrollNext
14310
+ },
14311
+ children: /* @__PURE__ */ jsxRuntime.jsx(
14312
+ "div",
14313
+ {
14314
+ onKeyDownCapture: handleKeyDown,
14315
+ className: cn("relative", className),
14316
+ role: "region",
14317
+ "aria-roledescription": "carousel",
14318
+ "data-slot": "carousel",
14319
+ ...props,
14320
+ children
14321
+ }
14322
+ )
14323
+ }
14324
+ );
14325
+ }
14326
+ function CarouselContent({ className, ...props }) {
14327
+ const { carouselRef, orientation } = useCarousel();
14328
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: carouselRef, className: "overflow-hidden", "data-slot": "carousel-content", children: /* @__PURE__ */ jsxRuntime.jsx(
14329
+ "div",
14330
+ {
14331
+ className: cn("flex", orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col", className),
14332
+ ...props
14333
+ }
14334
+ ) });
14335
+ }
14336
+ function CarouselItem({ className, ...props }) {
14337
+ const { orientation } = useCarousel();
14338
+ return /* @__PURE__ */ jsxRuntime.jsx(
14339
+ "div",
14340
+ {
14341
+ role: "group",
14342
+ "aria-roledescription": "slide",
14343
+ "data-slot": "carousel-item",
14344
+ className: cn(
14345
+ "min-w-0 shrink-0 grow-0 basis-full",
14346
+ orientation === "horizontal" ? "pl-4" : "pt-4",
14347
+ className
14348
+ ),
14349
+ ...props
14350
+ }
14351
+ );
14352
+ }
14353
+ function CarouselPrevious({
14354
+ className,
14355
+ variant = "outline",
14356
+ size = "icon",
14357
+ ...props
14358
+ }) {
14359
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
14360
+ return /* @__PURE__ */ jsxRuntime.jsxs(
14361
+ Button2,
14362
+ {
14363
+ "data-slot": "carousel-previous",
14364
+ variant,
14365
+ size,
14366
+ className: cn(
14367
+ "absolute size-8 rounded-full",
14368
+ orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
14369
+ className
14370
+ ),
14371
+ disabled: !canScrollPrev,
14372
+ onClick: scrollPrev,
14373
+ ...props,
14374
+ children: [
14375
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowLeft, {}),
14376
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Previous slide" })
14377
+ ]
14378
+ }
14379
+ );
14380
+ }
14381
+ function CarouselNext({
14382
+ className,
14383
+ variant = "outline",
14384
+ size = "icon",
14385
+ ...props
14386
+ }) {
14387
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
14388
+ return /* @__PURE__ */ jsxRuntime.jsxs(
14389
+ Button2,
14390
+ {
14391
+ "data-slot": "carousel-next",
14392
+ variant,
14393
+ size,
14394
+ className: cn(
14395
+ "absolute size-8 rounded-full",
14396
+ orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
14397
+ className
14398
+ ),
14399
+ disabled: !canScrollNext,
14400
+ onClick: scrollNext,
14401
+ ...props,
14402
+ children: [
14403
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, {}),
14404
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Next slide" })
14405
+ ]
14406
+ }
14407
+ );
14408
+ }
14409
+ function HoverCard({ ...props }) {
14410
+ return /* @__PURE__ */ jsxRuntime.jsx(HoverCardPrimitives__namespace.Root, { "data-slot": "hover-card", ...props });
14411
+ }
14412
+ function HoverCardTrigger({ ...props }) {
14413
+ return /* @__PURE__ */ jsxRuntime.jsx(HoverCardPrimitives__namespace.Trigger, { "data-slot": "hover-card-trigger", ...props });
14414
+ }
14415
+ function HoverCardContent({
14416
+ className,
14417
+ align = "center",
14418
+ sideOffset = 4,
14419
+ ...props
14420
+ }) {
14421
+ return /* @__PURE__ */ jsxRuntime.jsx(HoverCardPrimitives__namespace.Portal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsxRuntime.jsx(
14422
+ HoverCardPrimitives__namespace.Content,
14423
+ {
14424
+ "data-slot": "hover-card-content",
14425
+ align,
14426
+ sideOffset,
14427
+ className: cn(
14428
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
14429
+ className
14430
+ ),
14431
+ ...props
14432
+ }
14433
+ ) });
14434
+ }
14435
+ function InputOTP({
14436
+ className,
14437
+ containerClassName,
14438
+ ...props
14439
+ }) {
14440
+ return /* @__PURE__ */ jsxRuntime.jsx(
14441
+ inputOtp.OTPInput,
14442
+ {
14443
+ "data-slot": "input-otp",
14444
+ containerClassName: cn("flex items-center gap-2 has-disabled:opacity-50", containerClassName),
14445
+ className: cn("disabled:cursor-not-allowed", className),
14446
+ ...props
14447
+ }
14448
+ );
14449
+ }
14450
+ function InputOTPGroup({ className, ...props }) {
14451
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "input-otp-group", className: cn("flex items-center", className), ...props });
14452
+ }
14453
+ function InputOTPSlot({
14454
+ index,
14455
+ className,
14456
+ ...props
14457
+ }) {
14458
+ const inputOTPContext = React15__namespace.useContext(inputOtp.OTPInputContext);
14459
+ const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
14460
+ return /* @__PURE__ */ jsxRuntime.jsxs(
14461
+ "div",
14462
+ {
14463
+ "data-slot": "input-otp-slot",
14464
+ "data-active": isActive,
14465
+ className: cn(
14466
+ "data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]",
14467
+ className
14468
+ ),
14469
+ ...props,
14470
+ children: [
14471
+ char,
14472
+ hasFakeCaret && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) })
14473
+ ]
14474
+ }
14475
+ );
14476
+ }
14477
+ function InputOTPSeparator({ ...props }) {
14478
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MinusIcon, {}) });
14479
+ }
13920
14480
  var MOBILE_BREAKPOINT = 768;
13921
14481
  function useIsMobile() {
13922
14482
  const [isMobile, setIsMobile] = React15__namespace.useState(void 0);
@@ -14013,6 +14573,20 @@ function getHeadings(slugify$1 = slugify.slugifyWithCounter()) {
14013
14573
  });
14014
14574
  return result;
14015
14575
  }
14576
+
14577
+ // src/hooks/usePageHeadings.ts
14578
+ function usePageHeadings() {
14579
+ const [headings, setHeadings] = React15.useState([]);
14580
+ const pathname = navigation.usePathname();
14581
+ React15.useEffect(() => {
14582
+ const timer = setTimeout(() => {
14583
+ const result = getHeadings();
14584
+ setHeadings(result);
14585
+ }, 0);
14586
+ return () => clearTimeout(timer);
14587
+ }, [pathname]);
14588
+ return headings;
14589
+ }
14016
14590
  function createFormStore(opts) {
14017
14591
  const { storageKey, initialFormData, initialFormStatus } = opts;
14018
14592
  return zustand.create()(
@@ -14064,6 +14638,17 @@ exports.AccordionItem = AccordionItem;
14064
14638
  exports.AccordionTrigger = AccordionTrigger;
14065
14639
  exports.Alert = Alert;
14066
14640
  exports.AlertDescription = AlertDescription;
14641
+ exports.AlertDialog = AlertDialog;
14642
+ exports.AlertDialogAction = AlertDialogAction;
14643
+ exports.AlertDialogCancel = AlertDialogCancel;
14644
+ exports.AlertDialogContent = AlertDialogContent;
14645
+ exports.AlertDialogDescription = AlertDialogDescription;
14646
+ exports.AlertDialogFooter = AlertDialogFooter;
14647
+ exports.AlertDialogHeader = AlertDialogHeader;
14648
+ exports.AlertDialogOverlay = AlertDialogOverlay;
14649
+ exports.AlertDialogPortal = AlertDialogPortal;
14650
+ exports.AlertDialogTitle = AlertDialogTitle;
14651
+ exports.AlertDialogTrigger = AlertDialogTrigger;
14067
14652
  exports.AlertTitle = AlertTitle;
14068
14653
  exports.AreaChart = AreaChart;
14069
14654
  exports.AspectRatio = AspectRatio;
@@ -14085,6 +14670,8 @@ exports.BreadcrumbPage = BreadcrumbPage;
14085
14670
  exports.BreadcrumbSeparator = BreadcrumbSeparator;
14086
14671
  exports.Breadcrumbs = Breadcrumbs;
14087
14672
  exports.Button = Button2;
14673
+ exports.Calendar = Calendar;
14674
+ exports.CalendarDayButton = CalendarDayButton;
14088
14675
  exports.Card = Card;
14089
14676
  exports.CardAction = CardAction;
14090
14677
  exports.CardContent = CardContent;
@@ -14092,6 +14679,11 @@ exports.CardDescription = CardDescription;
14092
14679
  exports.CardFooter = CardFooter;
14093
14680
  exports.CardHeader = CardHeader;
14094
14681
  exports.CardTitle = CardTitle;
14682
+ exports.Carousel = Carousel;
14683
+ exports.CarouselContent = CarouselContent;
14684
+ exports.CarouselItem = CarouselItem;
14685
+ exports.CarouselNext = CarouselNext;
14686
+ exports.CarouselPrevious = CarouselPrevious;
14095
14687
  exports.CategoryBar = CategoryBar;
14096
14688
  exports.ChartContainer = ChartContainer;
14097
14689
  exports.ChartLegend = ChartLegend;
@@ -14189,8 +14781,15 @@ exports.FormatToggle = FormatToggle;
14189
14781
  exports.GenerateInterpolatedColors = GenerateInterpolatedColors;
14190
14782
  exports.Header = Header2;
14191
14783
  exports.Heading = Heading;
14784
+ exports.HoverCard = HoverCard;
14785
+ exports.HoverCardContent = HoverCardContent;
14786
+ exports.HoverCardTrigger = HoverCardTrigger;
14192
14787
  exports.Icons = Icons;
14193
14788
  exports.Input = Input;
14789
+ exports.InputOTP = InputOTP;
14790
+ exports.InputOTPGroup = InputOTPGroup;
14791
+ exports.InputOTPSeparator = InputOTPSeparator;
14792
+ exports.InputOTPSlot = InputOTPSlot;
14194
14793
  exports.Label = Label3;
14195
14794
  exports.LineChart = LineChart;
14196
14795
  exports.Link = Link;
@@ -14366,6 +14965,7 @@ exports.useDisableToc = useDisableToc;
14366
14965
  exports.useFormField = useFormField;
14367
14966
  exports.useIsMobile = useIsMobile;
14368
14967
  exports.useOnWindowResize = useOnWindowResize;
14968
+ exports.usePageHeadings = usePageHeadings;
14369
14969
  exports.useToc = useToc;
14370
14970
  //# sourceMappingURL=index.cjs.map
14371
14971
  //# sourceMappingURL=index.cjs.map