@progressive-development/pd-content 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/node_modules/.pnpm/@codemirror_autocomplete@6.20.1/node_modules/@codemirror/autocomplete/dist/index.js +550 -0
  2. package/dist/node_modules/.pnpm/@codemirror_lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js +264 -0
  3. package/dist/node_modules/.pnpm/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js +661 -0
  4. package/dist/node_modules/.pnpm/@codemirror_lang-java@6.0.2/node_modules/@codemirror/lang-java/dist/index.js +44 -0
  5. package/dist/node_modules/.pnpm/@codemirror_lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js +346 -0
  6. package/dist/node_modules/.pnpm/@codemirror_lang-json@6.0.2/node_modules/@codemirror/lang-json/dist/index.js +32 -0
  7. package/dist/node_modules/.pnpm/@codemirror_lang-markdown@6.5.0/node_modules/@codemirror/lang-markdown/dist/index.js +492 -0
  8. package/dist/node_modules/.pnpm/@codemirror_lang-python@6.2.1/node_modules/@codemirror/lang-python/dist/index.js +308 -0
  9. package/dist/node_modules/.pnpm/@codemirror_language@6.12.3/node_modules/@codemirror/language/dist/index.js +1572 -0
  10. package/dist/node_modules/.pnpm/@codemirror_state@6.6.0/node_modules/@codemirror/state/dist/index.js +3881 -0
  11. package/dist/node_modules/.pnpm/@codemirror_view@6.40.0/node_modules/@codemirror/view/dist/index.js +9657 -0
  12. package/dist/node_modules/.pnpm/@lezer_common@1.5.1/node_modules/@lezer/common/dist/index.js +2196 -0
  13. package/dist/node_modules/.pnpm/@lezer_css@1.3.3/node_modules/@lezer/css/dist/index.js +147 -0
  14. package/dist/node_modules/.pnpm/@lezer_highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js +898 -0
  15. package/dist/node_modules/.pnpm/@lezer_html@1.3.13/node_modules/@lezer/html/dist/index.js +349 -0
  16. package/dist/node_modules/.pnpm/@lezer_java@1.1.3/node_modules/@lezer/java/dist/index.js +67 -0
  17. package/dist/node_modules/.pnpm/@lezer_javascript@1.5.4/node_modules/@lezer/javascript/dist/index.js +192 -0
  18. package/dist/node_modules/.pnpm/@lezer_json@1.0.3/node_modules/@lezer/json/dist/index.js +37 -0
  19. package/dist/node_modules/.pnpm/@lezer_lr@1.4.8/node_modules/@lezer/lr/dist/index.js +1884 -0
  20. package/dist/node_modules/.pnpm/@lezer_markdown@1.6.3/node_modules/@lezer/markdown/dist/index.js +2335 -0
  21. package/dist/node_modules/.pnpm/@lezer_python@1.1.18/node_modules/@lezer/python/dist/index.js +326 -0
  22. package/dist/node_modules/.pnpm/@marijn_find-cluster-break@1.0.2/node_modules/@marijn/find-cluster-break/src/index.js +82 -0
  23. package/dist/node_modules/.pnpm/style-mod@4.1.3/node_modules/style-mod/src/style-mod.js +174 -0
  24. package/dist/node_modules/.pnpm/w3c-keyname@2.2.8/node_modules/w3c-keyname/index.js +121 -0
  25. package/dist/pd-badge-order/PdBadgeItem.d.ts +11 -0
  26. package/dist/pd-badge-order/PdBadgeItem.d.ts.map +1 -1
  27. package/dist/pd-badge-order/PdBadgeItem.js +162 -10
  28. package/dist/pd-badge-order/PdBadgeOrder.d.ts +56 -17
  29. package/dist/pd-badge-order/PdBadgeOrder.d.ts.map +1 -1
  30. package/dist/pd-badge-order/PdBadgeOrder.js +308 -153
  31. package/dist/pd-badge-order/types.js +3 -1
  32. package/dist/pd-code-snippet/PdCodeSnippet.d.ts +29 -0
  33. package/dist/pd-code-snippet/PdCodeSnippet.d.ts.map +1 -1
  34. package/dist/pd-code-snippet/PdCodeSnippet.js +117 -67
  35. package/dist/pd-code-snippet/codemirror-setup.d.ts +10 -0
  36. package/dist/pd-code-snippet/codemirror-setup.d.ts.map +1 -0
  37. package/dist/pd-code-snippet/codemirror-setup.js +101 -0
  38. package/dist/pd-more-info/PdMoreInfo.d.ts +48 -4
  39. package/dist/pd-more-info/PdMoreInfo.d.ts.map +1 -1
  40. package/dist/pd-more-info/PdMoreInfo.js +132 -17
  41. package/dist/pd-notice-box/PdNoticeBox.js +1 -1
  42. package/dist/pd-panel-viewer/PdPanel.d.ts +3 -0
  43. package/dist/pd-panel-viewer/PdPanel.d.ts.map +1 -1
  44. package/dist/pd-panel-viewer/PdPanel.js +8 -1
  45. package/dist/pd-panel-viewer/PdPanelViewer.d.ts +1 -0
  46. package/dist/pd-panel-viewer/PdPanelViewer.d.ts.map +1 -1
  47. package/dist/pd-panel-viewer/PdPanelViewer.js +44 -28
  48. package/dist/pd-timeline/PdTimeline.d.ts +2 -0
  49. package/dist/pd-timeline/PdTimeline.d.ts.map +1 -1
  50. package/dist/pd-timeline/PdTimeline.js +50 -19
  51. package/dist/types.d.ts +1 -0
  52. package/dist/types.d.ts.map +1 -1
  53. package/package.json +16 -6
@@ -68,6 +68,16 @@ export declare class PdCodeSnippet extends LitElement {
68
68
  * Whether to show line numbers.
69
69
  */
70
70
  showLineNumbers: boolean;
71
+ /**
72
+ * Whether to show the edit button in the header.
73
+ * When visible, the user can toggle between view and edit mode.
74
+ */
75
+ editable: boolean;
76
+ /**
77
+ * Whether the editor is currently in edit mode (internal).
78
+ * @ignore
79
+ */
80
+ private _editing;
71
81
  /**
72
82
  * Copy button state.
73
83
  * @ignore
@@ -78,8 +88,15 @@ export declare class PdCodeSnippet extends LitElement {
78
88
  * @ignore
79
89
  */
80
90
  private _slotCode;
91
+ /** @ignore */
92
+ private _cmHost?;
93
+ /** @ignore */
94
+ private _cmEditor?;
95
+ /** @ignore */
96
+ private _cmInitialized;
81
97
  static styles: CSSResultGroup;
82
98
  updated(changedProperties: PropertyValues): void;
99
+ disconnectedCallback(): void;
83
100
  render(): import('lit').TemplateResult<1>;
84
101
  /**
85
102
  * Extract code from slotted content.
@@ -97,6 +114,18 @@ export declare class PdCodeSnippet extends LitElement {
97
114
  * Copy code to clipboard.
98
115
  */
99
116
  private _copyToClipboard;
117
+ /**
118
+ * Toggle between view and edit mode.
119
+ */
120
+ private _toggleEditing;
121
+ /**
122
+ * Lazy-initialize CodeMirror editor.
123
+ */
124
+ private _initCodeMirror;
125
+ /**
126
+ * Destroy CodeMirror editor instance.
127
+ */
128
+ private _destroyCodeMirror;
100
129
  /**
101
130
  * Format URL for display (truncate if too long).
102
131
  */
@@ -1 +1 @@
1
- {"version":3,"file":"PdCodeSnippet.d.ts","sourceRoot":"","sources":["../../src/pd-code-snippet/PdCodeSnippet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,cAAc,EAEd,UAAU,EAEV,cAAc,EACf,MAAM,KAAK,CAAC;AAMb,OAAO,qCAAqC,CAAC;AAC7C,OAAO,+BAA+B,CAAC;AACvC,OAAO,+BAA+B,CAAC;AACvC,OAAO,+BAA+B,CAAC;AACvC,OAAO,iCAAiC,CAAC;AACzC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC;AACtC,OAAO,mCAAmC,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,YAAY,GACZ,MAAM,GACN,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,QAAQ,GACR,MAAM,GACN,KAAK,GACL,UAAU,GACV,OAAO,CAAC;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,QAAQ,EAAE,YAAY,CAAgB;IAEtC;;OAEG;IAEH,GAAG,SAAM;IAET;;;OAGG;IAEH,IAAI,SAAM;IAEV;;OAEG;IAEH,eAAe,UAAS;IAExB;;;OAGG;IAEH,OAAO,CAAC,OAAO,CAAS;IAExB;;;OAGG;IAEH,OAAO,CAAC,SAAS,CAAM;IAEvB,OAAgB,MAAM,EAAE,cAAc,CAwRpC;IAEO,OAAO,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAahD,MAAM;IA4Ff;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;IACH,OAAO,CAAC,UAAU;CASnB"}
1
+ {"version":3,"file":"PdCodeSnippet.d.ts","sourceRoot":"","sources":["../../src/pd-code-snippet/PdCodeSnippet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,cAAc,EAEd,UAAU,EAEV,cAAc,EACf,MAAM,KAAK,CAAC;AAMb,OAAO,6CAA6C,CAAC;AAGrD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,+BAA+B,CAAC;AACvC,OAAO,+BAA+B,CAAC;AACvC,OAAO,+BAA+B,CAAC;AACvC,OAAO,iCAAiC,CAAC;AACzC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC;AACtC,OAAO,mCAAmC,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,YAAY,GACZ,MAAM,GACN,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,QAAQ,GACR,MAAM,GACN,KAAK,GACL,UAAU,GACV,OAAO,CAAC;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,QAAQ,EAAE,YAAY,CAAgB;IAEtC;;OAEG;IAEH,GAAG,SAAM;IAET;;;OAGG;IAEH,IAAI,SAAM;IAEV;;OAEG;IAEH,eAAe,UAAS;IAExB;;;OAGG;IAEH,QAAQ,UAAS;IAEjB;;;OAGG;IAEH,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;OAGG;IAEH,OAAO,CAAC,OAAO,CAAS;IAExB;;;OAGG;IAEH,OAAO,CAAC,SAAS,CAAM;IAEvB,cAAc;IAEd,OAAO,CAAC,OAAO,CAAC,CAAc;IAE9B,cAAc;IACd,OAAO,CAAC,SAAS,CAAC,CAAa;IAE/B,cAAc;IACd,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAgB,MAAM,EAAE,cAAc,CAqQpC;IAEO,OAAO,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IA8BhD,oBAAoB,IAAI,IAAI;IAK5B,MAAM;IA6Ff;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;YACW,eAAe;IAwB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,UAAU;CASnB"}
@@ -1,6 +1,8 @@
1
1
  import { LitElement, css, nothing, html } from 'lit';
2
- import { property, state } from 'lit/decorators.js';
2
+ import { property, state, query } from 'lit/decorators.js';
3
3
  import Prism from '../_virtual/prism.js';
4
+ import { pdIcons } from '@progressive-development/pd-icon';
5
+ import '@progressive-development/pd-forms/pd-button';
4
6
  import '../_virtual/prism-typescript.js';
5
7
  import '../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-bash.js';
6
8
  import '../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-json.js';
@@ -27,8 +29,12 @@ class PdCodeSnippet extends LitElement {
27
29
  this.url = "";
28
30
  this.code = "";
29
31
  this.showLineNumbers = false;
32
+ this.editable = false;
33
+ this._editing = false;
30
34
  this._copied = false;
31
35
  this._slotCode = "";
36
+ /** @ignore */
37
+ this._cmInitialized = false;
32
38
  }
33
39
  static {
34
40
  this.styles = [
@@ -38,7 +44,7 @@ class PdCodeSnippet extends LitElement {
38
44
  --_width: var(--pd-code-snippet-width, 100%);
39
45
  --_radius: var(
40
46
  --pd-code-snippet-border-radius,
41
- var(--pd-radius-md, 8px)
47
+ var(--pd-radius-md, 4px)
42
48
  );
43
49
  --_padding: var(--pd-code-snippet-padding, var(--pd-spacing-md, 1rem));
44
50
 
@@ -139,41 +145,9 @@ class PdCodeSnippet extends LitElement {
139
145
  gap: 0.75rem;
140
146
  }
141
147
 
142
- /* Copy button */
143
- .copy-button {
144
- display: flex;
145
- align-items: center;
146
- gap: 0.25rem;
147
- padding: 0.25rem 0.5rem;
148
- border: 1px solid var(--_border-col);
149
- border-radius: 4px;
150
- background: transparent;
151
- color: var(--_header-col);
152
- font-size: 0.75rem;
153
- cursor: pointer;
154
- transition: all 0.2s ease;
155
- }
156
-
157
- .copy-button:hover {
158
- background: var(--pd-default-hover-col, #ffc857);
159
- color: var(--pd-on-secondary-col, #0a3a48);
160
- border-color: var(--pd-default-hover-col, #ffc857);
161
- }
162
-
163
- .copy-button:focus-visible {
164
- outline: 2px solid var(--pd-focus-ring-col, #067394);
165
- outline-offset: 2px;
166
- }
167
-
168
- .copy-button.copied {
169
- color: var(--pd-default-success-col, #348b11);
170
- border-color: var(--pd-default-success-col, #348b11);
171
- }
172
-
173
- .copy-icon {
174
- width: 14px;
175
- height: 14px;
176
- fill: currentColor;
148
+ .header-actions pd-button {
149
+ --pd-button-font-size: 0.75rem;
150
+ --pd-button-height: 1.75rem;
177
151
  }
178
152
 
179
153
  /* Code area */
@@ -250,6 +224,19 @@ class PdCodeSnippet extends LitElement {
250
224
  flex-shrink: 0;
251
225
  }
252
226
 
227
+ /* CodeMirror editor host */
228
+ .cm-host {
229
+ min-height: 120px;
230
+ }
231
+
232
+ .cm-host .cm-editor {
233
+ outline: none;
234
+ }
235
+
236
+ .cm-host .cm-editor.cm-focused {
237
+ outline: none;
238
+ }
239
+
253
240
  /* Hidden slot for extracting text content */
254
241
  .hidden-slot {
255
242
  display: none;
@@ -315,16 +302,33 @@ class PdCodeSnippet extends LitElement {
315
302
  }
316
303
  updated(changedProperties) {
317
304
  super.updated(changedProperties);
318
- if (changedProperties.has("code") || changedProperties.has("language") || changedProperties.has("_slotCode")) {
319
- this._highlightCode();
305
+ if (this._editing) {
306
+ this._initCodeMirror();
307
+ if (this._cmEditor && changedProperties.has("code")) {
308
+ const doc = this._cmEditor.state.doc.toString();
309
+ if (this.code !== doc) {
310
+ this._cmEditor.dispatch({
311
+ changes: { from: 0, to: doc.length, insert: this.code }
312
+ });
313
+ }
314
+ }
315
+ } else {
316
+ this._destroyCodeMirror();
317
+ if (changedProperties.has("code") || changedProperties.has("language") || changedProperties.has("_slotCode") || changedProperties.has("_editing")) {
318
+ this._highlightCode();
319
+ }
320
320
  }
321
321
  }
322
+ disconnectedCallback() {
323
+ super.disconnectedCallback();
324
+ this._destroyCodeMirror();
325
+ }
322
326
  render() {
323
327
  const codeContent = this.code || this._slotCode;
324
328
  const lineCount = codeContent.split("\n").length;
325
329
  return html`
326
330
  <div class="snippet-container">
327
- ${this.title || this.language !== "plain" ? html`
331
+ ${this.title || this.language !== "plain" || this.editable ? html`
328
332
  <div class="header">
329
333
  <div class="title-area">
330
334
  ${this.title ? html`<h4 class="title">${this.title}</h4>` : html`<span class="language-badge"
@@ -333,41 +337,38 @@ class PdCodeSnippet extends LitElement {
333
337
  </div>
334
338
  <div class="header-actions">
335
339
  ${this.title && this.language !== "plain" ? html`<span class="language-badge">${this.language}</span>` : nothing}
336
- <button
337
- class="copy-button ${this._copied ? "copied" : ""}"
338
- @click=${this._copyToClipboard}
339
- aria-label="Copy code to clipboard"
340
- >
341
- ${this._copied ? html`
342
- <svg class="copy-icon" viewBox="0 0 24 24">
343
- <path
344
- d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"
345
- />
346
- </svg>
347
- Copied
348
- ` : html`
349
- <svg class="copy-icon" viewBox="0 0 24 24">
350
- <path
351
- d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"
352
- />
353
- </svg>
354
- Copy
355
- `}
356
- </button>
340
+ ${this.editable ? html`
341
+ <pd-button
342
+ outline
343
+ text=""
344
+ icon="${pdIcons.ICON_EDIT_NEW}"
345
+ icon-label="${this._editing ? "Vorschau" : "Bearbeiten"}"
346
+ @button-clicked=${this._toggleEditing}
347
+ ></pd-button>
348
+ ` : nothing}
349
+ <pd-button
350
+ outline
351
+ text=""
352
+ icon="${pdIcons.ICON_COPY}"
353
+ icon-label="Code kopieren"
354
+ @button-clicked=${this._copyToClipboard}
355
+ ></pd-button>
357
356
  </div>
358
357
  </div>
359
358
  ` : nothing}
360
359
 
361
360
  <div class="code-wrapper">
362
- ${this.showLineNumbers ? html`
363
- <div class="line-numbers" aria-hidden="true">
364
- ${Array.from(
361
+ ${this._editing ? html`<div class="cm-host"></div>` : html`
362
+ ${this.showLineNumbers ? html`
363
+ <div class="line-numbers" aria-hidden="true">
364
+ ${Array.from(
365
365
  { length: lineCount },
366
366
  (_, i) => html`${i + 1}<br />`
367
367
  )}
368
- </div>
369
- ` : nothing}
370
- <pre><code id="code-block"></code></pre>
368
+ </div>
369
+ ` : nothing}
370
+ <pre><code id="code-block"></code></pre>
371
+ `}
371
372
  </div>
372
373
 
373
374
  ${this.url ? html`
@@ -466,6 +467,46 @@ class PdCodeSnippet extends LitElement {
466
467
  console.error("Failed to copy code:", err);
467
468
  }
468
469
  }
470
+ /**
471
+ * Toggle between view and edit mode.
472
+ */
473
+ _toggleEditing() {
474
+ this._editing = !this._editing;
475
+ }
476
+ /**
477
+ * Lazy-initialize CodeMirror editor.
478
+ */
479
+ async _initCodeMirror() {
480
+ if (this._cmInitialized || !this._cmHost) return;
481
+ this._cmInitialized = true;
482
+ const { createCodeMirrorEditor } = await import('./codemirror-setup.js');
483
+ const codeContent = this.code || this._slotCode;
484
+ this._cmEditor = createCodeMirrorEditor({
485
+ parent: this._cmHost,
486
+ code: codeContent,
487
+ language: this.language,
488
+ onChange: (newCode) => {
489
+ this.code = newCode;
490
+ this.dispatchEvent(
491
+ new CustomEvent("pd-code-change", {
492
+ detail: { code: newCode },
493
+ bubbles: true,
494
+ composed: true
495
+ })
496
+ );
497
+ }
498
+ });
499
+ }
500
+ /**
501
+ * Destroy CodeMirror editor instance.
502
+ */
503
+ _destroyCodeMirror() {
504
+ if (this._cmEditor) {
505
+ this._cmEditor.destroy();
506
+ this._cmEditor = void 0;
507
+ this._cmInitialized = false;
508
+ }
509
+ }
469
510
  /**
470
511
  * Format URL for display (truncate if too long).
471
512
  */
@@ -494,11 +535,20 @@ __decorateClass([
494
535
  __decorateClass([
495
536
  property({ type: Boolean })
496
537
  ], PdCodeSnippet.prototype, "showLineNumbers");
538
+ __decorateClass([
539
+ property({ type: Boolean })
540
+ ], PdCodeSnippet.prototype, "editable");
541
+ __decorateClass([
542
+ state()
543
+ ], PdCodeSnippet.prototype, "_editing");
497
544
  __decorateClass([
498
545
  state()
499
546
  ], PdCodeSnippet.prototype, "_copied");
500
547
  __decorateClass([
501
548
  state()
502
549
  ], PdCodeSnippet.prototype, "_slotCode");
550
+ __decorateClass([
551
+ query(".cm-host")
552
+ ], PdCodeSnippet.prototype, "_cmHost");
503
553
 
504
554
  export { PdCodeSnippet };
@@ -0,0 +1,10 @@
1
+ import { EditorView } from '@codemirror/view';
2
+ import { CodeLanguage } from './PdCodeSnippet.js';
3
+ export interface CodeMirrorConfig {
4
+ parent: HTMLElement;
5
+ code: string;
6
+ language: CodeLanguage;
7
+ onChange: (code: string) => void;
8
+ }
9
+ export declare function createCodeMirrorEditor(config: CodeMirrorConfig): EditorView;
10
+ //# sourceMappingURL=codemirror-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codemirror-setup.d.ts","sourceRoot":"","sources":["../../src/pd-code-snippet/codemirror-setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,UAAU,EAKX,MAAM,kBAAkB,CAAC;AAgB1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA2EvD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CA4B3E"}
@@ -0,0 +1,101 @@
1
+ import { EditorView, lineNumbers, highlightActiveLine, highlightActiveLineGutter, keymap } from '../node_modules/.pnpm/@codemirror_view@6.40.0/node_modules/@codemirror/view/dist/index.js';
2
+ import { EditorState } from '../node_modules/.pnpm/@codemirror_state@6.6.0/node_modules/@codemirror/state/dist/index.js';
3
+ import { bracketMatching, indentOnInput, syntaxHighlighting, defaultHighlightStyle } from '../node_modules/.pnpm/@codemirror_language@6.12.3/node_modules/@codemirror/language/dist/index.js';
4
+ import { html } from '../node_modules/.pnpm/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js';
5
+ import { javascript } from '../node_modules/.pnpm/@codemirror_lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js';
6
+ import { css } from '../node_modules/.pnpm/@codemirror_lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js';
7
+ import { json } from '../node_modules/.pnpm/@codemirror_lang-json@6.0.2/node_modules/@codemirror/lang-json/dist/index.js';
8
+ import { python } from '../node_modules/.pnpm/@codemirror_lang-python@6.2.1/node_modules/@codemirror/lang-python/dist/index.js';
9
+ import { java } from '../node_modules/.pnpm/@codemirror_lang-java@6.0.2/node_modules/@codemirror/lang-java/dist/index.js';
10
+ import { markdown } from '../node_modules/.pnpm/@codemirror_lang-markdown@6.5.0/node_modules/@codemirror/lang-markdown/dist/index.js';
11
+
12
+ const LANGUAGE_MAP = {
13
+ html: () => html(),
14
+ javascript: () => javascript(),
15
+ typescript: () => javascript({ typescript: true }),
16
+ css: () => css(),
17
+ json: () => json(),
18
+ python: () => python(),
19
+ java: () => java(),
20
+ markdown: () => markdown()
21
+ };
22
+ const pdTheme = EditorView.theme({
23
+ "&": {
24
+ fontSize: "var(--_font-size, 0.875rem)",
25
+ fontFamily: "var(--_font-family, 'Fira Code', 'Consolas', 'Monaco', monospace)",
26
+ backgroundColor: "transparent"
27
+ },
28
+ ".cm-content": {
29
+ caretColor: "var(--_text-col, #353738)",
30
+ color: "var(--_text-col, #353738)",
31
+ lineHeight: "var(--_line-height, 1.5)",
32
+ padding: "0",
33
+ fontFamily: "inherit"
34
+ },
35
+ ".cm-cursor": {
36
+ borderLeftColor: "var(--_text-col, #353738)"
37
+ },
38
+ ".cm-gutters": {
39
+ backgroundColor: "transparent",
40
+ color: "var(--_line-number-col, #6b7280)",
41
+ border: "none",
42
+ paddingRight: "0.5rem",
43
+ fontFamily: "inherit",
44
+ fontSize: "inherit"
45
+ },
46
+ ".cm-activeLineGutter": {
47
+ backgroundColor: "transparent",
48
+ color: "var(--_text-col, #353738)"
49
+ },
50
+ ".cm-activeLine": {
51
+ backgroundColor: "rgba(0, 0, 0, 0.04)"
52
+ },
53
+ ".cm-selectionBackground": {
54
+ backgroundColor: "rgba(6, 115, 148, 0.15) !important"
55
+ },
56
+ "&.cm-focused .cm-selectionBackground": {
57
+ backgroundColor: "rgba(6, 115, 148, 0.2) !important"
58
+ },
59
+ ".cm-scroller": {
60
+ overflow: "auto",
61
+ fontFamily: "inherit"
62
+ }
63
+ });
64
+ const tabBinding = keymap.of([
65
+ {
66
+ key: "Tab",
67
+ run: (view) => {
68
+ view.dispatch(view.state.replaceSelection(" "));
69
+ return true;
70
+ }
71
+ }
72
+ ]);
73
+ function createCodeMirrorEditor(config) {
74
+ const extensions = [
75
+ pdTheme,
76
+ lineNumbers(),
77
+ highlightActiveLine(),
78
+ highlightActiveLineGutter(),
79
+ bracketMatching(),
80
+ indentOnInput(),
81
+ syntaxHighlighting(defaultHighlightStyle),
82
+ tabBinding,
83
+ EditorView.lineWrapping,
84
+ EditorView.updateListener.of((update) => {
85
+ if (update.docChanged) {
86
+ config.onChange(update.state.doc.toString());
87
+ }
88
+ })
89
+ ];
90
+ const langFactory = LANGUAGE_MAP[config.language];
91
+ if (langFactory) extensions.push(langFactory());
92
+ return new EditorView({
93
+ state: EditorState.create({
94
+ doc: config.code,
95
+ extensions
96
+ }),
97
+ parent: config.parent
98
+ });
99
+ }
100
+
101
+ export { createCodeMirrorEditor };
@@ -2,11 +2,30 @@ import { LitElement, CSSResultGroup } from 'lit';
2
2
  /**
3
3
  * @tagname pd-more-info
4
4
  *
5
- * `pd-more-info` Komponente zeigt zuerst einen kompakten Text (Slot `small-view`)
6
- * und erlaubt es dem Nutzer, bei Klick weitere Informationen (Slot `large-view`) einzublenden.
5
+ * `pd-more-info` Komponente zeigt zuerst einen kompakten Text und erlaubt es
6
+ * dem Nutzer, bei Klick weitere Informationen einzublenden.
7
7
  *
8
- * @slot small-view - Compact text block shown in the initial collapsed view.
9
- * @slot large-view - Extended text block revealed after clicking "More information".
8
+ * ## Modi
9
+ *
10
+ * ### Auto-Truncation (empfohlen)
11
+ * Content in den Default-Slot legen und via `maxLength` oder `maxLines` kürzen:
12
+ * ```html
13
+ * <pd-more-info max-length="120">Langer Text…</pd-more-info>
14
+ * <pd-more-info max-lines="3">Mehrzeiliger Text…</pd-more-info>
15
+ * ```
16
+ *
17
+ * ### Named Slots (Legacy / Rich-Content)
18
+ * Für vollständige Kontrolle über Kurz- und Langansicht:
19
+ * ```html
20
+ * <pd-more-info>
21
+ * <span slot="small-view">Kurz</span>
22
+ * <span slot="large-view"><ul><li>Rich</li></ul></span>
23
+ * </pd-more-info>
24
+ * ```
25
+ *
26
+ * @slot - Default slot for auto-truncation content (used with `maxLength` or `maxLines`).
27
+ * @slot small-view - Compact text block shown in the initial collapsed view (legacy mode).
28
+ * @slot large-view - Extended text block revealed after clicking "More information" (legacy mode).
10
29
  *
11
30
  * @cssprop --pd-default-font-content-col - Textfarbe
12
31
  * @cssprop --pd-default-font-content-size - Textgröße
@@ -18,14 +37,39 @@ import { LitElement, CSSResultGroup } from 'lit';
18
37
  * @cssprop --pd-default-font-link-col-hover - Hoverfarbe für Link
19
38
  */
20
39
  export declare class PdMoreInfo extends LitElement {
40
+ /**
41
+ * Maximum number of characters before truncation.
42
+ * Uses word-boundary truncation with ellipsis.
43
+ * Takes precedence over `maxLines`.
44
+ */
45
+ maxLength?: number;
46
+ /**
47
+ * Maximum number of visible lines before truncation (CSS line-clamp).
48
+ * Ignored when `maxLength` is set.
49
+ */
50
+ maxLines?: number;
21
51
  /**
22
52
  * When set, disables the automatic scroll-into-view when collapsing.
23
53
  */
24
54
  noAutoScroll: boolean;
25
55
  /** @ignore */
26
56
  private _lessInfo;
57
+ /** @ignore */
58
+ private _fullText;
59
+ /** @ignore */
60
+ private _isOverflowing;
27
61
  static styles: CSSResultGroup;
28
62
  render(): import('lit').TemplateResult<1>;
63
+ updated(): void;
64
+ private _renderMaxLength;
65
+ private _truncateText;
66
+ private _onSlotChange;
67
+ private _renderMaxLines;
68
+ private _onMaxLinesSlotChange;
69
+ private _checkOverflow;
70
+ private _renderLegacy;
71
+ private _moreLink;
72
+ private _lessLink;
29
73
  private _onKeyDown;
30
74
  private _showMoreInfo;
31
75
  private _showLessInfo;
@@ -1 +1 @@
1
- {"version":3,"file":"PdMoreInfo.d.ts","sourceRoot":"","sources":["../../src/pd-more-info/PdMoreInfo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;AAI5D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,UAAW,SAAQ,UAAU;IACxC;;OAEG;IAEH,YAAY,UAAS;IAErB,cAAc;IAEd,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAgB,MAAM,EAAE,cAAc,CAmCpC;IAEO,MAAM;IA8Bf,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;CAatB"}
1
+ {"version":3,"file":"PdMoreInfo.d.ts","sourceRoot":"","sources":["../../src/pd-more-info/PdMoreInfo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAsB,cAAc,EAAE,MAAM,KAAK,CAAC;AAIrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBACa,UAAW,SAAQ,UAAU;IACxC;;;;OAIG;IAEH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IAEH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IAEH,YAAY,UAAS;IAErB,cAAc;IAEd,OAAO,CAAC,SAAS,CAAQ;IAEzB,cAAc;IAEd,OAAO,CAAC,SAAS,CAAM;IAEvB,cAAc;IAEd,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAgB,MAAM,EAAE,cAAc,CA6CpC;IAEO,MAAM;IAUN,OAAO;IAUhB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;CAYtB"}