@coveo/atomic 3.28.0-pre.d7a2bdbfed → 3.28.0-pre.df6c8a3eb3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/atomic/_atomic.esm.js +1 -1
  2. package/dist/atomic/components/atomic-product-description.js +1 -1
  3. package/dist/atomic/components/atomic-product-description.js.map +1 -1
  4. package/dist/atomic/components/atomic-product-excerpt.js +1 -1
  5. package/dist/atomic/components/atomic-product-excerpt.js.map +1 -1
  6. package/dist/atomic/components/global/environment.js +1 -1
  7. package/dist/atomic/components/interface-common-stencil.js +1 -1
  8. package/dist/atomic/components/{expandable-text.js → stencil-expandable-text.js} +1 -1
  9. package/dist/atomic/components/stencil-expandable-text.js.map +1 -0
  10. package/dist/atomic/{p-de00bdd6.js → p-1d02a670.js} +1 -1
  11. package/dist/atomic/p-1d02a670.js.map +1 -0
  12. package/dist/atomic/{p-be05ddd0.entry.js → p-3cc601ad.entry.js} +2 -2
  13. package/dist/atomic/p-5e73a3e8.js +2 -0
  14. package/dist/atomic/{p-7cb3144b.js → p-7ed31f46.js} +2 -2
  15. package/dist/atomic/{p-1cb6a01c.entry.js → p-ba6a30a7.entry.js} +2 -2
  16. package/dist/atomic/p-ba6a30a7.entry.js.map +1 -0
  17. package/dist/atomic/{p-b3604b54.entry.js → p-bd32ca3c.entry.js} +2 -2
  18. package/dist/atomic/p-bd32ca3c.entry.js.map +1 -0
  19. package/dist/atomic/{p-e80d722f.entry.js → p-c0b3720d.entry.js} +2 -2
  20. package/dist/atomic/{p-9e4b1ecb.entry.js → p-e46517e9.entry.js} +2 -2
  21. package/dist/atomic/{p-6fa077f7.entry.js → p-f68cee5d.entry.js} +2 -2
  22. package/dist/cjs/{analytics-config-d9450484.js → analytics-config-f82932e2.js} +2 -2
  23. package/dist/cjs/{analytics-config-d9450484.js.map → analytics-config-f82932e2.js.map} +1 -1
  24. package/dist/cjs/atomic-commerce-recommendation-interface.cjs.entry.js +1 -1
  25. package/dist/cjs/atomic-insight-interface.cjs.entry.js +2 -2
  26. package/dist/cjs/atomic-product-description.cjs.entry.js +2 -2
  27. package/dist/cjs/atomic-product-description.cjs.entry.js.map +1 -1
  28. package/dist/cjs/atomic-product-excerpt.cjs.entry.js +2 -2
  29. package/dist/cjs/atomic-product-excerpt.cjs.entry.js.map +1 -1
  30. package/dist/cjs/atomic-recs-interface.cjs.entry.js +2 -2
  31. package/dist/cjs/atomic-search-interface.cjs.entry.js +2 -2
  32. package/dist/cjs/{interface-common-stencil-12a85cad.js → interface-common-stencil-98f073f6.js} +2 -2
  33. package/dist/cjs/{interface-common-stencil-12a85cad.js.map → interface-common-stencil-98f073f6.js.map} +1 -1
  34. package/dist/cjs/{expandable-text-36fe9f8d.js → stencil-expandable-text-80915f74.js} +1 -1
  35. package/dist/cjs/stencil-expandable-text-80915f74.js.map +1 -0
  36. package/dist/cjs/version.cjs.js +1 -1
  37. package/dist/esm/{analytics-config-40a361c2.js → analytics-config-253004a0.js} +2 -2
  38. package/dist/esm/{analytics-config-40a361c2.js.map → analytics-config-253004a0.js.map} +1 -1
  39. package/dist/esm/atomic-commerce-recommendation-interface.entry.js +1 -1
  40. package/dist/esm/atomic-insight-interface.entry.js +2 -2
  41. package/dist/esm/atomic-product-description.entry.js +1 -1
  42. package/dist/esm/atomic-product-description.entry.js.map +1 -1
  43. package/dist/esm/atomic-product-excerpt.entry.js +1 -1
  44. package/dist/esm/atomic-product-excerpt.entry.js.map +1 -1
  45. package/dist/esm/atomic-recs-interface.entry.js +2 -2
  46. package/dist/esm/atomic-search-interface.entry.js +2 -2
  47. package/dist/esm/{interface-common-stencil-0c6e5ba8.js → interface-common-stencil-4bb4d80c.js} +2 -2
  48. package/dist/esm/{interface-common-stencil-0c6e5ba8.js.map → interface-common-stencil-4bb4d80c.js.map} +1 -1
  49. package/dist/esm/{expandable-text-4eebe177.js → stencil-expandable-text-957d599c.js} +1 -1
  50. package/dist/esm/stencil-expandable-text-957d599c.js.map +1 -0
  51. package/dist/esm/version.js +1 -1
  52. package/dist/types/components/commerce/atomic-product-description/atomic-product-description.d.ts +1 -1
  53. package/dist/types/components/commerce/atomic-product-excerpt/atomic-product-excerpt.d.ts +1 -1
  54. package/dist/types/components/common/expandable-text/expandable-text.d.ts +4 -4
  55. package/dist/types/components/common/expandable-text/stencil-expandable-text.d.ts +13 -0
  56. package/dist/types/components.d.ts +2 -2
  57. package/docs/atomic-docs.json +7 -7
  58. package/package.json +1 -1
  59. package/dist/atomic/components/expandable-text.js.map +0 -1
  60. package/dist/atomic/p-1cb6a01c.entry.js.map +0 -1
  61. package/dist/atomic/p-b3604b54.entry.js.map +0 -1
  62. package/dist/atomic/p-de00bdd6.js.map +0 -1
  63. package/dist/atomic/p-fccb1769.js +0 -2
  64. package/dist/cjs/expandable-text-36fe9f8d.js.map +0 -1
  65. package/dist/esm/expandable-text-4eebe177.js.map +0 -1
  66. /package/dist/atomic/{p-be05ddd0.entry.js.map → p-3cc601ad.entry.js.map} +0 -0
  67. /package/dist/atomic/{p-fccb1769.js.map → p-5e73a3e8.js.map} +0 -0
  68. /package/dist/atomic/{p-7cb3144b.js.map → p-7ed31f46.js.map} +0 -0
  69. /package/dist/atomic/{p-e80d722f.entry.js.map → p-c0b3720d.entry.js.map} +0 -0
  70. /package/dist/atomic/{p-9e4b1ecb.entry.js.map → p-e46517e9.entry.js.map} +0 -0
  71. /package/dist/atomic/{p-6fa077f7.entry.js.map → p-f68cee5d.entry.js.map} +0 -0
@@ -33,4 +33,4 @@ const ExpandableText = ({ isExpanded, isTruncated, truncateAfter, onToggleExpand
33
33
 
34
34
  export { ExpandableText as E };
35
35
 
36
- //# sourceMappingURL=expandable-text-4eebe177.js.map
36
+ //# sourceMappingURL=stencil-expandable-text-957d599c.js.map
@@ -0,0 +1 @@
1
+ {"file":"stencil-expandable-text-957d599c.js","mappings":";;;;AAiBA,MAAM,iBAAiB,GAAG,CAAC,aAA4B;IACrD,MAAM,YAAY,GAAkC;QAClD,IAAI,EAAE,iBAAiB;QACvB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;KAClB,CAAC;IACF,OAAO,YAAY,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,UAAmB,EACnB,WAAoB,EACpB,aAAsB,EACtB,cAAwC,EACxC,aAAqB,EACrB,aAAqB;IAErB,IAAI,WAAW,GAAG,0DAA0D,CAAC;IAC7E,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE;QAC/B,WAAW,IAAI,YAAY,CAAC;KAC7B;SAAM,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE;QACvD,WAAW,IAAI,SAAS,CAAC;KAC1B;IAED,MAAM,KAAK,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;IAEzD,QACE,EAAC,MAAM,IACL,KAAK,EAAC,cAAc,EACpB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,cAAc;QAEvB,mBACE,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,EACvC,KAAK,EAAC,yBAAyB,GAClB;QACd,KAAK,CACC,EACT;AACJ,CAAC,CAAC;MAEW,cAAc,GAA6C,CACtE,EACE,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,GAAG,KAAK,GACtB,EACD,QAAQ;IAER,QACE,WAAK,KAAK,EAAC,2BAA2B;QACpC,WACE,IAAI,EAAC,iBAAiB,EACtB,KAAK,EAAE,mBAAmB,CAAC,UAAU,GAAG,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,cAAc,aAAa,EAAE,IAEzG,QAAQ,CACL;QACL,oBAAoB,CACnB,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,CACd,CACG,EACN;AACJ;;;;","names":[],"sources":["src/components/common/expandable-text/stencil-expandable-text.tsx"],"sourcesContent":["import {FunctionalComponent, h} from '@stencil/core';\nimport MinusIcon from '../../../images/minus.svg';\nimport PlusIcon from '../../../images/plus.svg';\nimport {Button} from '../stencil-button';\n\nexport type TruncateAfter = 'none' | '1' | '2' | '3' | '4';\n\ninterface ExpandableTextProps {\n isExpanded: boolean;\n isTruncated: boolean;\n isCollapsible?: boolean;\n truncateAfter: TruncateAfter;\n onToggleExpand: (e: MouseEvent | undefined) => void;\n showMoreLabel: string;\n showLessLabel: string;\n}\n\nconst getLineClampClass = (truncateAfter: TruncateAfter) => {\n const lineClampMap: Record<TruncateAfter, string> = {\n none: 'line-clamp-none',\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n };\n return lineClampMap[truncateAfter] || 'line-clamp-2';\n};\n\nconst renderShowHideButton = (\n isExpanded: boolean,\n isTruncated: boolean,\n isCollapsible: boolean,\n onToggleExpand: (e?: MouseEvent) => void,\n showMoreLabel: string,\n showLessLabel: string\n) => {\n let buttonClass = 'expandable-text-button p-1 text-xs leading-[calc(1/.75)]';\n if (!isTruncated && !isExpanded) {\n buttonClass += ' invisible';\n } else if (!isCollapsible && !isTruncated && isExpanded) {\n buttonClass += ' hidden';\n }\n\n const label = isExpanded ? showLessLabel : showMoreLabel;\n\n return (\n <Button\n style=\"text-primary\"\n class={buttonClass}\n title={label}\n onClick={onToggleExpand}\n >\n <atomic-icon\n icon={isExpanded ? MinusIcon : PlusIcon}\n class=\"mx-1 w-2 align-baseline\"\n ></atomic-icon>\n {label}\n </Button>\n );\n};\n\nexport const ExpandableText: FunctionalComponent<ExpandableTextProps> = (\n {\n isExpanded,\n isTruncated,\n truncateAfter,\n onToggleExpand,\n showMoreLabel,\n showLessLabel,\n isCollapsible = false,\n },\n children\n) => {\n return (\n <div class=\"flex flex-col items-start\">\n <div\n part=\"expandable-text\"\n class={`expandable-text ${!isExpanded ? getLineClampClass(truncateAfter) : ''} min-lines-${truncateAfter}`}\n >\n {children}\n </div>\n {renderShowHideButton(\n isExpanded,\n isTruncated,\n isCollapsible,\n onToggleExpand,\n showMoreLabel,\n showLessLabel\n )}\n </div>\n );\n};\n"],"version":3}
@@ -1,2 +1,2 @@
1
1
  export const headlessVersion = '3.27.1';
2
- export const atomicVersion = '3.28.0-pre.d7a2bdbfed';
2
+ export const atomicVersion = '3.28.0-pre.df6c8a3eb3';
@@ -1,5 +1,5 @@
1
1
  import { InitializableComponent } from '../../../utils/initialization-utils';
2
- import { TruncateAfter } from '../../common/expandable-text/expandable-text';
2
+ import { TruncateAfter } from '../../common/expandable-text/stencil-expandable-text';
3
3
  import { CommerceBindings } from '../atomic-commerce-interface/atomic-commerce-interface';
4
4
  /**
5
5
  * @alpha
@@ -1,5 +1,5 @@
1
1
  import { InitializableComponent } from '../../../utils/initialization-utils';
2
- import { TruncateAfter } from '../../common/expandable-text/expandable-text';
2
+ import { TruncateAfter } from '../../common/expandable-text/stencil-expandable-text';
3
3
  import { CommerceBindings } from '../atomic-commerce-interface/atomic-commerce-interface';
4
4
  /**
5
5
  * @alpha
@@ -1,6 +1,7 @@
1
- import { FunctionalComponent } from '../../../stencil-public-runtime';
1
+ import { FunctionalComponentWithChildren } from "../../../utils/functional-component-utils";
2
+ import '../atomic-icon/atomic-icon';
2
3
  export type TruncateAfter = 'none' | '1' | '2' | '3' | '4';
3
- interface ExpandableTextProps {
4
+ export interface ExpandableTextProps {
4
5
  isExpanded: boolean;
5
6
  isTruncated: boolean;
6
7
  isCollapsible?: boolean;
@@ -9,5 +10,4 @@ interface ExpandableTextProps {
9
10
  showMoreLabel: string;
10
11
  showLessLabel: string;
11
12
  }
12
- export declare const ExpandableText: FunctionalComponent<ExpandableTextProps>;
13
- export {};
13
+ export declare const renderExpandableText: FunctionalComponentWithChildren<ExpandableTextProps>;
@@ -0,0 +1,13 @@
1
+ import { FunctionalComponent } from '../../../stencil-public-runtime';
2
+ export type TruncateAfter = 'none' | '1' | '2' | '3' | '4';
3
+ interface ExpandableTextProps {
4
+ isExpanded: boolean;
5
+ isTruncated: boolean;
6
+ isCollapsible?: boolean;
7
+ truncateAfter: TruncateAfter;
8
+ onToggleExpand: (e: MouseEvent | undefined) => void;
9
+ showMoreLabel: string;
10
+ showLessLabel: string;
11
+ }
12
+ export declare const ExpandableText: FunctionalComponent<ExpandableTextProps>;
13
+ export {};
@@ -22,7 +22,7 @@ import { Actions, InsightResultActionClickedEvent } from "./components/insight/a
22
22
  import { InsightResultAttachToCaseEvent } from "./components/insight/atomic-insight-result-attach-to-case-action/atomic-insight-result-attach-to-case-action";
23
23
  import { Section } from "./components/common/atomic-layout-section/sections";
24
24
  import { SelectChildProductEventArgs } from "./components/commerce/atomic-product-children/select-child-product-event";
25
- import { TruncateAfter } from "./components/common/expandable-text/expandable-text";
25
+ import { TruncateAfter } from "./components/common/expandable-text/stencil-expandable-text";
26
26
  import { ItemDisplayImageSize as ItemDisplayImageSize1 } from "./components.d";
27
27
  import { RecommendationEngine, InteractiveResult as RecsInteractiveResult, LogLevel as RecsLogLevel, Result as RecsResult, ResultTemplate as RecsResultTemplate, ResultTemplateCondition as RecsResultTemplateCondition } from "@coveo/headless/recommendation";
28
28
  import { RecsInitializationOptions } from "./components/recommendations/atomic-recs-interface/atomic-recs-interface";
@@ -51,7 +51,7 @@ export { Actions, InsightResultActionClickedEvent } from "./components/insight/a
51
51
  export { InsightResultAttachToCaseEvent } from "./components/insight/atomic-insight-result-attach-to-case-action/atomic-insight-result-attach-to-case-action";
52
52
  export { Section } from "./components/common/atomic-layout-section/sections";
53
53
  export { SelectChildProductEventArgs } from "./components/commerce/atomic-product-children/select-child-product-event";
54
- export { TruncateAfter } from "./components/common/expandable-text/expandable-text";
54
+ export { TruncateAfter } from "./components/common/expandable-text/stencil-expandable-text";
55
55
  export { ItemDisplayImageSize as ItemDisplayImageSize1 } from "./components.d";
56
56
  export { RecommendationEngine, InteractiveResult as RecsInteractiveResult, LogLevel as RecsLogLevel, Result as RecsResult, ResultTemplate as RecsResultTemplate, ResultTemplateCondition as RecsResultTemplateCondition } from "@coveo/headless/recommendation";
57
57
  export { RecsInitializationOptions } from "./components/recommendations/atomic-recs-interface/atomic-recs-interface";
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2025-07-02T16:47:39",
2
+ "timestamp": "2025-07-02T22:51:30",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.20.0",
@@ -7819,8 +7819,8 @@
7819
7819
  "references": {
7820
7820
  "TruncateAfter": {
7821
7821
  "location": "import",
7822
- "path": "../../common/expandable-text/expandable-text",
7823
- "id": "src/components/common/expandable-text/expandable-text.tsx::TruncateAfter"
7822
+ "path": "../../common/expandable-text/stencil-expandable-text",
7823
+ "id": "src/components/common/expandable-text/stencil-expandable-text.tsx::TruncateAfter"
7824
7824
  }
7825
7825
  }
7826
7826
  },
@@ -7919,8 +7919,8 @@
7919
7919
  "references": {
7920
7920
  "TruncateAfter": {
7921
7921
  "location": "import",
7922
- "path": "../../common/expandable-text/expandable-text",
7923
- "id": "src/components/common/expandable-text/expandable-text.tsx::TruncateAfter"
7922
+ "path": "../../common/expandable-text/stencil-expandable-text",
7923
+ "id": "src/components/common/expandable-text/stencil-expandable-text.tsx::TruncateAfter"
7924
7924
  }
7925
7925
  }
7926
7926
  },
@@ -19427,10 +19427,10 @@
19427
19427
  "docstring": "",
19428
19428
  "path": "src/components/commerce/atomic-product-children/select-child-product-event.ts"
19429
19429
  },
19430
- "src/components/common/expandable-text/expandable-text.tsx::TruncateAfter": {
19430
+ "src/components/common/expandable-text/stencil-expandable-text.tsx::TruncateAfter": {
19431
19431
  "declaration": "export type TruncateAfter = 'none' | '1' | '2' | '3' | '4';",
19432
19432
  "docstring": "",
19433
- "path": "src/components/common/expandable-text/expandable-text.tsx"
19433
+ "path": "src/components/common/expandable-text/stencil-expandable-text.tsx"
19434
19434
  },
19435
19435
  "src/components.d.ts::ItemDisplayImageSize": {
19436
19436
  "declaration": "any",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@coveo/atomic",
3
3
  "type": "module",
4
- "version": "3.28.0-pre.d7a2bdbfed",
4
+ "version": "3.28.0-pre.df6c8a3eb3",
5
5
  "description": "A web-component library for building modern UIs interfacing with the Coveo platform",
6
6
  "homepage": "https://docs.coveo.com/en/atomic/latest/",
7
7
  "repository": {
@@ -1 +0,0 @@
1
- {"file":"expandable-text.js","mappings":";;;;AAiBA,MAAM,iBAAiB,GAAG,CAAC,aAA4B;IACrD,MAAM,YAAY,GAAkC;QAClD,IAAI,EAAE,iBAAiB;QACvB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;KAClB,CAAC;IACF,OAAO,YAAY,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,UAAmB,EACnB,WAAoB,EACpB,aAAsB,EACtB,cAAwC,EACxC,aAAqB,EACrB,aAAqB;IAErB,IAAI,WAAW,GAAG,0DAA0D,CAAC;IAC7E,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE;QAC/B,WAAW,IAAI,YAAY,CAAC;KAC7B;SAAM,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE;QACvD,WAAW,IAAI,SAAS,CAAC;KAC1B;IAED,MAAM,KAAK,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;IAEzD,QACE,EAAC,MAAM,IACL,KAAK,EAAC,cAAc,EACpB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,cAAc;QAEvB,mBACE,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,EACvC,KAAK,EAAC,yBAAyB,GAClB;QACd,KAAK,CACC,EACT;AACJ,CAAC,CAAC;MAEW,cAAc,GAA6C,CACtE,EACE,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,GAAG,KAAK,GACtB,EACD,QAAQ;IAER,QACE,WAAK,KAAK,EAAC,2BAA2B;QACpC,WACE,IAAI,EAAC,iBAAiB,EACtB,KAAK,EAAE,mBAAmB,CAAC,UAAU,GAAG,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,cAAc,aAAa,EAAE,IAEzG,QAAQ,CACL;QACL,oBAAoB,CACnB,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,CACd,CACG,EACN;AACJ;;;;","names":[],"sources":["src/components/common/expandable-text/expandable-text.tsx"],"sourcesContent":["import {FunctionalComponent, h} from '@stencil/core';\nimport MinusIcon from '../../../images/minus.svg';\nimport PlusIcon from '../../../images/plus.svg';\nimport {Button} from '../stencil-button';\n\nexport type TruncateAfter = 'none' | '1' | '2' | '3' | '4';\n\ninterface ExpandableTextProps {\n isExpanded: boolean;\n isTruncated: boolean;\n isCollapsible?: boolean;\n truncateAfter: TruncateAfter;\n onToggleExpand: (e: MouseEvent | undefined) => void;\n showMoreLabel: string;\n showLessLabel: string;\n}\n\nconst getLineClampClass = (truncateAfter: TruncateAfter) => {\n const lineClampMap: Record<TruncateAfter, string> = {\n none: 'line-clamp-none',\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n };\n return lineClampMap[truncateAfter] || 'line-clamp-2';\n};\n\nconst renderShowHideButton = (\n isExpanded: boolean,\n isTruncated: boolean,\n isCollapsible: boolean,\n onToggleExpand: (e?: MouseEvent) => void,\n showMoreLabel: string,\n showLessLabel: string\n) => {\n let buttonClass = 'expandable-text-button p-1 text-xs leading-[calc(1/.75)]';\n if (!isTruncated && !isExpanded) {\n buttonClass += ' invisible';\n } else if (!isCollapsible && !isTruncated && isExpanded) {\n buttonClass += ' hidden';\n }\n\n const label = isExpanded ? showLessLabel : showMoreLabel;\n\n return (\n <Button\n style=\"text-primary\"\n class={buttonClass}\n title={label}\n onClick={onToggleExpand}\n >\n <atomic-icon\n icon={isExpanded ? MinusIcon : PlusIcon}\n class=\"mx-1 w-2 align-baseline\"\n ></atomic-icon>\n {label}\n </Button>\n );\n};\n\nexport const ExpandableText: FunctionalComponent<ExpandableTextProps> = (\n {\n isExpanded,\n isTruncated,\n truncateAfter,\n onToggleExpand,\n showMoreLabel,\n showLessLabel,\n isCollapsible = false,\n },\n children\n) => {\n return (\n <div class=\"flex flex-col items-start\">\n <div\n part=\"expandable-text\"\n class={`expandable-text ${!isExpanded ? getLineClampClass(truncateAfter) : ''} min-lines-${truncateAfter}`}\n >\n {children}\n </div>\n {renderShowHideButton(\n isExpanded,\n isTruncated,\n isCollapsible,\n onToggleExpand,\n showMoreLabel,\n showLessLabel\n )}\n </div>\n );\n};\n"],"version":3}
@@ -1 +0,0 @@
1
- {"version":3,"names":["atomicProductExcerptCss","AtomicProductExcerptStyle0","AtomicProductExcerpt","constructor","hostRef","this","isExpanded","isTruncated","truncateAfter","isCollapsible","resizeObserver","ResizeObserver","excerptText","scrollHeight","offsetHeight","validateProps","Schema","StringValue","constrainTo","validate","componentDidLoad","hostElement","querySelector","observe","onToggleExpand","e","stopPropagation","disconnectedCallback","disconnect","render","productExcerpt","product","h","Hidden","ExpandableText","showMoreLabel","bindings","i18n","t","showLessLabel","field","__decorate","InitializeBindings","ProductContext"],"sources":["src/components/commerce/atomic-product-excerpt/atomic-product-excerpt.pcss?tag=atomic-product-excerpt","src/components/commerce/atomic-product-excerpt/atomic-product-excerpt.tsx"],"sourcesContent":["@import '../../common/expandable-text/expandable-text.pcss';\n","import {Schema, StringValue} from '@coveo/bueno';\nimport {Product} from '@coveo/headless/commerce';\nimport {Component, State, h, Element, Prop} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {\n ExpandableText,\n TruncateAfter,\n} from '../../common/expandable-text/expandable-text';\nimport {Hidden} from '../../common/stencil-hidden';\nimport {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\n\n/**\n * @alpha\n * The `atomic-product-excerpt` component renders the excerpt of a product generated at query time.\n */\n@Component({\n tag: 'atomic-product-excerpt',\n styleUrl: 'atomic-product-excerpt.pcss',\n shadow: false,\n})\nexport class AtomicProductExcerpt\n implements InitializableComponent<CommerceBindings>\n{\n @InitializeBindings() public bindings!: CommerceBindings;\n @ProductContext() private product!: Product;\n\n @Element() hostElement!: HTMLElement;\n\n public error!: Error;\n\n @State() private isExpanded = false;\n @State() private isTruncated = false;\n\n private excerptText!: HTMLDivElement;\n private resizeObserver: ResizeObserver;\n\n /**\n * The number of lines after which the product excerpt should be truncated. A value of \"none\" will disable truncation.\n */\n @Prop() public truncateAfter: TruncateAfter = '2';\n\n /**\n * Whether the excerpt should be collapsible after being expanded.\n */\n @Prop() public isCollapsible = false;\n\n constructor() {\n this.resizeObserver = new ResizeObserver(() => {\n if (\n this.excerptText &&\n this.excerptText.scrollHeight > this.excerptText.offsetHeight\n ) {\n this.isTruncated = true;\n } else {\n this.isTruncated = false;\n }\n });\n this.validateProps();\n }\n\n private validateProps() {\n new Schema({\n truncateAfter: new StringValue({\n constrainTo: ['none', '1', '2', '3', '4'],\n }),\n }).validate({\n truncateAfter: this.truncateAfter,\n });\n }\n\n componentDidLoad() {\n this.excerptText = this.hostElement.querySelector(\n '.expandable-text'\n ) as HTMLDivElement;\n if (this.excerptText) {\n this.resizeObserver.observe(this.excerptText);\n }\n }\n\n private onToggleExpand(e?: MouseEvent) {\n if (e) {\n e.stopPropagation();\n }\n\n this.isExpanded = !this.isExpanded;\n }\n\n disconnectedCallback() {\n this.resizeObserver.disconnect();\n }\n\n public render() {\n const productExcerpt = this.product['excerpt'] ?? null;\n\n if (!productExcerpt) {\n return <Hidden />;\n }\n\n return (\n <ExpandableText\n isExpanded={this.isExpanded}\n isTruncated={this.isTruncated}\n truncateAfter={this.truncateAfter}\n onToggleExpand={(e) => this.onToggleExpand(e)}\n showMoreLabel={this.bindings.i18n.t('show-more')}\n showLessLabel={this.bindings.i18n.t('show-less')}\n isCollapsible={this.isCollapsible}\n >\n <atomic-product-text field=\"excerpt\"></atomic-product-text>\n </ExpandableText>\n );\n }\n}\n"],"mappings":"obAAA,MAAMA,EAA0B,yUAChC,MAAAC,EAAeD,E,iXCuBFE,EAAoB,MA0B/B,WAAAC,CAAAC,G,UAhBiBC,KAAAC,WAAa,MACbD,KAAAE,YAAc,MAQhBF,KAAAG,cAA+B,IAK/BH,KAAAI,cAAgB,M,gBAdD,M,iBACC,M,mBAQe,I,mBAKf,MAG7BJ,KAAKK,eAAiB,IAAIC,gBAAe,KACvC,GACEN,KAAKO,aACLP,KAAKO,YAAYC,aAAeR,KAAKO,YAAYE,aACjD,CACAT,KAAKE,YAAc,I,KACd,CACLF,KAAKE,YAAc,K,KAGvBF,KAAKU,e,CAGC,aAAAA,GACN,IAAIC,EAAO,CACTR,cAAe,IAAIS,EAAY,CAC7BC,YAAa,CAAC,OAAQ,IAAK,IAAK,IAAK,SAEtCC,SAAS,CACVX,cAAeH,KAAKG,e,CAIxB,gBAAAY,GACEf,KAAKO,YAAcP,KAAKgB,YAAYC,cAClC,oBAEF,GAAIjB,KAAKO,YAAa,CACpBP,KAAKK,eAAea,QAAQlB,KAAKO,Y,EAI7B,cAAAY,CAAeC,GACrB,GAAIA,EAAG,CACLA,EAAEC,iB,CAGJrB,KAAKC,YAAcD,KAAKC,U,CAG1B,oBAAAqB,GACEtB,KAAKK,eAAekB,Y,CAGf,MAAAC,GACL,MAAMC,EAAiBzB,KAAK0B,QAAQ,YAAc,KAElD,IAAKD,EAAgB,CACnB,OAAOE,EAACC,EAAM,K,CAGhB,OACED,EAACE,EAAc,CACb5B,WAAYD,KAAKC,WACjBC,YAAaF,KAAKE,YAClBC,cAAeH,KAAKG,cACpBgB,eAAiBC,GAAMpB,KAAKmB,eAAeC,GAC3CU,cAAe9B,KAAK+B,SAASC,KAAKC,EAAE,aACpCC,cAAelC,KAAK+B,SAASC,KAAKC,EAAE,aACpC7B,cAAeJ,KAAKI,eAEpBuB,EAAA,uBAAqBQ,MAAM,Y,oCArFJC,EAAA,CAA5BC,K,+BACyBD,EAAA,CAAzBE,K","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["atomicProductDescriptionCss","AtomicProductDescriptionStyle0","AtomicProductDescription","constructor","hostRef","this","isExpanded","isTruncated","truncateAfter","field","isCollapsible","resizeObserver","ResizeObserver","descriptionText","scrollHeight","clientHeight","validateProps","Schema","StringValue","constrainTo","validate","componentDidLoad","hostElement","querySelector","observe","onToggleExpand","e","stopPropagation","disconnectedCallback","disconnect","render","productDescription","product","h","Hidden","ExpandableText","showMoreLabel","bindings","i18n","t","showLessLabel","__decorate","InitializeBindings","ProductContext"],"sources":["src/components/commerce/atomic-product-description/atomic-product-description.pcss?tag=atomic-product-description","src/components/commerce/atomic-product-description/atomic-product-description.tsx"],"sourcesContent":["@import '../../common/expandable-text/expandable-text.pcss';\n","import {Schema, StringValue} from '@coveo/bueno';\nimport {Product} from '@coveo/headless/commerce';\nimport {Component, State, h, Element, Prop} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {\n ExpandableText,\n TruncateAfter,\n} from '../../common/expandable-text/expandable-text';\nimport {Hidden} from '../../common/stencil-hidden';\nimport {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\n\n/**\n * @alpha\n * The `atomic-product-description` component renders the description of a product.\n */\n@Component({\n tag: 'atomic-product-description',\n styleUrl: 'atomic-product-description.pcss',\n shadow: false,\n})\nexport class AtomicProductDescription\n implements InitializableComponent<CommerceBindings>\n{\n @InitializeBindings() public bindings!: CommerceBindings;\n @ProductContext() private product!: Product;\n\n @Element() hostElement!: HTMLElement;\n\n public error!: Error;\n\n @State() private isExpanded = false;\n @State() private isTruncated = false;\n\n private descriptionText!: HTMLDivElement;\n private resizeObserver: ResizeObserver;\n\n /**\n * The number of lines after which the product description should be truncated. A value of \"none\" will disable truncation.\n */\n @Prop() public truncateAfter: TruncateAfter = '2';\n\n /**\n * The name of the description field to use.\n */\n @Prop() public field: 'ec_description' | 'ec_shortdesc' = 'ec_shortdesc';\n\n /**\n * Whether the description should be collapsible after being expanded.\n */\n @Prop() public isCollapsible = true;\n\n constructor() {\n this.resizeObserver = new ResizeObserver(() => {\n if (\n this.descriptionText &&\n this.descriptionText.scrollHeight > this.descriptionText.clientHeight\n ) {\n this.isTruncated = true;\n } else {\n this.isTruncated = false;\n }\n });\n this.validateProps();\n }\n\n private validateProps() {\n new Schema({\n truncateAfter: new StringValue({\n constrainTo: ['none', '1', '2', '3', '4'],\n }),\n field: new StringValue({\n constrainTo: ['ec_shortdesc', 'ec_description'],\n }),\n }).validate({\n truncateAfter: this.truncateAfter,\n field: this.field,\n });\n }\n\n componentDidLoad() {\n this.descriptionText = this.hostElement.querySelector(\n '.expandable-text'\n ) as HTMLDivElement;\n if (this.descriptionText) {\n this.resizeObserver.observe(this.descriptionText);\n }\n }\n\n private onToggleExpand(e?: MouseEvent) {\n if (e) {\n e.stopPropagation();\n }\n\n this.isExpanded = !this.isExpanded;\n }\n\n disconnectedCallback() {\n this.resizeObserver.disconnect();\n }\n\n public render() {\n const productDescription = this.product[this.field] ?? null;\n\n if (!productDescription) {\n return <Hidden />;\n }\n\n return (\n <ExpandableText\n isExpanded={this.isExpanded}\n isTruncated={this.isTruncated}\n truncateAfter={this.truncateAfter}\n onToggleExpand={(e) => this.onToggleExpand(e)}\n showMoreLabel={this.bindings.i18n.t('show-more')}\n showLessLabel={this.bindings.i18n.t('show-less')}\n isCollapsible={this.isCollapsible}\n >\n <atomic-product-text field={this.field}></atomic-product-text>\n </ExpandableText>\n );\n }\n}\n"],"mappings":"obAAA,MAAMA,EAA8B,yUACpC,MAAAC,EAAeD,E,iXCuBFE,EAAwB,MA+BnC,WAAAC,CAAAC,G,UArBiBC,KAAAC,WAAa,MACbD,KAAAE,YAAc,MAQhBF,KAAAG,cAA+B,IAK/BH,KAAAI,MAA2C,eAK3CJ,KAAAK,cAAgB,K,gBAnBD,M,iBACC,M,mBAQe,I,WAKY,e,mBAK3B,KAG7BL,KAAKM,eAAiB,IAAIC,gBAAe,KACvC,GACEP,KAAKQ,iBACLR,KAAKQ,gBAAgBC,aAAeT,KAAKQ,gBAAgBE,aACzD,CACAV,KAAKE,YAAc,I,KACd,CACLF,KAAKE,YAAc,K,KAGvBF,KAAKW,e,CAGC,aAAAA,GACN,IAAIC,EAAO,CACTT,cAAe,IAAIU,EAAY,CAC7BC,YAAa,CAAC,OAAQ,IAAK,IAAK,IAAK,OAEvCV,MAAO,IAAIS,EAAY,CACrBC,YAAa,CAAC,eAAgB,sBAE/BC,SAAS,CACVZ,cAAeH,KAAKG,cACpBC,MAAOJ,KAAKI,O,CAIhB,gBAAAY,GACEhB,KAAKQ,gBAAkBR,KAAKiB,YAAYC,cACtC,oBAEF,GAAIlB,KAAKQ,gBAAiB,CACxBR,KAAKM,eAAea,QAAQnB,KAAKQ,gB,EAI7B,cAAAY,CAAeC,GACrB,GAAIA,EAAG,CACLA,EAAEC,iB,CAGJtB,KAAKC,YAAcD,KAAKC,U,CAG1B,oBAAAsB,GACEvB,KAAKM,eAAekB,Y,CAGf,MAAAC,GACL,MAAMC,EAAqB1B,KAAK2B,QAAQ3B,KAAKI,QAAU,KAEvD,IAAKsB,EAAoB,CACvB,OAAOE,EAACC,EAAM,K,CAGhB,OACED,EAACE,EAAc,CACb7B,WAAYD,KAAKC,WACjBC,YAAaF,KAAKE,YAClBC,cAAeH,KAAKG,cACpBiB,eAAiBC,GAAMrB,KAAKoB,eAAeC,GAC3CU,cAAe/B,KAAKgC,SAASC,KAAKC,EAAE,aACpCC,cAAenC,KAAKgC,SAASC,KAAKC,EAAE,aACpC7B,cAAeL,KAAKK,eAEpBuB,EAAA,uBAAqBxB,MAAOJ,KAAKI,Q,oCA9FVgC,EAAA,CAA5BC,K,+BACyBD,EAAA,CAAzBE,K","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["getLineClampClass","truncateAfter","lineClampMap","none","renderShowHideButton","isExpanded","isTruncated","isCollapsible","onToggleExpand","showMoreLabel","showLessLabel","buttonClass","label","h","Button","style","class","title","onClick","icon","MinusIcon","PlusIcon","ExpandableText","children","part"],"sources":["src/components/common/expandable-text/expandable-text.tsx"],"sourcesContent":["import {FunctionalComponent, h} from '@stencil/core';\nimport MinusIcon from '../../../images/minus.svg';\nimport PlusIcon from '../../../images/plus.svg';\nimport {Button} from '../stencil-button';\n\nexport type TruncateAfter = 'none' | '1' | '2' | '3' | '4';\n\ninterface ExpandableTextProps {\n isExpanded: boolean;\n isTruncated: boolean;\n isCollapsible?: boolean;\n truncateAfter: TruncateAfter;\n onToggleExpand: (e: MouseEvent | undefined) => void;\n showMoreLabel: string;\n showLessLabel: string;\n}\n\nconst getLineClampClass = (truncateAfter: TruncateAfter) => {\n const lineClampMap: Record<TruncateAfter, string> = {\n none: 'line-clamp-none',\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n };\n return lineClampMap[truncateAfter] || 'line-clamp-2';\n};\n\nconst renderShowHideButton = (\n isExpanded: boolean,\n isTruncated: boolean,\n isCollapsible: boolean,\n onToggleExpand: (e?: MouseEvent) => void,\n showMoreLabel: string,\n showLessLabel: string\n) => {\n let buttonClass = 'expandable-text-button p-1 text-xs leading-[calc(1/.75)]';\n if (!isTruncated && !isExpanded) {\n buttonClass += ' invisible';\n } else if (!isCollapsible && !isTruncated && isExpanded) {\n buttonClass += ' hidden';\n }\n\n const label = isExpanded ? showLessLabel : showMoreLabel;\n\n return (\n <Button\n style=\"text-primary\"\n class={buttonClass}\n title={label}\n onClick={onToggleExpand}\n >\n <atomic-icon\n icon={isExpanded ? MinusIcon : PlusIcon}\n class=\"mx-1 w-2 align-baseline\"\n ></atomic-icon>\n {label}\n </Button>\n );\n};\n\nexport const ExpandableText: FunctionalComponent<ExpandableTextProps> = (\n {\n isExpanded,\n isTruncated,\n truncateAfter,\n onToggleExpand,\n showMoreLabel,\n showLessLabel,\n isCollapsible = false,\n },\n children\n) => {\n return (\n <div class=\"flex flex-col items-start\">\n <div\n part=\"expandable-text\"\n class={`expandable-text ${!isExpanded ? getLineClampClass(truncateAfter) : ''} min-lines-${truncateAfter}`}\n >\n {children}\n </div>\n {renderShowHideButton(\n isExpanded,\n isTruncated,\n isCollapsible,\n onToggleExpand,\n showMoreLabel,\n showLessLabel\n )}\n </div>\n );\n};\n"],"mappings":"mHAiBA,MAAMA,EAAqBC,IACzB,MAAMC,EAA8C,CAClDC,KAAM,kBACN,EAAG,eACH,EAAG,eACH,EAAG,eACH,EAAG,gBAEL,OAAOD,EAAaD,IAAkB,cAAc,EAGtD,MAAMG,EAAuB,CAC3BC,EACAC,EACAC,EACAC,EACAC,EACAC,KAEA,IAAIC,EAAc,2DAClB,IAAKL,IAAgBD,EAAY,CAC/BM,GAAe,Y,MACV,IAAKJ,IAAkBD,GAAeD,EAAY,CACvDM,GAAe,S,CAGjB,MAAMC,EAAQP,EAAaK,EAAgBD,EAE3C,OACEI,EAACC,EAAM,CACLC,MAAM,eACNC,MAAOL,EACPM,MAAOL,EACPM,QAASV,GAETK,EAAA,eACEM,KAAMd,EAAae,EAAYC,EAC/BL,MAAM,4BAEPJ,EACM,E,MAIAU,EAA2D,EAEpEjB,aACAC,cACAL,gBACAO,iBACAC,gBACAC,gBACAH,gBAAgB,OAElBgB,IAGEV,EAAA,OAAKG,MAAM,6BACTH,EAAA,OACEW,KAAK,kBACLR,MAAO,oBAAoBX,EAAaL,EAAkBC,GAAiB,gBAAgBA,KAE1FsB,GAEFnB,EACCC,EACAC,EACAC,EACAC,EACAC,EACAC,W","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{g as n}from"./p-7cb3144b.js";function o(n,o,t){if(t.analytics?.analyticsClientMiddleware){return t.analytics.analyticsClientMiddleware(n,o)}return o}function t(o){if(o.customData){o.customData.coveoAtomicVersion=n().version}return o}function c(){return{documentLocation:document.location.href,...document.referrer&&{originLevel3:document.referrer}}}const e=/^(\d+\.\d+\.\d+)/;function u(){return{source:{"@coveo/atomic":e.exec(n().version)?.[0]||"0.0.0"}}}function r(n,o){const t={enabled:o,documentLocation:document.location.href,...document.referrer&&{originLevel3:document.referrer}};const c=n.analytics??{};Object.assign(c,u());Object.assign(t,c);return t}export{o as a,t as b,c,u as d,r as g};
2
- //# sourceMappingURL=p-fccb1769.js.map
@@ -1 +0,0 @@
1
- {"file":"expandable-text-36fe9f8d.js","mappings":";;;;;;AAiBA,MAAM,iBAAiB,GAAG,CAAC,aAA4B;IACrD,MAAM,YAAY,GAAkC;QAClD,IAAI,EAAE,iBAAiB;QACvB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;KAClB,CAAC;IACF,OAAO,YAAY,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,UAAmB,EACnB,WAAoB,EACpB,aAAsB,EACtB,cAAwC,EACxC,aAAqB,EACrB,aAAqB;IAErB,IAAI,WAAW,GAAG,0DAA0D,CAAC;IAC7E,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE;QAC/B,WAAW,IAAI,YAAY,CAAC;KAC7B;SAAM,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE;QACvD,WAAW,IAAI,SAAS,CAAC;KAC1B;IAED,MAAM,KAAK,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;IAEzD,QACEA,QAACC,oBAAM,IACL,KAAK,EAAC,cAAc,EACpB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,cAAc;QAEvBD,yBACE,IAAI,EAAE,UAAU,GAAGE,cAAS,GAAGC,aAAQ,EACvC,KAAK,EAAC,yBAAyB,GAClB;QACd,KAAK,CACC,EACT;AACJ,CAAC,CAAC;MAEW,cAAc,GAA6C,CACtE,EACE,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,GAAG,KAAK,GACtB,EACD,QAAQ;IAER,QACEH,iBAAK,KAAK,EAAC,2BAA2B;QACpCA,iBACE,IAAI,EAAC,iBAAiB,EACtB,KAAK,EAAE,mBAAmB,CAAC,UAAU,GAAG,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,cAAc,aAAa,EAAE,IAEzG,QAAQ,CACL;QACL,oBAAoB,CACnB,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,CACd,CACG,EACN;AACJ;;;;","names":["h","Button","MinusIcon","PlusIcon"],"sources":["src/components/common/expandable-text/expandable-text.tsx"],"sourcesContent":["import {FunctionalComponent, h} from '@stencil/core';\nimport MinusIcon from '../../../images/minus.svg';\nimport PlusIcon from '../../../images/plus.svg';\nimport {Button} from '../stencil-button';\n\nexport type TruncateAfter = 'none' | '1' | '2' | '3' | '4';\n\ninterface ExpandableTextProps {\n isExpanded: boolean;\n isTruncated: boolean;\n isCollapsible?: boolean;\n truncateAfter: TruncateAfter;\n onToggleExpand: (e: MouseEvent | undefined) => void;\n showMoreLabel: string;\n showLessLabel: string;\n}\n\nconst getLineClampClass = (truncateAfter: TruncateAfter) => {\n const lineClampMap: Record<TruncateAfter, string> = {\n none: 'line-clamp-none',\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n };\n return lineClampMap[truncateAfter] || 'line-clamp-2';\n};\n\nconst renderShowHideButton = (\n isExpanded: boolean,\n isTruncated: boolean,\n isCollapsible: boolean,\n onToggleExpand: (e?: MouseEvent) => void,\n showMoreLabel: string,\n showLessLabel: string\n) => {\n let buttonClass = 'expandable-text-button p-1 text-xs leading-[calc(1/.75)]';\n if (!isTruncated && !isExpanded) {\n buttonClass += ' invisible';\n } else if (!isCollapsible && !isTruncated && isExpanded) {\n buttonClass += ' hidden';\n }\n\n const label = isExpanded ? showLessLabel : showMoreLabel;\n\n return (\n <Button\n style=\"text-primary\"\n class={buttonClass}\n title={label}\n onClick={onToggleExpand}\n >\n <atomic-icon\n icon={isExpanded ? MinusIcon : PlusIcon}\n class=\"mx-1 w-2 align-baseline\"\n ></atomic-icon>\n {label}\n </Button>\n );\n};\n\nexport const ExpandableText: FunctionalComponent<ExpandableTextProps> = (\n {\n isExpanded,\n isTruncated,\n truncateAfter,\n onToggleExpand,\n showMoreLabel,\n showLessLabel,\n isCollapsible = false,\n },\n children\n) => {\n return (\n <div class=\"flex flex-col items-start\">\n <div\n part=\"expandable-text\"\n class={`expandable-text ${!isExpanded ? getLineClampClass(truncateAfter) : ''} min-lines-${truncateAfter}`}\n >\n {children}\n </div>\n {renderShowHideButton(\n isExpanded,\n isTruncated,\n isCollapsible,\n onToggleExpand,\n showMoreLabel,\n showLessLabel\n )}\n </div>\n );\n};\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"expandable-text-4eebe177.js","mappings":";;;;AAiBA,MAAM,iBAAiB,GAAG,CAAC,aAA4B;IACrD,MAAM,YAAY,GAAkC;QAClD,IAAI,EAAE,iBAAiB;QACvB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;QACjB,CAAC,EAAE,cAAc;KAClB,CAAC;IACF,OAAO,YAAY,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,UAAmB,EACnB,WAAoB,EACpB,aAAsB,EACtB,cAAwC,EACxC,aAAqB,EACrB,aAAqB;IAErB,IAAI,WAAW,GAAG,0DAA0D,CAAC;IAC7E,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE;QAC/B,WAAW,IAAI,YAAY,CAAC;KAC7B;SAAM,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE;QACvD,WAAW,IAAI,SAAS,CAAC;KAC1B;IAED,MAAM,KAAK,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;IAEzD,QACE,EAAC,MAAM,IACL,KAAK,EAAC,cAAc,EACpB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,cAAc;QAEvB,mBACE,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,EACvC,KAAK,EAAC,yBAAyB,GAClB;QACd,KAAK,CACC,EACT;AACJ,CAAC,CAAC;MAEW,cAAc,GAA6C,CACtE,EACE,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,GAAG,KAAK,GACtB,EACD,QAAQ;IAER,QACE,WAAK,KAAK,EAAC,2BAA2B;QACpC,WACE,IAAI,EAAC,iBAAiB,EACtB,KAAK,EAAE,mBAAmB,CAAC,UAAU,GAAG,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,cAAc,aAAa,EAAE,IAEzG,QAAQ,CACL;QACL,oBAAoB,CACnB,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,CACd,CACG,EACN;AACJ;;;;","names":[],"sources":["src/components/common/expandable-text/expandable-text.tsx"],"sourcesContent":["import {FunctionalComponent, h} from '@stencil/core';\nimport MinusIcon from '../../../images/minus.svg';\nimport PlusIcon from '../../../images/plus.svg';\nimport {Button} from '../stencil-button';\n\nexport type TruncateAfter = 'none' | '1' | '2' | '3' | '4';\n\ninterface ExpandableTextProps {\n isExpanded: boolean;\n isTruncated: boolean;\n isCollapsible?: boolean;\n truncateAfter: TruncateAfter;\n onToggleExpand: (e: MouseEvent | undefined) => void;\n showMoreLabel: string;\n showLessLabel: string;\n}\n\nconst getLineClampClass = (truncateAfter: TruncateAfter) => {\n const lineClampMap: Record<TruncateAfter, string> = {\n none: 'line-clamp-none',\n 1: 'line-clamp-1',\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n };\n return lineClampMap[truncateAfter] || 'line-clamp-2';\n};\n\nconst renderShowHideButton = (\n isExpanded: boolean,\n isTruncated: boolean,\n isCollapsible: boolean,\n onToggleExpand: (e?: MouseEvent) => void,\n showMoreLabel: string,\n showLessLabel: string\n) => {\n let buttonClass = 'expandable-text-button p-1 text-xs leading-[calc(1/.75)]';\n if (!isTruncated && !isExpanded) {\n buttonClass += ' invisible';\n } else if (!isCollapsible && !isTruncated && isExpanded) {\n buttonClass += ' hidden';\n }\n\n const label = isExpanded ? showLessLabel : showMoreLabel;\n\n return (\n <Button\n style=\"text-primary\"\n class={buttonClass}\n title={label}\n onClick={onToggleExpand}\n >\n <atomic-icon\n icon={isExpanded ? MinusIcon : PlusIcon}\n class=\"mx-1 w-2 align-baseline\"\n ></atomic-icon>\n {label}\n </Button>\n );\n};\n\nexport const ExpandableText: FunctionalComponent<ExpandableTextProps> = (\n {\n isExpanded,\n isTruncated,\n truncateAfter,\n onToggleExpand,\n showMoreLabel,\n showLessLabel,\n isCollapsible = false,\n },\n children\n) => {\n return (\n <div class=\"flex flex-col items-start\">\n <div\n part=\"expandable-text\"\n class={`expandable-text ${!isExpanded ? getLineClampClass(truncateAfter) : ''} min-lines-${truncateAfter}`}\n >\n {children}\n </div>\n {renderShowHideButton(\n isExpanded,\n isTruncated,\n isCollapsible,\n onToggleExpand,\n showMoreLabel,\n showLessLabel\n )}\n </div>\n );\n};\n"],"version":3}