@moni-labs/moni-ui 0.4.0 → 0.4.2

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 (81) hide show
  1. package/README.md +49 -0
  2. package/custom-elements.json +36 -0
  3. package/dist/browser/moni-ui.iife.min.js +7118 -0
  4. package/dist/browser/moni-ui.iife.min.js.br +0 -0
  5. package/dist/browser/moni-ui.iife.min.js.gz +0 -0
  6. package/dist/browser/moni-ui.iife.min.js.map +1 -0
  7. package/dist/browser/moni-ui.min.css +1 -0
  8. package/dist/browser/moni-ui.min.css.br +0 -0
  9. package/dist/browser/moni-ui.min.css.gz +0 -0
  10. package/dist/browser/moni-ui.min.css.map +1 -0
  11. package/dist/browser/moni-ui.min.js +16903 -0
  12. package/dist/browser/moni-ui.min.js.br +0 -0
  13. package/dist/browser/moni-ui.min.js.gz +0 -0
  14. package/dist/browser/moni-ui.min.js.map +1 -0
  15. package/dist/browser.d.ts +7 -0
  16. package/dist/browser.d.ts.map +1 -0
  17. package/dist/browser.js +6 -0
  18. package/dist/cdn/chunks/base-BIpe3L86.js +1 -0
  19. package/dist/cdn/chunks/class-map-DBljv-_e.js +1 -0
  20. package/dist/cdn/chunks/decorate-DxX3e27g.js +738 -0
  21. package/dist/cdn/chunks/directive-BSZPiF1A.js +1 -0
  22. package/dist/cdn/chunks/event-emitter-CGhsijUg.js +1 -0
  23. package/dist/cdn/chunks/gsap-DWxn8li7.js +1 -0
  24. package/dist/cdn/chunks/if-defined-CuEAJKpp.js +1 -0
  25. package/dist/cdn/chunks/live-B7Rjg1kt.js +1 -0
  26. package/dist/cdn/chunks/query-SWT-tzvq.js +1 -0
  27. package/dist/cdn/chunks/query-assigned-elements-BBHe1xEY.js +1 -0
  28. package/dist/cdn/components/moni-app-bar.js +118 -0
  29. package/dist/cdn/components/moni-badge.js +69 -0
  30. package/dist/cdn/components/moni-bottom-sheet.js +143 -0
  31. package/dist/cdn/components/moni-button-group.js +56 -0
  32. package/dist/cdn/components/moni-button-segment.js +272 -0
  33. package/dist/cdn/components/moni-button.js +602 -0
  34. package/dist/cdn/components/moni-card.js +143 -0
  35. package/dist/cdn/components/moni-carousel.js +311 -0
  36. package/dist/cdn/components/moni-checkbox.js +137 -0
  37. package/dist/cdn/components/moni-chip.js +218 -0
  38. package/dist/cdn/components/moni-color-field.js +54 -0
  39. package/dist/cdn/components/moni-context-menu.js +24 -0
  40. package/dist/cdn/components/moni-dialog.js +191 -0
  41. package/dist/cdn/components/moni-divider.js +32 -0
  42. package/dist/cdn/components/moni-expansion.js +50 -0
  43. package/dist/cdn/components/moni-fab-menu.js +57 -0
  44. package/dist/cdn/components/moni-fab.js +103 -0
  45. package/dist/cdn/components/moni-file-field.js +45 -0
  46. package/dist/cdn/components/moni-icon.js +55 -0
  47. package/dist/cdn/components/moni-list-item.js +144 -0
  48. package/dist/cdn/components/moni-list.js +16 -0
  49. package/dist/cdn/components/moni-loading-indicator.js +134 -0
  50. package/dist/cdn/components/moni-menu-item.js +45 -0
  51. package/dist/cdn/components/moni-menu.js +165 -0
  52. package/dist/cdn/components/moni-morph-modal.js +157 -0
  53. package/dist/cdn/components/moni-nav-item.js +153 -0
  54. package/dist/cdn/components/moni-nav.js +161 -0
  55. package/dist/cdn/components/moni-progress.js +420 -0
  56. package/dist/cdn/components/moni-radio.js +154 -0
  57. package/dist/cdn/components/moni-ripple.js +55 -0
  58. package/dist/cdn/components/moni-segmented-button.js +32 -0
  59. package/dist/cdn/components/moni-select-option.js +47 -0
  60. package/dist/cdn/components/moni-select.js +503 -0
  61. package/dist/cdn/components/moni-shape.js +99 -0
  62. package/dist/cdn/components/moni-side-sheet.js +234 -0
  63. package/dist/cdn/components/moni-slider.js +252 -0
  64. package/dist/cdn/components/moni-snackbar.js +91 -0
  65. package/dist/cdn/components/moni-split-button.js +110 -0
  66. package/dist/cdn/components/moni-step.js +111 -0
  67. package/dist/cdn/components/moni-stepper.js +25 -0
  68. package/dist/cdn/components/moni-switch.js +169 -0
  69. package/dist/cdn/components/moni-tab.js +93 -0
  70. package/dist/cdn/components/moni-tabs.js +38 -0
  71. package/dist/cdn/components/moni-text-field.js +83 -0
  72. package/dist/cdn/components/moni-textarea.js +46 -0
  73. package/dist/cdn/components/moni-time-picker.js +496 -0
  74. package/dist/cdn/components/moni-toolbar.js +71 -0
  75. package/dist/cdn/components/moni-tooltip.js +161 -0
  76. package/dist/cdn/components/moni-typography.js +117 -0
  77. package/dist/cdn/importmap.json +102 -0
  78. package/dist/cdn/moni-ui.min.css +1 -0
  79. package/package.json +8 -1
  80. package/src/browser.ts +6 -0
  81. package/src/types/css.d.ts +4 -0
@@ -0,0 +1,154 @@
1
+ import{d as e,i as t,m as n,o as r,r as i,s as a,t as o}from"../chunks/decorate-DxX3e27g.js";import{t as s}from"../chunks/query-SWT-tzvq.js";import{t as c}from"../chunks/if-defined-CuEAJKpp.js";import{t as l}from"../chunks/live-B7Rjg1kt.js";var u,d=class extends t{static{u=this}static{this.formAssociated=!0}constructor(){super(),this.label=``,this.checked=!1,this.disabled=!1,this.uncheckedIcon=``,this.checkedIcon=``,this.iconContainer=`circle`,this.size=`medium`,this.name=``,this.value=``,this._internals=this.attachInternals()}updated(e){this._input&&(e.has(`checked`)&&(this._input.checked=this.checked,this._internals?.setFormValue?.(this.checked?this.value||`on`:null)),e.has(`disabled`)&&(this._input.disabled=this.disabled))}static{this.styles=[i,n`
2
+ :host {
3
+ --_size: 1.5rem;
4
+ display: inline-flex;
5
+ font-family: var(--font);
6
+ }
7
+ :host([size='small']) { --_size: 1rem; }
8
+ :host([size='large']) { --_size: 2rem; }
9
+ :host([size='extra']) { --_size: 2.5rem; }
10
+
11
+ /* BeerCSS .radio */
12
+ label {
13
+ inline-size: auto;
14
+ block-size: auto;
15
+ line-height: normal;
16
+ white-space: nowrap;
17
+ cursor: pointer;
18
+ display: inline-flex;
19
+ align-items: center;
20
+ }
21
+
22
+ /* BeerCSS: input has real size, opacity 0 */
23
+ input {
24
+ inline-size: var(--_size);
25
+ block-size: var(--_size);
26
+ opacity: 0;
27
+ cursor: pointer;
28
+ flex: none;
29
+ }
30
+
31
+ /* BeerCSS: span wraps visible indicator + label */
32
+ span {
33
+ display: inline-flex;
34
+ align-items: center;
35
+ color: var(--on-surface);
36
+ font-size: 0.875rem;
37
+ position: relative;
38
+ }
39
+
40
+ /* Indicador visual del radio, superpuesto al input nativo. */
41
+ span > i {
42
+ --_size: inherit;
43
+ inline-size: var(--_size);
44
+ block-size: var(--_size);
45
+ box-sizing: border-box;
46
+ margin: 0 auto;
47
+ outline: none;
48
+ color: var(--on-surface-variant);
49
+ position: absolute;
50
+ inset: auto auto auto calc(var(--_size) * -1);
51
+ border-radius: 50%;
52
+ user-select: none;
53
+ z-index: 1;
54
+ font-family: var(--font-icon);
55
+ font-size: var(--_size);
56
+ display: flex;
57
+ align-items: center;
58
+ justify-content: center;
59
+ }
60
+
61
+ /* Checked: selected radio icon */
62
+ input:checked + span > i {
63
+ color: var(--primary);
64
+ }
65
+
66
+ /* Los iconos personalizados viven dentro del círculo del radio. */
67
+ span.custom-icons > i {
68
+ inline-size: calc(var(--_size) * 0.75);
69
+ block-size: calc(var(--_size) * 0.75);
70
+ inset-inline-start: calc(var(--_size) * -0.875);
71
+ border: 0.125rem solid var(--on-surface-variant);
72
+ border-radius: 50%;
73
+ font-size: calc(var(--_size) * 0.55);
74
+ font-variation-settings: 'wght' 600;
75
+ transition: background-color var(--speed1), border-color var(--speed1), color var(--speed1);
76
+ }
77
+
78
+ input:checked + span.custom-icons > i {
79
+ border-color: var(--primary);
80
+ background-color: var(--primary);
81
+ color: var(--on-primary);
82
+ }
83
+
84
+ /* Variante de icono libre, sin círculo exterior. */
85
+ span.custom-icons.no-icon-container > i {
86
+ border-color: transparent;
87
+ background-color: transparent;
88
+ color: var(--on-surface-variant);
89
+ }
90
+
91
+ input:checked + span.custom-icons.no-icon-container > i {
92
+ border-color: transparent;
93
+ background-color: transparent;
94
+ color: var(--primary);
95
+ }
96
+
97
+ /* BeerCSS: span::after = hover ripple */
98
+ span::after {
99
+ --_size: inherit;
100
+ content: '';
101
+ inline-size: var(--_size);
102
+ block-size: var(--_size);
103
+ box-sizing: border-box;
104
+ margin: 0 auto;
105
+ position: absolute;
106
+ inset: auto auto auto calc(var(--_size) * -1);
107
+ border-radius: 50%;
108
+ user-select: none;
109
+ transition: all var(--speed1);
110
+ background-color: currentColor;
111
+ box-shadow: 0 0 0 0 currentColor;
112
+ opacity: 0;
113
+ }
114
+
115
+ label:hover > input:not(:disabled) + span::after,
116
+ input:not(:disabled):focus + span::after {
117
+ box-shadow: 0 0 0 0.5rem currentColor;
118
+ opacity: 0.1;
119
+ }
120
+
121
+ /* Label padding */
122
+ span.has-label {
123
+ padding-inline-start: 0.25rem;
124
+ }
125
+
126
+ span.has-label.no-icon-container {
127
+ padding-inline-start: 0;
128
+ }
129
+
130
+ /* Disabled */
131
+ input:disabled + span {
132
+ opacity: 0.5;
133
+ cursor: not-allowed;
134
+ }
135
+
136
+ /* Focus ring */
137
+ input:focus-visible + span > i {
138
+ outline: 0.125rem solid var(--primary);
139
+ outline-offset: 0.375rem;
140
+ }
141
+ `]}_onChange(e){if(this.checked=e.target.checked,this.checked&&this.name){let e=this.getRootNode();e&&e.querySelectorAll(`moni-radio[name="${this.name}"]`).forEach(e=>{e!==this&&e instanceof u&&(e.checked=!1)})}this.dispatchEvent(new Event(`change`,{bubbles:!0,composed:!0}))}render(){let t=!!(this.uncheckedIcon||this.checkedIcon),n=t?this.uncheckedIcon:`radio_button_unchecked`,r=t?this.checkedIcon:`radio_button_checked`,i=this.checked?r:n,a=[this.label?`has-label`:``,t?`custom-icons`:``,t&&this.iconContainer===`none`?`no-icon-container`:``].filter(Boolean).join(` `);return e`<label part="radio">
142
+ <input
143
+ type="radio"
144
+ .checked=${l(this.checked)}
145
+ ?disabled=${this.disabled}
146
+ name=${c(this.name||void 0)}
147
+ value=${c(this.value||void 0)}
148
+ @change=${this._onChange}
149
+ />
150
+ <span class=${a}>
151
+ <i aria-hidden="true">${i}</i>
152
+ ${this.label?e`${this.label}`:e`<slot></slot>`}
153
+ </span>
154
+ </label>`}};o([r({reflect:!0})],d.prototype,`label`,void 0),o([r({type:Boolean,reflect:!0})],d.prototype,`checked`,void 0),o([r({type:Boolean,reflect:!0})],d.prototype,`disabled`,void 0),o([r({reflect:!0,attribute:`unchecked-icon`})],d.prototype,`uncheckedIcon`,void 0),o([r({reflect:!0,attribute:`checked-icon`})],d.prototype,`checkedIcon`,void 0),o([r({reflect:!0,attribute:`icon-container`})],d.prototype,`iconContainer`,void 0),o([r({reflect:!0})],d.prototype,`size`,void 0),o([r({reflect:!0})],d.prototype,`name`,void 0),o([r({reflect:!0})],d.prototype,`value`,void 0),o([s(`input`)],d.prototype,`_input`,void 0),d=u=o([a(`moni-radio`)],d);
@@ -0,0 +1,55 @@
1
+ import{d as e,i as t,m as n,o as r,r as i,s as a,t as o}from"../chunks/decorate-DxX3e27g.js";var s=class extends t{constructor(...e){super(...e),this.x=50,this.y=50,this.active=!1,this.speed=`normal`,this.color=`primary`,this._target=null,this._timeoutId=null,this._onPointerDown=e=>{if(!this._target)return;let t=this._target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;this.x=n/t.width*100,this.y=r/t.height*100,this._timeoutId&&(clearTimeout(this._timeoutId),this.active=!1),requestAnimationFrame(()=>{this.active=!0;let e=this.speed===`fast`?300:this.speed===`slow`?1200:600;this._timeoutId=setTimeout(()=>{this.active=!1,this._timeoutId=null},e)})}}connectedCallback(){super.connectedCallback(),this._target=this.parentElement,this._target&&(getComputedStyle(this._target).position===`static`&&(this._target.style.position=`relative`),this._target.addEventListener(`pointerdown`,this._onPointerDown))}disconnectedCallback(){this._target&&this._target.removeEventListener(`pointerdown`,this._onPointerDown),this._timeoutId&&clearTimeout(this._timeoutId),super.disconnectedCallback()}static{this.styles=[i,n`
2
+ :host {
3
+ display: block;
4
+ position: absolute;
5
+ inset: 0;
6
+ border-radius: inherit;
7
+ pointer-events: none;
8
+ overflow: hidden;
9
+ --_dur: 600ms;
10
+ color: var(--primary);
11
+ z-index: 1;
12
+ }
13
+ :host([speed='fast']) {
14
+ --_dur: 300ms;
15
+ }
16
+ :host([speed='slow']) {
17
+ --_dur: 1200ms;
18
+ }
19
+
20
+ .ripple {
21
+ position: absolute;
22
+ inline-size: 200%;
23
+ aspect-ratio: 1;
24
+ border-radius: 50%;
25
+ translate: -50% -50%;
26
+ opacity: 0;
27
+ pointer-events: none;
28
+ background-color: currentColor;
29
+ inset-block-start: var(--_y, 50%);
30
+ inset-inline-start: var(--_x, 50%);
31
+ scale: 0;
32
+ transition: opacity var(--_dur) ease, scale 0s var(--_dur);
33
+ }
34
+
35
+ :host([color='primary']) {
36
+ color: var(--primary);
37
+ }
38
+ :host([color='secondary']) {
39
+ color: var(--secondary);
40
+ }
41
+ :host([color='surface']) {
42
+ color: var(--surface-variant);
43
+ }
44
+
45
+ :host([active]) .ripple {
46
+ opacity: 0.25;
47
+ scale: 1;
48
+ transition: scale var(--_dur) cubic-bezier(0.2, 0, 0, 1),
49
+ opacity var(--_dur) ease;
50
+ }
51
+ `]}render(){return e`<span
52
+ class="ripple"
53
+ part="ripple"
54
+ style="--_x: ${this.x}%; --_y: ${this.y}%;"
55
+ ></span>`}};o([r({type:Number,reflect:!0})],s.prototype,`x`,void 0),o([r({type:Number,reflect:!0})],s.prototype,`y`,void 0),o([r({type:Boolean,reflect:!0})],s.prototype,`active`,void 0),o([r({reflect:!0})],s.prototype,`speed`,void 0),o([r({reflect:!0})],s.prototype,`color`,void 0),s=o([a(`moni-ripple`)],s);
@@ -0,0 +1,32 @@
1
+ import{d as e,i as t,m as n,o as r,r as i,s as a,t as o}from"../chunks/decorate-DxX3e27g.js";import{t as s}from"../chunks/query-assigned-elements-BBHe1xEY.js";var c,l=class extends t{static{c=this}static{this.formAssociated=!0}static{this._deprecationWarned=!1}constructor(){super(),this.name=``,this.multi=!1,this.size=`small`,this.hideCheck=!1,this.gap=``,this.internals=this.attachInternals()}connectedCallback(){super.connectedCallback(),c._deprecationWarned||(c._deprecationWarned=!0,console.warn(`[moni-ui] <moni-segmented-button> is deprecated since v0.3.0. Material Design 3 Expressive no longer recommends segmented buttons. Use <moni-button-group variant="connected"> instead. See m3-docs/components/segmented-buttons/overview.md § M3 Expressive update.`))}get form(){return this.internals.form}get type(){return`segmented-button`}get value(){let e=this.segments.filter(e=>e.checked).map(e=>e.value);return this.multi?e.join(`,`):e[0]||``}get segments(){return this.slottedSegments.filter(e=>e.tagName.toLowerCase()===`moni-button-segment`)}static{this.styles=[i,n`
2
+ :host {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ vertical-align: middle;
6
+ }
7
+
8
+ .group {
9
+ display: inline-flex;
10
+ align-items: center;
11
+ position: relative;
12
+ width: 100%;
13
+ }
14
+
15
+ slot {
16
+ display: contents;
17
+ }
18
+
19
+ ::slotted(moni-button-segment) {
20
+ flex: 1 1 0;
21
+ min-inline-size: 0;
22
+ transition: flex-grow 300ms cubic-bezier(0.2, 0, 0, 1);
23
+ }
24
+
25
+ ::slotted(moni-button-segment[checked]) {
26
+ flex-grow: 1.12;
27
+ }
28
+ `]}updated(e){super.updated(e),(e.has(`hideCheck`)||e.has(`size`)||e.has(`gap`))&&this.updateChildren(),this.updateFormValue()}handleSlotChange(){this.updateChildren(),this.updateFormValue()}getGapValue(e){if(!e)return``;let t=e.toLowerCase();return t===`xs`||t===`xsmall`?`1.125rem`:t===`s`||t===`small`?`0.75rem`:t===`m`||t===`medium`||t===`l`||t===`large`||t===`xl`||t===`xlarge`?`0.5rem`:e}updateChildren(){let e=this.segments,t=e.length;e.forEach((e,n)=>{e.hideCheck=this.hideCheck,e.size=this.size,e.position=t===1?`solo`:n===0?`first`:n===t-1?`last`:`middle`})}updateFormValue(){typeof this.internals.setFormValue==`function`&&this.internals.setFormValue(this.value)}handleClick(e){let t=e.target.closest(`moni-button-segment`);if(!t||t.disabled)return;let n=this.segments;this.multi?t.checked=!t.checked:n.forEach(e=>{e.checked=e===t&&!e.checked}),this.updateFormValue(),this.dispatchEvent(new CustomEvent(`change`,{bubbles:!0,composed:!0,detail:{value:this.value,segment:t,checked:t.checked}}))}render(){let t=this.getGapValue(this.gap),n=t?`gap: ${t}; --moni-button-segment-gap: 0px;`:``;return e`
29
+ <div class="group" style=${n} part="group" @click=${this.handleClick}>
30
+ <slot @slotchange=${this.handleSlotChange}></slot>
31
+ </div>
32
+ `}};o([r({reflect:!0})],l.prototype,`name`,void 0),o([r({type:Boolean,reflect:!0})],l.prototype,`multi`,void 0),o([r({reflect:!0})],l.prototype,`size`,void 0),o([r({type:Boolean,reflect:!0,attribute:`hide-check`})],l.prototype,`hideCheck`,void 0),o([r()],l.prototype,`gap`,void 0),o([s({flatten:!0})],l.prototype,`slottedSegments`,void 0),l=c=o([a(`moni-segmented-button`)],l);
@@ -0,0 +1,47 @@
1
+ import{d as e,i as t,m as n,o as r,r as i,s as a,t as o}from"../chunks/decorate-DxX3e27g.js";var s=class extends t{constructor(...e){super(...e),this.value=``,this.label=``,this.group=``,this.selected=!1,this.disabled=!1}static{this.styles=[i,n`
2
+ :host {
3
+ display: block;
4
+ font-family: var(--font);
5
+ }
6
+
7
+ li {
8
+ all: unset;
9
+ box-sizing: border-box;
10
+ position: relative;
11
+ display: flex;
12
+ align-items: center;
13
+ text-align: start;
14
+ justify-content: flex-start;
15
+ white-space: nowrap;
16
+ gap: 1rem;
17
+ padding: 0.5rem 1rem;
18
+ min-block-size: 2.5rem;
19
+ flex: 1;
20
+ margin: 0 !important;
21
+ cursor: pointer;
22
+ border-radius: 0.25rem;
23
+ color: var(--on-surface);
24
+ font-size: 0.875rem;
25
+ transition: background-color var(--speed2), border-radius var(--speed2);
26
+ }
27
+
28
+ li:hover {
29
+ background-color: var(--active);
30
+ }
31
+ li.selected {
32
+ background-color: var(--tertiary-container);
33
+ color: var(--on-tertiary-container);
34
+ }
35
+ li:is(.selected, :active) {
36
+ border-radius: 0.75rem;
37
+ }
38
+ :host([disabled]) li {
39
+ opacity: 0.5;
40
+ pointer-events: none;
41
+ }
42
+ `]}render(){return e`<li
43
+ part="option"
44
+ class="${this.selected?`selected`:``}"
45
+ >
46
+ <span part="label"><slot>${this.label||this.value}</slot></span>
47
+ </li>`}};o([r({reflect:!0})],s.prototype,`value`,void 0),o([r({reflect:!0})],s.prototype,`label`,void 0),o([r({reflect:!0})],s.prototype,`group`,void 0),o([r({type:Boolean,reflect:!0})],s.prototype,`selected`,void 0),o([r({type:Boolean,reflect:!0})],s.prototype,`disabled`,void 0),s=o([a(`moni-select-option`)],s);