@mindlogic-ai/logician-ui 4.0.0-alpha.13 → 4.0.0-alpha.14

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 (161) hide show
  1. package/dist/components/Button/Button.styles.d.ts.map +1 -1
  2. package/dist/components/Button/Button.styles.js +17 -12
  3. package/dist/components/Button/Button.styles.js.map +1 -1
  4. package/dist/components/Button/Button.styles.mjs +17 -12
  5. package/dist/components/Button/Button.styles.mjs.map +1 -1
  6. package/dist/components/Card/Card.styles.d.ts +4 -0
  7. package/dist/components/Card/Card.styles.d.ts.map +1 -1
  8. package/dist/components/Card/Card.styles.js +8 -0
  9. package/dist/components/Card/Card.styles.js.map +1 -1
  10. package/dist/components/Card/Card.styles.mjs +8 -0
  11. package/dist/components/Card/Card.styles.mjs.map +1 -1
  12. package/dist/components/Card/Card.types.d.ts +1 -1
  13. package/dist/components/Card/Card.types.d.ts.map +1 -1
  14. package/dist/components/Form/FieldError/FieldError.d.ts +15 -0
  15. package/dist/components/Form/FieldError/FieldError.d.ts.map +1 -0
  16. package/dist/components/Form/FieldError/FieldError.js +22 -0
  17. package/dist/components/Form/FieldError/FieldError.js.map +1 -0
  18. package/dist/components/Form/FieldError/FieldError.mjs +20 -0
  19. package/dist/components/Form/FieldError/FieldError.mjs.map +1 -0
  20. package/dist/components/Form/FieldError/index.d.ts +3 -0
  21. package/dist/components/Form/FieldError/index.d.ts.map +1 -0
  22. package/dist/components/Form/FieldHelp/FieldHelp.d.ts +14 -0
  23. package/dist/components/Form/FieldHelp/FieldHelp.d.ts.map +1 -0
  24. package/dist/components/Form/FieldHelp/FieldHelp.js +19 -0
  25. package/dist/components/Form/FieldHelp/FieldHelp.js.map +1 -0
  26. package/dist/components/Form/FieldHelp/FieldHelp.mjs +17 -0
  27. package/dist/components/Form/FieldHelp/FieldHelp.mjs.map +1 -0
  28. package/dist/components/Form/FieldHelp/index.d.ts +3 -0
  29. package/dist/components/Form/FieldHelp/index.d.ts.map +1 -0
  30. package/dist/components/Form/FieldLabel/FieldLabel.d.ts +12 -0
  31. package/dist/components/Form/FieldLabel/FieldLabel.d.ts.map +1 -0
  32. package/dist/components/Form/FieldLabel/FieldLabel.js +32 -0
  33. package/dist/components/Form/FieldLabel/FieldLabel.js.map +1 -0
  34. package/dist/components/Form/FieldLabel/FieldLabel.mjs +30 -0
  35. package/dist/components/Form/FieldLabel/FieldLabel.mjs.map +1 -0
  36. package/dist/components/Form/FieldLabel/FieldLabel.types.d.ts +21 -0
  37. package/dist/components/Form/FieldLabel/FieldLabel.types.d.ts.map +1 -0
  38. package/dist/components/Form/FieldLabel/index.d.ts +3 -0
  39. package/dist/components/Form/FieldLabel/index.d.ts.map +1 -0
  40. package/dist/components/Form/FieldRow/FieldRow.d.ts +15 -0
  41. package/dist/components/Form/FieldRow/FieldRow.d.ts.map +1 -0
  42. package/dist/components/Form/FieldRow/FieldRow.js +27 -0
  43. package/dist/components/Form/FieldRow/FieldRow.js.map +1 -0
  44. package/dist/components/Form/FieldRow/FieldRow.mjs +25 -0
  45. package/dist/components/Form/FieldRow/FieldRow.mjs.map +1 -0
  46. package/dist/components/Form/FieldRow/FieldRow.types.d.ts +27 -0
  47. package/dist/components/Form/FieldRow/FieldRow.types.d.ts.map +1 -0
  48. package/dist/components/Form/FieldRow/index.d.ts +3 -0
  49. package/dist/components/Form/FieldRow/index.d.ts.map +1 -0
  50. package/dist/components/Form/FormFooter/FormFooter.d.ts +11 -0
  51. package/dist/components/Form/FormFooter/FormFooter.d.ts.map +1 -0
  52. package/dist/components/Form/FormFooter/FormFooter.js +20 -0
  53. package/dist/components/Form/FormFooter/FormFooter.js.map +1 -0
  54. package/dist/components/Form/FormFooter/FormFooter.mjs +18 -0
  55. package/dist/components/Form/FormFooter/FormFooter.mjs.map +1 -0
  56. package/dist/components/Form/FormFooter/FormFooter.types.d.ts +23 -0
  57. package/dist/components/Form/FormFooter/FormFooter.types.d.ts.map +1 -0
  58. package/dist/components/Form/FormFooter/index.d.ts +3 -0
  59. package/dist/components/Form/FormFooter/index.d.ts.map +1 -0
  60. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts +19 -0
  61. package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts.map +1 -0
  62. package/dist/components/Form/FormModalFooter/FormModalFooter.js +42 -0
  63. package/dist/components/Form/FormModalFooter/FormModalFooter.js.map +1 -0
  64. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs +40 -0
  65. package/dist/components/Form/FormModalFooter/FormModalFooter.mjs.map +1 -0
  66. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts +49 -0
  67. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts.map +1 -0
  68. package/dist/components/Form/FormModalFooter/index.d.ts +3 -0
  69. package/dist/components/Form/FormModalFooter/index.d.ts.map +1 -0
  70. package/dist/components/Form/FormScrollArea/FormScrollArea.d.ts +14 -0
  71. package/dist/components/Form/FormScrollArea/FormScrollArea.d.ts.map +1 -0
  72. package/dist/components/Form/FormScrollArea/FormScrollArea.js +18 -0
  73. package/dist/components/Form/FormScrollArea/FormScrollArea.js.map +1 -0
  74. package/dist/components/Form/FormScrollArea/FormScrollArea.mjs +16 -0
  75. package/dist/components/Form/FormScrollArea/FormScrollArea.mjs.map +1 -0
  76. package/dist/components/Form/FormScrollArea/index.d.ts +2 -0
  77. package/dist/components/Form/FormScrollArea/index.d.ts.map +1 -0
  78. package/dist/components/Form/FormSection/CollapsibleFormSection.d.ts +10 -0
  79. package/dist/components/Form/FormSection/CollapsibleFormSection.d.ts.map +1 -0
  80. package/dist/components/Form/FormSection/CollapsibleFormSection.js +43 -0
  81. package/dist/components/Form/FormSection/CollapsibleFormSection.js.map +1 -0
  82. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs +41 -0
  83. package/dist/components/Form/FormSection/CollapsibleFormSection.mjs.map +1 -0
  84. package/dist/components/Form/FormSection/FlatFormSection.d.ts +6 -0
  85. package/dist/components/Form/FormSection/FlatFormSection.d.ts.map +1 -0
  86. package/dist/components/Form/FormSection/FlatFormSection.js +12 -0
  87. package/dist/components/Form/FormSection/FlatFormSection.js.map +1 -0
  88. package/dist/components/Form/FormSection/FlatFormSection.mjs +10 -0
  89. package/dist/components/Form/FormSection/FlatFormSection.mjs.map +1 -0
  90. package/dist/components/Form/FormSection/FormSection.d.ts +13 -0
  91. package/dist/components/Form/FormSection/FormSection.d.ts.map +1 -0
  92. package/dist/components/Form/FormSection/FormSection.js +21 -0
  93. package/dist/components/Form/FormSection/FormSection.js.map +1 -0
  94. package/dist/components/Form/FormSection/FormSection.mjs +19 -0
  95. package/dist/components/Form/FormSection/FormSection.mjs.map +1 -0
  96. package/dist/components/Form/FormSection/FormSection.types.d.ts +34 -0
  97. package/dist/components/Form/FormSection/FormSection.types.d.ts.map +1 -0
  98. package/dist/components/Form/FormSection/index.d.ts +3 -0
  99. package/dist/components/Form/FormSection/index.d.ts.map +1 -0
  100. package/dist/components/Form/FormSectionHeader/FormSectionHeader.d.ts +13 -0
  101. package/dist/components/Form/FormSectionHeader/FormSectionHeader.d.ts.map +1 -0
  102. package/dist/components/Form/FormSectionHeader/FormSectionHeader.js +30 -0
  103. package/dist/components/Form/FormSectionHeader/FormSectionHeader.js.map +1 -0
  104. package/dist/components/Form/FormSectionHeader/FormSectionHeader.mjs +28 -0
  105. package/dist/components/Form/FormSectionHeader/FormSectionHeader.mjs.map +1 -0
  106. package/dist/components/Form/FormSectionHeader/FormSectionHeader.types.d.ts +17 -0
  107. package/dist/components/Form/FormSectionHeader/FormSectionHeader.types.d.ts.map +1 -0
  108. package/dist/components/Form/FormSectionHeader/index.d.ts +3 -0
  109. package/dist/components/Form/FormSectionHeader/index.d.ts.map +1 -0
  110. package/dist/components/Form/index.d.ts +18 -0
  111. package/dist/components/Form/index.d.ts.map +1 -0
  112. package/dist/index.d.ts +1 -0
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +18 -0
  115. package/dist/index.js.map +1 -1
  116. package/dist/index.mjs +9 -0
  117. package/dist/index.mjs.map +1 -1
  118. package/package.json +1 -1
  119. package/src/components/Button/Button.styles.ts +17 -12
  120. package/src/components/Card/Card.stories.tsx +7 -0
  121. package/src/components/Card/Card.styles.ts +8 -0
  122. package/src/components/Card/Card.types.ts +1 -1
  123. package/src/components/Form/FieldError/FieldError.test.tsx +33 -0
  124. package/src/components/Form/FieldError/FieldError.tsx +20 -0
  125. package/src/components/Form/FieldError/index.ts +2 -0
  126. package/src/components/Form/FieldHelp/FieldHelp.tsx +18 -0
  127. package/src/components/Form/FieldHelp/index.ts +2 -0
  128. package/src/components/Form/FieldLabel/FieldLabel.tsx +46 -0
  129. package/src/components/Form/FieldLabel/FieldLabel.types.ts +21 -0
  130. package/src/components/Form/FieldLabel/index.ts +2 -0
  131. package/src/components/Form/FieldRow/FieldRow.stories.tsx +85 -0
  132. package/src/components/Form/FieldRow/FieldRow.test.tsx +89 -0
  133. package/src/components/Form/FieldRow/FieldRow.tsx +46 -0
  134. package/src/components/Form/FieldRow/FieldRow.types.ts +32 -0
  135. package/src/components/Form/FieldRow/index.ts +2 -0
  136. package/src/components/Form/FormFooter/FormFooter.stories.tsx +70 -0
  137. package/src/components/Form/FormFooter/FormFooter.test.tsx +67 -0
  138. package/src/components/Form/FormFooter/FormFooter.tsx +46 -0
  139. package/src/components/Form/FormFooter/FormFooter.types.ts +23 -0
  140. package/src/components/Form/FormFooter/index.ts +2 -0
  141. package/src/components/Form/FormModalFooter/FormModalFooter.stories.tsx +64 -0
  142. package/src/components/Form/FormModalFooter/FormModalFooter.test.tsx +155 -0
  143. package/src/components/Form/FormModalFooter/FormModalFooter.tsx +83 -0
  144. package/src/components/Form/FormModalFooter/FormModalFooter.types.ts +53 -0
  145. package/src/components/Form/FormModalFooter/index.ts +2 -0
  146. package/src/components/Form/FormScrollArea/FormScrollArea.tsx +27 -0
  147. package/src/components/Form/FormScrollArea/index.ts +1 -0
  148. package/src/components/Form/FormSection/CollapsibleFormSection.tsx +35 -0
  149. package/src/components/Form/FormSection/FlatFormSection.tsx +41 -0
  150. package/src/components/Form/FormSection/FormSection.stories.tsx +115 -0
  151. package/src/components/Form/FormSection/FormSection.test.tsx +89 -0
  152. package/src/components/Form/FormSection/FormSection.tsx +33 -0
  153. package/src/components/Form/FormSection/FormSection.types.ts +34 -0
  154. package/src/components/Form/FormSection/index.ts +2 -0
  155. package/src/components/Form/FormSectionHeader/FormSectionHeader.stories.tsx +53 -0
  156. package/src/components/Form/FormSectionHeader/FormSectionHeader.test.tsx +74 -0
  157. package/src/components/Form/FormSectionHeader/FormSectionHeader.tsx +48 -0
  158. package/src/components/Form/FormSectionHeader/FormSectionHeader.types.ts +17 -0
  159. package/src/components/Form/FormSectionHeader/index.ts +2 -0
  160. package/src/components/Form/index.ts +17 -0
  161. package/src/index.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlatFormSection.d.ts","sourceRoot":"","sources":["../../../../src/components/Form/FormSection/FlatFormSection.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,KAAK,oBAAoB,GAAG,IAAI,CAC9B,gBAAgB,EAChB,aAAa,GAAG,aAAa,GAAG,UAAU,CAC3C,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,eAAe,GAAI,qFAS7B,oBAAoB,4CAoBtB,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var react = require('@chakra-ui/react');
6
+ var FormSectionHeader = require('../FormSectionHeader/FormSectionHeader.js');
7
+
8
+ /** The flat (non-collapsible) `FormSection` variant. */
9
+ const FlatFormSection = ({ title, titleAdornment, description, action, divider = false, gap = 4, children, ...boxProps }) => (jsxRuntime.jsxs(react.Box, { w: "100%", pt: divider ? 4 : undefined, borderTopWidth: divider ? '1px' : undefined, borderColor: divider ? 'border.subtle' : undefined, ...boxProps, children: [(title || titleAdornment || description || action) && (jsxRuntime.jsx(FormSectionHeader.FormSectionHeader, { title: title, titleAdornment: titleAdornment, description: description, action: action })), jsxRuntime.jsx(react.VStack, { align: "stretch", gap: gap, w: "100%", children: children })] }));
10
+
11
+ exports.FlatFormSection = FlatFormSection;
12
+ //# sourceMappingURL=FlatFormSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlatFormSection.js","sources":["../../../../src/components/Form/FormSection/FlatFormSection.tsx"],"sourcesContent":[null],"names":["_jsxs","Box","_jsx","FormSectionHeader","VStack"],"mappings":";;;;;;;AAUA;AACO,MAAM,eAAe,GAAG,CAAC,EAC9B,KAAK,EACL,cAAc,EACd,WAAW,EACX,MAAM,EACN,OAAO,GAAG,KAAK,EACf,GAAG,GAAG,CAAC,EACP,QAAQ,EACR,GAAG,QAAQ,EACU,MACrBA,eAAA,CAACC,SAAG,EAAA,EACF,CAAC,EAAC,MAAM,EACR,EAAE,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS,EAC3B,cAAc,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,EAC3C,WAAW,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,EAAA,GAC9C,QAAQ,EAAA,QAAA,EAAA,CAEX,CAAC,KAAK,IAAI,cAAc,IAAI,WAAW,IAAI,MAAM,MAChDC,cAAA,CAACC,mCAAiB,EAAA,EAChB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EAAA,CACd,CACH,EACDD,cAAA,CAACE,YAAM,EAAA,EAAC,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAC,MAAM,EAAA,QAAA,EACvC,QAAQ,EAAA,CACF,CAAA,EAAA,CACL;;;;"}
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { Box, VStack } from '@chakra-ui/react';
4
+ import { FormSectionHeader } from '../FormSectionHeader/FormSectionHeader.mjs';
5
+
6
+ /** The flat (non-collapsible) `FormSection` variant. */
7
+ const FlatFormSection = ({ title, titleAdornment, description, action, divider = false, gap = 4, children, ...boxProps }) => (jsxs(Box, { w: "100%", pt: divider ? 4 : undefined, borderTopWidth: divider ? '1px' : undefined, borderColor: divider ? 'border.subtle' : undefined, ...boxProps, children: [(title || titleAdornment || description || action) && (jsx(FormSectionHeader, { title: title, titleAdornment: titleAdornment, description: description, action: action })), jsx(VStack, { align: "stretch", gap: gap, w: "100%", children: children })] }));
8
+
9
+ export { FlatFormSection };
10
+ //# sourceMappingURL=FlatFormSection.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlatFormSection.mjs","sources":["../../../../src/components/Form/FormSection/FlatFormSection.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;;;AAUA;AACO,MAAM,eAAe,GAAG,CAAC,EAC9B,KAAK,EACL,cAAc,EACd,WAAW,EACX,MAAM,EACN,OAAO,GAAG,KAAK,EACf,GAAG,GAAG,CAAC,EACP,QAAQ,EACR,GAAG,QAAQ,EACU,MACrBA,IAAA,CAAC,GAAG,EAAA,EACF,CAAC,EAAC,MAAM,EACR,EAAE,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS,EAC3B,cAAc,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,EAC3C,WAAW,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,EAAA,GAC9C,QAAQ,EAAA,QAAA,EAAA,CAEX,CAAC,KAAK,IAAI,cAAc,IAAI,WAAW,IAAI,MAAM,MAChDC,GAAA,CAAC,iBAAiB,EAAA,EAChB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EAAA,CACd,CACH,EACDA,GAAA,CAAC,MAAM,EAAA,EAAC,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAC,MAAM,EAAA,QAAA,EACvC,QAAQ,EAAA,CACF,CAAA,EAAA,CACL;;;;"}
@@ -0,0 +1,13 @@
1
+ import { FormSectionProps } from './FormSection.types';
2
+ /**
3
+ * A titled group of form fields with one consistent rhythm — the shared
4
+ * replacement for the studio panels' ad-hoc `GroupHeader`/`ModeSection` +
5
+ * per-tab `VStack` gaps (8/6/12) and the workflow inspector's per-node section
6
+ * headers. Renders flat by default; set `collapsible` (with a `title`) to render
7
+ * the logician `CollapsibleSection` accordion. `gap` standardizes the field
8
+ * spacing so sections read the same everywhere.
9
+ *
10
+ * Thin dispatcher over the two single-purpose variants so each has one return.
11
+ */
12
+ export declare const FormSection: ({ collapsible, defaultOpen, hasError, ...rest }: FormSectionProps) => import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=FormSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSection.d.ts","sourceRoot":"","sources":["../../../../src/components/Form/FormSection/FormSection.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GAAI,iDAKzB,gBAAgB,4CAahB,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var CollapsibleFormSection = require('./CollapsibleFormSection.js');
6
+ var FlatFormSection = require('./FlatFormSection.js');
7
+
8
+ /**
9
+ * A titled group of form fields with one consistent rhythm — the shared
10
+ * replacement for the studio panels' ad-hoc `GroupHeader`/`ModeSection` +
11
+ * per-tab `VStack` gaps (8/6/12) and the workflow inspector's per-node section
12
+ * headers. Renders flat by default; set `collapsible` (with a `title`) to render
13
+ * the logician `CollapsibleSection` accordion. `gap` standardizes the field
14
+ * spacing so sections read the same everywhere.
15
+ *
16
+ * Thin dispatcher over the two single-purpose variants so each has one return.
17
+ */
18
+ const FormSection = ({ collapsible = false, defaultOpen = true, hasError = false, ...rest }) => collapsible && rest.title ? (jsxRuntime.jsx(CollapsibleFormSection.CollapsibleFormSection, { title: rest.title, action: rest.action, gap: rest.gap, defaultOpen: defaultOpen, hasError: hasError, children: rest.children })) : (jsxRuntime.jsx(FlatFormSection.FlatFormSection, { ...rest }));
19
+
20
+ exports.FormSection = FormSection;
21
+ //# sourceMappingURL=FormSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSection.js","sources":["../../../../src/components/Form/FormSection/FormSection.tsx"],"sourcesContent":[null],"names":["_jsx","CollapsibleFormSection","FlatFormSection"],"mappings":";;;;;;;AAIA;;;;;;;;;AASG;AACI,MAAM,WAAW,GAAG,CAAC,EAC1B,WAAW,GAAG,KAAK,EACnB,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,GAAG,IAAI,EACU,KACjB,WAAW,IAAI,IAAI,CAAC,KAAK,IACvBA,cAAA,CAACC,6CAAsB,IACrB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAAA,QAAA,EAEjB,IAAI,CAAC,QAAQ,GACS,KAEzBD,cAAA,CAACE,+BAAe,OAAK,IAAI,EAAA,CAAI;;;;"}
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { CollapsibleFormSection } from './CollapsibleFormSection.mjs';
4
+ import { FlatFormSection } from './FlatFormSection.mjs';
5
+
6
+ /**
7
+ * A titled group of form fields with one consistent rhythm — the shared
8
+ * replacement for the studio panels' ad-hoc `GroupHeader`/`ModeSection` +
9
+ * per-tab `VStack` gaps (8/6/12) and the workflow inspector's per-node section
10
+ * headers. Renders flat by default; set `collapsible` (with a `title`) to render
11
+ * the logician `CollapsibleSection` accordion. `gap` standardizes the field
12
+ * spacing so sections read the same everywhere.
13
+ *
14
+ * Thin dispatcher over the two single-purpose variants so each has one return.
15
+ */
16
+ const FormSection = ({ collapsible = false, defaultOpen = true, hasError = false, ...rest }) => collapsible && rest.title ? (jsx(CollapsibleFormSection, { title: rest.title, action: rest.action, gap: rest.gap, defaultOpen: defaultOpen, hasError: hasError, children: rest.children })) : (jsx(FlatFormSection, { ...rest }));
17
+
18
+ export { FormSection };
19
+ //# sourceMappingURL=FormSection.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSection.mjs","sources":["../../../../src/components/Form/FormSection/FormSection.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;;;AAIA;;;;;;;;;AASG;AACI,MAAM,WAAW,GAAG,CAAC,EAC1B,WAAW,GAAG,KAAK,EACnB,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,GAAG,IAAI,EACU,KACjB,WAAW,IAAI,IAAI,CAAC,KAAK,IACvBA,GAAA,CAAC,sBAAsB,IACrB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAAA,QAAA,EAEjB,IAAI,CAAC,QAAQ,GACS,KAEzBA,GAAA,CAAC,eAAe,OAAK,IAAI,EAAA,CAAI;;;;"}
@@ -0,0 +1,34 @@
1
+ import { ReactNode } from 'react';
2
+ import { BoxProps } from '@chakra-ui/react';
3
+ export interface FormSectionProps extends Omit<BoxProps, 'title'> {
4
+ /** Section heading. */
5
+ title?: string;
6
+ /**
7
+ * Inline element rendered immediately after the heading (e.g. an
8
+ * `InfoSprinkle`). Flat variant only — the collapsible variant owns its own
9
+ * header. Distinct from `action`, which sits at the far right.
10
+ */
11
+ titleAdornment?: ReactNode;
12
+ /** Secondary description under the heading. */
13
+ description?: ReactNode;
14
+ /** Right-aligned header slot (e.g. an add button or info-sprinkle trigger). */
15
+ action?: ReactNode;
16
+ /** Draw a top divider to separate this section from the previous one. */
17
+ divider?: boolean;
18
+ /**
19
+ * Render as a collapsible accordion (delegates to logician `CollapsibleSection`).
20
+ * Requires `title`.
21
+ */
22
+ collapsible?: boolean;
23
+ /** Initial expanded state when `collapsible`. Defaults to open. */
24
+ defaultOpen?: boolean;
25
+ /**
26
+ * Flag a section that contains errors. When `collapsible` and collapsed, the
27
+ * chevron is replaced by a danger glyph so hidden errors aren't missed.
28
+ */
29
+ hasError?: boolean;
30
+ /** Vertical gap between child fields. Defaults to the standard field rhythm. */
31
+ gap?: BoxProps['gap'];
32
+ children: ReactNode;
33
+ }
34
+ //# sourceMappingURL=FormSection.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSection.types.d.ts","sourceRoot":"","sources":["../../../../src/components/Form/FormSection/FormSection.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC/D,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,+CAA+C;IAC/C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mEAAmE;IACnE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gFAAgF;IAChF,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;CACrB"}
@@ -0,0 +1,3 @@
1
+ export { FormSection } from './FormSection';
2
+ export type { FormSectionProps } from './FormSection.types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Form/FormSection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { FormSectionHeaderProps } from './FormSectionHeader.types';
2
+ /**
3
+ * The standardized section (fieldset) header — the section-level counterpart to
4
+ * {@link FieldLabel}. A heading, an optional inline adornment, a description,
5
+ * and a right-aligned action, laid out with one consistent rhythm (`H5` over a
6
+ * muted `Subtext`). Shared by `FormSection` and the studio `GroupHeader` so
7
+ * every titled field group reads the same everywhere.
8
+ *
9
+ * The description sits inside the left column so a tall `action` centers against
10
+ * the whole heading+description block, matching the prior studio `GroupHeader`.
11
+ */
12
+ export declare const FormSectionHeader: ({ title, titleAdornment, description, action, mb, ...flexProps }: FormSectionHeaderProps) => import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=FormSectionHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSectionHeader.d.ts","sourceRoot":"","sources":["../../../../src/components/Form/FormSectionHeader/FormSectionHeader.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAAI,kEAO/B,sBAAsB,4CAwBxB,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var react = require('@chakra-ui/react');
6
+ require('../../Typography/H1.js');
7
+ require('../../Typography/H2.js');
8
+ require('../../Typography/H3.js');
9
+ require('../../Typography/H4.js');
10
+ var H5 = require('../../Typography/H5.js');
11
+ require('../../Typography/Link.js');
12
+ require('../../Typography/Overline.js');
13
+ var Subtext = require('../../Typography/Subtext.js');
14
+ require('../../Typography/Subtitle.js');
15
+ require('../../Typography/Text.js');
16
+
17
+ /**
18
+ * The standardized section (fieldset) header — the section-level counterpart to
19
+ * {@link FieldLabel}. A heading, an optional inline adornment, a description,
20
+ * and a right-aligned action, laid out with one consistent rhythm (`H5` over a
21
+ * muted `Subtext`). Shared by `FormSection` and the studio `GroupHeader` so
22
+ * every titled field group reads the same everywhere.
23
+ *
24
+ * The description sits inside the left column so a tall `action` centers against
25
+ * the whole heading+description block, matching the prior studio `GroupHeader`.
26
+ */
27
+ const FormSectionHeader = ({ title, titleAdornment, description, action, mb = 3, ...flexProps }) => (jsxRuntime.jsxs(react.Flex, { align: "center", justify: "space-between", gap: 2, mb: mb, w: "100%", ...flexProps, children: [jsxRuntime.jsxs(react.Box, { children: [(title || titleAdornment) && (jsxRuntime.jsxs(react.Flex, { align: "center", gap: 1, mb: description ? 1 : 0, children: [title && jsxRuntime.jsx(H5.H5, { children: title }), titleAdornment] })), description && (jsxRuntime.jsx(Subtext.Subtext, { color: "fg.muted", fontWeight: "normal", children: description }))] }), action] }));
28
+
29
+ exports.FormSectionHeader = FormSectionHeader;
30
+ //# sourceMappingURL=FormSectionHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSectionHeader.js","sources":["../../../../src/components/Form/FormSectionHeader/FormSectionHeader.tsx"],"sourcesContent":[null],"names":["_jsxs","Flex","Box","_jsx","H5","Subtext"],"mappings":";;;;;;;;;;;;;;;;AAMA;;;;;;;;;AASG;AACI,MAAM,iBAAiB,GAAG,CAAC,EAChC,KAAK,EACL,cAAc,EACd,WAAW,EACX,MAAM,EACN,EAAE,GAAG,CAAC,EACN,GAAG,SAAS,EACW,MACvBA,eAAA,CAACC,UAAI,EAAA,EACH,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,eAAe,EACvB,GAAG,EAAE,CAAC,EACN,EAAE,EAAE,EAAE,EACN,CAAC,EAAC,MAAM,EAAA,GACJ,SAAS,EAAA,QAAA,EAAA,CAEbD,eAAA,CAACE,SAAG,EAAA,EAAA,QAAA,EAAA,CACD,CAAC,KAAK,IAAI,cAAc,MACvBF,eAAA,CAACC,UAAI,EAAA,EAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,GAAG,CAAC,EAAA,QAAA,EAAA,CACjD,KAAK,IAAIE,cAAA,CAACC,KAAE,EAAA,EAAA,QAAA,EAAE,KAAK,EAAA,CAAM,EACzB,cAAc,CAAA,EAAA,CACV,CACR,EACA,WAAW,KACVD,cAAA,CAACE,eAAO,EAAA,EAAC,KAAK,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAA,QAAA,EAC1C,WAAW,EAAA,CACJ,CACX,CAAA,EAAA,CACG,EACL,MAAM,CAAA,EAAA,CACF;;;;"}
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { Flex, Box } from '@chakra-ui/react';
4
+ import '../../Typography/H1.mjs';
5
+ import '../../Typography/H2.mjs';
6
+ import '../../Typography/H3.mjs';
7
+ import '../../Typography/H4.mjs';
8
+ import { H5 } from '../../Typography/H5.mjs';
9
+ import '../../Typography/Link.mjs';
10
+ import '../../Typography/Overline.mjs';
11
+ import { Subtext } from '../../Typography/Subtext.mjs';
12
+ import '../../Typography/Subtitle.mjs';
13
+ import '../../Typography/Text.mjs';
14
+
15
+ /**
16
+ * The standardized section (fieldset) header — the section-level counterpart to
17
+ * {@link FieldLabel}. A heading, an optional inline adornment, a description,
18
+ * and a right-aligned action, laid out with one consistent rhythm (`H5` over a
19
+ * muted `Subtext`). Shared by `FormSection` and the studio `GroupHeader` so
20
+ * every titled field group reads the same everywhere.
21
+ *
22
+ * The description sits inside the left column so a tall `action` centers against
23
+ * the whole heading+description block, matching the prior studio `GroupHeader`.
24
+ */
25
+ const FormSectionHeader = ({ title, titleAdornment, description, action, mb = 3, ...flexProps }) => (jsxs(Flex, { align: "center", justify: "space-between", gap: 2, mb: mb, w: "100%", ...flexProps, children: [jsxs(Box, { children: [(title || titleAdornment) && (jsxs(Flex, { align: "center", gap: 1, mb: description ? 1 : 0, children: [title && jsx(H5, { children: title }), titleAdornment] })), description && (jsx(Subtext, { color: "fg.muted", fontWeight: "normal", children: description }))] }), action] }));
26
+
27
+ export { FormSectionHeader };
28
+ //# sourceMappingURL=FormSectionHeader.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSectionHeader.mjs","sources":["../../../../src/components/Form/FormSectionHeader/FormSectionHeader.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;AAMA;;;;;;;;;AASG;AACI,MAAM,iBAAiB,GAAG,CAAC,EAChC,KAAK,EACL,cAAc,EACd,WAAW,EACX,MAAM,EACN,EAAE,GAAG,CAAC,EACN,GAAG,SAAS,EACW,MACvBA,IAAA,CAAC,IAAI,EAAA,EACH,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,eAAe,EACvB,GAAG,EAAE,CAAC,EACN,EAAE,EAAE,EAAE,EACN,CAAC,EAAC,MAAM,EAAA,GACJ,SAAS,EAAA,QAAA,EAAA,CAEbA,IAAA,CAAC,GAAG,EAAA,EAAA,QAAA,EAAA,CACD,CAAC,KAAK,IAAI,cAAc,MACvBA,IAAA,CAAC,IAAI,EAAA,EAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,GAAG,CAAC,EAAA,QAAA,EAAA,CACjD,KAAK,IAAIC,GAAA,CAAC,EAAE,EAAA,EAAA,QAAA,EAAE,KAAK,EAAA,CAAM,EACzB,cAAc,CAAA,EAAA,CACV,CACR,EACA,WAAW,KACVA,GAAA,CAAC,OAAO,EAAA,EAAC,KAAK,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAA,QAAA,EAC1C,WAAW,EAAA,CACJ,CACX,CAAA,EAAA,CACG,EACL,MAAM,CAAA,EAAA,CACF;;;;"}
@@ -0,0 +1,17 @@
1
+ import { ReactNode } from 'react';
2
+ import { FlexProps } from '@chakra-ui/react';
3
+ export interface FormSectionHeaderProps extends Omit<FlexProps, 'title'> {
4
+ /** Section heading — the fieldset-level label. */
5
+ title?: ReactNode;
6
+ /**
7
+ * Inline element rendered immediately after the title text (e.g. an
8
+ * `InfoSprinkle`). Distinct from `action`, which sits at the far right of
9
+ * the row.
10
+ */
11
+ titleAdornment?: ReactNode;
12
+ /** Secondary description under the title. */
13
+ description?: ReactNode;
14
+ /** Right-aligned slot on the title row (e.g. an add button). */
15
+ action?: ReactNode;
16
+ }
17
+ //# sourceMappingURL=FormSectionHeader.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSectionHeader.types.d.ts","sourceRoot":"","sources":["../../../../src/components/Form/FormSectionHeader/FormSectionHeader.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IACtE,kDAAkD;IAClD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;IACH,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gEAAgE;IAChE,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB"}
@@ -0,0 +1,3 @@
1
+ export { FormSectionHeader } from './FormSectionHeader';
2
+ export type { FormSectionHeaderProps } from './FormSectionHeader.types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Form/FormSectionHeader/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,18 @@
1
+ export type { FieldErrorProps } from './FieldError';
2
+ export { FieldError } from './FieldError';
3
+ export type { FieldHelpProps } from './FieldHelp';
4
+ export { FieldHelp } from './FieldHelp';
5
+ export type { FieldLabelProps } from './FieldLabel';
6
+ export { FieldLabel } from './FieldLabel';
7
+ export type { FieldRowProps } from './FieldRow';
8
+ export { FieldRow } from './FieldRow';
9
+ export type { FormFooterProps } from './FormFooter';
10
+ export { FormFooter } from './FormFooter';
11
+ export type { FormModalFooterProps } from './FormModalFooter';
12
+ export { FormModalFooter } from './FormModalFooter';
13
+ export { FormScrollArea } from './FormScrollArea';
14
+ export type { FormSectionProps } from './FormSection';
15
+ export { FormSection } from './FormSection';
16
+ export type { FormSectionHeaderProps } from './FormSectionHeader';
17
+ export { FormSectionHeader } from './FormSectionHeader';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Form/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -19,6 +19,7 @@ export * from './components/ExpandableText';
19
19
  export * from './components/FileInput';
20
20
  export * from './components/FileItem';
21
21
  export * from './components/FileList';
22
+ export * from './components/Form';
22
23
  export * from './components/FormControl';
23
24
  export * from './components/FormLabel';
24
25
  export type { IconProps } from './components/Icon/_utils/createIcon';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAG5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAGvC,YAAY,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,cAAc,yBAAyB,CAAC;AAGxC,YAAY,EACV,WAAW,EACX,SAAS,IAAI,eAAe,GAC7B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAG3E,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EACL,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,IAAI,GACL,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EACL,MAAM,EACN,KAAK,kBAAkB,EACvB,cAAc,GACf,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAG5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAGvC,YAAY,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,cAAc,yBAAyB,CAAC;AAGxC,YAAY,EACV,WAAW,EACX,SAAS,IAAI,eAAe,GAC7B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAG3E,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EACL,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,IAAI,GACL,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EACL,MAAM,EACN,KAAK,kBAAkB,EACvB,cAAc,GACf,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -38,6 +38,15 @@ var ExpandableText = require('./components/ExpandableText/ExpandableText.js');
38
38
  var FileInput = require('./components/FileInput/FileInput.js');
39
39
  var FileItem = require('./components/FileItem/FileItem.js');
40
40
  var FileList = require('./components/FileList/FileList.js');
41
+ var FieldError = require('./components/Form/FieldError/FieldError.js');
42
+ var FieldHelp = require('./components/Form/FieldHelp/FieldHelp.js');
43
+ var FieldLabel = require('./components/Form/FieldLabel/FieldLabel.js');
44
+ var FieldRow = require('./components/Form/FieldRow/FieldRow.js');
45
+ var FormFooter = require('./components/Form/FormFooter/FormFooter.js');
46
+ var FormModalFooter = require('./components/Form/FormModalFooter/FormModalFooter.js');
47
+ var FormScrollArea = require('./components/Form/FormScrollArea/FormScrollArea.js');
48
+ var FormSection = require('./components/Form/FormSection/FormSection.js');
49
+ var FormSectionHeader = require('./components/Form/FormSectionHeader/FormSectionHeader.js');
41
50
  var FormControl = require('./components/FormControl/FormControl.js');
42
51
  var FormLabel = require('./components/FormLabel/FormLabel.js');
43
52
  var IconButton = require('./components/IconButton/IconButton.js');
@@ -213,6 +222,15 @@ exports.ExpandableText = ExpandableText.ExpandableText;
213
222
  exports.FileInput = FileInput.FileInput;
214
223
  exports.FileItem = FileItem.FileItem;
215
224
  exports.FileList = FileList.FileList;
225
+ exports.FieldError = FieldError.FieldError;
226
+ exports.FieldHelp = FieldHelp.FieldHelp;
227
+ exports.FieldLabel = FieldLabel.FieldLabel;
228
+ exports.FieldRow = FieldRow.FieldRow;
229
+ exports.FormFooter = FormFooter.FormFooter;
230
+ exports.FormModalFooter = FormModalFooter.FormModalFooter;
231
+ exports.FormScrollArea = FormScrollArea.FormScrollArea;
232
+ exports.FormSection = FormSection.FormSection;
233
+ exports.FormSectionHeader = FormSectionHeader.FormSectionHeader;
216
234
  exports.FormControl = FormControl.FormControl;
217
235
  exports.FormLabel = FormLabel.FormLabel;
218
236
  exports.IconButton = IconButton.IconButton;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.mjs CHANGED
@@ -36,6 +36,15 @@ export { ExpandableText } from './components/ExpandableText/ExpandableText.mjs';
36
36
  export { FileInput } from './components/FileInput/FileInput.mjs';
37
37
  export { FileItem } from './components/FileItem/FileItem.mjs';
38
38
  export { FileList } from './components/FileList/FileList.mjs';
39
+ export { FieldError } from './components/Form/FieldError/FieldError.mjs';
40
+ export { FieldHelp } from './components/Form/FieldHelp/FieldHelp.mjs';
41
+ export { FieldLabel } from './components/Form/FieldLabel/FieldLabel.mjs';
42
+ export { FieldRow } from './components/Form/FieldRow/FieldRow.mjs';
43
+ export { FormFooter } from './components/Form/FormFooter/FormFooter.mjs';
44
+ export { FormModalFooter } from './components/Form/FormModalFooter/FormModalFooter.mjs';
45
+ export { FormScrollArea } from './components/Form/FormScrollArea/FormScrollArea.mjs';
46
+ export { FormSection } from './components/Form/FormSection/FormSection.mjs';
47
+ export { FormSectionHeader } from './components/Form/FormSectionHeader/FormSectionHeader.mjs';
39
48
  export { FormControl } from './components/FormControl/FormControl.mjs';
40
49
  export { FormLabel } from './components/FormLabel/FormLabel.mjs';
41
50
  export { IconButton } from './components/IconButton/IconButton.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindlogic-ai/logician-ui",
3
- "version": "4.0.0-alpha.13",
3
+ "version": "4.0.0-alpha.14",
4
4
  "description": "A comprehensive React design system built on Chakra UI",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -46,11 +46,14 @@ export const buttonColorPaletteStyles: Record<
46
46
  },
47
47
  },
48
48
  soft: {
49
- borderColor: 'transparent',
49
+ // Same-hue hairline so soft reads as a defined control on white, not a
50
+ // floating fill. `light` sits well below `outline`'s `.main` border, so
51
+ // soft stays the quieter of the two bordered variants.
52
+ borderColor: 'primary.light',
50
53
  bgColor: 'primary.extralight', // #E8EEFB
51
54
  color: 'primary.dark', // #0D317D
52
55
  _hover: {
53
- borderColor: 'transparent',
56
+ borderColor: 'primary.light',
54
57
  bgColor: 'primary.lighter', // #B9CBF3
55
58
  },
56
59
  _active: {
@@ -102,11 +105,11 @@ export const buttonColorPaletteStyles: Record<
102
105
  },
103
106
  },
104
107
  soft: {
105
- borderColor: 'transparent',
108
+ borderColor: 'secondary.light',
106
109
  bgColor: 'secondary.extralight', // #F4E8FB
107
110
  color: 'secondary.dark', // #570D7D
108
111
  _hover: {
109
- borderColor: 'transparent',
112
+ borderColor: 'secondary.light',
110
113
  bgColor: 'secondary.lighter', // #DEB9F3
111
114
  },
112
115
  _active: {
@@ -158,11 +161,11 @@ export const buttonColorPaletteStyles: Record<
158
161
  },
159
162
  },
160
163
  soft: {
161
- borderColor: 'transparent',
164
+ borderColor: 'danger.light',
162
165
  bgColor: 'danger.extralight', // #FBE8E9
163
166
  color: 'danger.dark', // #7D0D14
164
167
  _hover: {
165
- borderColor: 'transparent',
168
+ borderColor: 'danger.light',
166
169
  bgColor: 'danger.lighter', // #F3B9BD
167
170
  },
168
171
  _active: {
@@ -214,11 +217,11 @@ export const buttonColorPaletteStyles: Record<
214
217
  },
215
218
  },
216
219
  soft: {
217
- borderColor: 'transparent',
220
+ borderColor: 'success.light',
218
221
  bgColor: 'success.extralight', // #E9FBE8
219
222
  color: 'success.dark', // #147D0D
220
223
  _hover: {
221
- borderColor: 'transparent',
224
+ borderColor: 'success.light',
222
225
  bgColor: 'success.lighter', // #BDF3B9
223
226
  },
224
227
  _active: {
@@ -273,11 +276,11 @@ export const buttonColorPaletteStyles: Record<
273
276
  },
274
277
  },
275
278
  soft: {
276
- borderColor: 'transparent',
279
+ borderColor: 'warning.light',
277
280
  bgColor: 'warning.extralight', // #FBF6E8
278
281
  color: 'warning.dark', // #7D610D
279
282
  _hover: {
280
- borderColor: 'transparent',
283
+ borderColor: 'warning.light',
281
284
  bgColor: 'warning.lighter', // #F3E4B9
282
285
  },
283
286
  _active: {
@@ -329,14 +332,16 @@ export const buttonColorPaletteStyles: Record<
329
332
  },
330
333
  },
331
334
  soft: {
332
- borderColor: 'transparent',
335
+ // `border.default` (not a gray tint) so the neutral hairline stays visible
336
+ // in dark mode, where `border.subtle` collapses into the fill.
337
+ borderColor: 'border.default', // gray.300 / gray.1100 (_dark)
333
338
  // Neutral fills flip with the mode (light values preserved: bg.subtle →
334
339
  // gray.50, bg.muted → gray.100). Without this the surface stayed light in
335
340
  // dark mode while the fg.default text flipped to light = invisible.
336
341
  bgColor: 'bg.subtle', // gray.50 / gray.1300 (_dark)
337
342
  color: 'fg.default',
338
343
  _hover: {
339
- borderColor: 'transparent',
344
+ borderColor: 'border.default',
340
345
  bgColor: 'bg.muted', // gray.100 / gray.1200 (_dark)
341
346
  },
342
347
  _active: {
@@ -22,3 +22,10 @@ export const Gradient: Story = {
22
22
  children: 'Gradient Card',
23
23
  },
24
24
  };
25
+
26
+ export const Elevated: Story = {
27
+ args: {
28
+ variant: 'elevated',
29
+ children: 'Elevated Card',
30
+ },
31
+ };
@@ -16,4 +16,12 @@ export const variantStyles = {
16
16
  border: '1px solid',
17
17
  borderColor: 'primary.light',
18
18
  },
19
+ // Soft resting elevation — a gentle shadow does the separating, so the border
20
+ // can soften to `border.subtle` (which alone would be too faint, especially in
21
+ // dark mode). Use for standalone content cards that should read as raised
22
+ // objects rather than flat framed boxes.
23
+ elevated: {
24
+ boxShadow: 'sm',
25
+ borderColor: 'border.subtle',
26
+ },
19
27
  };
@@ -1,6 +1,6 @@
1
1
  import { CardRootProps as ChakraCardRootProps } from '@chakra-ui/react';
2
2
 
3
- export type CardVariant = 'default' | 'gradient';
3
+ export type CardVariant = 'default' | 'gradient' | 'elevated';
4
4
 
5
5
  export type CardProps = ChakraCardRootProps & {
6
6
  clickable?: boolean;
@@ -0,0 +1,33 @@
1
+ import type { ReactNode } from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import { describe, expect, it, vi } from 'vitest';
4
+
5
+ import { FieldError } from './FieldError';
6
+
7
+ // Field.ErrorText needs a Field.Root + invalid context to render; stub it to a
8
+ // passthrough so the test isolates FieldError's own null-when-empty guard.
9
+ vi.mock('@chakra-ui/react', () => ({
10
+ Field: {
11
+ ErrorText: ({ children }: { children?: ReactNode }) => (
12
+ <span data-testid="error-text">{children}</span>
13
+ ),
14
+ },
15
+ }));
16
+
17
+ describe('FieldError', () => {
18
+ it('renders nothing when empty (safe to mount unconditionally)', () => {
19
+ const { rerender } = render(<FieldError />);
20
+ expect(screen.queryByTestId('error-text')).toBeNull();
21
+
22
+ rerender(<FieldError>{''}</FieldError>);
23
+ expect(screen.queryByTestId('error-text')).toBeNull();
24
+
25
+ rerender(<FieldError>{false}</FieldError>);
26
+ expect(screen.queryByTestId('error-text')).toBeNull();
27
+ });
28
+
29
+ it('renders the message when present', () => {
30
+ render(<FieldError>Display name is required.</FieldError>);
31
+ expect(screen.getByText('Display name is required.')).toBeInTheDocument();
32
+ });
33
+ });
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from 'react';
2
+ import { Field } from '@chakra-ui/react';
3
+
4
+ export interface FieldErrorProps {
5
+ /** Error message. Renders nothing when empty, so it is safe to mount always. */
6
+ children?: ReactNode;
7
+ }
8
+
9
+ /**
10
+ * Field-level error message. Renders through Chakra's `Field.ErrorText`, so it
11
+ * shows only when the enclosing `FormControl`/`Field.Root` is `invalid`, and is
12
+ * wired to the control via `aria-describedby` + `aria-invalid` automatically.
13
+ * Use it inside a `FieldRow` (which flips the field to invalid when an `error`
14
+ * is set) — it replaces the hand-rolled `<Subtext color="danger.main">` error
15
+ * rows scattered across the app.
16
+ */
17
+ export const FieldError = ({ children }: FieldErrorProps) => {
18
+ if (children == null || children === false || children === '') return null;
19
+ return <Field.ErrorText color="danger.main">{children}</Field.ErrorText>;
20
+ };
@@ -0,0 +1,2 @@
1
+ export type { FieldErrorProps } from './FieldError';
2
+ export { FieldError } from './FieldError';
@@ -0,0 +1,18 @@
1
+ import { ReactNode } from 'react';
2
+ import { Field } from '@chakra-ui/react';
3
+
4
+ export interface FieldHelpProps {
5
+ /** Helper text rendered under the control. */
6
+ children: ReactNode;
7
+ }
8
+
9
+ /**
10
+ * Inline helper text under a form control. Renders through Chakra's
11
+ * `Field.HelperText`, so it is associated with the control via
12
+ * `aria-describedby` when used inside a `FieldRow`/`FormControl`. For a hover
13
+ * info-popover instead of always-visible text, pass a logician `InfoSprinkle`
14
+ * into the `FieldRow` `endAdornment` slot.
15
+ */
16
+ export const FieldHelp = ({ children }: FieldHelpProps) => {
17
+ return <Field.HelperText>{children}</Field.HelperText>;
18
+ };
@@ -0,0 +1,2 @@
1
+ export type { FieldHelpProps } from './FieldHelp';
2
+ export { FieldHelp } from './FieldHelp';