@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
@@ -8,7 +8,7 @@
8
8
  import IconSave from '../icons/IconSave.svelte';
9
9
  import IconSaveOff from '../icons/IconSaveOff.svelte';
10
10
  import IconSun from '../icons/IconSun.svelte';
11
- import IconSunrise from '../icons/IconSunrise.svelte';
11
+ import IconSunFull from '../icons/IconSunFull.svelte';
12
12
  import { useNeoThemeContext } from './neo-theme-provider-context.svelte.js';
13
13
  import { NeoSource, NeoTheme } from './neo-theme-provider.model.js';
14
14
 
@@ -17,7 +17,7 @@
17
17
  children,
18
18
 
19
19
  // state
20
- remember: showRemember = true,
20
+ remember: showRemember,
21
21
  source: showSource = true,
22
22
  theme: showTheme = true,
23
23
  reset: showReset,
@@ -56,8 +56,8 @@
56
56
  {#if showSource}
57
57
  <NeoButton aria-label="Cycle light source origin" title="Cycle light source origin" checked onclick={onCycleSource} {...sourceProps}>
58
58
  {#snippet icon()}
59
- <span class="source-icon" style:--neo-source-rotate={`${angle}deg`}>
60
- <IconSunrise />
59
+ <span class="neo-source-icon" style:--neo-source-rotate="{angle}deg">
60
+ <IconSunFull />
61
61
  </span>
62
62
  {/snippet}
63
63
  <span>Source</span>
@@ -65,8 +65,8 @@
65
65
  {/if}
66
66
  {#if showTheme}
67
67
  <NeoButton
68
- aria-label={`Toggle ${dark ? 'light' : 'dark'} theme`}
69
- title={`Toggle ${dark ? 'light' : 'dark'} theme`}
68
+ aria-label="Toggle {dark ? 'light' : 'dark'} theme"
69
+ title="Toggle {dark ? 'light' : 'dark'} theme"
70
70
  toggle
71
71
  checked={dark}
72
72
  onclick={onTheme}
@@ -84,8 +84,8 @@
84
84
  {/if}
85
85
  {#if showReset}
86
86
  <NeoButton
87
- aria-label={`Toggle ${reset ? 'off' : 'on'} style reset`}
88
- title={`Toggle ${reset ? 'off' : 'on'} style reset`}
87
+ aria-label="Toggle {reset ? 'off' : 'on'} style reset"
88
+ title="Toggle {reset ? 'off' : 'on'} style reset"
89
89
  toggle
90
90
  checked={reset}
91
91
  onclick={onReset}
@@ -110,13 +110,13 @@
110
110
  {@render children?.(context.state)}
111
111
  </NeoButtonGroup>
112
112
 
113
- <style>.source-icon {
113
+ <style>.neo-source-icon {
114
114
  overflow: hidden;
115
115
  border-radius: var(--neo-theme-selector-border-radius, var(--neo-border-radius-lg));
116
116
  rotate: var(--neo-source-rotate, 0);
117
117
  transition: rotate 0.5s ease;
118
118
  }
119
- .source-icon :global(svg) {
119
+ .neo-source-icon :global(svg) {
120
120
  width: 1.25rem;
121
121
  height: 1.25rem;
122
122
  translate: -30% -30%;
@@ -1,11 +1,11 @@
1
1
  import { getContext, setContext, untrack } from 'svelte';
2
- import { getReset, getSource, getTheme, hasSaved, NeoSourceKey, NeoThemeKey, NeoThemeReset, NeoThemeRoot, } from './neo-theme-provider.model.js';
2
+ import { getRemember, getReset, getSource, getTheme, NeoThemeRoot, NeoThemeStorageKey, } from './neo-theme-provider.model.js';
3
3
  import { NeoErrorThemeContextNotFound, NeoErrorThemeInvalidTarget, NeoErrorThemeTargetNotFound } from '../utils/error.utils.js';
4
4
  export class NeoThemeProviderContext {
5
5
  #reset = $state(getReset());
6
6
  #theme = $state(getTheme());
7
7
  #source = $state(getSource());
8
- #remember = $state(hasSaved());
8
+ #remember = $state(getRemember());
9
9
  #root = $state(document?.documentElement);
10
10
  get reset() {
11
11
  return this.#reset;
@@ -60,23 +60,24 @@ export class NeoThemeProviderContext {
60
60
  if (!('setAttribute' in this.root))
61
61
  throw new NeoErrorThemeInvalidTarget();
62
62
  this.root.setAttribute(NeoThemeRoot, '');
63
- this.root.setAttribute(NeoThemeKey, this.theme);
64
- this.root.setAttribute(NeoSourceKey, this.source);
63
+ this.root.setAttribute(NeoThemeStorageKey.Theme, this.theme);
64
+ this.root.setAttribute(NeoThemeStorageKey.Source, this.source);
65
65
  if (this.reset)
66
- this.root.setAttribute(NeoThemeReset, '');
66
+ this.root.setAttribute(NeoThemeStorageKey.Reset, '');
67
67
  else
68
- this.root.removeAttribute(NeoThemeReset);
68
+ this.root.removeAttribute(NeoThemeStorageKey.Reset);
69
69
  if (!localStorage)
70
70
  return;
71
+ localStorage.setItem(NeoThemeStorageKey.Remember, Boolean(this.remember).toString());
71
72
  if (this.remember) {
72
- localStorage.setItem(NeoThemeReset, Boolean(this.reset).toString());
73
- localStorage.setItem(NeoThemeKey, this.theme);
74
- localStorage.setItem(NeoSourceKey, this.source);
73
+ localStorage.setItem(NeoThemeStorageKey.Reset, Boolean(this.reset).toString());
74
+ localStorage.setItem(NeoThemeStorageKey.Theme, this.theme);
75
+ localStorage.setItem(NeoThemeStorageKey.Source, this.source);
75
76
  }
76
77
  else {
77
- localStorage.removeItem(NeoThemeReset);
78
- localStorage.removeItem(NeoThemeKey);
79
- localStorage.removeItem(NeoSourceKey);
78
+ localStorage.removeItem(NeoThemeStorageKey.Reset);
79
+ localStorage.removeItem(NeoThemeStorageKey.Theme);
80
+ localStorage.removeItem(NeoThemeStorageKey.Source);
80
81
  }
81
82
  }
82
83
  destroy() {
@@ -85,9 +86,9 @@ export class NeoThemeProviderContext {
85
86
  if (!('removeAttribute' in this.root))
86
87
  return;
87
88
  this.root.removeAttribute(NeoThemeRoot);
88
- this.root.removeAttribute(NeoThemeReset);
89
- this.root.removeAttribute(NeoThemeKey);
90
- this.root.removeAttribute(NeoSourceKey);
89
+ this.root.removeAttribute(NeoThemeStorageKey.Reset);
90
+ this.root.removeAttribute(NeoThemeStorageKey.Theme);
91
+ this.root.removeAttribute(NeoThemeStorageKey.Source);
91
92
  }
92
93
  }
93
94
  const NeoContextKey = Symbol('NeoThemeProviderContext');
@@ -63,7 +63,7 @@ export type NeoThemeProviderProps = {
63
63
  /**
64
64
  * To store the last used reset & theme & source in local storage (if available)
65
65
  *
66
- * @default false
66
+ * @default true
67
67
  */
68
68
  remember?: boolean;
69
69
  /**
@@ -74,14 +74,14 @@ export type NeoThemeProviderProps = {
74
74
  target?: HTMLElement | ShadowRoot | (() => HTMLElement | ShadowRoot);
75
75
  };
76
76
  export declare const NeoThemeRoot = "neo-theme-root";
77
- export declare const NeoThemeReset = "neo-reset";
78
- export declare const NeoThemeKey = "neo-theme";
79
- export declare const NeoSourceKey = "neo-source";
77
+ export declare const NeoThemeStorageKey: Record<string, `neo-${keyof INeoThemeProviderContext}`>;
78
+ export type NeoThemeStorageKeys = (typeof NeoThemeStorageKey)[keyof typeof NeoThemeStorageKey];
80
79
  export declare const getSavedTheme: () => NeoThemes | null;
81
80
  export declare const getPreferTheme: () => NeoThemes;
82
81
  export declare const getTheme: () => NeoThemes;
83
82
  export declare const getSavedSource: () => NeoSources | null;
84
83
  export declare const getSource: () => NeoSources;
85
84
  export declare const getSavedReset: () => string | null;
86
- export declare const getReset: () => boolean | undefined;
87
- export declare const hasSaved: () => boolean;
85
+ export declare const getReset: () => boolean;
86
+ export declare const getSavedRemember: () => string | null;
87
+ export declare const getRemember: () => boolean;
@@ -16,19 +16,24 @@ export const NeoSource = {
16
16
  BottomLeft: 'bottom-left',
17
17
  };
18
18
  export const NeoThemeRoot = 'neo-theme-root';
19
- export const NeoThemeReset = 'neo-reset';
20
- export const NeoThemeKey = 'neo-theme';
21
- export const NeoSourceKey = 'neo-source';
22
- export const getSavedTheme = () => localStorage?.getItem(NeoThemeKey);
19
+ export const NeoThemeStorageKey = {
20
+ Reset: 'neo-reset',
21
+ Theme: 'neo-theme',
22
+ Source: 'neo-source',
23
+ Remember: 'neo-remember',
24
+ };
25
+ export const getSavedTheme = () => localStorage?.getItem(NeoThemeStorageKey.Theme);
23
26
  export const getPreferTheme = () => (window.matchMedia('(prefers-color-scheme: dark)').matches ? NeoTheme.Dark : NeoTheme.Light);
24
27
  export const getTheme = () => getSavedTheme() ?? getPreferTheme();
25
- export const getSavedSource = () => localStorage?.getItem(NeoSourceKey);
28
+ export const getSavedSource = () => localStorage?.getItem(NeoThemeStorageKey.Source);
26
29
  export const getSource = () => getSavedSource() ?? NeoSource.TopLeft;
27
- export const getSavedReset = () => localStorage?.getItem(NeoThemeReset);
28
- export const getReset = () => {
29
- const reset = getSavedReset();
30
- if (!reset)
31
- return;
32
- return reset === 'true';
30
+ const getBoolean = (str, fallback = false) => {
31
+ // If saved reset is always truthy as it is a string
32
+ if (!str)
33
+ return fallback;
34
+ return str === 'true';
33
35
  };
34
- export const hasSaved = () => !!getSavedTheme() || !!getSavedSource() || !!getSavedReset();
36
+ export const getSavedReset = () => localStorage?.getItem(NeoThemeStorageKey.Reset);
37
+ export const getReset = () => getBoolean(getSavedReset(), true);
38
+ export const getSavedRemember = () => localStorage?.getItem(NeoThemeStorageKey.Remember);
39
+ export const getRemember = () => getBoolean(getSavedRemember(), true);
@@ -1,9 +1,9 @@
1
1
  import type { Snippet } from 'svelte';
2
- import type { NeoButtonProps } from '../buttons/index.js';
3
2
  import type { NeoButtonGroupProps } from '../buttons/neo-button-group.model.js';
3
+ import type { NeoButtonProps } from '../buttons/neo-button.model.js';
4
4
  import type { INeoThemeProviderContext } from './neo-theme-provider.model.js';
5
5
  export type NeoThemeSelectorProps = {
6
- children: Snippet<[INeoThemeProviderContext]>;
6
+ children?: Snippet<[INeoThemeProviderContext]>;
7
7
  /**
8
8
  * Whether to show the reset style button or not.
9
9
  */
@@ -58,8 +58,8 @@
58
58
  <NeoSkeletonContainer {loading} in={inAction} out={outAction} {width} {height} {containerProps} {content}>
59
59
  <div
60
60
  class:neo-skeleton-media={true}
61
- class:rounded
62
- class:circle
61
+ class:neo-rounded={rounded}
62
+ class:neo-circle={circle}
63
63
  style:aspect-ratio={ratio}
64
64
  style:width
65
65
  style:height
@@ -123,10 +123,10 @@
123
123
  border-color: var(--neo-skeleton-color-start);
124
124
  }
125
125
  }
126
- .neo-skeleton-media.rounded {
126
+ .neo-skeleton-media.neo-rounded {
127
127
  border-radius: var(--neo-skeleton-border-radius, var(--neo-border-radius-lg));
128
128
  }
129
- .neo-skeleton-media.circle {
129
+ .neo-skeleton-media.neo-circle {
130
130
  border-radius: 50%;
131
131
  aspect-ratio: 1/1;
132
132
  }
@@ -43,14 +43,14 @@
43
43
  <NeoSkeletonContainer {loading} in={inAction} out={outAction} {width} {height} {containerProps} {content}>
44
44
  <div class:neo-skeleton-text={true} style:width style:height in:inFn={inProps} out:outFn={outProps} {...rest}>
45
45
  {#if title}
46
- <div class:neo-skeleton-text-line={true} class:title class:alt {...titleProps}>&nbsp;</div>
46
+ <div class:neo-skeleton-text-line={true} class:neo-title={title} class:neo-alt={alt} {...titleProps}>&nbsp;</div>
47
47
  {/if}
48
48
 
49
49
  {#if paragraphs && lines}
50
50
  {#each Array(Number(paragraphs)) as _}
51
- <div class:neo-skeleton-text-paragraph={true} class:alt class:justify {...paragraphProps}>
51
+ <div class:neo-skeleton-text-paragraph={true} class:neo-alt={alt} class:neo-justify={justify} {...paragraphProps}>
52
52
  {#each Array(Number(lines)) as __}
53
- <div class="neo-skeleton-text-line" class:alt>&nbsp;</div>
53
+ <div class="neo-skeleton-text-line" class:neo-alt={alt}>&nbsp;</div>
54
54
  {/each}
55
55
  </div>
56
56
  {/each}
@@ -132,26 +132,26 @@
132
132
  .neo-skeleton-text-line:only-child {
133
133
  width: 100%;
134
134
  }
135
- .neo-skeleton-text-line.alt {
135
+ .neo-skeleton-text-line.neo-alt {
136
136
  width: 20%;
137
137
  }
138
- .neo-skeleton-text-line.alt:nth-child(even) {
138
+ .neo-skeleton-text-line.neo-alt:nth-child(even) {
139
139
  width: 24%;
140
140
  }
141
- .neo-skeleton-text-line.alt:nth-child(3n) {
141
+ .neo-skeleton-text-line.neo-alt:nth-child(3n) {
142
142
  width: 16%;
143
143
  animation-delay: 0.75s;
144
144
  }
145
- .neo-skeleton-text-line.alt:nth-child(4n) {
145
+ .neo-skeleton-text-line.neo-alt:nth-child(4n) {
146
146
  width: 28%;
147
147
  }
148
- .neo-skeleton-text-line.alt:nth-child(6n) {
148
+ .neo-skeleton-text-line.neo-alt:nth-child(6n) {
149
149
  width: 12%;
150
150
  }
151
- .neo-skeleton-text-line.alt:nth-child(7n) {
151
+ .neo-skeleton-text-line.neo-alt:nth-child(7n) {
152
152
  width: 18%;
153
153
  }
154
- .neo-skeleton-text-line.title {
154
+ .neo-skeleton-text-line.neo-title {
155
155
  width: 70%;
156
156
  height: var(--neo-line-height, 1.5rem);
157
157
  }
@@ -162,9 +162,9 @@
162
162
  flex-direction: column;
163
163
  gap: var(--neo-skeleton-paragraph-gap, var(--neo-gap-xs));
164
164
  }
165
- .neo-skeleton-text-paragraph.alt {
165
+ .neo-skeleton-text-paragraph.neo-alt {
166
166
  flex-flow: row wrap;
167
167
  }
168
- .neo-skeleton-text-paragraph.justify .neo-skeleton-text-line {
168
+ .neo-skeleton-text-paragraph.neo-justify .neo-skeleton-text-line {
169
169
  flex: 1 1 auto;
170
170
  }</style>
@@ -1,39 +1,33 @@
1
- [neo-theme-root] {
1
+ @mixin colors {
2
2
  /* ui color variables */
3
3
  --neo-white: oklch(100% 0 0deg);
4
4
  --neo-white-soft-light: oklch(from var(--neo-white-soft) calc(l + 0.05) c h);
5
- --neo-white-soft-light-50: oklch(from var(--neo-white-soft-light) l c h / 50%);
5
+ --neo-white-soft-light-30: oklch(from var(--neo-white-soft-light) l c h / 30%);
6
+ --neo-white-soft-light-60: oklch(from var(--neo-white-soft-light) l c h / 60%);
6
7
  --neo-white-soft: oklch(92.9% 0.009 279.682deg);
7
- --neo-white-soft-10: oklch(from var(--neo-white-soft) l c h / 10%);
8
- --neo-white-soft-15: oklch(from var(--neo-white-soft) l c h / 15%);
9
8
  --neo-white-soft-20: oklch(from var(--neo-white-soft) l c h / 20%);
9
+ --neo-white-soft-22: oklch(from var(--neo-white-soft) l c h / 22%);
10
+ --neo-white-soft-25: oklch(from var(--neo-white-soft) l c h / 25%);
10
11
  --neo-white-soft-dark: oklch(from var(--neo-white-soft) calc(l - 0.075) c h);
11
12
  --neo-white-soft-dark-80: oklch(from var(--neo-white-soft-dark) l c h / 80%);
12
13
  --neo-black: oklch(0% 0 0deg);
13
14
  --neo-black-5: oklch(from var(--neo-black) l c h / 5%);
14
- --neo-black-lighter-50: oklch(from var(--neo-black-lighter) l c h / 50%);
15
+ --neo-black-8: oklch(from var(--neo-black) l c h / 8%);
16
+ --neo-black-10: oklch(from var(--neo-black) l c h / 10%);
17
+ --neo-black-20: oklch(from var(--neo-black) l c h / 20%);
15
18
  --neo-black-lighter: oklch(from var(--neo-black-soft) calc(l + 0.1) c h);
19
+ --neo-black-lighter-20: oklch(from var(--neo-black-lighter) l c h / 20%);
20
+ --neo-black-lighter-40: oklch(from var(--neo-black-lighter) l c h / 40%);
16
21
  --neo-black-light: oklch(from var(--neo-black-soft) calc(l + 0.05) c h);
17
22
  --neo-black-soft: oklch(33% 0 264.416deg);
18
- --neo-black-soft-10: oklch(from var(--neo-black-soft) l c h / 10%);
19
23
  --neo-black-soft-dark: oklch(from var(--neo-black-soft) calc(l - 0.05) c h);
20
- --neo-black-soft-dark-50: oklch(from var(--neo-black-soft-dark) l c h / 50%);
21
24
  --neo-grey: oklch(from var(--neo-black-soft) calc(l + 0.612) c h);
22
25
  --neo-grey-soft: oklch(from var(--neo-grey) calc(l - 0.15) c h);
23
- --neo-grey-soft-5: oklch(from var(--neo-grey-soft) l c h / 5%);
24
- --neo-grey-soft-10: oklch(from var(--neo-grey-soft) l c h / 10%);
25
- --neo-grey-soft-12: oklch(from var(--neo-grey-soft) l c h / 12%);
26
26
  --neo-grey-soft-20: oklch(from var(--neo-grey-soft) l c h / 20%);
27
27
  --neo-grey-soft-30: oklch(from var(--neo-grey-soft) l c h / 30%);
28
28
  --neo-grey-soft-60: oklch(from var(--neo-grey-soft) l c h / 60%);
29
29
  --neo-grey-strong: oklch(from var(--neo-grey) calc(l - 0.4) c h);
30
- --neo-grey-strong-5: oklch(from var(--neo-grey-strong) l c h / 5%);
31
- --neo-grey-strong-8: oklch(from var(--neo-grey-strong) l c h / 8%);
32
- --neo-grey-strong-10: oklch(from var(--neo-grey-strong) l c h / 10%);
33
- --neo-grey-strong-12: oklch(from var(--neo-grey-strong) l c h / 12%);
34
- --neo-grey-strong-20: oklch(from var(--neo-grey-strong) l c h / 20%);
35
30
  --neo-grey-strong-60: oklch(from var(--neo-grey-strong) l c h / 60%);
36
- --neo-grey-strong-80: oklch(from var(--neo-grey-strong) l c h / 80%);
37
31
  --neo-grey-dark: oklch(from var(--neo-grey-strong) calc(l - 0.1) c h);
38
32
  --neo-grey-dark-80: oklch(from var(--neo-grey-dark) l c h / 80%);
39
33
  --neo-blue: oklch(50% 0.302 264.206deg);
@@ -49,7 +43,7 @@
49
43
  --neo-red-light-75: oklch(from var(--neo-red-light) l c h / 75%);
50
44
  --neo-red: oklch(50% 0.302 26.206deg);
51
45
  --neo-red-5: oklch(from var(--neo-red) l c h / 5%);
52
- --neo-red-10: oklch(from var(--neo-red) l c h / 10%);
46
+ --neo-red-7: oklch(from var(--neo-red) l c h / 7%);
53
47
  --neo-red-50: oklch(from var(--neo-red) l c h / 50%);
54
48
  --neo-red-75: oklch(from var(--neo-red) l c h / 75%);
55
49
  --neo-green-light: oklch(from var(--neo-green) calc(l + 0.25) c h);
@@ -63,7 +57,7 @@
63
57
  --neo-color-primary-80: var(--neo-blue-80);
64
58
  --neo-color-error: var(--neo-red);
65
59
  --neo-color-error-5: var(--neo-red-5);
66
- --neo-color-error-10: var(--neo-red-10);
60
+ --neo-color-error-7: var(--neo-red-7);
67
61
  --neo-color-error-50: var(--neo-red-50);
68
62
  --neo-color-error-75: var(--neo-red-75);
69
63
  --neo-color-success: var(--neo-green);
@@ -71,16 +65,17 @@
71
65
 
72
66
  /** semantic colors */
73
67
  --neo-text-color: var(--neo-grey-strong);
68
+ --neo-text-color-secondary: color-mix(in srgb, var(--neo-text-color), white 20%);
69
+ --neo-text-color-highlight: color-mix(in srgb, currentcolor, black 50%);
74
70
  --neo-text-color-active: color-mix(in srgb, currentcolor, white 10%);
75
- --neo-text-color-focused: var(--neo-color-primary-50);
71
+ --neo-text-color-focused: color-mix(in srgb, var(--neo-text-color), var(--neo-color-primary) 50%);
76
72
  --neo-text-color-focused-active: color-mix(in srgb, var(--neo-text-color-focused), white 10%);
77
- --neo-text-color-hover: var(--neo-color-primary-80);
73
+ --neo-text-color-hover: color-mix(in srgb, var(--neo-text-color), var(--neo-color-primary) 70%);
78
74
  --neo-text-color-hover-active: color-mix(in srgb, var(--neo-text-color-hover), white 20%);
79
75
  --neo-text-color-disabled: var(--neo-grey-strong-60);
80
76
  --neo-text-highlight-color: var(--neo-grey-soft-30);
81
77
  --neo-border-color: var(--neo-grey-soft);
82
- --neo-border-color-focused: var(--neo-color-primary-50);
83
- --neo-border-color-primary: var(--neo-color-primary-80);
78
+ --neo-border-color-focused: color-mix(in srgb, var(--neo-border-color), var(--neo-color-primary) 50%);
84
79
  --neo-border-color-disabled: var(--neo-grey-soft-60);
85
80
  --neo-background-color: var(--neo-white-soft);
86
81
  --neo-background-color-lighter: color-mix(in srgb, var(--neo-background-color), white 5%);
@@ -92,17 +87,18 @@
92
87
  --neo-close-color: var(--neo-color-error);
93
88
  --neo-close-color-hover: var(--neo-color-error-75);
94
89
  --neo-close-color-focused: var(--neo-color-error-50);
95
- --neo-close-bg-color-hover: var(--neo-color-error-10);
90
+ --neo-close-bg-color-hover: var(--neo-color-error-7);
96
91
  --neo-close-bg-color-focused: var(--neo-color-error-5);
97
92
  --neo-scrollbar-color: var(--neo-grey-soft-60);
98
93
 
99
94
  /** glass colors */
100
95
  --neo-glass-background-color: var(--neo-white-soft-20);
101
- --neo-glass-background-color-focus: var(--neo-white-soft-15);
102
- --neo-glass-background-color-hover: var(--neo-white-soft-10);
103
- --neo-glass-shadow-color: var(--neo-black-soft-10);
104
- --neo-glass-border-color: var(--neo-white-soft-light-50);
105
- --neo-glass-border-color-hover: var(--neo-glass-background-color);
96
+ --neo-glass-background-color-focus: var(--neo-white-soft-22);
97
+ --neo-glass-background-color-hover: var(--neo-white-soft-25);
98
+ --neo-glass-shadow-color-light: var(--neo-white-soft-light-60);
99
+ --neo-glass-shadow-color-dark: var(--neo-black-10);
100
+ --neo-glass-border-color: var(--neo-white-soft-light-60);
101
+ --neo-glass-border-color-hover: var(--neo-white-soft-light-30);
106
102
  --neo-glass-skeleton-color: var(--neo-grey-soft-60);
107
103
 
108
104
  /** dark primary colors */
@@ -119,16 +115,17 @@
119
115
 
120
116
  /** dark mode semantic colors */
121
117
  --neo-dark-text-color: var(--neo-white-soft-dark);
118
+ --neo-dark-text-color-secondary: color-mix(in srgb, var(--neo-text-color), black 20%);
119
+ --neo-dark-text-color-highlight: color-mix(in srgb, currentcolor, white 80%);
122
120
  --neo-dark-text-color-active: color-mix(in srgb, currentcolor, black 10%);
123
- --neo-dark-text-color-focused: var(--neo-dark-color-primary-50);
121
+ --neo-dark-text-color-focused: color-mix(in srgb, var(--neo-dark-text-color), var(--neo-dark-color-primary) 40%);
124
122
  --neo-dark-text-color-focused-active: color-mix(in srgb, var(--neo-dark-text-color-focused), black 10%);
125
- --neo-dark-text-color-hover: var(--neo-dark-color-primary-80);
123
+ --neo-dark-text-color-hover: color-mix(in srgb, var(--neo-dark-text-color), var(--neo-dark-color-primary) 80%);
126
124
  --neo-dark-text-color-hover-active: color-mix(in srgb, var(--neo-dark-text-color-hover), black 20%);
127
125
  --neo-dark-text-color-disabled: var(--neo-white-soft-dark-80);
128
126
  --neo-dark-text-highlight-color: var(--neo-grey-soft-20);
129
127
  --neo-dark-border-color: var(--neo-grey-dark);
130
- --neo-dark-border-color-focused: var(--neo-dark-color-primary-50);
131
- --neo-dark-border-color-primary: var(--neo-dark-color-primary-80);
128
+ --neo-dark-border-color-focused: color-mix(in srgb, var(--neo-dark-border-color), var(--neo-dark-color-primary) 40%);
132
129
  --neo-dark-border-color-disabled: var(--neo-grey-dark-80);
133
130
  --neo-dark-background-color: var(--neo-black-soft);
134
131
  --neo-dark-background-color-lighter: color-mix(in srgb, var(--neo-background-color), black 5%);
@@ -145,73 +142,64 @@
145
142
  --neo-dark-scrollbar-color: var(--neo-grey-dark-80);
146
143
 
147
144
  /** dark mode glass colors */
148
- --neo-dark-glass-background-color: var(--neo-grey-strong-8);
149
- --neo-dark-glass-background-color-focus: var(--neo-grey-strong-10);
150
- --neo-dark-glass-background-color-hover: var(--neo-grey-strong-12);
151
- --neo-dark-glass-shadow-color: var(--neo-black-soft-dark-50);
152
- --neo-dark-glass-border-color: var(--neo-black-lighter-50);
153
- --neo-dark-glass-border-color-hover: var(--neo-dark-glass-background-color);
145
+ --neo-dark-glass-background-color: var(--neo-black-5);
146
+ --neo-dark-glass-background-color-focus: var(--neo-black-8);
147
+ --neo-dark-glass-background-color-hover: var(--neo-black-10);
148
+ --neo-dark-glass-shadow-color-light: var(--neo-black-lighter-40);
149
+ --neo-dark-glass-shadow-color-dark: var(--neo-black-20);
150
+ --neo-dark-glass-border-color: var(--neo-black-lighter-40);
151
+ --neo-dark-glass-border-color-hover: var(--neo-black-5);
154
152
  --neo-dark-glass-skeleton-color: var(--neo-grey-dark-80);
153
+ }
155
154
 
156
- @mixin dark-theme {
157
- /** primary colors */
158
- --neo-color-primary: var(--neo-dark-color-primary);
159
- --neo-color-primary-50: var(--neo-dark-color-primary-50);
160
- --neo-color-primary-80: var(--neo-dark-color-primary-80);
161
- --neo-color-error: var(--neo-dark-color-error);
162
- --neo-color-error-5: var(--neo-dark-color-error-5);
163
- --neo-color-error-10: var(--neo-dark-color-error-10);
164
- --neo-color-error-50: var(--neo-dark-color-error-50);
165
- --neo-color-error-75: var(--neo-dark-color-error-75);
166
- --neo-color-success: var(--neo-dark-color-success);
167
- --neo-color-success-50: var(--neo-dark-color-success-50);
168
-
169
- /** semantic colors */
170
- --neo-text-color: var(--neo-dark-text-color);
171
- --neo-text-color-active: var(--neo-dark-text-color-active);
172
- --neo-text-color-focused: var(--neo-dark-text-color-focused);
173
- --neo-text-color-focused-active: var(--neo-dark-text-color-focused-active);
174
- --neo-text-color-hover: var(--neo-dark-text-color-hover);
175
- --neo-text-color-hover-active: var(--neo-dark-text-color-hover-active);
176
- --neo-text-color-disabled: var(--neo-dark-text-color-disabled);
177
- --neo-text-highlight-color: var(--neo-dark-text-highlight-color);
178
- --neo-border-color: var(--neo-dark-border-color);
179
- --neo-border-color-focused: var(--neo-dark-border-color-focused);
180
- --neo-border-color-primary: var(--neo-dark-border-color-primary);
181
- --neo-border-color-disabled: var(--neo-dark-border-color-disabled);
182
- --neo-background-color: var(--neo-dark-background-color);
183
- --neo-background-color-lighter: var(--neo-dark-background-color-lighter);
184
- --neo-background-color-darker: var(--neo-dark-background-color-darker);
185
- --neo-shadow-color-light: var(--neo-dark-shadow-color-light);
186
- --neo-shadow-color-dark: var(--neo-dark-shadow-color-dark);
187
- --neo-skeleton-color: var(--neo-dark-skeleton-color);
188
- --neo-skeleton-color-step: var(--neo-dark-skeleton-color-step);
189
- --neo-close-color: var(--neo-dark-close-color);
190
- --neo-close-color-hover: var(--neo-dark-close-color-hover);
191
- --neo-close-color-focused: var(--neo-dark-close-color-focused);
192
- --neo-close-bg-color-hover: var(--neo-dark-close-bg-color-hover);
193
- --neo-close-bg-color-focused: var(--neo-dark-close-bg-color-focused);
194
- --neo-scrollbar-color: var(--neo-dark-scrollbar-color);
195
-
196
- /** glass colors */
197
- --neo-glass-background-color: var(--neo-dark-glass-background-color);
198
- --neo-glass-background-color-focus: var(--neo-dark-glass-background-color-focus);
199
- --neo-glass-background-color-hover: var(--neo-dark-glass-background-color-hover);
200
- --neo-glass-shadow-color: var(--neo-dark-glass-shadow-color);
201
- --neo-glass-border-color: var(--neo-dark-glass-border-color);
202
- --neo-glass-border-color-hover: var(--neo-dark-glass-border-color-hover);
203
- --neo-glass-skeleton-color: var(--neo-dark-glass-skeleton-color);
204
- }
155
+ @mixin dark-theme {
156
+ /** primary colors */
157
+ --neo-color-primary: var(--neo-dark-color-primary);
158
+ --neo-color-primary-50: var(--neo-dark-color-primary-50);
159
+ --neo-color-primary-80: var(--neo-dark-color-primary-80);
160
+ --neo-color-error: var(--neo-dark-color-error);
161
+ --neo-color-error-5: var(--neo-dark-color-error-5);
162
+ --neo-color-error-7: var(--neo-dark-color-error-10);
163
+ --neo-color-error-50: var(--neo-dark-color-error-50);
164
+ --neo-color-error-75: var(--neo-dark-color-error-75);
165
+ --neo-color-success: var(--neo-dark-color-success);
166
+ --neo-color-success-50: var(--neo-dark-color-success-50);
205
167
 
206
- /* override semantic color if dark mode is enabled */
207
- &[neo-theme='dark'] {
208
- @include dark-theme;
209
- }
168
+ /** semantic colors */
169
+ --neo-text-color: var(--neo-dark-text-color);
170
+ --neo-text-color-secondary: var(--neo-dark-text-color-secondary);
171
+ --neo-text-color-highlight: var(--neo-dark-text-color-highlight);
172
+ --neo-text-color-active: var(--neo-dark-text-color-active);
173
+ --neo-text-color-focused: var(--neo-dark-text-color-focused);
174
+ --neo-text-color-focused-active: var(--neo-dark-text-color-focused-active);
175
+ --neo-text-color-hover: var(--neo-dark-text-color-hover);
176
+ --neo-text-color-hover-active: var(--neo-dark-text-color-hover-active);
177
+ --neo-text-color-disabled: var(--neo-dark-text-color-disabled);
178
+ --neo-text-highlight-color: var(--neo-dark-text-highlight-color);
179
+ --neo-border-color: var(--neo-dark-border-color);
180
+ --neo-border-color-focused: var(--neo-dark-border-color-focused);
181
+ --neo-border-color-disabled: var(--neo-dark-border-color-disabled);
182
+ --neo-background-color: var(--neo-dark-background-color);
183
+ --neo-background-color-lighter: var(--neo-dark-background-color-lighter);
184
+ --neo-background-color-darker: var(--neo-dark-background-color-darker);
185
+ --neo-shadow-color-light: var(--neo-dark-shadow-color-light);
186
+ --neo-shadow-color-dark: var(--neo-dark-shadow-color-dark);
187
+ --neo-skeleton-color: var(--neo-dark-skeleton-color);
188
+ --neo-skeleton-color-step: var(--neo-dark-skeleton-color-step);
189
+ --neo-close-color: var(--neo-dark-close-color);
190
+ --neo-close-color-hover: var(--neo-dark-close-color-hover);
191
+ --neo-close-color-focused: var(--neo-dark-close-color-focused);
192
+ --neo-close-bg-color-hover: var(--neo-dark-close-bg-color-hover);
193
+ --neo-close-bg-color-focused: var(--neo-dark-close-bg-color-focused);
194
+ --neo-scrollbar-color: var(--neo-dark-scrollbar-color);
210
195
 
211
- /* apply dark mode if not overridden */
212
- @media (prefers-color-scheme: dark) {
213
- &:not([neo-theme='light']) {
214
- @include dark-theme;
215
- }
216
- }
196
+ /** glass colors */
197
+ --neo-glass-background-color: var(--neo-dark-glass-background-color);
198
+ --neo-glass-background-color-focus: var(--neo-dark-glass-background-color-focus);
199
+ --neo-glass-background-color-hover: var(--neo-dark-glass-background-color-hover);
200
+ --neo-glass-shadow-color-light: var(--neo-dark-glass-shadow-color-light);
201
+ --neo-glass-shadow-color-dark: var(--neo-dark-glass-shadow-color-dark);
202
+ --neo-glass-border-color: var(--neo-dark-glass-border-color);
203
+ --neo-glass-border-color-hover: var(--neo-dark-glass-border-color-hover);
204
+ --neo-glass-skeleton-color: var(--neo-dark-glass-skeleton-color);
217
205
  }
@@ -0,0 +1,17 @@
1
+ @mixin filters() {
2
+ /* Blurs */
3
+ --neo-blur-0: blur(0);
4
+ --neo-blur-1: blur(4px);
5
+ --neo-blur-2: blur(6px);
6
+ --neo-blur-3: blur(8px);
7
+ --neo-blur-4: blur(12px);
8
+ --neo-blur-5: blur(16px);
9
+
10
+ /* Saturation */
11
+ --neo-saturate: saturate(1);
12
+ --neo-saturate-1: saturate(1.1);
13
+ --neo-saturate-2: saturate(1.2);
14
+ --neo-saturate-3: saturate(1.3);
15
+ --neo-saturate-4: saturate(1.5);
16
+ --neo-saturate-5: saturate(2);
17
+ }