@furystack/shades-common-components 12.6.0 → 12.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## [12.7.0] - 2026-02-23
4
+
5
+ ### ✨ Features
6
+
7
+ ### MarkdownEditor Form Integration
8
+
9
+ `MarkdownEditor` now accepts form-related props forwarded from `MarkdownInputProps`, enabling direct use inside forms with validation and labeling support.
10
+
11
+ **New props:** `name`, `required`, `labelTitle`, `disabled`, `placeholder`, `rows`, `getValidationResult`, `getHelperText`
12
+
13
+ **Usage:**
14
+
15
+ ```tsx
16
+ <MarkdownEditor
17
+ value={description}
18
+ onValueChange={setDescription}
19
+ labelTitle="Description"
20
+ name="description"
21
+ required
22
+ getValidationResult={({ value }) =>
23
+ value.length < 10 ? { isValid: false, message: 'Must be at least 10 characters' } : { isValid: true }
24
+ }
25
+ />
26
+ ```
27
+
28
+ The editor renders a label above the editing area, displays validation errors and helper text below it, and sets a `data-invalid` attribute on the host element when validation fails — allowing external styling of the invalid state.
29
+
30
+ ### MarkdownInput `hideChrome` Prop
31
+
32
+ - Added `hideChrome` prop to `MarkdownInput` — when `true`, suppresses the label and helper text rendering while preserving form semantics (textarea `name`, `required`, etc.). This is used internally by `MarkdownEditor` to avoid duplicate chrome when it manages its own label and validation display.
33
+
3
34
  ## [12.6.0] - 2026-02-22
4
35
 
5
36
  ### 🗑️ Deprecated
@@ -1,3 +1,4 @@
1
+ import { type MarkdownInputProps } from './markdown-input.js';
1
2
  export type MarkdownEditorLayout = 'side-by-side' | 'tabs' | 'above-below';
2
3
  export type MarkdownEditorProps = {
3
4
  /** The current Markdown string */
@@ -12,12 +13,25 @@ export type MarkdownEditorProps = {
12
13
  readOnly?: boolean;
13
14
  /** Inline styles applied to the host element */
14
15
  style?: Partial<CSSStyleDeclaration>;
15
- };
16
+ } & Pick<MarkdownInputProps, 'name' | 'required' | 'labelTitle' | 'disabled' | 'placeholder' | 'rows' | 'getValidationResult' | 'getHelperText'>;
16
17
  /**
17
18
  * Combined Markdown editor with an input pane and a live preview pane.
18
19
  * Supports three layouts: side-by-side, tabs (Edit/Preview), or above-below.
19
20
  */
20
- export declare const MarkdownEditor: (props: MarkdownEditorProps & Omit<Partial<HTMLElement>, "style"> & {
21
+ export declare const MarkdownEditor: (props: {
22
+ /** The current Markdown string */
23
+ value: string;
24
+ /** Called when the value changes (from either the input or checkbox toggle) */
25
+ onValueChange?: (newValue: string) => void;
26
+ /** Layout mode for the editor. Defaults to 'side-by-side'. */
27
+ layout?: MarkdownEditorLayout;
28
+ /** Maximum image file size in bytes for base64 paste */
29
+ maxImageSizeBytes?: number;
30
+ /** When true, the editor is read-only */
31
+ readOnly?: boolean;
32
+ /** Inline styles applied to the host element */
33
+ style?: Partial<CSSStyleDeclaration>;
34
+ } & Pick<MarkdownInputProps, "name" | "disabled" | "placeholder" | "required" | "rows" | "labelTitle" | "getValidationResult" | "getHelperText"> & Omit<Partial<HTMLElement>, "style"> & {
21
35
  style?: Partial<CSSStyleDeclaration>;
22
36
  } & {
23
37
  ref?: import("@furystack/shades").RefObject<Element>;
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-editor.d.ts","sourceRoot":"","sources":["../../../src/components/markdown/markdown-editor.tsx"],"names":[],"mappings":"AAMA,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,MAAM,GAAG,aAAa,CAAA;AAE1E,MAAM,MAAM,mBAAmB,GAAG;IAChC,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,8DAA8D;IAC9D,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACrC,CAAA;AAID;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;sEAyIzB,CAAA"}
1
+ {"version":3,"file":"markdown-editor.d.ts","sourceRoot":"","sources":["../../../src/components/markdown/markdown-editor.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAG5E,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,MAAM,GAAG,aAAa,CAAA;AAE1E,MAAM,MAAM,mBAAmB,GAAG;IAChC,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,8DAA8D;IAC9D,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACrC,GAAG,IAAI,CACN,kBAAkB,EAClB,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,GAAG,qBAAqB,GAAG,eAAe,CACnH,CAAA;AAID;;;GAGG;AACH,eAAO,MAAM,cAAc;IAvBzB,kCAAkC;WAC3B,MAAM;IACb,+EAA+E;oBAC/D,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI;IAC1C,8DAA8D;aACrD,oBAAoB;IAC7B,wDAAwD;wBACpC,MAAM;IAC1B,yCAAyC;eAC9B,OAAO;IAClB,gDAAgD;YACxC,OAAO,CAAC,mBAAmB,CAAC;;;;;sEAsMpC,CAAA"}
@@ -3,6 +3,7 @@ import { cssVariableTheme } from '../../services/css-variable-theme.js';
3
3
  import { Tabs } from '../tabs.js';
4
4
  import { MarkdownDisplay } from './markdown-display.js';
5
5
  import { MarkdownInput } from './markdown-input.js';
6
+ import { resolveValidationState } from './markdown-validation.js';
6
7
  /**
7
8
  * Combined Markdown editor with an input pane and a live preview pane.
8
9
  * Supports three layouts: side-by-side, tabs (Edit/Preview), or above-below.
@@ -12,10 +13,34 @@ export const MarkdownEditor = Shade({
12
13
  css: {
13
14
  display: 'flex',
14
15
  flexDirection: 'column',
15
- border: `1px solid ${cssVariableTheme.action.subtleBorder}`,
16
- borderRadius: cssVariableTheme.shape.borderRadius.md,
17
- overflow: 'hidden',
18
16
  minHeight: '0',
17
+ '& .md-editor-label': {
18
+ fontSize: cssVariableTheme.typography.fontSize.xs,
19
+ color: cssVariableTheme.text.secondary,
20
+ padding: `0 0 ${cssVariableTheme.spacing.sm} 0`,
21
+ transition: `color ${cssVariableTheme.transitions.duration.slow} ${cssVariableTheme.transitions.easing.default}`,
22
+ },
23
+ '&[data-invalid] .md-editor-label': {
24
+ color: cssVariableTheme.palette.error.main,
25
+ },
26
+ '& .md-editor-frame': {
27
+ display: 'flex',
28
+ flexDirection: 'column',
29
+ border: `1px solid ${cssVariableTheme.action.subtleBorder}`,
30
+ borderRadius: cssVariableTheme.shape.borderRadius.md,
31
+ overflow: 'hidden',
32
+ flex: '1',
33
+ minHeight: '0',
34
+ },
35
+ '&[data-invalid] .md-editor-frame': {
36
+ borderColor: cssVariableTheme.palette.error.main,
37
+ },
38
+ '& .md-editor-helperText': {
39
+ fontSize: cssVariableTheme.typography.fontSize.xs,
40
+ padding: `${cssVariableTheme.spacing.sm} 0 0 0`,
41
+ opacity: '0.85',
42
+ lineHeight: '1.4',
43
+ },
19
44
  '& .md-editor-split': {
20
45
  display: 'flex',
21
46
  flex: '1',
@@ -85,14 +110,17 @@ export const MarkdownEditor = Shade({
85
110
  },
86
111
  render: ({ props, useState, useHostProps }) => {
87
112
  const layout = props.layout ?? 'side-by-side';
113
+ const { isInvalid, helperNode } = resolveValidationState(props);
88
114
  useHostProps({
89
115
  ...(props.style ? { style: props.style } : {}),
116
+ 'data-invalid': isInvalid ? '' : undefined,
90
117
  });
91
118
  const [activeTab, setActiveTab] = useState('activeTab', 'edit');
92
- const inputPane = (createComponent(MarkdownInput, { value: props.value, onValueChange: props.onValueChange, maxImageSizeBytes: props.maxImageSizeBytes, readOnly: props.readOnly }));
119
+ const inputPane = (createComponent(MarkdownInput, { value: props.value, onValueChange: props.onValueChange, maxImageSizeBytes: props.maxImageSizeBytes, readOnly: props.readOnly, name: props.name, required: props.required, disabled: props.disabled, placeholder: props.placeholder, rows: props.rows, getValidationResult: props.getValidationResult, hideChrome: true }));
93
120
  const previewPane = createComponent(MarkdownDisplay, { content: props.value, readOnly: false, onChange: props.onValueChange });
121
+ let content;
94
122
  if (layout === 'tabs') {
95
- return (createComponent(Tabs, { activeKey: activeTab, onTabChange: (key) => setActiveTab(key), tabs: [
123
+ content = (createComponent(Tabs, { activeKey: activeTab, onTabChange: (key) => setActiveTab(key), tabs: [
96
124
  {
97
125
  header: createComponent(createComponent, null, "Edit"),
98
126
  hash: 'edit',
@@ -105,9 +133,15 @@ export const MarkdownEditor = Shade({
105
133
  },
106
134
  ] }));
107
135
  }
108
- return (createComponent("div", { className: "md-editor-split", "data-layout": layout },
109
- createComponent("div", { className: "md-editor-pane md-editor-pane-input" }, inputPane),
110
- createComponent("div", { className: "md-editor-pane md-editor-pane-preview" }, previewPane)));
136
+ else {
137
+ content = (createComponent("div", { className: "md-editor-split", "data-layout": layout },
138
+ createComponent("div", { className: "md-editor-pane md-editor-pane-input" }, inputPane),
139
+ createComponent("div", { className: "md-editor-pane md-editor-pane-preview" }, previewPane)));
140
+ }
141
+ return (createComponent(createComponent, null,
142
+ props.labelTitle ? createComponent("span", { className: "md-editor-label" }, props.labelTitle) : null,
143
+ createComponent("div", { className: "md-editor-frame" }, content),
144
+ helperNode ? createComponent("span", { className: "md-editor-helperText" }, helperNode) : null));
111
145
  },
112
146
  });
113
147
  //# sourceMappingURL=markdown-editor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-editor.js","sourceRoot":"","sources":["../../../src/components/markdown/markdown-editor.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown-editor.js","sourceRoot":"","sources":["../../../src/components/markdown/markdown-editor.tsx"],"names":[],"mappings":"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"}
@@ -107,5 +107,195 @@ describe('MarkdownEditor', () => {
107
107
  expect(heading?.textContent).toContain('Test Content');
108
108
  });
109
109
  });
110
+ describe('form integration', () => {
111
+ it('should render a label when labelTitle is provided', async () => {
112
+ await usingAsync(new Injector(), async (injector) => {
113
+ const rootElement = document.getElementById('root');
114
+ initializeShadeRoot({
115
+ injector,
116
+ rootElement,
117
+ jsxElement: createComponent(MarkdownEditor, { value: "", labelTitle: "Description" }),
118
+ });
119
+ await flushUpdates();
120
+ const label = document.querySelector('shade-markdown-editor .md-editor-label');
121
+ expect(label).not.toBeNull();
122
+ expect(label?.textContent).toBe('Description');
123
+ });
124
+ });
125
+ it('should not render a label when labelTitle is not provided', async () => {
126
+ await usingAsync(new Injector(), async (injector) => {
127
+ const rootElement = document.getElementById('root');
128
+ initializeShadeRoot({
129
+ injector,
130
+ rootElement,
131
+ jsxElement: createComponent(MarkdownEditor, { value: "" }),
132
+ });
133
+ await flushUpdates();
134
+ const label = document.querySelector('shade-markdown-editor .md-editor-label');
135
+ expect(label).toBeNull();
136
+ });
137
+ });
138
+ it('should set data-invalid when required and value is empty', async () => {
139
+ await usingAsync(new Injector(), async (injector) => {
140
+ const rootElement = document.getElementById('root');
141
+ initializeShadeRoot({
142
+ injector,
143
+ rootElement,
144
+ jsxElement: createComponent(MarkdownEditor, { value: "", required: true }),
145
+ });
146
+ await flushUpdates();
147
+ const editor = document.querySelector('shade-markdown-editor');
148
+ expect(editor.hasAttribute('data-invalid')).toBe(true);
149
+ });
150
+ });
151
+ it('should not set data-invalid when required and value is provided', async () => {
152
+ await usingAsync(new Injector(), async (injector) => {
153
+ const rootElement = document.getElementById('root');
154
+ initializeShadeRoot({
155
+ injector,
156
+ rootElement,
157
+ jsxElement: createComponent(MarkdownEditor, { value: "some content", required: true }),
158
+ });
159
+ await flushUpdates();
160
+ const editor = document.querySelector('shade-markdown-editor');
161
+ expect(editor.hasAttribute('data-invalid')).toBe(false);
162
+ });
163
+ });
164
+ it('should show "Value is required" helper text when required and empty', async () => {
165
+ await usingAsync(new Injector(), async (injector) => {
166
+ const rootElement = document.getElementById('root');
167
+ initializeShadeRoot({
168
+ injector,
169
+ rootElement,
170
+ jsxElement: createComponent(MarkdownEditor, { value: "", required: true }),
171
+ });
172
+ await flushUpdates();
173
+ const helperText = document.querySelector('shade-markdown-editor .md-editor-helperText');
174
+ expect(helperText).not.toBeNull();
175
+ expect(helperText?.textContent).toBe('Value is required');
176
+ });
177
+ });
178
+ it('should set data-invalid when getValidationResult returns invalid', async () => {
179
+ await usingAsync(new Injector(), async (injector) => {
180
+ const rootElement = document.getElementById('root');
181
+ initializeShadeRoot({
182
+ injector,
183
+ rootElement,
184
+ jsxElement: (createComponent(MarkdownEditor, { value: "short", getValidationResult: ({ value }) => value.length < 10 ? { isValid: false, message: 'Too short' } : { isValid: true } })),
185
+ });
186
+ await flushUpdates();
187
+ const editor = document.querySelector('shade-markdown-editor');
188
+ expect(editor.hasAttribute('data-invalid')).toBe(true);
189
+ expect(editor.textContent).toContain('Too short');
190
+ });
191
+ });
192
+ it('should not set data-invalid when getValidationResult returns valid', async () => {
193
+ await usingAsync(new Injector(), async (injector) => {
194
+ const rootElement = document.getElementById('root');
195
+ initializeShadeRoot({
196
+ injector,
197
+ rootElement,
198
+ jsxElement: (createComponent(MarkdownEditor, { value: "long enough content", getValidationResult: ({ value }) => value.length < 10 ? { isValid: false, message: 'Too short' } : { isValid: true } })),
199
+ });
200
+ await flushUpdates();
201
+ const editor = document.querySelector('shade-markdown-editor');
202
+ expect(editor.hasAttribute('data-invalid')).toBe(false);
203
+ });
204
+ });
205
+ it('should display helper text from getHelperText', async () => {
206
+ await usingAsync(new Injector(), async (injector) => {
207
+ const rootElement = document.getElementById('root');
208
+ initializeShadeRoot({
209
+ injector,
210
+ rootElement,
211
+ jsxElement: createComponent(MarkdownEditor, { value: "", getHelperText: () => 'Enter your description' }),
212
+ });
213
+ await flushUpdates();
214
+ const helperText = document.querySelector('shade-markdown-editor .md-editor-helperText');
215
+ expect(helperText).not.toBeNull();
216
+ expect(helperText?.textContent).toBe('Enter your description');
217
+ });
218
+ });
219
+ it('should forward name prop to the inner textarea', async () => {
220
+ await usingAsync(new Injector(), async (injector) => {
221
+ const rootElement = document.getElementById('root');
222
+ initializeShadeRoot({
223
+ injector,
224
+ rootElement,
225
+ jsxElement: createComponent(MarkdownEditor, { value: "", name: "description" }),
226
+ });
227
+ await flushUpdates();
228
+ const textarea = document.querySelector('shade-markdown-editor textarea');
229
+ expect(textarea.name).toBe('description');
230
+ });
231
+ });
232
+ it('should forward required prop to the inner textarea', async () => {
233
+ await usingAsync(new Injector(), async (injector) => {
234
+ const rootElement = document.getElementById('root');
235
+ initializeShadeRoot({
236
+ injector,
237
+ rootElement,
238
+ jsxElement: createComponent(MarkdownEditor, { value: "content", required: true }),
239
+ });
240
+ await flushUpdates();
241
+ const textarea = document.querySelector('shade-markdown-editor textarea');
242
+ expect(textarea.required).toBe(true);
243
+ });
244
+ });
245
+ it('should forward disabled prop to the inner textarea', async () => {
246
+ await usingAsync(new Injector(), async (injector) => {
247
+ const rootElement = document.getElementById('root');
248
+ initializeShadeRoot({
249
+ injector,
250
+ rootElement,
251
+ jsxElement: createComponent(MarkdownEditor, { value: "", disabled: true }),
252
+ });
253
+ await flushUpdates();
254
+ const textarea = document.querySelector('shade-markdown-editor textarea');
255
+ expect(textarea.disabled).toBe(true);
256
+ });
257
+ });
258
+ it('should forward placeholder prop to the inner textarea', async () => {
259
+ await usingAsync(new Injector(), async (injector) => {
260
+ const rootElement = document.getElementById('root');
261
+ initializeShadeRoot({
262
+ injector,
263
+ rootElement,
264
+ jsxElement: createComponent(MarkdownEditor, { value: "", placeholder: "Type here..." }),
265
+ });
266
+ await flushUpdates();
267
+ const textarea = document.querySelector('shade-markdown-editor textarea');
268
+ expect(textarea.placeholder).toBe('Type here...');
269
+ });
270
+ });
271
+ it('should forward rows prop to the inner textarea', async () => {
272
+ await usingAsync(new Injector(), async (injector) => {
273
+ const rootElement = document.getElementById('root');
274
+ initializeShadeRoot({
275
+ injector,
276
+ rootElement,
277
+ jsxElement: createComponent(MarkdownEditor, { value: "", rows: 5 }),
278
+ });
279
+ await flushUpdates();
280
+ const textarea = document.querySelector('shade-markdown-editor textarea');
281
+ expect(textarea.rows).toBe(5);
282
+ });
283
+ });
284
+ it('should set hideChrome on the inner MarkdownInput', async () => {
285
+ await usingAsync(new Injector(), async (injector) => {
286
+ const rootElement = document.getElementById('root');
287
+ initializeShadeRoot({
288
+ injector,
289
+ rootElement,
290
+ jsxElement: createComponent(MarkdownEditor, { value: "", labelTitle: "My Label" }),
291
+ });
292
+ await flushUpdates();
293
+ const editorLabel = document.querySelector('shade-markdown-editor .md-editor-label');
294
+ expect(editorLabel?.textContent).toBe('My Label');
295
+ const inputLabel = document.querySelector('shade-markdown-editor shade-markdown-input label > span');
296
+ expect(inputLabel).toBeNull();
297
+ });
298
+ });
299
+ });
110
300
  });
111
301
  //# sourceMappingURL=markdown-editor.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-editor.spec.js","sourceRoot":"","sources":["../../../src/components/markdown/markdown-editor.spec.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown-editor.spec.js","sourceRoot":"","sources":["../../../src/components/markdown/markdown-editor.spec.tsx"],"names":[],"mappings":"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"}
@@ -29,6 +29,8 @@ export type MarkdownInputProps = {
29
29
  value: string;
30
30
  validationResult?: InputValidationResult;
31
31
  }) => JSX.Element | string;
32
+ /** When true, suppresses visual label and helper text rendering while keeping form mechanics */
33
+ hideChrome?: boolean;
32
34
  };
33
35
  /**
34
36
  * Markdown text input with base64 image paste support.
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-input.d.ts","sourceRoot":"","sources":["../../../src/components/markdown/markdown-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAK/D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iCAAiC;IACjC,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,qBAAqB,CAAA;IAC3E,oCAAoC;IACpC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,qBAAqB,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,GAAG,MAAM,CAAA;CAC/G,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;sEAuKxB,CAAA"}
1
+ {"version":3,"file":"markdown-input.d.ts","sourceRoot":"","sources":["../../../src/components/markdown/markdown-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAM/D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iCAAiC;IACjC,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,qBAAqB,CAAA;IAC3E,oCAAoC;IACpC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,qBAAqB,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,GAAG,MAAM,CAAA;IAC9G,gGAAgG;IAChG,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;sEA+JxB,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { Shade, createComponent } from '@furystack/shades';
2
2
  import { cssVariableTheme } from '../../services/css-variable-theme.js';
3
3
  import { FormService } from '../form.js';
4
+ import { resolveValidationState } from './markdown-validation.js';
4
5
  const DEFAULT_MAX_IMAGE_SIZE = 256 * 1024;
5
6
  /**
6
7
  * Markdown text input with base64 image paste support.
@@ -78,9 +79,7 @@ export const MarkdownInput = Shade({
78
79
  },
79
80
  };
80
81
  });
81
- const validationResult = props.getValidationResult?.({ value: props.value });
82
- const isRequired = props.required && !props.value;
83
- const isInvalid = validationResult?.isValid === false || isRequired;
82
+ const { validationResult, isRequired, isInvalid, helperNode } = resolveValidationState(props);
84
83
  if (injector.cachedSingletons.has(FormService) && props.name) {
85
84
  const formService = injector.getInstance(FormService);
86
85
  const fieldResult = isRequired
@@ -93,10 +92,6 @@ export const MarkdownInput = Shade({
93
92
  'data-disabled': props.disabled ? '' : undefined,
94
93
  'data-invalid': isInvalid ? '' : undefined,
95
94
  });
96
- const helperNode = (validationResult?.isValid === false && validationResult?.message) ||
97
- (isRequired && 'Value is required') ||
98
- props.getHelperText?.({ value: props.value, validationResult }) ||
99
- '';
100
95
  const handleInput = (ev) => {
101
96
  const target = ev.target;
102
97
  props.onValueChange?.(target.value);
@@ -138,9 +133,9 @@ export const MarkdownInput = Shade({
138
133
  }
139
134
  };
140
135
  return (createComponent("label", null,
141
- props.labelTitle ? createComponent("span", null, props.labelTitle) : null,
136
+ !props.hideChrome && props.labelTitle ? createComponent("span", null, props.labelTitle) : null,
142
137
  createComponent("textarea", { ref: textareaRef, name: props.name, required: props.required, value: props.value, oninput: handleInput, onpaste: handlePaste, readOnly: props.readOnly, disabled: props.disabled, placeholder: props.placeholder, rows: props.rows ?? 10 }),
143
- helperNode ? createComponent("span", { className: "helperText" }, helperNode) : null));
138
+ !props.hideChrome && helperNode ? createComponent("span", { className: "helperText" }, helperNode) : null));
144
139
  },
145
140
  });
146
141
  //# sourceMappingURL=markdown-input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-input.js","sourceRoot":"","sources":["../../../src/components/markdown/markdown-input.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,sBAAsB,GAAG,GAAG,GAAG,IAAI,CAAA;AA6BzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAqB;IACrD,aAAa,EAAE,sBAAsB;IACrC,GAAG,EAAE;QACH,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,KAAK;QAEnB,SAAS,EAAE;YACT,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,YAAY;YACxB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YACjD,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS;YACtC,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;YACpD,MAAM,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE;YAC3D,UAAU,EAAE,SAAS,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,IAAI,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE;SACjH;QAED,wBAAwB,EAAE;YACxB,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ;SACtC;QAED,sBAAsB,EAAE;YACtB,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI;SAC7C;QAED,uBAAuB,EAAE;YACvB,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI;YAChD,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI;SAC3C;QAED,YAAY,EAAE;YACZ,MAAM,EAAE,MAAM;YACd,eAAe,EAAE,aAAa;YAC9B,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YACjD,UAAU,EAAE,WAAW;YACvB,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,OAAO;YACpC,SAAS,EAAE,mCAAmC;YAC9C,UAAU,EAAE,cAAc,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,OAAO;YAC7E,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO;YAC1D,OAAO,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,EAAE,IAAI;SAC5C;QAED,yBAAyB,EAAE;YACzB,SAAS,EAAE,eAAe,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;SAClE;QAED,uCAAuC,EAAE;YACvC,SAAS,EAAE,eAAe,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;SAChE;QAED,eAAe,EAAE;YACf,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YACjD,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,KAAK;SAClB;KACF;IACD,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE;QACnE,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,IAAI,sBAAsB,CAAA;QACjE,MAAM,WAAW,GAAG,MAAM,CAAsB,UAAU,CAAC,CAAA;QAE3D,aAAa,CAAC,mBAAmB,EAAE,GAAG,EAAE;YACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACzG,IAAI,WAAW,EAAE,CAAC;gBAChB,cAAc,CAAC,GAAG,EAAE;oBAClB,IAAI,WAAW,CAAC,OAAO;wBAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,OAAsC,CAAC,CAAA;gBACrG,CAAC,CAAC,CAAA;YACJ,CAAC;YACD,OAAO;gBACL,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE;oBACrB,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW;wBACpC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAsC,CAAC,CAAA;gBACjF,CAAC;aACF,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,gBAAgB,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;QAC5E,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA;QACjD,MAAM,SAAS,GAAG,gBAAgB,EAAE,OAAO,KAAK,KAAK,IAAI,UAAU,CAAA;QAEnE,IAAI,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7D,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;YACrD,MAAM,WAAW,GAA0B,UAAU;gBACnD,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE;gBAClD,CAAC,CAAC,gBAAgB,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,IAAK,EAAoB,CAAA;YACvE,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,IAAqB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;QAC/E,CAAC;QAED,YAAY,CAAC;YACX,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;YAChD,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;SAC3C,CAAC,CAAA;QAEF,MAAM,UAAU,GACd,CAAC,gBAAgB,EAAE,OAAO,KAAK,KAAK,IAAI,gBAAgB,EAAE,OAAO,CAAC;YAClE,CAAC,UAAU,IAAI,mBAAmB,CAAC;YACnC,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC;YAC/D,EAAE,CAAA;QAEJ,MAAM,WAAW,GAAG,CAAC,EAAS,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,EAAE,CAAC,MAA6B,CAAA;YAC/C,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACrC,CAAC,CAAA;QAED,MAAM,WAAW,GAAG,CAAC,EAAkB,EAAE,EAAE;YACzC,MAAM,KAAK,GAAG,EAAE,CAAC,aAAa,EAAE,KAAK,CAAA;YACrC,IAAI,CAAC,KAAK;gBAAE,OAAM;YAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBACrB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;oBAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO;wBAAE,SAAQ;oBAE1C,EAAE,CAAC,cAAc,EAAE,CAAA;oBAEnB,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAA;oBAC/B,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;wBACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAA;wBACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAA;wBACpC,IAAI,CAAC,QAAQ;4BAAE,OAAM;wBAErB,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAA;wBACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAA;wBACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;wBAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;wBACvC,MAAM,aAAa,GAAG,mBAAmB,MAAM,GAAG,CAAA;wBAClD,MAAM,QAAQ,GAAG,MAAM,GAAG,aAAa,GAAG,KAAK,CAAA;wBAE/C,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAA;wBACzB,MAAM,SAAS,GAAG,KAAK,GAAG,aAAa,CAAC,MAAM,CAAA;wBAC9C,QAAQ,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;wBAChD,KAAK,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAA;oBACjC,CAAC,CAAA;oBACD,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;wBACpB,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;oBAClD,CAAC,CAAA;oBACD,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;oBAC1B,OAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QAED,OAAO,CACL;YACG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,8BAAO,KAAK,CAAC,UAAU,CAAQ,CAAC,CAAC,CAAC,IAAI;YAC1D,8BACE,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,GACtB;YACD,UAAU,CAAC,CAAC,CAAC,0BAAM,SAAS,EAAC,YAAY,IAAE,UAAU,CAAQ,CAAC,CAAC,CAAC,IAAI,CAC/D,CACT,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"markdown-input.js","sourceRoot":"","sources":["../../../src/components/markdown/markdown-input.tsx"],"names":[],"mappings":"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"}
@@ -202,6 +202,49 @@ describe('MarkdownInput', () => {
202
202
  expect(wrapper.textContent).toContain('Write some markdown here');
203
203
  });
204
204
  });
205
+ describe('hideChrome', () => {
206
+ it('should suppress the label when hideChrome is true', async () => {
207
+ await usingAsync(new Injector(), async (injector) => {
208
+ const rootElement = document.getElementById('root');
209
+ initializeShadeRoot({
210
+ injector,
211
+ rootElement,
212
+ jsxElement: createComponent(MarkdownInput, { value: "", labelTitle: "My Label", hideChrome: true }),
213
+ });
214
+ await flushUpdates();
215
+ const wrapper = document.querySelector('shade-markdown-input');
216
+ const spans = wrapper.querySelectorAll('label > span');
217
+ const labelSpan = Array.from(spans).find((s) => s.textContent === 'My Label');
218
+ expect(labelSpan).toBeUndefined();
219
+ });
220
+ });
221
+ it('should suppress the helper text when hideChrome is true', async () => {
222
+ await usingAsync(new Injector(), async (injector) => {
223
+ const rootElement = document.getElementById('root');
224
+ initializeShadeRoot({
225
+ injector,
226
+ rootElement,
227
+ jsxElement: (createComponent(MarkdownInput, { value: "short", hideChrome: true, getValidationResult: ({ value }) => value.length < 10 ? { isValid: false, message: 'Too short' } : { isValid: true } })),
228
+ });
229
+ await flushUpdates();
230
+ const helperText = document.querySelector('shade-markdown-input .helperText');
231
+ expect(helperText).toBeNull();
232
+ });
233
+ });
234
+ it('should still set data-invalid when hideChrome is true', async () => {
235
+ await usingAsync(new Injector(), async (injector) => {
236
+ const rootElement = document.getElementById('root');
237
+ initializeShadeRoot({
238
+ injector,
239
+ rootElement,
240
+ jsxElement: createComponent(MarkdownInput, { value: "", required: true, hideChrome: true }),
241
+ });
242
+ await flushUpdates();
243
+ const wrapper = document.querySelector('shade-markdown-input');
244
+ expect(wrapper.hasAttribute('data-invalid')).toBe(true);
245
+ });
246
+ });
247
+ });
205
248
  it('should render with validation inside a Form', async () => {
206
249
  await usingAsync(new Injector(), async (injector) => {
207
250
  const rootElement = document.getElementById('root');
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-input.spec.js","sourceRoot":"","sources":["../../../src/components/markdown/markdown-input.spec.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown-input.spec.js","sourceRoot":"","sources":["../../../src/components/markdown/markdown-input.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { InputValidationResult } from '../inputs/input.js';
2
+ type ValidationOptions = {
3
+ value: string;
4
+ required?: boolean;
5
+ getValidationResult?: (options: {
6
+ value: string;
7
+ }) => InputValidationResult;
8
+ getHelperText?: (options: {
9
+ value: string;
10
+ validationResult?: InputValidationResult;
11
+ }) => JSX.Element | string;
12
+ };
13
+ export type ValidationState = {
14
+ validationResult: InputValidationResult | undefined;
15
+ isRequired: boolean;
16
+ isInvalid: boolean;
17
+ helperNode: JSX.Element | string;
18
+ };
19
+ /**
20
+ * Computes validation state from common markdown field props.
21
+ * Shared between MarkdownInput and MarkdownEditor to keep the logic in one place.
22
+ */
23
+ export declare const resolveValidationState: (options: ValidationOptions) => ValidationState;
24
+ export {};
25
+ //# sourceMappingURL=markdown-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-validation.d.ts","sourceRoot":"","sources":["../../../src/components/markdown/markdown-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,qBAAqB,CAAA;IAC3E,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,qBAAqB,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,GAAG,MAAM,CAAA;CAC/G,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,gBAAgB,EAAE,qBAAqB,GAAG,SAAS,CAAA;IACnD,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAA;CACjC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,iBAAiB,KAAG,eAYnE,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Computes validation state from common markdown field props.
3
+ * Shared between MarkdownInput and MarkdownEditor to keep the logic in one place.
4
+ */
5
+ export const resolveValidationState = (options) => {
6
+ const validationResult = options.getValidationResult?.({ value: options.value });
7
+ const isRequired = !!options.required && !options.value;
8
+ const isInvalid = validationResult?.isValid === false || isRequired;
9
+ const helperNode = (validationResult?.isValid === false && validationResult?.message) ||
10
+ (isRequired && 'Value is required') ||
11
+ options.getHelperText?.({ value: options.value, validationResult }) ||
12
+ '';
13
+ return { validationResult, isRequired, isInvalid, helperNode };
14
+ };
15
+ //# sourceMappingURL=markdown-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-validation.js","sourceRoot":"","sources":["../../../src/components/markdown/markdown-validation.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAA0B,EAAmB,EAAE;IACpF,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IAChF,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA;IACvD,MAAM,SAAS,GAAG,gBAAgB,EAAE,OAAO,KAAK,KAAK,IAAI,UAAU,CAAA;IAEnE,MAAM,UAAU,GACd,CAAC,gBAAgB,EAAE,OAAO,KAAK,KAAK,IAAI,gBAAgB,EAAE,OAAO,CAAC;QAClE,CAAC,UAAU,IAAI,mBAAmB,CAAC;QACnC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC;QACnE,EAAE,CAAA;IAEJ,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AAChE,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@furystack/shades-common-components",
3
- "version": "12.6.0",
3
+ "version": "12.7.0",
4
4
  "description": "Common UI components for FuryStack Shades",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -139,4 +139,265 @@ describe('MarkdownEditor', () => {
139
139
  expect(heading?.textContent).toContain('Test Content')
140
140
  })
141
141
  })
142
+
143
+ describe('form integration', () => {
144
+ it('should render a label when labelTitle is provided', async () => {
145
+ await usingAsync(new Injector(), async (injector) => {
146
+ const rootElement = document.getElementById('root') as HTMLDivElement
147
+
148
+ initializeShadeRoot({
149
+ injector,
150
+ rootElement,
151
+ jsxElement: <MarkdownEditor value="" labelTitle="Description" />,
152
+ })
153
+
154
+ await flushUpdates()
155
+
156
+ const label = document.querySelector('shade-markdown-editor .md-editor-label')
157
+ expect(label).not.toBeNull()
158
+ expect(label?.textContent).toBe('Description')
159
+ })
160
+ })
161
+
162
+ it('should not render a label when labelTitle is not provided', async () => {
163
+ await usingAsync(new Injector(), async (injector) => {
164
+ const rootElement = document.getElementById('root') as HTMLDivElement
165
+
166
+ initializeShadeRoot({
167
+ injector,
168
+ rootElement,
169
+ jsxElement: <MarkdownEditor value="" />,
170
+ })
171
+
172
+ await flushUpdates()
173
+
174
+ const label = document.querySelector('shade-markdown-editor .md-editor-label')
175
+ expect(label).toBeNull()
176
+ })
177
+ })
178
+
179
+ it('should set data-invalid when required and value is empty', async () => {
180
+ await usingAsync(new Injector(), async (injector) => {
181
+ const rootElement = document.getElementById('root') as HTMLDivElement
182
+
183
+ initializeShadeRoot({
184
+ injector,
185
+ rootElement,
186
+ jsxElement: <MarkdownEditor value="" required />,
187
+ })
188
+
189
+ await flushUpdates()
190
+
191
+ const editor = document.querySelector('shade-markdown-editor') as HTMLElement
192
+ expect(editor.hasAttribute('data-invalid')).toBe(true)
193
+ })
194
+ })
195
+
196
+ it('should not set data-invalid when required and value is provided', async () => {
197
+ await usingAsync(new Injector(), async (injector) => {
198
+ const rootElement = document.getElementById('root') as HTMLDivElement
199
+
200
+ initializeShadeRoot({
201
+ injector,
202
+ rootElement,
203
+ jsxElement: <MarkdownEditor value="some content" required />,
204
+ })
205
+
206
+ await flushUpdates()
207
+
208
+ const editor = document.querySelector('shade-markdown-editor') as HTMLElement
209
+ expect(editor.hasAttribute('data-invalid')).toBe(false)
210
+ })
211
+ })
212
+
213
+ it('should show "Value is required" helper text when required and empty', async () => {
214
+ await usingAsync(new Injector(), async (injector) => {
215
+ const rootElement = document.getElementById('root') as HTMLDivElement
216
+
217
+ initializeShadeRoot({
218
+ injector,
219
+ rootElement,
220
+ jsxElement: <MarkdownEditor value="" required />,
221
+ })
222
+
223
+ await flushUpdates()
224
+
225
+ const helperText = document.querySelector('shade-markdown-editor .md-editor-helperText')
226
+ expect(helperText).not.toBeNull()
227
+ expect(helperText?.textContent).toBe('Value is required')
228
+ })
229
+ })
230
+
231
+ it('should set data-invalid when getValidationResult returns invalid', async () => {
232
+ await usingAsync(new Injector(), async (injector) => {
233
+ const rootElement = document.getElementById('root') as HTMLDivElement
234
+
235
+ initializeShadeRoot({
236
+ injector,
237
+ rootElement,
238
+ jsxElement: (
239
+ <MarkdownEditor
240
+ value="short"
241
+ getValidationResult={({ value }) =>
242
+ value.length < 10 ? { isValid: false, message: 'Too short' } : { isValid: true }
243
+ }
244
+ />
245
+ ),
246
+ })
247
+
248
+ await flushUpdates()
249
+
250
+ const editor = document.querySelector('shade-markdown-editor') as HTMLElement
251
+ expect(editor.hasAttribute('data-invalid')).toBe(true)
252
+ expect(editor.textContent).toContain('Too short')
253
+ })
254
+ })
255
+
256
+ it('should not set data-invalid when getValidationResult returns valid', async () => {
257
+ await usingAsync(new Injector(), async (injector) => {
258
+ const rootElement = document.getElementById('root') as HTMLDivElement
259
+
260
+ initializeShadeRoot({
261
+ injector,
262
+ rootElement,
263
+ jsxElement: (
264
+ <MarkdownEditor
265
+ value="long enough content"
266
+ getValidationResult={({ value }) =>
267
+ value.length < 10 ? { isValid: false, message: 'Too short' } : { isValid: true }
268
+ }
269
+ />
270
+ ),
271
+ })
272
+
273
+ await flushUpdates()
274
+
275
+ const editor = document.querySelector('shade-markdown-editor') as HTMLElement
276
+ expect(editor.hasAttribute('data-invalid')).toBe(false)
277
+ })
278
+ })
279
+
280
+ it('should display helper text from getHelperText', async () => {
281
+ await usingAsync(new Injector(), async (injector) => {
282
+ const rootElement = document.getElementById('root') as HTMLDivElement
283
+
284
+ initializeShadeRoot({
285
+ injector,
286
+ rootElement,
287
+ jsxElement: <MarkdownEditor value="" getHelperText={() => 'Enter your description'} />,
288
+ })
289
+
290
+ await flushUpdates()
291
+
292
+ const helperText = document.querySelector('shade-markdown-editor .md-editor-helperText')
293
+ expect(helperText).not.toBeNull()
294
+ expect(helperText?.textContent).toBe('Enter your description')
295
+ })
296
+ })
297
+
298
+ it('should forward name prop to the inner textarea', async () => {
299
+ await usingAsync(new Injector(), async (injector) => {
300
+ const rootElement = document.getElementById('root') as HTMLDivElement
301
+
302
+ initializeShadeRoot({
303
+ injector,
304
+ rootElement,
305
+ jsxElement: <MarkdownEditor value="" name="description" />,
306
+ })
307
+
308
+ await flushUpdates()
309
+
310
+ const textarea = document.querySelector('shade-markdown-editor textarea') as HTMLTextAreaElement
311
+ expect(textarea.name).toBe('description')
312
+ })
313
+ })
314
+
315
+ it('should forward required prop to the inner textarea', async () => {
316
+ await usingAsync(new Injector(), async (injector) => {
317
+ const rootElement = document.getElementById('root') as HTMLDivElement
318
+
319
+ initializeShadeRoot({
320
+ injector,
321
+ rootElement,
322
+ jsxElement: <MarkdownEditor value="content" required />,
323
+ })
324
+
325
+ await flushUpdates()
326
+
327
+ const textarea = document.querySelector('shade-markdown-editor textarea') as HTMLTextAreaElement
328
+ expect(textarea.required).toBe(true)
329
+ })
330
+ })
331
+
332
+ it('should forward disabled prop to the inner textarea', async () => {
333
+ await usingAsync(new Injector(), async (injector) => {
334
+ const rootElement = document.getElementById('root') as HTMLDivElement
335
+
336
+ initializeShadeRoot({
337
+ injector,
338
+ rootElement,
339
+ jsxElement: <MarkdownEditor value="" disabled />,
340
+ })
341
+
342
+ await flushUpdates()
343
+
344
+ const textarea = document.querySelector('shade-markdown-editor textarea') as HTMLTextAreaElement
345
+ expect(textarea.disabled).toBe(true)
346
+ })
347
+ })
348
+
349
+ it('should forward placeholder prop to the inner textarea', async () => {
350
+ await usingAsync(new Injector(), async (injector) => {
351
+ const rootElement = document.getElementById('root') as HTMLDivElement
352
+
353
+ initializeShadeRoot({
354
+ injector,
355
+ rootElement,
356
+ jsxElement: <MarkdownEditor value="" placeholder="Type here..." />,
357
+ })
358
+
359
+ await flushUpdates()
360
+
361
+ const textarea = document.querySelector('shade-markdown-editor textarea') as HTMLTextAreaElement
362
+ expect(textarea.placeholder).toBe('Type here...')
363
+ })
364
+ })
365
+
366
+ it('should forward rows prop to the inner textarea', async () => {
367
+ await usingAsync(new Injector(), async (injector) => {
368
+ const rootElement = document.getElementById('root') as HTMLDivElement
369
+
370
+ initializeShadeRoot({
371
+ injector,
372
+ rootElement,
373
+ jsxElement: <MarkdownEditor value="" rows={5} />,
374
+ })
375
+
376
+ await flushUpdates()
377
+
378
+ const textarea = document.querySelector('shade-markdown-editor textarea') as HTMLTextAreaElement
379
+ expect(textarea.rows).toBe(5)
380
+ })
381
+ })
382
+
383
+ it('should set hideChrome on the inner MarkdownInput', async () => {
384
+ await usingAsync(new Injector(), async (injector) => {
385
+ const rootElement = document.getElementById('root') as HTMLDivElement
386
+
387
+ initializeShadeRoot({
388
+ injector,
389
+ rootElement,
390
+ jsxElement: <MarkdownEditor value="" labelTitle="My Label" />,
391
+ })
392
+
393
+ await flushUpdates()
394
+
395
+ const editorLabel = document.querySelector('shade-markdown-editor .md-editor-label')
396
+ expect(editorLabel?.textContent).toBe('My Label')
397
+
398
+ const inputLabel = document.querySelector('shade-markdown-editor shade-markdown-input label > span')
399
+ expect(inputLabel).toBeNull()
400
+ })
401
+ })
402
+ })
142
403
  })
@@ -2,7 +2,8 @@ import { Shade, createComponent } from '@furystack/shades'
2
2
  import { cssVariableTheme } from '../../services/css-variable-theme.js'
3
3
  import { Tabs } from '../tabs.js'
4
4
  import { MarkdownDisplay } from './markdown-display.js'
5
- import { MarkdownInput } from './markdown-input.js'
5
+ import { MarkdownInput, type MarkdownInputProps } from './markdown-input.js'
6
+ import { resolveValidationState } from './markdown-validation.js'
6
7
 
7
8
  export type MarkdownEditorLayout = 'side-by-side' | 'tabs' | 'above-below'
8
9
 
@@ -19,7 +20,10 @@ export type MarkdownEditorProps = {
19
20
  readOnly?: boolean
20
21
  /** Inline styles applied to the host element */
21
22
  style?: Partial<CSSStyleDeclaration>
22
- }
23
+ } & Pick<
24
+ MarkdownInputProps,
25
+ 'name' | 'required' | 'labelTitle' | 'disabled' | 'placeholder' | 'rows' | 'getValidationResult' | 'getHelperText'
26
+ >
23
27
 
24
28
  type TabType = 'edit' | 'preview'
25
29
 
@@ -32,11 +36,40 @@ export const MarkdownEditor = Shade<MarkdownEditorProps>({
32
36
  css: {
33
37
  display: 'flex',
34
38
  flexDirection: 'column',
35
- border: `1px solid ${cssVariableTheme.action.subtleBorder}`,
36
- borderRadius: cssVariableTheme.shape.borderRadius.md,
37
- overflow: 'hidden',
38
39
  minHeight: '0',
39
40
 
41
+ '& .md-editor-label': {
42
+ fontSize: cssVariableTheme.typography.fontSize.xs,
43
+ color: cssVariableTheme.text.secondary,
44
+ padding: `0 0 ${cssVariableTheme.spacing.sm} 0`,
45
+ transition: `color ${cssVariableTheme.transitions.duration.slow} ${cssVariableTheme.transitions.easing.default}`,
46
+ },
47
+
48
+ '&[data-invalid] .md-editor-label': {
49
+ color: cssVariableTheme.palette.error.main,
50
+ },
51
+
52
+ '& .md-editor-frame': {
53
+ display: 'flex',
54
+ flexDirection: 'column',
55
+ border: `1px solid ${cssVariableTheme.action.subtleBorder}`,
56
+ borderRadius: cssVariableTheme.shape.borderRadius.md,
57
+ overflow: 'hidden',
58
+ flex: '1',
59
+ minHeight: '0',
60
+ },
61
+
62
+ '&[data-invalid] .md-editor-frame': {
63
+ borderColor: cssVariableTheme.palette.error.main,
64
+ },
65
+
66
+ '& .md-editor-helperText': {
67
+ fontSize: cssVariableTheme.typography.fontSize.xs,
68
+ padding: `${cssVariableTheme.spacing.sm} 0 0 0`,
69
+ opacity: '0.85',
70
+ lineHeight: '1.4',
71
+ },
72
+
40
73
  '& .md-editor-split': {
41
74
  display: 'flex',
42
75
  flex: '1',
@@ -119,8 +152,11 @@ export const MarkdownEditor = Shade<MarkdownEditorProps>({
119
152
  render: ({ props, useState, useHostProps }) => {
120
153
  const layout = props.layout ?? 'side-by-side'
121
154
 
155
+ const { isInvalid, helperNode } = resolveValidationState(props)
156
+
122
157
  useHostProps({
123
158
  ...(props.style ? { style: props.style as Record<string, string> } : {}),
159
+ 'data-invalid': isInvalid ? '' : undefined,
124
160
  })
125
161
 
126
162
  const [activeTab, setActiveTab] = useState<TabType>('activeTab', 'edit')
@@ -131,13 +167,22 @@ export const MarkdownEditor = Shade<MarkdownEditorProps>({
131
167
  onValueChange={props.onValueChange}
132
168
  maxImageSizeBytes={props.maxImageSizeBytes}
133
169
  readOnly={props.readOnly}
170
+ name={props.name}
171
+ required={props.required}
172
+ disabled={props.disabled}
173
+ placeholder={props.placeholder}
174
+ rows={props.rows}
175
+ getValidationResult={props.getValidationResult}
176
+ hideChrome
134
177
  />
135
178
  )
136
179
 
137
180
  const previewPane = <MarkdownDisplay content={props.value} readOnly={false} onChange={props.onValueChange} />
138
181
 
182
+ let content: JSX.Element
183
+
139
184
  if (layout === 'tabs') {
140
- return (
185
+ content = (
141
186
  <Tabs
142
187
  activeKey={activeTab}
143
188
  onTabChange={(key) => setActiveTab(key as TabType)}
@@ -155,13 +200,21 @@ export const MarkdownEditor = Shade<MarkdownEditorProps>({
155
200
  ]}
156
201
  />
157
202
  )
203
+ } else {
204
+ content = (
205
+ <div className="md-editor-split" data-layout={layout}>
206
+ <div className="md-editor-pane md-editor-pane-input">{inputPane}</div>
207
+ <div className="md-editor-pane md-editor-pane-preview">{previewPane}</div>
208
+ </div>
209
+ )
158
210
  }
159
211
 
160
212
  return (
161
- <div className="md-editor-split" data-layout={layout}>
162
- <div className="md-editor-pane md-editor-pane-input">{inputPane}</div>
163
- <div className="md-editor-pane md-editor-pane-preview">{previewPane}</div>
164
- </div>
213
+ <>
214
+ {props.labelTitle ? <span className="md-editor-label">{props.labelTitle}</span> : null}
215
+ <div className="md-editor-frame">{content}</div>
216
+ {helperNode ? <span className="md-editor-helperText">{helperNode}</span> : null}
217
+ </>
165
218
  )
166
219
  },
167
220
  })
@@ -271,6 +271,69 @@ describe('MarkdownInput', () => {
271
271
  })
272
272
  })
273
273
 
274
+ describe('hideChrome', () => {
275
+ it('should suppress the label when hideChrome is true', async () => {
276
+ await usingAsync(new Injector(), async (injector) => {
277
+ const rootElement = document.getElementById('root') as HTMLDivElement
278
+
279
+ initializeShadeRoot({
280
+ injector,
281
+ rootElement,
282
+ jsxElement: <MarkdownInput value="" labelTitle="My Label" hideChrome />,
283
+ })
284
+
285
+ await flushUpdates()
286
+
287
+ const wrapper = document.querySelector('shade-markdown-input') as HTMLElement
288
+ const spans = wrapper.querySelectorAll('label > span')
289
+ const labelSpan = Array.from(spans).find((s) => s.textContent === 'My Label')
290
+ expect(labelSpan).toBeUndefined()
291
+ })
292
+ })
293
+
294
+ it('should suppress the helper text when hideChrome is true', async () => {
295
+ await usingAsync(new Injector(), async (injector) => {
296
+ const rootElement = document.getElementById('root') as HTMLDivElement
297
+
298
+ initializeShadeRoot({
299
+ injector,
300
+ rootElement,
301
+ jsxElement: (
302
+ <MarkdownInput
303
+ value="short"
304
+ hideChrome
305
+ getValidationResult={({ value }) =>
306
+ value.length < 10 ? { isValid: false, message: 'Too short' } : { isValid: true }
307
+ }
308
+ />
309
+ ),
310
+ })
311
+
312
+ await flushUpdates()
313
+
314
+ const helperText = document.querySelector('shade-markdown-input .helperText')
315
+ expect(helperText).toBeNull()
316
+ })
317
+ })
318
+
319
+ it('should still set data-invalid when hideChrome is true', async () => {
320
+ await usingAsync(new Injector(), async (injector) => {
321
+ const rootElement = document.getElementById('root') as HTMLDivElement
322
+
323
+ initializeShadeRoot({
324
+ injector,
325
+ rootElement,
326
+ jsxElement: <MarkdownInput value="" required hideChrome />,
327
+ })
328
+
329
+ await flushUpdates()
330
+
331
+ const wrapper = document.querySelector('shade-markdown-input') as HTMLElement
332
+ expect(wrapper.hasAttribute('data-invalid')).toBe(true)
333
+ })
334
+ })
335
+ })
336
+
274
337
  it('should render with validation inside a Form', async () => {
275
338
  await usingAsync(new Injector(), async (injector) => {
276
339
  const rootElement = document.getElementById('root') as HTMLDivElement
@@ -2,6 +2,7 @@ import { Shade, createComponent } from '@furystack/shades'
2
2
  import { cssVariableTheme } from '../../services/css-variable-theme.js'
3
3
  import type { InputValidationResult } from '../inputs/input.js'
4
4
  import { FormService } from '../form.js'
5
+ import { resolveValidationState } from './markdown-validation.js'
5
6
 
6
7
  const DEFAULT_MAX_IMAGE_SIZE = 256 * 1024
7
8
 
@@ -30,6 +31,8 @@ export type MarkdownInputProps = {
30
31
  getValidationResult?: (options: { value: string }) => InputValidationResult
31
32
  /** Optional helper text callback */
32
33
  getHelperText?: (options: { value: string; validationResult?: InputValidationResult }) => JSX.Element | string
34
+ /** When true, suppresses visual label and helper text rendering while keeping form mechanics */
35
+ hideChrome?: boolean
33
36
  }
34
37
 
35
38
  /**
@@ -117,9 +120,7 @@ export const MarkdownInput = Shade<MarkdownInputProps>({
117
120
  }
118
121
  })
119
122
 
120
- const validationResult = props.getValidationResult?.({ value: props.value })
121
- const isRequired = props.required && !props.value
122
- const isInvalid = validationResult?.isValid === false || isRequired
123
+ const { validationResult, isRequired, isInvalid, helperNode } = resolveValidationState(props)
123
124
 
124
125
  if (injector.cachedSingletons.has(FormService) && props.name) {
125
126
  const formService = injector.getInstance(FormService)
@@ -135,12 +136,6 @@ export const MarkdownInput = Shade<MarkdownInputProps>({
135
136
  'data-invalid': isInvalid ? '' : undefined,
136
137
  })
137
138
 
138
- const helperNode =
139
- (validationResult?.isValid === false && validationResult?.message) ||
140
- (isRequired && 'Value is required') ||
141
- props.getHelperText?.({ value: props.value, validationResult }) ||
142
- ''
143
-
144
139
  const handleInput = (ev: Event) => {
145
140
  const target = ev.target as HTMLTextAreaElement
146
141
  props.onValueChange?.(target.value)
@@ -187,7 +182,7 @@ export const MarkdownInput = Shade<MarkdownInputProps>({
187
182
 
188
183
  return (
189
184
  <label>
190
- {props.labelTitle ? <span>{props.labelTitle}</span> : null}
185
+ {!props.hideChrome && props.labelTitle ? <span>{props.labelTitle}</span> : null}
191
186
  <textarea
192
187
  ref={textareaRef}
193
188
  name={props.name}
@@ -200,7 +195,7 @@ export const MarkdownInput = Shade<MarkdownInputProps>({
200
195
  placeholder={props.placeholder}
201
196
  rows={props.rows ?? 10}
202
197
  />
203
- {helperNode ? <span className="helperText">{helperNode}</span> : null}
198
+ {!props.hideChrome && helperNode ? <span className="helperText">{helperNode}</span> : null}
204
199
  </label>
205
200
  )
206
201
  },
@@ -0,0 +1,33 @@
1
+ import type { InputValidationResult } from '../inputs/input.js'
2
+
3
+ type ValidationOptions = {
4
+ value: string
5
+ required?: boolean
6
+ getValidationResult?: (options: { value: string }) => InputValidationResult
7
+ getHelperText?: (options: { value: string; validationResult?: InputValidationResult }) => JSX.Element | string
8
+ }
9
+
10
+ export type ValidationState = {
11
+ validationResult: InputValidationResult | undefined
12
+ isRequired: boolean
13
+ isInvalid: boolean
14
+ helperNode: JSX.Element | string
15
+ }
16
+
17
+ /**
18
+ * Computes validation state from common markdown field props.
19
+ * Shared between MarkdownInput and MarkdownEditor to keep the logic in one place.
20
+ */
21
+ export const resolveValidationState = (options: ValidationOptions): ValidationState => {
22
+ const validationResult = options.getValidationResult?.({ value: options.value })
23
+ const isRequired = !!options.required && !options.value
24
+ const isInvalid = validationResult?.isValid === false || isRequired
25
+
26
+ const helperNode =
27
+ (validationResult?.isValid === false && validationResult?.message) ||
28
+ (isRequired && 'Value is required') ||
29
+ options.getHelperText?.({ value: options.value, validationResult }) ||
30
+ ''
31
+
32
+ return { validationResult, isRequired, isInvalid, helperNode }
33
+ }