@kyndryl-design-system/shidoka-applications 2.24.0 → 2.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/ai/sourcesFeedback/aiSourcesFeedback.d.ts.map +1 -1
- package/components/ai/sourcesFeedback/aiSourcesFeedback.js +32 -24
- package/components/ai/sourcesFeedback/aiSourcesFeedback.js.map +1 -1
- package/components/reusable/card/card.d.ts +2 -0
- package/components/reusable/card/card.d.ts.map +1 -1
- package/components/reusable/card/card.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiSourcesFeedback.d.ts","sourceRoot":"","sources":["../../../../src/components/ai/sourcesFeedback/aiSourcesFeedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAoBvC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,uBAAuB,CAAC;AAW/B;;;;;;;;GAQG;AAEH,qBACa,iBAAkB,SAAQ,UAAU;IAC/C,OAAgB,MAAM,QAAgB;IAEtC,uDAAuD;IAEvD,aAAa,UAAS;IAEtB,2DAA2D;IAE3D,cAAc,UAAS;IAEvB,0DAA0D;IAE1D,eAAe,UAAS;IAExB,6DAA6D;IAE7D,gBAAgB,UAAS;IAEzB,0DAA0D;IAE1D,gBAAgB,UAAS;IAEzB,iCAAiC;IAEjC,WAAW;;;;;;;MAAuB;IAElC,yBAAyB;IAEzB,SAAS,SAAW;IAEpB;;OAEG;IAEH,WAAW,SAAK;IAEhB;;OAEG;IAEH,aAAa,UAAS;IAEtB;;OAEG;IAEH,YAAY;;;;;;;MAAuB;IAEnC;;OAEG;IAEH,qBAAqB,EAAE,GAAG,CAAQ;IAElC;;;OAGG;IAEH,UAAU,EAAG,GAAG,CAAC;IAEjB;;OAEG;IACM,kBAAkB,SAAK;IAEhC;;OAEG;IACM,oBAAoB,SAAK;IAEzB,MAAM;
|
|
1
|
+
{"version":3,"file":"aiSourcesFeedback.d.ts","sourceRoot":"","sources":["../../../../src/components/ai/sourcesFeedback/aiSourcesFeedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAoBvC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,uBAAuB,CAAC;AAW/B;;;;;;;;GAQG;AAEH,qBACa,iBAAkB,SAAQ,UAAU;IAC/C,OAAgB,MAAM,QAAgB;IAEtC,uDAAuD;IAEvD,aAAa,UAAS;IAEtB,2DAA2D;IAE3D,cAAc,UAAS;IAEvB,0DAA0D;IAE1D,eAAe,UAAS;IAExB,6DAA6D;IAE7D,gBAAgB,UAAS;IAEzB,0DAA0D;IAE1D,gBAAgB,UAAS;IAEzB,iCAAiC;IAEjC,WAAW;;;;;;;MAAuB;IAElC,yBAAyB;IAEzB,SAAS,SAAW;IAEpB;;OAEG;IAEH,WAAW,SAAK;IAEhB;;OAEG;IAEH,aAAa,UAAS;IAEtB;;OAEG;IAEH,YAAY;;;;;;;MAAuB;IAEnC;;OAEG;IAEH,qBAAqB,EAAE,GAAG,CAAQ;IAElC;;;OAGG;IAEH,UAAU,EAAG,GAAG,CAAC;IAEjB;;OAEG;IACM,kBAAkB,SAAK;IAEhC;;OAEG;IACM,oBAAoB,SAAK;IAEzB,MAAM;IAoKf,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,qBAAqB;IAyB7B,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,oBAAoB;IAY5B,SAAS,CAAC,iBAAiB;IAI3B,OAAO,CAAC,oBAAoB;IAgBnB,UAAU,CAAC,YAAY,EAAE,GAAG;cAMlB,OAAO,CAAC,YAAY,EAAE,GAAG,GAAG,IAAI;CAQpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,yBAAyB,EAAE,iBAAiB,CAAC;KAC9C;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as e}from"../../../vendor/tslib-53a81efe.js";import{n as t,t as s,l as i,c as o,e as n}from"../../../vendor/lit-461e78e6.js";import{i as
|
|
1
|
+
import{_ as e}from"../../../vendor/tslib-53a81efe.js";import{n as t,t as s,l as i,c as o,e as n}from"../../../vendor/lit-461e78e6.js";import{i as a,s as d,x as l}from"../../../vendor/lit-element-c6c02f24.js";import{d as r}from"../../../vendor/deepmerge-ts-e62363e6.js";import{e as c}from"../../../vendor/lit-html-29220869.js";import{f as p,D as b,E as h,F as k,G as u,c as m}from"../../../vendor/@kyndryl-design-system/shidoka-icons-39c6d852.js";import"../../reusable/link/link.js";import"../../reusable/card/card.js";import"../../reusable/card/vitalCard.skeleton.js";import"../../reusable/card/informationalCard.skeleton.js";import"../../reusable/button/button.js";import"../../reusable/link/defs.js";import"../../reusable/loaders/skeleton.js";import"../../../cardSample-37bc81e6.js";import"../../../common/helpers/helpers.js";import"../../reusable/button/defs.js";var v=a`*,
|
|
2
2
|
*::before,
|
|
3
3
|
*::after {
|
|
4
4
|
box-sizing: border-box;
|
|
@@ -46,14 +46,25 @@ import{_ as e}from"../../../vendor/tslib-53a81efe.js";import{n as t,t as s,l as
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
.card-container {
|
|
49
|
-
display: grid;
|
|
50
|
-
gap: 16px;
|
|
51
|
-
grid-template-columns: 1fr;
|
|
52
49
|
margin-top: 1rem;
|
|
50
|
+
display: flex;
|
|
51
|
+
flex-direction: column;
|
|
52
|
+
gap: 0.5rem;
|
|
53
|
+
}
|
|
54
|
+
.card-container slot[name=sources]::slotted(kyn-card) {
|
|
55
|
+
width: 100%;
|
|
56
|
+
}
|
|
57
|
+
.card-container .reveal-toggle {
|
|
58
|
+
align-self: flex-start;
|
|
53
59
|
}
|
|
54
60
|
@media (min-width: 42rem) {
|
|
55
61
|
.card-container {
|
|
56
|
-
|
|
62
|
+
flex-direction: row;
|
|
63
|
+
flex-wrap: wrap;
|
|
64
|
+
}
|
|
65
|
+
.card-container slot[name=sources]::slotted(kyn-card) {
|
|
66
|
+
width: auto;
|
|
67
|
+
flex: 0 1 auto;
|
|
57
68
|
}
|
|
58
69
|
}
|
|
59
70
|
|
|
@@ -65,8 +76,7 @@ import{_ as e}from"../../../vendor/tslib-53a81efe.js";import{n as t,t as s,l as
|
|
|
65
76
|
.opened.kyn-feedback-body {
|
|
66
77
|
display: block;
|
|
67
78
|
position: relative;
|
|
68
|
-
background: var(--kd-color-background-container-
|
|
69
|
-
border: 1px solid var(--kd-color-border-variants-light);
|
|
79
|
+
background: var(--kd-color-background-container-ai-default);
|
|
70
80
|
border-radius: 8px;
|
|
71
81
|
padding: 16px;
|
|
72
82
|
margin-top: 1rem;
|
|
@@ -89,16 +99,17 @@ import{_ as e}from"../../../vendor/tslib-53a81efe.js";import{n as t,t as s,l as
|
|
|
89
99
|
}
|
|
90
100
|
|
|
91
101
|
.reveal-toggle {
|
|
92
|
-
|
|
102
|
+
justify-self: start;
|
|
103
|
+
margin-top: 0.5rem;
|
|
93
104
|
}
|
|
94
105
|
|
|
95
106
|
.close-container,
|
|
96
107
|
.close {
|
|
97
108
|
background: inherit;
|
|
98
109
|
position: absolute;
|
|
99
|
-
right:
|
|
100
|
-
top:
|
|
101
|
-
}`;const y={sourcesText:"Sources",foundSources:"Found sources",showMore:"Show more",showLess:"Show less",positiveFeedback:"Share what you liked",negativeFeedback:"Help us improve"};let g=class extends
|
|
110
|
+
right: 8px;
|
|
111
|
+
top: 8px;
|
|
112
|
+
}`;const y={sourcesText:"Sources",foundSources:"Found sources",showMore:"Show more",showLess:"Show less",positiveFeedback:"Share what you liked",negativeFeedback:"Help us improve"};let g=class extends d{constructor(){super(...arguments),this.sourcesOpened=!1,this.feedbackOpened=!1,this.sourcesDisabled=!1,this.feedbackDisabled=!1,this.revealAllSources=!1,this.textStrings=y,this.closeText="Close",this._limitCount=4,this.limitRevealed=!1,this._textStrings=y,this._selectedFeedbackType=null,this.thumbsUpClickCount=0,this.thumbsDownClickCount=0}render(){const e=c({"kyn-sources":!0,opened:this.sourcesOpened,disabled:this.sourcesDisabled}),t=c({"kyn-pos-feedback":!0,disabled:this.feedbackDisabled&&"positive"===this._selectedFeedbackType}),s=c({"kyn-neg-feedback":!0,disabled:this.feedbackDisabled&&"positive"===this._selectedFeedbackType});return l`
|
|
102
113
|
<div class="action-bar">
|
|
103
114
|
<div class="left-div">
|
|
104
115
|
<slot name="copy"></slot>
|
|
@@ -186,20 +197,17 @@ import{_ as e}from"../../../vendor/tslib-53a81efe.js";import{n as t,t as s,l as
|
|
|
186
197
|
</div>
|
|
187
198
|
<div class="card-container">
|
|
188
199
|
<slot name="sources" @slotchange=${this._handleSlotChange}></slot>
|
|
200
|
+
${!this.revealAllSources&&this._sourceEls.length>this._limitCount?l`
|
|
201
|
+
<kyn-button
|
|
202
|
+
class="reveal-toggle"
|
|
203
|
+
kind="ghost"
|
|
204
|
+
size="small"
|
|
205
|
+
@on-click=${()=>this._toggleLimitRevealed(!this.limitRevealed)}
|
|
206
|
+
>
|
|
207
|
+
${this.limitRevealed?l`${this._textStrings.showLess}`:l` ${this._textStrings.showMore} `}
|
|
208
|
+
</kyn-button>
|
|
209
|
+
`:null}
|
|
189
210
|
</div>
|
|
190
|
-
${!this.revealAllSources&&this._sourceEls.length>this._limitCount?l`
|
|
191
|
-
<kyn-button
|
|
192
|
-
class="reveal-toggle"
|
|
193
|
-
kind="ghost"
|
|
194
|
-
size="small"
|
|
195
|
-
@on-click=${()=>this._toggleLimitRevealed(!this.limitRevealed)}
|
|
196
|
-
>
|
|
197
|
-
${this.limitRevealed?l`${this._textStrings.showLess}`:l`
|
|
198
|
-
${this._textStrings.showMore}
|
|
199
|
-
(${this._sourceEls.length-this._limitCount})
|
|
200
|
-
`}
|
|
201
|
-
</kyn-button>
|
|
202
|
-
`:null}
|
|
203
211
|
</div>
|
|
204
212
|
|
|
205
213
|
<div
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiSourcesFeedback.js","sources":["../../../../src/components/ai/sourcesFeedback/aiSourcesFeedback.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport {\n customElement,\n property,\n queryAssignedElements,\n state,\n} from 'lit/decorators.js';\nimport { deepmerge } from 'deepmerge-ts';\nimport { classMap } from 'lit-html/directives/class-map.js';\n\nimport stylesheet from './aiSourcesFeedback.scss';\n\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport chevronIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/chevron-down.svg';\nimport thumbsUpIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/thumbs-up.svg';\nimport thumbsDownIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/thumbs-down.svg';\nimport thumbsUpFilledIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/thumbs-up-filled.svg';\nimport thumbsDownFilledIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/thumbs-down-filled.svg';\nimport closeIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/close-simple.svg';\n\nimport '../../reusable/link';\nimport '../../reusable/card';\nimport '../../reusable/button';\n\nconst _defaultTextStrings = {\n sourcesText: 'Sources',\n foundSources: 'Found sources',\n showMore: 'Show more',\n showLess: 'Show less',\n positiveFeedback: 'Share what you liked',\n negativeFeedback: 'Help us improve',\n};\n\n/**\n * AISourcesFeedback Component.\n *\n * @slot copy - copy button\n * @slot sources - source cards in source panel.\n * @slot feedback-form - Positive feedback form.\n * @fires on-toggle - Emits the `opened` state when the panel item opens/closes.\n * @fires on-feedback-deselected - Emits when thumbs-up or thumbs-down button is deselected.\n */\n\n@customElement('kyn-ai-sources-feedback')\nexport class AISourcesFeedback extends LitElement {\n static override styles = [stylesheet];\n\n /** expandable anchor opened state for Sources used. */\n @property({ type: Boolean })\n sourcesOpened = false;\n\n /** expandable anchor opened state for Feedback buttons. */\n @property({ type: Boolean })\n feedbackOpened = false;\n\n /** expandable anchor disabled state for Sources used.. */\n @property({ type: Boolean })\n sourcesDisabled = false;\n\n /** expandable anchor disabled state for Feedback buttons. */\n @property({ type: Boolean })\n feedbackDisabled = false;\n\n /** Limits visible sources behind a \"Show more\" button. */\n @property({ type: Boolean })\n revealAllSources = false;\n\n /** Text string customization. */\n @property({ type: Object })\n textStrings = _defaultTextStrings;\n\n /** Close button text. */\n @property({ type: String })\n closeText = 'Close';\n\n /** Number of sources visible when limited.\n * @internal\n */\n @state()\n _limitCount = 4;\n\n /** Sources limit visibility.\n * @internal\n */\n @state()\n limitRevealed = false;\n\n /** Internal text strings.\n * @internal\n */\n @state()\n _textStrings = _defaultTextStrings;\n\n /** Selecting Positive or Negative Feedback\n * @internal\n */\n @state()\n _selectedFeedbackType: any = null;\n\n /**\n * Queries slotted sources.\n * @ignore\n */\n @queryAssignedElements({ slot: 'sources' })\n _sourceEls!: any;\n\n /** Tracks the number of clicks on thumbs up icon\n * @internal\n */\n @state() thumbsUpClickCount = 0;\n\n /** Tracks the number of clicks on thumbs down icon\n * @internal\n */\n @state() thumbsDownClickCount = 0;\n\n override render() {\n const classesSources: any = classMap({\n 'kyn-sources': true,\n opened: this.sourcesOpened,\n disabled: this.sourcesDisabled,\n });\n const classesFeedback1: any = classMap({\n 'kyn-pos-feedback': true,\n disabled:\n this.feedbackDisabled && this._selectedFeedbackType === 'positive',\n });\n const classesFeedback2: any = classMap({\n 'kyn-neg-feedback': true,\n disabled:\n this.feedbackDisabled && this._selectedFeedbackType === 'positive',\n });\n return html`\n <div class=\"action-bar\">\n <div class=\"left-div\">\n <slot name=\"copy\"></slot>\n\n <div class=\"${classesSources}\">\n <kyn-button\n kind=\"ghost\"\n size=\"small\"\n class=\"kyn-sources-title\"\n iconPosition=\"right\"\n aria-controls=\"kyn-sources-body\"\n aria-expanded=${this.sourcesOpened}\n ?disabled=${this.sourcesDisabled}\n @on-click=\"${(e: Event) => this._handleClick(e, 'sources')}\"\n id=\"kyn-sources-title\"\n >\n <span>${this._textStrings.sourcesText}</span>\n <span class=\"expand-icon\" slot=\"icon\"\n >${unsafeSVG(chevronIcon)}</span\n >\n </kyn-button>\n </div>\n </div>\n\n <div class=\"right-div\">\n <div class=\"${classesFeedback1}\">\n <kyn-button\n kind=\"ghost\"\n size=\"small\"\n id=\"kyn-feedback-title-positive\"\n class=\"kyn-feedback-title\"\n aria-controls=\"kyn-feedback-body\"\n aria-expanded=${this.feedbackOpened}\n ?disabled=${this.feedbackDisabled}\n description=${this._textStrings.positiveFeedback}\n @on-click=${(e: Event) =>\n this._handleClick(e, 'feedback', 'positive')}\n >\n <span slot=\"icon\">\n ${unsafeSVG(\n this.thumbsUpClickCount % 2 === 0\n ? thumbsUpIcon\n : thumbsUpFilledIcon\n )}\n </span>\n </kyn-button>\n </div>\n\n <div class=\"${classesFeedback2}\">\n <kyn-button\n kind=\"ghost\"\n size=\"small\"\n id=\"kyn-feedback-title-negative\"\n class=\"kyn-feedback-title\"\n aria-controls=\"kyn-feedback-body\"\n aria-expanded=${this.feedbackOpened}\n ?disabled=${this.feedbackDisabled}\n description=${this._textStrings.negativeFeedback}\n @on-click=\"${(e: Event) =>\n this._handleClick(e, 'feedback', 'negative')}\"\n >\n <span slot=\"icon\"\n >${unsafeSVG(\n this.thumbsDownClickCount % 2 === 0\n ? thumbsDownIcon\n : thumbsDownFilledIcon\n )}\n </span>\n </kyn-button>\n </div>\n </div>\n </div>\n\n <div\n class=\"${classMap({\n opened: this.sourcesOpened,\n 'kyn-sources-body': true,\n })}\"\n id=\"kyn-sources-body\"\n role=\"region\"\n aria-labelledby=\"kyn-sources-title\"\n >\n <div class=\"close-container\">\n <kyn-button\n class=\"close\"\n @on-click=${(e: Event) => this._handleClick(e, 'sources')}\n }}\n kind=\"ghost\"\n size=\"small\"\n description=${this.closeText}\n >\n <span slot=\"icon\">${unsafeSVG(closeIcon)}</span>\n </kyn-button>\n </div>\n\n <div class=\"found-sources\">\n ${this._textStrings.foundSources} (${this._sourceEls.length}) :\n </div>\n <div class=\"card-container\">\n <slot name=\"sources\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n ${!this.revealAllSources && this._sourceEls.length > this._limitCount\n ? html`\n <kyn-button\n class=\"reveal-toggle\"\n kind=\"ghost\"\n size=\"small\"\n @on-click=${() =>\n this._toggleLimitRevealed(!this.limitRevealed)}\n >\n ${this.limitRevealed\n ? html`${this._textStrings.showLess}`\n : html`\n ${this._textStrings.showMore}\n (${this._sourceEls.length - this._limitCount})\n `}\n </kyn-button>\n `\n : null}\n </div>\n\n <div\n class=\"${classMap({\n opened: this.feedbackOpened,\n 'kyn-feedback-body': true,\n })}\"\n id=\"kyn-feedback-body\"\n role=\"region\"\n aria-labelledby=\"kyn-feedback-title-${this._selectedFeedbackType\n ? 'positive'\n : 'negative'}\"\n >\n <div class=\"close-container\">\n <kyn-button\n class=\"close\"\n description=${this.closeText}\n @on-click=${(e: Event) =>\n this._handleClick(e, 'feedback', this._selectedFeedbackType)}\n }}\n kind=\"ghost\"\n size=\"small\"\n >\n <span slot=\"icon\">${unsafeSVG(closeIcon)}</span>\n </kyn-button>\n </div>\n\n <slot name=\"feedback-form\"></slot>\n </div>\n `;\n }\n private _handleClick(\n e: Event,\n panel: 'sources' | 'feedback',\n feedbackType?: 'positive' | 'negative'\n ) {\n e.preventDefault();\n\n if (\n (panel === 'sources' && this.sourcesDisabled) ||\n (panel === 'feedback' && this.feedbackDisabled)\n ) {\n return;\n }\n\n const target = e.target as HTMLElement;\n const isFeedbackButton = target.id?.includes('kyn-feedback-title');\n\n if (isFeedbackButton && feedbackType) {\n this._updateFeedbackCounts(feedbackType);\n }\n\n if (panel === 'sources' || this._shouldEmitFeedbackEvent(feedbackType)) {\n this._emitToggleEvent(panel, feedbackType);\n }\n }\n\n private _updateFeedbackCounts(feedbackType: 'positive' | 'negative') {\n // Checks if the feedbackType was already selected before updating the counts.\n const wasSelected =\n (feedbackType === 'positive' && this.thumbsUpClickCount % 2 !== 0) ||\n (feedbackType === 'negative' && this.thumbsDownClickCount % 2 !== 0);\n\n if (feedbackType === 'positive') {\n this.thumbsUpClickCount++;\n this.thumbsDownClickCount -= this.thumbsDownClickCount % 2;\n } else {\n this.thumbsDownClickCount++;\n this.thumbsUpClickCount -= this.thumbsUpClickCount % 2;\n }\n\n if (wasSelected) {\n this.dispatchEvent(\n new CustomEvent('on-feedback-deselected', {\n detail: { feedbackType },\n bubbles: true,\n composed: true,\n })\n );\n }\n }\n\n private _shouldEmitFeedbackEvent(\n feedbackType?: 'positive' | 'negative'\n ): boolean {\n if (!feedbackType) return false;\n const isOddClick = (count: number) => count % 2 !== 0;\n\n return (\n (feedbackType === 'positive' &&\n (isOddClick(this.thumbsUpClickCount) ||\n (this.feedbackOpened && !isOddClick(this.thumbsUpClickCount)))) ||\n (feedbackType === 'negative' &&\n (isOddClick(this.thumbsDownClickCount) ||\n (this.feedbackOpened && !isOddClick(this.thumbsDownClickCount))))\n );\n }\n\n private _emitToggleEvent(\n panel: 'sources' | 'feedback',\n feedbackType?: 'positive' | 'negative'\n ) {\n if (panel === 'sources') {\n this.sourcesOpened = !this.sourcesOpened;\n this.feedbackOpened = false;\n } else if (panel === 'feedback') {\n this.sourcesOpened = false;\n this._toggleFeedbackPanel(feedbackType);\n }\n\n this.dispatchEvent(\n new CustomEvent('on-toggle', {\n detail: {\n sourcesOpened: this.sourcesOpened,\n feedbackOpened: this.feedbackOpened,\n selectedFeedbackType: this._selectedFeedbackType,\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _toggleFeedbackPanel(feedbackType?: 'positive' | 'negative') {\n if (!feedbackType) return;\n\n if (this._selectedFeedbackType === feedbackType && this.feedbackOpened) {\n this.feedbackOpened = false;\n this._selectedFeedbackType = null;\n } else {\n this.feedbackOpened = true;\n this._selectedFeedbackType = feedbackType;\n }\n }\n\n protected _handleSlotChange() {\n this._toggleLimitRevealed(this.limitRevealed);\n }\n\n private _toggleLimitRevealed(revealed: boolean) {\n this.limitRevealed = revealed;\n\n this._sourceEls.forEach((sourceEl: any, index: any) => {\n if (this.revealAllSources || this.limitRevealed) {\n sourceEl.style.display = 'block';\n } else {\n if (index < this._limitCount) {\n sourceEl.style.display = 'block';\n } else {\n sourceEl.style.display = 'none';\n }\n }\n });\n }\n\n override willUpdate(changedProps: any) {\n if (changedProps.has('textStrings')) {\n this._textStrings = deepmerge(_defaultTextStrings, this.textStrings);\n }\n }\n\n protected override updated(changedProps: any): void {\n if (\n changedProps.has('revealAllSources') &&\n changedProps.get('revealAllSources') !== undefined\n ) {\n this._toggleLimitRevealed(false);\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kyn-ai-sources-feedback': AISourcesFeedback;\n }\n}\n"],"names":["_defaultTextStrings","sourcesText","foundSources","showMore","showLess","positiveFeedback","negativeFeedback","AISourcesFeedback","LitElement","constructor","this","sourcesOpened","feedbackOpened","sourcesDisabled","feedbackDisabled","revealAllSources","textStrings","closeText","_limitCount","limitRevealed","_textStrings","_selectedFeedbackType","thumbsUpClickCount","thumbsDownClickCount","render","classesSources","classMap","opened","disabled","classesFeedback1","classesFeedback2","html","e","_handleClick","unsafeSVG","chevronIcon","thumbsUpIcon","thumbsUpFilledIcon","thumbsDownIcon","thumbsDownFilledIcon","closeIcon","_sourceEls","length","_handleSlotChange","_toggleLimitRevealed","panel","feedbackType","preventDefault","_a","target","id","includes","_updateFeedbackCounts","_shouldEmitFeedbackEvent","_emitToggleEvent","wasSelected","dispatchEvent","CustomEvent","detail","bubbles","composed","isOddClick","count","_toggleFeedbackPanel","selectedFeedbackType","revealed","forEach","sourceEl","index","style","display","willUpdate","changedProps","has","deepmerge","updated","undefined","get","styles","stylesheet","__decorate","property","type","Boolean","prototype","Object","String","state","queryAssignedElements","slot","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aiSourcesFeedback.js","sources":["../../../../src/components/ai/sourcesFeedback/aiSourcesFeedback.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport {\n customElement,\n property,\n queryAssignedElements,\n state,\n} from 'lit/decorators.js';\nimport { deepmerge } from 'deepmerge-ts';\nimport { classMap } from 'lit-html/directives/class-map.js';\n\nimport stylesheet from './aiSourcesFeedback.scss';\n\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport chevronIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/chevron-down.svg';\nimport thumbsUpIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/thumbs-up.svg';\nimport thumbsDownIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/thumbs-down.svg';\nimport thumbsUpFilledIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/thumbs-up-filled.svg';\nimport thumbsDownFilledIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/thumbs-down-filled.svg';\nimport closeIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/close-simple.svg';\n\nimport '../../reusable/link';\nimport '../../reusable/card';\nimport '../../reusable/button';\n\nconst _defaultTextStrings = {\n sourcesText: 'Sources',\n foundSources: 'Found sources',\n showMore: 'Show more',\n showLess: 'Show less',\n positiveFeedback: 'Share what you liked',\n negativeFeedback: 'Help us improve',\n};\n\n/**\n * AISourcesFeedback Component.\n *\n * @slot copy - copy button\n * @slot sources - source cards in source panel.\n * @slot feedback-form - Positive feedback form.\n * @fires on-toggle - Emits the `opened` state when the panel item opens/closes.\n * @fires on-feedback-deselected - Emits when thumbs-up or thumbs-down button is deselected.\n */\n\n@customElement('kyn-ai-sources-feedback')\nexport class AISourcesFeedback extends LitElement {\n static override styles = [stylesheet];\n\n /** expandable anchor opened state for Sources used. */\n @property({ type: Boolean })\n sourcesOpened = false;\n\n /** expandable anchor opened state for Feedback buttons. */\n @property({ type: Boolean })\n feedbackOpened = false;\n\n /** expandable anchor disabled state for Sources used.. */\n @property({ type: Boolean })\n sourcesDisabled = false;\n\n /** expandable anchor disabled state for Feedback buttons. */\n @property({ type: Boolean })\n feedbackDisabled = false;\n\n /** Limits visible sources behind a \"Show more\" button. */\n @property({ type: Boolean })\n revealAllSources = false;\n\n /** Text string customization. */\n @property({ type: Object })\n textStrings = _defaultTextStrings;\n\n /** Close button text. */\n @property({ type: String })\n closeText = 'Close';\n\n /** Number of sources visible when limited.\n * @internal\n */\n @state()\n _limitCount = 4;\n\n /** Sources limit visibility.\n * @internal\n */\n @state()\n limitRevealed = false;\n\n /** Internal text strings.\n * @internal\n */\n @state()\n _textStrings = _defaultTextStrings;\n\n /** Selecting Positive or Negative Feedback\n * @internal\n */\n @state()\n _selectedFeedbackType: any = null;\n\n /**\n * Queries slotted sources.\n * @ignore\n */\n @queryAssignedElements({ slot: 'sources' })\n _sourceEls!: any;\n\n /** Tracks the number of clicks on thumbs up icon\n * @internal\n */\n @state() thumbsUpClickCount = 0;\n\n /** Tracks the number of clicks on thumbs down icon\n * @internal\n */\n @state() thumbsDownClickCount = 0;\n\n override render() {\n const classesSources: any = classMap({\n 'kyn-sources': true,\n opened: this.sourcesOpened,\n disabled: this.sourcesDisabled,\n });\n const classesFeedback1: any = classMap({\n 'kyn-pos-feedback': true,\n disabled:\n this.feedbackDisabled && this._selectedFeedbackType === 'positive',\n });\n const classesFeedback2: any = classMap({\n 'kyn-neg-feedback': true,\n disabled:\n this.feedbackDisabled && this._selectedFeedbackType === 'positive',\n });\n return html`\n <div class=\"action-bar\">\n <div class=\"left-div\">\n <slot name=\"copy\"></slot>\n\n <div class=\"${classesSources}\">\n <kyn-button\n kind=\"ghost\"\n size=\"small\"\n class=\"kyn-sources-title\"\n iconPosition=\"right\"\n aria-controls=\"kyn-sources-body\"\n aria-expanded=${this.sourcesOpened}\n ?disabled=${this.sourcesDisabled}\n @on-click=\"${(e: Event) => this._handleClick(e, 'sources')}\"\n id=\"kyn-sources-title\"\n >\n <span>${this._textStrings.sourcesText}</span>\n <span class=\"expand-icon\" slot=\"icon\"\n >${unsafeSVG(chevronIcon)}</span\n >\n </kyn-button>\n </div>\n </div>\n\n <div class=\"right-div\">\n <div class=\"${classesFeedback1}\">\n <kyn-button\n kind=\"ghost\"\n size=\"small\"\n id=\"kyn-feedback-title-positive\"\n class=\"kyn-feedback-title\"\n aria-controls=\"kyn-feedback-body\"\n aria-expanded=${this.feedbackOpened}\n ?disabled=${this.feedbackDisabled}\n description=${this._textStrings.positiveFeedback}\n @on-click=${(e: Event) =>\n this._handleClick(e, 'feedback', 'positive')}\n >\n <span slot=\"icon\">\n ${unsafeSVG(\n this.thumbsUpClickCount % 2 === 0\n ? thumbsUpIcon\n : thumbsUpFilledIcon\n )}\n </span>\n </kyn-button>\n </div>\n\n <div class=\"${classesFeedback2}\">\n <kyn-button\n kind=\"ghost\"\n size=\"small\"\n id=\"kyn-feedback-title-negative\"\n class=\"kyn-feedback-title\"\n aria-controls=\"kyn-feedback-body\"\n aria-expanded=${this.feedbackOpened}\n ?disabled=${this.feedbackDisabled}\n description=${this._textStrings.negativeFeedback}\n @on-click=\"${(e: Event) =>\n this._handleClick(e, 'feedback', 'negative')}\"\n >\n <span slot=\"icon\"\n >${unsafeSVG(\n this.thumbsDownClickCount % 2 === 0\n ? thumbsDownIcon\n : thumbsDownFilledIcon\n )}\n </span>\n </kyn-button>\n </div>\n </div>\n </div>\n\n <div\n class=\"${classMap({\n opened: this.sourcesOpened,\n 'kyn-sources-body': true,\n })}\"\n id=\"kyn-sources-body\"\n role=\"region\"\n aria-labelledby=\"kyn-sources-title\"\n >\n <div class=\"close-container\">\n <kyn-button\n class=\"close\"\n @on-click=${(e: Event) => this._handleClick(e, 'sources')}\n }}\n kind=\"ghost\"\n size=\"small\"\n description=${this.closeText}\n >\n <span slot=\"icon\">${unsafeSVG(closeIcon)}</span>\n </kyn-button>\n </div>\n\n <div class=\"found-sources\">\n ${this._textStrings.foundSources} (${this._sourceEls.length}) :\n </div>\n <div class=\"card-container\">\n <slot name=\"sources\" @slotchange=${this._handleSlotChange}></slot>\n ${!this.revealAllSources && this._sourceEls.length > this._limitCount\n ? html`\n <kyn-button\n class=\"reveal-toggle\"\n kind=\"ghost\"\n size=\"small\"\n @on-click=${() =>\n this._toggleLimitRevealed(!this.limitRevealed)}\n >\n ${this.limitRevealed\n ? html`${this._textStrings.showLess}`\n : html` ${this._textStrings.showMore} `}\n </kyn-button>\n `\n : null}\n </div>\n </div>\n\n <div\n class=\"${classMap({\n opened: this.feedbackOpened,\n 'kyn-feedback-body': true,\n })}\"\n id=\"kyn-feedback-body\"\n role=\"region\"\n aria-labelledby=\"kyn-feedback-title-${this._selectedFeedbackType\n ? 'positive'\n : 'negative'}\"\n >\n <div class=\"close-container\">\n <kyn-button\n class=\"close\"\n description=${this.closeText}\n @on-click=${(e: Event) =>\n this._handleClick(e, 'feedback', this._selectedFeedbackType)}\n }}\n kind=\"ghost\"\n size=\"small\"\n >\n <span slot=\"icon\">${unsafeSVG(closeIcon)}</span>\n </kyn-button>\n </div>\n\n <slot name=\"feedback-form\"></slot>\n </div>\n `;\n }\n private _handleClick(\n e: Event,\n panel: 'sources' | 'feedback',\n feedbackType?: 'positive' | 'negative'\n ) {\n e.preventDefault();\n\n if (\n (panel === 'sources' && this.sourcesDisabled) ||\n (panel === 'feedback' && this.feedbackDisabled)\n ) {\n return;\n }\n\n const target = e.target as HTMLElement;\n const isFeedbackButton = target.id?.includes('kyn-feedback-title');\n\n if (isFeedbackButton && feedbackType) {\n this._updateFeedbackCounts(feedbackType);\n }\n\n if (panel === 'sources' || this._shouldEmitFeedbackEvent(feedbackType)) {\n this._emitToggleEvent(panel, feedbackType);\n }\n }\n\n private _updateFeedbackCounts(feedbackType: 'positive' | 'negative') {\n // Checks if the feedbackType was already selected before updating the counts.\n const wasSelected =\n (feedbackType === 'positive' && this.thumbsUpClickCount % 2 !== 0) ||\n (feedbackType === 'negative' && this.thumbsDownClickCount % 2 !== 0);\n\n if (feedbackType === 'positive') {\n this.thumbsUpClickCount++;\n this.thumbsDownClickCount -= this.thumbsDownClickCount % 2;\n } else {\n this.thumbsDownClickCount++;\n this.thumbsUpClickCount -= this.thumbsUpClickCount % 2;\n }\n\n if (wasSelected) {\n this.dispatchEvent(\n new CustomEvent('on-feedback-deselected', {\n detail: { feedbackType },\n bubbles: true,\n composed: true,\n })\n );\n }\n }\n\n private _shouldEmitFeedbackEvent(\n feedbackType?: 'positive' | 'negative'\n ): boolean {\n if (!feedbackType) return false;\n const isOddClick = (count: number) => count % 2 !== 0;\n\n return (\n (feedbackType === 'positive' &&\n (isOddClick(this.thumbsUpClickCount) ||\n (this.feedbackOpened && !isOddClick(this.thumbsUpClickCount)))) ||\n (feedbackType === 'negative' &&\n (isOddClick(this.thumbsDownClickCount) ||\n (this.feedbackOpened && !isOddClick(this.thumbsDownClickCount))))\n );\n }\n\n private _emitToggleEvent(\n panel: 'sources' | 'feedback',\n feedbackType?: 'positive' | 'negative'\n ) {\n if (panel === 'sources') {\n this.sourcesOpened = !this.sourcesOpened;\n this.feedbackOpened = false;\n } else if (panel === 'feedback') {\n this.sourcesOpened = false;\n this._toggleFeedbackPanel(feedbackType);\n }\n\n this.dispatchEvent(\n new CustomEvent('on-toggle', {\n detail: {\n sourcesOpened: this.sourcesOpened,\n feedbackOpened: this.feedbackOpened,\n selectedFeedbackType: this._selectedFeedbackType,\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _toggleFeedbackPanel(feedbackType?: 'positive' | 'negative') {\n if (!feedbackType) return;\n\n if (this._selectedFeedbackType === feedbackType && this.feedbackOpened) {\n this.feedbackOpened = false;\n this._selectedFeedbackType = null;\n } else {\n this.feedbackOpened = true;\n this._selectedFeedbackType = feedbackType;\n }\n }\n\n protected _handleSlotChange() {\n this._toggleLimitRevealed(this.limitRevealed);\n }\n\n private _toggleLimitRevealed(revealed: boolean) {\n this.limitRevealed = revealed;\n\n this._sourceEls.forEach((sourceEl: any, index: any) => {\n if (this.revealAllSources || this.limitRevealed) {\n sourceEl.style.display = 'block';\n } else {\n if (index < this._limitCount) {\n sourceEl.style.display = 'block';\n } else {\n sourceEl.style.display = 'none';\n }\n }\n });\n }\n\n override willUpdate(changedProps: any) {\n if (changedProps.has('textStrings')) {\n this._textStrings = deepmerge(_defaultTextStrings, this.textStrings);\n }\n }\n\n protected override updated(changedProps: any): void {\n if (\n changedProps.has('revealAllSources') &&\n changedProps.get('revealAllSources') !== undefined\n ) {\n this._toggleLimitRevealed(false);\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kyn-ai-sources-feedback': AISourcesFeedback;\n }\n}\n"],"names":["_defaultTextStrings","sourcesText","foundSources","showMore","showLess","positiveFeedback","negativeFeedback","AISourcesFeedback","LitElement","constructor","this","sourcesOpened","feedbackOpened","sourcesDisabled","feedbackDisabled","revealAllSources","textStrings","closeText","_limitCount","limitRevealed","_textStrings","_selectedFeedbackType","thumbsUpClickCount","thumbsDownClickCount","render","classesSources","classMap","opened","disabled","classesFeedback1","classesFeedback2","html","e","_handleClick","unsafeSVG","chevronIcon","thumbsUpIcon","thumbsUpFilledIcon","thumbsDownIcon","thumbsDownFilledIcon","closeIcon","_sourceEls","length","_handleSlotChange","_toggleLimitRevealed","panel","feedbackType","preventDefault","_a","target","id","includes","_updateFeedbackCounts","_shouldEmitFeedbackEvent","_emitToggleEvent","wasSelected","dispatchEvent","CustomEvent","detail","bubbles","composed","isOddClick","count","_toggleFeedbackPanel","selectedFeedbackType","revealed","forEach","sourceEl","index","style","display","willUpdate","changedProps","has","deepmerge","updated","undefined","get","styles","stylesheet","__decorate","property","type","Boolean","prototype","Object","String","state","queryAssignedElements","slot","customElement"],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ import { LitElement } from 'lit';
|
|
|
3
3
|
* Card.
|
|
4
4
|
* @fires on-card-click - Captures the click event of clickable card and emits the original event details. Use `e.stopPropogation()` / `e.preventDefault()` for any internal clickable elements when card type is `'clickable'` to stop bubbling / prevent event.
|
|
5
5
|
* @slot unnamed - Slot for card contents.
|
|
6
|
+
* @part card-wrapper - The wrapper element of the card. Use this part to customize its styles such as padding . Ex: kyn-card::part(card-wrapper)
|
|
7
|
+
|
|
6
8
|
*/
|
|
7
9
|
export declare class Card extends LitElement {
|
|
8
10
|
static styles: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../../src/components/reusable/card/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAMvC
|
|
1
|
+
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../../src/components/reusable/card/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAMvC;;;;;;GAMG;AAEH,qBACa,IAAK,SAAQ,UAAU;IAClC,OAAgB,MAAM,MAAY;IAElC,4CAA4C;IAE5C,IAAI,SAAY;IAEhB,yCAAyC;IAEzC,IAAI,SAAM;IAEV,sKAAsK;IAEtK,GAAG,SAAM;IAET,sKAAsK;IAEtK,MAAM,EAAE,GAAG,CAAW;IAEtB,8FAA8F;IAE9F,UAAU,UAAS;IAEnB,uCAAuC;IAEvC,WAAW,UAAS;IACpB,uCAAuC;IAEvC,SAAS,UAAS;IAET,MAAM;IAmCf,OAAO,CAAC,WAAW;CAMpB;AACD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,IAAI,CAAC;KAClB;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.js","sources":["../../../../src/components/reusable/card/card.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport CardScss from './card.scss';\n\n/**\n * Card.\n * @fires on-card-click - Captures the click event of clickable card and emits the original event details. Use `e.stopPropogation()` / `e.preventDefault()` for any internal clickable elements when card type is `'clickable'` to stop bubbling / prevent event.\n * @slot unnamed - Slot for card contents.\n */\n\n@customElement('kyn-card')\nexport class Card extends LitElement {\n static override styles = CardScss;\n\n /** Card Type. `'normal'` & `'clickable'` */\n @property({ type: String })\n type = 'normal';\n\n /** Card link url for clickable cards. */\n @property({ type: String })\n href = '';\n\n /** Use for Card type `'clickable'`. Defines a relationship between a linked resource and the document. An empty string (default) means no particular relationship. */\n @property({ type: String })\n rel = '';\n\n /** Defines a target attribute for where to load the URL in case of clickable card. Possible options include `'_self'` (deafult), `'_blank'`, `'_parent`', `'_top'` */\n @property({ type: String })\n target: any = '_self';\n\n /** Hide card border. Useful when clickable card use inside `<kyn-notification>` component. */\n @property({ type: Boolean })\n hideBorder = false;\n\n /** Set this to `true` for AI theme. */\n @property({ type: Boolean })\n aiConnected = false;\n /** Set this to `true` for highlight */\n @property({ type: Boolean })\n highlight = false;\n\n override render() {\n const cardWrapperClasses = {\n 'card-wrapper-clickable': true,\n 'card-border': this.hideBorder === false,\n 'ai-Connected': this.aiConnected,\n 'card-highlight': this.highlight,\n 'ai-highlight': this.aiConnected && this.highlight,\n };\n\n const cardWrapperDefaultClasses = {\n 'card-wrapper': true,\n 'ai-Connected': this.aiConnected,\n 'card-highlight': this.highlight,\n 'ai-highlight': this.aiConnected && this.highlight,\n };\n\n return html`${this.type === 'clickable'\n ? html`<a\n part=\"card-wrapper\"\n class=\"${classMap(cardWrapperClasses)}\"\n href=${this.href}\n target=${this.target}\n rel=${this.rel}\n @click=${(e: Event) => this.handleClick(e)}\n >\n <slot></slot>\n </a>`\n : html`<div\n part=\"card-wrapper\"\n class=\"${classMap(cardWrapperDefaultClasses)}\"\n >\n <slot></slot>\n </div>`} `;\n }\n\n private handleClick(e: Event) {\n const event = new CustomEvent('on-card-click', {\n detail: { origEvent: e },\n });\n this.dispatchEvent(event);\n }\n}\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kyn-card': Card;\n }\n}\n"],"names":["Card","LitElement","constructor","this","type","href","rel","target","hideBorder","aiConnected","highlight","render","cardWrapperClasses","cardWrapperDefaultClasses","html","classMap","e","handleClick","event","CustomEvent","detail","origEvent","dispatchEvent","styles","CardScss","__decorate","property","String","prototype","Boolean","customElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"card.js","sources":["../../../../src/components/reusable/card/card.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport CardScss from './card.scss';\n\n/**\n * Card.\n * @fires on-card-click - Captures the click event of clickable card and emits the original event details. Use `e.stopPropogation()` / `e.preventDefault()` for any internal clickable elements when card type is `'clickable'` to stop bubbling / prevent event.\n * @slot unnamed - Slot for card contents.\n * @part card-wrapper - The wrapper element of the card. Use this part to customize its styles such as padding . Ex: kyn-card::part(card-wrapper)\n\n */\n\n@customElement('kyn-card')\nexport class Card extends LitElement {\n static override styles = CardScss;\n\n /** Card Type. `'normal'` & `'clickable'` */\n @property({ type: String })\n type = 'normal';\n\n /** Card link url for clickable cards. */\n @property({ type: String })\n href = '';\n\n /** Use for Card type `'clickable'`. Defines a relationship between a linked resource and the document. An empty string (default) means no particular relationship. */\n @property({ type: String })\n rel = '';\n\n /** Defines a target attribute for where to load the URL in case of clickable card. Possible options include `'_self'` (deafult), `'_blank'`, `'_parent`', `'_top'` */\n @property({ type: String })\n target: any = '_self';\n\n /** Hide card border. Useful when clickable card use inside `<kyn-notification>` component. */\n @property({ type: Boolean })\n hideBorder = false;\n\n /** Set this to `true` for AI theme. */\n @property({ type: Boolean })\n aiConnected = false;\n /** Set this to `true` for highlight */\n @property({ type: Boolean })\n highlight = false;\n\n override render() {\n const cardWrapperClasses = {\n 'card-wrapper-clickable': true,\n 'card-border': this.hideBorder === false,\n 'ai-Connected': this.aiConnected,\n 'card-highlight': this.highlight,\n 'ai-highlight': this.aiConnected && this.highlight,\n };\n\n const cardWrapperDefaultClasses = {\n 'card-wrapper': true,\n 'ai-Connected': this.aiConnected,\n 'card-highlight': this.highlight,\n 'ai-highlight': this.aiConnected && this.highlight,\n };\n\n return html`${this.type === 'clickable'\n ? html`<a\n part=\"card-wrapper\"\n class=\"${classMap(cardWrapperClasses)}\"\n href=${this.href}\n target=${this.target}\n rel=${this.rel}\n @click=${(e: Event) => this.handleClick(e)}\n >\n <slot></slot>\n </a>`\n : html`<div\n part=\"card-wrapper\"\n class=\"${classMap(cardWrapperDefaultClasses)}\"\n >\n <slot></slot>\n </div>`} `;\n }\n\n private handleClick(e: Event) {\n const event = new CustomEvent('on-card-click', {\n detail: { origEvent: e },\n });\n this.dispatchEvent(event);\n }\n}\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kyn-card': Card;\n }\n}\n"],"names":["Card","LitElement","constructor","this","type","href","rel","target","hideBorder","aiConnected","highlight","render","cardWrapperClasses","cardWrapperDefaultClasses","html","classMap","e","handleClick","event","CustomEvent","detail","origEvent","dispatchEvent","styles","CardScss","__decorate","property","String","prototype","Boolean","customElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAeO,IAAMA,EAAN,cAAmBC,EAAnB,WAAAC,uBAKLC,KAAIC,KAAG,SAIPD,KAAIE,KAAG,GAIPF,KAAGG,IAAG,GAINH,KAAMI,OAAQ,QAIdJ,KAAUK,YAAG,EAIbL,KAAWM,aAAG,EAGdN,KAASO,WAAG,CA2Cb,CAzCU,MAAAC,GACP,MAAMC,EAAqB,CACzB,0BAA0B,EAC1B,eAAmC,IAApBT,KAAKK,WACpB,eAAgBL,KAAKM,YACrB,iBAAkBN,KAAKO,UACvB,eAAgBP,KAAKM,aAAeN,KAAKO,WAGrCG,EAA4B,CAChC,gBAAgB,EAChB,eAAgBV,KAAKM,YACrB,iBAAkBN,KAAKO,UACvB,eAAgBP,KAAKM,aAAeN,KAAKO,WAG3C,OAAOI,CAAI,GAAiB,cAAdX,KAAKC,KACfU,CAAI;;mBAEOC,EAASH;iBACXT,KAAKE;mBACHF,KAAKI;gBACRJ,KAAKG;mBACDU,GAAab,KAAKc,YAAYD;;;cAI1CF,CAAI;;mBAEOC,EAASF;;;kBAIzB,CAEO,WAAAI,CAAYD,GAClB,MAAME,EAAQ,IAAIC,YAAY,gBAAiB,CAC7CC,OAAQ,CAAEC,UAAWL,KAEvBb,KAAKmB,cAAcJ,EACpB,GArEelB,EAAMuB,OAAGC,EAIzBC,EAAA,CADCC,EAAS,CAAEtB,KAAMuB,UACF3B,EAAA4B,UAAA,YAAA,GAIhBH,EAAA,CADCC,EAAS,CAAEtB,KAAMuB,UACR3B,EAAA4B,UAAA,YAAA,GAIVH,EAAA,CADCC,EAAS,CAAEtB,KAAMuB,UACT3B,EAAA4B,UAAA,WAAA,GAITH,EAAA,CADCC,EAAS,CAAEtB,KAAMuB,UACI3B,EAAA4B,UAAA,cAAA,GAItBH,EAAA,CADCC,EAAS,CAAEtB,KAAMyB,WACC7B,EAAA4B,UAAA,kBAAA,GAInBH,EAAA,CADCC,EAAS,CAAEtB,KAAMyB,WACE7B,EAAA4B,UAAA,mBAAA,GAGpBH,EAAA,CADCC,EAAS,CAAEtB,KAAMyB,WACA7B,EAAA4B,UAAA,iBAAA,GA5BP5B,EAAIyB,EAAA,CADhBK,EAAc,aACF9B"}
|