@nanoporetech-digital/components 5.8.0 → 5.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/nano-components.cjs.js +1 -1
  4. package/dist/cjs/nano-details.cjs.entry.js +6 -2
  5. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  6. package/dist/cjs/{nano-table-31c953f4.js → nano-table-0f4ea38f.js} +2 -2
  7. package/dist/cjs/{nano-table-31c953f4.js.map → nano-table-0f4ea38f.js.map} +1 -1
  8. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  9. package/dist/cjs/{table.worker-31839f14.js → table.worker-ba6685a0.js} +2 -2
  10. package/dist/cjs/table.worker-ba6685a0.js.map +1 -0
  11. package/dist/collection/components/details/details.js +26 -2
  12. package/dist/collection/components/details/details.js.map +1 -1
  13. package/dist/components/nano-details.js +8 -3
  14. package/dist/components/nano-details.js.map +1 -1
  15. package/dist/esm/loader.js +1 -1
  16. package/dist/esm/nano-components.js +1 -1
  17. package/dist/esm/nano-details.entry.js +6 -2
  18. package/dist/esm/nano-details.entry.js.map +1 -1
  19. package/dist/esm/{nano-table-c365bb42.js → nano-table-cc0fc046.js} +2 -2
  20. package/dist/esm/{nano-table-c365bb42.js.map → nano-table-cc0fc046.js.map} +1 -1
  21. package/dist/esm/nano-table.entry.js +1 -1
  22. package/dist/esm/{table.worker-66324663.js → table.worker-ca7b069b.js} +2 -2
  23. package/dist/esm/table.worker-ca7b069b.js.map +1 -0
  24. package/dist/nano-components/nano-components.esm.js +1 -1
  25. package/dist/nano-components/nano-components.esm.js.map +1 -1
  26. package/dist/nano-components/p-43573870.js +5 -0
  27. package/dist/nano-components/{p-c2ccac87.entry.js → p-4b7e85b2.entry.js} +2 -2
  28. package/dist/nano-components/{p-512194c4.entry.js → p-5ca9275c.entry.js} +2 -2
  29. package/dist/nano-components/p-5ca9275c.entry.js.map +1 -0
  30. package/dist/nano-components/{p-7c0c892a.js → p-d2705006.js} +2 -2
  31. package/dist/types/components/details/details.d.ts +5 -0
  32. package/dist/types/components.d.ts +8 -0
  33. package/docs-json.json +20 -1
  34. package/docs-vscode.json +4 -0
  35. package/hydrate/index.js +8 -3
  36. package/package.json +2 -2
  37. package/dist/cjs/table.worker-31839f14.js.map +0 -1
  38. package/dist/esm/table.worker-66324663.js.map +0 -1
  39. package/dist/nano-components/p-2cc0faeb.js +0 -5
  40. package/dist/nano-components/p-512194c4.entry.js.map +0 -1
  41. /package/dist/nano-components/{p-2cc0faeb.js.map → p-43573870.js.map} +0 -0
  42. /package/dist/nano-components/{p-c2ccac87.entry.js.map → p-4b7e85b2.entry.js.map} +0 -0
  43. /package/dist/nano-components/{p-7c0c892a.js.map → p-d2705006.js.map} +0 -0
package/docs-json.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2023-10-11T14:08:27",
2
+ "timestamp": "2023-10-11T16:13:10",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "2.23.1",
@@ -4169,6 +4169,25 @@
4169
4169
  "required": false,
4170
4170
  "getter": false,
4171
4171
  "setter": false
4172
+ },
4173
+ {
4174
+ "name": "useCacheHeight",
4175
+ "type": "boolean",
4176
+ "mutable": false,
4177
+ "attr": "use-cache-height",
4178
+ "reflectToAttr": false,
4179
+ "docs": "Sometimes, nested content will resize within the details component which results in choppy show/hide animations.\nSet `useCacheHeight` to `true` try to keep animations smooth.",
4180
+ "docsTags": [],
4181
+ "default": "false",
4182
+ "values": [
4183
+ {
4184
+ "type": "boolean"
4185
+ }
4186
+ ],
4187
+ "optional": false,
4188
+ "required": false,
4189
+ "getter": false,
4190
+ "setter": false
4172
4191
  }
4173
4192
  ],
4174
4193
  "methods": [],
package/docs-vscode.json CHANGED
@@ -832,6 +832,10 @@
832
832
  {
833
833
  "name": "open",
834
834
  "description": "Should item be open on load"
835
+ },
836
+ {
837
+ "name": "use-cache-height",
838
+ "description": "Sometimes, nested content will resize within the details component which results in choppy show/hide animations.\nSet `useCacheHeight` to `true` try to keep animations smooth."
835
839
  }
836
840
  ]
837
841
  },
package/hydrate/index.js CHANGED
@@ -12251,6 +12251,7 @@ class Details {
12251
12251
  this.disabled = false;
12252
12252
  this.noHandle = false;
12253
12253
  this.iconRotation = 90;
12254
+ this.useCacheHeight = false;
12254
12255
  }
12255
12256
  toggleClick() {
12256
12257
  this.stateChanging = true;
@@ -12266,7 +12267,8 @@ class Details {
12266
12267
  this.detailsEl.open = true;
12267
12268
  return;
12268
12269
  }
12269
- this.bodyEl.style.height = this.contentEl.scrollHeight + 'px';
12270
+ this.cacheHeight = this.contentEl.scrollHeight;
12271
+ this.bodyEl.style.height = this.cacheHeight + 'px';
12270
12272
  displayTransition(this.bodyEl, 'is-shown', false).then(() => {
12271
12273
  this.stateChanging = false;
12272
12274
  this.detailsEl.open = false;
@@ -12287,7 +12289,9 @@ class Details {
12287
12289
  this.stateChanging = false;
12288
12290
  this.bodyEl.style.height = 'auto';
12289
12291
  });
12290
- this.bodyEl.style.height = this.contentEl.scrollHeight + 'px';
12292
+ this.bodyEl.style.height =
12293
+ (this.useCacheHeight ? this.cacheHeight : this.contentEl.scrollHeight) +
12294
+ 'px';
12291
12295
  }
12292
12296
  attachMo() {
12293
12297
  if (this.mo || !this.detailsEl || !Build.isBrowser)
@@ -12346,7 +12350,8 @@ class Details {
12346
12350
  "open": [1540],
12347
12351
  "disabled": [1540],
12348
12352
  "noHandle": [4, "no-handle"],
12349
- "iconRotation": [2, "icon-rotation"]
12353
+ "iconRotation": [2, "icon-rotation"],
12354
+ "useCacheHeight": [4, "use-cache-height"]
12350
12355
  },
12351
12356
  "$listeners$": undefined,
12352
12357
  "$lazyBundleId$": "-",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanoporetech-digital/components",
3
- "version": "5.8.0",
3
+ "version": "5.8.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://git.oxfordnanolabs.local/Digital/nano-components"
@@ -131,7 +131,7 @@
131
131
  "nanopore",
132
132
  "digital"
133
133
  ],
134
- "gitHead": "3561b3fd583125bb874ecc8bb961c2ae3e892049",
134
+ "gitHead": "fed5a165db8918f46d56956446b279a735c3e546",
135
135
  "volta": {
136
136
  "node": "14.18.1",
137
137
  "npm": "8.6.0"
@@ -1 +0,0 @@
1
- {"file":"table.worker-31839f14.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -1 +0,0 @@
1
- {"file":"table.worker-66324663.js","mappings":";;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -1,5 +0,0 @@
1
- /*!
2
- * Web Components for Nanopore digital Web Apps
3
- */
4
- import{c as t}from"./p-7c0c892a.js";import"./p-d6a04b3a.js";import"./p-ee045579.js";import"./p-7bff5224.js";import"./p-70747f20.js";const o="table.worker";const p="stencil.table.worker";const s=new URL("p-f258383d.js",import.meta.url).href;const r=new Blob(['importScripts("'+s+'")'],{type:"text/javascript"});const c=URL.createObjectURL(r);const e=t(c,o,p);URL.revokeObjectURL(c);export{e as worker,p as workerMsgId,o as workerName,s as workerPath};
5
- //# sourceMappingURL=p-2cc0faeb.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["detailsCss","Details","this","stateChanging","onKeyDown","e","disabled","key","preventDefault","open","onMouseDown","headerEl","focus","toggleClick","show","hide","nanoClose","nanoClosed","emit","defaultPrevented","detailsEl","bodyEl","style","height","contentEl","scrollHeight","displayTransition","then","requestAnimationFrame","nanoOpen","nanoOpened","attachMo","mo","Build","isBrowser","MutationObserver","changes","change","type","attributeName","observe","attributes","componentWillLoad","hasStartSlot","host","querySelector","hasEndSlot","componentDidLoad","setAttribute","connectedCallback","disconnectedCallback","disconnect","undefined","render","h","part","ref","d","class","details","tabindex","display","noHandle","id","role","s","onClick","transform","iconRotation","name","label","div"],"sources":["./src/components/details/details.scss?tag=nano-details&encapsulation=shadow","./src/components/details/details.tsx"],"sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/form';\n\n:host {\n /**\n * @prop --padding: Default to 1em;\n\n * @prop --btn-padding: Defaults to var(--padding);\n * @prop --btn-bg-color: Defaults to var(--nano-color-contrast, #dad6d3);\n * @prop --btn-bg-color--open: Defaults to var(--nano-color-base, #dad6d3);\n * @prop --btn-bg-color--hover: Defaults to var(--nano-color-tint, #{map.get($colors, offwhite)});\n\n * @prop --btn-text-color: Defaults to var(--nano-color-base, #455556);\n * @prop --btn-text-color--open: Defaults to var(--nano-color-contrast, var(--btn-text-color));\n * @prop --btn-text-color--hover: Defaults to var(--nano-color-contrast, var(--btn-text-color));\n\n * @prop --content-transition: Defaults to height .2s ease-out;\n\n * @prop --border-width: Defaults to none;\n * @prop --border-color: Defaults to none;\n * @prop --border-style: Defaults to none;\n * @prop --border-radius: Defaults to none;\n * @prop --box-shadow: Defaults to none;\n * @prop --focus-style: Defaults to #{$control-focus-style}\n */\n\n @include text-inherit();\n\n --padding: 1em;\n --btn-padding: var(--padding);\n --btn-bg-color: var(--nano-color-contrast, #dad6d3);\n --btn-bg-color--open: var(--nano-color-base, #dad6d3);\n --btn-bg-color--hover: var(--nano-color-tint, #{map.get($colors, offwhite)});\n --btn-text-color: var(--nano-color-base, #455556);\n --btn-text-color--open: var(--nano-color-contrast, var(--btn-text-color));\n --btn-text-color--hover: var(--nano-color-contrast, var(--btn-text-color));\n --content-transition: height 0.2s ease-out;\n --border-width: none;\n --border-color: none;\n --border-style: none;\n --border-radius: none;\n --box-shadow: none;\n --focus-style: #{$control-focus-style};\n\n display: block;\n border-style: var(--border-style);\n border-width: var(--border-width-dims);\n border-color: var(--border-color);\n border-radius: var(--border-radius-dims);\n box-shadow: var(--box-shadow);\n}\n\n:host([disabled]) {\n opacity: 0.5;\n}\n\n:host(:last-of-type) {\n --border-width-dims: 0 var(--border-width) var(--border-width);\n --border-radius-dims: 0 0 var(--border-radius) var(--border-radius);\n\n .open .content {\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n }\n}\n\n:host(:first-of-type) {\n --border-radius-dims: var(--border-radius) var(--border-radius) 0 0;\n --border-width-dims: var(--border-width);\n}\n\n:host(:first-of-type:last-of-type) {\n --border-radius-dims: var(--border-radius);\n --border-width-dims: var(--border-width);\n}\n\n:host(:not(:last-of-type):not(:first-of-type)) {\n --border-width-dims: 0 var(--border-width) var(--border-width);\n}\n\n.header {\n height: auto;\n padding: var(--btn-padding);\n text-align: inherit;\n position: relative;\n font-size: 1em;\n line-height: 1;\n margin: 0;\n transition: 0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;\n display: flex;\n align-items: center;\n background: var(--btn-bg-color);\n color: var(--btn-text-color);\n border-radius: var(--border-radius-dims);\n cursor: pointer;\n\n &::-webkit-details-marker {\n display: none;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n box-shadow: var(--focus-style);\n outline: none;\n position: relative;\n z-index: 1;\n }\n\n &:hover {\n background: var(--btn-bg-color--hover);\n color: var(--btn-text-color--hover);\n }\n\n .open & {\n background: var(--btn-bg-color--open);\n color: var(--btn-text-color--open);\n border-end-end-radius: 0;\n border-end-start-radius: 0;\n }\n\n .disabled & {\n cursor: not-allowed;\n }\n\n .label {\n width: 100%;\n max-width: 100%;\n max-height: 100%;\n flex: 1;\n display: inline-block;\n }\n\n .icon {\n line-height: 0;\n flex-direction: column;\n justify-content: center;\n display: inline-block;\n color: currentcolor;\n transition: 0.3s ease transform;\n transform-origin: center;\n\n &--start {\n margin-inline: 0 var(--padding);\n margin-block: 0;\n }\n\n &--end {\n margin-inline: var(--padding) 0;\n margin-block: 0;\n }\n\n ::slotted(nano-icon) {\n --color: currentcolor;\n }\n }\n}\n\n.body {\n overflow: hidden;\n transition: var(--content-transition), 0.2s ease border-radius;\n outline: none;\n\n > * {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n\n .open & {\n opacity: 1;\n }\n }\n}\n\n.content {\n padding: var(--padding);\n}\n","import {\n Component,\n Event,\n EventEmitter,\n Prop,\n h,\n Element,\n Watch,\n Build,\n} from '@stencil/core';\nimport { displayTransition } from '../../utils/transitions';\n\n/**\n * A simple element used to hide or reveal more content with slide effect. Can be used independently or nested within a [accordion](story/components-accordion--accordion) element to add 'one item open at a time' support.\n */\n/**\n * @slot - content that will be hidden / revealed\n * @slot icon-start - used for icons at the start of the handle\n * @slot label - can be used when you wish to insert complex label markup\n * @slot icon-end - used for icons at the end of the handle\n *\n * @part base - the root `details` element\n * @part header - the main `summary` ui control\n * @part label - the text wrapper of the ui control\n * @part icon--start - the icon wrapper at the start of the ui control\n * @part icon--end - the icon wrapper at the end of the ui control\n * @part body - the wrapper around content\n * @part content - the main content wrapper\n */\n@Component({\n tag: 'nano-details',\n styleUrl: 'details.scss',\n shadow: true,\n})\nexport class Details {\n private hasStartSlot: boolean;\n private hasEndSlot: boolean;\n private mo?: MutationObserver;\n private stateChanging: boolean = false;\n private bodyEl: HTMLElement;\n private detailsEl: HTMLDetailsElement;\n private headerEl: HTMLElement;\n private contentEl: HTMLDivElement;\n\n @Element() private host: HTMLNanoDetailsElement;\n\n /** Summary / handle text. Use the `label` slot for HTML markup */\n @Prop() label: string = '';\n\n /** Should item be open on load */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /** Disables the details so it can't be toggled. */\n @Prop({ mutable: true, reflect: true }) disabled: boolean = false;\n\n /** Hide the handle. (You will need to control the hiding / showing of content with script) */\n @Prop() noHandle: boolean = false;\n\n /** Icon slot rotation amount (degrees) on open */\n @Prop() iconRotation: number = 90;\n\n /**\n * Emitted when the component opens.\n * Note: when wrapped in an accordion this event will not propogate. Use nanoToggle events instead.\n */\n @Event() nanoOpened: EventEmitter;\n\n /**\n * Emitted when the component closes.\n * Note: when wrapped in an accordion this event will not propogate. Use nanoToggle events instead.\n */\n @Event() nanoClosed: EventEmitter;\n\n @Watch('open')\n toggleClick() {\n this.stateChanging = true;\n if (this.open) this.show();\n else this.hide();\n }\n\n private onKeyDown = (e: KeyboardEvent) => {\n if (this.stateChanging || this.disabled) return;\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n this.open = !this.open;\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.open = false;\n break;\n case 'ArrowDown':\n e.preventDefault();\n this.open = true;\n break;\n }\n };\n\n private onMouseDown = (e: MouseEvent) => {\n e.preventDefault();\n this.headerEl.focus();\n\n if (this.stateChanging || this.disabled) return;\n this.open = !this.open;\n };\n\n private hide() {\n const nanoClose = this.nanoClosed.emit(this.open);\n\n if (nanoClose.defaultPrevented) {\n this.open = true;\n this.detailsEl.open = true;\n return;\n }\n\n this.bodyEl.style.height = this.contentEl.scrollHeight + 'px';\n\n displayTransition(this.bodyEl, 'is-shown', false).then(() => {\n this.stateChanging = false;\n this.detailsEl.open = false;\n });\n\n requestAnimationFrame(() => {\n this.bodyEl.style.height = '0px';\n });\n }\n\n private show() {\n const nanoOpen = this.nanoOpened.emit();\n this.detailsEl.open = true;\n\n if (nanoOpen.defaultPrevented) {\n this.open = false;\n this.detailsEl.open = false;\n return;\n }\n\n displayTransition(this.bodyEl, 'is-shown', true).then(() => {\n this.stateChanging = false;\n this.bodyEl.style.height = 'auto';\n });\n this.bodyEl.style.height = this.contentEl.scrollHeight + 'px';\n }\n\n private attachMo() {\n if (this.mo || !this.detailsEl || !Build.isBrowser) return;\n\n this.mo = new MutationObserver((changes) => {\n if (this.stateChanging) return;\n\n for (const change of changes) {\n if (change.type === 'attributes' && change.attributeName === 'open') {\n this.open = this.detailsEl.open;\n }\n }\n });\n this.mo.observe(this.detailsEl, { attributes: true });\n }\n\n componentWillLoad() {\n this.hasStartSlot = !!this.host.querySelector('[slot=\"icon-start\"]');\n this.hasEndSlot = !!this.host.querySelector('[slot=\"icon-end\"]');\n }\n\n componentDidLoad() {\n this.bodyEl.style.height = this.open ? 'auto' : '0';\n if (this.open) this.detailsEl.setAttribute('open', 'true');\n this.attachMo();\n }\n\n connectedCallback() {\n this.attachMo();\n }\n\n disconnectedCallback() {\n if (this.mo) {\n this.mo.disconnect();\n this.mo = undefined;\n }\n }\n\n render() {\n return (\n <details\n part=\"base\"\n ref={(d: HTMLDetailsElement) => (this.detailsEl = d)}\n class={{\n details: true,\n open: this.open,\n disabled: this.disabled,\n }}\n >\n <summary\n part=\"header\"\n aria-controls=\"content\"\n aria-expanded={this.open ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : 'false'}\n tabindex={this.disabled ? '-1' : '0'}\n style={{ display: this.noHandle ? 'none' : '' }}\n id=\"header\"\n role=\"button\"\n class=\"header\"\n ref={(s) => (this.headerEl = s)}\n onKeyDown={this.onKeyDown}\n onClick={this.onMouseDown}\n >\n {this.hasStartSlot ? (\n <span\n part=\"icon--start\"\n class=\"icon icon--start\"\n style={{\n transform: this.open ? `rotate(${this.iconRotation}deg)` : '',\n }}\n >\n <slot name=\"icon-start\" />\n </span>\n ) : (\n ''\n )}\n <div part=\"label\" class=\"label\">\n {this.label ? this.label : <slot name=\"label\" />}\n </div>\n {this.hasEndSlot ? (\n <span\n part=\"icon--end\"\n class=\"icon icon--end\"\n style={{\n transform: this.open ? `rotate(${this.iconRotation}deg)` : '',\n }}\n >\n <slot name=\"icon-end\" />\n </span>\n ) : (\n ''\n )}\n </summary>\n <div\n part=\"body\"\n class=\"body\"\n ref={(div) => (this.bodyEl = div)}\n tabindex=\"-1\"\n role=\"region\"\n aria-labelledby=\"header\"\n >\n <div\n part=\"content\"\n ref={(div) => (this.contentEl = div)}\n class=\"content\"\n id=\"content\"\n >\n <slot />\n </div>\n </div>\n </details>\n );\n }\n}\n"],"mappings":"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"}