@aquera/nile-elements 1.8.1 → 1.8.3

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 (56) hide show
  1. package/README.md +6 -0
  2. package/dist/index.js +370 -177
  3. package/dist/nile-detail/nile-detail.cjs.js +1 -1
  4. package/dist/nile-detail/nile-detail.cjs.js.map +1 -1
  5. package/dist/nile-detail/nile-detail.css.cjs.js +1 -1
  6. package/dist/nile-detail/nile-detail.css.cjs.js.map +1 -1
  7. package/dist/nile-detail/nile-detail.css.esm.js +37 -1
  8. package/dist/nile-detail/nile-detail.esm.js +17 -9
  9. package/dist/nile-detail/nile-detail.utils.cjs.js +1 -1
  10. package/dist/nile-detail/nile-detail.utils.cjs.js.map +1 -1
  11. package/dist/nile-detail/nile-detail.utils.esm.js +1 -1
  12. package/dist/nile-slider/nile-slider.cjs.js +1 -1
  13. package/dist/nile-slider/nile-slider.cjs.js.map +1 -1
  14. package/dist/nile-slider/nile-slider.css.cjs.js +1 -1
  15. package/dist/nile-slider/nile-slider.css.cjs.js.map +1 -1
  16. package/dist/nile-slider/nile-slider.css.esm.js +162 -41
  17. package/dist/nile-slider/nile-slider.esm.js +5 -3
  18. package/dist/nile-slider/nile-slider.template.cjs.js +1 -1
  19. package/dist/nile-slider/nile-slider.template.cjs.js.map +1 -1
  20. package/dist/nile-slider/nile-slider.template.esm.js +49 -23
  21. package/dist/nile-slider/utils/nile-slider.utils.cjs.js +1 -1
  22. package/dist/nile-slider/utils/nile-slider.utils.cjs.js.map +1 -1
  23. package/dist/nile-slider/utils/nile-slider.utils.esm.js +1 -1
  24. package/dist/src/nile-detail/nile-detail.css.js +37 -1
  25. package/dist/src/nile-detail/nile-detail.css.js.map +1 -1
  26. package/dist/src/nile-detail/nile-detail.d.ts +15 -0
  27. package/dist/src/nile-detail/nile-detail.js +85 -4
  28. package/dist/src/nile-detail/nile-detail.js.map +1 -1
  29. package/dist/src/nile-detail/nile-detail.utils.d.ts +1 -0
  30. package/dist/src/nile-detail/nile-detail.utils.js +34 -4
  31. package/dist/src/nile-detail/nile-detail.utils.js.map +1 -1
  32. package/dist/src/nile-slider/nile-slider.css.js +160 -39
  33. package/dist/src/nile-slider/nile-slider.css.js.map +1 -1
  34. package/dist/src/nile-slider/nile-slider.d.ts +5 -1
  35. package/dist/src/nile-slider/nile-slider.js +23 -1
  36. package/dist/src/nile-slider/nile-slider.js.map +1 -1
  37. package/dist/src/nile-slider/nile-slider.template.d.ts +2 -0
  38. package/dist/src/nile-slider/nile-slider.template.js +38 -1
  39. package/dist/src/nile-slider/nile-slider.template.js.map +1 -1
  40. package/dist/src/nile-slider/types/nile-slider.types.d.ts +1 -0
  41. package/dist/src/nile-slider/types/nile-slider.types.js.map +1 -1
  42. package/dist/src/nile-slider/utils/nile-slider.utils.js +4 -0
  43. package/dist/src/nile-slider/utils/nile-slider.utils.js.map +1 -1
  44. package/dist/src/version.js +1 -1
  45. package/dist/src/version.js.map +1 -1
  46. package/dist/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +1 -1
  48. package/src/nile-detail/nile-detail.css.ts +37 -1
  49. package/src/nile-detail/nile-detail.ts +87 -3
  50. package/src/nile-detail/nile-detail.utils.ts +34 -4
  51. package/src/nile-slider/nile-slider.css.ts +160 -39
  52. package/src/nile-slider/nile-slider.template.ts +45 -2
  53. package/src/nile-slider/nile-slider.ts +11 -3
  54. package/src/nile-slider/types/nile-slider.types.ts +2 -0
  55. package/src/nile-slider/utils/nile-slider.utils.ts +2 -0
  56. package/vscode-html-custom-data.json +48 -10
@@ -1,8 +1,9 @@
1
- import{html as a}from"lit";import{classMap as e}from"lit/directives/class-map.js";const i=e=>a`
1
+ import{html as a}from"lit";import{classMap as l}from"lit/directives/class-map.js";import{v as e}from"./utils/nile-slider.utils.esm.js";const i=a=>a.disabled||"tooltip"!==a.valueLabel,t=l=>a`
2
2
  <div>
3
3
  <nile-tooltip
4
- content=${e.rangeOneValue}
5
- placement=${e.tooltipPosition}
4
+ content=${l.rangeOneValue}
5
+ placement=${l.tooltipPosition}
6
+ ?disabled=${i(l)}
6
7
  >
7
8
  <div
8
9
  id="range-one"
@@ -10,15 +11,16 @@ import{html as a}from"lit";import{classMap as e}from"lit/directives/class-map.js
10
11
  part="range-button"
11
12
  role="slider"
12
13
  tabindex="0"
13
- aria-valuemin=${e.minValue}
14
- aria-valuemax=${e.maxValue}
15
- aria-valuenow=${e.rangeOneValue}
14
+ aria-valuemin=${l.minValue}
15
+ aria-valuemax=${l.maxValue}
16
+ aria-valuenow=${l.rangeOneValue}
16
17
  aria-label="Minimum value"
17
18
  ></div>
18
19
  </nile-tooltip>
19
20
  <nile-tooltip
20
- content=${e.rangeTwoValue}
21
- placement=${e.tooltipPosition}
21
+ content=${l.rangeTwoValue}
22
+ placement=${l.tooltipPosition}
23
+ ?disabled=${i(l)}
22
24
  >
23
25
  <div
24
26
  id="range-two"
@@ -26,34 +28,58 @@ import{html as a}from"lit";import{classMap as e}from"lit/directives/class-map.js
26
28
  part="range-button-two"
27
29
  role="slider"
28
30
  tabindex="0"
29
- aria-valuemin=${e.minValue}
30
- aria-valuemax=${e.maxValue}
31
- aria-valuenow=${e.rangeTwoValue}
31
+ aria-valuemin=${l.minValue}
32
+ aria-valuemax=${l.maxValue}
33
+ aria-valuenow=${l.rangeTwoValue}
32
34
  aria-label="Maximum value"
33
35
  ></div>
34
36
  </nile-tooltip>
35
37
  </div>
36
- `,t=i=>a`
38
+ `,n=e=>a`
37
39
  <div>
38
40
  <nile-tooltip
39
- content=${i.value}
40
- placement=${i.tooltipPosition}
41
+ content=${e.value}
42
+ placement=${e.tooltipPosition}
43
+ ?disabled=${i(e)}
41
44
  >
42
45
  <div
43
- class=${e({"range-button":!0,"range-button-active":"one"===i.activeThumb})}
46
+ class=${l({"range-button":!0,"range-button-active":"one"===e.activeThumb})}
44
47
  part="range-button"
45
48
  role="slider"
46
49
  tabindex="0"
47
- aria-valuemin=${i.minValue}
48
- aria-valuemax=${i.maxValue}
49
- aria-valuenow=${i.value}
50
- aria-label=${i.ariaLabel||"Slider value"}
50
+ aria-valuemin=${e.minValue}
51
+ aria-valuemax=${e.maxValue}
52
+ aria-valuenow=${e.value}
53
+ aria-label=${e.ariaLabel||e.label||"Slider value"}
51
54
  ></div>
52
55
  </nile-tooltip>
53
56
  </div>
54
- `,l=e=>a`
57
+ `,s=l=>a`
55
58
  <div part="label-container" class="label-container">
56
- <span id="label-start">${e.labelStart}</span>
57
- <span id="label-end">${e.labelEnd}</span>
59
+ <span id="label-start">${l.labelStart}</span>
60
+ <span id="label-end">${l.labelEnd}</span>
61
+ </div>
62
+ `,r=l=>a`
63
+ <div part="field-header" class="field-header">
64
+ <label id="field-label" part="field-label" class="field-label">
65
+ ${l.label}
66
+ </label>
58
67
  </div>
59
- `;export{l,i as r,t as s};
68
+ `,o=l=>l.rangeSlider?a`
69
+ <span
70
+ part="value-label"
71
+ class="value-label"
72
+ style="left: ${e(l.rangeOneValue,l)}%"
73
+ >${l.rangeOneValue}</span>
74
+ <span
75
+ part="value-label"
76
+ class="value-label"
77
+ style="left: ${e(l.rangeTwoValue,l)}%"
78
+ >${l.rangeTwoValue}</span>
79
+ `:a`
80
+ <span
81
+ part="value-label"
82
+ class="value-label"
83
+ style="left: ${e(l.value,l)}%"
84
+ >${l.value}</span>
85
+ `;export{o as b,r as f,s as l,t as r,n as s};
@@ -1,2 +1,2 @@
1
- System.register([],function(_export,_context){"use strict";var t,a,n,o,e,s,u,h,c,l;return{setters:[],execute:function execute(){t=function t(_t,a){return Math.max(0,Math.min(a,_t.width))/_t.width*100;},a=function a(t,_a){var n=_a.minValue+t/100*(_a.maxValue-_a.minValue);return _a.maxValue-_a.minValue<1?parseFloat(n.toFixed(2)):Math.floor(n);},_export("v",n=function n(t,a){return(t-a.minValue)/(a.maxValue-a.minValue)*100;}),_export("h",o=function o(n,_o,e){var s=n.clientX-_o.left,u=t(_o,s);e.value=a(u,e),e.emit("nile-change",{value:e.value}),e.buttonOne.style.left="".concat(u,"%"),e.completed.style.width="".concat(u,"%");}),_export("a",e=function e(n,o,_e){var s=n.clientX-o.left,u=t(o,s);_e.rangeOneValue=a(u,_e),_e.rangeOneValue=Math.min(_e.rangeOneValue,_e.rangeTwoValue),_e.emit("nile-button-first-change",{value:_e.rangeOneValue}),_e.rangeTwoValue>_e.rangeOneValue&&(_e.buttonOne.style.left="".concat(u,"%"));}),_export("b",s=function s(n,o,e){var s=n.clientX-o.left,u=t(o,s);e.rangeTwoValue=a(u,e),e.rangeTwoValue=Math.max(e.rangeTwoValue,e.rangeOneValue),e.emit("nile-button-last-change",{value:e.rangeTwoValue}),e.rangeTwoValue>e.rangeOneValue&&(e.buttonTwo.style.left="".concat(u,"%"));}),_export("g",u=function u(t){var _t$buttonOne,_t$buttonTwo;t.range=t.renderRoot.querySelector(".range"),t.buttonOne=t.renderRoot.querySelector(".range-button"),t.buttonTwo=t.renderRoot.querySelector(".range-button-two"),t.completed=t.renderRoot.querySelector(".range-completed"),t.range.addEventListener("mousedown",t.onMouseDown),(_t$buttonOne=t.buttonOne)!==null&&_t$buttonOne!==void 0&&_t$buttonOne.addEventListener("mousedown",function(){t.activeThumb="one",h(t);}),(_t$buttonTwo=t.buttonTwo)===null||_t$buttonTwo===void 0?void 0:_t$buttonTwo.addEventListener("mousedown",function(){t.activeThumb="two",h(t);});}),_export("c",h=function h(t){window.addEventListener("mousemove",t.onMouseMove),window.addEventListener("mouseup",t.onMouseUp);}),_export("r",c=function c(t){window.removeEventListener("mousemove",t.onMouseMove),window.removeEventListener("mouseup",t.onMouseUp);}),_export("d",l=function l(t,a){if(Math.abs(t-a.rangeOneValue)<=Math.abs(t-a.rangeTwoValue)){var _n=Math.min(t,a.rangeTwoValue);a.rangeOneValue=a.checkValueValidity(_n,a.minValue,a.maxValue);}else{var _n2=Math.max(t,a.rangeOneValue);a.rangeTwoValue=a.checkValueValidity(_n2,a.minValue,a.maxValue);}var o=n(a.rangeOneValue,a),e=n(a.rangeTwoValue,a);a.buttonOne.style.left="".concat(o,"%"),a.buttonTwo.style.left="".concat(e,"%");var s=Math.min(o,e),u=Math.abs(e-o);a.completed.style.left="".concat(s,"%"),a.completed.style.width="".concat(u,"%"),a.emit("nile-button-first-change",{value:a.rangeOneValue}),a.emit("nile-button-last-change",{value:a.rangeTwoValue});});}};});
1
+ System.register([],function(_export,_context){"use strict";var t,a,n,o,e,s,u,h,c,l;return{setters:[],execute:function execute(){t=function t(_t,a){return Math.max(0,Math.min(a,_t.width))/_t.width*100;},a=function a(t,_a){var n=_a.minValue+t/100*(_a.maxValue-_a.minValue);return _a.maxValue-_a.minValue<1?parseFloat(n.toFixed(2)):Math.floor(n);},_export("v",n=function n(t,a){return(t-a.minValue)/(a.maxValue-a.minValue)*100;}),_export("h",o=function o(n,_o,e){var s=n.clientX-_o.left,u=t(_o,s);e.value=a(u,e),e.emit("nile-change",{value:e.value}),e.buttonOne.style.left="".concat(u,"%"),e.completed.style.width="".concat(u,"%");}),_export("a",e=function e(n,o,_e){var s=n.clientX-o.left,u=t(o,s);_e.rangeOneValue=a(u,_e),_e.rangeOneValue=Math.min(_e.rangeOneValue,_e.rangeTwoValue),_e.emit("nile-button-first-change",{value:_e.rangeOneValue}),_e.rangeTwoValue>_e.rangeOneValue&&(_e.buttonOne.style.left="".concat(u,"%"));}),_export("b",s=function s(n,o,e){var s=n.clientX-o.left,u=t(o,s);e.rangeTwoValue=a(u,e),e.rangeTwoValue=Math.max(e.rangeTwoValue,e.rangeOneValue),e.emit("nile-button-last-change",{value:e.rangeTwoValue}),e.rangeTwoValue>e.rangeOneValue&&(e.buttonTwo.style.left="".concat(u,"%"));}),_export("g",u=function u(t){var _t$buttonOne,_t$buttonTwo;t.range=t.renderRoot.querySelector(".range"),t.buttonOne=t.renderRoot.querySelector(".range-button"),t.buttonTwo=t.renderRoot.querySelector(".range-button-two"),t.completed=t.renderRoot.querySelector(".range-completed"),t.range.addEventListener("mousedown",t.onMouseDown),(_t$buttonOne=t.buttonOne)!==null&&_t$buttonOne!==void 0&&_t$buttonOne.addEventListener("mousedown",function(){t.disabled||(t.activeThumb="one",h(t));}),(_t$buttonTwo=t.buttonTwo)===null||_t$buttonTwo===void 0?void 0:_t$buttonTwo.addEventListener("mousedown",function(){t.disabled||(t.activeThumb="two",h(t));});}),_export("c",h=function h(t){window.addEventListener("mousemove",t.onMouseMove),window.addEventListener("mouseup",t.onMouseUp);}),_export("r",c=function c(t){window.removeEventListener("mousemove",t.onMouseMove),window.removeEventListener("mouseup",t.onMouseUp);}),_export("d",l=function l(t,a){if(Math.abs(t-a.rangeOneValue)<=Math.abs(t-a.rangeTwoValue)){var _n=Math.min(t,a.rangeTwoValue);a.rangeOneValue=a.checkValueValidity(_n,a.minValue,a.maxValue);}else{var _n2=Math.max(t,a.rangeOneValue);a.rangeTwoValue=a.checkValueValidity(_n2,a.minValue,a.maxValue);}var o=n(a.rangeOneValue,a),e=n(a.rangeTwoValue,a);a.buttonOne.style.left="".concat(o,"%"),a.buttonTwo.style.left="".concat(e,"%");var s=Math.min(o,e),u=Math.abs(e-o);a.completed.style.left="".concat(s,"%"),a.completed.style.width="".concat(u,"%"),a.emit("nile-button-first-change",{value:a.rangeOneValue}),a.emit("nile-button-last-change",{value:a.rangeTwoValue});});}};});
2
2
  //# sourceMappingURL=nile-slider.utils.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nile-slider.utils.cjs.js","sources":["../../../../src/nile-slider/utils/nile-slider.utils.ts"],"sourcesContent":["import NileSlider from '../nile-slider';\nimport { NileSliderEvents } from '../types/nile-slider.enums';\n\nexport const getClampedPercent = (\n rect: DOMRect,\n x: number,\n): number => {\n const clampedX = Math.max(0, Math.min(x, rect.width)); \n const percent = (clampedX / rect.width) * 100;\n return percent;\n};\n\nexport const percentToValue = (percent: number, nileSlider: NileSlider): number => {\n const value = nileSlider.minValue + (percent / 100) * (nileSlider.maxValue - nileSlider.minValue);\n if(nileSlider.maxValue - nileSlider.minValue < 1) {\n return parseFloat(value.toFixed(2));\n } else {\n return Math.floor(value);\n }\n};\n\nexport const valueToPercent = (value: number, nileSlider: NileSlider): number => {\n return ((value - nileSlider.minValue) / (nileSlider.maxValue - nileSlider.minValue)) * 100;\n};\n\nexport const handleSingleSlider = (\n e: MouseEvent,\n rect: DOMRect,\n nileSlider: NileSlider\n): void => {\n const x = e.clientX - rect.left;\n const percent = getClampedPercent(rect, x);\n nileSlider.value = percentToValue(percent, nileSlider);\n nileSlider.emit(NileSliderEvents.NILE_CHANGE, { value: nileSlider.value });\n nileSlider.buttonOne.style.left = `${percent}%`;\n nileSlider.completed.style.width = `${percent}%`;\n};\n\nexport const handleRangeOne = (\n e: MouseEvent,\n rect: DOMRect,\n nileSlider: NileSlider\n): void => {\n const x = e.clientX - rect.left;\n const percent = getClampedPercent(rect, x);\n nileSlider.rangeOneValue = percentToValue(percent, nileSlider);\n nileSlider.rangeOneValue = Math.min(nileSlider.rangeOneValue, nileSlider.rangeTwoValue);\n nileSlider.emit(NileSliderEvents.NILE_BUTTON_FIRST_CHANGE, {\n value: nileSlider.rangeOneValue,\n });\n if (nileSlider.rangeTwoValue > nileSlider.rangeOneValue) {\n nileSlider.buttonOne.style.left = `${percent}%`;\n }\n};\n\nexport const handleRangeTwo = (\n e: MouseEvent,\n rect: DOMRect,\n nileSlider: NileSlider\n): void => {\n const x = e.clientX - rect.left;\n const percent = getClampedPercent(rect, x);\n nileSlider.rangeTwoValue = percentToValue(percent, nileSlider);\n nileSlider.rangeTwoValue = Math.max(nileSlider.rangeTwoValue, nileSlider.rangeOneValue);\n nileSlider.emit(NileSliderEvents.NILE_BUTTON_LAST_CHANGE, {\n value: nileSlider.rangeTwoValue,\n });\n\n if (nileSlider.rangeTwoValue > nileSlider.rangeOneValue) {\n nileSlider.buttonTwo.style.left = `${percent}%`;\n }\n};\n\nexport const getHtmlElements = (nileSlider: NileSlider) => {\n nileSlider.range = nileSlider.renderRoot.querySelector('.range') as HTMLElement;\n nileSlider.buttonOne = nileSlider.renderRoot.querySelector('.range-button') as HTMLElement;\n nileSlider.buttonTwo = nileSlider.renderRoot.querySelector('.range-button-two') as HTMLElement;\n nileSlider.completed = nileSlider.renderRoot.querySelector('.range-completed') as HTMLElement;\n\n nileSlider.range.addEventListener('mousedown', nileSlider.onMouseDown);\n\n nileSlider.buttonOne?.addEventListener('mousedown', () => {\n nileSlider.activeThumb = 'one';\n addMoveListeners(nileSlider);\n });\n\n nileSlider.buttonTwo?.addEventListener('mousedown', () => {\n nileSlider.activeThumb = 'two';\n addMoveListeners(nileSlider);\n });\n};\n\nexport const addMoveListeners = (nileSlider: NileSlider): void => {\n window.addEventListener('mousemove', nileSlider.onMouseMove);\n window.addEventListener('mouseup', nileSlider.onMouseUp);\n};\n\nexport const removeMoveListeners = (nileSlider: NileSlider): void => {\n window.removeEventListener('mousemove', nileSlider.onMouseMove);\n window.removeEventListener('mouseup', nileSlider.onMouseUp);\n};\n\nexport const handleTwoThumbClick = (\n value: number,\n nileSlider: NileSlider\n): void => {\n const distToOne = Math.abs(value - nileSlider.rangeOneValue);\n const distToTwo = Math.abs(value - nileSlider.rangeTwoValue);\n\n if (distToOne <= distToTwo) {\n const clamped = Math.min(value, nileSlider.rangeTwoValue);\n nileSlider.rangeOneValue = nileSlider.checkValueValidity(clamped, nileSlider.minValue, nileSlider.maxValue);\n } else {\n const clamped = Math.max(value, nileSlider.rangeOneValue);\n nileSlider.rangeTwoValue = nileSlider.checkValueValidity(clamped, nileSlider.minValue, nileSlider.maxValue);\n } \n\n const percentOne = valueToPercent(nileSlider.rangeOneValue, nileSlider);\n const percentTwo = valueToPercent(nileSlider.rangeTwoValue, nileSlider);\n\n nileSlider.buttonOne.style.left = `${percentOne}%`;\n nileSlider.buttonTwo.style.left = `${percentTwo}%`;\n\n const left = Math.min(percentOne, percentTwo);\n const width = Math.abs(percentTwo - percentOne);\n\n nileSlider.completed.style.left = `${left}%`;\n nileSlider.completed.style.width = `${width}%`;\n\n nileSlider.emit(NileSliderEvents.NILE_BUTTON_FIRST_CHANGE, {\n value: nileSlider.rangeOneValue,\n });\n nileSlider.emit(NileSliderEvents.NILE_BUTTON_LAST_CHANGE, {\n value: nileSlider.rangeTwoValue,\n });\n};\n"],"names":["getClampedPercent","rect","x","Math","max","min","width","percentToValue","percent","nileSlider","value","minValue","maxValue","parseFloat","toFixed","floor","_export","valueToPercent","handleSingleSlider","e","clientX","left","emit","buttonOne","style","completed","concat","handleRangeOne","rangeOneValue","rangeTwoValue","handleRangeTwo","buttonTwo","getHtmlElements","range","renderRoot","querySelector","addEventListener","onMouseDown","activeThumb","addMoveListeners","window","onMouseMove","onMouseUp","removeMoveListeners","removeEventListener","handleTwoThumbClick","abs","clamped","checkValueValidity","percentOne","percentTwo"],"mappings":"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"}
1
+ {"version":3,"file":"nile-slider.utils.cjs.js","sources":["../../../../src/nile-slider/utils/nile-slider.utils.ts"],"sourcesContent":["import NileSlider from '../nile-slider';\nimport { NileSliderEvents } from '../types/nile-slider.enums';\n\nexport const getClampedPercent = (\n rect: DOMRect,\n x: number,\n): number => {\n const clampedX = Math.max(0, Math.min(x, rect.width)); \n const percent = (clampedX / rect.width) * 100;\n return percent;\n};\n\nexport const percentToValue = (percent: number, nileSlider: NileSlider): number => {\n const value = nileSlider.minValue + (percent / 100) * (nileSlider.maxValue - nileSlider.minValue);\n if(nileSlider.maxValue - nileSlider.minValue < 1) {\n return parseFloat(value.toFixed(2));\n } else {\n return Math.floor(value);\n }\n};\n\nexport const valueToPercent = (value: number, nileSlider: NileSlider): number => {\n return ((value - nileSlider.minValue) / (nileSlider.maxValue - nileSlider.minValue)) * 100;\n};\n\nexport const handleSingleSlider = (\n e: MouseEvent,\n rect: DOMRect,\n nileSlider: NileSlider\n): void => {\n const x = e.clientX - rect.left;\n const percent = getClampedPercent(rect, x);\n nileSlider.value = percentToValue(percent, nileSlider);\n nileSlider.emit(NileSliderEvents.NILE_CHANGE, { value: nileSlider.value });\n nileSlider.buttonOne.style.left = `${percent}%`;\n nileSlider.completed.style.width = `${percent}%`;\n};\n\nexport const handleRangeOne = (\n e: MouseEvent,\n rect: DOMRect,\n nileSlider: NileSlider\n): void => {\n const x = e.clientX - rect.left;\n const percent = getClampedPercent(rect, x);\n nileSlider.rangeOneValue = percentToValue(percent, nileSlider);\n nileSlider.rangeOneValue = Math.min(nileSlider.rangeOneValue, nileSlider.rangeTwoValue);\n nileSlider.emit(NileSliderEvents.NILE_BUTTON_FIRST_CHANGE, {\n value: nileSlider.rangeOneValue,\n });\n if (nileSlider.rangeTwoValue > nileSlider.rangeOneValue) {\n nileSlider.buttonOne.style.left = `${percent}%`;\n }\n};\n\nexport const handleRangeTwo = (\n e: MouseEvent,\n rect: DOMRect,\n nileSlider: NileSlider\n): void => {\n const x = e.clientX - rect.left;\n const percent = getClampedPercent(rect, x);\n nileSlider.rangeTwoValue = percentToValue(percent, nileSlider);\n nileSlider.rangeTwoValue = Math.max(nileSlider.rangeTwoValue, nileSlider.rangeOneValue);\n nileSlider.emit(NileSliderEvents.NILE_BUTTON_LAST_CHANGE, {\n value: nileSlider.rangeTwoValue,\n });\n\n if (nileSlider.rangeTwoValue > nileSlider.rangeOneValue) {\n nileSlider.buttonTwo.style.left = `${percent}%`;\n }\n};\n\nexport const getHtmlElements = (nileSlider: NileSlider) => {\n nileSlider.range = nileSlider.renderRoot.querySelector('.range') as HTMLElement;\n nileSlider.buttonOne = nileSlider.renderRoot.querySelector('.range-button') as HTMLElement;\n nileSlider.buttonTwo = nileSlider.renderRoot.querySelector('.range-button-two') as HTMLElement;\n nileSlider.completed = nileSlider.renderRoot.querySelector('.range-completed') as HTMLElement;\n\n nileSlider.range.addEventListener('mousedown', nileSlider.onMouseDown);\n\n nileSlider.buttonOne?.addEventListener('mousedown', () => {\n if (nileSlider.disabled) return;\n nileSlider.activeThumb = 'one';\n addMoveListeners(nileSlider);\n });\n\n nileSlider.buttonTwo?.addEventListener('mousedown', () => {\n if (nileSlider.disabled) return;\n nileSlider.activeThumb = 'two';\n addMoveListeners(nileSlider);\n });\n};\n\nexport const addMoveListeners = (nileSlider: NileSlider): void => {\n window.addEventListener('mousemove', nileSlider.onMouseMove);\n window.addEventListener('mouseup', nileSlider.onMouseUp);\n};\n\nexport const removeMoveListeners = (nileSlider: NileSlider): void => {\n window.removeEventListener('mousemove', nileSlider.onMouseMove);\n window.removeEventListener('mouseup', nileSlider.onMouseUp);\n};\n\nexport const handleTwoThumbClick = (\n value: number,\n nileSlider: NileSlider\n): void => {\n const distToOne = Math.abs(value - nileSlider.rangeOneValue);\n const distToTwo = Math.abs(value - nileSlider.rangeTwoValue);\n\n if (distToOne <= distToTwo) {\n const clamped = Math.min(value, nileSlider.rangeTwoValue);\n nileSlider.rangeOneValue = nileSlider.checkValueValidity(clamped, nileSlider.minValue, nileSlider.maxValue);\n } else {\n const clamped = Math.max(value, nileSlider.rangeOneValue);\n nileSlider.rangeTwoValue = nileSlider.checkValueValidity(clamped, nileSlider.minValue, nileSlider.maxValue);\n } \n\n const percentOne = valueToPercent(nileSlider.rangeOneValue, nileSlider);\n const percentTwo = valueToPercent(nileSlider.rangeTwoValue, nileSlider);\n\n nileSlider.buttonOne.style.left = `${percentOne}%`;\n nileSlider.buttonTwo.style.left = `${percentTwo}%`;\n\n const left = Math.min(percentOne, percentTwo);\n const width = Math.abs(percentTwo - percentOne);\n\n nileSlider.completed.style.left = `${left}%`;\n nileSlider.completed.style.width = `${width}%`;\n\n nileSlider.emit(NileSliderEvents.NILE_BUTTON_FIRST_CHANGE, {\n value: nileSlider.rangeOneValue,\n });\n nileSlider.emit(NileSliderEvents.NILE_BUTTON_LAST_CHANGE, {\n value: nileSlider.rangeTwoValue,\n });\n};\n"],"names":["getClampedPercent","rect","x","Math","max","min","width","percentToValue","percent","nileSlider","value","minValue","maxValue","parseFloat","toFixed","floor","_export","valueToPercent","n","handleSingleSlider","e","clientX","left","emit","buttonOne","style","completed","handleRangeOne","rangeOneValue","rangeTwoValue","handleRangeTwo","s","buttonTwo","concat","getHtmlElements","range","renderRoot","querySelector","addEventListener","onMouseDown","disabled","activeThumb","addMoveListeners","window","onMouseMove","onMouseUp","removeMoveListeners","removeEventListener","handleTwoThumbClick","l","abs","clamped","checkValueValidity","percentOne","percentTwo"],"mappings":"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"}
@@ -1 +1 @@
1
- const t=(t,a)=>Math.max(0,Math.min(a,t.width))/t.width*100,a=(t,a)=>{const n=a.minValue+t/100*(a.maxValue-a.minValue);return a.maxValue-a.minValue<1?parseFloat(n.toFixed(2)):Math.floor(n)},n=(t,a)=>(t-a.minValue)/(a.maxValue-a.minValue)*100,o=(n,o,e)=>{const s=n.clientX-o.left,u=t(o,s);e.value=a(u,e),e.emit("nile-change",{value:e.value}),e.buttonOne.style.left=`${u}%`,e.completed.style.width=`${u}%`},e=(n,o,e)=>{const s=n.clientX-o.left,u=t(o,s);e.rangeOneValue=a(u,e),e.rangeOneValue=Math.min(e.rangeOneValue,e.rangeTwoValue),e.emit("nile-button-first-change",{value:e.rangeOneValue}),e.rangeTwoValue>e.rangeOneValue&&(e.buttonOne.style.left=`${u}%`)},s=(n,o,e)=>{const s=n.clientX-o.left,u=t(o,s);e.rangeTwoValue=a(u,e),e.rangeTwoValue=Math.max(e.rangeTwoValue,e.rangeOneValue),e.emit("nile-button-last-change",{value:e.rangeTwoValue}),e.rangeTwoValue>e.rangeOneValue&&(e.buttonTwo.style.left=`${u}%`)},u=t=>{t.range=t.renderRoot.querySelector(".range"),t.buttonOne=t.renderRoot.querySelector(".range-button"),t.buttonTwo=t.renderRoot.querySelector(".range-button-two"),t.completed=t.renderRoot.querySelector(".range-completed"),t.range.addEventListener("mousedown",t.onMouseDown),t.buttonOne?.addEventListener("mousedown",(()=>{t.activeThumb="one",h(t)})),t.buttonTwo?.addEventListener("mousedown",(()=>{t.activeThumb="two",h(t)}))},h=t=>{window.addEventListener("mousemove",t.onMouseMove),window.addEventListener("mouseup",t.onMouseUp)},c=t=>{window.removeEventListener("mousemove",t.onMouseMove),window.removeEventListener("mouseup",t.onMouseUp)},l=(t,a)=>{if(Math.abs(t-a.rangeOneValue)<=Math.abs(t-a.rangeTwoValue)){const n=Math.min(t,a.rangeTwoValue);a.rangeOneValue=a.checkValueValidity(n,a.minValue,a.maxValue)}else{const n=Math.max(t,a.rangeOneValue);a.rangeTwoValue=a.checkValueValidity(n,a.minValue,a.maxValue)}const o=n(a.rangeOneValue,a),e=n(a.rangeTwoValue,a);a.buttonOne.style.left=`${o}%`,a.buttonTwo.style.left=`${e}%`;const s=Math.min(o,e),u=Math.abs(e-o);a.completed.style.left=`${s}%`,a.completed.style.width=`${u}%`,a.emit("nile-button-first-change",{value:a.rangeOneValue}),a.emit("nile-button-last-change",{value:a.rangeTwoValue})};export{e as a,s as b,h as c,l as d,u as g,o as h,c as r,n as v};
1
+ const t=(t,a)=>Math.max(0,Math.min(a,t.width))/t.width*100,a=(t,a)=>{const n=a.minValue+t/100*(a.maxValue-a.minValue);return a.maxValue-a.minValue<1?parseFloat(n.toFixed(2)):Math.floor(n)},n=(t,a)=>(t-a.minValue)/(a.maxValue-a.minValue)*100,o=(n,o,e)=>{const s=n.clientX-o.left,u=t(o,s);e.value=a(u,e),e.emit("nile-change",{value:e.value}),e.buttonOne.style.left=`${u}%`,e.completed.style.width=`${u}%`},e=(n,o,e)=>{const s=n.clientX-o.left,u=t(o,s);e.rangeOneValue=a(u,e),e.rangeOneValue=Math.min(e.rangeOneValue,e.rangeTwoValue),e.emit("nile-button-first-change",{value:e.rangeOneValue}),e.rangeTwoValue>e.rangeOneValue&&(e.buttonOne.style.left=`${u}%`)},s=(n,o,e)=>{const s=n.clientX-o.left,u=t(o,s);e.rangeTwoValue=a(u,e),e.rangeTwoValue=Math.max(e.rangeTwoValue,e.rangeOneValue),e.emit("nile-button-last-change",{value:e.rangeTwoValue}),e.rangeTwoValue>e.rangeOneValue&&(e.buttonTwo.style.left=`${u}%`)},u=t=>{t.range=t.renderRoot.querySelector(".range"),t.buttonOne=t.renderRoot.querySelector(".range-button"),t.buttonTwo=t.renderRoot.querySelector(".range-button-two"),t.completed=t.renderRoot.querySelector(".range-completed"),t.range.addEventListener("mousedown",t.onMouseDown),t.buttonOne?.addEventListener("mousedown",(()=>{t.disabled||(t.activeThumb="one",h(t))})),t.buttonTwo?.addEventListener("mousedown",(()=>{t.disabled||(t.activeThumb="two",h(t))}))},h=t=>{window.addEventListener("mousemove",t.onMouseMove),window.addEventListener("mouseup",t.onMouseUp)},c=t=>{window.removeEventListener("mousemove",t.onMouseMove),window.removeEventListener("mouseup",t.onMouseUp)},l=(t,a)=>{if(Math.abs(t-a.rangeOneValue)<=Math.abs(t-a.rangeTwoValue)){const n=Math.min(t,a.rangeTwoValue);a.rangeOneValue=a.checkValueValidity(n,a.minValue,a.maxValue)}else{const n=Math.max(t,a.rangeOneValue);a.rangeTwoValue=a.checkValueValidity(n,a.minValue,a.maxValue)}const o=n(a.rangeOneValue,a),e=n(a.rangeTwoValue,a);a.buttonOne.style.left=`${o}%`,a.buttonTwo.style.left=`${e}%`;const s=Math.min(o,e),u=Math.abs(e-o);a.completed.style.left=`${s}%`,a.completed.style.width=`${u}%`,a.emit("nile-button-first-change",{value:a.rangeOneValue}),a.emit("nile-button-last-change",{value:a.rangeTwoValue})};export{e as a,s as b,h as c,l as d,u as g,o as h,c as r,n as v};
@@ -153,6 +153,41 @@ export const styles = css `
153
153
  padding: 0;
154
154
  }
155
155
 
156
+ /* ── Preview state ──────────────────────────────────────────────────────── */
157
+
158
+ .detail__body--preview {
159
+ position: relative;
160
+ cursor: pointer;
161
+ }
162
+
163
+ .detail__body--preview::after {
164
+ content: '';
165
+ position: absolute;
166
+ left: 0;
167
+ right: 0;
168
+ bottom: 0;
169
+ height: var(--nile-detail-preview-fade-height, 40px);
170
+ background: linear-gradient(
171
+ to bottom,
172
+ transparent,
173
+ var(--nile-colors-white-base, var(--ng-colors-bg-primary))
174
+ );
175
+ pointer-events: none;
176
+ }
177
+
178
+ .detail__body--preview:focus {
179
+ outline: none;
180
+ }
181
+
182
+ .detail__body--preview:focus-visible {
183
+ outline: solid 3px var(--nile-colors-blue-500, var(--ng-colors-fg-brand-primary-600));
184
+ outline-offset: -3px;
185
+ }
186
+
187
+ .detail--disabled .detail__body--preview {
188
+ cursor: not-allowed;
189
+ }
190
+
156
191
  /* ── Selection variant ──────────────────────────────────────────────────── */
157
192
 
158
193
  .detail__selection-label {
@@ -409,7 +444,8 @@ export const styles = css `
409
444
  var(--nile-spacing-3xl, var(--ng-spacing-3xl));
410
445
  }
411
446
 
412
- .detail--light.detail--open .detail__header {
447
+ .detail--light.detail--open .detail__header,
448
+ .detail--light.detail--preview .detail__header {
413
449
  border-bottom: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));
414
450
  }
415
451
 
@@ -1 +1 @@
1
- {"version":3,"file":"nile-detail.css.js","sourceRoot":"","sources":["../../../src/nile-detail/nile-detail.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkaxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`\n :host {\n box-sizing: border-box;\n -webkit-font-smoothing: var(--nile-webkit-font-smoothing, var(--ng-webkit-font-smoothing));\n -moz-osx-font-smoothing: var(--nile-moz-osx-font-smoothing, var(--ng-moz-osx-font-smoothing));\n text-rendering: var(--nile-text-rendering, var(--ng-text-rendering));\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n [hidden] {\n display: none;\n }\n\n :host {\n display: block;\n width: 100%;\n }\n\n .detail {\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));\n border-radius: var(--nile-radius-md, var(--ng-radius-xl));\n background-color: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n box-shadow: var(--nile-box-shadow-3, var(--ng-shadow-xs));\n overflow: hidden;\n width: 100%;\n line-height: var(--nile-line-height-inherit, var(--ng-line-height-text-sm));\n font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));\n }\n\n .detail--disabled {\n opacity: var(--nile-opacity-50, var(--ng-opacity-50));\n }\n\n .detail__header {\n display: flex;\n gap: var(--nile-spacing-lg, var(--ng-spacing-lg));\n align-items: center;\n border-radius: inherit;\n padding: var(--nile-spacing-xl, var(--ng-spacing-xl));\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-tertiary));\n font-size: var(--nile-type-scale-4, var(--ng-spacing-xl));\n font-weight: var(--nile-font-weight-semibold, var(--ng-font-weight-semibold));\n color: var(--nile-colors-neutral-900, var(--ng-colors-text-primary));\n user-select: none;\n cursor: pointer;\n list-style: none;\n }\n\n .detail__header::-webkit-details-marker {\n display: none;\n }\n\n .detail__header::marker {\n content: '';\n }\n\n .detail__header--icon-left {\n flex-direction: row-reverse;\n }\n\n .detail__header:focus {\n outline: none;\n }\n\n .detail__header:focus-visible {\n outline: solid 3px var(--nile-colors-blue-500, var(--ng-colors-fg-brand-primary-600));\n outline-offset: calc(1px + 1px);\n }\n\n .detail--disabled .detail__header {\n cursor: not-allowed;\n }\n\n .detail--disabled .detail__header:focus-visible {\n outline: none;\n box-shadow: none;\n }\n\n .detail__label {\n width: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .detail__header-actions {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-sm, var(--ng-spacing-sm));\n }\n\n .detail__prefix {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-sm, var(--ng-spacing-sm));\n }\n\n .detail__suffix {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-sm, var(--ng-spacing-sm));\n }\n\n .detail__heading-text {\n font-weight: var(--nile-font-weight-semibold, var(--ng-font-weight-semibold));\n font-family: var(--nile-font-family-medium, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-4, var(--ng-spacing-xl));\n }\n\n .detail__description {\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary));\n margin-top: 2px;\n }\n\n .detail__summary-icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n transition: 250ms transform ease;\n color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary));\n transform: rotate(90deg);\n }\n\n .detail--open .detail__summary-icon {\n transform: rotate(-90deg);\n }\n\n .detail__body {\n overflow: hidden;\n }\n\n .detail__body[hidden] {\n display: none;\n }\n\n .detail__content {\n display: block;\n padding: var(--nile-spacing-xl, var(--ng-spacing-xl));\n }\n\n .detail__content--empty {\n display: none;\n padding: 0;\n }\n\n /* ── Selection variant ──────────────────────────────────────────────────── */\n\n .detail__selection-label {\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-lg, var(--ng-spacing-lg));\n flex: 1;\n min-width: 0;\n }\n\n .detail__select-all {\n flex: 0 0 auto;\n }\n\n .detail__selection-title {\n display: flex;\n flex-direction: column;\n line-height: 1.3;\n min-width: 0;\n }\n\n .detail__selection-count {\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary));\n margin-top: 2px;\n }\n\n .detail__selection-content {\n padding: var(--nile-spacing-xl, var(--ng-spacing-xl));\n }\n\n .detail__selection-toolbar {\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-lg, var(--ng-spacing-lg));\n margin-bottom: var(--nile-spacing-lg, var(--ng-spacing-lg));\n }\n\n .detail__selection-search {\n flex: 1;\n min-width: 0;\n }\n\n .detail__selection-search-slot {\n display: flex;\n flex: 1;\n min-width: 0;\n }\n\n .detail__selection-search-slot::slotted(*) {\n flex: 1;\n min-width: 0;\n }\n\n .detail__selected-toggle {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n\n .detail__selection-actions {\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-xl, var(--ng-spacing-xl));\n flex: 0 0 auto;\n }\n\n .detail__selection-grid {\n display: grid;\n grid-auto-flow: column;\n gap: 8px 24px;\n overflow-x: auto;\n overflow-y: hidden;\n padding: 4px 4px 8px;\n scroll-snap-type: x proximity;\n }\n\n .detail__selection-grid--virtual {\n display: block;\n position: relative;\n width: 100%;\n contain: layout paint;\n }\n\n .detail__selection-grid--virtual.detail__selection-grid--vertical {\n overflow-x: hidden;\n overflow-y: auto;\n scroll-snap-type: y proximity;\n }\n\n .detail__selection-grid--virtual.detail__selection-grid--vertical::-webkit-scrollbar {\n width: 8px;\n height: 0;\n }\n\n .detail__selection-grid--virtual.detail__selection-grid--both {\n overflow: auto;\n scroll-snap-type: none;\n }\n\n .detail__selection-grid--virtual.detail__selection-grid--both::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n .detail__selection-grid--virtual .detail__selection-track {\n position: relative;\n }\n\n .detail__selection-tooltip--virtual {\n box-sizing: border-box;\n padding-right: 24px;\n }\n\n .detail__selection-grid > nile-checkbox,\n .detail__selection-grid > .detail__selection-tooltip {\n scroll-snap-align: start;\n min-width: 0;\n display: block;\n max-width: 100%;\n overflow: visible;\n padding-left: 4px;\n }\n\n .detail__selection-checkbox {\n display: block;\n width: 100%;\n min-width: 0;\n }\n\n .detail__selection-checkbox::part(base) {\n display: flex;\n width: 100%;\n min-width: 0;\n align-items: center;\n }\n\n .detail__selection-checkbox::part(label) {\n flex: 1 1 auto;\n min-width: 0;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .detail__selection-checkbox--disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n\n .detail__selection-text {\n display: inline-flex;\n flex-direction: column;\n min-width: 0;\n flex: 1 1 auto;\n line-height: 1.25;\n }\n\n .detail__selection-item-label {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .detail__selection-desc {\n display: block;\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary));\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .detail__selection-prefix,\n .detail__selection-suffix {\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n margin: 0 6px;\n color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary));\n }\n\n .detail__selection-prefix { margin-left: 0; }\n .detail__selection-suffix { margin-right: 0; }\n\n .detail__selection-placeholder {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 4px 8px;\n box-sizing: border-box;\n opacity: 0.6;\n }\n\n .detail__selection-placeholder-bar {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n background: linear-gradient(\n 90deg,\n rgba(0,0,0,0.06) 0%,\n rgba(0,0,0,0.12) 50%,\n rgba(0,0,0,0.06) 100%\n );\n background-size: 200% 100%;\n animation: nile-detail-shimmer 1.4s linear infinite;\n flex: 0 0 auto;\n }\n\n .detail__selection-placeholder-label {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary));\n background: linear-gradient(\n 90deg,\n rgba(0,0,0,0.06) 0%,\n rgba(0,0,0,0.12) 50%,\n rgba(0,0,0,0.06) 100%\n );\n background-size: 200% 100%;\n background-clip: text;\n -webkit-background-clip: text;\n color: transparent;\n animation: nile-detail-shimmer 1.4s linear infinite;\n }\n\n @keyframes nile-detail-shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n }\n\n .detail__selection-grid::-webkit-scrollbar {\n height: 8px;\n }\n\n .detail__selection-grid::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n }\n\n /* ── Light variant ──────────────────────────────────────────────────────── */\n\n .detail--light .detail__header {\n background-color: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n padding: var(--nile-spacing-xl, var(--ng-spacing-xl))\n var(--nile-spacing-3xl, var(--ng-spacing-3xl));\n }\n\n .detail--light.detail--open .detail__header {\n border-bottom: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));\n }\n\n .detail--light .detail__content,\n .detail--light .detail__selection-content {\n padding: var(--nile-spacing-3xl, var(--ng-spacing-3xl));\n }\n`;\n\nexport default [styles];\n"]}
1
+ {"version":3,"file":"nile-detail.css.js","sourceRoot":"","sources":["../../../src/nile-detail/nile-detail.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAscxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`\n :host {\n box-sizing: border-box;\n -webkit-font-smoothing: var(--nile-webkit-font-smoothing, var(--ng-webkit-font-smoothing));\n -moz-osx-font-smoothing: var(--nile-moz-osx-font-smoothing, var(--ng-moz-osx-font-smoothing));\n text-rendering: var(--nile-text-rendering, var(--ng-text-rendering));\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n [hidden] {\n display: none;\n }\n\n :host {\n display: block;\n width: 100%;\n }\n\n .detail {\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));\n border-radius: var(--nile-radius-md, var(--ng-radius-xl));\n background-color: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n box-shadow: var(--nile-box-shadow-3, var(--ng-shadow-xs));\n overflow: hidden;\n width: 100%;\n line-height: var(--nile-line-height-inherit, var(--ng-line-height-text-sm));\n font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));\n }\n\n .detail--disabled {\n opacity: var(--nile-opacity-50, var(--ng-opacity-50));\n }\n\n .detail__header {\n display: flex;\n gap: var(--nile-spacing-lg, var(--ng-spacing-lg));\n align-items: center;\n border-radius: inherit;\n padding: var(--nile-spacing-xl, var(--ng-spacing-xl));\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-tertiary));\n font-size: var(--nile-type-scale-4, var(--ng-spacing-xl));\n font-weight: var(--nile-font-weight-semibold, var(--ng-font-weight-semibold));\n color: var(--nile-colors-neutral-900, var(--ng-colors-text-primary));\n user-select: none;\n cursor: pointer;\n list-style: none;\n }\n\n .detail__header::-webkit-details-marker {\n display: none;\n }\n\n .detail__header::marker {\n content: '';\n }\n\n .detail__header--icon-left {\n flex-direction: row-reverse;\n }\n\n .detail__header:focus {\n outline: none;\n }\n\n .detail__header:focus-visible {\n outline: solid 3px var(--nile-colors-blue-500, var(--ng-colors-fg-brand-primary-600));\n outline-offset: calc(1px + 1px);\n }\n\n .detail--disabled .detail__header {\n cursor: not-allowed;\n }\n\n .detail--disabled .detail__header:focus-visible {\n outline: none;\n box-shadow: none;\n }\n\n .detail__label {\n width: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .detail__header-actions {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-sm, var(--ng-spacing-sm));\n }\n\n .detail__prefix {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-sm, var(--ng-spacing-sm));\n }\n\n .detail__suffix {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-sm, var(--ng-spacing-sm));\n }\n\n .detail__heading-text {\n font-weight: var(--nile-font-weight-semibold, var(--ng-font-weight-semibold));\n font-family: var(--nile-font-family-medium, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-4, var(--ng-spacing-xl));\n }\n\n .detail__description {\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary));\n margin-top: 2px;\n }\n\n .detail__summary-icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n transition: 250ms transform ease;\n color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary));\n transform: rotate(90deg);\n }\n\n .detail--open .detail__summary-icon {\n transform: rotate(-90deg);\n }\n\n .detail__body {\n overflow: hidden;\n }\n\n .detail__body[hidden] {\n display: none;\n }\n\n .detail__content {\n display: block;\n padding: var(--nile-spacing-xl, var(--ng-spacing-xl));\n }\n\n .detail__content--empty {\n display: none;\n padding: 0;\n }\n\n /* ── Preview state ──────────────────────────────────────────────────────── */\n\n .detail__body--preview {\n position: relative;\n cursor: pointer;\n }\n\n .detail__body--preview::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: var(--nile-detail-preview-fade-height, 40px);\n background: linear-gradient(\n to bottom,\n transparent,\n var(--nile-colors-white-base, var(--ng-colors-bg-primary))\n );\n pointer-events: none;\n }\n\n .detail__body--preview:focus {\n outline: none;\n }\n\n .detail__body--preview:focus-visible {\n outline: solid 3px var(--nile-colors-blue-500, var(--ng-colors-fg-brand-primary-600));\n outline-offset: -3px;\n }\n\n .detail--disabled .detail__body--preview {\n cursor: not-allowed;\n }\n\n /* ── Selection variant ──────────────────────────────────────────────────── */\n\n .detail__selection-label {\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-lg, var(--ng-spacing-lg));\n flex: 1;\n min-width: 0;\n }\n\n .detail__select-all {\n flex: 0 0 auto;\n }\n\n .detail__selection-title {\n display: flex;\n flex-direction: column;\n line-height: 1.3;\n min-width: 0;\n }\n\n .detail__selection-count {\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary));\n margin-top: 2px;\n }\n\n .detail__selection-content {\n padding: var(--nile-spacing-xl, var(--ng-spacing-xl));\n }\n\n .detail__selection-toolbar {\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-lg, var(--ng-spacing-lg));\n margin-bottom: var(--nile-spacing-lg, var(--ng-spacing-lg));\n }\n\n .detail__selection-search {\n flex: 1;\n min-width: 0;\n }\n\n .detail__selection-search-slot {\n display: flex;\n flex: 1;\n min-width: 0;\n }\n\n .detail__selection-search-slot::slotted(*) {\n flex: 1;\n min-width: 0;\n }\n\n .detail__selected-toggle {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n\n .detail__selection-actions {\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-xl, var(--ng-spacing-xl));\n flex: 0 0 auto;\n }\n\n .detail__selection-grid {\n display: grid;\n grid-auto-flow: column;\n gap: 8px 24px;\n overflow-x: auto;\n overflow-y: hidden;\n padding: 4px 4px 8px;\n scroll-snap-type: x proximity;\n }\n\n .detail__selection-grid--virtual {\n display: block;\n position: relative;\n width: 100%;\n contain: layout paint;\n }\n\n .detail__selection-grid--virtual.detail__selection-grid--vertical {\n overflow-x: hidden;\n overflow-y: auto;\n scroll-snap-type: y proximity;\n }\n\n .detail__selection-grid--virtual.detail__selection-grid--vertical::-webkit-scrollbar {\n width: 8px;\n height: 0;\n }\n\n .detail__selection-grid--virtual.detail__selection-grid--both {\n overflow: auto;\n scroll-snap-type: none;\n }\n\n .detail__selection-grid--virtual.detail__selection-grid--both::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n .detail__selection-grid--virtual .detail__selection-track {\n position: relative;\n }\n\n .detail__selection-tooltip--virtual {\n box-sizing: border-box;\n padding-right: 24px;\n }\n\n .detail__selection-grid > nile-checkbox,\n .detail__selection-grid > .detail__selection-tooltip {\n scroll-snap-align: start;\n min-width: 0;\n display: block;\n max-width: 100%;\n overflow: visible;\n padding-left: 4px;\n }\n\n .detail__selection-checkbox {\n display: block;\n width: 100%;\n min-width: 0;\n }\n\n .detail__selection-checkbox::part(base) {\n display: flex;\n width: 100%;\n min-width: 0;\n align-items: center;\n }\n\n .detail__selection-checkbox::part(label) {\n flex: 1 1 auto;\n min-width: 0;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .detail__selection-checkbox--disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n\n .detail__selection-text {\n display: inline-flex;\n flex-direction: column;\n min-width: 0;\n flex: 1 1 auto;\n line-height: 1.25;\n }\n\n .detail__selection-item-label {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .detail__selection-desc {\n display: block;\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary));\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .detail__selection-prefix,\n .detail__selection-suffix {\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n margin: 0 6px;\n color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary));\n }\n\n .detail__selection-prefix { margin-left: 0; }\n .detail__selection-suffix { margin-right: 0; }\n\n .detail__selection-placeholder {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 4px 8px;\n box-sizing: border-box;\n opacity: 0.6;\n }\n\n .detail__selection-placeholder-bar {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n background: linear-gradient(\n 90deg,\n rgba(0,0,0,0.06) 0%,\n rgba(0,0,0,0.12) 50%,\n rgba(0,0,0,0.06) 100%\n );\n background-size: 200% 100%;\n animation: nile-detail-shimmer 1.4s linear infinite;\n flex: 0 0 auto;\n }\n\n .detail__selection-placeholder-label {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary));\n background: linear-gradient(\n 90deg,\n rgba(0,0,0,0.06) 0%,\n rgba(0,0,0,0.12) 50%,\n rgba(0,0,0,0.06) 100%\n );\n background-size: 200% 100%;\n background-clip: text;\n -webkit-background-clip: text;\n color: transparent;\n animation: nile-detail-shimmer 1.4s linear infinite;\n }\n\n @keyframes nile-detail-shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n }\n\n .detail__selection-grid::-webkit-scrollbar {\n height: 8px;\n }\n\n .detail__selection-grid::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n }\n\n /* ── Light variant ──────────────────────────────────────────────────────── */\n\n .detail--light .detail__header {\n background-color: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n padding: var(--nile-spacing-xl, var(--ng-spacing-xl))\n var(--nile-spacing-3xl, var(--ng-spacing-3xl));\n }\n\n .detail--light.detail--open .detail__header,\n .detail--light.detail--preview .detail__header {\n border-bottom: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));\n }\n\n .detail--light .detail__content,\n .detail--light .detail__selection-content {\n padding: var(--nile-spacing-3xl, var(--ng-spacing-3xl));\n }\n`;\n\nexport default [styles];\n"]}
@@ -68,6 +68,8 @@ export interface NileDetailSelectionConfig {
68
68
  showAll?: string;
69
69
  };
70
70
  showSelectedToggle?: boolean;
71
+ preview?: boolean;
72
+ previewPercentage?: number;
71
73
  open?: boolean;
72
74
  disabled?: boolean;
73
75
  }
@@ -81,6 +83,10 @@ export declare class NileDetail extends NileElement {
81
83
  description: string;
82
84
  expandIconPlacement: 'left' | 'right';
83
85
  disabled: boolean;
86
+ /** When set, the closed state shows a preview of the body content instead of hiding it. */
87
+ preview: boolean;
88
+ /** Percentage (0–100) of the content height shown while previewing. */
89
+ previewPercentage: number;
84
90
  variant: NileDetailVariant;
85
91
  items: SelectionItem[];
86
92
  selected: string[];
@@ -125,6 +131,10 @@ export declare class NileDetail extends NileElement {
125
131
  private get _isSelectionVariant();
126
132
  /** True for any variant that applies the light styling. */
127
133
  private get _isLightVariant();
134
+ /** True when preview mode is on with a usable percentage. */
135
+ private get _previewEnabled();
136
+ /** True when the closed state should currently render the preview. */
137
+ private get _isPreviewActive();
128
138
  private get _isInfiniteMode();
129
139
  private _effectiveTotalCount;
130
140
  private _getItemAt;
@@ -173,6 +183,11 @@ export declare class NileDetail extends NileElement {
173
183
  private _handleSummaryClick;
174
184
  private _handleSummaryKeyDown;
175
185
  handleOpenChange(): Promise<void>;
186
+ handlePreviewChange(): void;
187
+ /** Measures the content and clamps the body to the configured preview height. */
188
+ private _applyPreviewHeight;
189
+ private _handlePreviewClick;
190
+ private _handlePreviewKeyDown;
176
191
  show(): Promise<unknown>;
177
192
  hide(): Promise<unknown>;
178
193
  private get _summaryLabel();
@@ -6,7 +6,7 @@ import { unsafeHTML } from 'lit/directives/unsafe-html.js';
6
6
  import { styles } from './nile-detail.css';
7
7
  import NileElement from '../internal/nile-element';
8
8
  import { watch } from '../internal/watch';
9
- import { animateShow, animateHide, showDetail, hideDetail, handleSummaryClick, handleSummaryKeyDown, } from './nile-detail.utils';
9
+ import { animateShow, animateHide, showDetail, hideDetail, handleSummaryClick, handleSummaryKeyDown, getPreviewHeight, } from './nile-detail.utils';
10
10
  import '../nile-checkbox/index';
11
11
  import '../nile-input/index';
12
12
  import '../nile-link/index';
@@ -22,6 +22,10 @@ let NileDetail = class NileDetail extends NileElement {
22
22
  this.description = '';
23
23
  this.expandIconPlacement = 'right';
24
24
  this.disabled = false;
25
+ /** When set, the closed state shows a preview of the body content instead of hiding it. */
26
+ this.preview = false;
27
+ /** Percentage (0–100) of the content height shown while previewing. */
28
+ this.previewPercentage = 30;
25
29
  this.variant = 'default';
26
30
  this.items = [];
27
31
  this.selected = [];
@@ -67,6 +71,14 @@ let NileDetail = class NileDetail extends NileElement {
67
71
  get _isLightVariant() {
68
72
  return this.variant === 'light' || this.variant === 'select-light';
69
73
  }
74
+ /** True when preview mode is on with a usable percentage. */
75
+ get _previewEnabled() {
76
+ return this.preview && Math.min(100, Math.max(0, this.previewPercentage)) > 0;
77
+ }
78
+ /** True when the closed state should currently render the preview. */
79
+ get _isPreviewActive() {
80
+ return this._previewEnabled && !this.open;
81
+ }
70
82
  get _isInfiniteMode() {
71
83
  return (this._isSelectionVariant &&
72
84
  typeof this.fetchPage === 'function' &&
@@ -153,9 +165,12 @@ let NileDetail = class NileDetail extends NileElement {
153
165
  return Number.isFinite(parsed) && parsed > 0 ? parsed : 220;
154
166
  }
155
167
  firstUpdated() {
156
- this._detailOpen = this.open;
157
- this.body.hidden = !this.open;
168
+ this._detailOpen = this.open || this._isPreviewActive;
169
+ this.body.hidden = !this.open && !this._isPreviewActive;
158
170
  this.body.style.height = this.open ? 'auto' : '0';
171
+ if (this._isPreviewActive) {
172
+ this._applyPreviewHeight();
173
+ }
159
174
  this._syncSelectedFromProperty();
160
175
  if (this._restoreDefaults === null) {
161
176
  this._restoreDefaults = [...this._selectedSet];
@@ -400,6 +415,10 @@ let NileDetail = class NileDetail extends NileElement {
400
415
  }
401
416
  if (c.showSelectedToggle !== undefined)
402
417
  this.showSelectedToggle = c.showSelectedToggle;
418
+ if (c.preview !== undefined)
419
+ this.preview = c.preview;
420
+ if (c.previewPercentage !== undefined)
421
+ this.previewPercentage = c.previewPercentage;
403
422
  }
404
423
  _syncSelectedFromProperty() {
405
424
  this._selectedSet = new Set(this.selected || []);
@@ -582,6 +601,9 @@ let NileDetail = class NileDetail extends NileElement {
582
601
  return !!(node.textContent && node.textContent.trim());
583
602
  return false;
584
603
  });
604
+ if (this._isPreviewActive) {
605
+ this._applyPreviewHeight();
606
+ }
585
607
  }
586
608
  _stopHeaderToggle(event) {
587
609
  event.stopPropagation();
@@ -600,9 +622,47 @@ let NileDetail = class NileDetail extends NileElement {
600
622
  }
601
623
  else {
602
624
  await animateHide(this);
625
+ // In preview mode the details element stays open so the preview remains visible.
626
+ this._detailOpen = this._previewEnabled;
627
+ }
628
+ }
629
+ handlePreviewChange() {
630
+ if (this.open) {
631
+ return;
632
+ }
633
+ if (this._previewEnabled) {
634
+ this._detailOpen = true;
635
+ this._applyPreviewHeight();
636
+ }
637
+ else {
638
+ this.body.hidden = true;
639
+ this.body.style.height = '0';
603
640
  this._detailOpen = false;
604
641
  }
605
642
  }
643
+ /** Measures the content and clamps the body to the configured preview height. */
644
+ async _applyPreviewHeight() {
645
+ await this.updateComplete;
646
+ if (!this._isPreviewActive || !this.body) {
647
+ return;
648
+ }
649
+ this.body.hidden = false;
650
+ this.body.style.height = `${getPreviewHeight(this)}px`;
651
+ }
652
+ _handlePreviewClick() {
653
+ if (this._isPreviewActive && !this.disabled) {
654
+ showDetail(this);
655
+ }
656
+ }
657
+ _handlePreviewKeyDown(event) {
658
+ if (!this._isPreviewActive || this.disabled) {
659
+ return;
660
+ }
661
+ if (event.key === 'Enter' || event.key === ' ') {
662
+ event.preventDefault();
663
+ showDetail(this);
664
+ }
665
+ }
606
666
  async show() {
607
667
  return showDetail(this);
608
668
  }
@@ -847,6 +907,7 @@ let NileDetail = class NileDetail extends NileElement {
847
907
  'detail--disabled': this.disabled,
848
908
  'detail--selection': isSelection,
849
909
  'detail--light': this._isLightVariant,
910
+ 'detail--preview': this._isPreviewActive,
850
911
  })}
851
912
  >
852
913
  <summary
@@ -892,7 +953,18 @@ let NileDetail = class NileDetail extends NileElement {
892
953
 
893
954
  </summary>
894
955
 
895
- <div part="content" class="detail__body">
956
+ <div
957
+ part="content"
958
+ class=${classMap({
959
+ 'detail__body': true,
960
+ 'detail__body--preview': this._isPreviewActive,
961
+ })}
962
+ role=${this._isPreviewActive ? 'button' : nothing}
963
+ tabindex=${this._isPreviewActive && !this.disabled ? '0' : nothing}
964
+ aria-label=${this._isPreviewActive ? 'Expand to view full content' : nothing}
965
+ @click=${this._handlePreviewClick}
966
+ @keydown=${this._handlePreviewKeyDown}
967
+ >
896
968
  ${isSelection
897
969
  ? html `<div part="selection-content" class="detail__selection-content">${this._renderSelectionBody()}</div>`
898
970
  : ''}
@@ -934,6 +1006,12 @@ __decorate([
934
1006
  __decorate([
935
1007
  property({ attribute: true, type: Boolean, reflect: true })
936
1008
  ], NileDetail.prototype, "disabled", void 0);
1009
+ __decorate([
1010
+ property({ attribute: true, type: Boolean, reflect: true })
1011
+ ], NileDetail.prototype, "preview", void 0);
1012
+ __decorate([
1013
+ property({ attribute: 'preview-percentage', type: Number, reflect: true })
1014
+ ], NileDetail.prototype, "previewPercentage", void 0);
937
1015
  __decorate([
938
1016
  property({ attribute: true, type: String, reflect: true })
939
1017
  ], NileDetail.prototype, "variant", void 0);
@@ -1042,6 +1120,9 @@ __decorate([
1042
1120
  __decorate([
1043
1121
  watch('open', { waitUntilFirstUpdate: true })
1044
1122
  ], NileDetail.prototype, "handleOpenChange", null);
1123
+ __decorate([
1124
+ watch(['preview', 'previewPercentage'], { waitUntilFirstUpdate: true })
1125
+ ], NileDetail.prototype, "handlePreviewChange", null);
1045
1126
  NileDetail = __decorate([
1046
1127
  customElement('nile-detail')
1047
1128
  ], NileDetail);