@pure-ds/storybook 0.7.26 → 0.7.29

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.
@@ -109,13 +109,15 @@ const CheckIcon = () => (
109
109
  );
110
110
 
111
111
  export const Panel = ({ active }) => {
112
- const [source, setSource] = useState({ markup: '', forms: [], omniboxes: [], treeviews: [], fabs: [] });
112
+ const [source, setSource] = useState({ markup: '', forms: [], omniboxes: [], treeviews: [], tags: [], fabs: [], pdsApiCalls: [] });
113
113
  const [copied, setCopied] = useState(false);
114
114
  const [highlightedMarkup, setHighlightedMarkup] = useState('');
115
115
  const [highlightedforms, setHighlightedforms] = useState([]);
116
116
  const [highlightedOmniboxes, setHighlightedOmniboxes] = useState([]);
117
117
  const [highlightedTreeviews, setHighlightedTreeviews] = useState([]);
118
+ const [highlightedTags, setHighlightedTags] = useState([]);
118
119
  const [highlightedFabs, setHighlightedFabs] = useState([]);
120
+ const [highlightedPdsApiCalls, setHighlightedPdsApiCalls] = useState([]);
119
121
  const shikiRef = useRef(null);
120
122
 
121
123
  // Get Storybook theme to detect light/dark mode
@@ -302,10 +304,79 @@ export const Panel = ({ active }) => {
302
304
  processTreeviews();
303
305
  }, [source.treeviews, shikiTheme]);
304
306
 
307
+ // Highlight tags options when source or theme changes
308
+ useEffect(() => {
309
+ if (!source.tags || source.tags.length === 0) {
310
+ setHighlightedTags([]);
311
+ return;
312
+ }
313
+
314
+ const highlightCode = async (code) => {
315
+ if (!code) return '';
316
+ const highlighter = shikiRef.current || await loadShiki();
317
+ if (highlighter) {
318
+ try {
319
+ return highlighter.codeToHtml(code, { lang: 'javascript', theme: shikiTheme });
320
+ } catch (err) {
321
+ return `<pre><code>${escapeHtml(code)}</code></pre>`;
322
+ }
323
+ }
324
+ return `<pre><code>${escapeHtml(code)}</code></pre>`;
325
+ };
326
+
327
+ const processTags = async () => {
328
+ const highlighted = await Promise.all(
329
+ source.tags.map(async (tagEntry, index) => ({
330
+ id: tagEntry.id ?? index,
331
+ label: tagEntry.label,
332
+ options: await highlightCode(tagEntry.options)
333
+ }))
334
+ );
335
+ setHighlightedTags(highlighted);
336
+ };
337
+
338
+ processTags();
339
+ }, [source.tags, shikiTheme]);
340
+
341
+ // Highlight PDS API snippets when source or theme changes
342
+ useEffect(() => {
343
+ if (!source.pdsApiCalls || source.pdsApiCalls.length === 0) {
344
+ setHighlightedPdsApiCalls([]);
345
+ return;
346
+ }
347
+
348
+ const highlightCode = async (code) => {
349
+ if (!code) return '';
350
+ const highlighter = shikiRef.current || await loadShiki();
351
+ if (highlighter) {
352
+ try {
353
+ return highlighter.codeToHtml(code, { lang: 'javascript', theme: shikiTheme });
354
+ } catch (err) {
355
+ return `<pre><code>${escapeHtml(code)}</code></pre>`;
356
+ }
357
+ }
358
+ return `<pre><code>${escapeHtml(code)}</code></pre>`;
359
+ };
360
+
361
+ const processPdsApiCalls = async () => {
362
+ const highlighted = await Promise.all(
363
+ source.pdsApiCalls.map(async (call, index) => ({
364
+ id: call.id ?? index,
365
+ heading: call.heading,
366
+ label: call.label,
367
+ code: await highlightCode(call.code)
368
+ }))
369
+ );
370
+ setHighlightedPdsApiCalls(highlighted);
371
+ };
372
+
373
+ processPdsApiCalls();
374
+ }, [source.pdsApiCalls, shikiTheme]);
375
+
305
376
  useChannel({
306
377
  [EVENTS.UPDATE_HTML]: (payload) => {
307
378
  if (typeof payload === 'string') {
308
- setSource({ markup: payload || '', forms: [], omniboxes: [], treeviews: [], fabs: [] });
379
+ setSource({ markup: payload || '', forms: [], omniboxes: [], treeviews: [], tags: [], fabs: [], pdsApiCalls: [] });
309
380
  return;
310
381
  }
311
382
 
@@ -315,18 +386,20 @@ export const Panel = ({ active }) => {
315
386
  forms: Array.isArray(payload.forms) ? payload.forms : [],
316
387
  omniboxes: Array.isArray(payload.omniboxes) ? payload.omniboxes : [],
317
388
  treeviews: Array.isArray(payload.treeviews) ? payload.treeviews : [],
318
- fabs: Array.isArray(payload.fabs) ? payload.fabs : []
389
+ tags: Array.isArray(payload.tags) ? payload.tags : [],
390
+ fabs: Array.isArray(payload.fabs) ? payload.fabs : [],
391
+ pdsApiCalls: Array.isArray(payload.pdsApiCalls) ? payload.pdsApiCalls : []
319
392
  });
320
393
  return;
321
394
  }
322
395
 
323
- setSource({ markup: '', forms: [], omniboxes: [], treeviews: [], fabs: [] });
396
+ setSource({ markup: '', forms: [], omniboxes: [], treeviews: [], tags: [], fabs: [], pdsApiCalls: [] });
324
397
  }
325
398
  });
326
399
 
327
400
  // Request HTML update when panel becomes active
328
401
  React.useEffect(() => {
329
- if (active && !source.markup && source.forms.length === 0 && source.omniboxes.length === 0 && source.treeviews.length === 0 && source.fabs.length === 0) {
402
+ if (active && !source.markup && source.forms.length === 0 && source.omniboxes.length === 0 && source.treeviews.length === 0 && source.tags.length === 0 && source.fabs.length === 0 && source.pdsApiCalls.length === 0) {
330
403
  // Trigger a re-extraction by emitting a request event
331
404
  // The decorator will pick this up on the next render cycle
332
405
  const container = document.querySelector('#storybook-root');
@@ -338,7 +411,7 @@ export const Panel = ({ active }) => {
338
411
  }, 100);
339
412
  }
340
413
  }
341
- }, [active, source.markup, source.forms.length, source.omniboxes.length, source.treeviews.length, source.fabs.length]);
414
+ }, [active, source.markup, source.forms.length, source.omniboxes.length, source.treeviews.length, source.tags.length, source.fabs.length, source.pdsApiCalls.length]);
342
415
 
343
416
  const copyToClipboard = useCallback(async () => {
344
417
  try {
@@ -355,9 +428,11 @@ export const Panel = ({ active }) => {
355
428
  const hasforms = source.forms.length > 0;
356
429
  const hasOmniboxes = source.omniboxes.length > 0;
357
430
  const hasTreeviews = source.treeviews.length > 0;
431
+ const hasTags = source.tags.length > 0;
358
432
  const hasFabs = source.fabs.length > 0;
433
+ const hasPdsApiCalls = source.pdsApiCalls.length > 0;
359
434
 
360
- if (!hasMarkup && !hasforms && !hasOmniboxes && !hasTreeviews && !hasFabs) {
435
+ if (!hasMarkup && !hasforms && !hasOmniboxes && !hasTreeviews && !hasTags && !hasFabs && !hasPdsApiCalls) {
361
436
  return (
362
437
  <Container>
363
438
  <EmptyState>
@@ -498,6 +573,52 @@ export const Panel = ({ active }) => {
498
573
  );
499
574
  })}
500
575
 
576
+ {hasTags && source.tags.map((sourceTags, index) => {
577
+ const key = sourceTags.id ?? index;
578
+ const highlightedTag = highlightedTags[index];
579
+ const heading = source.tags.length > 1 ? (sourceTags.label || `Tags ${index + 1}`) : 'pds-tags';
580
+
581
+ return (
582
+ <SectionWrapper key={key}>
583
+ <SectionHeading>{heading}</SectionHeading>
584
+
585
+ {sourceTags.options && (
586
+ <>
587
+ <Subheading>options</Subheading>
588
+ <CodeBlock
589
+ $compact
590
+ dangerouslySetInnerHTML={{
591
+ __html: highlightedTag?.options || `<pre><code>${escapeHtml(sourceTags.options)}</code></pre>`
592
+ }}
593
+ />
594
+ </>
595
+ )}
596
+ </SectionWrapper>
597
+ );
598
+ })}
599
+
600
+ {hasPdsApiCalls && source.pdsApiCalls.map((sourceCall, index) => {
601
+ const key = sourceCall.id ?? index;
602
+ const highlightedCall = highlightedPdsApiCalls[index];
603
+ const heading = sourceCall.heading || 'PDS API';
604
+
605
+ return (
606
+ <SectionWrapper key={key}>
607
+ <SectionHeading>{heading}</SectionHeading>
608
+
609
+ {sourceCall.label && <Subheading>{sourceCall.label}</Subheading>}
610
+ {sourceCall.code && (
611
+ <CodeBlock
612
+ $compact
613
+ dangerouslySetInnerHTML={{
614
+ __html: highlightedCall?.code || `<pre><code>${escapeHtml(sourceCall.code)}</code></pre>`
615
+ }}
616
+ />
617
+ )}
618
+ </SectionWrapper>
619
+ );
620
+ })}
621
+
501
622
 
502
623
  {hasMarkup && (
503
624
  <CopyButton
@@ -157,6 +157,48 @@ function serializeForDisplay(value) {
157
157
  }
158
158
  }
159
159
 
160
+ function collectPdsApiCalls(container) {
161
+ if (!container) return [];
162
+
163
+ const nodes = Array.from(container.querySelectorAll('*'));
164
+
165
+ return nodes
166
+ .map((element, index) => {
167
+ const source =
168
+ element.pdsCodeSource ||
169
+ element.pdsSource ||
170
+ element.dataset?.pdsCodeSource ||
171
+ element.getAttribute?.('data-pds-code-source') ||
172
+ '';
173
+
174
+ if (!source || typeof source !== 'string' || !source.trim()) {
175
+ return null;
176
+ }
177
+
178
+ const heading =
179
+ element.pdsCodeHeading ||
180
+ element.pdsHeading ||
181
+ element.dataset?.pdsCodeHeading ||
182
+ element.getAttribute?.('data-pds-code-heading') ||
183
+ 'PDS API';
184
+
185
+ const label =
186
+ element.pdsCodeLabel ||
187
+ element.pdsLabel ||
188
+ element.dataset?.pdsCodeLabel ||
189
+ element.getAttribute?.('data-pds-code-label') ||
190
+ null;
191
+
192
+ return {
193
+ id: index,
194
+ heading,
195
+ label,
196
+ code: source,
197
+ };
198
+ })
199
+ .filter(Boolean);
200
+ }
201
+
160
202
  /**
161
203
  * Generate realistic source code for pds-form elements
162
204
  */
@@ -273,6 +315,39 @@ function generatePdsTreeviewMarkup(treeviewElement) {
273
315
  return `<pds-treeview${formattedAttrs}></pds-treeview>`;
274
316
  }
275
317
 
318
+ /**
319
+ * Generate realistic source code for pds-tags elements
320
+ */
321
+ function generatePdsTagsMarkup(tagsElement) {
322
+ const attrs = [];
323
+
324
+ const stringAttrs = ['name', 'placeholder', 'value'];
325
+ stringAttrs.forEach((attr) => {
326
+ const value = tagsElement.getAttribute(attr);
327
+ if (value !== null && value !== undefined && value !== '') {
328
+ attrs.push(`${attr}="${value}"`);
329
+ }
330
+ });
331
+
332
+ if (tagsElement.hasAttribute('required')) {
333
+ attrs.push('required');
334
+ }
335
+
336
+ if (tagsElement.hasAttribute('disabled')) {
337
+ attrs.push('disabled');
338
+ }
339
+
340
+ if (tagsElement.options || tagsElement.settings) {
341
+ attrs.push('.options=${options}');
342
+ }
343
+
344
+ const formattedAttrs = attrs.length > 0
345
+ ? '\n ' + attrs.join('\n ') + '\n'
346
+ : '';
347
+
348
+ return `<pds-tags${formattedAttrs}></pds-tags>`;
349
+ }
350
+
276
351
  /**
277
352
  * Generate realistic source code for pds-fab elements
278
353
  */
@@ -320,15 +395,17 @@ export const withHTMLExtractor = (storyFn, context) => {
320
395
  // Try to get HTML from the story container
321
396
  const container = document.querySelector('#storybook-root');
322
397
  if (container) {
323
- // Check if this story has pds-form, pds-omnibox, pds-treeview, or pds-fab elements
398
+ // Check if this story has pds-form, pds-omnibox, pds-treeview, pds-tags, or pds-fab elements
324
399
  const pdsFormElements = Array.from(container.querySelectorAll('pds-form'));
325
400
  const pdsOmniboxElements = Array.from(container.querySelectorAll('pds-omnibox'));
326
401
  const pdsTreeviewElements = Array.from(container.querySelectorAll('pds-treeview'));
402
+ const pdsTagsElements = Array.from(container.querySelectorAll('pds-tags'));
327
403
  const pdsFabElements = Array.from(container.querySelectorAll('pds-fab'));
328
404
  const hasSpecialElements =
329
405
  pdsFormElements.length > 0 ||
330
406
  pdsOmniboxElements.length > 0 ||
331
407
  pdsTreeviewElements.length > 0 ||
408
+ pdsTagsElements.length > 0 ||
332
409
  pdsFabElements.length > 0;
333
410
 
334
411
  if (hasSpecialElements) {
@@ -360,6 +437,11 @@ export const withHTMLExtractor = (storyFn, context) => {
360
437
  markup += generatePdsTreeviewMarkup(treeview);
361
438
  });
362
439
 
440
+ // Add pds-tags markup
441
+ pdsTagsElements.forEach(tags => {
442
+ markup += generatePdsTagsMarkup(tags);
443
+ });
444
+
363
445
  // Add pds-fab markup
364
446
  pdsFabElements.forEach(fab => {
365
447
  markup += generatePdsFabMarkup(fab);
@@ -442,6 +524,30 @@ export const withHTMLExtractor = (storyFn, context) => {
442
524
  };
443
525
  });
444
526
 
527
+ const tags = pdsTagsElements
528
+ .map((tagElement, index) => {
529
+ const label =
530
+ tagElement.getAttribute?.('id') ||
531
+ tagElement.getAttribute?.('name') ||
532
+ (pdsTagsElements.length > 1 ? `Tags ${index + 1}` : 'Tags');
533
+
534
+ const optionsSource =
535
+ tagElement.getAttribute?.('data-options-source') ||
536
+ tagElement.dataset?.optionsSource ||
537
+ null;
538
+
539
+ const options =
540
+ optionsSource ||
541
+ serializeForDisplay(tagElement.options || tagElement.settings) ||
542
+ 'const options = [];';
543
+
544
+ return {
545
+ id: index,
546
+ label,
547
+ options
548
+ };
549
+ });
550
+
445
551
  const fabs = pdsFabElements
446
552
  .map((fab, index) => {
447
553
  const label =
@@ -463,12 +569,16 @@ export const withHTMLExtractor = (storyFn, context) => {
463
569
  })
464
570
  .filter((entry) => entry.satellites);
465
571
 
572
+ const pdsApiCalls = collectPdsApiCalls(container);
573
+
466
574
  channel.emit(EVENTS.UPDATE_HTML, {
467
575
  markup: html || '',
468
576
  forms,
469
577
  omniboxes,
470
578
  treeviews,
471
- fabs
579
+ tags,
580
+ fabs,
581
+ pdsApiCalls
472
582
  });
473
583
  }
474
584
  };
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-03-03T15:26:02.592Z",
2
+ "generatedAt": "2026-03-04T16:38:26.456Z",
3
3
  "sources": {
4
4
  "customElements": "custom-elements.json",
5
5
  "ontology": "src\\js\\pds-core\\pds-ontology.js",
@@ -2593,7 +2593,7 @@
2593
2593
  "attribute": null,
2594
2594
  "description": null,
2595
2595
  "type": null,
2596
- "default": "`\r\n <style>\r\n :host {\r\n --rating-star-size: var(--spacing-lg);\r\n --rating-star-gap: var(--spacing-2xs);\r\n --rating-star-off: var(--color-text-muted);\r\n --rating-star-on: var(--color-warning-500);\r\n --rating-focus: var(--color-primary-500);\r\n --rating-fill-pct: 0%;\r\n display: inline-block;\r\n inline-size: fit-content;\r\n max-inline-size: 100%;\r\n touch-action: none;\r\n }\r\n\r\n ::slotted(input[type=\"range\"]) {\r\n position: absolute !important;\r\n inset-inline-start: 0 !important;\r\n inset-block-start: 0 !important;\r\n inline-size: 1px !important;\r\n block-size: 1px !important;\r\n min-inline-size: 1px !important;\r\n min-block-size: 1px !important;\r\n margin: -1px !important;\r\n border: 0 !important;\r\n padding: 0 !important;\r\n opacity: 0 !important;\r\n overflow: hidden !important;\r\n clip: rect(0 0 0 0) !important;\r\n clip-path: inset(50%) !important;\r\n white-space: nowrap !important;\r\n appearance: none !important;\r\n -webkit-appearance: none !important;\r\n pointer-events: none !important;\r\n }\r\n\r\n .wrap {\r\n position: relative;\r\n display: inline-grid;\r\n gap: var(--spacing-2xs);\r\n align-items: center;\r\n justify-items: start;\r\n min-block-size: calc(var(--rating-star-size) + var(--spacing-xs));\r\n }\r\n\r\n .interactive {\r\n display: inline-grid;\r\n place-items: center start;\r\n inline-size: 100%;\r\n cursor: pointer;\r\n user-select: none;\r\n -webkit-tap-highlight-color: transparent;\r\n touch-action: pan-x;\r\n }\r\n\r\n :host([disabled]) .interactive,\r\n :host([readonly]) .interactive {\r\n cursor: default;\r\n }\r\n\r\n :host([disabled]) {\r\n opacity: 0.5;\r\n }\r\n\r\n .stars {\r\n display: block;\r\n inline-size: auto;\r\n block-size: var(--rating-star-size);\r\n overflow: visible;\r\n transition: transform 220ms ease, opacity 220ms ease;\r\n }\r\n\r\n :host([data-in-view=\"false\"]) .stars {\r\n opacity: 0;\r\n transform: translateY(var(--spacing-xs)) scale(0.98);\r\n }\r\n\r\n :host([data-in-view=\"true\"]) .stars {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n\r\n input[type=\"range\"] {\r\n position: absolute !important;\r\n inset-inline-start: 0 !important;\r\n inset-block-start: 0 !important;\r\n inline-size: 1px !important;\r\n block-size: 1px !important;\r\n min-inline-size: 1px !important;\r\n min-block-size: 1px !important;\r\n margin: -1px !important;\r\n border: 0 !important;\r\n padding: 0 !important;\r\n opacity: 0 !important;\r\n overflow: hidden !important;\r\n clip: rect(0 0 0 0) !important;\r\n clip-path: inset(50%) !important;\r\n white-space: nowrap !important;\r\n appearance: none !important;\r\n -webkit-appearance: none !important;\r\n pointer-events: none !important;\r\n }\r\n\r\n :host(:focus-within) .interactive {\r\n outline: 2px solid var(--rating-focus);\r\n outline-offset: var(--spacing-3xs);\r\n border-radius: var(--radius-sm);\r\n }\r\n\r\n @media (prefers-reduced-motion: reduce) {\r\n .stars {\r\n transition: none;\r\n }\r\n }\r\n </style>\r\n\r\n <div class=\"wrap\" part=\"control\">\r\n <div class=\"interactive\" part=\"interactive\" aria-hidden=\"true\">\r\n <svg class=\"stars\" part=\"stars\" focusable=\"false\" aria-hidden=\"true\"></svg>\r\n </div>\r\n <slot></slot>\r\n </div>\r\n `",
2596
+ "default": "`\r\n <style>\r\n :host {\r\n --rating-star-size: var(--spacing-lg);\r\n --rating-star-gap: var(--spacing-2xs);\r\n --rating-star-off: var(--color-text-muted);\r\n --rating-star-on: var(--color-warning-500);\r\n --rating-focus: var(--color-primary-500);\r\n --rating-fill-pct: 0%;\r\n display: inline-block;\r\n inline-size: fit-content;\r\n max-inline-size: 100%;\r\n touch-action: none;\r\n }\r\n\r\n .wrap {\r\n position: relative;\r\n display: inline-grid;\r\n gap: var(--spacing-2xs);\r\n align-items: center;\r\n justify-items: start;\r\n min-block-size: calc(var(--rating-star-size) + var(--spacing-xs));\r\n }\r\n\r\n .interactive {\r\n display: inline-grid;\r\n place-items: center start;\r\n inline-size: 100%;\r\n cursor: pointer;\r\n user-select: none;\r\n -webkit-tap-highlight-color: transparent;\r\n touch-action: pan-x;\r\n }\r\n\r\n :host([disabled]) .interactive,\r\n :host([readonly]) .interactive {\r\n cursor: default;\r\n }\r\n\r\n :host([disabled]) {\r\n opacity: 0.5;\r\n }\r\n\r\n .stars {\r\n display: block;\r\n inline-size: auto;\r\n block-size: var(--rating-star-size);\r\n overflow: visible;\r\n transition: transform 220ms ease, opacity 220ms ease;\r\n }\r\n\r\n :host([data-in-view=\"false\"]) .stars {\r\n opacity: 0;\r\n transform: translateY(var(--spacing-xs)) scale(0.98);\r\n }\r\n\r\n :host([data-in-view=\"true\"]) .stars {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n\r\n input[type=\"range\"] {\r\n position: absolute !important;\r\n inset-inline-start: 0 !important;\r\n inset-block-start: 0 !important;\r\n inline-size: 1px !important;\r\n block-size: 1px !important;\r\n min-inline-size: 1px !important;\r\n min-block-size: 1px !important;\r\n margin: -1px !important;\r\n border: 0 !important;\r\n padding: 0 !important;\r\n opacity: 0 !important;\r\n overflow: hidden !important;\r\n clip: rect(0 0 0 0) !important;\r\n clip-path: inset(50%) !important;\r\n white-space: nowrap !important;\r\n appearance: none !important;\r\n -webkit-appearance: none !important;\r\n pointer-events: none !important;\r\n }\r\n\r\n :host(:focus-within) .interactive {\r\n outline: 2px solid var(--rating-focus);\r\n outline-offset: var(--spacing-3xs);\r\n border-radius: var(--radius-sm);\r\n }\r\n\r\n @media (prefers-reduced-motion: reduce) {\r\n .stars {\r\n transition: none;\r\n }\r\n }\r\n </style>\r\n\r\n <div class=\"wrap\" part=\"control\">\r\n <div class=\"interactive\" part=\"interactive\" aria-hidden=\"true\">\r\n <svg class=\"stars\" part=\"stars\" focusable=\"false\" aria-hidden=\"true\"></svg>\r\n </div>\r\n <input class=\"native-input\" type=\"range\" />\r\n </div>\r\n `",
2597
2597
  "reflects": false,
2598
2598
  "privacy": "public"
2599
2599
  },
@@ -3522,6 +3522,200 @@
3522
3522
  ],
3523
3523
  "notes": []
3524
3524
  },
3525
+ "pds-tags": {
3526
+ "tag": "pds-tags",
3527
+ "className": "PdsTags",
3528
+ "displayName": "pds-tags",
3529
+ "storyTitle": "Components/pds-tags",
3530
+ "category": "Components",
3531
+ "description": "Form-associated multi-select tags control built on top of `pds-omnibox`.\r\n\r\nUsers select suggestions from the omnibox and each selection is rendered as a removable\r\nchip. The component keeps selection state synchronized across:\r\n- the `value` attribute (comma-separated ids)\r\n- the `value` property (`string[]`)\r\n- form value via ElementInternals\r\n\r\nThe `options` object uses the same structure as `pds-omnibox.settings`.\r\nSee `pds-omnibox` JSDoc for the full options schema.\r\nBefore applying it, the component deep-merges internal defaults:\r\n- `hideCategory: true`\r\n- `itemGrid: \"0 1fr 0\"`\r\n- `iconHandler: () => \"\"`\r\n\r\nWhen `required` is set, at least one selected value is required for validity.",
3532
+ "docsDescription": "Compound multi-select built with pds-omnibox. Select/unselect values from suggestions and manage them as tags.",
3533
+ "pdsTags": [
3534
+ "autocomplete",
3535
+ "autodocs",
3536
+ "forms",
3537
+ "multiselect",
3538
+ "pds-tags"
3539
+ ],
3540
+ "ontology": null,
3541
+ "stories": [],
3542
+ "sourceModule": "public/assets/pds/components/pds-tags.js",
3543
+ "superclass": "HTMLElement",
3544
+ "attributes": [
3545
+ {
3546
+ "name": "name",
3547
+ "description": "Form field name; selected values are submitted under this name",
3548
+ "type": "string",
3549
+ "default": null,
3550
+ "fieldName": null,
3551
+ "property": "name"
3552
+ },
3553
+ {
3554
+ "name": "placeholder",
3555
+ "description": "Placeholder shown in omnibox input (default: \"Search tags...\")",
3556
+ "type": "string",
3557
+ "default": null,
3558
+ "fieldName": null,
3559
+ "property": "placeholder"
3560
+ },
3561
+ {
3562
+ "name": "value",
3563
+ "description": "Comma-separated selected item ids",
3564
+ "type": "string",
3565
+ "default": null,
3566
+ "fieldName": null,
3567
+ "property": "value"
3568
+ },
3569
+ {
3570
+ "name": "options",
3571
+ "description": "JSON object with the same shape as `pds-omnibox.settings`",
3572
+ "type": "string",
3573
+ "default": null,
3574
+ "fieldName": null,
3575
+ "property": "options"
3576
+ },
3577
+ {
3578
+ "name": "disabled",
3579
+ "description": "Disables omnibox interaction and chip remove actions",
3580
+ "type": "boolean",
3581
+ "default": null,
3582
+ "fieldName": null,
3583
+ "property": "disabled"
3584
+ },
3585
+ {
3586
+ "name": "required",
3587
+ "description": "Requires at least one selected value for validity",
3588
+ "type": "boolean",
3589
+ "default": null,
3590
+ "fieldName": null,
3591
+ "property": "required"
3592
+ }
3593
+ ],
3594
+ "properties": [
3595
+ {
3596
+ "name": "disabled",
3597
+ "attribute": "disabled",
3598
+ "description": "Disables omnibox interaction and chip remove actions",
3599
+ "type": null,
3600
+ "default": null,
3601
+ "reflects": false,
3602
+ "privacy": "public"
3603
+ },
3604
+ {
3605
+ "name": "formAssociated",
3606
+ "attribute": null,
3607
+ "description": null,
3608
+ "type": "boolean",
3609
+ "default": "true",
3610
+ "reflects": false,
3611
+ "privacy": "public"
3612
+ },
3613
+ {
3614
+ "name": "name",
3615
+ "attribute": "name",
3616
+ "description": "Form field name; selected values are submitted under this name",
3617
+ "type": null,
3618
+ "default": null,
3619
+ "reflects": false,
3620
+ "privacy": "public"
3621
+ },
3622
+ {
3623
+ "name": "options",
3624
+ "attribute": "options",
3625
+ "description": "Omnibox options object (see `pds-omnibox.js` typedef)",
3626
+ "type": "PdsOmniboxSettings|null",
3627
+ "default": null,
3628
+ "reflects": false,
3629
+ "privacy": "public"
3630
+ },
3631
+ {
3632
+ "name": "placeholder",
3633
+ "attribute": "placeholder",
3634
+ "description": "Placeholder shown in omnibox input (default: \"Search tags...\")",
3635
+ "type": null,
3636
+ "default": null,
3637
+ "reflects": false,
3638
+ "privacy": "public"
3639
+ },
3640
+ {
3641
+ "name": "required",
3642
+ "attribute": "required",
3643
+ "description": "Requires at least one selected value for validity",
3644
+ "type": null,
3645
+ "default": null,
3646
+ "reflects": false,
3647
+ "privacy": "public"
3648
+ },
3649
+ {
3650
+ "name": "value",
3651
+ "attribute": "value",
3652
+ "description": "Selected option ids (array form)",
3653
+ "type": "string[]",
3654
+ "default": null,
3655
+ "reflects": false,
3656
+ "privacy": "public"
3657
+ }
3658
+ ],
3659
+ "methods": [
3660
+ {
3661
+ "name": "checkValidity",
3662
+ "description": null,
3663
+ "parameters": [],
3664
+ "return": null
3665
+ },
3666
+ {
3667
+ "name": "formDisabledCallback",
3668
+ "description": null,
3669
+ "parameters": [
3670
+ {
3671
+ "name": "disabled",
3672
+ "type": null,
3673
+ "description": null
3674
+ }
3675
+ ],
3676
+ "return": null
3677
+ },
3678
+ {
3679
+ "name": "formResetCallback",
3680
+ "description": null,
3681
+ "parameters": [],
3682
+ "return": null
3683
+ },
3684
+ {
3685
+ "name": "formStateRestoreCallback",
3686
+ "description": null,
3687
+ "parameters": [
3688
+ {
3689
+ "name": "state",
3690
+ "type": null,
3691
+ "description": null
3692
+ }
3693
+ ],
3694
+ "return": null
3695
+ },
3696
+ {
3697
+ "name": "reportValidity",
3698
+ "description": null,
3699
+ "parameters": [],
3700
+ "return": null
3701
+ }
3702
+ ],
3703
+ "events": [
3704
+ {
3705
+ "name": "change",
3706
+ "description": "Fired whenever selection changes",
3707
+ "type": "Event"
3708
+ },
3709
+ {
3710
+ "name": "input",
3711
+ "description": "Fired whenever selection changes",
3712
+ "type": "Event"
3713
+ }
3714
+ ],
3715
+ "slots": [],
3716
+ "cssParts": [],
3717
+ "notes": []
3718
+ },
3525
3719
  "pds-theme": {
3526
3720
  "tag": "pds-theme",
3527
3721
  "className": "PdsTheme",
@@ -7399,7 +7593,14 @@
7399
7593
  "multiselect",
7400
7594
  "pds-tags"
7401
7595
  ],
7402
- "pdsParameters": {},
7596
+ "pdsParameters": {
7597
+ "tags": [
7598
+ "forms",
7599
+ "autocomplete",
7600
+ "multiselect",
7601
+ "pds-tags"
7602
+ ]
7603
+ },
7403
7604
  "stories": [],
7404
7605
  "files": [
7405
7606
  "packages\\pds-storybook\\stories\\components\\PdsTags.stories.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pure-ds/storybook",
3
- "version": "0.7.26",
3
+ "version": "0.7.29",
4
4
  "description": "Storybook showcase for Pure Design System with live configuration",
5
5
  "type": "module",
6
6
  "private": false,
@@ -38,7 +38,7 @@
38
38
  "pds:build-icons": "pds-build-icons"
39
39
  },
40
40
  "peerDependencies": {
41
- "@pure-ds/core": "^0.7.26"
41
+ "@pure-ds/core": "^0.7.29"
42
42
  },
43
43
  "dependencies": {
44
44
  "@custom-elements-manifest/analyzer": "^0.11.0",