@kyndryl-design-system/shidoka-applications 2.46.0 → 2.46.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.
@@ -7,331 +7,326 @@
7
7
  $shidoka-code-view-background: var(--kd-color-code-view-background);
8
8
 
9
9
  .shidoka-syntax-theme {
10
- background: $shidoka-code-view-background;
11
- font-weight: 500;
12
-
13
- &--dark {
14
- color-scheme: dark;
15
- }
16
-
17
- &--light {
18
- color-scheme: light;
19
- }
10
+ background: $shidoka-code-view-background;
11
+ font-weight: 500;
20
12
 
21
- code[class*="language-"],
22
- pre[class*="language-"] {
23
- background: $shidoka-code-view-background;
24
- color: var(--kd-color-code-view-default);
25
- font-family: var(--kd-font-family-code-view);
13
+ &--dark {
14
+ color-scheme: dark;
15
+ }
26
16
 
27
- -moz-tab-size: 4;
28
- -o-tab-size: 4;
29
- tab-size: 4;
17
+ &--light {
18
+ color-scheme: light;
19
+ }
30
20
 
31
- -webkit-hyphens: none;
32
- -moz-hyphens: none;
33
- -ms-hyphens: none;
34
- hyphens: none;
21
+ code[class*='language-'],
22
+ pre[class*='language-'] {
23
+ background: $shidoka-code-view-background;
24
+ color: var(--kd-color-code-view-default);
25
+ font-family: var(--kd-font-family-code-view);
26
+
27
+ -moz-tab-size: 4;
28
+ -o-tab-size: 4;
29
+ tab-size: 4;
30
+
31
+ -webkit-hyphens: none;
32
+ -moz-hyphens: none;
33
+ -ms-hyphens: none;
34
+ hyphens: none;
35
+ }
36
+
37
+ pre[class*='language-']::selection,
38
+ pre[class*='language-'] ::selection,
39
+ code[class*='language-']::selection,
40
+ code[class*='language-'] ::selection {
41
+ text-shadow: none;
42
+ background: inherit;
43
+ }
44
+
45
+ pre[class*='language-']::-moz-selection,
46
+ pre[class*='language-'] ::-moz-selection,
47
+ code[class*='language-']::-moz-selection,
48
+ code[class*='language-'] ::-moz-selection {
49
+ text-shadow: none;
50
+ background: inherit;
51
+ }
52
+
53
+ @media print {
54
+ code[class*='language-'],
55
+ pre[class*='language-'] {
56
+ text-shadow: none;
35
57
  }
58
+ }
36
59
 
37
- pre[class*="language-"]::selection,
38
- pre[class*="language-"] ::selection,
39
- code[class*="language-"]::selection,
40
- code[class*="language-"] ::selection {
41
- text-shadow: none;
42
- background: inherit;
60
+ .token {
61
+ &.atrule {
62
+ color: var(--kd-color-code-view-atrule);
43
63
  }
44
64
 
45
- pre[class*="language-"]::-moz-selection,
46
- pre[class*="language-"] ::-moz-selection,
47
- code[class*="language-"]::-moz-selection,
48
- code[class*="language-"] ::-moz-selection {
49
- text-shadow: none;
50
- background: inherit;
65
+ &.attr-name {
66
+ color: var(--kd-color-code-viewattr-name);
51
67
  }
52
68
 
53
- @media print {
54
-
55
- code[class*="language-"],
56
- pre[class*="language-"] {
57
- text-shadow: none;
58
- }
69
+ &.attr-value {
70
+ color: var(--kd-color-code-view-attr-value);
59
71
  }
60
72
 
61
- .token {
62
- &.atrule {
63
- color: var(--kd-color-code-view-atrule);
64
- }
65
-
66
- &.attr-name {
67
- color: var(--kd-color-code-viewattr-name);
68
- }
69
-
70
- &.attr-value {
71
- color: var(--kd-color-code-view-attr-value);
72
- }
73
-
74
- &.boolean {
75
- color: var(--kd-color-code-view-boolean);
76
- }
77
-
78
- &.bold {
79
- font-weight: bold;
80
- }
81
-
82
- &.builtin {
83
- color: var(--kd-color-code-view-builtin);
84
- }
85
-
86
- &.cdata {
87
- color: var(--kd-color-code-view-cdata);
88
- }
89
-
90
- &.char {
91
- color: var(--kd-color-code-view-char);
92
- }
93
-
94
- &.class {
95
- color: var(--kd-color-code-view-class);
96
- }
97
-
98
- &.class-name {
99
- color: var(--kd-color-code-view-class-name);
100
- }
101
-
102
- &.comment {
103
- color: var(--kd-color-code-view-comment);
104
- }
105
-
106
- &.console {
107
- color: var(--kd-color-code-view-console);
108
- }
109
-
110
- &.constant {
111
- color: var(--kd-color-code-view-constant);
112
- }
113
-
114
- &.deleted {
115
- color: var(--kd-color-code-view-deleted);
116
- }
117
-
118
- &.doctype {
119
- color: var(--kd-color-code-view-doctype);
120
- }
121
-
122
- &.entity {
123
- color: var(--kd-color-code-view-entity);
124
- cursor: help;
125
- }
126
-
127
- &.function {
128
- color: var(--kd-color-code-view-function);
129
- }
130
-
131
- &.hexcode {
132
- color: var(--kd-color-code-view-hexcode);
133
- }
134
-
135
- &.id {
136
- color: var(--kd-color-code-view-id);
137
- }
138
-
139
- &.important {
140
- color: var(--kd-color-code-view-important);
141
- font-weight: bold;
142
- }
143
-
144
- &.inserted {
145
- color: var(--kd-color-code-view-inserted);
146
- }
147
-
148
- &.italic {
149
- font-style: italic;
150
- }
73
+ &.boolean {
74
+ color: var(--kd-color-code-view-boolean);
75
+ }
151
76
 
152
- &.keyword {
153
- color: var(--kd-color-code-view-keyword);
154
- }
77
+ &.bold {
78
+ font-weight: bold;
79
+ }
155
80
 
156
- &.language-javascript {
157
- color: var(--kd-color-code-language-javascript);
158
- }
81
+ &.builtin {
82
+ color: var(--kd-color-code-view-builtin);
83
+ }
159
84
 
160
- &.method {
161
- color: var(--kd-color-code-view-method);
162
- }
85
+ &.cdata {
86
+ color: var(--kd-color-code-view-cdata);
87
+ }
163
88
 
164
- &.namespace {
165
- opacity: 0.7;
166
- }
89
+ &.char {
90
+ color: var(--kd-color-code-view-char);
91
+ }
167
92
 
168
- &.number {
169
- color: var(--kd-color-code-view-number);
170
- }
93
+ &.class {
94
+ color: var(--kd-color-code-view-class);
95
+ }
171
96
 
172
- &.operator {
173
- color: var(--kd-color-code-view-operator);
174
- }
97
+ &.class-name {
98
+ color: var(--kd-color-code-view-class-name);
99
+ }
175
100
 
176
- &.parameter {
177
- color: var(--kd-color-code-view-parameter);
178
- }
101
+ &.comment {
102
+ color: var(--kd-color-code-view-comment);
103
+ }
179
104
 
180
- &.prolog {
181
- color: var(--kd-color-code-view-prolog);
182
- }
105
+ &.console {
106
+ color: var(--kd-color-code-view-console);
107
+ }
183
108
 
184
- &.property {
185
- color: var(--kd-color-code-view-property);
186
- }
109
+ &.constant {
110
+ color: var(--kd-color-code-view-constant);
111
+ }
187
112
 
188
- &.pseudo-class {
189
- color: var(--kd-color-code-view-pseudo-class);
190
- }
113
+ &.deleted {
114
+ color: var(--kd-color-code-view-deleted);
115
+ }
191
116
 
192
- &.pseudo-element {
193
- color: var(--kd-color-code-view-pseudo-element);
194
- }
117
+ &.doctype {
118
+ color: var(--kd-color-code-view-doctype);
119
+ }
195
120
 
196
- &.punctuation {
197
- color: var(--kd-color-code-view-punctuation);
198
- }
121
+ &.entity {
122
+ color: var(--kd-color-code-view-entity);
123
+ cursor: help;
124
+ }
199
125
 
200
- &.regex {
201
- color: var(--kd-color-code-view-regex);
202
- }
126
+ &.function {
127
+ color: var(--kd-color-code-view-function);
128
+ }
203
129
 
204
- &.selector {
205
- color: var(--kd-color-code-view-selector);
206
- }
130
+ &.hexcode {
131
+ color: var(--kd-color-code-view-hexcode);
132
+ }
207
133
 
208
- &.string,
209
- &.string-literal {
210
- color: var(--kd-color-code-view-string);
211
- }
134
+ &.id {
135
+ color: var(--kd-color-code-view-id);
136
+ }
212
137
 
213
- &.symbol {
214
- color: var(--kd-color-code-view-symbol);
215
- }
138
+ &.important {
139
+ color: var(--kd-color-code-view-important);
140
+ font-weight: bold;
141
+ }
216
142
 
217
- &.tag {
218
- color: var(--kd-color-code-view-tag);
219
- }
143
+ &.inserted {
144
+ color: var(--kd-color-code-view-inserted);
145
+ }
220
146
 
221
- &.unit {
222
- color: var(--kd-color-code-view-unit);
223
- }
147
+ &.italic {
148
+ font-style: italic;
149
+ }
224
150
 
225
- &.url {
226
- color: var(--kd-color-code-view-url);
227
- }
151
+ &.keyword {
152
+ color: var(--kd-color-code-view-keyword);
153
+ }
228
154
 
229
- &.variable {
230
- color: var(--kd-color-code-view-variable);
231
- }
155
+ &.language-javascript {
156
+ color: var(--kd-color-code-language-javascript);
232
157
  }
233
158
 
234
- .token.string,
235
- .style .token.string {
236
- color: var(--kd-color-code-view-string)
159
+ &.method {
160
+ color: var(--kd-color-code-view-method);
237
161
  }
238
162
 
239
- .language-css .token.string {
240
- color: var(--kd-color-code-view-languagestring);
163
+ &.namespace {
164
+ opacity: 0.7;
241
165
  }
242
166
 
243
- /// scrollbar styles
244
- &.single-line .code-snippet-wrapper {
245
- pre {
246
- background: $shidoka-code-view-background !important;
167
+ &.number {
168
+ color: var(--kd-color-code-view-number);
169
+ }
247
170
 
248
- scrollbar-color: light-dark(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0.3)) light-dark(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.1));
171
+ &.operator {
172
+ color: var(--kd-color-code-view-operator);
173
+ }
249
174
 
250
- &::-webkit-scrollbar {
251
- width: 8px;
252
- }
175
+ &.parameter {
176
+ color: var(--kd-color-code-view-parameter);
177
+ }
253
178
 
254
- &::-webkit-scrollbar-thumb {
255
- background: light-dark(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0.3));
256
- border-radius: 4px;
257
- }
179
+ &.prolog {
180
+ color: var(--kd-color-code-view-prolog);
181
+ }
258
182
 
259
- &::-webkit-scrollbar-thumb:hover {
260
- background: light-dark(rgba(0, 0, 0, 0.5), rgba(255, 255, 255, 0.5));
261
- }
183
+ &.property {
184
+ color: var(--kd-color-code-view-property);
185
+ }
262
186
 
263
- &::-webkit-scrollbar-track {
264
- background: light-dark(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.1));
265
- border-radius: 4px;
266
- }
267
- }
187
+ &.pseudo-class {
188
+ color: var(--kd-color-code-view-pseudo-class);
268
189
  }
269
190
 
270
- &.multi-line .code-snippet-wrapper {
271
- pre {
272
- scrollbar-color: light-dark(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0.3)) light-dark(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.1));
191
+ &.pseudo-element {
192
+ color: var(--kd-color-code-view-pseudo-element);
193
+ }
273
194
 
274
- &::-webkit-scrollbar {
275
- width: 8px;
276
- }
195
+ &.punctuation {
196
+ color: var(--kd-color-code-view-punctuation);
197
+ }
277
198
 
278
- &::-webkit-scrollbar-track {
279
- background: light-dark(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.1));
280
- border-radius: 4px;
281
- }
199
+ &.regex {
200
+ color: var(--kd-color-code-view-regex);
201
+ }
282
202
 
283
- &::-webkit-scrollbar-thumb {
284
- background: light-dark(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0.3));
285
- border-radius: 4px;
286
- }
203
+ &.selector {
204
+ color: var(--kd-color-code-view-selector);
205
+ }
287
206
 
288
- &::-webkit-scrollbar-thumb:hover {
289
- background: light-dark(rgba(0, 0, 0, 0.5), rgba(255, 255, 255, 0.5));
290
- }
291
- }
207
+ &.string,
208
+ &.string-literal {
209
+ color: var(--kd-color-code-view-string);
292
210
  }
293
211
 
294
- .code-snippet-wrapper {
295
- background: $shidoka-code-view-background;
212
+ &.symbol {
213
+ color: var(--kd-color-code-view-symbol);
296
214
  }
297
215
 
298
- .code-view__copy-button {
299
- display: inline-flex;
300
- align-items: center;
301
- justify-content: center;
302
- padding: 0.5rem;
216
+ &.tag {
217
+ color: var(--kd-color-code-view-tag);
218
+ }
303
219
 
304
- .copy-icon,
305
- .copy-text {
306
- display: inline-flex;
307
- align-items: center;
308
- justify-content: center;
309
- }
220
+ &.unit {
221
+ color: var(--kd-color-code-view-unit);
222
+ }
310
223
 
311
- .copy-icon {
312
- color: var(--kd-color-text-link-level-default);
313
- fill: var(--kd-color-text-link-level-default);
314
- }
224
+ &.url {
225
+ color: var(--kd-color-code-view-url);
226
+ }
315
227
 
316
- &.icon-only {
317
- padding: 8px;
318
- min-width: unset;
319
- }
228
+ &.variable {
229
+ color: var(--kd-color-code-view-variable);
320
230
  }
231
+ }
232
+
233
+ .token.string,
234
+ .style .token.string {
235
+ color: var(--kd-color-code-view-string);
236
+ }
237
+
238
+ .language-css .token.string {
239
+ color: var(--kd-color-code-view-languagestring);
240
+ }
241
+
242
+ /// scrollbar styles
243
+ &.single-line .code-snippet-wrapper {
244
+ pre {
245
+ background: $shidoka-code-view-background !important;
246
+
247
+ scrollbar-color: light-dark(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0.3))
248
+ light-dark(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.1));
249
+
250
+ &::-webkit-scrollbar {
251
+ width: 8px;
252
+ }
253
+
254
+ &::-webkit-scrollbar-thumb {
255
+ background: light-dark(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0.3));
256
+ border-radius: 4px;
257
+ }
258
+
259
+ &::-webkit-scrollbar-thumb:hover {
260
+ background: light-dark(rgba(0, 0, 0, 0.5), rgba(255, 255, 255, 0.5));
261
+ }
262
+
263
+ &::-webkit-scrollbar-track {
264
+ background: light-dark(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.1));
265
+ border-radius: 4px;
266
+ }
267
+ }
268
+ }
269
+
270
+ &.multi-line .code-snippet-wrapper {
271
+ pre {
272
+ scrollbar-color: light-dark(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0.3))
273
+ light-dark(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.1));
274
+
275
+ &::-webkit-scrollbar {
276
+ width: 8px;
277
+ }
278
+
279
+ &::-webkit-scrollbar-track {
280
+ background: light-dark(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.1));
281
+ border-radius: 4px;
282
+ }
283
+
284
+ &::-webkit-scrollbar-thumb {
285
+ background: light-dark(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0.3));
286
+ border-radius: 4px;
287
+ }
288
+
289
+ &::-webkit-scrollbar-thumb:hover {
290
+ background: light-dark(rgba(0, 0, 0, 0.5), rgba(255, 255, 255, 0.5));
291
+ }
292
+ }
293
+ }
321
294
 
322
- .code-view__expand-button {
295
+ .code-snippet-wrapper {
296
+ background: $shidoka-code-view-background;
297
+ }
298
+
299
+ .code-view__copy-button {
300
+ display: inline-flex;
301
+ align-items: center;
302
+ justify-content: center;
303
+ padding: 0.5rem;
304
+
305
+ .copy-icon,
306
+ .copy-text {
307
+ display: inline-flex;
308
+ align-items: center;
309
+ justify-content: center;
310
+ }
323
311
 
324
- .expand-icon {
325
- fill: var(--kd-color-text-level-tertiary);
326
- color: var(--kd-color-text-level-tertiary);
327
- }
312
+ &.icon-only {
313
+ padding: 8px;
314
+ min-width: unset;
328
315
  }
316
+ }
329
317
 
330
- .code-snippet-wrapper pre::selection,
331
- .code-snippet-wrapper pre *::selection,
332
- .code-snippet-wrapper pre::-moz-selection,
333
- .code-snippet-wrapper pre *::-moz-selection {
334
- background-color: light-dark(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0.3));
335
- color: inherit;
318
+ .code-view__expand-button {
319
+ .expand-icon {
320
+ fill: var(--kd-color-text-level-tertiary);
321
+ color: var(--kd-color-text-level-tertiary);
336
322
  }
323
+ }
324
+
325
+ .code-snippet-wrapper pre::selection,
326
+ .code-snippet-wrapper pre *::selection,
327
+ .code-snippet-wrapper pre::-moz-selection,
328
+ .code-snippet-wrapper pre *::-moz-selection {
329
+ background-color: light-dark(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0.3));
330
+ color: inherit;
331
+ }
337
332
  }
@@ -579,10 +579,6 @@ code.language-git:before {
579
579
  align-items: center;
580
580
  justify-content: center;
581
581
  }
582
- .shidoka-syntax-theme .code-view__copy-button .copy-icon {
583
- color: var(--kd-color-text-link-level-default);
584
- fill: var(--kd-color-text-link-level-default);
585
- }
586
582
  .shidoka-syntax-theme .code-view__copy-button.icon-only {
587
583
  padding: 8px;
588
584
  min-width: unset;
@@ -617,16 +613,16 @@ code.language-git:before {
617
613
  `}getContainerClasses(){return a({"code-view__container":!0,"single-line":this._isSingleLine,"multi-line":!this._isSingleLine,"copy-button-text-true":this.copyButtonText&&this.copyButtonText.length>0,"copy-button-text-false":!this.copyButtonText,"shidoka-syntax-theme":!0,"shidoka-syntax-theme--dark":"dark"===this.darkTheme,"shidoka-syntax-theme--light":"light"===this.darkTheme,"expanded-code-view":this.codeExpanded,"has-overflow":this.hasOverflow})}renderCopyButton(){return this.copyOptionVisible?d`
618
614
  <kyn-button
619
615
  class="code-view__copy-button"
620
- kind="tertiary"
616
+ kind="secondary"
621
617
  size="small"
622
618
  iconPosition="left"
623
619
  ?disabled=${this._copyState.copied}
624
620
  description=${n(this.copyButtonDescriptionAttr)}
625
621
  @click=${this.copyCode}
626
622
  >
627
- <span slot="icon" class="copy-icon"
628
- >${this._copyState.copied?t(p):t(g)}</span
629
- >
623
+ <span slot="icon" class="copy-icon">
624
+ ${this._copyState.copied?t(p):t(g)}
625
+ </span>
630
626
  ${this._copyState.text?d`<span class="copy-text">${this._copyState.text}</span>`:null}
631
627
  </kyn-button>
632
628
  `:null}renderExpandButton(){return!this.codeViewExpandable||!this.hasOverflow&&this._codeFitsContainerOnLoad?null:d`
@@ -1 +1 @@
1
- {"version":3,"file":"blockCodeView.js","sources":["../../../../src/components/reusable/blockCodeView/blockCodeView.ts"],"sourcesContent":["import { unsafeSVG } from 'lit-html/directives/unsafe-svg.js';\nimport { html, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { deepmerge } from 'deepmerge-ts';\n\nimport Prism from 'prismjs';\nimport 'prismjs/plugins/autoloader/prism-autoloader';\nimport 'prismjs/plugins/line-numbers/prism-line-numbers';\nimport 'prismjs-components-importer';\nPrism.plugins.autoloader.languages_path = 'node_modules/prismjs/components/';\n\nimport copyIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/20/copy.svg';\nimport checkmarkIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/20/checkmark.svg';\nimport chevronDown from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/chevron-down.svg';\n\nimport '../button';\n\nimport BlockCodeViewStyles from './blockCodeView.scss';\nimport ShidokaSyntaxTheme from '../../../common/scss/shidoka-syntax-theme.scss';\n\ninterface LanguageMatch {\n language: string;\n relevance: number;\n}\n\nconst _defaultTextStrings = {\n collapsed: 'Collapsed',\n expanded: 'Expanded',\n};\n\nconst LANGUAGE_SPECIFIC_TOKENS: Record<string, string[]> = {\n markup: ['<', '>', '/', 'div', 'span', 'class', 'id'],\n html: ['<', '>', '/', 'div', 'span', 'class', 'id'],\n css: ['{', '}', ':', ';', '#', '.'],\n javascript: ['function', 'const', 'let', 'var', '=>'],\n typescript: ['interface', 'type', ':', 'as'],\n python: ['def', 'import', 'from', 'class'],\n java: ['public', 'private', 'class', 'void'],\n};\n\n/**\n * `<kyn-block-code-view>` component to display `<code>` snippets as standalone single-/multi-line block elements.\n * @fires on-copy - Emits when the copy button is clicked.\n */\n@customElement('kyn-block-code-view')\nexport class BlockCodeView extends LitElement {\n static override styles = [BlockCodeViewStyles, ShidokaSyntaxTheme];\n\n /** Sets background and text theming. */\n @property({ type: String })\n darkTheme: 'light' | 'dark' | 'default' = 'default';\n\n /** If empty string, attempt language syntax auto-detection. Setting a value will override auto-detection and manually configure desired language. */\n @property({ type: String })\n language = '';\n\n /** Optionally display line numbers. */\n @property({ type: Boolean })\n lineNumbers = false;\n\n /** Sets the starting line number when lineNumbers is true. Must be a positive integer. */\n @property({ type: Number })\n startLineNumber = 1;\n\n /** Customizable max-height setting for code snippet container. */\n @property({ type: Number })\n maxHeight: number | null = null;\n\n /** Optionally displayed label above code snippet container. */\n @property({ type: String })\n codeViewLabel = '';\n\n /** Optionally display button to copy code snippet. */\n @property({ type: Boolean })\n copyOptionVisible = false;\n\n /** Optionally display button to expand code snippet container. */\n @property({ type: Boolean })\n codeViewExpandable = false;\n\n /** Sets copy code button text (optional). */\n @property({ type: String })\n copyButtonText = '';\n\n /** Sets copy button description attr value. */\n @property({ type: String })\n copyButtonDescriptionAttr = '';\n\n /** Sets code snippet for display -- NOTE: original formatting is preserved. */\n @property({ type: String })\n codeSnippet = '';\n\n /** Text string customization. */\n @property({ type: Object })\n textStrings = _defaultTextStrings;\n\n /** Internal text strings.\n * @internal\n */\n @state()\n private _textStrings = _defaultTextStrings;\n\n /** Auto-detect whether code snippet is single line (boolean) -- styled accordingly (boolean).\n * @internal\n */\n @state()\n private _isSingleLine = false;\n\n /** Auto-detect whether code snippet exceeds the max-height allowance (boolean).\n * @internal\n */\n @state()\n private hasOverflow = false;\n\n /** Value indicating whether overflow code sample is expanded (boolean).\n * @internal\n */\n @state()\n private codeExpanded = false;\n\n /** Copy key-values to communicate copy button styling and state.\n * @internal\n */\n @state()\n private _copyState = { copied: false, text: '' };\n\n /** Detected language for the code snippet.\n * @internal\n */\n @state()\n private _effectiveLanguage = '';\n\n /** Code snippet fits into the height of the container -- no expansion needed.\n * @internal\n */\n @state()\n private _codeFitsContainerOnLoad = true;\n\n /** If expandable -- height of the container when fully expanded.\n * @internal\n */\n @state()\n private _expandedHeight: number | null = null;\n\n override updated(changedProperties: Map<string, unknown>) {\n if (changedProperties.has('darkTheme')) this.requestUpdate();\n\n const codeChanged =\n changedProperties.has('codeSnippet') ||\n changedProperties.has('language') ||\n changedProperties.has('maxHeight');\n\n // race condition guard: force complete re-highlighting when line numbers toggle\n if (changedProperties.has('lineNumbers')) {\n setTimeout(() => {\n this.highlightCode();\n this.checkOverflow();\n }, 0);\n } else if (codeChanged) {\n this.highlightCode();\n this.checkOverflow();\n }\n\n if (changedProperties.has('copyButtonText')) {\n this._copyState = { ...this._copyState, text: this.copyButtonText };\n }\n\n if (changedProperties.has('startLineNumber')) {\n // Ensure startLineNumber is at least 1\n if (this.startLineNumber < 1) {\n this.startLineNumber = 1;\n }\n this.highlightCode();\n }\n\n super.updated(changedProperties);\n }\n\n override render() {\n const containerStyle = `${this.getContainerStyle()};`;\n return html`\n ${this.codeViewLabel\n ? html`<div class=\"code-view__label\">\n <label>${this.codeViewLabel}</label>\n </div>`\n : null}\n <div class=\"${this.getContainerClasses()}\" style=\"${containerStyle}\">\n <div class=\"code-snippet-wrapper\">\n <pre\n @keydown=${this.handleKeypress}\n role=\"region\"\n class=${this.lineNumbers && !this._isSingleLine\n ? 'line-numbers'\n : 'no-line-numbers'}\n data-start=${ifDefined(\n this.lineNumbers ? Math.max(1, this.startLineNumber) : undefined\n )}\n >\n <code tabindex=\"0\" class=\"language-${this\n ._effectiveLanguage}\"></code>\n </pre>\n </div>\n ${this.renderCopyButton()} ${this.renderExpandButton()}\n </div>\n `;\n }\n\n private getContainerClasses() {\n return classMap({\n 'code-view__container': true,\n 'single-line': this._isSingleLine,\n 'multi-line': !this._isSingleLine,\n 'copy-button-text-true':\n this.copyButtonText && this.copyButtonText.length > 0,\n 'copy-button-text-false': !this.copyButtonText,\n 'shidoka-syntax-theme': true,\n 'shidoka-syntax-theme--dark': this.darkTheme === 'dark',\n 'shidoka-syntax-theme--light': this.darkTheme === 'light',\n 'expanded-code-view': this.codeExpanded,\n 'has-overflow': this.hasOverflow,\n });\n }\n\n private renderCopyButton() {\n if (!this.copyOptionVisible) return null;\n return html`\n <kyn-button\n class=\"code-view__copy-button\"\n kind=\"tertiary\"\n size=\"small\"\n iconPosition=\"left\"\n ?disabled=${this._copyState.copied}\n description=${ifDefined(this.copyButtonDescriptionAttr)}\n @click=${this.copyCode}\n >\n <span slot=\"icon\" class=\"copy-icon\"\n >${this._copyState.copied\n ? unsafeSVG(checkmarkIcon)\n : unsafeSVG(copyIcon)}</span\n >\n ${this._copyState.text\n ? html`<span class=\"copy-text\">${this._copyState.text}</span>`\n : null}\n </kyn-button>\n `;\n }\n\n private renderExpandButton() {\n if (\n !this.codeViewExpandable ||\n (!this.hasOverflow && this._codeFitsContainerOnLoad)\n )\n return null;\n return html`\n <kyn-button\n class=\"code-view__expand-button\"\n kind=\"tertiary\"\n size=\"small\"\n iconPosition=\"left\"\n outlineOnly\n description=${this.codeExpanded\n ? this._textStrings.expanded\n : this._textStrings.collapsed}\n @click=${this.expandCodeView}\n >\n <span slot=\"icon\" class=\"expand-icon\">${unsafeSVG(chevronDown)}</span>\n </kyn-button>\n `;\n }\n\n override willUpdate(changedProps: Map<string, unknown>) {\n if (changedProps.has('codeExpanded')) {\n this._textStrings = deepmerge(_defaultTextStrings, this.textStrings);\n }\n }\n\n private highlightCode() {\n const processedCode = this.removeLeadingWhitespace(this.codeSnippet);\n this._isSingleLine = processedCode.trim().split('\\n').length === 1;\n this._effectiveLanguage =\n this.language || this.detectLanguage(processedCode);\n\n const preEl = this.shadowRoot?.querySelector('pre');\n const codeEl = preEl?.querySelector('code');\n\n if (!codeEl || !preEl) return;\n\n const existingLineNumbers = preEl.querySelector('.line-numbers-rows');\n if (existingLineNumbers) {\n existingLineNumbers.remove();\n }\n\n codeEl.className = `language-${this._effectiveLanguage}`;\n codeEl.textContent = processedCode;\n\n if (this.lineNumbers && !this._isSingleLine) {\n preEl.classList.add('line-numbers');\n preEl.setAttribute('data-start', String(this.startLineNumber));\n } else {\n preEl.classList.remove('line-numbers');\n preEl.removeAttribute('data-start');\n }\n\n setTimeout(() => {\n Prism.highlightElement(codeEl);\n\n setTimeout(() => {\n if (this.lineNumbers) {\n try {\n if ((Prism as any).plugins?.lineNumbers) {\n if (!preEl.querySelector('.line-numbers-rows')) {\n (Prism as any).hooks.run('complete', { element: codeEl });\n (Prism as any).plugins.lineNumbers.resize(preEl);\n }\n }\n\n if (!preEl.querySelector('.line-numbers-rows')) {\n this.addLineNumbers(preEl, codeEl);\n }\n } catch (e) {\n console.warn('Line numbers initialization error:', e);\n this.addLineNumbers(preEl, codeEl);\n }\n }\n\n this.checkOverflow();\n }, 50);\n }, 0);\n }\n\n private addLineNumbers(preEl: HTMLElement, codeEl: HTMLElement) {\n if (preEl.querySelector('.line-numbers-rows')) return;\n\n const linesCount = (codeEl.textContent || '').split('\\n').length;\n const startLineNumber = Math.max(\n 1,\n parseInt(preEl.getAttribute('data-start') || '1', 10)\n );\n\n const lineNumbersWrapper = document.createElement('span');\n lineNumbersWrapper.className = 'line-numbers-rows';\n\n const spans = Array(linesCount).fill('<span></span>').join('');\n lineNumbersWrapper.innerHTML = spans;\n\n preEl.appendChild(lineNumbersWrapper);\n preEl.style.counterReset = `linenumber ${startLineNumber - 1}`;\n }\n\n private detectLanguage(code: string): string {\n if (!code.trim()) return 'plaintext';\n\n const languages = [\n 'markup',\n 'html',\n 'xml',\n 'svg',\n 'mathml',\n 'css',\n 'javascript',\n 'typescript',\n 'python',\n 'java',\n 'c',\n 'cpp',\n ];\n let bestMatch: LanguageMatch = { language: 'plaintext', relevance: 0 };\n\n for (const lang of languages) {\n if (Prism.languages[lang]) {\n const tokens = Prism.tokenize(code, Prism.languages[lang]);\n const relevance = this.calculateRelevance(tokens, lang);\n if (relevance > bestMatch.relevance) {\n bestMatch = { language: lang, relevance };\n }\n }\n }\n\n return bestMatch.language === 'markup'\n ? this.determineMarkupLanguage(code)\n : bestMatch.language;\n }\n\n private calculateRelevance(\n tokens: (string | Prism.Token)[],\n language: string\n ): number {\n return tokens.reduce((relevance, token) => {\n if (typeof token !== 'string') {\n relevance += this.getTokenRelevance(token, language);\n }\n return relevance;\n }, 0);\n }\n\n private getTokenRelevance(token: Prism.Token, language: string): number {\n let relevance =\n 1 +\n (token.alias ? (Array.isArray(token.alias) ? token.alias.length : 1) : 0);\n if (this.isLanguageSpecificToken(token, language)) relevance += 2;\n if (token.content) {\n if (Array.isArray(token.content)) {\n relevance += token.content.reduce(\n (acc, t) =>\n acc +\n (typeof t === 'string' ? 0 : this.getTokenRelevance(t, language)),\n 0\n );\n } else if (typeof token.content !== 'string') {\n relevance += this.getTokenRelevance(token.content, language);\n }\n }\n return relevance;\n }\n\n private isLanguageSpecificToken(\n token: Prism.Token,\n language: string\n ): boolean {\n const specificTokens = LANGUAGE_SPECIFIC_TOKENS[language] || [];\n return specificTokens.some((t) => token.content.toString().includes(t));\n }\n\n private determineMarkupLanguage(code: string): string {\n if (/<\\/?[a-z][\\s\\S]*>/i.test(code)) return 'html';\n if (/<\\?xml/i.test(code)) return 'xml';\n if (/<svg/i.test(code)) return 'svg';\n if (/<math/i.test(code)) return 'mathml';\n return 'markup';\n }\n\n private checkOverflow() {\n setTimeout(() => {\n requestAnimationFrame(() => {\n const container = this.shadowRoot?.querySelector(\n '.code-snippet-wrapper'\n ) as HTMLElement;\n const pre = container?.querySelector('pre') as HTMLElement;\n if (pre && container) {\n const naturalHeight = pre.scrollHeight;\n const calcHeight = this.codeExpanded\n ? this._expandedHeight || container.clientHeight\n : this.maxHeight !== null\n ? this.maxHeight\n : container.clientHeight;\n\n this.hasOverflow = naturalHeight > calcHeight;\n this._codeFitsContainerOnLoad =\n naturalHeight <= (this.maxHeight || container.clientHeight);\n }\n });\n }, 100);\n }\n\n private removeLeadingWhitespace(code: string): string {\n if (!code) return '';\n const lines = code.split('\\n');\n const minIndent = lines.reduce((min, line) => {\n const match = line.match(/^[ \\t]*/);\n const indent = match ? match[0].length : 0;\n return line.trim().length ? Math.min(min, indent) : min;\n }, Infinity);\n return lines\n .map((line) => line.slice(minIndent))\n .join('\\n')\n .trim();\n }\n\n private formatExampleCode(code: string) {\n return { code };\n }\n\n private copyCode(e: Event) {\n const originalText = this._copyState.text;\n navigator.clipboard\n .writeText(this.codeSnippet)\n .then(() => {\n this._copyState = {\n copied: true,\n text: originalText.length > 1 ? 'Copied!' : '',\n };\n this.requestUpdate();\n this.dispatchEvent(\n new CustomEvent('on-copy', {\n detail: {\n origEvent: e,\n fullSnippet: this.formatExampleCode(this.codeSnippet),\n },\n })\n );\n setTimeout(() => {\n this._copyState = { copied: false, text: originalText };\n this.requestUpdate();\n }, 5000);\n })\n .catch((err) => console.error('Failed to copy code:', err));\n }\n\n private getContainerStyle(): string {\n if (this.codeExpanded) {\n return this._expandedHeight\n ? `max-height: ${this._expandedHeight}px`\n : '';\n }\n return this.maxHeight !== null ? `max-height: ${this.maxHeight}px` : '';\n }\n\n private expandCodeView() {\n this.codeExpanded = !this.codeExpanded;\n\n if (this.codeExpanded) {\n const pre = this.shadowRoot?.querySelector('pre') as HTMLElement;\n this._expandedHeight = pre?.scrollHeight || null;\n } else {\n this._expandedHeight = null;\n }\n\n this.requestUpdate();\n setTimeout(() => this.checkOverflow(), 0);\n }\n\n private handleKeypress(e: KeyboardEvent) {\n const pre = e.currentTarget as HTMLPreElement;\n const scrollAmount = 40;\n\n const isVerticallyScrollable = pre.scrollHeight > pre.clientHeight;\n const isHorizontallyScrollable = pre.scrollWidth > pre.clientWidth;\n\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (isVerticallyScrollable) {\n pre.scrollTop += e.key === 'ArrowDown' ? scrollAmount : -scrollAmount;\n e.preventDefault();\n }\n } else if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n if (isHorizontallyScrollable) {\n pre.scrollLeft += e.key === 'ArrowRight' ? scrollAmount : -scrollAmount;\n e.preventDefault();\n }\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kyn-block-code-view': BlockCodeView;\n }\n}\n"],"names":["Prism","plugins","autoloader","languages_path","_defaultTextStrings","collapsed","expanded","LANGUAGE_SPECIFIC_TOKENS","markup","html","css","javascript","typescript","python","java","BlockCodeView","LitElement","constructor","this","darkTheme","language","lineNumbers","startLineNumber","maxHeight","codeViewLabel","copyOptionVisible","codeViewExpandable","copyButtonText","copyButtonDescriptionAttr","codeSnippet","textStrings","_textStrings","_isSingleLine","hasOverflow","codeExpanded","_copyState","copied","text","_effectiveLanguage","_codeFitsContainerOnLoad","_expandedHeight","updated","changedProperties","has","requestUpdate","codeChanged","setTimeout","highlightCode","checkOverflow","super","render","containerStyle","getContainerStyle","getContainerClasses","handleKeypress","ifDefined","Math","max","undefined","renderCopyButton","renderExpandButton","classMap","length","copyCode","unsafeSVG","checkmarkIcon","copyIcon","expandCodeView","chevronDown","willUpdate","changedProps","deepmerge","processedCode","removeLeadingWhitespace","trim","split","detectLanguage","preEl","_a","shadowRoot","querySelector","codeEl","existingLineNumbers","remove","className","textContent","classList","add","setAttribute","String","removeAttribute","highlightElement","hooks","run","element","resize","addLineNumbers","e","console","warn","linesCount","parseInt","getAttribute","lineNumbersWrapper","document","createElement","spans","Array","fill","join","innerHTML","appendChild","style","counterReset","code","languages","bestMatch","relevance","lang","tokens","tokenize","calculateRelevance","determineMarkupLanguage","reduce","token","getTokenRelevance","alias","isArray","isLanguageSpecificToken","content","acc","t","some","toString","includes","test","requestAnimationFrame","container","pre","naturalHeight","scrollHeight","calcHeight","clientHeight","lines","minIndent","min","line","match","indent","Infinity","map","slice","formatExampleCode","originalText","navigator","clipboard","writeText","then","dispatchEvent","CustomEvent","detail","origEvent","fullSnippet","catch","err","error","currentTarget","isVerticallyScrollable","isHorizontallyScrollable","scrollWidth","clientWidth","key","scrollTop","preventDefault","scrollLeft","styles","BlockCodeViewStyles","ShidokaSyntaxTheme","__decorate","property","type","prototype","Boolean","Number","Object","state","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"blockCodeView.js","sources":["../../../../src/components/reusable/blockCodeView/blockCodeView.ts"],"sourcesContent":["import { unsafeSVG } from 'lit-html/directives/unsafe-svg.js';\nimport { html, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { deepmerge } from 'deepmerge-ts';\n\nimport Prism from 'prismjs';\nimport 'prismjs/plugins/autoloader/prism-autoloader';\nimport 'prismjs/plugins/line-numbers/prism-line-numbers';\nimport 'prismjs-components-importer';\nPrism.plugins.autoloader.languages_path = 'node_modules/prismjs/components/';\n\nimport copyIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/20/copy.svg';\nimport checkmarkIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/20/checkmark.svg';\nimport chevronDown from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/chevron-down.svg';\n\nimport '../button';\n\nimport BlockCodeViewStyles from './blockCodeView.scss';\nimport ShidokaSyntaxTheme from '../../../common/scss/shidoka-syntax-theme.scss';\n\ninterface LanguageMatch {\n language: string;\n relevance: number;\n}\n\nconst _defaultTextStrings = {\n collapsed: 'Collapsed',\n expanded: 'Expanded',\n};\n\nconst LANGUAGE_SPECIFIC_TOKENS: Record<string, string[]> = {\n markup: ['<', '>', '/', 'div', 'span', 'class', 'id'],\n html: ['<', '>', '/', 'div', 'span', 'class', 'id'],\n css: ['{', '}', ':', ';', '#', '.'],\n javascript: ['function', 'const', 'let', 'var', '=>'],\n typescript: ['interface', 'type', ':', 'as'],\n python: ['def', 'import', 'from', 'class'],\n java: ['public', 'private', 'class', 'void'],\n};\n\n/**\n * `<kyn-block-code-view>` component to display `<code>` snippets as standalone single-/multi-line block elements.\n * @fires on-copy - Emits when the copy button is clicked.\n */\n@customElement('kyn-block-code-view')\nexport class BlockCodeView extends LitElement {\n static override styles = [BlockCodeViewStyles, ShidokaSyntaxTheme];\n\n /** Sets background and text theming. */\n @property({ type: String })\n darkTheme: 'light' | 'dark' | 'default' = 'default';\n\n /** If empty string, attempt language syntax auto-detection. Setting a value will override auto-detection and manually configure desired language. */\n @property({ type: String })\n language = '';\n\n /** Optionally display line numbers. */\n @property({ type: Boolean })\n lineNumbers = false;\n\n /** Sets the starting line number when lineNumbers is true. Must be a positive integer. */\n @property({ type: Number })\n startLineNumber = 1;\n\n /** Customizable max-height setting for code snippet container. */\n @property({ type: Number })\n maxHeight: number | null = null;\n\n /** Optionally displayed label above code snippet container. */\n @property({ type: String })\n codeViewLabel = '';\n\n /** Optionally display button to copy code snippet. */\n @property({ type: Boolean })\n copyOptionVisible = false;\n\n /** Optionally display button to expand code snippet container. */\n @property({ type: Boolean })\n codeViewExpandable = false;\n\n /** Sets copy code button text (optional). */\n @property({ type: String })\n copyButtonText = '';\n\n /** Sets copy button description attr value. */\n @property({ type: String })\n copyButtonDescriptionAttr = '';\n\n /** Sets code snippet for display -- NOTE: original formatting is preserved. */\n @property({ type: String })\n codeSnippet = '';\n\n /** Text string customization. */\n @property({ type: Object })\n textStrings = _defaultTextStrings;\n\n /** Internal text strings.\n * @internal\n */\n @state()\n private _textStrings = _defaultTextStrings;\n\n /** Auto-detect whether code snippet is single line (boolean) -- styled accordingly (boolean).\n * @internal\n */\n @state()\n private _isSingleLine = false;\n\n /** Auto-detect whether code snippet exceeds the max-height allowance (boolean).\n * @internal\n */\n @state()\n private hasOverflow = false;\n\n /** Value indicating whether overflow code sample is expanded (boolean).\n * @internal\n */\n @state()\n private codeExpanded = false;\n\n /** Copy key-values to communicate copy button styling and state.\n * @internal\n */\n @state()\n private _copyState = { copied: false, text: '' };\n\n /** Detected language for the code snippet.\n * @internal\n */\n @state()\n private _effectiveLanguage = '';\n\n /** Code snippet fits into the height of the container -- no expansion needed.\n * @internal\n */\n @state()\n private _codeFitsContainerOnLoad = true;\n\n /** If expandable -- height of the container when fully expanded.\n * @internal\n */\n @state()\n private _expandedHeight: number | null = null;\n\n override updated(changedProperties: Map<string, unknown>) {\n if (changedProperties.has('darkTheme')) this.requestUpdate();\n\n const codeChanged =\n changedProperties.has('codeSnippet') ||\n changedProperties.has('language') ||\n changedProperties.has('maxHeight');\n\n // race condition guard: force complete re-highlighting when line numbers toggle\n if (changedProperties.has('lineNumbers')) {\n setTimeout(() => {\n this.highlightCode();\n this.checkOverflow();\n }, 0);\n } else if (codeChanged) {\n this.highlightCode();\n this.checkOverflow();\n }\n\n if (changedProperties.has('copyButtonText')) {\n this._copyState = { ...this._copyState, text: this.copyButtonText };\n }\n\n if (changedProperties.has('startLineNumber')) {\n // Ensure startLineNumber is at least 1\n if (this.startLineNumber < 1) {\n this.startLineNumber = 1;\n }\n this.highlightCode();\n }\n\n super.updated(changedProperties);\n }\n\n override render() {\n const containerStyle = `${this.getContainerStyle()};`;\n return html`\n ${this.codeViewLabel\n ? html`<div class=\"code-view__label\">\n <label>${this.codeViewLabel}</label>\n </div>`\n : null}\n <div class=\"${this.getContainerClasses()}\" style=\"${containerStyle}\">\n <div class=\"code-snippet-wrapper\">\n <pre\n @keydown=${this.handleKeypress}\n role=\"region\"\n class=${this.lineNumbers && !this._isSingleLine\n ? 'line-numbers'\n : 'no-line-numbers'}\n data-start=${ifDefined(\n this.lineNumbers ? Math.max(1, this.startLineNumber) : undefined\n )}\n >\n <code tabindex=\"0\" class=\"language-${this\n ._effectiveLanguage}\"></code>\n </pre>\n </div>\n ${this.renderCopyButton()} ${this.renderExpandButton()}\n </div>\n `;\n }\n\n private getContainerClasses() {\n return classMap({\n 'code-view__container': true,\n 'single-line': this._isSingleLine,\n 'multi-line': !this._isSingleLine,\n 'copy-button-text-true':\n this.copyButtonText && this.copyButtonText.length > 0,\n 'copy-button-text-false': !this.copyButtonText,\n 'shidoka-syntax-theme': true,\n 'shidoka-syntax-theme--dark': this.darkTheme === 'dark',\n 'shidoka-syntax-theme--light': this.darkTheme === 'light',\n 'expanded-code-view': this.codeExpanded,\n 'has-overflow': this.hasOverflow,\n });\n }\n\n private renderCopyButton() {\n if (!this.copyOptionVisible) return null;\n return html`\n <kyn-button\n class=\"code-view__copy-button\"\n kind=\"secondary\"\n size=\"small\"\n iconPosition=\"left\"\n ?disabled=${this._copyState.copied}\n description=${ifDefined(this.copyButtonDescriptionAttr)}\n @click=${this.copyCode}\n >\n <span slot=\"icon\" class=\"copy-icon\">\n ${this._copyState.copied\n ? unsafeSVG(checkmarkIcon)\n : unsafeSVG(copyIcon)}\n </span>\n ${this._copyState.text\n ? html`<span class=\"copy-text\">${this._copyState.text}</span>`\n : null}\n </kyn-button>\n `;\n }\n\n private renderExpandButton() {\n if (\n !this.codeViewExpandable ||\n (!this.hasOverflow && this._codeFitsContainerOnLoad)\n )\n return null;\n return html`\n <kyn-button\n class=\"code-view__expand-button\"\n kind=\"tertiary\"\n size=\"small\"\n iconPosition=\"left\"\n outlineOnly\n description=${this.codeExpanded\n ? this._textStrings.expanded\n : this._textStrings.collapsed}\n @click=${this.expandCodeView}\n >\n <span slot=\"icon\" class=\"expand-icon\">${unsafeSVG(chevronDown)}</span>\n </kyn-button>\n `;\n }\n\n override willUpdate(changedProps: Map<string, unknown>) {\n if (changedProps.has('codeExpanded')) {\n this._textStrings = deepmerge(_defaultTextStrings, this.textStrings);\n }\n }\n\n private highlightCode() {\n const processedCode = this.removeLeadingWhitespace(this.codeSnippet);\n this._isSingleLine = processedCode.trim().split('\\n').length === 1;\n this._effectiveLanguage =\n this.language || this.detectLanguage(processedCode);\n\n const preEl = this.shadowRoot?.querySelector('pre');\n const codeEl = preEl?.querySelector('code');\n\n if (!codeEl || !preEl) return;\n\n const existingLineNumbers = preEl.querySelector('.line-numbers-rows');\n if (existingLineNumbers) {\n existingLineNumbers.remove();\n }\n\n codeEl.className = `language-${this._effectiveLanguage}`;\n codeEl.textContent = processedCode;\n\n if (this.lineNumbers && !this._isSingleLine) {\n preEl.classList.add('line-numbers');\n preEl.setAttribute('data-start', String(this.startLineNumber));\n } else {\n preEl.classList.remove('line-numbers');\n preEl.removeAttribute('data-start');\n }\n\n setTimeout(() => {\n Prism.highlightElement(codeEl);\n\n setTimeout(() => {\n if (this.lineNumbers) {\n try {\n if ((Prism as any).plugins?.lineNumbers) {\n if (!preEl.querySelector('.line-numbers-rows')) {\n (Prism as any).hooks.run('complete', { element: codeEl });\n (Prism as any).plugins.lineNumbers.resize(preEl);\n }\n }\n\n if (!preEl.querySelector('.line-numbers-rows')) {\n this.addLineNumbers(preEl, codeEl);\n }\n } catch (e) {\n console.warn('Line numbers initialization error:', e);\n this.addLineNumbers(preEl, codeEl);\n }\n }\n\n this.checkOverflow();\n }, 50);\n }, 0);\n }\n\n private addLineNumbers(preEl: HTMLElement, codeEl: HTMLElement) {\n if (preEl.querySelector('.line-numbers-rows')) return;\n\n const linesCount = (codeEl.textContent || '').split('\\n').length;\n const startLineNumber = Math.max(\n 1,\n parseInt(preEl.getAttribute('data-start') || '1', 10)\n );\n\n const lineNumbersWrapper = document.createElement('span');\n lineNumbersWrapper.className = 'line-numbers-rows';\n\n const spans = Array(linesCount).fill('<span></span>').join('');\n lineNumbersWrapper.innerHTML = spans;\n\n preEl.appendChild(lineNumbersWrapper);\n preEl.style.counterReset = `linenumber ${startLineNumber - 1}`;\n }\n\n private detectLanguage(code: string): string {\n if (!code.trim()) return 'plaintext';\n\n const languages = [\n 'markup',\n 'html',\n 'xml',\n 'svg',\n 'mathml',\n 'css',\n 'javascript',\n 'typescript',\n 'python',\n 'java',\n 'c',\n 'cpp',\n ];\n let bestMatch: LanguageMatch = { language: 'plaintext', relevance: 0 };\n\n for (const lang of languages) {\n if (Prism.languages[lang]) {\n const tokens = Prism.tokenize(code, Prism.languages[lang]);\n const relevance = this.calculateRelevance(tokens, lang);\n if (relevance > bestMatch.relevance) {\n bestMatch = { language: lang, relevance };\n }\n }\n }\n\n return bestMatch.language === 'markup'\n ? this.determineMarkupLanguage(code)\n : bestMatch.language;\n }\n\n private calculateRelevance(\n tokens: (string | Prism.Token)[],\n language: string\n ): number {\n return tokens.reduce((relevance, token) => {\n if (typeof token !== 'string') {\n relevance += this.getTokenRelevance(token, language);\n }\n return relevance;\n }, 0);\n }\n\n private getTokenRelevance(token: Prism.Token, language: string): number {\n let relevance =\n 1 +\n (token.alias ? (Array.isArray(token.alias) ? token.alias.length : 1) : 0);\n if (this.isLanguageSpecificToken(token, language)) relevance += 2;\n if (token.content) {\n if (Array.isArray(token.content)) {\n relevance += token.content.reduce(\n (acc, t) =>\n acc +\n (typeof t === 'string' ? 0 : this.getTokenRelevance(t, language)),\n 0\n );\n } else if (typeof token.content !== 'string') {\n relevance += this.getTokenRelevance(token.content, language);\n }\n }\n return relevance;\n }\n\n private isLanguageSpecificToken(\n token: Prism.Token,\n language: string\n ): boolean {\n const specificTokens = LANGUAGE_SPECIFIC_TOKENS[language] || [];\n return specificTokens.some((t) => token.content.toString().includes(t));\n }\n\n private determineMarkupLanguage(code: string): string {\n if (/<\\/?[a-z][\\s\\S]*>/i.test(code)) return 'html';\n if (/<\\?xml/i.test(code)) return 'xml';\n if (/<svg/i.test(code)) return 'svg';\n if (/<math/i.test(code)) return 'mathml';\n return 'markup';\n }\n\n private checkOverflow() {\n setTimeout(() => {\n requestAnimationFrame(() => {\n const container = this.shadowRoot?.querySelector(\n '.code-snippet-wrapper'\n ) as HTMLElement;\n const pre = container?.querySelector('pre') as HTMLElement;\n if (pre && container) {\n const naturalHeight = pre.scrollHeight;\n const calcHeight = this.codeExpanded\n ? this._expandedHeight || container.clientHeight\n : this.maxHeight !== null\n ? this.maxHeight\n : container.clientHeight;\n\n this.hasOverflow = naturalHeight > calcHeight;\n this._codeFitsContainerOnLoad =\n naturalHeight <= (this.maxHeight || container.clientHeight);\n }\n });\n }, 100);\n }\n\n private removeLeadingWhitespace(code: string): string {\n if (!code) return '';\n const lines = code.split('\\n');\n const minIndent = lines.reduce((min, line) => {\n const match = line.match(/^[ \\t]*/);\n const indent = match ? match[0].length : 0;\n return line.trim().length ? Math.min(min, indent) : min;\n }, Infinity);\n return lines\n .map((line) => line.slice(minIndent))\n .join('\\n')\n .trim();\n }\n\n private formatExampleCode(code: string) {\n return { code };\n }\n\n private copyCode(e: Event) {\n const originalText = this._copyState.text;\n navigator.clipboard\n .writeText(this.codeSnippet)\n .then(() => {\n this._copyState = {\n copied: true,\n text: originalText.length > 1 ? 'Copied!' : '',\n };\n this.requestUpdate();\n this.dispatchEvent(\n new CustomEvent('on-copy', {\n detail: {\n origEvent: e,\n fullSnippet: this.formatExampleCode(this.codeSnippet),\n },\n })\n );\n setTimeout(() => {\n this._copyState = { copied: false, text: originalText };\n this.requestUpdate();\n }, 5000);\n })\n .catch((err) => console.error('Failed to copy code:', err));\n }\n\n private getContainerStyle(): string {\n if (this.codeExpanded) {\n return this._expandedHeight\n ? `max-height: ${this._expandedHeight}px`\n : '';\n }\n return this.maxHeight !== null ? `max-height: ${this.maxHeight}px` : '';\n }\n\n private expandCodeView() {\n this.codeExpanded = !this.codeExpanded;\n\n if (this.codeExpanded) {\n const pre = this.shadowRoot?.querySelector('pre') as HTMLElement;\n this._expandedHeight = pre?.scrollHeight || null;\n } else {\n this._expandedHeight = null;\n }\n\n this.requestUpdate();\n setTimeout(() => this.checkOverflow(), 0);\n }\n\n private handleKeypress(e: KeyboardEvent) {\n const pre = e.currentTarget as HTMLPreElement;\n const scrollAmount = 40;\n\n const isVerticallyScrollable = pre.scrollHeight > pre.clientHeight;\n const isHorizontallyScrollable = pre.scrollWidth > pre.clientWidth;\n\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (isVerticallyScrollable) {\n pre.scrollTop += e.key === 'ArrowDown' ? scrollAmount : -scrollAmount;\n e.preventDefault();\n }\n } else if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n if (isHorizontallyScrollable) {\n pre.scrollLeft += e.key === 'ArrowRight' ? scrollAmount : -scrollAmount;\n e.preventDefault();\n }\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kyn-block-code-view': BlockCodeView;\n }\n}\n"],"names":["Prism","plugins","autoloader","languages_path","_defaultTextStrings","collapsed","expanded","LANGUAGE_SPECIFIC_TOKENS","markup","html","css","javascript","typescript","python","java","BlockCodeView","LitElement","constructor","this","darkTheme","language","lineNumbers","startLineNumber","maxHeight","codeViewLabel","copyOptionVisible","codeViewExpandable","copyButtonText","copyButtonDescriptionAttr","codeSnippet","textStrings","_textStrings","_isSingleLine","hasOverflow","codeExpanded","_copyState","copied","text","_effectiveLanguage","_codeFitsContainerOnLoad","_expandedHeight","updated","changedProperties","has","requestUpdate","codeChanged","setTimeout","highlightCode","checkOverflow","super","render","containerStyle","getContainerStyle","getContainerClasses","handleKeypress","ifDefined","Math","max","undefined","renderCopyButton","renderExpandButton","classMap","length","copyCode","unsafeSVG","checkmarkIcon","copyIcon","expandCodeView","chevronDown","willUpdate","changedProps","deepmerge","processedCode","removeLeadingWhitespace","trim","split","detectLanguage","preEl","_a","shadowRoot","querySelector","codeEl","existingLineNumbers","remove","className","textContent","classList","add","setAttribute","String","removeAttribute","highlightElement","hooks","run","element","resize","addLineNumbers","e","console","warn","linesCount","parseInt","getAttribute","lineNumbersWrapper","document","createElement","spans","Array","fill","join","innerHTML","appendChild","style","counterReset","code","languages","bestMatch","relevance","lang","tokens","tokenize","calculateRelevance","determineMarkupLanguage","reduce","token","getTokenRelevance","alias","isArray","isLanguageSpecificToken","content","acc","t","some","toString","includes","test","requestAnimationFrame","container","pre","naturalHeight","scrollHeight","calcHeight","clientHeight","lines","minIndent","min","line","match","indent","Infinity","map","slice","formatExampleCode","originalText","navigator","clipboard","writeText","then","dispatchEvent","CustomEvent","detail","origEvent","fullSnippet","catch","err","error","currentTarget","isVerticallyScrollable","isHorizontallyScrollable","scrollWidth","clientWidth","key","scrollTop","preventDefault","scrollLeft","styles","BlockCodeViewStyles","ShidokaSyntaxTheme","__decorate","property","type","prototype","Boolean","Number","Object","state","customElement"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kyndryl-design-system/shidoka-applications",
3
- "version": "2.46.0",
3
+ "version": "2.46.1",
4
4
  "description": "Shidoka Web Components for Applications",
5
5
  "license": "MIT",
6
6
  "main": "index.js",