@tollerud/ui 3.0.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/AGENTS.md +5 -3
  2. package/CHANGELOG.md +67 -0
  3. package/COMPONENTS.md +13 -1
  4. package/README.md +1 -0
  5. package/SKILL.md +8 -5
  6. package/components.json +1 -1
  7. package/dist/avatar.d.ts +3 -2
  8. package/dist/avatar.js +1 -1
  9. package/dist/bento-dashboard.js +6 -1
  10. package/dist/button.d.ts +3 -3
  11. package/dist/button.js +1 -1
  12. package/dist/checkbox.js +1 -1
  13. package/dist/{chunk-7TOT5ME3.js → chunk-3LTW224O.js} +6 -6
  14. package/dist/chunk-3LTW224O.js.map +1 -0
  15. package/dist/chunk-AQT3FZRQ.js +23 -0
  16. package/dist/chunk-AQT3FZRQ.js.map +1 -0
  17. package/dist/{chunk-RWJELAS6.js → chunk-BQWF5MP7.js} +14 -6
  18. package/dist/chunk-BQWF5MP7.js.map +1 -0
  19. package/dist/{chunk-VTRUUT5K.js → chunk-FPFLOYIJ.js} +6 -6
  20. package/dist/chunk-FPFLOYIJ.js.map +1 -0
  21. package/dist/{chunk-6SKTH45H.js → chunk-J2Z4ZFVX.js} +29 -18
  22. package/dist/chunk-J2Z4ZFVX.js.map +1 -0
  23. package/dist/{chunk-ISHZ6ZPJ.js → chunk-JFOW2DI5.js} +17 -5
  24. package/dist/chunk-JFOW2DI5.js.map +1 -0
  25. package/dist/{chunk-3TGMGBKM.js → chunk-K4ALNUZI.js} +6 -6
  26. package/dist/{chunk-3TGMGBKM.js.map → chunk-K4ALNUZI.js.map} +1 -1
  27. package/dist/chunk-LGVXEWNB.js +54 -0
  28. package/dist/chunk-LGVXEWNB.js.map +1 -0
  29. package/dist/{chunk-OONIUDST.js → chunk-OLHMMFQ7.js} +3 -8
  30. package/dist/chunk-OLHMMFQ7.js.map +1 -0
  31. package/dist/{chunk-V3P5QLLX.js → chunk-Q54CVE3W.js} +3 -3
  32. package/dist/{chunk-V3P5QLLX.js.map → chunk-Q54CVE3W.js.map} +1 -1
  33. package/dist/chunk-QEIEWGHA.js +62 -0
  34. package/dist/chunk-QEIEWGHA.js.map +1 -0
  35. package/dist/{chunk-CBQ63EBL.js → chunk-QQHBEACI.js} +9 -6
  36. package/dist/chunk-QQHBEACI.js.map +1 -0
  37. package/dist/{chunk-XR5QBVEV.js → chunk-SNNMZ444.js} +3 -3
  38. package/dist/{chunk-XR5QBVEV.js.map → chunk-SNNMZ444.js.map} +1 -1
  39. package/dist/chunk-T3UQ7G4T.js +58 -0
  40. package/dist/chunk-T3UQ7G4T.js.map +1 -0
  41. package/dist/{chunk-T3TQPOVM.js → chunk-TLEKK53J.js} +5 -8
  42. package/dist/chunk-TLEKK53J.js.map +1 -0
  43. package/dist/{chunk-DGCRHVWW.js → chunk-VFS3V3VY.js} +12 -5
  44. package/dist/chunk-VFS3V3VY.js.map +1 -0
  45. package/dist/chunk-VOARBYVQ.js +44 -0
  46. package/dist/chunk-VOARBYVQ.js.map +1 -0
  47. package/dist/{chunk-O57QMLNI.js → chunk-YTU7BRDW.js} +16 -12
  48. package/dist/chunk-YTU7BRDW.js.map +1 -0
  49. package/dist/{chunk-DFM7UUKB.js → chunk-ZTFOR3AN.js} +4 -4
  50. package/dist/{chunk-DFM7UUKB.js.map → chunk-ZTFOR3AN.js.map} +1 -1
  51. package/dist/cta-band.js +1 -1
  52. package/dist/data-table.js +4 -4
  53. package/dist/date-picker.js +1 -1
  54. package/dist/footer.js +2 -1
  55. package/dist/form-row.d.ts +4 -0
  56. package/dist/form-row.js +1 -1
  57. package/dist/hero-block.js +3 -3
  58. package/dist/index.d.ts +1 -0
  59. package/dist/index.js +24 -23
  60. package/dist/monogram.d.ts +20 -0
  61. package/dist/monogram.js +5 -0
  62. package/dist/monogram.js.map +1 -0
  63. package/dist/noir-glow-background.d.ts +7 -1
  64. package/dist/noir-glow-background.js +1 -1
  65. package/dist/pill.d.ts +5 -2
  66. package/dist/pill.js +1 -1
  67. package/dist/pricing-card.js +2 -2
  68. package/dist/radio-group.d.ts +6 -0
  69. package/dist/radio-group.js +1 -1
  70. package/dist/skeleton.d.ts +10 -2
  71. package/dist/skeleton.js +1 -1
  72. package/dist/slider.js +1 -1
  73. package/dist/switch.js +1 -1
  74. package/dist/timeline.js +1 -1
  75. package/globals-layers.css +111 -1
  76. package/package.json +5 -3
  77. package/registry.json +30 -9
  78. package/tokens.css +49 -5
  79. package/tollerud-avatar-full.png +0 -0
  80. package/dist/chunk-6SKTH45H.js.map +0 -1
  81. package/dist/chunk-7TOT5ME3.js.map +0 -1
  82. package/dist/chunk-CBQ63EBL.js.map +0 -1
  83. package/dist/chunk-DGCRHVWW.js.map +0 -1
  84. package/dist/chunk-FGXOV2QH.js +0 -23
  85. package/dist/chunk-FGXOV2QH.js.map +0 -1
  86. package/dist/chunk-HYQGOC2E.js +0 -79
  87. package/dist/chunk-HYQGOC2E.js.map +0 -1
  88. package/dist/chunk-ISHZ6ZPJ.js.map +0 -1
  89. package/dist/chunk-O57QMLNI.js.map +0 -1
  90. package/dist/chunk-OONIUDST.js.map +0 -1
  91. package/dist/chunk-PLF3BBQI.js +0 -139
  92. package/dist/chunk-PLF3BBQI.js.map +0 -1
  93. package/dist/chunk-Q74VRQEX.js +0 -26
  94. package/dist/chunk-Q74VRQEX.js.map +0 -1
  95. package/dist/chunk-RWJELAS6.js.map +0 -1
  96. package/dist/chunk-T3TQPOVM.js.map +0 -1
  97. package/dist/chunk-VTRUUT5K.js.map +0 -1
  98. /package/{tia-full-figure.svg → tollerud-avatar-full.svg} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/FormRow.tsx"],"names":[],"mappings":";;;;AAmBA,IAAM,OAAA,GAAU,UAAA;AAAA,EACd,CACE;AAAA,IACE,SAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA,GAAS,UAAA;AAAA,IACT,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,SAAS,KAAA,EAAM;AACrB,IAAA,MAAM,WAAW,WAAA,IAAe,IAAA;AAChC,IAAA,MAAM,aAAA,GAAgB,QAAA,GAAW,CAAA,EAAG,MAAM,CAAA,YAAA,CAAA,GAAiB,MAAA;AAC3D,IAAA,MAAM,OAAA,GAAU,KAAA,GAAQ,CAAA,EAAG,MAAM,CAAA,MAAA,CAAA,GAAW,MAAA;AAE5C,IAAA,IAAI,MAAA,KAAW,cAAc,KAAA,EAAO;AAClC,MAAA,uBACE,IAAA,CAAC,SAAI,GAAA,EAAU,SAAA,EAAW,GAAG,kBAAA,EAAoB,SAAS,CAAA,EAAI,GAAG,KAAA,EAC/D,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAkB,SAAA,EAAU,yBAAA,EAChC,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,YACA,QAAA,oBAAY,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA6B,QAAA,EAAA,GAAA,EAAC;AAAA,WAAA,EAC7D,CAAA;AAAA,UACC,4BACC,GAAA,CAAC,GAAA,EAAA,EAAE,IAAI,aAAA,EAAe,SAAA,EAAU,0BAC7B,QAAA,EAAA,QAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,2BAAA;AAAA,YACV,kBAAA,EAAkB,CAAC,aAAA,EAAe,OAAO,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAAA,YAEvE;AAAA;AAAA,SACH;AAAA,QACC,yBACC,GAAA,CAAC,GAAA,EAAA,EAAE,IAAI,OAAA,EAAS,SAAA,EAAU,0CACvB,QAAA,EAAA,KAAA,EACH;AAAA,OAAA,EAEJ,CAAA;AAAA,IAEJ;AAEA,IAAA,uBACE,IAAA,CAAC,SAAI,GAAA,EAAU,SAAA,EAAW,GAAG,uBAAA,EAAyB,SAAS,CAAA,EAAI,GAAG,KAAA,EACnE,QAAA,EAAA;AAAA,MAAA,KAAA,oBACC,IAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAkB,SAAA,EAAU,gDAAA,EAChC,QAAA,EAAA;AAAA,QAAA,KAAA;AAAA,QACA,QAAA,oBAAY,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA6B,QAAA,EAAA,GAAA,EAAC;AAAA,OAAA,EAC7D,CAAA;AAAA,MAED,4BACC,GAAA,CAAC,GAAA,EAAA,EAAE,IAAI,aAAA,EAAe,SAAA,EAAU,oCAC7B,QAAA,EAAA,QAAA,EACH,CAAA;AAAA,sBAEF,GAAA,CAAC,KAAA,EAAA,EAAI,kBAAA,EAAkB,CAAC,eAAe,OAAO,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,IAAK,QAAY,QAAA,EAAS,CAAA;AAAA,MACjG,yBACC,GAAA,CAAC,GAAA,EAAA,EAAE,IAAI,OAAA,EAAS,SAAA,EAAU,+BACvB,QAAA,EAAA,KAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF;AACA,OAAA,CAAQ,WAAA,GAAc,SAAA","file":"chunk-T3UQ7G4T.js","sourcesContent":["'use client'\n\nimport { type HTMLAttributes, forwardRef, useId } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface FormRowProps extends HTMLAttributes<HTMLDivElement> {\n label?: React.ReactNode\n /** Hint text rendered below the label */\n description?: React.ReactNode\n /** Alias for `description` — used in docs/settings layouts */\n hint?: React.ReactNode\n error?: React.ReactNode\n required?: boolean\n /** Forwarded to the label's `htmlFor` — should match the control's `id` */\n htmlFor?: string\n /** `settings` = label/hint left, control right; `stack` = vertical field layout */\n layout?: 'settings' | 'stack'\n}\n\nconst FormRow = forwardRef<HTMLDivElement, FormRowProps>(\n (\n {\n className,\n label,\n description,\n hint,\n error,\n required,\n htmlFor,\n layout = 'settings',\n children,\n ...props\n },\n ref\n ) => {\n const autoId = useId()\n const helpText = description ?? hint\n const descriptionId = helpText ? `${autoId}-description` : undefined\n const errorId = error ? `${autoId}-error` : undefined\n\n if (layout === 'settings' && label) {\n return (\n <div ref={ref} className={cn('tollerud-formrow', className)} {...props}>\n <div>\n <label htmlFor={htmlFor} className=\"tollerud-formrow__title\">\n {label}\n {required && <span className=\"ml-0.5 text-tollerud-error\">*</span>}\n </label>\n {helpText && (\n <p id={descriptionId} className=\"tollerud-formrow__hint\">\n {helpText}\n </p>\n )}\n </div>\n <div\n className=\"tollerud-formrow__control\"\n aria-describedby={[descriptionId, errorId].filter(Boolean).join(' ') || undefined}\n >\n {children}\n </div>\n {error && (\n <p id={errorId} className=\"col-span-2 text-xs text-tollerud-error\">\n {error}\n </p>\n )}\n </div>\n )\n }\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5', className)} {...props}>\n {label && (\n <label htmlFor={htmlFor} className=\"text-sm font-medium text-tollerud-text-primary\">\n {label}\n {required && <span className=\"ml-0.5 text-tollerud-error\">*</span>}\n </label>\n )}\n {helpText && (\n <p id={descriptionId} className=\"text-xs text-tollerud-text-muted\">\n {helpText}\n </p>\n )}\n <div aria-describedby={[descriptionId, errorId].filter(Boolean).join(' ') || undefined}>{children}</div>\n {error && (\n <p id={errorId} className=\"text-xs text-tollerud-error\">\n {error}\n </p>\n )}\n </div>\n )\n }\n)\nFormRow.displayName = 'FormRow'\n\nexport { FormRow }\n"]}
@@ -4,7 +4,7 @@ import { forwardRef, useId } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
5
5
 
6
6
  var Checkbox = forwardRef(
7
- ({ className, label, id: idProp, checked, ...props }, ref) => {
7
+ ({ className, label, id: idProp, ...props }, ref) => {
8
8
  const autoId = useId();
9
9
  const id = idProp ?? autoId;
10
10
  return /* @__PURE__ */ jsxs(
@@ -25,7 +25,6 @@ var Checkbox = forwardRef(
25
25
  ref,
26
26
  id,
27
27
  type: "checkbox",
28
- checked,
29
28
  className: "peer sr-only",
30
29
  ...props
31
30
  }
@@ -39,15 +38,13 @@ var Checkbox = forwardRef(
39
38
  "bg-tollerud-surface-raised border-tollerud-border",
40
39
  "peer-focus-visible:outline-2 peer-focus-visible:outline-tollerud-yellow",
41
40
  "peer-checked:bg-tollerud-yellow peer-checked:border-tollerud-yellow",
41
+ "peer-checked:[&_svg]:opacity-100",
42
42
  "group-hover:border-tollerud-text-secondary"
43
43
  ),
44
44
  children: /* @__PURE__ */ jsx(
45
45
  "svg",
46
46
  {
47
- className: cn(
48
- "h-3 w-3 text-tollerud-noir-black transition-opacity duration-[150ms]",
49
- checked ? "opacity-100" : "opacity-0"
50
- ),
47
+ className: "pointer-events-none h-3 w-3 text-tollerud-black opacity-0 transition-opacity duration-[150ms]",
51
48
  viewBox: "0 0 12 12",
52
49
  fill: "none",
53
50
  "aria-hidden": "true",
@@ -75,5 +72,5 @@ var Checkbox = forwardRef(
75
72
  Checkbox.displayName = "Checkbox";
76
73
 
77
74
  export { Checkbox };
78
- //# sourceMappingURL=chunk-T3TQPOVM.js.map
79
- //# sourceMappingURL=chunk-T3TQPOVM.js.map
75
+ //# sourceMappingURL=chunk-TLEKK53J.js.map
76
+ //# sourceMappingURL=chunk-TLEKK53J.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/Checkbox.tsx"],"names":[],"mappings":";;;;AASA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,IAAI,MAAA,EAAQ,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACnD,IAAA,MAAM,SAAS,KAAA,EAAM;AACrB,IAAA,MAAM,KAAK,MAAA,IAAU,MAAA;AAErB,IAAA,uBACE,IAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,EAAA;AAAA,UACT,iEAAA;AAAA,UACA,oCAAA;AAAA,UACA,MAAM,QAAA,IAAY,gCAAA;AAAA,UAClB;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,2CAAA,EACd,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,IAAA,EAAK,UAAA;AAAA,gBACL,SAAA,EAAU,cAAA;AAAA,gBACT,GAAG;AAAA;AAAA,aACN;AAAA,4BAEA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,wDAAA;AAAA,kBACA,kCAAA;AAAA,kBACA,mDAAA;AAAA,kBACA,yEAAA;AAAA,kBACA,qEAAA;AAAA,kBACA,kCAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBAGA,QAAA,kBAAA,GAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,+FAAA;AAAA,oBACV,OAAA,EAAQ,WAAA;AAAA,oBACR,IAAA,EAAK,MAAA;AAAA,oBACL,aAAA,EAAY,MAAA;AAAA,oBAEZ,QAAA,kBAAA,GAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,CAAA,EAAE,sBAAA;AAAA,wBACF,MAAA,EAAO,cAAA;AAAA,wBACP,WAAA,EAAa,CAAA;AAAA,wBACb,aAAA,EAAc,OAAA;AAAA,wBACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA;AACF;AAAA;AACF,WAAA,EACF,CAAA;AAAA,UACC,KAAA,oBAAS,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,KACzB;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-TLEKK53J.js","sourcesContent":["'use client'\n\nimport { type InputHTMLAttributes, forwardRef, useId } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n}\n\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, id: idProp, ...props }, ref) => {\n const autoId = useId()\n const id = idProp ?? autoId\n\n return (\n <label\n htmlFor={id}\n className={cn(\n 'inline-flex items-center gap-2 cursor-pointer select-none group',\n 'text-sm text-tollerud-text-primary',\n props.disabled && 'opacity-50 pointer-events-none',\n className\n )}\n >\n <span className=\"relative flex items-center justify-center\">\n <input\n ref={ref}\n id={id}\n type=\"checkbox\"\n className=\"peer sr-only\"\n {...props}\n />\n {/* Custom box */}\n <span\n className={cn(\n 'h-4 w-4 rounded border transition-all duration-[150ms]',\n 'flex items-center justify-center',\n 'bg-tollerud-surface-raised border-tollerud-border',\n 'peer-focus-visible:outline-2 peer-focus-visible:outline-tollerud-yellow',\n 'peer-checked:bg-tollerud-yellow peer-checked:border-tollerud-yellow',\n 'peer-checked:[&_svg]:opacity-100',\n 'group-hover:border-tollerud-text-secondary'\n )}\n >\n {/* Checkmark SVG — visible when checked (via peer on sibling input) */}\n <svg\n className=\"pointer-events-none h-3 w-3 text-tollerud-black opacity-0 transition-opacity duration-[150ms]\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.5 6l2.5 2.5 4.5-5\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </span>\n {label && <span>{label}</span>}\n </label>\n )\n }\n)\nCheckbox.displayName = 'Checkbox'\n\nexport { Checkbox }"]}
@@ -15,9 +15,11 @@ function initialsFrom(name) {
15
15
  return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
16
16
  }
17
17
  var Avatar = forwardRef(
18
- ({ className, src, name, fallback, size = "md", ...props }, ref) => {
18
+ ({ className, src, name, fallback, size = "md", style, ...props }, ref) => {
19
19
  const [errored, setErrored] = useState(false);
20
20
  const showImage = !!src && !errored;
21
+ const isNumeric = typeof size === "number";
22
+ const pixelSize = isNumeric ? size : void 0;
21
23
  return /* @__PURE__ */ jsx(
22
24
  "span",
23
25
  {
@@ -26,9 +28,13 @@ var Avatar = forwardRef(
26
28
  "relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full select-none",
27
29
  "bg-tollerud-surface-raised text-tollerud-text-secondary font-medium",
28
30
  "ring-1 ring-tollerud-border",
29
- avatarSizes[size],
31
+ !isNumeric && avatarSizes[size],
30
32
  className
31
33
  ),
34
+ style: {
35
+ ...pixelSize ? { width: pixelSize, height: pixelSize, fontSize: Math.max(10, Math.round(pixelSize * 0.36)) } : null,
36
+ ...style
37
+ },
32
38
  ...props,
33
39
  children: showImage ? /* @__PURE__ */ jsx(
34
40
  "img",
@@ -64,8 +70,9 @@ var AvatarGroup = forwardRef(
64
70
  "relative inline-flex shrink-0 items-center justify-center rounded-full select-none",
65
71
  "bg-tollerud-surface-raised text-tollerud-text-muted font-medium",
66
72
  "ring-2 ring-tollerud-surface",
67
- avatarSizes[size]
73
+ typeof size !== "number" && avatarSizes[size]
68
74
  ),
75
+ style: typeof size === "number" ? { width: size, height: size, fontSize: Math.max(10, Math.round(size * 0.36)) } : void 0,
69
76
  children: [
70
77
  "+",
71
78
  overflow
@@ -80,5 +87,5 @@ var AvatarGroup = forwardRef(
80
87
  AvatarGroup.displayName = "AvatarGroup";
81
88
 
82
89
  export { Avatar, AvatarGroup };
83
- //# sourceMappingURL=chunk-DGCRHVWW.js.map
84
- //# sourceMappingURL=chunk-DGCRHVWW.js.map
90
+ //# sourceMappingURL=chunk-VFS3V3VY.js.map
91
+ //# sourceMappingURL=chunk-VFS3V3VY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/Avatar.tsx"],"names":[],"mappings":"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","file":"chunk-VFS3V3VY.js","sourcesContent":["'use client'\n\nimport { type HTMLAttributes, forwardRef, useState } from 'react'\nimport { cn } from '@/lib/utils'\n\nconst avatarSizes = {\n sm: 'h-6 w-6 text-[10px]',\n md: 'h-8 w-8 text-xs',\n lg: 'h-11 w-11 text-sm',\n} as const\n\nfunction initialsFrom(name: string) {\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return ''\n if (parts.length === 1) return parts[0]!.slice(0, 2).toUpperCase()\n return (parts[0]![0] + parts[parts.length - 1]![0]).toUpperCase()\n}\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n /** Image source */\n src?: string\n /** Accessible name / used to derive initials fallback */\n name?: string\n /** Explicit fallback content (overrides derived initials) */\n fallback?: React.ReactNode\n /** Named size token or explicit pixel diameter */\n size?: keyof typeof avatarSizes | number\n}\n\nconst Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n ({ className, src, name, fallback, size = 'md', style, ...props }, ref) => {\n const [errored, setErrored] = useState(false)\n const showImage = !!src && !errored\n const isNumeric = typeof size === 'number'\n const pixelSize = isNumeric ? size : undefined\n\n return (\n <span\n ref={ref}\n className={cn(\n 'relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full select-none',\n 'bg-tollerud-surface-raised text-tollerud-text-secondary font-medium',\n 'ring-1 ring-tollerud-border',\n !isNumeric && avatarSizes[size],\n className\n )}\n style={{\n ...(pixelSize\n ? { width: pixelSize, height: pixelSize, fontSize: Math.max(10, Math.round(pixelSize * 0.36)) }\n : null),\n ...style,\n }}\n {...props}\n >\n {showImage ? (\n <img\n src={src}\n alt={name ?? ''}\n className=\"h-full w-full object-cover\"\n onError={() => setErrored(true)}\n />\n ) : (\n <span aria-hidden={!!name}>{fallback ?? (name ? initialsFrom(name) : null)}</span>\n )}\n </span>\n )\n }\n)\nAvatar.displayName = 'Avatar'\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Maximum avatars to render before collapsing into a \"+N\" overflow indicator */\n max?: number\n size?: keyof typeof avatarSizes | number\n children: React.ReactNode\n}\n\nconst AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ className, max, size = 'md', children, ...props }, ref) => {\n const items = Array.isArray(children) ? children : [children]\n const visible = max ? items.slice(0, max) : items\n const overflow = max ? items.length - max : 0\n\n return (\n <div\n ref={ref}\n className={cn('flex items-center -space-x-2', className)}\n {...props}\n >\n {visible.map((child, i) => (\n <span key={i} className=\"ring-2 ring-tollerud-surface rounded-full\">\n {child}\n </span>\n ))}\n {overflow > 0 && (\n <span\n className={cn(\n 'relative inline-flex shrink-0 items-center justify-center rounded-full select-none',\n 'bg-tollerud-surface-raised text-tollerud-text-muted font-medium',\n 'ring-2 ring-tollerud-surface',\n typeof size !== 'number' && avatarSizes[size]\n )}\n style={\n typeof size === 'number'\n ? { width: size, height: size, fontSize: Math.max(10, Math.round(size * 0.36)) }\n : undefined\n }\n >\n +{overflow}\n </span>\n )}\n </div>\n )\n }\n)\nAvatarGroup.displayName = 'AvatarGroup'\n\nexport { Avatar, AvatarGroup }\n"]}
@@ -0,0 +1,44 @@
1
+ 'use client';
2
+ import { cn } from './chunk-WSQNPRGN.js';
3
+ import { forwardRef } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ // components/monogram-geometry.ts
7
+ var MONOGRAM_VIEW_BOX = "0 0 130 143";
8
+ var MONOGRAM_PATH = "M82.4839273,140.272626 L95.1738252,140.272626 L95.1738252,143 L34.8114657,143 L34.8114657,140.272626 L47.5013636,140.272626 L47.5013636,28.2924381 C40.1277806,26.4177752 32.9252955,25.2241422 26.4088393,25.2241422 C12.1757856,25.2241422 4.11617359,34.5982703 4.11617359,39.8821508 C4.11617359,40.9049161 4.63028596,41.5867596 5.65932936,41.5867596 C7.20248513,41.5867596 7.37440169,40.3931266 8.06043062,38.8593855 C10.4615319,33.575505 15.6059302,31.5307881 20.4073141,31.5307881 C29.152955,31.5307881 35.1552988,38.5184637 35.1552988,47.2107482 C35.1552988,56.2447681 28.8107592,62.8907084 18.0070315,62.8907084 C7.5454996,62.891522 0,53.6882617 0,43.8023442 C0,30.8497582 11.3178401,21.986606 26.5799372,21.986606 C51.1026062,21.986606 84.1989996,39.2011209 104.948509,39.2011209 C118.495534,39.2011209 126.384048,31.7016558 126.384048,19.4300996 C126.384048,10.3968933 118.667451,4.60203698 115.580321,4.60203698 C114.552096,4.60203698 113.69415,5.1130128 113.69415,6.13577809 C113.69415,7.49946515 114.552096,7.6695192 115.409223,8.01044097 C115.752237,8.18049502 122.268693,10.5669474 122.268693,19.2592319 C122.268693,28.2924381 115.238125,34.0872945 107.177694,34.0872945 C97.7460244,34.0872945 91.0584702,26.4177752 91.0584702,17.8955448 C91.0584702,6.64675391 99.9760277,0 109.749893,0 C122.268693,0 129.642276,9.88510384 129.642276,19.6001536 C129.642276,34.2581622 119.181563,42.4386572 104.947691,42.4386572 C98.0890388,42.4386572 90.5443579,40.9049161 82.4839273,38.6901451 L82.4839273,140.272626 Z";
9
+ var colorClasses = {
10
+ yellow: "text-tollerud-yellow",
11
+ black: "text-tollerud-noir-950",
12
+ white: "text-white"
13
+ };
14
+ var Monogram = forwardRef(
15
+ ({ color = "yellow", size, className, title = "Tollerud", style, ...props }, ref) => {
16
+ return /* @__PURE__ */ jsxs(
17
+ "svg",
18
+ {
19
+ ref,
20
+ viewBox: MONOGRAM_VIEW_BOX,
21
+ xmlns: "http://www.w3.org/2000/svg",
22
+ role: "img",
23
+ "aria-label": title,
24
+ className: cn(
25
+ "inline-block shrink-0",
26
+ colorClasses[color],
27
+ !size && "h-5 w-auto",
28
+ className
29
+ ),
30
+ style: size ? { height: size, width: "auto", ...style } : style,
31
+ ...props,
32
+ children: [
33
+ /* @__PURE__ */ jsx("title", { children: title }),
34
+ /* @__PURE__ */ jsx("g", { fill: "currentColor", fillRule: "evenodd", children: /* @__PURE__ */ jsx("g", { transform: "translate(-86.000000, -109.000000)", children: /* @__PURE__ */ jsx("g", { transform: "translate(32.000000, 55.000000)", children: /* @__PURE__ */ jsx("g", { transform: "translate(54.000000, 54.000000)", children: /* @__PURE__ */ jsx("path", { d: MONOGRAM_PATH }) }) }) }) })
35
+ ]
36
+ }
37
+ );
38
+ }
39
+ );
40
+ Monogram.displayName = "Monogram";
41
+
42
+ export { Monogram };
43
+ //# sourceMappingURL=chunk-VOARBYVQ.js.map
44
+ //# sourceMappingURL=chunk-VOARBYVQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/monogram-geometry.ts","../components/Monogram.tsx"],"names":[],"mappings":";;;;;AACO,IAAM,iBAAA,GAAoB,aAAA;AAE1B,IAAM,aAAA,GACX,0+CAAA;ACEF,IAAM,YAAA,GAA8C;AAAA,EAClD,MAAA,EAAQ,sBAAA;AAAA,EACR,KAAA,EAAO,wBAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;AAgBA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CAAC,EAAE,KAAA,GAAQ,QAAA,EAAU,IAAA,EAAM,SAAA,EAAW,KAAA,GAAQ,UAAA,EAAY,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACnF,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,OAAA,EAAS,iBAAA;AAAA,QACT,KAAA,EAAM,4BAAA;AAAA,QACN,IAAA,EAAK,KAAA;AAAA,QACL,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,EAAA;AAAA,UACT,uBAAA;AAAA,UACA,aAAa,KAAK,CAAA;AAAA,UAClB,CAAC,IAAA,IAAQ,YAAA;AAAA,UACT;AAAA,SACF;AAAA,QACA,KAAA,EAAO,OAAO,EAAE,MAAA,EAAQ,MAAM,KAAA,EAAO,MAAA,EAAQ,GAAG,KAAA,EAAM,GAAI,KAAA;AAAA,QACzD,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,WAAO,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BACd,GAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAK,cAAA,EAAe,QAAA,EAAS,WAC9B,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EACX,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,iCAAA,EACX,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAA,EACX,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,aAAA,EAAe,CAAA,EAC1B,CAAA,EACF,CAAA,EACF,CAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-VOARBYVQ.js","sourcesContent":["/** Shared Tollerud monogram geometry — single continuous T path. */\nexport const MONOGRAM_VIEW_BOX = '0 0 130 143'\n\nexport const MONOGRAM_PATH =\n 'M82.4839273,140.272626 L95.1738252,140.272626 L95.1738252,143 L34.8114657,143 L34.8114657,140.272626 L47.5013636,140.272626 L47.5013636,28.2924381 C40.1277806,26.4177752 32.9252955,25.2241422 26.4088393,25.2241422 C12.1757856,25.2241422 4.11617359,34.5982703 4.11617359,39.8821508 C4.11617359,40.9049161 4.63028596,41.5867596 5.65932936,41.5867596 C7.20248513,41.5867596 7.37440169,40.3931266 8.06043062,38.8593855 C10.4615319,33.575505 15.6059302,31.5307881 20.4073141,31.5307881 C29.152955,31.5307881 35.1552988,38.5184637 35.1552988,47.2107482 C35.1552988,56.2447681 28.8107592,62.8907084 18.0070315,62.8907084 C7.5454996,62.891522 0,53.6882617 0,43.8023442 C0,30.8497582 11.3178401,21.986606 26.5799372,21.986606 C51.1026062,21.986606 84.1989996,39.2011209 104.948509,39.2011209 C118.495534,39.2011209 126.384048,31.7016558 126.384048,19.4300996 C126.384048,10.3968933 118.667451,4.60203698 115.580321,4.60203698 C114.552096,4.60203698 113.69415,5.1130128 113.69415,6.13577809 C113.69415,7.49946515 114.552096,7.6695192 115.409223,8.01044097 C115.752237,8.18049502 122.268693,10.5669474 122.268693,19.2592319 C122.268693,28.2924381 115.238125,34.0872945 107.177694,34.0872945 C97.7460244,34.0872945 91.0584702,26.4177752 91.0584702,17.8955448 C91.0584702,6.64675391 99.9760277,0 109.749893,0 C122.268693,0 129.642276,9.88510384 129.642276,19.6001536 C129.642276,34.2581622 119.181563,42.4386572 104.947691,42.4386572 C98.0890388,42.4386572 90.5443579,40.9049161 82.4839273,38.6901451 L82.4839273,140.272626 Z'\n","import { forwardRef, type SVGAttributes } from 'react'\nimport { cn } from '@/lib/utils'\nimport { MONOGRAM_PATH, MONOGRAM_VIEW_BOX } from './monogram-geometry'\n\nexport type MonogramColor = 'yellow' | 'black' | 'white'\n\nconst colorClasses: Record<MonogramColor, string> = {\n yellow: 'text-tollerud-yellow',\n black: 'text-tollerud-noir-950',\n white: 'text-white',\n}\n\nexport interface MonogramProps extends SVGAttributes<SVGSVGElement> {\n /**\n * Fill color via `currentColor`.\n * - `yellow` — default on dark surfaces (#FFFF00)\n * - `black` — light-mode surfaces (#0A0A0A)\n * - `white` — on tinted or photographic backgrounds\n */\n color?: MonogramColor\n /** Height in px; width scales from the 130×143 viewBox. */\n size?: number\n /** Accessible name — rendered as `<title>` and `aria-label`. */\n title?: string\n}\n\nconst Monogram = forwardRef<SVGSVGElement, MonogramProps>(\n ({ color = 'yellow', size, className, title = 'Tollerud', style, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n viewBox={MONOGRAM_VIEW_BOX}\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label={title}\n className={cn(\n 'inline-block shrink-0',\n colorClasses[color],\n !size && 'h-5 w-auto',\n className\n )}\n style={size ? { height: size, width: 'auto', ...style } : style}\n {...props}\n >\n <title>{title}</title>\n <g fill=\"currentColor\" fillRule=\"evenodd\">\n <g transform=\"translate(-86.000000, -109.000000)\">\n <g transform=\"translate(32.000000, 55.000000)\">\n <g transform=\"translate(54.000000, 54.000000)\">\n <path d={MONOGRAM_PATH} />\n </g>\n </g>\n </g>\n </g>\n </svg>\n )\n }\n)\nMonogram.displayName = 'Monogram'\n\nexport { Monogram }\n"]}
@@ -1,12 +1,15 @@
1
1
  'use client';
2
2
  import { cn } from './chunk-WSQNPRGN.js';
3
- import { forwardRef, useId } from 'react';
3
+ import { forwardRef, useId, useState } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
5
5
 
6
6
  var Switch = forwardRef(
7
- ({ className, label, id: idProp, checked, ...props }, ref) => {
7
+ ({ className, label, id: idProp, checked, defaultChecked, onChange, ...props }, ref) => {
8
8
  const autoId = useId();
9
9
  const id = idProp ?? autoId;
10
+ const isControlled = checked !== void 0;
11
+ const [internalChecked, setInternalChecked] = useState(!!defaultChecked);
12
+ const isOn = isControlled ? checked : internalChecked;
10
13
  return /* @__PURE__ */ jsxs(
11
14
  "label",
12
15
  {
@@ -24,10 +27,7 @@ var Switch = forwardRef(
24
27
  className: cn(
25
28
  "relative inline-flex items-center h-5 w-9 flex-shrink-0 rounded-full",
26
29
  "transition-colors duration-200 ease-out",
27
- checked ? "bg-tollerud-yellow" : "bg-tollerud-noir-600",
28
- "group-hover:bg-tollerud-noir-500",
29
- checked && "group-hover:bg-tollerud-yellow-warm",
30
- "peer-focus-visible:outline-2 peer-focus-visible:outline-tollerud-yellow peer-focus-visible:outline-offset-2"
30
+ isOn ? "bg-tollerud-yellow group-hover:bg-tollerud-yellow-warm" : "bg-tollerud-noir-600 group-hover:bg-tollerud-noir-500"
31
31
  ),
32
32
  children: [
33
33
  /* @__PURE__ */ jsx(
@@ -37,8 +37,12 @@ var Switch = forwardRef(
37
37
  id,
38
38
  type: "checkbox",
39
39
  role: "switch",
40
- checked,
41
- className: "peer absolute inset-0 opacity-0 w-full h-full cursor-pointer z-10",
40
+ checked: isOn,
41
+ className: "absolute inset-0 opacity-0 w-full h-full cursor-pointer z-10",
42
+ onChange: (e) => {
43
+ if (!isControlled) setInternalChecked(e.target.checked);
44
+ onChange?.(e);
45
+ },
42
46
  ...props
43
47
  }
44
48
  ),
@@ -46,9 +50,9 @@ var Switch = forwardRef(
46
50
  "span",
47
51
  {
48
52
  className: cn(
49
- "block h-3.5 w-3.5 rounded-full shadow-sm",
53
+ "block h-3.5 w-3.5 rounded-full shadow-sm pointer-events-none",
50
54
  "transition-all duration-200 ease-out",
51
- checked ? "translate-x-[18px] bg-tollerud-black" : "translate-x-[3px] bg-tollerud-white"
55
+ isOn ? "translate-x-[18px] bg-tollerud-black" : "translate-x-[3px] bg-tollerud-white"
52
56
  )
53
57
  }
54
58
  )
@@ -64,5 +68,5 @@ var Switch = forwardRef(
64
68
  Switch.displayName = "Switch";
65
69
 
66
70
  export { Switch };
67
- //# sourceMappingURL=chunk-O57QMLNI.js.map
68
- //# sourceMappingURL=chunk-O57QMLNI.js.map
71
+ //# sourceMappingURL=chunk-YTU7BRDW.js.map
72
+ //# sourceMappingURL=chunk-YTU7BRDW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/Switch.tsx"],"names":[],"mappings":";;;;AASA,IAAM,MAAA,GAAS,UAAA;AAAA,EACb,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,OAAA,EAAS,cAAA,EAAgB,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACtF,IAAA,MAAM,SAAS,KAAA,EAAM;AACrB,IAAA,MAAM,KAAK,MAAA,IAAU,MAAA;AACrB,IAAA,MAAM,eAAe,OAAA,KAAY,MAAA;AACjC,IAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,IAAI,QAAA,CAAS,CAAC,CAAC,cAAc,CAAA;AACvE,IAAA,MAAM,IAAA,GAAO,eAAe,OAAA,GAAU,eAAA;AAEtC,IAAA,uBACE,IAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,EAAA;AAAA,UACT,mEAAA;AAAA,UACA,oCAAA;AAAA,UACA,MAAM,QAAA,IAAY,mDAAA;AAAA,UAClB;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,sEAAA;AAAA,gBACA,yCAAA;AAAA,gBACA,OAAO,wDAAA,GAA2D;AAAA,eACpE;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,GAAA;AAAA,oBACA,EAAA;AAAA,oBACA,IAAA,EAAK,UAAA;AAAA,oBACL,IAAA,EAAK,QAAA;AAAA,oBACL,OAAA,EAAS,IAAA;AAAA,oBACT,SAAA,EAAU,8DAAA;AAAA,oBACV,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,sBAAA,IAAI,CAAC,YAAA,EAAc,kBAAA,CAAmB,CAAA,CAAE,OAAO,OAAO,CAAA;AACtD,sBAAA,QAAA,GAAW,CAAC,CAAA;AAAA,oBACd,CAAA;AAAA,oBACC,GAAG;AAAA;AAAA,iBACN;AAAA,gCACA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,8DAAA;AAAA,sBACA,sCAAA;AAAA,sBACA,OAAO,sCAAA,GAAyC;AAAA;AAClD;AAAA;AACF;AAAA;AAAA,WACF;AAAA,UACC,KAAA,oBAAS,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,KACzB;AAAA,EAEJ;AACF;AACA,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-YTU7BRDW.js","sourcesContent":["'use client'\n\nimport { type InputHTMLAttributes, forwardRef, useId, useState } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n}\n\nconst Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, label, id: idProp, checked, defaultChecked, onChange, ...props }, ref) => {\n const autoId = useId()\n const id = idProp ?? autoId\n const isControlled = checked !== undefined\n const [internalChecked, setInternalChecked] = useState(!!defaultChecked)\n const isOn = isControlled ? checked : internalChecked\n\n return (\n <label\n htmlFor={id}\n className={cn(\n 'inline-flex items-center gap-2.5 cursor-pointer select-none group',\n 'text-sm text-tollerud-text-primary',\n props.disabled && 'opacity-40 pointer-events-none cursor-not-allowed',\n className\n )}\n >\n <span\n className={cn(\n 'relative inline-flex items-center h-5 w-9 flex-shrink-0 rounded-full',\n 'transition-colors duration-200 ease-out',\n isOn ? 'bg-tollerud-yellow group-hover:bg-tollerud-yellow-warm' : 'bg-tollerud-noir-600 group-hover:bg-tollerud-noir-500'\n )}\n >\n <input\n ref={ref}\n id={id}\n type=\"checkbox\"\n role=\"switch\"\n checked={isOn}\n className=\"absolute inset-0 opacity-0 w-full h-full cursor-pointer z-10\"\n onChange={(e) => {\n if (!isControlled) setInternalChecked(e.target.checked)\n onChange?.(e)\n }}\n {...props}\n />\n <span\n className={cn(\n 'block h-3.5 w-3.5 rounded-full shadow-sm pointer-events-none',\n 'transition-all duration-200 ease-out',\n isOn ? 'translate-x-[18px] bg-tollerud-black' : 'translate-x-[3px] bg-tollerud-white'\n )}\n />\n </span>\n {label && <span>{label}</span>}\n </label>\n )\n }\n)\nSwitch.displayName = 'Switch'\n\nexport { Switch }\n"]}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { NoirGlowBackground } from './chunk-CBQ63EBL.js';
3
- import { Pill } from './chunk-ISHZ6ZPJ.js';
2
+ import { NoirGlowBackground } from './chunk-QQHBEACI.js';
3
+ import { Pill } from './chunk-JFOW2DI5.js';
4
4
  import { cn } from './chunk-WSQNPRGN.js';
5
5
  import { forwardRef } from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -75,5 +75,5 @@ var HeroBlock = forwardRef(
75
75
  HeroBlock.displayName = "HeroBlock";
76
76
 
77
77
  export { HeroBlock };
78
- //# sourceMappingURL=chunk-DFM7UUKB.js.map
79
- //# sourceMappingURL=chunk-DFM7UUKB.js.map
78
+ //# sourceMappingURL=chunk-ZTFOR3AN.js.map
79
+ //# sourceMappingURL=chunk-ZTFOR3AN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../components/HeroBlock.tsx"],"names":[],"mappings":";;;;;;AAgBA,IAAM,SAAA,GAAY,UAAA;AAAA,EAChB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,GAAY,GAAA;AAAA,IACZ,OAAA,GAAU,KAAA;AAAA,IACV,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,QAAA,GAAW,CAAC,CAAC,KAAA;AAEnB,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,4EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,EAAE,SAAA,EAAU;AAAA,QAClB,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,OAAA,mBACC,GAAA,CAAC,kBAAA,EAAA,EAAmB,SAAA,EAAU,MAAA,EAAO,KAAA,EAAM,QAAA,EAAS,CAAA,mBAEpD,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,0BAExF,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,mCAAA;AAAA,gBACA,UAAU,YAAA,GAAe;AAAA,eAC3B;AAAA,cACA,aAAA,EAAY;AAAA;AAAA,WACd;AAAA,0BACA,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,8CAAA;AAAA,gBACA,WAAW,4BAAA,GAA+B;AAAA,eAC5C;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,IAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,CAAC,QAAA,IAAY,eAAe,CAAA,EAC5C,QAAA,EAAA;AAAA,kBAAA,OAAA,wBACE,IAAA,EAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,QAC/B,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,kCAEF,GAAA;AAAA,oBAAC,IAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,EAAA;AAAA,wBACT,yDAAA;AAAA,wBACA,OAAA,IAAW;AAAA,uBACb;AAAA,sBAEC,QAAA,EAAA;AAAA;AAAA,mBACH;AAAA,kBACC,WAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sEACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,kBAED,OAAA,oBAAW,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAA0C,QAAA,EAAA,OAAA,EAAQ;AAAA,iBAAA,EAC/E,CAAA;AAAA,gBACC,QAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAoC,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA;AAE7D;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,SAAA,CAAU,WAAA,GAAc,WAAA","file":"chunk-DFM7UUKB.js","sourcesContent":["import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { Pill } from './Pill'\nimport { NoirGlowBackground } from './NoirGlowBackground'\n\nexport interface HeroBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n eyebrow?: React.ReactNode\n title: React.ReactNode\n description?: React.ReactNode\n actions?: React.ReactNode\n media?: React.ReactNode\n minHeight?: number\n /** When true, renders the live shader background via NoirGlowBackground. */\n intense?: boolean\n}\n\nconst HeroBlock = forwardRef<HTMLDivElement, HeroBlockProps>(\n (\n {\n className,\n eyebrow,\n title,\n description,\n actions,\n media,\n minHeight = 280,\n intense = false,\n ...props\n },\n ref\n ) => {\n const hasMedia = !!media\n\n return (\n <div\n ref={ref}\n className={cn(\n 'relative overflow-hidden rounded-xl border border-tollerud-border bg-black',\n className\n )}\n style={{ minHeight }}\n {...props}\n >\n {intense ? (\n <NoirGlowBackground intensity=\"loud\" speed=\"medium\" />\n ) : (\n <div className=\"tollerud-noir-glow-bg absolute inset-0 opacity-50\" aria-hidden=\"true\" />\n )}\n <div\n className={cn(\n 'tollerud-grid-bg absolute inset-0',\n intense ? 'opacity-25' : 'opacity-50'\n )}\n aria-hidden=\"true\"\n />\n <div\n className={cn(\n 'relative flex items-center gap-6 px-11 py-12',\n hasMedia ? 'grid grid-cols-[1.4fr_1fr]' : 'block'\n )}\n >\n <div className={cn(!hasMedia && 'max-w-[560px]')}>\n {eyebrow && (\n <Pill variant=\"outline\" className=\"mb-0\">\n {eyebrow}\n </Pill>\n )}\n <h2\n className={cn(\n 'tollerud-display text-[40px] text-tollerud-text-primary',\n eyebrow && 'mt-[18px]'\n )}\n >\n {title}\n </h2>\n {description && (\n <p className=\"mt-3.5 text-[15.5px] leading-relaxed text-tollerud-text-primary/70\">\n {description}\n </p>\n )}\n {actions && <div className=\"mt-6 flex flex-wrap items-center gap-3\">{actions}</div>}\n </div>\n {hasMedia && (\n <div className=\"flex items-center justify-center\">{media}</div>\n )}\n </div>\n </div>\n )\n }\n)\nHeroBlock.displayName = 'HeroBlock'\n\nexport { HeroBlock }\n"]}
1
+ {"version":3,"sources":["../components/HeroBlock.tsx"],"names":[],"mappings":";;;;;;AAgBA,IAAM,SAAA,GAAY,UAAA;AAAA,EAChB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,GAAY,GAAA;AAAA,IACZ,OAAA,GAAU,KAAA;AAAA,IACV,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,QAAA,GAAW,CAAC,CAAC,KAAA;AAEnB,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,4EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,EAAE,SAAA,EAAU;AAAA,QAClB,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,OAAA,mBACC,GAAA,CAAC,kBAAA,EAAA,EAAmB,SAAA,EAAU,MAAA,EAAO,KAAA,EAAM,QAAA,EAAS,CAAA,mBAEpD,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,0BAExF,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,mCAAA;AAAA,gBACA,UAAU,YAAA,GAAe;AAAA,eAC3B;AAAA,cACA,aAAA,EAAY;AAAA;AAAA,WACd;AAAA,0BACA,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,8CAAA;AAAA,gBACA,WAAW,4BAAA,GAA+B;AAAA,eAC5C;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,IAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,CAAC,QAAA,IAAY,eAAe,CAAA,EAC5C,QAAA,EAAA;AAAA,kBAAA,OAAA,wBACE,IAAA,EAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,QAC/B,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,kCAEF,GAAA;AAAA,oBAAC,IAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,EAAA;AAAA,wBACT,yDAAA;AAAA,wBACA,OAAA,IAAW;AAAA,uBACb;AAAA,sBAEC,QAAA,EAAA;AAAA;AAAA,mBACH;AAAA,kBACC,WAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sEACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,kBAED,OAAA,oBAAW,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAA0C,QAAA,EAAA,OAAA,EAAQ;AAAA,iBAAA,EAC/E,CAAA;AAAA,gBACC,QAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAoC,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA;AAE7D;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,SAAA,CAAU,WAAA,GAAc,WAAA","file":"chunk-ZTFOR3AN.js","sourcesContent":["import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { Pill } from './Pill'\nimport { NoirGlowBackground } from './NoirGlowBackground'\n\nexport interface HeroBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n eyebrow?: React.ReactNode\n title: React.ReactNode\n description?: React.ReactNode\n actions?: React.ReactNode\n media?: React.ReactNode\n minHeight?: number\n /** When true, renders the live shader background via NoirGlowBackground. */\n intense?: boolean\n}\n\nconst HeroBlock = forwardRef<HTMLDivElement, HeroBlockProps>(\n (\n {\n className,\n eyebrow,\n title,\n description,\n actions,\n media,\n minHeight = 280,\n intense = false,\n ...props\n },\n ref\n ) => {\n const hasMedia = !!media\n\n return (\n <div\n ref={ref}\n className={cn(\n 'relative overflow-hidden rounded-xl border border-tollerud-border bg-black',\n className\n )}\n style={{ minHeight }}\n {...props}\n >\n {intense ? (\n <NoirGlowBackground intensity=\"loud\" speed=\"medium\" />\n ) : (\n <div className=\"tollerud-noir-glow-bg absolute inset-0 opacity-50\" aria-hidden=\"true\" />\n )}\n <div\n className={cn(\n 'tollerud-grid-bg absolute inset-0',\n intense ? 'opacity-25' : 'opacity-50'\n )}\n aria-hidden=\"true\"\n />\n <div\n className={cn(\n 'relative flex items-center gap-6 px-11 py-12',\n hasMedia ? 'grid grid-cols-[1.4fr_1fr]' : 'block'\n )}\n >\n <div className={cn(!hasMedia && 'max-w-[560px]')}>\n {eyebrow && (\n <Pill variant=\"outline\" className=\"mb-0\">\n {eyebrow}\n </Pill>\n )}\n <h2\n className={cn(\n 'tollerud-display text-[40px] text-tollerud-text-primary',\n eyebrow && 'mt-[18px]'\n )}\n >\n {title}\n </h2>\n {description && (\n <p className=\"mt-3.5 text-[15.5px] leading-relaxed text-tollerud-text-primary/70\">\n {description}\n </p>\n )}\n {actions && <div className=\"mt-6 flex flex-wrap items-center gap-3\">{actions}</div>}\n </div>\n {hasMedia && (\n <div className=\"flex items-center justify-center\">{media}</div>\n )}\n </div>\n </div>\n )\n }\n)\nHeroBlock.displayName = 'HeroBlock'\n\nexport { HeroBlock }\n"]}
package/dist/cta-band.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- export { CTABand } from './chunk-VTRUUT5K.js';
2
+ export { CTABand } from './chunk-FPFLOYIJ.js';
3
3
  import './chunk-WSQNPRGN.js';
4
4
  //# sourceMappingURL=cta-band.js.map
5
5
  //# sourceMappingURL=cta-band.js.map
@@ -1,12 +1,12 @@
1
1
  'use client';
2
- export { DataTable } from './chunk-3TGMGBKM.js';
2
+ export { DataTable } from './chunk-K4ALNUZI.js';
3
+ import './chunk-AQT3FZRQ.js';
3
4
  import './chunk-NSMU66ZX.js';
4
- import './chunk-FGXOV2QH.js';
5
5
  import './chunk-RJTDQOT2.js';
6
6
  import './chunk-435JHF7G.js';
7
- import './chunk-T3TQPOVM.js';
7
+ import './chunk-TLEKK53J.js';
8
8
  import './chunk-QEHTPQHL.js';
9
- import './chunk-RWJELAS6.js';
9
+ import './chunk-BQWF5MP7.js';
10
10
  import './chunk-WSQNPRGN.js';
11
11
  //# sourceMappingURL=data-table.js.map
12
12
  //# sourceMappingURL=data-table.js.map
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- export { DatePicker } from './chunk-V3P5QLLX.js';
2
+ export { DatePicker } from './chunk-Q54CVE3W.js';
3
3
  import './chunk-WSQNPRGN.js';
4
4
  //# sourceMappingURL=date-picker.js.map
5
5
  //# sourceMappingURL=date-picker.js.map
package/dist/footer.js CHANGED
@@ -1,5 +1,6 @@
1
1
  'use client';
2
- export { Footer } from './chunk-HYQGOC2E.js';
2
+ export { Footer } from './chunk-QEIEWGHA.js';
3
+ import './chunk-VOARBYVQ.js';
3
4
  import './chunk-WSQNPRGN.js';
4
5
  //# sourceMappingURL=footer.js.map
5
6
  //# sourceMappingURL=footer.js.map
@@ -5,10 +5,14 @@ interface FormRowProps extends HTMLAttributes<HTMLDivElement> {
5
5
  label?: React.ReactNode;
6
6
  /** Hint text rendered below the label */
7
7
  description?: React.ReactNode;
8
+ /** Alias for `description` — used in docs/settings layouts */
9
+ hint?: React.ReactNode;
8
10
  error?: React.ReactNode;
9
11
  required?: boolean;
10
12
  /** Forwarded to the label's `htmlFor` — should match the control's `id` */
11
13
  htmlFor?: string;
14
+ /** `settings` = label/hint left, control right; `stack` = vertical field layout */
15
+ layout?: 'settings' | 'stack';
12
16
  }
13
17
  declare const FormRow: react.ForwardRefExoticComponent<FormRowProps & react.RefAttributes<HTMLDivElement>>;
14
18
 
package/dist/form-row.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- export { FormRow } from './chunk-Q74VRQEX.js';
2
+ export { FormRow } from './chunk-T3UQ7G4T.js';
3
3
  import './chunk-WSQNPRGN.js';
4
4
  //# sourceMappingURL=form-row.js.map
5
5
  //# sourceMappingURL=form-row.js.map
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- export { HeroBlock } from './chunk-DFM7UUKB.js';
3
- import './chunk-CBQ63EBL.js';
4
- import './chunk-ISHZ6ZPJ.js';
2
+ export { HeroBlock } from './chunk-ZTFOR3AN.js';
3
+ import './chunk-QQHBEACI.js';
4
+ import './chunk-JFOW2DI5.js';
5
5
  import './chunk-WSQNPRGN.js';
6
6
  //# sourceMappingURL=hero-block.js.map
7
7
  //# sourceMappingURL=hero-block.js.map
package/dist/index.d.ts CHANGED
@@ -29,6 +29,7 @@ export { Checkbox, CheckboxProps } from './checkbox.js';
29
29
  export { Switch, SwitchProps } from './switch.js';
30
30
  export { Radio, RadioGroup, RadioGroupProps, RadioProps } from './radio-group.js';
31
31
  export { Footer, FooterLabels, FooterProps } from './footer.js';
32
+ export { Monogram, MonogramColor, MonogramProps } from './monogram.js';
32
33
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './dialog.js';
33
34
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip.js';
34
35
  export { Tabs, TabsContent, TabsList, TabsTrigger } from './tabs.js';
package/dist/index.js CHANGED
@@ -1,33 +1,31 @@
1
1
  'use client';
2
+ export { TagInput } from './chunk-6IS2AYYG.js';
2
3
  export { Textarea } from './chunk-HWJVRTWO.js';
3
- export { Timeline } from './chunk-7TOT5ME3.js';
4
+ export { Timeline } from './chunk-3LTW224O.js';
4
5
  export { Toaster } from './chunk-CDI7353B.js';
5
6
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './chunk-6UXW5YUC.js';
6
- export { Slider } from './chunk-OONIUDST.js';
7
+ export { Slider } from './chunk-OLHMMFQ7.js';
7
8
  export { Sparkline } from './chunk-EVHZFYWX.js';
8
- export { StatCard } from './chunk-LUM2YJBH.js';
9
9
  export { Stepper } from './chunk-2QWKOCWF.js';
10
- export { Switch } from './chunk-O57QMLNI.js';
10
+ export { Switch } from './chunk-YTU7BRDW.js';
11
11
  export { Tabs, TabsContent, TabsList, TabsTrigger } from './chunk-T56TTOI6.js';
12
- export { TagInput } from './chunk-6IS2AYYG.js';
12
+ export { PricingCard } from './chunk-SNNMZ444.js';
13
13
  export { Progress } from './chunk-5GWHUJ5D.js';
14
- export { Radio, RadioGroup } from './chunk-6SKTH45H.js';
14
+ export { Radio, RadioGroup } from './chunk-J2Z4ZFVX.js';
15
15
  export { RollbackPlan } from './chunk-WDANALHD.js';
16
16
  export { Select } from './chunk-GTM2DE4C.js';
17
- export { ServiceHealthCard } from './chunk-7EP2T3OW.js';
18
17
  export { Sheet, SheetClose, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger } from './chunk-ILADNTUB.js';
19
18
  export { LogViewer } from './chunk-RZK2S2OO.js';
20
19
  export { Meter } from './chunk-A6L5C3IJ.js';
21
20
  export { Panel } from './chunk-T7EFDE2L.js';
22
21
  export { PasswordInput } from './chunk-NOLWJJHT.js';
23
- export { PricingCard } from './chunk-XR5QBVEV.js';
24
- export { Footer } from './chunk-HYQGOC2E.js';
25
- export { FormRow } from './chunk-Q74VRQEX.js';
22
+ export { Footer } from './chunk-QEIEWGHA.js';
23
+ export { Monogram } from './chunk-VOARBYVQ.js';
24
+ export { FormRow } from './chunk-T3UQ7G4T.js';
26
25
  export { GlowCard } from './chunk-ZOXO3G3I.js';
27
- export { HeroBlock } from './chunk-DFM7UUKB.js';
28
- export { NoirGlowBackground } from './chunk-CBQ63EBL.js';
29
- export { Pill } from './chunk-ISHZ6ZPJ.js';
30
- export { HostCard } from './chunk-DOUDJU4P.js';
26
+ export { HeroBlock } from './chunk-ZTFOR3AN.js';
27
+ export { NoirGlowBackground } from './chunk-QQHBEACI.js';
28
+ export { Pill } from './chunk-JFOW2DI5.js';
31
29
  export { Input } from './chunk-BPCH5LJ3.js';
32
30
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './chunk-KI6OTVID.js';
33
31
  export { Divider } from './chunk-CKNWXYMA.js';
@@ -41,22 +39,25 @@ export { CodeBlock } from './chunk-DRCMGIQ6.js';
41
39
  export { Combobox } from './chunk-H3ZVGTJM.js';
42
40
  export { CommandMenu } from './chunk-RQ3RXKAZ.js';
43
41
  export { Container } from './chunk-DNJI65VQ.js';
44
- export { DataTable } from './chunk-3TGMGBKM.js';
42
+ export { DataTable } from './chunk-K4ALNUZI.js';
43
+ export { Skeleton } from './chunk-AQT3FZRQ.js';
45
44
  export { Segmented } from './chunk-NSMU66ZX.js';
46
- export { Skeleton } from './chunk-FGXOV2QH.js';
47
45
  export { Pagination } from './chunk-RJTDQOT2.js';
48
46
  export { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from './chunk-435JHF7G.js';
49
- export { Checkbox } from './chunk-T3TQPOVM.js';
50
- export { DatePicker } from './chunk-V3P5QLLX.js';
51
- export { Avatar, AvatarGroup } from './chunk-DGCRHVWW.js';
47
+ export { Checkbox } from './chunk-TLEKK53J.js';
48
+ export { DatePicker } from './chunk-Q54CVE3W.js';
49
+ export { Avatar, AvatarGroup } from './chunk-VFS3V3VY.js';
52
50
  export { BackupStatusPanel } from './chunk-JRFSUVSO.js';
53
- export { StatusDot } from './chunk-NHPISZWS.js';
54
51
  export { Badge } from './chunk-QEHTPQHL.js';
55
52
  export { BarChart } from './chunk-4PA2ACNF.js';
56
- export { BentoDashboard } from './chunk-PLF3BBQI.js';
53
+ export { BentoDashboard } from './chunk-LGVXEWNB.js';
54
+ export { StatCard } from './chunk-LUM2YJBH.js';
55
+ export { ServiceHealthCard } from './chunk-7EP2T3OW.js';
56
+ export { HostCard } from './chunk-DOUDJU4P.js';
57
+ export { StatusDot } from './chunk-NHPISZWS.js';
57
58
  export { Breadcrumb } from './chunk-7J5QXUQN.js';
58
- export { Button, buttonVariants } from './chunk-RWJELAS6.js';
59
- export { CTABand } from './chunk-VTRUUT5K.js';
59
+ export { Button, buttonVariants } from './chunk-BQWF5MP7.js';
60
+ export { CTABand } from './chunk-FPFLOYIJ.js';
60
61
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './chunk-YYWODLER.js';
61
62
  export { ActionDiff } from './chunk-3XTZPDNV.js';
62
63
  export { ActionRow } from './chunk-OGVSZ7NV.js';
@@ -0,0 +1,20 @@
1
+ import * as react from 'react';
2
+ import { SVGAttributes } from 'react';
3
+
4
+ type MonogramColor = 'yellow' | 'black' | 'white';
5
+ interface MonogramProps extends SVGAttributes<SVGSVGElement> {
6
+ /**
7
+ * Fill color via `currentColor`.
8
+ * - `yellow` — default on dark surfaces (#FFFF00)
9
+ * - `black` — light-mode surfaces (#0A0A0A)
10
+ * - `white` — on tinted or photographic backgrounds
11
+ */
12
+ color?: MonogramColor;
13
+ /** Height in px; width scales from the 130×143 viewBox. */
14
+ size?: number;
15
+ /** Accessible name — rendered as `<title>` and `aria-label`. */
16
+ title?: string;
17
+ }
18
+ declare const Monogram: react.ForwardRefExoticComponent<MonogramProps & react.RefAttributes<SVGSVGElement>>;
19
+
20
+ export { Monogram, type MonogramColor, type MonogramProps };
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ export { Monogram } from './chunk-VOARBYVQ.js';
3
+ import './chunk-WSQNPRGN.js';
4
+ //# sourceMappingURL=monogram.js.map
5
+ //# sourceMappingURL=monogram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"monogram.js"}
@@ -32,6 +32,12 @@ interface NoirGlowBackgroundProps {
32
32
  forceCssFallback?: boolean;
33
33
  /** Disable pointer events so content above remains clickable. */
34
34
  inert?: boolean;
35
+ /** Horizontal shader offset (-1 to 1). Use for edge-biased layouts. */
36
+ offsetX?: number;
37
+ /** Vertical shader offset (-1 to 1). */
38
+ offsetY?: number;
39
+ /** Shader scale multiplier. Values > 1 push glow toward edges. */
40
+ scale?: number;
35
41
  }
36
42
  /**
37
43
  * NoirGlowBackground
@@ -45,6 +51,6 @@ interface NoirGlowBackgroundProps {
45
51
  * The CSS fallback classes live in `globals.css` and are used during Suspense,
46
52
  * reduced-motion contexts, or when `forceCssFallback` is true.
47
53
  */
48
- declare function NoirGlowBackground({ className, style, shape, intensity, speed, grain, softness, colorBack, colors, preserveCenter, noiseOverlay, forceCssFallback, inert, }: NoirGlowBackgroundProps): react.JSX.Element;
54
+ declare function NoirGlowBackground({ className, style, shape, intensity, speed, grain, softness, colorBack, colors, preserveCenter, noiseOverlay, forceCssFallback, inert, offsetX, offsetY, scale, }: NoirGlowBackgroundProps): react.JSX.Element;
49
55
 
50
56
  export { NoirGlowBackground, type NoirGlowBackgroundProps };
@@ -1,4 +1,4 @@
1
1
  'use client';
2
- export { NoirGlowBackground } from './chunk-CBQ63EBL.js';
2
+ export { NoirGlowBackground } from './chunk-QQHBEACI.js';
3
3
  //# sourceMappingURL=noir-glow-background.js.map
4
4
  //# sourceMappingURL=noir-glow-background.js.map
package/dist/pill.d.ts CHANGED
@@ -2,8 +2,11 @@ import * as react from 'react';
2
2
  import { HTMLAttributes } from 'react';
3
3
 
4
4
  declare const pillVariants: {
5
- readonly outline: "bg-transparent border border-tollerud-border text-tollerud-text-secondary";
6
- readonly solid: "bg-tollerud-surface-raised text-tollerud-text-primary";
5
+ readonly outline: "";
6
+ readonly muted: "";
7
+ readonly success: "";
8
+ readonly error: "";
9
+ readonly solid: "bg-tollerud-surface-raised text-tollerud-text-primary border-transparent";
7
10
  readonly accent: "bg-tollerud-yellow/15 border border-tollerud-yellow/30 text-tollerud-yellow";
8
11
  };
9
12
  interface PillProps extends HTMLAttributes<HTMLSpanElement> {
package/dist/pill.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- export { Pill } from './chunk-ISHZ6ZPJ.js';
2
+ export { Pill } from './chunk-JFOW2DI5.js';
3
3
  import './chunk-WSQNPRGN.js';
4
4
  //# sourceMappingURL=pill.js.map
5
5
  //# sourceMappingURL=pill.js.map
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- export { PricingCard } from './chunk-XR5QBVEV.js';
3
- import './chunk-RWJELAS6.js';
2
+ export { PricingCard } from './chunk-SNNMZ444.js';
3
+ import './chunk-BQWF5MP7.js';
4
4
  import './chunk-WSQNPRGN.js';
5
5
  //# sourceMappingURL=pricing-card.js.map
6
6
  //# sourceMappingURL=pricing-card.js.map
@@ -6,6 +6,12 @@ interface RadioGroupProps {
6
6
  label?: string;
7
7
  /** Error message */
8
8
  error?: string;
9
+ /** Controlled selected value */
10
+ value?: string;
11
+ /** Called with the selected option value */
12
+ onChange?: (value: string) => void;
13
+ /** Shared name for native radio grouping (auto-generated if omitted) */
14
+ name?: string;
9
15
  children?: React.ReactNode;
10
16
  className?: string;
11
17
  }
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- export { Radio, RadioGroup } from './chunk-6SKTH45H.js';
2
+ export { Radio, RadioGroup } from './chunk-J2Z4ZFVX.js';
3
3
  import './chunk-WSQNPRGN.js';
4
4
  //# sourceMappingURL=radio-group.js.map
5
5
  //# sourceMappingURL=radio-group.js.map
@@ -1,5 +1,13 @@
1
1
  import * as react from 'react';
2
2
 
3
- declare function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react.JSX.Element;
3
+ interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ /** Shorthand height in px (or any CSS length via className) */
5
+ h?: number | string;
6
+ /** Shorthand width in px or percentage string e.g. "60%" */
7
+ w?: number | string;
8
+ /** Shorthand border-radius in px */
9
+ r?: number | string;
10
+ }
11
+ declare function Skeleton({ className, h, w, r, style, ...props }: SkeletonProps): react.JSX.Element;
4
12
 
5
- export { Skeleton };
13
+ export { Skeleton, type SkeletonProps };