@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
@@ -0,0 +1,254 @@
1
+ <script lang="ts">
2
+ import { fade } from 'svelte/transition';
3
+
4
+ import type { NeoRadioProps } from './neo-radio.model.js';
5
+
6
+ import IconCircleLoading from '../icons/IconCircleLoading.svelte';
7
+ import IconRadio from '../icons/IconRadio.svelte';
8
+ import NeoBaseInput from './common/NeoBaseInput.svelte';
9
+ import NeoLabel from './common/NeoLabel.svelte';
10
+ import { computeShadowElevation } from '../utils/shadow.utils.js';
11
+ import { enterDefaultTransition } from '../utils/transition.utils.js';
12
+
13
+ /* eslint-disable prefer-const -- necessary for binding checked */
14
+ let {
15
+ // Snippets
16
+ label,
17
+
18
+ // State
19
+ type = 'radio',
20
+ id = label ? `neo-radio-${crypto.randomUUID()}` : undefined,
21
+ ref = $bindable(),
22
+ group = $bindable(),
23
+ checked = $bindable(false),
24
+ valid = $bindable(),
25
+ dirty = $bindable(false),
26
+ touched = $bindable(false),
27
+ focused = $bindable(false),
28
+ disabled,
29
+ required,
30
+ loading,
31
+
32
+ // Styles
33
+ start,
34
+ glass,
35
+ rounded = true,
36
+ skeleton,
37
+
38
+ elevation = 2,
39
+
40
+ // Actions
41
+ in: inAction,
42
+ out: outAction,
43
+ transition: transitionAction,
44
+
45
+ // Other props
46
+ labelRef = $bindable(),
47
+ labelProps,
48
+ containerTag = 'div',
49
+ containerProps,
50
+ ...rest
51
+ }: NeoRadioProps = $props();
52
+ /* eslint-enable prefer-const */
53
+
54
+ let initial = $state(checked);
55
+ let validationMessage = $state<string>(ref?.validationMessage ?? '');
56
+
57
+ const boxShadow = $derived(computeShadowElevation(elevation, { glass }, { max: 2, min: -2 }));
58
+ const checkedShadow = $derived(computeShadowElevation(-Math.abs(elevation), { glass, pressed: elevation > 0 }, { max: 2, min: -2 }));
59
+ </script>
60
+
61
+ <svelte:element this={containerTag} class:neo-radio-container={true} class:neo-rounded={rounded} class:neo-flat={!elevation} {...containerProps}>
62
+ <button
63
+ class="neo-radio-button"
64
+ role="radio"
65
+ aria-checked={checked}
66
+ class:neo-checked={checked}
67
+ class:neo-rounded={rounded}
68
+ class:neo-start={start}
69
+ class:neo-glass={glass}
70
+ class:neo-disabled={disabled}
71
+ class:neo-skeleton={skeleton}
72
+ class:neo-flat={!elevation}
73
+ class:neo-inset={elevation <= 0}
74
+ style:--neo-radio-box-shadow={boxShadow}
75
+ style:--neo-radio-checked-shadow={checkedShadow}
76
+ onclick={() => ref?.click()}
77
+ >
78
+ <span class="neo-radio-input">
79
+ <NeoBaseInput
80
+ aria-invalid={valid === undefined ? undefined : !valid}
81
+ {id}
82
+ bind:ref
83
+ bind:initial
84
+ bind:group
85
+ bind:checked
86
+ bind:valid
87
+ bind:dirty
88
+ bind:touched
89
+ bind:focused
90
+ bind:validationMessage
91
+ {type}
92
+ {disabled}
93
+ {required}
94
+ {...rest}
95
+ hidden
96
+ aria-hidden
97
+ tabindex={-1}
98
+ />
99
+ </span>
100
+ {#if checked}
101
+ <IconRadio circle={rounded} scale={rounded ? 0.75 : 0.9} checked />
102
+ {:else}
103
+ <IconRadio circle={rounded} scale={rounded ? 0.75 : 0.9} />
104
+ {/if}
105
+ </button>
106
+ <NeoLabel bind:ref={labelRef} for={id} {label} {disabled} {required} {...labelProps} />
107
+ {#if loading !== undefined}
108
+ <span class="neo-radio-suffix">
109
+ {#if loading}
110
+ <span class="neo-radio-loading" out:fade={enterDefaultTransition}>
111
+ <IconCircleLoading width="1rem" height="1rem" />
112
+ </span>
113
+ {/if}
114
+ </span>
115
+ {/if}
116
+ </svelte:element>
117
+
118
+ <style>.neo-radio-container {
119
+ --neo-label-margin: 0 0 0 0.75rem;
120
+ --neo-label-padding: 0;
121
+ display: inline-flex;
122
+ align-items: center;
123
+ width: fit-content;
124
+ margin: 0;
125
+ padding: calc(0.375rem + var(--neo-radio-border-width, var(--neo-border-width, 1px))) 0.5rem 0.375rem;
126
+ border-radius: var(--neo-border-radius);
127
+ transition: box-shadow 0.3s ease, border-radius 0.3s ease;
128
+ }
129
+ .neo-radio-container.neo-rounded {
130
+ border-radius: var(--neo-border-radius-lg);
131
+ }
132
+ .neo-radio-container.neo-flat {
133
+ --neo-label-margin: 0 0 0 0.625rem;
134
+ }
135
+ .neo-radio-input {
136
+ display: none;
137
+ }
138
+ .neo-radio-button {
139
+ box-sizing: border-box;
140
+ min-width: fit-content;
141
+ margin: 0 0 0.125rem;
142
+ padding: 0;
143
+ color: inherit;
144
+ text-decoration: none;
145
+ background-color: color-mix(in srgb, transparent, currentcolor 1%);
146
+ border: var(--neo-radio-border-width, var(--neo-border-width, 1px)) var(--neo-radio-border-color, transparent) solid;
147
+ border-radius: var(--neo-border-radius-xs);
148
+ outline: none;
149
+ box-shadow: var(--neo-radio-box-shadow, var(--neo-box-shadow-raised-2));
150
+ cursor: pointer;
151
+ transition: color 0.3s ease, box-shadow 0.3s ease, border-radius 0.3s ease, border-color 0.3s ease, background-color 0.3s ease;
152
+ }
153
+ .neo-radio-button.neo-disabled, .neo-radio-button.neo-flat {
154
+ background-color: transparent;
155
+ border-color: var(--neo-input-border-color, var(--neo-border-color));
156
+ }
157
+ .neo-radio-button:focus-visible, .neo-radio-button.neo-checked {
158
+ box-shadow: var(--neo-radio-checked-shadow, var(--neo-box-shadow-pressed-2));
159
+ }
160
+ .neo-radio-button.neo-inset:focus-visible {
161
+ border-color: var(--neo-checkbox-border-color-focused, var(--neo-border-color-focused));
162
+ }
163
+ .neo-radio-button.neo-disabled {
164
+ color: var(--neo-text-color-disabled);
165
+ box-shadow: var(--neo-box-shadow-flat);
166
+ cursor: not-allowed;
167
+ opacity: var(--neo-card-opacity-disabled, var(--neo-opacity-disabled));
168
+ }
169
+ .neo-radio-button.neo-rounded {
170
+ border-radius: 50%;
171
+ }
172
+ .neo-radio-button.neo-glass {
173
+ /** Box Shadows raised */
174
+ --neo-box-shadow-raised-5: var(--neo-glass-box-shadow-raised-5);
175
+ --neo-box-shadow-raised-4: var(--neo-glass-box-shadow-raised-4);
176
+ --neo-box-shadow-raised-3: var(--neo-glass-box-shadow-raised-3);
177
+ --neo-box-shadow-raised-2: var(--neo-glass-box-shadow-raised-2);
178
+ --neo-box-shadow-raised-1: var(--neo-glass-box-shadow-raised-1);
179
+ /** Box Shadows inset */
180
+ --neo-box-shadow-inset-1: var(--neo-glass-box-shadow-inset-1);
181
+ --neo-box-shadow-inset-2: var(--neo-glass-box-shadow-inset-2);
182
+ --neo-box-shadow-inset-3: var(--neo-glass-box-shadow-inset-3);
183
+ --neo-box-shadow-inset-4: var(--neo-glass-box-shadow-inset-4);
184
+ --neo-box-shadow-inset-5: var(--neo-glass-box-shadow-inset-5);
185
+ /** Box Shadows pressed */
186
+ --neo-box-shadow-pressed-1: var(--neo-glass-box-shadow-pressed-1);
187
+ --neo-box-shadow-pressed-2: var(--neo-glass-box-shadow-pressed-2);
188
+ --neo-box-shadow-pressed-3: var(--neo-glass-box-shadow-pressed-3);
189
+ --neo-box-shadow-pressed-4: var(--neo-glass-box-shadow-pressed-4);
190
+ --neo-box-shadow-pressed-5: var(--neo-glass-box-shadow-pressed-5);
191
+ /** Box Shadows convex */
192
+ --neo-box-shadow-convex-1: var(--neo-glass-box-shadow-convex-1);
193
+ --neo-box-shadow-convex-2: var(--neo-glass-box-shadow-convex-2);
194
+ --neo-box-shadow-convex-3: var(--neo-glass-box-shadow-convex-3);
195
+ --neo-box-shadow-convex-4: var(--neo-glass-box-shadow-convex-4);
196
+ --neo-box-shadow-convex-5: var(--neo-glass-box-shadow-convex-5);
197
+ /** Skeleton color */
198
+ --neo-skeleton-color: var(--neo-glass-skeleton-color);
199
+ background-color: var(--neo-radio-bg-color, var(--neo-glass-background-color));
200
+ border-color: var(--neo-radio-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));
201
+ backdrop-filter: var(--neo-radio-glass-blur, var(--neo-blur-2) var(--neo-saturate-2));
202
+ }
203
+ @starting-style {
204
+ .neo-radio-button.neo-start {
205
+ box-shadow: var(--neo-box-shadow-flat);
206
+ }
207
+ }
208
+ .neo-radio-button.neo-skeleton {
209
+ box-shadow: var(--neo-box-shadow-flat);
210
+ pointer-events: none;
211
+ --neo-skeleton-color-start: var(--neo-skeleton-color);
212
+ --neo-skeleton-color-end: oklch(from var(--neo-skeleton-color) calc(l - var(--neo-skeleton-color-step, 0.05)) c h);
213
+ color: var(--neo-skeleton-color-start);
214
+ background-color: var(--neo-skeleton-color-start);
215
+ border-color: var(--neo-skeleton-color-start);
216
+ transition: background-color 1s ease, color 1s ease, border-color 1s ease;
217
+ animation: skeleton 3s var(--neo-transition-skeleton) infinite;
218
+ animation-delay: 1s;
219
+ }
220
+ .neo-radio-button.neo-skeleton::before, .neo-radio-button.neo-skeleton::after,
221
+ .neo-radio-button.neo-skeleton :global(> *::before),
222
+ .neo-radio-button.neo-skeleton :global(> *::after),
223
+ .neo-radio-button.neo-skeleton :global(> *) {
224
+ visibility: hidden;
225
+ pointer-events: none;
226
+ }
227
+ @keyframes skeleton {
228
+ 0% {
229
+ color: var(--neo-skeleton-color-start);
230
+ background-color: var(--neo-skeleton-color-start);
231
+ border-color: var(--neo-skeleton-color-start);
232
+ }
233
+ 40% {
234
+ color: var(--neo-skeleton-color-end);
235
+ background-color: var(--neo-skeleton-color-end);
236
+ border-color: var(--neo-skeleton-color-end);
237
+ }
238
+ 80% {
239
+ color: var(--neo-skeleton-color-start);
240
+ background-color: var(--neo-skeleton-color-start);
241
+ border-color: var(--neo-skeleton-color-start);
242
+ }
243
+ 100% {
244
+ color: var(--neo-skeleton-color-start);
245
+ background-color: var(--neo-skeleton-color-start);
246
+ border-color: var(--neo-skeleton-color-start);
247
+ }
248
+ }
249
+ .neo-radio-suffix {
250
+ width: 1rem;
251
+ height: 1rem;
252
+ margin-bottom: 0.125rem;
253
+ margin-left: 0.5rem;
254
+ }</style>
@@ -0,0 +1,19 @@
1
+ import type { NeoRadioProps } from './neo-radio.model.js';
2
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
+ $$bindings?: Bindings;
5
+ } & Exports;
6
+ (internal: unknown, props: Props & {
7
+ $$events?: Events;
8
+ $$slots?: Slots;
9
+ }): Exports & {
10
+ $set?: any;
11
+ $on?: any;
12
+ };
13
+ z_$$bindings?: Bindings;
14
+ }
15
+ declare const NeoRadio: $$__sveltets_2_IsomorphicComponent<NeoRadioProps, {
16
+ [evt: string]: CustomEvent<any>;
17
+ }, {}, {}, "group" | "ref" | "checked" | "focused" | "touched" | "dirty" | "valid" | "labelRef">;
18
+ type NeoRadio = InstanceType<typeof NeoRadio>;
19
+ export default NeoRadio;