@dvcol/neo-svelte 0.1.2 → 0.1.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.
Files changed (152) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +25 -26
  3. package/dist/buttons/NeoButton.svelte +140 -128
  4. package/dist/buttons/NeoButtonGroup.svelte +99 -108
  5. package/dist/buttons/neo-button-group.model.d.ts +18 -19
  6. package/dist/buttons/neo-button.model.d.ts +6 -10
  7. package/dist/cards/NeoCard.svelte +176 -73
  8. package/dist/cards/NeoCard.svelte.d.ts +1 -1
  9. package/dist/cards/neo-card.model.d.ts +29 -1
  10. package/dist/containers/NeoTransitionContainer.svelte +13 -2
  11. package/dist/containers/neo-transition-container.model.d.ts +9 -1
  12. package/dist/divider/NeoDivider.svelte +11 -11
  13. package/dist/icons/IconAccount.svelte +10 -2
  14. package/dist/icons/IconAdd.svelte +10 -2
  15. package/dist/icons/IconAlert.svelte +2 -2
  16. package/dist/icons/IconCalendar.svelte +23 -0
  17. package/dist/icons/IconCalendar.svelte.d.ts +26 -0
  18. package/dist/icons/IconCheckbox.svelte +87 -0
  19. package/dist/icons/IconCheckbox.svelte.d.ts +55 -0
  20. package/dist/icons/IconCircleLoading.svelte +2 -2
  21. package/dist/icons/IconClear.svelte +10 -2
  22. package/dist/icons/IconClose.svelte +2 -2
  23. package/dist/icons/IconConfirm.svelte +2 -2
  24. package/dist/icons/IconDownload.svelte +17 -0
  25. package/dist/icons/IconDownload.svelte.d.ts +26 -0
  26. package/dist/icons/IconEmpty.svelte +2 -2
  27. package/dist/icons/IconFileUpload.svelte +2 -2
  28. package/dist/icons/IconGithub.svelte +2 -2
  29. package/dist/icons/IconImage.svelte +2 -2
  30. package/dist/icons/IconMinus.svelte +2 -2
  31. package/dist/icons/IconMoon.svelte +2 -2
  32. package/dist/icons/IconPaint.svelte +19 -0
  33. package/dist/icons/{IconSunrise.svelte.d.ts → IconPaint.svelte.d.ts} +3 -3
  34. package/dist/icons/IconPencil.svelte +13 -0
  35. package/dist/icons/IconPencil.svelte.d.ts +26 -0
  36. package/dist/icons/IconRadio.svelte +14 -0
  37. package/dist/icons/IconRadio.svelte.d.ts +22 -0
  38. package/dist/icons/IconSave.svelte +1 -1
  39. package/dist/icons/IconSave.svelte.d.ts +3 -3
  40. package/dist/icons/IconSaveOff.svelte +1 -1
  41. package/dist/icons/IconSaveOff.svelte.d.ts +3 -3
  42. package/dist/icons/IconSearch.svelte +2 -2
  43. package/dist/icons/IconSun.svelte +3 -3
  44. package/dist/icons/{IconSunrise.svelte → IconSunFull.svelte} +5 -4
  45. package/dist/icons/IconSunFull.svelte.d.ts +26 -0
  46. package/dist/icons/IconVideo.svelte +2 -2
  47. package/dist/icons/IconWatch.svelte +2 -2
  48. package/dist/icons/IconWatchOff.svelte +2 -2
  49. package/dist/inputs/NeoCheckbox.svelte +316 -0
  50. package/dist/inputs/NeoCheckbox.svelte.d.ts +19 -0
  51. package/dist/inputs/NeoColorPicker.svelte +140 -0
  52. package/dist/inputs/NeoColorPicker.svelte.d.ts +19 -0
  53. package/dist/inputs/NeoDateTime.svelte +96 -0
  54. package/dist/inputs/NeoDateTime.svelte.d.ts +19 -0
  55. package/dist/inputs/NeoFilePicker.svelte +528 -0
  56. package/dist/inputs/NeoFilePicker.svelte.d.ts +19 -0
  57. package/dist/inputs/NeoFilePickerCard.svelte +314 -0
  58. package/dist/inputs/NeoFilePickerCard.svelte.d.ts +19 -0
  59. package/dist/inputs/NeoNumberStep.svelte +174 -0
  60. package/dist/inputs/NeoNumberStep.svelte.d.ts +19 -0
  61. package/dist/inputs/NeoPassword.svelte +86 -17
  62. package/dist/inputs/NeoPassword.svelte.d.ts +19 -16
  63. package/dist/inputs/NeoPin.svelte +589 -0
  64. package/dist/inputs/NeoPin.svelte.d.ts +19 -0
  65. package/dist/inputs/NeoRadio.svelte +254 -0
  66. package/dist/inputs/NeoRadio.svelte.d.ts +19 -0
  67. package/dist/inputs/NeoRange.svelte +518 -0
  68. package/dist/inputs/NeoRange.svelte.d.ts +18 -0
  69. package/dist/inputs/NeoSwitch.svelte +373 -0
  70. package/dist/inputs/NeoSwitch.svelte.d.ts +19 -0
  71. package/dist/inputs/NeoTextarea.svelte +335 -301
  72. package/dist/inputs/NeoTextarea.svelte.d.ts +5 -2
  73. package/dist/inputs/common/NeoAffix.svelte +166 -0
  74. package/dist/inputs/common/NeoAffix.svelte.d.ts +19 -0
  75. package/dist/inputs/common/NeoBaseInput.svelte +338 -0
  76. package/dist/inputs/common/NeoBaseInput.svelte.d.ts +30 -0
  77. package/dist/inputs/common/NeoInput.svelte +684 -0
  78. package/dist/inputs/{NeoInput.svelte.d.ts → common/NeoInput.svelte.d.ts} +2 -10
  79. package/dist/inputs/common/NeoInputValidation.svelte +45 -0
  80. package/dist/inputs/common/NeoInputValidation.svelte.d.ts +22 -0
  81. package/dist/inputs/common/NeoLabel.svelte +93 -0
  82. package/dist/inputs/common/NeoLabel.svelte.d.ts +19 -0
  83. package/dist/inputs/{NeoValidation.svelte → common/NeoValidation.svelte} +9 -16
  84. package/dist/inputs/common/NeoValidation.svelte.d.ts +22 -0
  85. package/dist/inputs/common/neo-affix.model.d.ts +32 -0
  86. package/dist/inputs/common/neo-input-validation.model.d.ts +20 -0
  87. package/dist/inputs/common/neo-input-validation.model.js +1 -0
  88. package/dist/inputs/{neo-input.model.d.ts → common/neo-input.model.d.ts} +148 -68
  89. package/dist/inputs/common/neo-label.model.d.ts +36 -0
  90. package/dist/inputs/common/neo-label.model.js +1 -0
  91. package/dist/inputs/common/neo-validation.model.d.ts +70 -0
  92. package/dist/inputs/common/neo-validation.model.js +1 -0
  93. package/dist/inputs/index.d.ts +2 -2
  94. package/dist/inputs/index.js +1 -1
  95. package/dist/inputs/neo-checkbox.model.d.ts +9 -0
  96. package/dist/inputs/neo-checkbox.model.js +1 -0
  97. package/dist/inputs/neo-color-picker.model.d.ts +17 -0
  98. package/dist/inputs/neo-color-picker.model.js +1 -0
  99. package/dist/inputs/neo-date-time.model.d.ts +8 -0
  100. package/dist/inputs/neo-date-time.model.js +1 -0
  101. package/dist/inputs/neo-file-picker.model.d.ts +138 -0
  102. package/dist/inputs/neo-file-picker.model.js +1 -0
  103. package/dist/inputs/neo-number-step.model.d.ts +24 -0
  104. package/dist/inputs/neo-number-step.model.js +1 -0
  105. package/dist/inputs/neo-password.model.d.ts +13 -0
  106. package/dist/inputs/neo-password.model.js +1 -0
  107. package/dist/inputs/neo-pin.model.d.ts +47 -0
  108. package/dist/inputs/neo-pin.model.js +1 -0
  109. package/dist/inputs/neo-radio.model.d.ts +3 -0
  110. package/dist/inputs/neo-radio.model.js +1 -0
  111. package/dist/inputs/neo-switch.model.d.ts +9 -0
  112. package/dist/inputs/neo-switch.model.js +1 -0
  113. package/dist/nav/NeoTab.svelte +29 -25
  114. package/dist/nav/NeoTabPanel.svelte +1 -1
  115. package/dist/nav/NeoTabs.svelte +51 -44
  116. package/dist/nav/NeoTabsCard.svelte +8 -10
  117. package/dist/nav/neo-tabs-context.svelte.d.ts +2 -11
  118. package/dist/nav/neo-tabs-context.svelte.js +1 -41
  119. package/dist/nav/neo-tabs.model.d.ts +6 -0
  120. package/dist/providers/NeoThemeProvider.svelte +417 -305
  121. package/dist/providers/NeoThemeSelector.svelte +10 -10
  122. package/dist/providers/neo-theme-provider-context.svelte.js +16 -15
  123. package/dist/providers/neo-theme-provider.model.d.ts +6 -6
  124. package/dist/providers/neo-theme-provider.model.js +17 -12
  125. package/dist/providers/neo-theme-selector.model.d.ts +2 -2
  126. package/dist/skeletons/NeoSkeletonMedia.svelte +4 -4
  127. package/dist/skeletons/NeoSkeletonText.svelte +12 -12
  128. package/dist/styles/common/colors.scss +85 -97
  129. package/dist/styles/common/filters.scss +17 -0
  130. package/dist/styles/common/shadows.scss +531 -293
  131. package/dist/styles/common/spacing.scss +7 -3
  132. package/dist/styles/common/typography.scss +1 -1
  133. package/dist/styles/common/utils.scss +1 -1
  134. package/dist/styles/common/z-index.scss +1 -1
  135. package/dist/styles/mixin.scss +80 -27
  136. package/dist/styles/reset.scss +8 -1
  137. package/dist/styles/theme.scss +39 -16
  138. package/dist/utils/html-element.utils.d.ts +3 -0
  139. package/dist/utils/regex.utils.d.ts +3 -0
  140. package/dist/utils/regex.utils.js +3 -0
  141. package/dist/utils/shadow.utils.d.ts +30 -3
  142. package/dist/utils/shadow.utils.js +41 -14
  143. package/dist/utils/transition.utils.d.ts +4 -0
  144. package/dist/utils/transition.utils.js +10 -1
  145. package/dist/utils/utils.svelte.d.ts +6 -0
  146. package/dist/utils/utils.svelte.js +13 -0
  147. package/package.json +13 -12
  148. package/dist/inputs/NeoInput.svelte +0 -750
  149. package/dist/inputs/NeoValidation.svelte.d.ts +0 -22
  150. package/dist/inputs/neo-validation.model.d.ts +0 -40
  151. /package/dist/inputs/{neo-validation.model.js → common/neo-affix.model.js} +0 -0
  152. /package/dist/inputs/{neo-input.model.js → common/neo-input.model.js} +0 -0
@@ -2,6 +2,7 @@
2
2
  import type { NeoButtonGroupProps } from './neo-button-group.model.js';
3
3
 
4
4
  import { toAction, toActionProps, toTransition, toTransitionProps } from '../utils/action.utils.js';
5
+ import { computeGlassFilter, computeShadowElevation, getDefaultElevation } from '../utils/shadow.utils.js';
5
6
 
6
7
  /* eslint-disable prefer-const -- necessary for binding checked */
7
8
  let {
@@ -14,13 +15,12 @@
14
15
  skeleton,
15
16
 
16
17
  // Styles
18
+ pressed,
19
+ convex,
20
+ elevation = getDefaultElevation(pressed),
17
21
  borderless,
18
22
  start,
19
- text,
20
- flat,
21
23
  glass,
22
- inset,
23
- shallow,
24
24
  rounded,
25
25
  pulse,
26
26
  coalesce,
@@ -45,6 +45,9 @@
45
45
  }: NeoButtonGroupProps = $props();
46
46
  /* eslint-enable prefer-const */
47
47
 
48
+ const filter = $derived(computeGlassFilter(elevation, glass));
49
+ const boxShadow = $derived(computeShadowElevation(elevation, { glass, pressed, convex }));
50
+
48
51
  const inFn = $derived(toTransition(inAction ?? transitionAction));
49
52
  const inProps = $derived(toTransitionProps(inAction ?? transitionAction));
50
53
  const outFn = $derived(toTransition(outAction ?? transitionAction));
@@ -58,19 +61,20 @@
58
61
  this={tag}
59
62
  bind:this={ref}
60
63
  class:neo-button-group={true}
61
- class:borderless
62
- class:start
63
- class:text
64
- class:flat
65
- class:glass
66
- class:shallow
67
- class:inset
68
- class:rounded
69
- class:pulse
70
- class:coalesce
71
- class:skeleton
72
- class:vertical
73
- class:nowrap
64
+ class:neo-borderless={borderless}
65
+ class:neo-start={start}
66
+ class:neo-flat={!elevation}
67
+ class:neo-convex={convex}
68
+ class:neo-inset={elevation < 0}
69
+ class:neo-glass={glass}
70
+ class:neo-rounded={rounded}
71
+ class:neo-pulse={pulse}
72
+ class:neo-coalesce={coalesce}
73
+ class:neo-skeleton={skeleton}
74
+ class:neo-vertical={vertical}
75
+ class:neo-nowrap={nowrap}
76
+ style:--neo-btn-group-box-shadow={boxShadow}
77
+ style:--neo-btn-group-glass-blur={filter}
74
78
  style:justify-content={justify}
75
79
  style:align-items={align}
76
80
  style:flex
@@ -84,18 +88,20 @@
84
88
  skeleton,
85
89
 
86
90
  // styles
87
- start,
88
- text,
89
- flat,
90
- glass,
91
+ elevation,
92
+ pressed,
93
+ convex,
94
+ borderless,
91
95
  rounded,
96
+ glass,
92
97
  pulse,
93
98
  coalesce,
94
99
  vertical,
100
+ start,
95
101
  })}
96
102
  </svelte:element>
97
103
 
98
- <style>.neo-button-group.pulse:not(.skeleton)::after, .neo-button-group.pulse:not(.skeleton)::before, .neo-button-group.coalesce:not(.skeleton)::after, .neo-button-group.coalesce:not(.skeleton)::before {
104
+ <style>.neo-button-group.neo-pulse::after, .neo-button-group.neo-pulse::before, .neo-button-group.neo-coalesce::after, .neo-button-group.neo-coalesce::before {
99
105
  position: absolute;
100
106
  top: 0;
101
107
  left: 0;
@@ -117,90 +123,108 @@
117
123
  justify-content: center;
118
124
  box-sizing: border-box;
119
125
  width: fit-content;
120
- margin: var(--neo-shadow-margin, 0.6rem);
126
+ margin: var(--neo-shadow-margin, 0.625rem);
121
127
  padding: 0.25rem;
122
128
  background-color: var(--neo-btn-bg-color, transparent);
123
129
  border: var(--neo-border-width, 1px) var(--neo-btn-border-color, transparent) solid;
124
130
  border-radius: calc(var(--neo-btn-border-radius, var(--neo-border-radius)) + 0.25rem);
131
+ box-shadow: var(--neo-btn-group-box-shadow, var(--neo-box-shadow-flat));
125
132
  transition: color 0.3s ease, background-color 0.3s ease, border-radius 0.3s ease, box-shadow 0.3s ease-out;
126
133
  }
127
- .neo-button-group.nowrap {
134
+ .neo-button-group.neo-nowrap {
128
135
  flex-wrap: nowrap;
129
136
  justify-content: flex-start;
130
137
  overflow: auto;
131
138
  white-space: nowrap;
132
139
  }
133
- .neo-button-group.flat {
134
- border-color: var(--neo-btn-border-color, var(--neo-border-color));
135
- }
136
- .neo-button-group.borderless, .neo-button-group.text {
140
+ .neo-button-group.neo-borderless {
137
141
  border-color: transparent !important;
138
142
  }
139
- .neo-button-group:not(.text, .flat, .glass) {
140
- box-shadow: var(--neo-box-shadow-raised-3);
143
+ .neo-button-group.neo-convex:not(.neo-inset), .neo-button-group.neo-inset:not(.neo-borderless) {
144
+ padding: 0.375rem;
145
+ }
146
+ .neo-button-group.neo-flat:not(.neo-borderless) {
147
+ border-color: var(--neo-btn-border-color, var(--neo-border-color));
141
148
  }
142
149
  @starting-style {
143
- .neo-button-group.start {
150
+ .neo-button-group.neo-start {
144
151
  box-shadow: var(--neo-box-shadow-flat);
145
152
  }
146
- .neo-button-group.start:not(.text, .glass, .borderless) {
153
+ .neo-button-group.neo-start:not(.neo-glass, .neo-borderless) {
147
154
  border-color: var(--neo-btn-border-color, var(--neo-border-color));
148
155
  }
149
156
  }
150
- .neo-button-group.glass {
157
+ .neo-button-group.neo-glass {
158
+ /** Box Shadows raised */
159
+ --neo-box-shadow-raised-5: var(--neo-glass-box-shadow-raised-5);
160
+ --neo-box-shadow-raised-4: var(--neo-glass-box-shadow-raised-4);
161
+ --neo-box-shadow-raised-3: var(--neo-glass-box-shadow-raised-3);
162
+ --neo-box-shadow-raised-2: var(--neo-glass-box-shadow-raised-2);
163
+ --neo-box-shadow-raised-1: var(--neo-glass-box-shadow-raised-1);
164
+ /** Box Shadows inset */
165
+ --neo-box-shadow-inset-1: var(--neo-glass-box-shadow-inset-1);
166
+ --neo-box-shadow-inset-2: var(--neo-glass-box-shadow-inset-2);
167
+ --neo-box-shadow-inset-3: var(--neo-glass-box-shadow-inset-3);
168
+ --neo-box-shadow-inset-4: var(--neo-glass-box-shadow-inset-4);
169
+ --neo-box-shadow-inset-5: var(--neo-glass-box-shadow-inset-5);
170
+ /** Box Shadows pressed */
171
+ --neo-box-shadow-pressed-1: var(--neo-glass-box-shadow-pressed-1);
172
+ --neo-box-shadow-pressed-2: var(--neo-glass-box-shadow-pressed-2);
173
+ --neo-box-shadow-pressed-3: var(--neo-glass-box-shadow-pressed-3);
174
+ --neo-box-shadow-pressed-4: var(--neo-glass-box-shadow-pressed-4);
175
+ --neo-box-shadow-pressed-5: var(--neo-glass-box-shadow-pressed-5);
176
+ /** Box Shadows convex */
177
+ --neo-box-shadow-convex-1: var(--neo-glass-box-shadow-convex-1);
178
+ --neo-box-shadow-convex-2: var(--neo-glass-box-shadow-convex-2);
179
+ --neo-box-shadow-convex-3: var(--neo-glass-box-shadow-convex-3);
180
+ --neo-box-shadow-convex-4: var(--neo-glass-box-shadow-convex-4);
181
+ --neo-box-shadow-convex-5: var(--neo-glass-box-shadow-convex-5);
182
+ /** Skeleton color */
183
+ --neo-skeleton-color: var(--neo-glass-skeleton-color);
151
184
  background-color: var(--neo-btn-bg-color, var(--neo-glass-background-color));
152
185
  border-color: var(--neo-btn-border-color, var(--neo-glass-top-border-color) var(--neo-glass-right-border-color) var(--neo-glass-bottom-border-color) var(--neo-glass-left-border-color));
153
- backdrop-filter: var(--neo-blur-4) var(--neo-saturate-2);
154
- }
155
- .neo-button-group.glass:not(.text, .flat) {
156
- box-shadow: var(--neo-glass-box-shadow-raised-3);
186
+ backdrop-filter: var(--neo-btn-group-glass-blur, var(--neo-blur-3) var(--neo-saturate-2));
157
187
  }
158
- .neo-button-group.glass :global(.neo-button) {
188
+ .neo-button-group.neo-glass :global(.neo-button) {
159
189
  background-color: transparent;
160
190
  backdrop-filter: none;
161
191
  }
162
- .neo-button-group.glass :global(.neo-button:not(:active, .pressed)) {
163
- box-shadow: var(--neo-glass-box-shadow-flat);
192
+ .neo-button-group.neo-glass.neo-flat {
193
+ border-color: var(--neo-btn-border-color, var(--neo-glass-border-color));
164
194
  }
165
195
  .neo-button-group :global(.neo-button) {
166
196
  margin: 0;
167
197
  border-color: transparent !important;
168
198
  }
169
- .neo-button-group :global(.neo-button:disabled:not(.skeleton)),
170
- .neo-button-group :global(.neo-button[disabled]:not([disabled="false"], .skeleton)) {
171
- border-color: transparent !important;
172
- }
173
- .neo-button-group :global(.neo-button:disabled:not(.skeleton, .pressed)),
174
- .neo-button-group :global(.neo-button[disabled]:not([disabled="false"], .skeleton, .pressed)) {
199
+ .neo-button-group :global(.neo-button:disabled:not(.neo-pressed)),
200
+ .neo-button-group :global(.neo-button[disabled]:not([disabled="false"], .neo-pressed)) {
175
201
  box-shadow: var(--neo-box-shadow-flat) !important;
176
202
  }
177
- .neo-button-group :global(.neo-button:not(:active, .pressed)) {
203
+ .neo-button-group :global(.neo-button:not(:active:not(.neo-loading), .neo-pressed)) {
178
204
  box-shadow: var(--neo-box-shadow-flat);
179
205
  }
180
- .neo-button-group :global(.neo-button.loading:active:not(.pressed)),
181
- .neo-button-group :global(.neo-button:not(.flat, .text, :active, .pressed):hover) {
182
- box-shadow: var(--neo-box-shadow-inset-2);
206
+ .neo-button-group :global(.neo-button:not(.neo-flat, :active:not(.neo-loading), .neo-pressed):hover) {
207
+ box-shadow: var(--neo-box-shadow-inset-1);
183
208
  }
184
- .neo-button-group :global(.neo-button.pulse::after),
185
- .neo-button-group :global(.neo-button.pulse::before),
186
- .neo-button-group :global(.neo-button.coalesce::after),
187
- .neo-button-group :global(.neo-button.coalesce::before) {
188
- animation: none;
209
+ .neo-button-group :global(.neo-button.neo-pressed),
210
+ .neo-button-group :global(.neo-button:active:not(.neo-loading)) {
211
+ --neo-box-shadow-pressed-2: var(--neo-box-shadow-inset-3);
212
+ --neo-glass-box-shadow-pressed-2: var(--neo-glass-box-shadow-inset-3);
189
213
  }
190
- .neo-button-group.pulse:not(.skeleton) {
214
+ .neo-button-group.neo-pulse {
191
215
  position: relative;
192
216
  }
193
- .neo-button-group.pulse:not(.skeleton)::after, .neo-button-group.pulse:not(.skeleton)::before {
217
+ .neo-button-group.neo-pulse::after, .neo-button-group.neo-pulse::before {
194
218
  box-shadow: var(--neo-pulse-box-shadow, var(--neo-box-shadow-raised-3));
195
219
  will-change: transform, opacity;
196
220
  }
197
- .neo-button-group.pulse:not(.skeleton)::before {
221
+ .neo-button-group.neo-pulse::before {
198
222
  animation: pulse var(--neo-pulse-duration, 6s) linear var(--neo-pulse-delay, 1s) infinite;
199
223
  }
200
- .neo-button-group.pulse:not(.skeleton)::after {
224
+ .neo-button-group.neo-pulse::after {
201
225
  animation: pulse var(--neo-pulse-duration, 6s) linear calc(var(--neo-pulse-delay, 1s) + var(--neo-pulse-interval, 3s)) infinite;
202
226
  }
203
- .neo-button-group.pulse:not(.skeleton).pressed::after, .neo-button-group.pulse:not(.skeleton).pressed::before, .neo-button-group.pulse:not(.skeleton):focus-visible::after, .neo-button-group.pulse:not(.skeleton):focus-visible::before, .neo-button-group.pulse:not(.skeleton):hover::after, .neo-button-group.pulse:not(.skeleton):hover::before, .neo-button-group.pulse:not(.skeleton):active::after, .neo-button-group.pulse:not(.skeleton):active::before {
227
+ .neo-button-group.neo-pulse.pressed::after, .neo-button-group.neo-pulse.pressed::before, .neo-button-group.neo-pulse:focus-visible::after, .neo-button-group.neo-pulse:focus-visible::before, .neo-button-group.neo-pulse:hover::after, .neo-button-group.neo-pulse:hover::before, .neo-button-group.neo-pulse:active::after, .neo-button-group.neo-pulse:active::before {
204
228
  box-shadow: var(--neo-pulse-box-shadow-reverse, var(--neo-box-shadow-raised-3));
205
229
  animation-name: coalesce;
206
230
  animation-timing-function: ease-out;
@@ -231,20 +255,20 @@
231
255
  opacity: 0;
232
256
  }
233
257
  }
234
- .neo-button-group.coalesce:not(.skeleton) {
258
+ .neo-button-group.neo-coalesce {
235
259
  position: relative;
236
260
  }
237
- .neo-button-group.coalesce:not(.skeleton)::after, .neo-button-group.coalesce:not(.skeleton)::before {
261
+ .neo-button-group.neo-coalesce::after, .neo-button-group.neo-coalesce::before {
238
262
  box-shadow: var(--neo-coalesce-box-shadow, var(--neo-box-shadow-raised-3));
239
263
  will-change: transform, opacity;
240
264
  }
241
- .neo-button-group.coalesce:not(.skeleton)::before {
265
+ .neo-button-group.neo-coalesce::before {
242
266
  animation: coalesce var(--neo-coalesce-duration, 6s) ease-out var(--neo-coalesce-delay, 1s) infinite;
243
267
  }
244
- .neo-button-group.coalesce:not(.skeleton)::after {
268
+ .neo-button-group.neo-coalesce::after {
245
269
  animation: coalesce var(--neo-coalesce-duration, 6s) ease-out calc(var(--neo-coalesce-delay, 1s) + var(--neo-coalesce-interval, 3s)) infinite;
246
270
  }
247
- .neo-button-group.coalesce:not(.skeleton).pressed::after, .neo-button-group.coalesce:not(.skeleton).pressed::before, .neo-button-group.coalesce:not(.skeleton):focus-visible::after, .neo-button-group.coalesce:not(.skeleton):focus-visible::before, .neo-button-group.coalesce:not(.skeleton):hover::after, .neo-button-group.coalesce:not(.skeleton):hover::before, .neo-button-group.coalesce:not(.skeleton):active::after, .neo-button-group.coalesce:not(.skeleton):active::before {
271
+ .neo-button-group.neo-coalesce.pressed::after, .neo-button-group.neo-coalesce.pressed::before, .neo-button-group.neo-coalesce:focus-visible::after, .neo-button-group.neo-coalesce:focus-visible::before, .neo-button-group.neo-coalesce:hover::after, .neo-button-group.neo-coalesce:hover::before, .neo-button-group.neo-coalesce:active::after, .neo-button-group.neo-coalesce:active::before {
248
272
  box-shadow: var(--neo-coalesce-box-shadow-reverse, var(--neo-box-shadow-raised-3));
249
273
  animation-name: pulse;
250
274
  animation-timing-function: linear;
@@ -275,44 +299,14 @@
275
299
  opacity: 0;
276
300
  }
277
301
  }
278
- .neo-button-group.shallow:not(.inset, .skeleton) {
279
- --neo-coalesce-box-shadow: var(--neo-box-shadow-raised-2);
280
- --neo-pulse-box-shadow: var(--neo-box-shadow-raised-2);
281
- --neo-coalesce-box-shadow-reverse: var(--neo-box-shadow-inset-1);
282
- --neo-pulse-box-shadow-reverse: var(--neo-box-shadow-inset-1);
283
- }
284
- .neo-button-group.shallow:not(.inset, .skeleton):not(.text, .flat, .glass) {
285
- box-shadow: var(--neo-box-shadow-raised-2);
286
- }
287
- .neo-button-group.shallow:not(.inset, .skeleton).glass {
288
- box-shadow: var(--neo-glass-box-shadow-raised-2);
289
- }
290
- .neo-button-group.shallow:not(.inset, .skeleton) :global(.neo-button.loading:active:not(.pressed)),
291
- .neo-button-group.shallow:not(.inset, .skeleton) :global(.neo-button:not(.flat, .text, :active, .pressed):hover) {
292
- box-shadow: var(--neo-box-shadow-inset-1);
293
- }
294
- .neo-button-group.shallow:not(.inset, .skeleton) :global(.neo-button:active),
295
- .neo-button-group.shallow:not(.inset, .skeleton) :global(.neo-button.pressed) {
296
- box-shadow: var(--neo-box-shadow-inset-2);
297
- }
298
- .neo-button-group.inset:not(.skeleton) {
299
- box-shadow: var(--neo-box-shadow-inset-3);
300
- }
301
- .neo-button-group.inset:not(.skeleton).shallow {
302
- box-shadow: var(--neo-box-shadow-inset-2);
303
- }
304
- .neo-button-group.inset:not(.skeleton).shallow :global(.neo-button:active),
305
- .neo-button-group.inset:not(.skeleton).shallow :global(.neo-button.pressed) {
306
- box-shadow: var(--neo-box-shadow-inset-2);
307
- }
308
- .neo-button-group.rounded {
302
+ .neo-button-group.neo-rounded {
309
303
  padding: 0.25rem 0.3125rem;
310
304
  border-radius: var(--neo-btn-border-radius-rounded, var(--neo-border-radius-lg));
311
305
  }
312
- .neo-button-group.rounded :global(.neo-button) {
306
+ .neo-button-group.neo-rounded :global(.neo-button) {
313
307
  border-radius: var(--neo-btn-border-radius-rounded, var(--neo-border-radius-lg));
314
308
  }
315
- .neo-button-group.skeleton {
309
+ .neo-button-group.neo-skeleton {
316
310
  box-shadow: var(--neo-box-shadow-flat);
317
311
  pointer-events: none;
318
312
  --neo-skeleton-color-start: var(--neo-skeleton-color);
@@ -324,10 +318,10 @@
324
318
  animation: skeleton 3s var(--neo-transition-skeleton) infinite;
325
319
  animation-delay: 1s;
326
320
  }
327
- .neo-button-group.skeleton::before, .neo-button-group.skeleton::after,
328
- .neo-button-group.skeleton :global(> *::before),
329
- .neo-button-group.skeleton :global(> *::after),
330
- .neo-button-group.skeleton :global(> *) {
321
+ .neo-button-group.neo-skeleton::before, .neo-button-group.neo-skeleton::after,
322
+ .neo-button-group.neo-skeleton :global(> *::before),
323
+ .neo-button-group.neo-skeleton :global(> *::after),
324
+ .neo-button-group.neo-skeleton :global(> *) {
331
325
  visibility: hidden;
332
326
  pointer-events: none;
333
327
  }
@@ -353,17 +347,14 @@
353
347
  border-color: var(--neo-skeleton-color-start);
354
348
  }
355
349
  }
356
- .neo-button-group.skeleton.glass {
357
- --neo-skeleton-color: var(--neo-glass-skeleton-color);
358
- }
359
- .neo-button-group.vertical {
350
+ .neo-button-group.neo-vertical {
360
351
  flex-direction: column;
361
352
  --neo-btn-grp-scale-x: 1.75;
362
353
  --neo-btn-grp-scale-y: 1.5;
363
354
  }
364
- .neo-button-group.vertical :global(.neo-button) {
355
+ .neo-button-group.neo-vertical :global(.neo-button) {
365
356
  width: 100%;
366
357
  }
367
- .neo-button-group.vertical.rounded {
358
+ .neo-button-group.neo-vertical.neo-rounded {
368
359
  padding: 0.5rem;
369
360
  }</style>
@@ -1,6 +1,8 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { HTMLActionProps } from '../utils/action.utils.js';
3
3
  import type { HTMLFlexProps, HTMLNeoBaseElement, HTMLRefProps } from '../utils/html-element.utils.js';
4
+ import type { ShadowElevation } from '../utils/shadow.utils.js';
5
+ export type NeoButtonGroupElevation = ShadowElevation;
4
6
  export type NeoButtonGroupContext = {
5
7
  /**
6
8
  * The HTML tag to use for the button group.
@@ -12,38 +14,30 @@ export type NeoButtonGroupContext = {
12
14
  */
13
15
  skeleton?: boolean;
14
16
  /**
15
- * If `true`, the group will never display a border.
16
- */
17
- borderless?: boolean;
18
- /**
19
- * If true, the button group will start as flat on first render.
20
- * @see [@starting-style](https://developer.mozilla.org/en-US/docs/Web/CSS/@starting-style) for browser support
17
+ * Group elevation.
18
+ * @default 3
21
19
  */
22
- start?: boolean;
20
+ elevation?: NeoButtonGroupElevation;
23
21
  /**
24
- * If true, only the button group content will be displayed.
22
+ * If true, negative elevation (< 0) will be displayed as pressed instead of inset.
25
23
  */
26
- text?: boolean;
24
+ pressed?: boolean;
27
25
  /**
28
- * If true, the button group will be displayed with no elevation.
26
+ * If true, positive elevation (> 0) will be displayed as convex instead of raised.
29
27
  */
30
- flat?: boolean;
28
+ convex?: boolean;
31
29
  /**
32
- * If true, the buttongroup will be displayed with a glass effect.
30
+ * If `true`, the group will never display a border.
33
31
  */
34
- glass?: boolean;
32
+ borderless?: boolean;
35
33
  /**
36
34
  * If true, the button group will have a rounded border.
37
35
  */
38
36
  rounded?: boolean;
39
37
  /**
40
- * If true, the button will not depress past the initial plane.
41
- */
42
- shallow?: boolean;
43
- /**
44
- * If true, the button group will be inset and the buttons flat.
38
+ * If true, the buttongroup will be displayed with a glass effect.
45
39
  */
46
- inset?: boolean;
40
+ glass?: boolean;
47
41
  /**
48
42
  * If true, the button group will be surrounded by expanding waves.
49
43
  * The waves will reverse direction on hover or active states.
@@ -58,6 +52,11 @@ export type NeoButtonGroupContext = {
58
52
  * If true, the button group will be stacked vertically.
59
53
  */
60
54
  vertical?: boolean;
55
+ /**
56
+ * If true, the button group will start as flat on first render.
57
+ * @see [@starting-style](https://developer.mozilla.org/en-US/docs/Web/CSS/@starting-style) for browser support
58
+ */
59
+ start?: boolean;
61
60
  };
62
61
  export type NeoButtonGroupProps = {
63
62
  /**
@@ -1,7 +1,7 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { HTMLAnchorAttributes, HTMLButtonAttributes } from 'svelte/elements';
3
3
  import type { HTMLActionProps } from '../utils/action.utils.js';
4
- import type { HTMLFlexProps, HTMLRefProps } from '../utils/html-element.utils.js';
4
+ import type { HTMLFlexProps, HTMLRefProps, SvelteEvent } from '../utils/html-element.utils.js';
5
5
  export type NeoButtonProps = {
6
6
  /**
7
7
  * Snippet to display as the button content.
@@ -43,10 +43,6 @@ export type NeoButtonProps = {
43
43
  * @bindable
44
44
  */
45
45
  checked?: boolean;
46
- /**
47
- * If `true`, the button will never display a border.
48
- */
49
- borderless?: boolean;
50
46
  /**
51
47
  * If true, the button will start as flat on first render.
52
48
  * @see [@starting-style](https://developer.mozilla.org/en-US/docs/Web/CSS/@starting-style) for browser support
@@ -69,9 +65,9 @@ export type NeoButtonProps = {
69
65
  */
70
66
  rounded?: boolean;
71
67
  /**
72
- * If true, the button will not depress past the initial plane.
68
+ * If true, the button will be inset instead of pressed when active.
73
69
  */
74
- shallow?: boolean;
70
+ inset?: boolean;
75
71
  /**
76
72
  * If true, the flex direction of the button will be reversed.
77
73
  */
@@ -96,15 +92,15 @@ export type NeoButtonProps = {
96
92
  * @param e
97
93
  * @param checked
98
94
  */
99
- onclick?: (e: MouseEvent, checked?: boolean) => unknown;
95
+ onclick?: (e: SvelteEvent<MouseEvent>, checked?: boolean) => unknown;
100
96
  /**
101
97
  * Callback function to be called when a key is pressed.
102
98
  * @param e
103
99
  */
104
- onkeydown?: (e: KeyboardEvent) => unknown;
100
+ onkeydown?: (e: SvelteEvent<KeyboardEvent>) => unknown;
105
101
  /**
106
102
  * Callback function to be called when a key is released.
107
103
  * @param e
108
104
  */
109
- onkeyup?: (e: KeyboardEvent) => unknown;
105
+ onkeyup?: (e: SvelteEvent<KeyboardEvent>) => unknown;
110
106
  } & Partial<Omit<HTMLButtonAttributes, 'onclick' | 'onkeydown' | 'onkeyup'>> & Partial<Omit<HTMLAnchorAttributes, 'onclick' | 'onkeydown' | 'onkeyup'>> & HTMLFlexProps & HTMLActionProps & HTMLRefProps;