UNPKG

@trimble-oss/moduswebcomponents

Version:

Modus Web Components is a modern, accessible UI library built with Stencil JS that provides reusable web components following Trimble's Modus design system. This updated version focuses on improved flexibility, enhanced theming options, comprehensive cust

180 lines (170 loc) 14.6 kB
import { r as registerInstance, h, H as Host, g as getElement } from './index-D_4hbGjA.js'; import { i as inheritAriaAttributes } from './utils-DQvnWXRl.js'; const convertPropsToClasses$1 = ({ shape, size, }) => { let classes = ''; if (shape) { switch (shape) { case 'circle': classes = `${classes} modus-wc-rounded-full`; break; case 'square': classes = `${classes} modus-wc-rounded-lg`; break; } } if (size) { switch (size) { case 'xs': classes = `${classes} modus-wc-w-8`; break; case 'sm': classes = `${classes} modus-wc-w-12`; break; case 'md': classes = `${classes} modus-wc-w-16`; break; case 'lg': classes = `${classes} modus-wc-w-20`; break; } } return classes.trim(); }; const modusWcAvatarCss = "modus-wc-avatar .modus-wc-avatar .initials{align-items:center;background-color:var(--modus-wc-color-black);color:var(--modus-wc-color-white);display:flex;font-weight:600;height:100%;justify-content:center;text-transform:uppercase;width:100%}modus-wc-avatar .modus-wc-avatar .no-image{align-items:center;background-color:var(--modus-wc-color-gray-2);color:var(--modus-wc-color-white);display:flex;justify-content:center}modus-wc-avatar .modus-wc-avatar .modus-wc-w-8 .initials{font-size:var(--modus-wc-font-size-xs, 0.75rem)}modus-wc-avatar .modus-wc-avatar .modus-wc-w-12 .initials{font-size:var(--modus-wc-font-size-sm, 0.875rem)}modus-wc-avatar .modus-wc-avatar .modus-wc-w-16 .initials{font-size:var(--modus-wc-font-size-md, 1rem)}modus-wc-avatar .modus-wc-avatar .modus-wc-w-20 .initials{font-size:var(--modus-wc-font-size-lg, 1.25rem)}"; const ModusWcAvatar = class { constructor(hostRef) { registerInstance(this, hostRef); this.inheritedAttributes = {}; /** Custom CSS class to apply to the inner div. */ this.customClass = ''; /** The location of the image. */ this.imgSrc = ''; /** The initials to display when no image is provided. */ this.initials = ''; // TODO - add placeholder support (need UX logic) /** The shape of the avatar. */ this.shape = 'circle'; /** The size of the avatar. */ this.size = 'md'; } componentWillLoad() { this.inheritedAttributes = inheritAriaAttributes(this.el); } getClasses() { const classList = []; const propClasses = convertPropsToClasses$1({ shape: this.shape, size: this.size, }); // The order CSS classes are added matters to CSS specificity if (propClasses) classList.push(propClasses); if (this.customClass) classList.push(this.customClass); if (!this.imgSrc && !this.initials) classList.push('no-image'); return classList.join(' '); } getUserInitials() { if (!this.initials) return ''; return this.initials .trim() .split(/\s+/) .filter(Boolean) .map((part) => part.charAt(0)) .join('') .substring(0, 3) .toUpperCase(); } render() { const altText = this.alt || 'User avatar'; return (h(Host, { key: 'de74f253eb7123d9e409a8446de95a89422fa694' }, h("div", Object.assign({ key: '46d9e20b3433e4a5585e15eba600935d856bcd74', class: "modus-wc-avatar" }, this.inheritedAttributes), h("div", { key: 'c2575ac2e3190143d4ca9d5bdf32e939d8136721', class: this.getClasses() }, this.imgSrc ? (h("img", { src: this.imgSrc, alt: altText })) : this.initials ? (h("span", { class: "initials", "aria-label": this.alt || this.initials }, this.getUserInitials())) : (h("modus-wc-icon", { "aria-label": altText, name: "person", size: this.size, variant: "solid" })))))); } get el() { return getElement(this); } }; ModusWcAvatar.style = modusWcAvatarCss; const convertPropsToClasses = ({ bordered, fullImage, layout, padding, }) => { let classes = ''; if (bordered) { classes = `${classes} modus-wc-card-bordered`; } if (fullImage) { classes = `${classes} modus-wc-image-full`; } if (layout === 'horizontal') { classes = `${classes} modus-wc-card-side`; } if (padding === 'compact') { classes = `${classes} modus-wc-card-compact`; } if (padding === 'comfortable') { classes = `${classes} modus-wc-card-comfortable`; } return classes.trim(); }; const modusWcCardCss = "modus-wc-card .modus-wc-card{background-color:var(--modus-wc-color-base-100);color:var(--modus-wc-color-base-content)}modus-wc-card .modus-wc-card figure{margin-bottom:unset}modus-wc-card .modus-wc-card .modus-wc-card-body{gap:unset}[data-theme=modus-classic-light] modus-wc-card .modus-wc-card,[data-theme=modus-classic-dark] modus-wc-card .modus-wc-card{--rounded-box:0.5rem;box-shadow:0 0 2px 0 rgba(54, 53, 69, 0.3)}[data-theme=modus-classic-light] modus-wc-card .modus-wc-card:hover,[data-theme=modus-classic-dark] modus-wc-card .modus-wc-card:hover{box-shadow:0 0 8px 0 rgba(54, 53, 69, 0.3)}[data-theme=modus-classic-light] modus-wc-card .modus-wc-card .modus-wc-card-subtitle,[data-theme=modus-classic-dark] modus-wc-card .modus-wc-card .modus-wc-card-subtitle{font-weight:var(--modus-wc-font-weight-bold)}[data-theme=modus-classic-light] modus-wc-card .modus-wc-card{background-color:var(--modus-wc-color-white);color:var(--modus-wc-color-trimble-gray)}[data-theme=modus-classic-light] modus-wc-card .modus-wc-card .modus-wc-card-title{--fallback-bc:var(--modus-wc-color-trimble-gray)}[data-theme=modus-classic-light] modus-wc-card .modus-wc-card .modus-wc-card-subtitle{color:var(--modus-wc-color-gray-8)}[data-theme=modus-classic-dark] modus-wc-card .modus-wc-card{background-color:var(--modus-wc-color-gray-9);color:var(--modus-wc-color-trimble-white)}[data-theme=modus-classic-dark] modus-wc-card .modus-wc-card .modus-wc-card-title{--fallback-bc:var(--modus-wc-color-white)}[data-theme=modus-classic-dark] modus-wc-card .modus-wc-card .modus-wc-card-subtitle{color:var(--modus-wc-color-gray-1)}[data-theme=connect-light] modus-wc-card .modus-wc-card,[data-theme=connect-dark] modus-wc-card .modus-wc-card{box-shadow:0 0 0.25rem var(--modus-wc-color-base-200);background-color:var(--modus-wc-color-base-page);border:1px solid var(--modus-wc-color-base-200);color:var(--modus-wc-color-base-content)}[data-theme=connect-light] modus-wc-card .modus-wc-card:hover,[data-theme=connect-dark] modus-wc-card .modus-wc-card:hover{background-color:var(--modus-wc-color-base-100);color:var(--modus-wc-color-primary)}[data-theme=connect-light] modus-wc-card .modus-wc-card:focus,[data-theme=connect-dark] modus-wc-card .modus-wc-card:focus{background-color:var(--modus-wc-color-base-200);color:var(--modus-wc-color-primary)}[data-theme=connect-light] modus-wc-card .modus-wc-card:active,[data-theme=connect-dark] modus-wc-card .modus-wc-card:active{background-color:var(--modus-wc-color-primary-pale);color:var(--modus-wc-color-primary)}[data-theme=connect-light] modus-wc-card .modus-wc-card-selected,[data-theme=connect-dark] modus-wc-card .modus-wc-card-selected{background-color:var(--modus-wc-color-primary-pale);color:var(--modus-wc-color-primary)}[data-theme=connect-light] modus-wc-card .modus-wc-card-active,[data-theme=connect-dark] modus-wc-card .modus-wc-card-active{background-color:var(--modus-wc-color-primary-pale);color:var(--modus-wc-color-primary)}[data-theme=connect-light] modus-wc-card .modus-wc-card-open,[data-theme=connect-dark] modus-wc-card .modus-wc-card-open{background-color:var(--modus-wc-color-primary-pale);color:var(--modus-wc-color-primary)}[data-theme=connect-light] modus-wc-card .modus-wc-card.selected,[data-theme=connect-dark] modus-wc-card .modus-wc-card.selected{background-color:var(--modus-wc-color-primary-pale);color:var(--modus-wc-color-primary)}[data-theme=connect-light] modus-wc-card .modus-wc-card.active,[data-theme=connect-dark] modus-wc-card .modus-wc-card.active{background-color:var(--modus-wc-color-primary-pale);color:var(--modus-wc-color-primary)}[data-theme=connect-light] modus-wc-card .modus-wc-card-disabled:hover,[data-theme=connect-dark] modus-wc-card .modus-wc-card-disabled:hover{background-color:inherit}[data-theme=connect-light] modus-wc-card .modus-wc-card--active,[data-theme=connect-dark] modus-wc-card .modus-wc-card--active{background-color:var(--modus-wc-color-primary-pale);color:var(--modus-wc-color-primary)}[data-theme=connect-light] modus-wc-card .modus-wc-card--selected,[data-theme=connect-dark] modus-wc-card .modus-wc-card--selected{background-color:var(--modus-wc-color-primary-pale);color:var(--modus-wc-color-primary)}[data-theme=connect-light] modus-wc-card .modus-wc-card:checked,[data-theme=connect-dark] modus-wc-card .modus-wc-card:checked{background-color:var(--modus-wc-color-primary);color:var(--modus-wc-color-primary-content)}[data-theme=connect-light] modus-wc-card .modus-wc-card.checked,[data-theme=connect-dark] modus-wc-card .modus-wc-card.checked{background-color:var(--modus-wc-color-primary);color:var(--modus-wc-color-primary-content)}[data-theme=connect-light] modus-wc-card .modus-wc-card-checked,[data-theme=connect-dark] modus-wc-card .modus-wc-card-checked{background-color:var(--modus-wc-color-primary);color:var(--modus-wc-color-primary-content)}[data-theme=connect-light] modus-wc-card .modus-wc-card.pressed,[data-theme=connect-dark] modus-wc-card .modus-wc-card.pressed{background-color:var(--modus-wc-color-primary);color:var(--modus-wc-color-primary-content)}[data-theme=connect-light] modus-wc-card .modus-wc-card-pressed,[data-theme=connect-dark] modus-wc-card .modus-wc-card-pressed{background-color:var(--modus-wc-color-primary);color:var(--modus-wc-color-primary-content)}[data-theme=connect-light] modus-wc-card .modus-wc-card[aria-pressed=true],[data-theme=connect-dark] modus-wc-card .modus-wc-card[aria-pressed=true]{background-color:var(--modus-wc-color-primary);color:var(--modus-wc-color-primary-content)}[data-theme=connect-light] modus-wc-card .modus-wc-card:hover,[data-theme=connect-dark] modus-wc-card .modus-wc-card:hover{box-shadow:0 0 0.375rem var(--modus-wc-color-base-100)}"; const ModusWcCard = class { constructor(hostRef) { registerInstance(this, hostRef); this.inheritedAttributes = {}; /** Makes any \<figure> in the 'header' slot cover the background */ this.backgroundFigure = false; /** Adds a hard border to the card */ this.bordered = false; /** Custom CSS class to apply */ this.customClass = ''; /** Determines how the card is laid out */ this.layout = 'vertical'; /** Determines the interior padding size */ this.padding = 'compact'; } componentWillLoad() { this.inheritedAttributes = inheritAriaAttributes(this.el); } getClasses() { const classList = ['modus-wc-card modus-wc-rounded-card']; const propClasses = convertPropsToClasses({ bordered: this.bordered, fullImage: this.backgroundFigure, layout: this.layout, padding: this.padding, }); // The order CSS classes are added matters to CSS specificity if (propClasses) classList.push(propClasses); if (this.customClass) classList.push(this.customClass); return classList.join(' '); } render() { return (h(Host, { key: '25492378050f6c06ed7ea45e3947974356fbb44a' }, h("article", Object.assign({ key: '54fbda5fc406f57ffb2387bc59c79699278f219f', class: this.getClasses(), tabindex: -1 }, this.inheritedAttributes), h("slot", { key: '59b93595ec5a5e8ecd98be2eead691278db6e015', name: "header" }), h("div", { key: '294921b54282742d00dc530c8dba35a2219974d1', class: "modus-wc-card-body" }, h("div", { key: 'c746c0d4ee1765a57c0341d7c70b35424e3bbfa4', class: "modus-wc-card-title" }, h("slot", { key: '0afa213cf7fe78853d90d4f1a6cb817e28f2c965', name: "title" })), h("div", { key: '735d4456083500a288bad9adfd5fc0d96e77d9e3', class: "modus-wc-card-subtitle" }, h("slot", { key: 'c10b6158e14216e436916e021ba9997b6558cc0b', name: "subtitle" })), h("slot", { key: '723148995604d7bc737a4754c9223e6b9c354add' }), " ", h("div", { key: 'aa35be52d458a2121a87fbe0163b22aa0c8c9b15', class: "modus-wc-card-actions" }, h("slot", { key: 'ec852e3e23c7e5ec2e800c40d9ae177a3aad85fa', name: "actions" }))), h("slot", { key: 'd7c87209df38720f913298a14a26d6e641078639', name: "footer" })))); } get el() { return getElement(this); } }; ModusWcCard.style = modusWcCardCss; const modusWcToolbarCss = ".modus-wc-navbar{border-radius:8px;box-shadow:0 1px 2px -1px color-mix(in sRGB, var(--modus-wc-color-black) 10%, transparent), 0 1px 3px 0 color-mix(in sRGB, var(--modus-wc-color-black) 10%, transparent)}"; const ModusWcToolbar = class { constructor(hostRef) { registerInstance(this, hostRef); this.inheritedAttributes = {}; /** Custom CSS class to apply to the outer div. */ this.customClass = ''; } componentWillLoad() { this.inheritedAttributes = inheritAriaAttributes(this.el); } getClasses() { const classList = ['modus-wc-navbar']; // The order CSS classes are added matters to CSS specificity if (this.customClass) classList.push(this.customClass); return classList.join(' '); } render() { return (h(Host, { key: 'f3acada56986f75be489852b78ab5f08947b8c3b' }, h("div", Object.assign({ key: '00cebe2e64fe84a594a3fee847b0b1018b9756f3', class: this.getClasses() }, this.inheritedAttributes), h("div", { key: 'eca7f0b6f6911bc1e430baa5a75a31e513ca6e3d', class: "modus-wc-navbar-start" }, h("slot", { key: '634eb5055c6b8f4e829e3c8e7c856496e58c135c', name: "start" })), h("div", { key: 'c930dd3d7af6f3429a77cfb6df8ccec9bfc3cc6b', class: "modus-wc-navbar-center" }, h("slot", { key: 'd50f87593af0e908dd2526028abd83d9716f87c2', name: "center" })), h("div", { key: '6297f935dea5aa04c8459379bd0de1fb3442a158', class: "modus-wc-navbar-end" }, h("slot", { key: '5830a6aa48bfad76d4db897cd107190389b3efc1', name: "end" }))))); } get el() { return getElement(this); } }; ModusWcToolbar.style = modusWcToolbarCss; export { ModusWcAvatar as modus_wc_avatar, ModusWcCard as modus_wc_card, ModusWcToolbar as modus_wc_toolbar };