@once-ui-system/core 2.0.0-alpha.0 → 2.0.0-alpha.2

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 (162) hide show
  1. package/AGENTS.md +1 -1
  2. package/LICENSE.md +21 -0
  3. package/ai/catalog.json +11 -4
  4. package/ai/components/Effect.json +1 -1
  5. package/ai/components/Feedback.json +1 -0
  6. package/ai/components/Form.json +15 -0
  7. package/ai/components/Input.json +3 -2
  8. package/ai/components/{Particle.json → ParticleFx.json} +1 -1
  9. package/ai/components/ScrollContainer.json +9 -1
  10. package/ai/components/Textarea.json +3 -2
  11. package/ai/components/ThemeSwitcher.json +2 -1
  12. package/ai/eval-tasks.md +2 -1
  13. package/ai/examples/auth.tsx +1 -2
  14. package/ai/examples/blocks/Dashboard1.tsx +8 -8
  15. package/ai/examples/blocks/Feed3.tsx +4 -4
  16. package/ai/examples/blocks/Footer4.tsx +2 -2
  17. package/ai/examples/blocks/Header2.tsx +1 -1
  18. package/ai/examples/blocks/Header4.tsx +1 -2
  19. package/ai/examples/blocks/Productivity1.tsx +1 -1
  20. package/ai/examples/blocks/Roadmap1.tsx +3 -3
  21. package/ai/examples/blocks/Sidebar1.tsx +1 -1
  22. package/ai/examples/blocks/Sidebar2.tsx +1 -1
  23. package/ai/examples/blocks/Table1.tsx +3 -3
  24. package/ai/examples/blocks/manifest.json +2 -2
  25. package/ai/examples/dashboard.tsx +5 -5
  26. package/ai/examples/marketing-hero.tsx +2 -2
  27. package/ai/examples/pricing.tsx +3 -3
  28. package/ai/examples/settings.tsx +4 -4
  29. package/ai/gotchas.json +26 -2
  30. package/ai/manifest.json +2 -2
  31. package/ai/recipes.md +1 -1
  32. package/ai/rules.compact.md +8 -2
  33. package/ai/rules.md +18 -6
  34. package/ai/spec.json +35 -10
  35. package/ai/tasks/settings.json +1 -1
  36. package/dist/AGENTS.md +1 -1
  37. package/dist/ai/catalog.json +11 -4
  38. package/dist/ai/components/Effect.json +1 -1
  39. package/dist/ai/components/Feedback.json +1 -0
  40. package/dist/ai/components/Form.json +15 -0
  41. package/dist/ai/components/Input.json +3 -2
  42. package/dist/ai/components/{Particle.json → ParticleFx.json} +1 -1
  43. package/dist/ai/components/ScrollContainer.json +9 -1
  44. package/dist/ai/components/Textarea.json +3 -2
  45. package/dist/ai/components/ThemeSwitcher.json +2 -1
  46. package/dist/ai/eval-tasks.md +2 -1
  47. package/dist/ai/examples/blocks/manifest.json +2 -2
  48. package/dist/ai/gotchas.json +26 -2
  49. package/dist/ai/manifest.json +2 -2
  50. package/dist/ai/recipes.md +1 -1
  51. package/dist/ai/rules.compact.md +8 -2
  52. package/dist/ai/rules.md +18 -6
  53. package/dist/ai/spec.json +35 -10
  54. package/dist/ai/tasks/settings.json +1 -1
  55. package/dist/components/Animation.d.ts +1 -2
  56. package/dist/components/Animation.d.ts.map +1 -1
  57. package/dist/components/Animation.js +1 -1
  58. package/dist/components/Animation.js.map +1 -1
  59. package/dist/components/ArrowNavigationContext.d.ts.map +1 -1
  60. package/dist/components/ArrowNavigationContext.js +12 -3
  61. package/dist/components/ArrowNavigationContext.js.map +1 -1
  62. package/dist/components/Avatar.d.ts.map +1 -1
  63. package/dist/components/Avatar.js +1 -1
  64. package/dist/components/Avatar.js.map +1 -1
  65. package/dist/components/Carousel.js +1 -1
  66. package/dist/components/Carousel.js.map +1 -1
  67. package/dist/components/ContextMenu.d.ts +1 -1
  68. package/dist/components/ContextMenu.d.ts.map +1 -1
  69. package/dist/components/CountFx.d.ts.map +1 -1
  70. package/dist/components/CountFx.js +19 -7
  71. package/dist/components/CountFx.js.map +1 -1
  72. package/dist/components/CursorCard.d.ts +1 -1
  73. package/dist/components/CursorCard.d.ts.map +1 -1
  74. package/dist/components/DatePicker.d.ts.map +1 -1
  75. package/dist/components/DatePicker.js +9 -2
  76. package/dist/components/DatePicker.js.map +1 -1
  77. package/dist/components/DropdownWrapper.d.ts +1 -1
  78. package/dist/components/DropdownWrapper.d.ts.map +1 -1
  79. package/dist/components/DropdownWrapper.js +178 -35
  80. package/dist/components/DropdownWrapper.js.map +1 -1
  81. package/dist/components/DropdownWrapper.module.scss +3 -1
  82. package/dist/components/Effect.d.ts +2 -2
  83. package/dist/components/Effect.d.ts.map +1 -1
  84. package/dist/components/Effect.js +2 -2
  85. package/dist/components/Effect.js.map +1 -1
  86. package/dist/components/EmojiPicker.js +1 -1
  87. package/dist/components/EmojiPicker.js.map +1 -1
  88. package/dist/components/Feedback.d.ts +4 -0
  89. package/dist/components/Feedback.d.ts.map +1 -1
  90. package/dist/components/Feedback.js +2 -2
  91. package/dist/components/Feedback.js.map +1 -1
  92. package/dist/components/FocusTrap.d.ts +3 -3
  93. package/dist/components/FocusTrap.d.ts.map +1 -1
  94. package/dist/components/FocusTrap.js +10 -0
  95. package/dist/components/FocusTrap.js.map +1 -1
  96. package/dist/components/Form.d.ts +48 -0
  97. package/dist/components/Form.d.ts.map +1 -0
  98. package/dist/components/Form.js +191 -0
  99. package/dist/components/Form.js.map +1 -0
  100. package/dist/components/Form.module.scss +160 -0
  101. package/dist/components/FormContext.d.ts +20 -0
  102. package/dist/components/FormContext.d.ts.map +1 -0
  103. package/dist/components/FormContext.js +12 -0
  104. package/dist/components/FormContext.js.map +1 -0
  105. package/dist/components/Input.d.ts +3 -0
  106. package/dist/components/Input.d.ts.map +1 -1
  107. package/dist/components/Input.js +13 -2
  108. package/dist/components/Input.js.map +1 -1
  109. package/dist/components/Input.module.scss +27 -6
  110. package/dist/components/OgCard.d.ts.map +1 -1
  111. package/dist/components/OgCard.js +7 -4
  112. package/dist/components/OgCard.js.map +1 -1
  113. package/dist/components/{Particle.d.ts → ParticleFx.d.ts} +9 -4
  114. package/dist/components/ParticleFx.d.ts.map +1 -0
  115. package/dist/components/{Particle.js → ParticleFx.js} +9 -4
  116. package/dist/components/ParticleFx.js.map +1 -0
  117. package/dist/components/ScrollContainer.d.ts +69 -2
  118. package/dist/components/ScrollContainer.d.ts.map +1 -1
  119. package/dist/components/ScrollContainer.js +377 -46
  120. package/dist/components/ScrollContainer.js.map +1 -1
  121. package/dist/components/ScrollContainer.module.scss +131 -0
  122. package/dist/components/Select.d.ts +1 -1
  123. package/dist/components/Select.d.ts.map +1 -1
  124. package/dist/components/Select.js +1 -1
  125. package/dist/components/Select.js.map +1 -1
  126. package/dist/components/Setting.d.ts.map +1 -1
  127. package/dist/components/Setting.js +6 -1
  128. package/dist/components/Setting.js.map +1 -1
  129. package/dist/components/Table.js +2 -2
  130. package/dist/components/Table.js.map +1 -1
  131. package/dist/components/Textarea.d.ts +3 -0
  132. package/dist/components/Textarea.d.ts.map +1 -1
  133. package/dist/components/Textarea.js +22 -6
  134. package/dist/components/Textarea.js.map +1 -1
  135. package/dist/components/ThemeSwitcher.d.ts +16 -0
  136. package/dist/components/ThemeSwitcher.d.ts.map +1 -1
  137. package/dist/components/ThemeSwitcher.js +48 -9
  138. package/dist/components/ThemeSwitcher.js.map +1 -1
  139. package/dist/components/ThemeSwitcher.module.scss +112 -0
  140. package/dist/components/User.js +1 -1
  141. package/dist/components/User.js.map +1 -1
  142. package/dist/components/UserMenu.d.ts +1 -1
  143. package/dist/components/UserMenu.d.ts.map +1 -1
  144. package/dist/components/index.d.ts +2 -1
  145. package/dist/components/index.d.ts.map +1 -1
  146. package/dist/components/index.js +2 -1
  147. package/dist/components/index.js.map +1 -1
  148. package/dist/data/emoji-data.json +10 -0
  149. package/dist/hooks/useArrowNavigation.d.ts.map +1 -1
  150. package/dist/hooks/useArrowNavigation.js +52 -7
  151. package/dist/hooks/useArrowNavigation.js.map +1 -1
  152. package/dist/modules/navigation/MegaMenu.d.ts.map +1 -1
  153. package/dist/modules/navigation/MegaMenu.js +76 -10
  154. package/dist/modules/navigation/MegaMenu.js.map +1 -1
  155. package/dist/package.json +1 -1
  156. package/dist/scripts/validate-ai-code.js +239 -21
  157. package/dist/types.d.ts +14 -0
  158. package/dist/types.d.ts.map +1 -1
  159. package/package.json +1 -1
  160. package/scripts/validate-ai-code.js +239 -21
  161. package/dist/components/Particle.d.ts.map +0 -1
  162. package/dist/components/Particle.js.map +0 -1
@@ -171,7 +171,7 @@ const EmojiPicker = ({ onSelect, onClose, className, background, columns = "8",
171
171
  }
172
172
  setFocusedEmojiIndex(newIndex);
173
173
  }, [filteredEmojis, focusedEmojiIndex, handleEmojiSelect, columns]);
174
- return (_jsxs(Column, { gap: "16", background: background, className: className, style: style, "data-testid": "emoji-picker", height: 24, ...flex, children: [_jsx(Input, { id: `emoji-search-${searchInputId}`, placeholder: "Search emojis", value: inputValue, height: "s", onChange: (e) => setInputValue(e.target.value), prefix: _jsx(Icon, { size: "s", onBackground: "neutral-weak", name: "search" }), "aria-label": "Search emojis" }), _jsx(Column, { tabIndex: -1, fillHeight: true, overflowY: "auto", overflowX: "hidden", children: filteredEmojis.length > 0 ? (_jsx(Grid, { gap: "2", fillWidth: true, columns: columns, "aria-label": searchQuery ? "Search results" : `${activeCategory} emojis`, ref: gridRef, onKeyDown: handleKeyDown, tabIndex: -1, role: "grid", children: filteredEmojis.map((emoji, index) => (_jsx(EmojiButton, { emoji: emoji, index: index, isFocused: index === focusedEmojiIndex, onSelect: handleEmojiSelect, onFocus: handleFocus }, index))) })) : (_jsx(Row, { fill: true, center: true, align: "center", onBackground: "neutral-weak", children: "No results found" })) }), !searchQuery && (_jsx(SegmentedControl, { buttons: categoryButtons, onChange: handleCategoryChange, defaultValue: activeCategory, fillWidth: true }))] }));
174
+ return (_jsxs(Column, { gap: "16", background: background, className: className, style: style, "data-testid": "emoji-picker", height: 24, ...flex, children: [_jsx(Input, { id: `emoji-search-${searchInputId}`, placeholder: "Search emojis", value: inputValue, size: "s", onChange: (e) => setInputValue(e.target.value), prefix: _jsx(Icon, { size: "s", onBackground: "neutral-weak", name: "search" }), "aria-label": "Search emojis" }), _jsx(Column, { tabIndex: -1, fillHeight: true, overflowY: "auto", overflowX: "hidden", children: filteredEmojis.length > 0 ? (_jsx(Grid, { gap: "2", fillWidth: true, columns: columns, "aria-label": searchQuery ? "Search results" : `${activeCategory} emojis`, ref: gridRef, onKeyDown: handleKeyDown, tabIndex: -1, role: "grid", children: filteredEmojis.map((emoji, index) => (_jsx(EmojiButton, { emoji: emoji, index: index, isFocused: index === focusedEmojiIndex, onSelect: handleEmojiSelect, onFocus: handleFocus }, index))) })) : (_jsx(Row, { fill: true, center: true, align: "center", onBackground: "neutral-weak", children: "No results found" })) }), !searchQuery && (_jsx(SegmentedControl, { buttons: categoryButtons, onChange: handleCategoryChange, defaultValue: activeCategory, fillWidth: true }))] }));
175
175
  };
176
176
  EmojiPicker.displayName = "EmojiPicker";
177
177
  export { EmojiPicker };
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiPicker.js","sourceRoot":"","sources":["../../src/components/EmojiPicker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EmojiPicker.js","sourceRoot":"","sources":["../../src/components/EmojiPicker.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +1,12 @@
1
1
  import React, { ReactNode } from "react";
2
2
  import { Flex } from ".";
3
+ import type { IconName } from "../icons";
3
4
  interface FeedbackProps extends Omit<React.ComponentProps<typeof Flex>, "title"> {
4
5
  variant?: "info" | "danger" | "warning" | "success";
5
6
  showIcon?: boolean;
7
+ /** Overrides the variant's icon. Custom names work once registered through
8
+ * the `IconLibraryOverrides` interface, which is what widens `IconName`. */
9
+ icon?: IconName;
6
10
  title?: string;
7
11
  description?: string;
8
12
  showCloseButton?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Feedback.d.ts","sourceRoot":"","sources":["../../src/components/Feedback.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAc,SAAS,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAoB,IAAI,EAAgB,MAAM,GAAG,CAAC;AAGzD,UAAU,aAAc,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,OAAO,CAAC;IAC9E,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAWD,QAAA,MAAM,QAAQ,mGAqFb,CAAC;AAGF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"Feedback.d.ts","sourceRoot":"","sources":["../../src/components/Feedback.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAc,SAAS,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAoB,IAAI,EAAgB,MAAM,GAAG,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,UAAU,aAAc,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,OAAO,CAAC;IAC9E,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;iFAC6E;IAC7E,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAWD,QAAA,MAAM,QAAQ,mGAsFb,CAAC;AAGF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -8,8 +8,8 @@ const variantIconMap = {
8
8
  warning: "warning",
9
9
  success: "check",
10
10
  };
11
- const Feedback = forwardRef(({ variant = "info", showIcon = true, title, description, showCloseButton = false, onClose, className, style, children, ...rest }, ref) => {
12
- return (_jsxs(Flex, { fillWidth: true, radius: "l", ref: ref, border: `${variant}-medium`, background: `${variant}-medium`, vertical: "start", role: "alert", "aria-live": "assertive", className: className, style: style, ...rest, children: [showIcon && (_jsx(Flex, { paddingY: "16", paddingLeft: "16", children: _jsx(Icon, { padding: "2", radius: "m", onBackground: `${variant}-medium`, name: variantIconMap[variant], "aria-hidden": "true" }) })), _jsxs(Column, { fillWidth: true, padding: "16", gap: "24", vertical: "center", children: [(title || description) && (_jsxs(Column, { fillWidth: true, gap: "2", children: [title && (_jsxs(Flex, { fillWidth: true, gap: "16", children: [_jsx(Flex, { fillWidth: true, paddingY: "4", children: _jsx(Text, { variant: "heading-strong-xs", onBackground: `${variant}-medium`, role: "heading", "aria-level": 2, children: title }) }), showCloseButton && (_jsx(IconButton, { onClick: onClose, icon: "close", size: "m", tooltip: "Hide", tooltipPosition: "top", variant: "ghost", "aria-label": "Close alert" }))] })), description && (_jsx(Text, { marginBottom: "2", variant: "body-default-s", onBackground: `${variant}-strong`, children: description }))] })), children] })] }));
11
+ const Feedback = forwardRef(({ variant = "info", showIcon = true, icon, title, description, showCloseButton = false, onClose, className, style, children, ...rest }, ref) => {
12
+ return (_jsxs(Flex, { fillWidth: true, radius: "l", ref: ref, border: `${variant}-medium`, background: `${variant}-medium`, vertical: title || children ? "start" : "center", role: "alert", "aria-live": "assertive", className: className, style: style, ...rest, children: [showIcon && (_jsx(Flex, { paddingY: "16", paddingLeft: "16", children: _jsx(Icon, { padding: "2", radius: "m", onBackground: `${variant}-medium`, name: icon ?? variantIconMap[variant], "aria-hidden": "true" }) })), _jsxs(Column, { fillWidth: true, padding: "16", gap: "24", vertical: "center", children: [(title || description) && (_jsxs(Column, { fillWidth: true, gap: "2", children: [title && (_jsxs(Flex, { fillWidth: true, gap: "16", children: [_jsx(Flex, { fillWidth: true, paddingY: "4", children: _jsx(Text, { variant: "heading-strong-xs", onBackground: `${variant}-medium`, role: "heading", "aria-level": 2, children: title }) }), showCloseButton && (_jsx(IconButton, { onClick: onClose, icon: "close", size: "m", tooltip: "Hide", tooltipPosition: "top", variant: "ghost", "aria-label": "Close alert" }))] })), description && (_jsx(Text, { marginBottom: "2", variant: "body-default-s", onBackground: `${variant}-strong`, children: description }))] })), children] })] }));
13
13
  });
14
14
  Feedback.displayName = "Feedback";
15
15
  export { Feedback };
@@ -1 +1 @@
1
- {"version":3,"file":"Feedback.js","sourceRoot":"","sources":["../../src/components/Feedback.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,UAAU,EAAa,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;AAezD,MAAM,cAAc,GAEhB;IACF,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,MAAM,QAAQ,GAAG,UAAU,CACzB,CACE,EACE,OAAO,GAAG,MAAM,EAChB,QAAQ,GAAG,IAAI,EACf,KAAK,EACL,WAAW,EACX,eAAe,GAAG,KAAK,EACvB,OAAO,EACP,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,IAAI,EACR,EACD,GAAG,EACH,EAAE;IACF,OAAO,CACL,MAAC,IAAI,IACH,SAAS,QACT,MAAM,EAAC,GAAG,EACV,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,GAAG,OAAO,SAAS,EAC3B,UAAU,EAAE,GAAG,OAAO,SAAS,EAC/B,QAAQ,EAAC,OAAO,EAChB,IAAI,EAAC,OAAO,eACF,WAAW,EACrB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,KACR,IAAI,aAEP,QAAQ,IAAI,CACX,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,WAAW,EAAC,IAAI,YAClC,KAAC,IAAI,IACH,OAAO,EAAC,GAAG,EACX,MAAM,EAAC,GAAG,EACV,YAAY,EAAE,GAAG,OAAO,SAAS,EACjC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,iBACjB,MAAM,GAClB,GACG,CACR,EACD,MAAC,MAAM,IAAC,SAAS,QAAC,OAAO,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,aACtD,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,MAAC,MAAM,IAAC,SAAS,QAAC,GAAG,EAAC,GAAG,aACtB,KAAK,IAAI,CACR,MAAC,IAAI,IAAC,SAAS,QAAC,GAAG,EAAC,IAAI,aACtB,KAAC,IAAI,IAAC,SAAS,QAAC,QAAQ,EAAC,GAAG,YAC1B,KAAC,IAAI,IACH,OAAO,EAAC,mBAAmB,EAC3B,YAAY,EAAE,GAAG,OAAO,SAAS,EACjC,IAAI,EAAC,SAAS,gBACF,CAAC,YAEZ,KAAK,GACD,GACF,EACN,eAAe,IAAI,CAClB,KAAC,UAAU,IACT,OAAO,EAAE,OAAO,EAChB,IAAI,EAAC,OAAO,EACZ,IAAI,EAAC,GAAG,EACR,OAAO,EAAC,MAAM,EACd,eAAe,EAAC,KAAK,EACrB,OAAO,EAAC,OAAO,gBACJ,aAAa,GACxB,CACH,IACI,CACR,EACA,WAAW,IAAI,CACd,KAAC,IAAI,IACH,YAAY,EAAC,GAAG,EAChB,OAAO,EAAC,gBAAgB,EACxB,YAAY,EAAE,GAAG,OAAO,SAAS,YAEhC,WAAW,GACP,CACR,IACM,CACV,EACA,QAAQ,IACF,IACJ,CACR,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"Feedback.js","sourceRoot":"","sources":["../../src/components/Feedback.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,UAAU,EAAa,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;AAkBzD,MAAM,cAAc,GAEhB;IACF,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,MAAM,QAAQ,GAAG,UAAU,CACzB,CACE,EACE,OAAO,GAAG,MAAM,EAChB,QAAQ,GAAG,IAAI,EACf,IAAI,EACJ,KAAK,EACL,WAAW,EACX,eAAe,GAAG,KAAK,EACvB,OAAO,EACP,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,IAAI,EACR,EACD,GAAG,EACH,EAAE;IACF,OAAO,CACL,MAAC,IAAI,IACH,SAAS,QACT,MAAM,EAAC,GAAG,EACV,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,GAAG,OAAO,SAAS,EAC3B,UAAU,EAAE,GAAG,OAAO,SAAS,EAC/B,QAAQ,EAAE,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAChD,IAAI,EAAC,OAAO,eACF,WAAW,EACrB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,KACR,IAAI,aAEP,QAAQ,IAAI,CACX,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,WAAW,EAAC,IAAI,YAClC,KAAC,IAAI,IACH,OAAO,EAAC,GAAG,EACX,MAAM,EAAC,GAAG,EACV,YAAY,EAAE,GAAG,OAAO,SAAS,EACjC,IAAI,EAAE,IAAI,IAAI,cAAc,CAAC,OAAO,CAAC,iBACzB,MAAM,GAClB,GACG,CACR,EACD,MAAC,MAAM,IAAC,SAAS,QAAC,OAAO,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,aACtD,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,MAAC,MAAM,IAAC,SAAS,QAAC,GAAG,EAAC,GAAG,aACtB,KAAK,IAAI,CACR,MAAC,IAAI,IAAC,SAAS,QAAC,GAAG,EAAC,IAAI,aACtB,KAAC,IAAI,IAAC,SAAS,QAAC,QAAQ,EAAC,GAAG,YAC1B,KAAC,IAAI,IACH,OAAO,EAAC,mBAAmB,EAC3B,YAAY,EAAE,GAAG,OAAO,SAAS,EACjC,IAAI,EAAC,SAAS,gBACF,CAAC,YAEZ,KAAK,GACD,GACF,EACN,eAAe,IAAI,CAClB,KAAC,UAAU,IACT,OAAO,EAAE,OAAO,EAChB,IAAI,EAAC,OAAO,EACZ,IAAI,EAAC,GAAG,EACR,OAAO,EAAC,MAAM,EACd,eAAe,EAAC,KAAK,EACrB,OAAO,EAAC,OAAO,gBACJ,aAAa,GACxB,CACH,IACI,CACR,EACA,WAAW,IAAI,CACd,KAAC,IAAI,IACH,YAAY,EAAC,GAAG,EAChB,OAAO,EAAC,gBAAgB,EACxB,YAAY,EAAE,GAAG,OAAO,SAAS,YAEhC,WAAW,GACP,CACR,IACM,CACV,EACA,QAAQ,IACF,IACJ,CACR,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -3,11 +3,11 @@ interface FocusTrapProps {
3
3
  children: ReactNode;
4
4
  active: boolean;
5
5
  onEscape?: () => void;
6
- containerRef?: RefObject<HTMLDivElement>;
6
+ containerRef?: RefObject<HTMLDivElement | null>;
7
7
  className?: string;
8
8
  style?: React.CSSProperties;
9
- initialFocusRef?: RefObject<HTMLElement>;
10
- returnFocusRef?: RefObject<HTMLElement>;
9
+ initialFocusRef?: RefObject<HTMLElement | null>;
10
+ returnFocusRef?: RefObject<HTMLElement | null>;
11
11
  restoreFocus?: boolean;
12
12
  autoFocus?: boolean;
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FocusTrap.d.ts","sourceRoot":"","sources":["../../src/components/FocusTrap.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAqB,SAAS,EAAiB,SAAS,EAAc,MAAM,OAAO,CAAC;AAElG,UAAU,cAAc;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,eAAe,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,cAAc,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,QAAA,MAAM,SAAS,uFAgHb,CAAA;AAGF,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"FocusTrap.d.ts","sourceRoot":"","sources":["../../src/components/FocusTrap.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAqB,SAAS,EAAiB,SAAS,EAAc,MAAM,OAAO,CAAC;AAElG,UAAU,cAAc;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,eAAe,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,cAAc,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,QAAA,MAAM,SAAS,uFA0Hb,CAAA;AAGF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -8,6 +8,16 @@ const FocusTrap = forwardRef(({ children, active, onEscape, containerRef: extern
8
8
  // Store the previously focused element when the trap becomes active
9
9
  useEffect(() => {
10
10
  if (active) {
11
+ // Focus already inside means someone placed it there deliberately and
12
+ // more precisely than "the first focusable element" — DropdownWrapper
13
+ // opens a list on its selected option, not its first. This effect can
14
+ // run before or after that, depending on when the panel finishes
15
+ // positioning, so it defers instead of racing: a trap's job is to keep
16
+ // focus in, not to reset where it sits. The element outside is likewise
17
+ // only worth remembering when focus is actually coming from out there.
18
+ const alreadyInside = containerRef.current?.contains(document.activeElement) ?? false;
19
+ if (alreadyInside)
20
+ return;
11
21
  previouslyFocusedElement.current = document.activeElement;
12
22
  if (autoFocus) {
13
23
  // Focus the specified initial element or the first focusable element
@@ -1 +1 @@
1
- {"version":3,"file":"FocusTrap.js","sourceRoot":"","sources":["../../src/components/FocusTrap.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FocusTrap.js","sourceRoot":"","sources":["../../src/components/FocusTrap.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import React from "react";
2
+ import type { TShirtSizes } from "../types";
3
+ /**
4
+ * Form — spacing density and grouping for a set of fields.
5
+ *
6
+ * `density` is one decision, not two: how much air sits between fields, and
7
+ * whether they read as separate controls or as a single one. `"stacked"` fuses
8
+ * them — adjacent borders collapse onto a shared hairline and only the outer
9
+ * corners of the group stay round. `"tight"` and `"spacious"` are ordinary
10
+ * gaps, where every field keeps its own border and its own radius.
11
+ *
12
+ * The corner assignment is the point of the component. Hand-writing
13
+ * `corners="top" | "none" | "bottom"` down a stack is positional bookkeeping
14
+ * that breaks silently the moment a field is conditionally rendered or
15
+ * reordered — hide the third of four and the group ends on a square edge.
16
+ * Form derives the corners instead, from the children that actually rendered,
17
+ * at every breakpoint.
18
+ */
19
+ type Breakpoint = "xl" | "l" | "m" | "s" | "xs";
20
+ /** Columns, either flat or per breakpoint. Breakpoints cascade xl → xs, the
21
+ * same direction `Grid` cascades them. */
22
+ type FormColumns = number | Partial<Record<Breakpoint, number>>;
23
+ interface FormProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onSubmit"> {
24
+ /**
25
+ * Gap and grouping as one decision. `"stacked"` collapses the gap to a
26
+ * shared hairline and rounds only the outside of the group; `"tight"` and
27
+ * `"spacious"` keep every field its own control.
28
+ */
29
+ density?: "stacked" | "tight" | "spacious";
30
+ /** Grid columns. A number, or a per-breakpoint map like `{ xs: 1, m: 2 }`. */
31
+ columns?: FormColumns;
32
+ /**
33
+ * Size for every field in the form. A field that sets its own `size` keeps
34
+ * it. Passed down by context rather than cloned onto the children, so a
35
+ * child that is not a field does not pick up a stray attribute.
36
+ */
37
+ size?: TShirtSizes;
38
+ /** Render a real `<form>` rather than a `<div>`. */
39
+ as?: "div" | "form";
40
+ onSubmit?: React.FormEventHandler<HTMLFormElement>;
41
+ className?: string;
42
+ style?: React.CSSProperties;
43
+ children?: React.ReactNode;
44
+ }
45
+ declare const Form: React.ForwardRefExoticComponent<FormProps & React.RefAttributes<HTMLDivElement>>;
46
+ export type { FormColumns, FormProps };
47
+ export { Form };
48
+ //# sourceMappingURL=Form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../src/components/Form.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAA0B,WAAW,EAAE,MAAM,UAAU,CAAC;AAKpE;;;;;;;;;;;;;;;GAeG;AAEH,KAAK,UAAU,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;AAIhD;2CAC2C;AAC3C,KAAK,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhE,UAAU,SAAU,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IAChF;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IAC3C,8EAA8E;IAC9E,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,oDAAoD;IACpD,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AA+ID,QAAA,MAAM,IAAI,kFA+GT,CAAC;AAIF,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,191 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import classNames from "clsx";
4
+ import React, { forwardRef } from "react";
5
+ import styles from "./Form.module.scss";
6
+ import { FormFieldContext } from "./FormContext";
7
+ import { Grid } from "./Grid";
8
+ const BREAKPOINTS = ["xl", "l", "m", "s", "xs"];
9
+ const DENSITY_GAP = {
10
+ stacked: "0",
11
+ tight: "8",
12
+ spacious: "24",
13
+ };
14
+ /**
15
+ * Simulate CSS grid's row-major auto-placement for items that declare only a
16
+ * span.
17
+ *
18
+ * This is why the corners are computed here rather than written as
19
+ * `:nth-child()` rules. An item with `span={2}` occupies two tracks but is
20
+ * still one child, so nth-child arithmetic counts the wrong thing as soon as
21
+ * anything spans: in a two-column grid holding four fields where the last two
22
+ * span both columns, the first cell of each row is child 1, 3 and 4 — a set
23
+ * no `an + b` can name. Running this per breakpoint covers the responsive
24
+ * case that defeats corners computed once; see `resolveColumns`.
25
+ */
26
+ function place(spans, columns) {
27
+ const placements = [];
28
+ let row = 0;
29
+ let col = 0;
30
+ for (const raw of spans) {
31
+ const span = Math.min(Math.max(1, Math.floor(raw)), columns);
32
+ // A span that no longer fits the current row moves to the next one and
33
+ // leaves the tail of this row empty — what the browser does.
34
+ if (col + span > columns) {
35
+ row += 1;
36
+ col = 0;
37
+ }
38
+ placements.push({ row, col, span });
39
+ col += span;
40
+ if (col >= columns) {
41
+ row += 1;
42
+ col = 0;
43
+ }
44
+ }
45
+ return placements;
46
+ }
47
+ /**
48
+ * Which edges of a cell lie on the outside of the occupied region, and so
49
+ * which of its corners stay round.
50
+ *
51
+ * A corner is round only where both edges meeting at it are exposed. That is
52
+ * what makes a ragged last row come out right: three fields in two columns
53
+ * leave the second field's bottom-right on the outside of the group, so it
54
+ * keeps that corner even though it is not the last child.
55
+ */
56
+ function geometry(placements, columns) {
57
+ const rows = placements.length ? Math.max(...placements.map((p) => p.row)) + 1 : 0;
58
+ // occupancy[row][col] — the index of the cell owning that track, if any.
59
+ const occupancy = Array.from({ length: rows }, () => Array.from({ length: columns }, () => undefined));
60
+ placements.forEach((p, index) => {
61
+ for (let c = p.col; c < p.col + p.span; c += 1) {
62
+ occupancy[p.row][c] = index;
63
+ }
64
+ });
65
+ const occupied = (row, col) => row >= 0 && row < rows && col >= 0 && col < columns && occupancy[row][col] !== undefined;
66
+ return placements.map((p) => {
67
+ const cols = Array.from({ length: p.span }, (_, i) => p.col + i);
68
+ const topExposed = cols.every((c) => !occupied(p.row - 1, c));
69
+ const bottomExposed = cols.every((c) => !occupied(p.row + 1, c));
70
+ const leftExposed = !occupied(p.row, p.col - 1);
71
+ const rightExposed = !occupied(p.row, p.col + p.span);
72
+ const corners = [];
73
+ if (topExposed && leftExposed)
74
+ corners.push("tl");
75
+ if (topExposed && rightExposed)
76
+ corners.push("tr");
77
+ if (bottomExposed && leftExposed)
78
+ corners.push("bl");
79
+ if (bottomExposed && rightExposed)
80
+ corners.push("br");
81
+ return {
82
+ // Only an interior edge collapses; a cell whose top edge is on the
83
+ // outside has nothing above it to collapse onto.
84
+ fuseTop: !topExposed,
85
+ fuseLeft: !leftExposed,
86
+ corners,
87
+ span: p.span,
88
+ };
89
+ });
90
+ }
91
+ /** Column count at each breakpoint, cascading xl → xs the way `Grid` does. */
92
+ function resolveColumns(columns) {
93
+ if (typeof columns === "number") {
94
+ return { base: Math.max(1, Math.floor(columns)), perBreakpoint: undefined };
95
+ }
96
+ if (!columns) {
97
+ return { base: 1, perBreakpoint: undefined };
98
+ }
99
+ // The widest value given becomes the base, so a map naming only `xs` and `m`
100
+ // still renders something sensible above `m`.
101
+ const widest = BREAKPOINTS.find((bp) => columns[bp] !== undefined);
102
+ const base = widest ? Math.max(1, Math.floor(columns[widest])) : 1;
103
+ const perBreakpoint = {};
104
+ let current = base;
105
+ for (const bp of BREAKPOINTS) {
106
+ const value = columns[bp];
107
+ if (value !== undefined)
108
+ current = Math.max(1, Math.floor(value));
109
+ perBreakpoint[bp] = current;
110
+ }
111
+ return { base, perBreakpoint };
112
+ }
113
+ /** `corner-tl` at the base, `m-corner-tl` inside the `m` media query. */
114
+ const scoped = (bp, name) => styles[bp ? `${bp}-${name}` : name];
115
+ const Form = forwardRef(({ density = "tight", columns, size, as = "div", onSubmit, className, style, children, ...rest }, ref) => {
116
+ // `toArray` drops the `null`, `undefined` and `false` a conditionally
117
+ // rendered field leaves behind, so everything below is computed over the
118
+ // fields that actually rendered — which is the whole point.
119
+ const items = React.Children.toArray(children).filter(React.isValidElement);
120
+ const spans = items.map((child) => {
121
+ const span = child.props.span;
122
+ return typeof span === "number" && Number.isFinite(span) ? span : 1;
123
+ });
124
+ const fieldDefaults = React.useMemo(() => ({ size }), [size]);
125
+ const { base, perBreakpoint } = resolveColumns(columns);
126
+ const stacked = density === "stacked";
127
+ const responsive = perBreakpoint !== undefined;
128
+ const baseGeometry = geometry(place(spans, base), base);
129
+ // Every breakpoint gets a full set of classes, not just the ones whose
130
+ // column count differs. A cell keeps its base classes at all widths, so a
131
+ // breakpoint that places it differently must be able to state the whole
132
+ // answer — reset included — rather than add to a stale one.
133
+ const breakpointGeometry = {};
134
+ if (perBreakpoint) {
135
+ for (const bp of BREAKPOINTS) {
136
+ const count = perBreakpoint[bp];
137
+ if (count === undefined)
138
+ continue;
139
+ breakpointGeometry[bp] = geometry(place(spans, count), count);
140
+ }
141
+ }
142
+ const cells = items.map((child, index) => {
143
+ const cellClasses = [styles.cell];
144
+ const apply = (bp, geo) => {
145
+ if (geo.span > 1)
146
+ cellClasses.push(scoped(bp, `span-${geo.span}`));
147
+ if (!stacked)
148
+ return;
149
+ if (geo.fuseTop)
150
+ cellClasses.push(scoped(bp, "fuse-top"));
151
+ if (geo.fuseLeft)
152
+ cellClasses.push(scoped(bp, "fuse-left"));
153
+ for (const corner of geo.corners) {
154
+ cellClasses.push(scoped(bp, `corner-${corner}`));
155
+ }
156
+ };
157
+ // With a responsive column map, every viewport is already covered by one
158
+ // of the five breakpoint queries — `xl` is a min-width, `l` a max-width,
159
+ // and the two meet — so base classes would only be a wider answer left
160
+ // lying around for a narrower one to undo.
161
+ if (responsive) {
162
+ for (const bp of BREAKPOINTS) {
163
+ const geo = breakpointGeometry[bp];
164
+ if (!geo)
165
+ continue;
166
+ cellClasses.push(scoped(bp, "reset"));
167
+ apply(bp, geo[index]);
168
+ }
169
+ }
170
+ else {
171
+ apply(undefined, baseGeometry[index]);
172
+ }
173
+ return (_jsx("div", { className: classNames(cellClasses), "data-testid": `form-cell-${index}`, children: React.cloneElement(child, {
174
+ span: undefined,
175
+ }) }, child.key ?? index));
176
+ });
177
+ // `Grid`'s own `xl`/`l`/`m`/`s`/`xs` props would do this, but they switch it
178
+ // to `ClientGrid`, which reads `useLayout` and so requires a
179
+ // `LayoutProvider` above it. Nothing here is dynamic — foundations already
180
+ // ships `.m-columns-2` and friends — so the classes go on directly and
181
+ // Form keeps working anywhere.
182
+ const columnClasses = perBreakpoint
183
+ ? BREAKPOINTS.filter((bp) => perBreakpoint[bp] !== undefined).map((bp) => `${bp}-columns-${perBreakpoint[bp]}`)
184
+ : [];
185
+ return (_jsx(Grid, { ref: ref, as: as, ...(as === "form" && onSubmit
186
+ ? { onSubmit: onSubmit }
187
+ : {}), fillWidth: true, columns: String(base), gap: DENSITY_GAP[density], className: classNames(styles.form, stacked && styles.stacked, columnClasses, className), style: style, "data-density": density, ...rest, children: _jsx(FormFieldContext.Provider, { value: fieldDefaults, children: cells }) }));
188
+ });
189
+ Form.displayName = "Form";
190
+ export { Form };
191
+ //# sourceMappingURL=Form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.js","sourceRoot":"","sources":["../../src/components/Form.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ @use "../styles/breakpoints.scss" as breakpoints;
2
+
3
+ /* Form — density and grouping
4
+ ----------------------------------------------------------------------------
5
+ Two things are worth knowing before editing this file.
6
+
7
+ 1. The element that carries the border and the radius is not Form's child.
8
+ `Input` and `Textarea` render an outer `Column` — which also holds the
9
+ error and description rows — wrapping the bordered `Row`. So Form's cell
10
+ is the grandparent of the surface, and every rule here reaches it through
11
+ `[data-surface]`, a hook those components set on that `Row`, rather than
12
+ through `> *`. Bounded to two levels on purpose: a field nested deeper
13
+ inside a cell belongs to somebody else's group, not this one's.
14
+
15
+ 2. Nothing here relies on source order to win. The utility already on the
16
+ surface is `.radius-l`, specificity (0,1,0); every rule below that has to
17
+ beat it is at least (0,3,0). Where a breakpoint has to undo what a wider
18
+ one set, it does so through a reset class that is strictly *less*
19
+ specific than the rules re-applying over it, so the cascade resolves the
20
+ same way whichever order a bundler emits them in. */
21
+
22
+ /* The two shapes a cell can hold: a surface that is the cell's own child, and
23
+ the field case, where an outer Column sits in between. */
24
+ @mixin surface {
25
+ > [data-surface],
26
+ > * > [data-surface] {
27
+ @content;
28
+ }
29
+ }
30
+
31
+ .form {
32
+ /* Corners travel as custom properties rather than going straight to
33
+ `border-radius`, so a breakpoint can move one corner without restating
34
+ the other three. */
35
+ --form-radius: var(--radius-l);
36
+ }
37
+
38
+ .cell {
39
+ position: relative;
40
+ /* A grid item's default `min-width: auto` refuses to shrink below its
41
+ content, so one long placeholder would widen the whole column. */
42
+ min-width: 0;
43
+ }
44
+
45
+ .stacked {
46
+ .cell {
47
+ --form-tl: 0px;
48
+ --form-tr: 0px;
49
+ --form-bl: 0px;
50
+ --form-br: 0px;
51
+
52
+ @include surface {
53
+ border-radius: var(--form-tl) var(--form-tr) var(--form-br) var(--form-bl);
54
+ }
55
+ }
56
+
57
+ /* A focused field has to paint over its neighbours — all four of them in two
58
+ dimensions. `SegmentedControl` omits this in compact mode, and its focused
59
+ button loses an edge to the next one; the fix belongs here, where the
60
+ overlap is created. Note there is no `overflow: hidden` anywhere in this
61
+ file, for the same reason: the focus ring is an `outline` with a 2px
62
+ offset, and clipping the cell would clip the ring. */
63
+ .cell:focus-within {
64
+ z-index: 1;
65
+ }
66
+ }
67
+
68
+ /* Placement rules, emitted once bare and once inside each breakpoint.
69
+ `$p` is the class prefix; the bare pass has none. */
70
+ @mixin placement($p: "") {
71
+ $sep: if($p == "", "", "-");
72
+
73
+ /* Every breakpoint clears the wider one's answer before giving its own,
74
+ because at 375px the `l`, `m`, `s` and `xs` queries all match at once and
75
+ only the narrowest should be heard.
76
+
77
+ Reset and rules sit at the same specificity, (0,3,0), with the reset
78
+ written first — the same way `grid.generated.scss` orders its own
79
+ breakpoint classes, and the reason `placement()` is invoked below in
80
+ cascade order. What is deliberately NOT left to order is the fight
81
+ against the surface's own `.radius-l` utility from another file: that is
82
+ (0,1,0), and everything here outranks it outright.
83
+
84
+ Split in two because a span has to reset at every density, while corners
85
+ and collapsed margins exist only when stacked. */
86
+ @if $p != "" {
87
+ .form .cell.#{$p}#{$sep}reset {
88
+ grid-column: auto;
89
+ }
90
+
91
+ .stacked .cell.#{$p}#{$sep}reset {
92
+ --form-tl: 0px;
93
+ --form-tr: 0px;
94
+ --form-bl: 0px;
95
+ --form-br: 0px;
96
+ margin-top: 0;
97
+ margin-left: 0;
98
+ }
99
+ }
100
+
101
+ .stacked .cell.#{$p}#{$sep}corner-tl {
102
+ --form-tl: var(--form-radius);
103
+ }
104
+
105
+ .stacked .cell.#{$p}#{$sep}corner-tr {
106
+ --form-tr: var(--form-radius);
107
+ }
108
+
109
+ .stacked .cell.#{$p}#{$sep}corner-bl {
110
+ --form-bl: var(--form-radius);
111
+ }
112
+
113
+ .stacked .cell.#{$p}#{$sep}corner-br {
114
+ --form-br: var(--form-radius);
115
+ }
116
+
117
+ /* Two adjacent 1px borders pulled together by -1px collapse onto exactly one
118
+ line — the trick `gap="-1"` plays for flex, which has no grid equivalent.
119
+ `g--1` does not exist, and the flex classes key off `:not(:first-child)`,
120
+ which in a grid would drag the first cell of every row after the first
121
+ sideways. Applied per cell, because Form knows the row and the column that
122
+ a utility class cannot. */
123
+ .stacked .cell.#{$p}#{$sep}fuse-top {
124
+ margin-top: -1px;
125
+ }
126
+
127
+ .stacked .cell.#{$p}#{$sep}fuse-left {
128
+ margin-left: -1px;
129
+ }
130
+
131
+ @for $n from 2 through 12 {
132
+ .form .cell.#{$p}#{$sep}span-#{$n} {
133
+ grid-column: span #{$n};
134
+ }
135
+ }
136
+ }
137
+
138
+ @include placement();
139
+
140
+ /* Order matches grid.generated.scss: xl leads, then the max-width queries from
141
+ widest to narrowest, so the narrowest one that matches wins. */
142
+ @include breakpoints.xl {
143
+ @include placement("xl");
144
+ }
145
+
146
+ @include breakpoints.l {
147
+ @include placement("l");
148
+ }
149
+
150
+ @include breakpoints.m {
151
+ @include placement("m");
152
+ }
153
+
154
+ @include breakpoints.s {
155
+ @include placement("s");
156
+ }
157
+
158
+ @include breakpoints.xs {
159
+ @include placement("xs");
160
+ }
@@ -0,0 +1,20 @@
1
+ import type { TShirtSizes } from "../types";
2
+ /**
3
+ * What a `Form` hands down to the fields inside it.
4
+ *
5
+ * Kept out of the package's exports on purpose: this is how `Form` and the
6
+ * field primitives agree on a default, not an API for callers to reach into.
7
+ * A context rather than a cloned prop because `Form` wraps arbitrary children
8
+ * — cloning `size` onto one that is not a field would put a stray attribute
9
+ * in the DOM.
10
+ */
11
+ export interface FormFieldDefaults {
12
+ size?: TShirtSizes;
13
+ }
14
+ export declare const FormFieldContext: import("react").Context<FormFieldDefaults>;
15
+ /**
16
+ * Resolve a field's size. The field's own prop always wins; a `Form` only
17
+ * supplies a default, and `"m"` remains the default outside one.
18
+ */
19
+ export declare const useFieldSize: (own?: TShirtSizes) => TShirtSizes;
20
+ //# sourceMappingURL=FormContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormContext.d.ts","sourceRoot":"","sources":["../../src/components/FormContext.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,4CAAuC,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,WAAW,KAAG,WAGhD,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { createContext, useContext } from "react";
3
+ export const FormFieldContext = createContext({});
4
+ /**
5
+ * Resolve a field's size. The field's own prop always wins; a `Form` only
6
+ * supplies a default, and `"m"` remains the default outside one.
7
+ */
8
+ export const useFieldSize = (own) => {
9
+ const inherited = useContext(FormFieldContext).size;
10
+ return own ?? inherited ?? "m";
11
+ };
12
+ //# sourceMappingURL=FormContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormContext.js","sourceRoot":"","sources":["../../src/components/FormContext.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAgBlD,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAoB,EAAE,CAAC,CAAC;AAErE;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAiB,EAAe,EAAE;IAC7D,MAAM,SAAS,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC;IACpD,OAAO,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC;AACjC,CAAC,CAAC"}
@@ -24,6 +24,9 @@ interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"
24
24
  cursor?: undefined | "interactive";
25
25
  validate?: (value: ReactNode) => ReactNode | null;
26
26
  loading?: boolean;
27
+ /** How many columns to occupy inside a `Form` grid. `Form` reads this off
28
+ * the child and strips it; outside a `Form` it does nothing. */
29
+ span?: number;
27
30
  }
28
31
  declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
29
32
  export { Input };