@aquera/nile-elements 1.8.2 → 1.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/index.js +87 -43
- package/dist/nile-detail/nile-detail.cjs.js +1 -1
- package/dist/nile-detail/nile-detail.cjs.js.map +1 -1
- package/dist/nile-detail/nile-detail.css.cjs.js +1 -1
- package/dist/nile-detail/nile-detail.css.cjs.js.map +1 -1
- package/dist/nile-detail/nile-detail.css.esm.js +37 -1
- package/dist/nile-detail/nile-detail.esm.js +17 -9
- package/dist/nile-detail/nile-detail.utils.cjs.js +1 -1
- package/dist/nile-detail/nile-detail.utils.cjs.js.map +1 -1
- package/dist/nile-detail/nile-detail.utils.esm.js +1 -1
- package/dist/nile-tree/nile-tree.css.cjs.js +1 -1
- package/dist/nile-tree/nile-tree.css.cjs.js.map +1 -1
- package/dist/nile-tree/nile-tree.css.esm.js +1 -1
- package/dist/nile-tree-item/nile-tree-item.css.cjs.js +1 -1
- package/dist/nile-tree-item/nile-tree-item.css.cjs.js.map +1 -1
- package/dist/nile-tree-item/nile-tree-item.css.esm.js +10 -10
- package/dist/src/nile-detail/nile-detail.css.js +37 -1
- package/dist/src/nile-detail/nile-detail.css.js.map +1 -1
- package/dist/src/nile-detail/nile-detail.d.ts +15 -0
- package/dist/src/nile-detail/nile-detail.js +85 -4
- package/dist/src/nile-detail/nile-detail.js.map +1 -1
- package/dist/src/nile-detail/nile-detail.utils.d.ts +1 -0
- package/dist/src/nile-detail/nile-detail.utils.js +34 -4
- package/dist/src/nile-detail/nile-detail.utils.js.map +1 -1
- package/dist/src/nile-tree/nile-tree.css.js +1 -1
- package/dist/src/nile-tree/nile-tree.css.js.map +1 -1
- package/dist/src/nile-tree-item/nile-tree-item.css.js +10 -10
- package/dist/src/nile-tree-item/nile-tree-item.css.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-detail/nile-detail.css.ts +37 -1
- package/src/nile-detail/nile-detail.ts +87 -3
- package/src/nile-detail/nile-detail.utils.ts +34 -4
- package/src/nile-tree/nile-tree.css.ts +1 -1
- package/src/nile-tree-item/nile-tree-item.css.ts +10 -10
- package/vscode-html-custom-data.json +10 -1
|
@@ -25,7 +25,7 @@ import{css as e}from"lit";const t=e`
|
|
|
25
25
|
--indent-guide-offset: 0;
|
|
26
26
|
--indent-guide-style: solid;
|
|
27
27
|
--indent-guide-width: 0;
|
|
28
|
-
--indent-size: var(--nile-spacing-2xl);
|
|
28
|
+
--indent-size: var(--nile-spacing-2xl, var(--ng-spacing-2xl));
|
|
29
29
|
|
|
30
30
|
display: block;
|
|
31
31
|
isolation: isolate;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
System.register(["lit"],function(_export,_context){"use strict";var e,_templateObject,t;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}return{setters:[function(_lit){e=_lit.css;}],execute:function execute(){_export("s",t=e(_templateObject||(_templateObject=_taggedTemplateLiteral(["\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 !important;\n }\n\n :host {\n display: block;\n outline: 0;\n z-index: 0;\n }\n\n :host(:focus) {\n outline: none;\n }\n\n slot:not([name])::slotted(nile-icon) {\n margin-inline-end: var(--nile-spacing-md);\n }\n\n .tree-item {\n position: relative;\n display: flex;\n align-items: stretch;\n flex-direction: column;\n color: var(--nile-colors-dark-900);\n cursor: pointer;\n user-select: none;\n }\n\n .tree-item__checkbox {\n pointer-events: none;\n }\n\n .tree-item__expand-button,\n .tree-item__checkbox,\n .tree-item__label {\n font-family: var(--nile-font-family-serif);\n font-size: var(--nile-type-scale-4);\n font-weight: var(--nile-font-weight-regular);\n }\n\n .tree-item__checkbox::part(base) {\n display: flex;\n align-items: center;\n }\n\n .tree-item__indentation {\n display: block;\n width: 1em;\n flex-shrink: 0;\n }\n\n .tree-item__expand-button {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: content-box;\n color: var(--nile-colors-neutral-500);\n padding: var(--nile-spacing-md);\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n cursor: pointer;\n }\n\n .tree-item__expand-button {\n transition: 250ms rotate ease;\n }\n\n .tree-item--expanded .tree-item__expand-button {\n rotate: 90deg;\n }\n\n .tree-item--expanded.tree-item--rtl .tree-item__expand-button {\n rotate: -90deg;\n }\n\n .tree-item--expanded slot[name='expand-icon'],\n .tree-item:not(.tree-item--expanded) slot[name='collapse-icon'] {\n display: none;\n }\n\n .tree-item:not(.tree-item--has-expand-button) .tree-item__expand-icon-slot {\n display: none;\n }\n\n .tree-item__expand-button--visible {\n cursor: pointer;\n }\n\n .tree-item__item {\n display: flex;\n align-items: center;\n border-inline-start: solid 3px transparent;\n }\n\n .tree-item--disabled .tree-item__item {\n opacity: 0.5;\n outline: none;\n cursor: not-allowed;\n }\n\n :host(:focus-visible) .tree-item__item {\n outline: solid 3px var(--nile-colors-neutral-500);\n outline-offset: 1px;\n z-index: 2;\n }\n\n :host(:not([aria-disabled='true'])) .tree-item--selected .tree-item__item {\n background-color: var(--nile-colors-primary-100);\n border-inline-start-color: var(--nile-colors-primary-700);\n }\n\n :host(:not([aria-disabled='true'])) .tree-item__expand-button {\n color: var(--nile-colors-dark-900);\n }\n\n .tree-item__label {\n display: flex;\n align-items: center;\n transition: 150ms color;\n }\n\n .tree-item__children {\n display: block;\n font-size: calc(1em + var(--indent-size, 1rem));\n }\n\n /* Indentation lines */\n .tree-item__children {\n position: relative;\n }\n\n .tree-item__children::before {\n content: '';\n position: absolute;\n top: var(--indent-guide-offset);\n bottom: var(--indent-guide-offset);\n left: calc(1em - (var(--indent-guide-width) / 2) - 1px);\n border-inline-end: var(--indent-guide-width) var(--indent-guide-style) var(--indent-guide-color);\n z-index: 1;\n }\n\n .tree-item--rtl .tree-item__children::before {\n left: auto;\n right: 1em;\n }\n\n @media (forced-colors: active) {\n :host(:not([aria-disabled='true'])) .tree-item--selected .tree-item__item {\n outline: dashed 1px SelectedItem;\n }\n }\n"]))));}};});
|
|
1
|
+
System.register(["lit"],function(_export,_context){"use strict";var e,_templateObject,t;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}return{setters:[function(_lit){e=_lit.css;}],execute:function execute(){_export("s",t=e(_templateObject||(_templateObject=_taggedTemplateLiteral(["\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 !important;\n }\n\n :host {\n display: block;\n outline: 0;\n z-index: 0;\n }\n\n :host(:focus) {\n outline: none;\n }\n\n slot:not([name])::slotted(nile-icon) {\n margin-inline-end: var(--nile-spacing-md, var(--ng-spacing-md));\n }\n\n .tree-item {\n position: relative;\n display: flex;\n align-items: stretch;\n flex-direction: column;\n color: var(--nile-colors-dark-900, var(--ng-colors-text-secondary-700));\n cursor: pointer;\n user-select: none;\n }\n\n .tree-item__checkbox {\n pointer-events: none;\n }\n\n .tree-item__expand-button,\n .tree-item__checkbox,\n .tree-item__label {\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-4, var(--ng-font-size-text-sm));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-medium));\n }\n\n .tree-item__checkbox::part(base) {\n display: flex;\n align-items: center;\n }\n\n .tree-item__indentation {\n display: block;\n width: 1em;\n flex-shrink: 0;\n }\n\n .tree-item__expand-button {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: content-box;\n color: var(--nile-colors-neutral-500, var(--ng-colors-fg-tertiary-600));\n padding: var(--nile-spacing-md, var(--ng-spacing-md));\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n cursor: pointer;\n }\n\n .tree-item__expand-button {\n transition: 250ms rotate ease;\n }\n\n .tree-item--expanded .tree-item__expand-button {\n rotate: 90deg;\n }\n\n .tree-item--expanded.tree-item--rtl .tree-item__expand-button {\n rotate: -90deg;\n }\n\n .tree-item--expanded slot[name='expand-icon'],\n .tree-item:not(.tree-item--expanded) slot[name='collapse-icon'] {\n display: none;\n }\n\n .tree-item:not(.tree-item--has-expand-button) .tree-item__expand-icon-slot {\n display: none;\n }\n\n .tree-item__expand-button--visible {\n cursor: pointer;\n }\n\n .tree-item__item {\n display: flex;\n align-items: center;\n border-inline-start: solid 3px transparent;\n }\n\n .tree-item--disabled .tree-item__item {\n opacity: 0.5;\n outline: none;\n cursor: not-allowed;\n }\n\n :host(:focus-visible) .tree-item__item {\n outline: solid 3px var(--nile-colors-neutral-500);\n outline-offset: 1px;\n z-index: 2;\n }\n\n :host(:not([aria-disabled='true'])) .tree-item--selected .tree-item__item {\n background-color: var(--nile-colors-primary-100, var(--ng-colors-bg-brand-primary));\n border-inline-start-color: var(--nile-colors-primary-700, var(--ng-colors-border-brand));\n }\n\n :host(:not([aria-disabled='true'])) .tree-item__expand-button {\n color: var(--nile-colors-dark-900, var(--ng-colors-fg-tertiary-600));\n }\n\n .tree-item__label {\n display: flex;\n align-items: center;\n transition: 150ms color;\n }\n\n .tree-item__children {\n display: block;\n font-size: calc(1em + var(--indent-size, 1rem));\n }\n\n /* Indentation lines */\n .tree-item__children {\n position: relative;\n }\n\n .tree-item__children::before {\n content: '';\n position: absolute;\n top: var(--indent-guide-offset);\n bottom: var(--indent-guide-offset);\n left: calc(1em - (var(--indent-guide-width) / 2) - 1px);\n border-inline-end: var(--indent-guide-width) var(--indent-guide-style) var(--indent-guide-color);\n z-index: 1;\n }\n\n .tree-item--rtl .tree-item__children::before {\n left: auto;\n right: 1em;\n }\n\n @media (forced-colors: active) {\n :host(:not([aria-disabled='true'])) .tree-item--selected .tree-item__item {\n outline: dashed 1px SelectedItem;\n }\n }\n"]))));}};});
|
|
2
2
|
//# sourceMappingURL=nile-tree-item.css.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-tree-item.css.cjs.js","sources":["../../../src/nile-tree-item/nile-tree-item.css.ts"],"sourcesContent":["/**\n* Copyright Aquera Inc 2023\n*\n* This source code is licensed under the BSD-3-Clause license found in the\n* LICENSE file in the root directory of this source tree.\n*/\n\nimport {css} from 'lit';\n\n/**\n * TreeItem CSS\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 !important;\n }\n\n :host {\n display: block;\n outline: 0;\n z-index: 0;\n }\n\n :host(:focus) {\n outline: none;\n }\n\n slot:not([name])::slotted(nile-icon) {\n margin-inline-end: var(--nile-spacing-md);\n }\n\n .tree-item {\n position: relative;\n display: flex;\n align-items: stretch;\n flex-direction: column;\n color: var(--nile-colors-dark-900);\n cursor: pointer;\n user-select: none;\n }\n\n .tree-item__checkbox {\n pointer-events: none;\n }\n\n .tree-item__expand-button,\n .tree-item__checkbox,\n .tree-item__label {\n font-family: var(--nile-font-family-serif);\n font-size: var(--nile-type-scale-4);\n font-weight: var(--nile-font-weight-regular);\n }\n\n .tree-item__checkbox::part(base) {\n display: flex;\n align-items: center;\n }\n\n .tree-item__indentation {\n display: block;\n width: 1em;\n flex-shrink: 0;\n }\n\n .tree-item__expand-button {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: content-box;\n color: var(--nile-colors-neutral-500);\n padding: var(--nile-spacing-md);\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n cursor: pointer;\n }\n\n .tree-item__expand-button {\n transition: 250ms rotate ease;\n }\n\n .tree-item--expanded .tree-item__expand-button {\n rotate: 90deg;\n }\n\n .tree-item--expanded.tree-item--rtl .tree-item__expand-button {\n rotate: -90deg;\n }\n\n .tree-item--expanded slot[name='expand-icon'],\n .tree-item:not(.tree-item--expanded) slot[name='collapse-icon'] {\n display: none;\n }\n\n .tree-item:not(.tree-item--has-expand-button) .tree-item__expand-icon-slot {\n display: none;\n }\n\n .tree-item__expand-button--visible {\n cursor: pointer;\n }\n\n .tree-item__item {\n display: flex;\n align-items: center;\n border-inline-start: solid 3px transparent;\n }\n\n .tree-item--disabled .tree-item__item {\n opacity: 0.5;\n outline: none;\n cursor: not-allowed;\n }\n\n :host(:focus-visible) .tree-item__item {\n outline: solid 3px var(--nile-colors-neutral-500);\n outline-offset: 1px;\n z-index: 2;\n }\n\n :host(:not([aria-disabled='true'])) .tree-item--selected .tree-item__item {\n background-color: var(--nile-colors-primary-100);\n border-inline-start-color: var(--nile-colors-primary-700);\n }\n\n :host(:not([aria-disabled='true'])) .tree-item__expand-button {\n color: var(--nile-colors-dark-900);\n }\n\n .tree-item__label {\n display: flex;\n align-items: center;\n transition: 150ms color;\n }\n\n .tree-item__children {\n display: block;\n font-size: calc(1em + var(--indent-size, 1rem));\n }\n\n /* Indentation lines */\n .tree-item__children {\n position: relative;\n }\n\n .tree-item__children::before {\n content: '';\n position: absolute;\n top: var(--indent-guide-offset);\n bottom: var(--indent-guide-offset);\n left: calc(1em - (var(--indent-guide-width) / 2) - 1px);\n border-inline-end: var(--indent-guide-width) var(--indent-guide-style) var(--indent-guide-color);\n z-index: 1;\n }\n\n .tree-item--rtl .tree-item__children::before {\n left: auto;\n right: 1em;\n }\n\n @media (forced-colors: active) {\n :host(:not([aria-disabled='true'])) .tree-item--selected .tree-item__item {\n outline: dashed 1px SelectedItem;\n }\n }\n`;\n\nexport default [styles];\n"],"names":["styles","css","_templateObject","_taggedTemplateLiteral"],"mappings":"oTAYaA,CAAAA,CAASC,CAAG,CAAAC,eAAA,GAAAA,eAAA,CAAAC,sBAAA"}
|
|
1
|
+
{"version":3,"file":"nile-tree-item.css.cjs.js","sources":["../../../src/nile-tree-item/nile-tree-item.css.ts"],"sourcesContent":["/**\n* Copyright Aquera Inc 2023\n*\n* This source code is licensed under the BSD-3-Clause license found in the\n* LICENSE file in the root directory of this source tree.\n*/\n\nimport {css} from 'lit';\n\n/**\n * TreeItem CSS\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 !important;\n }\n\n :host {\n display: block;\n outline: 0;\n z-index: 0;\n }\n\n :host(:focus) {\n outline: none;\n }\n\n slot:not([name])::slotted(nile-icon) {\n margin-inline-end: var(--nile-spacing-md, var(--ng-spacing-md));\n }\n\n .tree-item {\n position: relative;\n display: flex;\n align-items: stretch;\n flex-direction: column;\n color: var(--nile-colors-dark-900, var(--ng-colors-text-secondary-700));\n cursor: pointer;\n user-select: none;\n }\n\n .tree-item__checkbox {\n pointer-events: none;\n }\n\n .tree-item__expand-button,\n .tree-item__checkbox,\n .tree-item__label {\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-4, var(--ng-font-size-text-sm));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-medium));\n }\n\n .tree-item__checkbox::part(base) {\n display: flex;\n align-items: center;\n }\n\n .tree-item__indentation {\n display: block;\n width: 1em;\n flex-shrink: 0;\n }\n\n .tree-item__expand-button {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: content-box;\n color: var(--nile-colors-neutral-500, var(--ng-colors-fg-tertiary-600));\n padding: var(--nile-spacing-md, var(--ng-spacing-md));\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n cursor: pointer;\n }\n\n .tree-item__expand-button {\n transition: 250ms rotate ease;\n }\n\n .tree-item--expanded .tree-item__expand-button {\n rotate: 90deg;\n }\n\n .tree-item--expanded.tree-item--rtl .tree-item__expand-button {\n rotate: -90deg;\n }\n\n .tree-item--expanded slot[name='expand-icon'],\n .tree-item:not(.tree-item--expanded) slot[name='collapse-icon'] {\n display: none;\n }\n\n .tree-item:not(.tree-item--has-expand-button) .tree-item__expand-icon-slot {\n display: none;\n }\n\n .tree-item__expand-button--visible {\n cursor: pointer;\n }\n\n .tree-item__item {\n display: flex;\n align-items: center;\n border-inline-start: solid 3px transparent;\n }\n\n .tree-item--disabled .tree-item__item {\n opacity: 0.5;\n outline: none;\n cursor: not-allowed;\n }\n\n :host(:focus-visible) .tree-item__item {\n outline: solid 3px var(--nile-colors-neutral-500);\n outline-offset: 1px;\n z-index: 2;\n }\n\n :host(:not([aria-disabled='true'])) .tree-item--selected .tree-item__item {\n background-color: var(--nile-colors-primary-100, var(--ng-colors-bg-brand-primary));\n border-inline-start-color: var(--nile-colors-primary-700, var(--ng-colors-border-brand));\n }\n\n :host(:not([aria-disabled='true'])) .tree-item__expand-button {\n color: var(--nile-colors-dark-900, var(--ng-colors-fg-tertiary-600));\n }\n\n .tree-item__label {\n display: flex;\n align-items: center;\n transition: 150ms color;\n }\n\n .tree-item__children {\n display: block;\n font-size: calc(1em + var(--indent-size, 1rem));\n }\n\n /* Indentation lines */\n .tree-item__children {\n position: relative;\n }\n\n .tree-item__children::before {\n content: '';\n position: absolute;\n top: var(--indent-guide-offset);\n bottom: var(--indent-guide-offset);\n left: calc(1em - (var(--indent-guide-width) / 2) - 1px);\n border-inline-end: var(--indent-guide-width) var(--indent-guide-style) var(--indent-guide-color);\n z-index: 1;\n }\n\n .tree-item--rtl .tree-item__children::before {\n left: auto;\n right: 1em;\n }\n\n @media (forced-colors: active) {\n :host(:not([aria-disabled='true'])) .tree-item--selected .tree-item__item {\n outline: dashed 1px SelectedItem;\n }\n }\n`;\n\nexport default [styles];\n"],"names":["styles","css","_templateObject","_taggedTemplateLiteral"],"mappings":"oTAYaA,CAAAA,CAASC,CAAG,CAAAC,eAAA,GAAAA,eAAA,CAAAC,sBAAA"}
|
|
@@ -27,7 +27,7 @@ import{css as e}from"lit";const t=e`
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
slot:not([name])::slotted(nile-icon) {
|
|
30
|
-
margin-inline-end: var(--nile-spacing-md);
|
|
30
|
+
margin-inline-end: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
.tree-item {
|
|
@@ -35,7 +35,7 @@ import{css as e}from"lit";const t=e`
|
|
|
35
35
|
display: flex;
|
|
36
36
|
align-items: stretch;
|
|
37
37
|
flex-direction: column;
|
|
38
|
-
color: var(--nile-colors-dark-900);
|
|
38
|
+
color: var(--nile-colors-dark-900, var(--ng-colors-text-secondary-700));
|
|
39
39
|
cursor: pointer;
|
|
40
40
|
user-select: none;
|
|
41
41
|
}
|
|
@@ -47,9 +47,9 @@ import{css as e}from"lit";const t=e`
|
|
|
47
47
|
.tree-item__expand-button,
|
|
48
48
|
.tree-item__checkbox,
|
|
49
49
|
.tree-item__label {
|
|
50
|
-
font-family: var(--nile-font-family-serif);
|
|
51
|
-
font-size: var(--nile-type-scale-4);
|
|
52
|
-
font-weight: var(--nile-font-weight-regular);
|
|
50
|
+
font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
|
|
51
|
+
font-size: var(--nile-type-scale-4, var(--ng-font-size-text-sm));
|
|
52
|
+
font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-medium));
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
.tree-item__checkbox::part(base) {
|
|
@@ -68,8 +68,8 @@ import{css as e}from"lit";const t=e`
|
|
|
68
68
|
align-items: center;
|
|
69
69
|
justify-content: center;
|
|
70
70
|
box-sizing: content-box;
|
|
71
|
-
color: var(--nile-colors-neutral-500);
|
|
72
|
-
padding: var(--nile-spacing-md);
|
|
71
|
+
color: var(--nile-colors-neutral-500, var(--ng-colors-fg-tertiary-600));
|
|
72
|
+
padding: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
73
73
|
width: 1rem;
|
|
74
74
|
height: 1rem;
|
|
75
75
|
flex-shrink: 0;
|
|
@@ -120,12 +120,12 @@ import{css as e}from"lit";const t=e`
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
:host(:not([aria-disabled='true'])) .tree-item--selected .tree-item__item {
|
|
123
|
-
background-color: var(--nile-colors-primary-100);
|
|
124
|
-
border-inline-start-color: var(--nile-colors-primary-700);
|
|
123
|
+
background-color: var(--nile-colors-primary-100, var(--ng-colors-bg-brand-primary));
|
|
124
|
+
border-inline-start-color: var(--nile-colors-primary-700, var(--ng-colors-border-brand));
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
:host(:not([aria-disabled='true'])) .tree-item__expand-button {
|
|
128
|
-
color: var(--nile-colors-dark-900);
|
|
128
|
+
color: var(--nile-colors-dark-900, var(--ng-colors-fg-tertiary-600));
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
.tree-item__label {
|
|
@@ -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
|
|
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);
|