@x33025/sveltely 0.1.23 → 0.1.25

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 (107) hide show
  1. package/dist/actions/LoaderOverlay.svelte +10 -3
  2. package/dist/components/Library/Accordion/Accordion.demo.svelte +21 -0
  3. package/dist/components/Library/Accordion/Accordion.demo.svelte.d.ts +9 -0
  4. package/dist/components/Library/Accordion/Accordion.svelte +78 -0
  5. package/dist/components/Library/Accordion/Accordion.svelte.d.ts +14 -0
  6. package/dist/components/Library/Accordion/Content.svelte +57 -0
  7. package/dist/components/Library/Accordion/Content.svelte.d.ts +8 -0
  8. package/dist/components/Library/Accordion/Header.svelte +98 -0
  9. package/dist/components/Library/Accordion/Header.svelte.d.ts +10 -0
  10. package/dist/components/Library/Accordion/context.d.ts +9 -0
  11. package/dist/components/Library/Accordion/context.js +6 -0
  12. package/dist/components/Library/Accordion/index.d.ts +9 -0
  13. package/dist/components/Library/Accordion/index.js +7 -0
  14. package/dist/components/Library/AnimatedNumber/AnimatedNumber.demo.svelte +3 -2
  15. package/dist/components/Library/ArticleEditor/ArticleEditor.svelte +1 -2
  16. package/dist/components/Library/ArticleEditor/Blocks/Table.svelte +133 -172
  17. package/dist/components/Library/Checkbox/Checkbox.demo.svelte +5 -4
  18. package/dist/components/Library/Checkbox/Checkbox.svelte +6 -5
  19. package/dist/components/Library/Checkbox/Checkbox.svelte.d.ts +2 -1
  20. package/dist/components/Library/ChipInput/ChipInput.demo.svelte +3 -2
  21. package/dist/components/Library/Dropdown/Dropdown.demo.svelte +20 -15
  22. package/dist/components/Library/Floating/Floating.svelte +5 -6
  23. package/dist/components/Library/Grid/Grid.demo.svelte +58 -0
  24. package/dist/components/Library/Grid/Grid.demo.svelte.d.ts +25 -0
  25. package/dist/components/Library/Grid/Grid.svelte +128 -25
  26. package/dist/components/Library/Grid/Grid.svelte.d.ts +38 -9
  27. package/dist/components/Library/Grid/GridItem.svelte +18 -14
  28. package/dist/components/Library/Grid/GridItem.svelte.d.ts +2 -1
  29. package/dist/components/Library/HStack/HStack.svelte +4 -4
  30. package/dist/components/Library/HStack/HStack.svelte.d.ts +2 -1
  31. package/dist/components/Library/Image/Image.demo.svelte +3 -1
  32. package/dist/components/Library/Image/Image.demo.svelte.d.ts +2 -0
  33. package/dist/components/Library/ImageMask/ImageMask.demo.svelte +8 -6
  34. package/dist/components/Library/Label/Label.demo.svelte +5 -5
  35. package/dist/components/Library/Label/Label.svelte +10 -26
  36. package/dist/components/Library/NavigationStack/Link.svelte +1 -4
  37. package/dist/components/Library/Notifications/Notifications.demo.svelte +63 -0
  38. package/dist/components/Library/Notifications/Notifications.demo.svelte.d.ts +9 -0
  39. package/dist/components/Library/Notifications/Notifications.svelte +155 -0
  40. package/dist/components/Library/Notifications/Notifications.svelte.d.ts +35 -0
  41. package/dist/components/Library/Notifications/index.d.ts +2 -0
  42. package/dist/components/Library/Notifications/index.js +1 -0
  43. package/dist/components/Library/Notifications/types.d.ts +8 -0
  44. package/dist/components/Library/Notifications/types.js +1 -0
  45. package/dist/components/Library/NumberField/NumberField.svelte +25 -19
  46. package/dist/components/Library/Pagination/Pagination.demo.svelte +3 -2
  47. package/dist/components/Library/Pagination/Pagination.svelte +6 -18
  48. package/dist/components/Library/Popover/PopoverDebugOverlay.svelte +3 -3
  49. package/dist/components/Library/Portal/Content.svelte +20 -0
  50. package/dist/components/Library/Portal/Content.svelte.d.ts +10 -0
  51. package/dist/components/Library/Portal/Portal.svelte +4 -0
  52. package/dist/components/Library/Portal/Portal.svelte.d.ts +1 -0
  53. package/dist/components/Library/Portal/index.d.ts +1 -0
  54. package/dist/components/Library/Portal/index.js +1 -0
  55. package/dist/components/Library/ScrollView/ScrollView.svelte +88 -9
  56. package/dist/components/Library/ScrollView/ScrollView.svelte.d.ts +9 -2
  57. package/dist/components/Library/ScrollView/index.d.ts +1 -1
  58. package/dist/components/Library/SearchField/SearchField.demo.svelte +3 -2
  59. package/dist/components/Library/SearchField/SearchField.svelte +5 -5
  60. package/dist/components/Library/SearchField/SearchField.svelte.d.ts +2 -1
  61. package/dist/components/Library/SegmentedPicker/SegmentedPicker.demo.svelte +3 -2
  62. package/dist/components/Library/Sheet/Sheet.demo.svelte +3 -2
  63. package/dist/components/Library/Sheet/Sheet.svelte +3 -3
  64. package/dist/components/Library/Slider/Slider.demo.svelte +3 -2
  65. package/dist/components/Library/Spinner/Spinner.demo.svelte +3 -2
  66. package/dist/components/Library/Switch/Switch.demo.svelte +5 -4
  67. package/dist/components/Library/Switch/Switch.svelte +6 -5
  68. package/dist/components/Library/Switch/Switch.svelte.d.ts +2 -1
  69. package/dist/components/Library/Table/Column.svelte +3 -0
  70. package/dist/components/Library/Table/Column.svelte.d.ts +1 -0
  71. package/dist/components/Library/Table/Table.demo.svelte +230 -17
  72. package/dist/components/Library/Table/Table.svelte +322 -78
  73. package/dist/components/Library/Table/Table.svelte.d.ts +5 -0
  74. package/dist/components/Library/Table/types.d.ts +1 -0
  75. package/dist/components/Library/TextField/TextField.svelte +20 -14
  76. package/dist/components/Library/TextShimmer/TextShimmer.demo.svelte +3 -2
  77. package/dist/components/Library/TimePicker/TimePicker.demo.svelte +3 -10
  78. package/dist/components/Library/TokenSearchField/TokenSearchField.demo.svelte +3 -2
  79. package/dist/components/Library/VStack/VStack.svelte +4 -4
  80. package/dist/components/Library/VStack/VStack.svelte.d.ts +2 -1
  81. package/dist/components/Local/ColorStyleControls.svelte +25 -72
  82. package/dist/components/Local/ComponentGrid.svelte +99 -27
  83. package/dist/components/Local/ComponentGrid.svelte.d.ts +2 -1
  84. package/dist/components/Local/ComponentPage.svelte +74 -0
  85. package/dist/components/Local/ComponentPage.svelte.d.ts +13 -0
  86. package/dist/components/Local/HeroCard.svelte +10 -6
  87. package/dist/components/Local/LayoutStyleControls.svelte +33 -25
  88. package/dist/components/Local/StyleControls.svelte +1 -1
  89. package/dist/index.d.ts +8 -3
  90. package/dist/index.js +4 -1
  91. package/dist/style/index.css +3 -4
  92. package/dist/style/layout.d.ts +15 -36
  93. package/dist/style/layout.js +35 -83
  94. package/dist/style/surface.d.ts +1 -0
  95. package/dist/style/surface.js +10 -0
  96. package/dist/style.css +3 -51
  97. package/dist/viewport/geometry.d.ts +8 -0
  98. package/dist/viewport/geometry.js +43 -0
  99. package/dist/viewport/index.d.ts +4 -0
  100. package/dist/viewport/index.js +4 -0
  101. package/dist/viewport/layout.d.ts +4 -0
  102. package/dist/viewport/layout.js +138 -0
  103. package/dist/viewport/placement.d.ts +4 -0
  104. package/dist/viewport/placement.js +14 -0
  105. package/dist/viewport/types.d.ts +81 -0
  106. package/dist/viewport/types.js +1 -0
  107. package/package.json +1 -1
@@ -1,6 +1,5 @@
1
1
  <script lang="ts">
2
2
  import Spinner from '../components/Library/Spinner/Spinner.svelte';
3
- import VStack from '../components/Library/VStack/VStack.svelte';
4
3
 
5
4
  type Props = {
6
5
  text: string;
@@ -32,12 +31,12 @@
32
31
  aria-label={text || 'Loading'}
33
32
  style={overlayStyle}
34
33
  >
35
- <VStack align="center" justify="center" gap={5}>
34
+ <div class="sveltely-loader-content">
36
35
  <Spinner size="calc(var(--sveltely-loader-font-size) * 1.143)" />
37
36
  {#if text}
38
37
  <span class="sveltely-loader-text">{text}</span>
39
38
  {/if}
40
- </VStack>
39
+ </div>
41
40
  </div>
42
41
 
43
42
  <style>
@@ -57,6 +56,14 @@
57
56
  text-align: center;
58
57
  }
59
58
 
59
+ .sveltely-loader-content {
60
+ display: flex;
61
+ flex-direction: column;
62
+ align-items: center;
63
+ justify-content: center;
64
+ gap: var(--sveltely-gap, 0.5rem);
65
+ }
66
+
60
67
  .sveltely-loader-text {
61
68
  max-width: 100%;
62
69
  overflow: hidden;
@@ -0,0 +1,21 @@
1
+ <script module lang="ts">
2
+ export const demo = {
3
+ name: 'Accordion',
4
+ description: 'Single collapsible disclosure primitive with header and content.',
5
+ columnSpan: 2
6
+ };
7
+ </script>
8
+
9
+ <script lang="ts">
10
+ import Accordion from './index';
11
+
12
+ let open = $state(true);
13
+ </script>
14
+
15
+ <Accordion bind:open>
16
+ <Accordion.Header>Release notes</Accordion.Header>
17
+ <Accordion.Content>
18
+ Small primitives stay easy to compose: the header owns the toggle and the content collapses
19
+ under it.
20
+ </Accordion.Content>
21
+ </Accordion>
@@ -0,0 +1,9 @@
1
+ export declare const demo: {
2
+ name: string;
3
+ description: string;
4
+ columnSpan: number;
5
+ };
6
+ import Accordion from './index';
7
+ declare const Accordion: import("svelte").Component<Record<string, never>, {}, "">;
8
+ type Accordion = ReturnType<typeof Accordion>;
9
+ export default Accordion;
@@ -0,0 +1,78 @@
1
+ <script module lang="ts">
2
+ export { default as Header } from './Header.svelte';
3
+ export { default as Content } from './Content.svelte';
4
+ </script>
5
+
6
+ <script lang="ts">
7
+ import type { Snippet } from 'svelte';
8
+ import type { HTMLAttributes } from 'svelte/elements';
9
+ import { extractStyleProps, surfaceStyle, type StyleProps } from '../../../style/surface';
10
+ import { setAccordionContext } from './context';
11
+
12
+ type Props = {
13
+ children?: Snippet;
14
+ open?: boolean;
15
+ disabled?: boolean;
16
+ onOpenChange?: (open: boolean) => void;
17
+ } & StyleProps &
18
+ Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'class' | 'style'>;
19
+
20
+ let {
21
+ children,
22
+ open = $bindable(false),
23
+ disabled = false,
24
+ onOpenChange,
25
+ ...restProps
26
+ }: Props = $props();
27
+
28
+ const extractedStyleProps = $derived.by(() => extractStyleProps(restProps));
29
+ const styleProps = $derived(extractedStyleProps.styleProps);
30
+ const forwardedProps = $derived(extractedStyleProps.restProps);
31
+ const rootStyle = $derived.by(() => surfaceStyle(styleProps, 'accordion'));
32
+
33
+ function setOpen(nextOpen: boolean) {
34
+ if (disabled || open === nextOpen) return;
35
+ open = nextOpen;
36
+ onOpenChange?.(nextOpen);
37
+ }
38
+
39
+ setAccordionContext({
40
+ get open() {
41
+ return open;
42
+ },
43
+ get disabled() {
44
+ return disabled;
45
+ },
46
+ toggle: () => setOpen(!open),
47
+ openPanel: () => setOpen(true),
48
+ closePanel: () => setOpen(false)
49
+ });
50
+ </script>
51
+
52
+ <div class="accordion" data-open={open} data-disabled={disabled} style={rootStyle} {...forwardedProps}>
53
+ {#if children}
54
+ {@render children()}
55
+ {/if}
56
+ </div>
57
+
58
+ <style>
59
+ .accordion {
60
+ --accordion-border-radius: var(--sveltely-border-radius);
61
+ --accordion-font-size: var(--sveltely-font-size);
62
+ --accordion-padding-x: var(--sveltely-padding-x);
63
+ --accordion-padding-y: var(--sveltely-padding-y);
64
+ --accordion-gap: var(--sveltely-gap);
65
+ align-self: flex-start;
66
+ min-width: 0;
67
+ border: 1px solid var(--sveltely-border-color);
68
+ border-radius: var(--accordion-border-radius);
69
+ background: var(--sveltely-background-color);
70
+ color: var(--sveltely-text-primary-color);
71
+ font-size: var(--accordion-font-size);
72
+ overflow: hidden;
73
+ }
74
+
75
+ .accordion[data-disabled='true'] {
76
+ opacity: 0.6;
77
+ }
78
+ </style>
@@ -0,0 +1,14 @@
1
+ export { default as Header } from './Header.svelte';
2
+ export { default as Content } from './Content.svelte';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLAttributes } from 'svelte/elements';
5
+ import { type StyleProps } from '../../../style/surface';
6
+ type Props = {
7
+ children?: Snippet;
8
+ open?: boolean;
9
+ disabled?: boolean;
10
+ onOpenChange?: (open: boolean) => void;
11
+ } & StyleProps & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'class' | 'style'>;
12
+ declare const Accordion: import("svelte").Component<Props, {}, "open">;
13
+ type Accordion = ReturnType<typeof Accordion>;
14
+ export default Accordion;
@@ -0,0 +1,57 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ import { getAccordionContext } from './context';
5
+
6
+ type Props = {
7
+ children?: Snippet;
8
+ } & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'class' | 'style'>;
9
+
10
+ let { children, ...props }: Props = $props();
11
+
12
+ const accordion = getAccordionContext();
13
+ </script>
14
+
15
+ <div
16
+ class="accordion-content"
17
+ data-open={accordion.open}
18
+ role="region"
19
+ aria-hidden={!accordion.open}
20
+ {...props}
21
+ >
22
+ <div class="accordion-content-inner">
23
+ {#if children}
24
+ {@render children()}
25
+ {/if}
26
+ </div>
27
+ </div>
28
+
29
+ <style>
30
+ .accordion-content {
31
+ display: grid;
32
+ grid-template-rows: 0fr;
33
+ border-top: 1px solid transparent;
34
+ transform-origin: top;
35
+ transition:
36
+ grid-template-rows 180ms ease,
37
+ border-color 180ms ease;
38
+ }
39
+
40
+ .accordion-content[data-open='true'] {
41
+ grid-template-rows: 1fr;
42
+ border-top-color: var(--sveltely-border-color);
43
+ }
44
+
45
+ .accordion-content-inner {
46
+ min-height: 0;
47
+ overflow: hidden;
48
+ padding: 0 var(--accordion-padding-x, var(--sveltely-padding-x));
49
+ color: var(--sveltely-text-secondary-color);
50
+ line-height: 1.5;
51
+ transition: padding-block 180ms ease;
52
+ }
53
+
54
+ .accordion-content[data-open='true'] .accordion-content-inner {
55
+ padding-block: var(--accordion-padding-y, var(--sveltely-padding-y));
56
+ }
57
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ type Props = {
4
+ children?: Snippet;
5
+ } & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'class' | 'style'>;
6
+ declare const Content: import("svelte").Component<Props, {}, "">;
7
+ type Content = ReturnType<typeof Content>;
8
+ export default Content;
@@ -0,0 +1,98 @@
1
+ <script lang="ts">
2
+ import { ChevronDownIcon } from '@lucide/svelte';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLButtonAttributes } from 'svelte/elements';
5
+ import { getAccordionContext, type AccordionState } from './context';
6
+
7
+ type Props = {
8
+ children?: Snippet<[AccordionState]>;
9
+ label?: string;
10
+ } & Omit<HTMLButtonAttributes, 'children' | 'class' | 'style'>;
11
+ type ButtonMouseEvent = MouseEvent & { currentTarget: EventTarget & HTMLButtonElement };
12
+
13
+ let {
14
+ children,
15
+ label,
16
+ disabled = false,
17
+ type = 'button',
18
+ onclick,
19
+ ...props
20
+ }: Props = $props();
21
+
22
+ const accordion = getAccordionContext();
23
+ const buttonDisabled = $derived(disabled || accordion.disabled);
24
+
25
+ function handleClick(event: ButtonMouseEvent) {
26
+ if (buttonDisabled) return;
27
+ onclick?.(event);
28
+ if (!event.defaultPrevented) accordion.toggle();
29
+ }
30
+ </script>
31
+
32
+ <button
33
+ {type}
34
+ class="accordion-header"
35
+ data-open={accordion.open}
36
+ aria-expanded={accordion.open}
37
+ disabled={buttonDisabled}
38
+ {...props}
39
+ onclick={handleClick}
40
+ >
41
+ <span class="accordion-header-label">
42
+ {#if children}
43
+ {@render children(accordion)}
44
+ {:else if label}
45
+ {label}
46
+ {/if}
47
+ </span>
48
+ <ChevronDownIcon class="accordion-header-icon" aria-hidden="true" />
49
+ </button>
50
+
51
+ <style>
52
+ .accordion-header {
53
+ display: flex;
54
+ width: 100%;
55
+ min-width: 0;
56
+ align-items: center;
57
+ justify-content: space-between;
58
+ border: 0;
59
+ background: transparent;
60
+ color: inherit;
61
+ gap: var(--accordion-gap, var(--sveltely-gap));
62
+ padding: var(--accordion-padding-y, var(--sveltely-padding-y))
63
+ var(--accordion-padding-x, var(--sveltely-padding-x));
64
+ font: inherit;
65
+ line-height: 1.35;
66
+ text-align: left;
67
+ transition: background-color 150ms;
68
+ }
69
+
70
+ .accordion-header:disabled {
71
+ cursor: not-allowed;
72
+ }
73
+
74
+ .accordion-header:not(:disabled) {
75
+ cursor: pointer;
76
+ }
77
+
78
+ .accordion-header:not(:disabled):hover {
79
+ background: var(--sveltely-control-background-color);
80
+ }
81
+
82
+ .accordion-header-label {
83
+ min-width: 0;
84
+ flex: 1 1 auto;
85
+ }
86
+
87
+ .accordion-header-icon {
88
+ width: 1rem;
89
+ height: 1rem;
90
+ flex: 0 0 auto;
91
+ color: var(--sveltely-text-secondary-color);
92
+ transition: transform 150ms;
93
+ }
94
+
95
+ .accordion-header[data-open='true'] :global(.accordion-header-icon) {
96
+ transform: rotate(180deg);
97
+ }
98
+ </style>
@@ -0,0 +1,10 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLButtonAttributes } from 'svelte/elements';
3
+ import { type AccordionState } from './context';
4
+ type Props = {
5
+ children?: Snippet<[AccordionState]>;
6
+ label?: string;
7
+ } & Omit<HTMLButtonAttributes, 'children' | 'class' | 'style'>;
8
+ declare const Header: import("svelte").Component<Props, {}, "">;
9
+ type Header = ReturnType<typeof Header>;
10
+ export default Header;
@@ -0,0 +1,9 @@
1
+ export type AccordionState = {
2
+ get open(): boolean;
3
+ get disabled(): boolean;
4
+ toggle: () => void;
5
+ openPanel: () => void;
6
+ closePanel: () => void;
7
+ };
8
+ export declare const setAccordionContext: (context: AccordionState) => void;
9
+ export declare const getAccordionContext: () => AccordionState;
@@ -0,0 +1,6 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ const accordionContextKey = Symbol('accordion');
3
+ export const setAccordionContext = (context) => {
4
+ setContext(accordionContextKey, context);
5
+ };
6
+ export const getAccordionContext = () => getContext(accordionContextKey);
@@ -0,0 +1,9 @@
1
+ import AccordionComponent from './Accordion.svelte';
2
+ import Header from './Header.svelte';
3
+ import Content from './Content.svelte';
4
+ declare const Accordion: typeof AccordionComponent & {
5
+ Header: typeof Header;
6
+ Content: typeof Content;
7
+ };
8
+ export default Accordion;
9
+ export type { AccordionState } from './context';
@@ -0,0 +1,7 @@
1
+ import AccordionComponent from './Accordion.svelte';
2
+ import Header from './Header.svelte';
3
+ import Content from './Content.svelte';
4
+ const Accordion = AccordionComponent;
5
+ Accordion.Header = Header;
6
+ Accordion.Content = Content;
7
+ export default Accordion;
@@ -8,6 +8,7 @@
8
8
  <script lang="ts">
9
9
  import AnimatedNumber from './AnimatedNumber.svelte';
10
10
  import Button from '../Button/Button.svelte';
11
+ import VStack from '../VStack';
11
12
 
12
13
  let value = $state(1234);
13
14
 
@@ -16,9 +17,9 @@
16
17
  };
17
18
  </script>
18
19
 
19
- <div class="vstack center gap-3">
20
+ <VStack gap={7.5}>
20
21
  <div class="text-3xl font-semibold text-[var(--sveltely-text-primary-color)]">
21
22
  <AnimatedNumber {value} />
22
23
  </div>
23
24
  <Button label="Change number" onclick={bump} />
24
- </div>
25
+ </VStack>
@@ -115,8 +115,7 @@
115
115
  <svelte:window onkeydown={handleGlobalKeyDown} />
116
116
 
117
117
  <VStack
118
- width="100%"
119
- maxWidth="860px"
118
+ width="860px"
120
119
  gap={25}
121
120
  paddingX={35}
122
121
  paddingY={25}