@x33025/sveltely 0.1.9 → 0.1.11

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 (59) hide show
  1. package/dist/components/Library/ArticleEditor/ArticleBlockCode.svelte +21 -0
  2. package/dist/components/Library/ArticleEditor/ArticleBlockCode.svelte.d.ts +8 -0
  3. package/dist/components/Library/ArticleEditor/ArticleBlockDragControl.svelte +144 -0
  4. package/dist/components/Library/ArticleEditor/ArticleBlockDragControl.svelte.d.ts +14 -0
  5. package/dist/components/Library/ArticleEditor/ArticleBlockFAQ.svelte +47 -0
  6. package/dist/components/Library/ArticleEditor/ArticleBlockFAQ.svelte.d.ts +8 -0
  7. package/dist/components/Library/ArticleEditor/ArticleBlockFallback.svelte +79 -0
  8. package/dist/components/Library/ArticleEditor/ArticleBlockFallback.svelte.d.ts +15 -0
  9. package/dist/components/Library/ArticleEditor/ArticleBlockHeading.svelte +73 -0
  10. package/dist/components/Library/ArticleEditor/ArticleBlockHeading.svelte.d.ts +14 -0
  11. package/dist/components/Library/ArticleEditor/ArticleBlockImage.svelte +48 -0
  12. package/dist/components/Library/ArticleEditor/ArticleBlockImage.svelte.d.ts +9 -0
  13. package/dist/components/Library/ArticleEditor/ArticleBlockInsertControl.svelte +120 -0
  14. package/dist/components/Library/ArticleEditor/ArticleBlockInsertControl.svelte.d.ts +9 -0
  15. package/dist/components/Library/ArticleEditor/ArticleBlockList.svelte +114 -0
  16. package/dist/components/Library/ArticleEditor/ArticleBlockList.svelte.d.ts +15 -0
  17. package/dist/components/Library/ArticleEditor/ArticleBlockParagraph.svelte +79 -0
  18. package/dist/components/Library/ArticleEditor/ArticleBlockParagraph.svelte.d.ts +15 -0
  19. package/dist/components/Library/ArticleEditor/ArticleBlockShell.svelte +127 -0
  20. package/dist/components/Library/ArticleEditor/ArticleBlockShell.svelte.d.ts +22 -0
  21. package/dist/components/Library/ArticleEditor/ArticleBlockTable.svelte +274 -0
  22. package/dist/components/Library/ArticleEditor/ArticleBlockTable.svelte.d.ts +13 -0
  23. package/dist/components/Library/ArticleEditor/ArticleEditor.svelte +192 -0
  24. package/dist/components/Library/ArticleEditor/ArticleEditor.svelte.d.ts +39 -0
  25. package/dist/components/Library/ArticleEditor/ArticleEditorBody.svelte +328 -0
  26. package/dist/components/Library/ArticleEditor/ArticleEditorBody.svelte.d.ts +31 -0
  27. package/dist/components/Library/ArticleEditor/ArticleEditorHeader.svelte +57 -0
  28. package/dist/components/Library/ArticleEditor/ArticleEditorHeader.svelte.d.ts +11 -0
  29. package/dist/components/Library/ArticleEditor/ArticleImagePreview.svelte +71 -0
  30. package/dist/components/Library/ArticleEditor/ArticleImagePreview.svelte.d.ts +8 -0
  31. package/dist/components/Library/ArticleEditor/articleEditor.svelte.js +532 -0
  32. package/dist/components/Library/ArticleEditor/index.d.ts +18 -0
  33. package/dist/components/Library/ArticleEditor/index.js +16 -0
  34. package/dist/components/Library/ArticleEditor/types.d.ts +37 -0
  35. package/dist/components/Library/ArticleEditor/types.js +1 -0
  36. package/dist/components/Library/Floating/Floating.svelte +8 -8
  37. package/dist/components/Library/Grid/index.d.ts +1 -0
  38. package/dist/components/Library/Grid/index.js +1 -0
  39. package/dist/components/Library/Sheet/Sheet.svelte +1 -0
  40. package/dist/components/Library/TextEditor/TextEditor.svelte +90 -0
  41. package/dist/components/Library/TextEditor/TextEditor.svelte.d.ts +17 -0
  42. package/dist/components/Library/TextEditor/index.d.ts +1 -0
  43. package/dist/components/Library/TextEditor/index.js +1 -0
  44. package/dist/components/Local/ComponentGrid.svelte +1 -1
  45. package/dist/index.d.ts +3 -1
  46. package/dist/index.js +3 -1
  47. package/dist/style/index.css +1 -0
  48. package/dist/style/layout.d.ts +2 -2
  49. package/dist/style/layout.js +2 -3
  50. package/dist/style/loader.d.ts +2 -2
  51. package/dist/style/loader.js +2 -3
  52. package/dist/style/surface.d.ts +2 -2
  53. package/dist/style/surface.js +2 -3
  54. package/dist/style.css +233 -0
  55. package/package.json +1 -1
  56. package/dist/components/Library/GridItem/index.d.ts +0 -1
  57. package/dist/components/Library/GridItem/index.js +0 -1
  58. /package/dist/components/Library/{GridItem → Grid}/GridItem.svelte +0 -0
  59. /package/dist/components/Library/{GridItem → Grid}/GridItem.svelte.d.ts +0 -0
@@ -303,7 +303,7 @@
303
303
  }
304
304
  }
305
305
 
306
- function handleOutsideClick(event: MouseEvent) {
306
+ function handleOutsidePointerDown(event: PointerEvent) {
307
307
  if (!open) return;
308
308
  if (isEventInFloatingTree(event)) return;
309
309
  closePanel();
@@ -316,6 +316,7 @@
316
316
 
317
317
  function handlePointerMove(event: MouseEvent) {
318
318
  if (!closeOnPointerLeave) return;
319
+ if (!parentFloatingId) return;
319
320
  if (!open || !triggerEl || !panelEl) return;
320
321
  if (isEventInFloatingTree(event)) return;
321
322
  if (hasOpenChild(floatingId)) return;
@@ -323,10 +324,10 @@
323
324
  const pointer = { x: event.clientX, y: event.clientY };
324
325
  const triggerRect = triggerEl.getBoundingClientRect();
325
326
  const floatingRect = panelEl.getBoundingClientRect();
326
- const safePolygon = getSafePolygon(triggerRect, floatingRect, resolvedAnchor);
327
327
 
328
328
  if (isInsideRect(triggerRect, pointer.x, pointer.y)) return;
329
329
  if (isInsideRect(floatingRect, pointer.x, pointer.y)) return;
330
+ const safePolygon = getSafePolygon(triggerRect, floatingRect, resolvedAnchor);
330
331
  if (pointInPolygon(pointer, safePolygon)) return;
331
332
 
332
333
  closePanel();
@@ -343,9 +344,11 @@
343
344
  if (event.type === 'scroll' && isEventInFloatingTree(event)) return;
344
345
  closePanel();
345
346
  };
347
+ window.addEventListener('pointerdown', handleOutsidePointerDown, true);
346
348
  window.addEventListener('scroll', handleWindowChange, true);
347
349
  window.addEventListener('resize', handleWindowChange);
348
350
  return () => {
351
+ window.removeEventListener('pointerdown', handleOutsidePointerDown, true);
349
352
  window.removeEventListener('scroll', handleWindowChange, true);
350
353
  window.removeEventListener('resize', handleWindowChange);
351
354
  };
@@ -356,7 +359,8 @@
356
359
  '--sveltely-floating-inset: var(--sveltely-inset);',
357
360
  `top: ${panelCoords.top}px;`,
358
361
  `left: ${panelCoords.left}px;`,
359
- `transform: ${panelTransform};`
362
+ `transform: ${panelTransform};`,
363
+ 'box-shadow: var(--sveltely-shadow);'
360
364
  ];
361
365
  if (computedPanelRadius) {
362
366
  declarations.push(`border-radius: ${computedPanelRadius};`);
@@ -368,11 +372,7 @@
368
372
  });
369
373
  </script>
370
374
 
371
- <svelte:window
372
- onclick={handleOutsideClick}
373
- onkeydown={handleEscape}
374
- onmousemove={handlePointerMove}
375
- />
375
+ <svelte:window onkeydown={handleEscape} onmousemove={handlePointerMove} />
376
376
 
377
377
  <div
378
378
  bind:this={rootEl}
@@ -1 +1,2 @@
1
1
  export { default } from './Grid.svelte';
2
+ export { default as GridItem } from './GridItem.svelte';
@@ -1 +1,2 @@
1
1
  export { default } from './Grid.svelte';
2
+ export { default as GridItem } from './GridItem.svelte';
@@ -106,6 +106,7 @@
106
106
  .sheet {
107
107
  border-radius: var(--sveltely-border-radius);
108
108
  background: var(--sveltely-background-color);
109
+ box-shadow: var(--sveltely-shadow);
109
110
  padding: calc(var(--sveltely-padding-y) * 1.33) calc(var(--sveltely-padding-x) * 1.33);
110
111
  }
111
112
 
@@ -0,0 +1,90 @@
1
+ <script lang="ts">
2
+ import { textEditorStyle, type TextEditorProps } from '../../../style/text-editor';
3
+
4
+ type Props = {
5
+ value?: string;
6
+ rows?: number;
7
+ placeholder?: string;
8
+ spellcheck?: boolean;
9
+ autosize?: boolean;
10
+ className?: string;
11
+ onInput?: (event: Event) => void;
12
+ onKeyDown?: (event: KeyboardEvent) => void;
13
+ shouldFocus?: boolean;
14
+ focusPosition?: number | null;
15
+ onFocused?: () => void;
16
+ } & TextEditorProps;
17
+
18
+ let {
19
+ value = '',
20
+ rows = 1,
21
+ placeholder,
22
+ spellcheck,
23
+ autosize = false,
24
+ className = '',
25
+ onInput,
26
+ onKeyDown,
27
+ shouldFocus = false,
28
+ focusPosition = null,
29
+ onFocused,
30
+ textAlign
31
+ }: Props = $props();
32
+
33
+ let textarea: HTMLTextAreaElement | undefined;
34
+ const rootStyle = $derived(textEditorStyle({ textAlign }, 'text-editor'));
35
+
36
+ const resize = () => {
37
+ if (!autosize || !textarea) return;
38
+ textarea.style.height = 'auto';
39
+ textarea.style.height = `${textarea.scrollHeight}px`;
40
+ };
41
+
42
+ $effect(() => {
43
+ value;
44
+ resize();
45
+ });
46
+
47
+ $effect(() => {
48
+ if (!shouldFocus || !textarea) return;
49
+ requestAnimationFrame(() => {
50
+ if (!textarea) return;
51
+ textarea.focus();
52
+ const position = focusPosition ?? textarea.value.length;
53
+ textarea.setSelectionRange(position, position);
54
+ onFocused?.();
55
+ });
56
+ });
57
+ </script>
58
+
59
+ <textarea
60
+ bind:this={textarea}
61
+ {value}
62
+ {rows}
63
+ {placeholder}
64
+ {spellcheck}
65
+ style={rootStyle}
66
+ oninput={(event) => {
67
+ resize();
68
+ onInput?.(event);
69
+ }}
70
+ onkeydown={(event) => onKeyDown?.(event)}
71
+ class={`text-editor ${className}`}
72
+ ></textarea>
73
+
74
+ <style>
75
+ .text-editor {
76
+ width: 100%;
77
+ border: 0;
78
+ background: transparent;
79
+ color: inherit;
80
+ outline: none;
81
+ overflow: hidden;
82
+ padding: 0;
83
+ resize: none;
84
+ text-align: var(--text-editor-text-align, start);
85
+ }
86
+
87
+ .text-editor:where([rows='1']) {
88
+ min-height: 1lh;
89
+ }
90
+ </style>
@@ -0,0 +1,17 @@
1
+ import { type TextEditorProps } from '../../../style/text-editor';
2
+ type Props = {
3
+ value?: string;
4
+ rows?: number;
5
+ placeholder?: string;
6
+ spellcheck?: boolean;
7
+ autosize?: boolean;
8
+ className?: string;
9
+ onInput?: (event: Event) => void;
10
+ onKeyDown?: (event: KeyboardEvent) => void;
11
+ shouldFocus?: boolean;
12
+ focusPosition?: number | null;
13
+ onFocused?: () => void;
14
+ } & TextEditorProps;
15
+ declare const TextEditor: import("svelte").Component<Props, {}, "">;
16
+ type TextEditor = ReturnType<typeof TextEditor>;
17
+ export default TextEditor;
@@ -0,0 +1 @@
1
+ export { default } from './TextEditor.svelte';
@@ -0,0 +1 @@
1
+ export { default } from './TextEditor.svelte';
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import type { Component } from 'svelte';
3
3
  import Grid from '../Library/Grid';
4
- import GridItem from '../Library/GridItem';
4
+ import { GridItem } from '../Library/Grid';
5
5
  import HeroCard from './HeroCard.svelte';
6
6
 
7
7
  type DemoEntry = {
package/dist/index.d.ts CHANGED
@@ -16,11 +16,12 @@ export type { ScrollAxisValue } from './style/scroll';
16
16
  export { TextAlignment, TextFieldType, TextInputMode } from './style/text-editor';
17
17
  export type { TextAlignmentValue, TextEditorProps, TextFieldTypeValue, TextInputModeValue } from './style/text-editor';
18
18
  export { default as AnimatedNumber } from './components/Library/AnimatedNumber';
19
+ export * from './components/Library/ArticleEditor';
19
20
  export { default as Button } from './components/Library/Button';
20
21
  export { default as Checkbox } from './components/Library/Checkbox';
21
22
  export { default as GlowEffect } from './components/Library/GlowEffect';
22
23
  export { default as Grid } from './components/Library/Grid';
23
- export { default as GridItem } from './components/Library/GridItem';
24
+ export { GridItem } from './components/Library/Grid';
24
25
  export { default as HStack } from './components/Library/HStack';
25
26
  export { default as Image } from './components/Library/Image';
26
27
  export { default as ImageMask } from './components/Library/ImageMask';
@@ -41,6 +42,7 @@ export { default as Sheet } from './components/Library/Sheet';
41
42
  export { default as Spacer } from './components/Library/Spacer';
42
43
  export { default as Spinner } from './components/Library/Spinner';
43
44
  export { default as TextShimmer } from './components/Library/TextShimmer';
45
+ export { default as TextEditor } from './components/Library/TextEditor';
44
46
  export { default as TextField } from './components/Library/TextField';
45
47
  export { default as Popover } from './components/Library/Popover';
46
48
  export { default as ChipInput } from './components/Library/ChipInput';
package/dist/index.js CHANGED
@@ -8,11 +8,12 @@ export { ImageFit, ImageLoading } from './style/media';
8
8
  export { ScrollAxis } from './style/scroll';
9
9
  export { TextAlignment, TextFieldType, TextInputMode } from './style/text-editor';
10
10
  export { default as AnimatedNumber } from './components/Library/AnimatedNumber';
11
+ export * from './components/Library/ArticleEditor';
11
12
  export { default as Button } from './components/Library/Button';
12
13
  export { default as Checkbox } from './components/Library/Checkbox';
13
14
  export { default as GlowEffect } from './components/Library/GlowEffect';
14
15
  export { default as Grid } from './components/Library/Grid';
15
- export { default as GridItem } from './components/Library/GridItem';
16
+ export { GridItem } from './components/Library/Grid';
16
17
  export { default as HStack } from './components/Library/HStack';
17
18
  export { default as Image } from './components/Library/Image';
18
19
  export { default as ImageMask } from './components/Library/ImageMask';
@@ -32,6 +33,7 @@ export { default as Sheet } from './components/Library/Sheet';
32
33
  export { default as Spacer } from './components/Library/Spacer';
33
34
  export { default as Spinner } from './components/Library/Spinner';
34
35
  export { default as TextShimmer } from './components/Library/TextShimmer';
36
+ export { default as TextEditor } from './components/Library/TextEditor';
35
37
  export { default as TextField } from './components/Library/TextField';
36
38
  export { default as Popover } from './components/Library/Popover';
37
39
  export { default as ChipInput } from './components/Library/ChipInput';
@@ -20,6 +20,7 @@
20
20
  --sveltely-hover-color: color-mix(in oklab, var(--sveltely-active-color) 5%, transparent);
21
21
  --sveltely-inactive-hover-color: color-mix(in oklab, var(--sveltely-inactive-color) 88%, white);
22
22
  --sveltely-active-hover-color: color-mix(in oklab, var(--sveltely-active-color) 88%, white);
23
+ --sveltely-shadow: 0 16px 40px rgb(0 0 0 / 0.12), 0 4px 14px rgb(0 0 0 / 0.08);
23
24
  --sveltely-border-radius-nested: clamp(
24
25
  0px,
25
26
  calc(var(--sveltely-border-radius) - var(--sveltely-nested-inset)),
@@ -39,9 +39,9 @@ export type LayoutProps = {
39
39
  align?: LayoutAlignment;
40
40
  justify?: LayoutJustification;
41
41
  };
42
- export declare const extractLayoutProps: <T extends Record<PropertyKey, unknown>>(props: T) => {
42
+ export declare const extractLayoutProps: <T extends Record<string, unknown>>(props: T) => {
43
43
  layoutProps: Partial<LayoutProps>;
44
- restProps: Record<PropertyKey, unknown>;
44
+ restProps: Record<string, unknown>;
45
45
  };
46
46
  export declare const layoutStyle: (styles?: LayoutProps) => string;
47
47
  export {};
@@ -69,9 +69,8 @@ const justifyValues = {
69
69
  export const extractLayoutProps = (props) => {
70
70
  const layoutProps = {};
71
71
  const restProps = {};
72
- for (const key of Reflect.ownKeys(props)) {
73
- const value = props[key];
74
- if (typeof key === 'string' && LAYOUT_PROP_KEYS.has(key)) {
72
+ for (const [key, value] of Object.entries(props)) {
73
+ if (LAYOUT_PROP_KEYS.has(key)) {
75
74
  layoutProps[key] = value;
76
75
  continue;
77
76
  }
@@ -2,8 +2,8 @@ import type { LoaderOptions } from '../actions/loader';
2
2
  export type LoaderProps = {
3
3
  loader?: LoaderOptions;
4
4
  };
5
- export declare const extractLoaderProps: <T extends Record<PropertyKey, unknown>>(props: T) => {
5
+ export declare const extractLoaderProps: <T extends Record<string, unknown>>(props: T) => {
6
6
  loaderProps: LoaderProps;
7
- restProps: Record<PropertyKey, unknown>;
7
+ restProps: Record<string, unknown>;
8
8
  };
9
9
  export declare const resolveLoaderOptions: (props?: LoaderProps) => LoaderOptions;
@@ -2,9 +2,8 @@ const LOADER_PROP_KEYS = new Set(['loader']);
2
2
  export const extractLoaderProps = (props) => {
3
3
  const loaderProps = {};
4
4
  const restProps = {};
5
- for (const key of Reflect.ownKeys(props)) {
6
- const value = props[key];
7
- if (typeof key === 'string' && LOADER_PROP_KEYS.has(key)) {
5
+ for (const [key, value] of Object.entries(props)) {
6
+ if (LOADER_PROP_KEYS.has(key)) {
8
7
  loaderProps[key] = value;
9
8
  continue;
10
9
  }
@@ -10,8 +10,8 @@ export type StyleProps = {
10
10
  color?: string;
11
11
  };
12
12
  export type SurfaceStyles = StyleProps;
13
- export declare const extractStyleProps: <T extends Record<PropertyKey, unknown>>(props: T) => {
13
+ export declare const extractStyleProps: <T extends Record<string, unknown>>(props: T) => {
14
14
  styleProps: Partial<StyleProps>;
15
- restProps: Record<PropertyKey, unknown>;
15
+ restProps: Record<string, unknown>;
16
16
  };
17
17
  export declare const surfaceStyle: (styles?: SurfaceStyles, prefix?: string) => string;
@@ -19,9 +19,8 @@ const pushVar = (declarations, name, value) => {
19
19
  export const extractStyleProps = (props) => {
20
20
  const styleProps = {};
21
21
  const restProps = {};
22
- for (const key of Reflect.ownKeys(props)) {
23
- const value = props[key];
24
- if (typeof key === 'string' && STYLE_PROP_KEYS.has(key)) {
22
+ for (const [key, value] of Object.entries(props)) {
23
+ if (STYLE_PROP_KEYS.has(key)) {
25
24
  styleProps[key] = value;
26
25
  continue;
27
26
  }