@axel669/zephyr 0.5.5 → 1.0.0-beta.1

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 (89) hide show
  1. package/package.json +48 -42
  2. package/readme.md +0 -44
  3. package/src/changed.svelte.js +23 -0
  4. package/src/component/adorn.svelte +9 -0
  5. package/src/component/alert.svelte +32 -0
  6. package/src/component/application.svelte +17 -0
  7. package/src/component/async-button.svelte +53 -0
  8. package/src/component/avatar.svelte +15 -0
  9. package/src/component/badge.svelte +7 -0
  10. package/src/component/button.svelte +7 -0
  11. package/src/component/chip.svelte +10 -0
  12. package/src/component/circle-spinner.svelte +6 -0
  13. package/src/component/confirm.svelte +40 -0
  14. package/src/component/control-label.svelte +41 -0
  15. package/src/component/data-table.svelte +227 -0
  16. package/src/component/details.svelte +22 -0
  17. package/src/component/dialog-element.svelte +36 -0
  18. package/src/component/dialog.svelte +43 -0
  19. package/src/component/drawer.svelte +20 -0
  20. package/src/component/flex.svelte +7 -0
  21. package/src/component/grid.svelte +7 -0
  22. package/src/component/hexagon-spinner.svelte +6 -0
  23. package/src/component/icon.svelte +7 -0
  24. package/src/component/link.svelte +11 -0
  25. package/src/component/modal.svelte +32 -0
  26. package/src/component/paper.svelte +33 -0
  27. package/src/component/popover.svelte +19 -0
  28. package/src/component/progress.svelte +6 -0
  29. package/src/component/prompt.svelte +58 -0
  30. package/src/{routing → component}/routing.svelte.js +4 -6
  31. package/src/component/screen.svelte +30 -0
  32. package/src/component/select.svelte +40 -0
  33. package/src/{async → component}/suspend.svelte +14 -8
  34. package/src/component/table.svelte +49 -0
  35. package/src/component/tabs.svelte +2 -0
  36. package/src/component/text.svelte +26 -0
  37. package/src/component/titlebar.svelte +23 -0
  38. package/src/component/toast.svelte +7 -0
  39. package/src/component/toaster.svelte +60 -0
  40. package/src/component/toggle-label.svelte +11 -0
  41. package/src/component/tooltip.svelte +11 -0
  42. package/src/main.js +40 -0
  43. package/src/ws.js +10 -0
  44. package/src/async/button.svelte +0 -41
  45. package/src/changed.js +0 -10
  46. package/src/composed/data-table/th.svelte +0 -61
  47. package/src/composed/data-table.svelte +0 -174
  48. package/src/composed/entry-button.svelte +0 -29
  49. package/src/composed/form.svelte +0 -60
  50. package/src/composed/table-functions.js +0 -15
  51. package/src/control/button.svelte +0 -39
  52. package/src/control/input.svelte +0 -103
  53. package/src/control/label.svelte +0 -49
  54. package/src/control/link.svelte +0 -47
  55. package/src/control/radio-group.svelte +0 -24
  56. package/src/control/select.svelte +0 -69
  57. package/src/control/tabs.svelte +0 -35
  58. package/src/control/toggle.svelte +0 -60
  59. package/src/custom-macros.js +0 -9
  60. package/src/data-display/avatar.svelte +0 -29
  61. package/src/data-display/badge.svelte +0 -16
  62. package/src/data-display/chip.svelte +0 -38
  63. package/src/data-display/details.svelte +0 -33
  64. package/src/data-display/popover.svelte +0 -28
  65. package/src/data-display/progress.svelte +0 -25
  66. package/src/data-display/table.svelte +0 -50
  67. package/src/data-display/tooltip.svelte +0 -19
  68. package/src/dialogs/alert.svelte +0 -41
  69. package/src/dialogs/confirm.svelte +0 -52
  70. package/src/dialogs/prompt.svelte +0 -67
  71. package/src/info/element-toaster.svelte +0 -110
  72. package/src/info/icon.svelte +0 -9
  73. package/src/info/titlebar.svelte +0 -40
  74. package/src/info/toast.svelte +0 -35
  75. package/src/info/toaster/message.svelte +0 -42
  76. package/src/info/toaster.svelte +0 -72
  77. package/src/layout/dialog.svelte +0 -25
  78. package/src/layout/drawer.svelte +0 -70
  79. package/src/layout/flex.svelte +0 -24
  80. package/src/layout/grid.svelte +0 -32
  81. package/src/layout/modal.svelte +0 -71
  82. package/src/layout/paper.svelte +0 -54
  83. package/src/layout/screen.svelte +0 -38
  84. package/src/spinner/circle-spinner.svelte +0 -18
  85. package/src/spinner/hexagon-spinner.svelte +0 -18
  86. package/src/text.svelte +0 -16
  87. package/src/wsx.js +0 -29
  88. /package/src/{routing → component}/route.svelte +0 -0
  89. /package/src/{routing → component}/title.svelte +0 -0
@@ -1,9 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- const { name, children, ...rest } = $props()
5
- </script>
6
-
7
- <ws-icon data-icon={name} use:wsx={rest}>
8
- {@render children?.()}
9
- </ws-icon>
@@ -1,40 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- const {
5
- color,
6
- fill = false,
7
- title,
8
- menu,
9
- action,
10
- ...rest
11
- } = $props()
12
-
13
- const titleProps = $derived({
14
- "$color": color,
15
- "$fill": fill,
16
- $title: true,
17
- })
18
- const wind = $derived({
19
- ...rest,
20
- })
21
- </script>
22
-
23
- <ws-titlebar use:wsx={wind}>
24
- {#if title}
25
- <div use:wsx={titleProps}>
26
- {@render title()}
27
- </div>
28
- {/if}
29
-
30
- {#if menu}
31
- <div ws-x="[$menu] [grid] [p 0px]">
32
- {@render menu()}
33
- </div>
34
- {/if}
35
- {#if action}
36
- <div ws-x="[$action] [grid] [p 0px]">
37
- {@render action()}
38
- </div>
39
- {/if}
40
- </ws-titlebar>
@@ -1,35 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- const {
5
- color,
6
- children,
7
- start,
8
- end,
9
- onclick,
10
- ...rest
11
- } = $props()
12
-
13
- const wind = $derived({
14
- "$color": color,
15
- ...rest,
16
- })
17
- </script>
18
-
19
- <!-- svelte-ignore a11y_interactive_supports_focus -->
20
- <!-- svelte-ignore a11y_click_events_have_key_events -->
21
- <ws-toast use:wsx={wind} {onclick} role="button">
22
- {#if start}
23
- <div ws-x="[$start] [grid]">
24
- {@render start()}
25
- </div>
26
- {/if}
27
- <div ws-x="[$notif-text]">
28
- {@render children?.()}
29
- </div>
30
- {#if end}
31
- <div ws-x="[$end] [grid]">
32
- {@render end()}
33
- </div>
34
- {/if}
35
- </ws-toast>
@@ -1,42 +0,0 @@
1
- <script>
2
- import Button from "../../control/button.svelte"
3
- import Icon from "../icon.svelte"
4
- import Toast from "../toast.svelte"
5
- import Text from "../../text.svelte"
6
-
7
- const {
8
- message = "",
9
- icon = false,
10
- color = false,
11
- actionText = null,
12
- onaction,
13
- } = $props()
14
-
15
- const dismiss = () => onaction({ value: null })
16
- const respond = (evt) => {
17
- evt.stopPropagation()
18
- onaction({ value: true })
19
- }
20
- </script>
21
-
22
- <Toast {color} onclick={dismiss}>
23
- {#snippet start()}
24
- <Text adorn>
25
- {#if icon !== false}
26
- <Icon name={icon} />
27
- {/if}
28
- </Text>
29
- {/snippet}
30
-
31
- <span>{message}</span>
32
-
33
- {#snippet end()}
34
- <div ws-x="[grid]">
35
- {#if actionText}
36
- <Button onclick={respond} r.l="0px" ground>
37
- {actionText}
38
- </Button>
39
- {/if}
40
- </div>
41
- {/snippet}
42
- </Toast>
@@ -1,72 +0,0 @@
1
- <script module>
2
- const genID = () => `${Date.now()}:${Math.random().toString(16)}`
3
-
4
- const delays = {}
5
- const delay = ({time, action, id}) => {
6
- const trigger = () => {
7
- const info = delays[id]
8
- clearTimeout(info.id)
9
- action()
10
- delete delays[id]
11
- }
12
- const timeoutID = setTimeout(trigger, time)
13
- delays[id] = { trigger, id: timeoutID }
14
- }
15
- delay.trigger = (id) => delays[id].trigger()
16
- </script>
17
-
18
- <script>
19
- import { fade } from "svelte/transition"
20
-
21
- import { eventHandler$ } from "../handler$.js"
22
- import wsx from "../wsx.js"
23
-
24
- import ToastMessage from "./toaster/message.svelte"
25
-
26
- const {
27
- message = ToastMessage,
28
- position = "tc",
29
- onaction,
30
- ...rest
31
- } = $props()
32
-
33
- let items = $state([])
34
-
35
- const act = eventHandler$(
36
- (evt, id, props) => {
37
- delay.trigger(id)
38
- evt.props = props
39
- onaction?.(evt)
40
- }
41
- )
42
-
43
- export const show = (duration, props) => {
44
- const id = genID()
45
- items = [...items, { id, props }]
46
- delay({
47
- action: () => items = items.filter(
48
- item => item.id !== id
49
- ),
50
- time: duration,
51
- id,
52
- })
53
- }
54
- export const clear = () => items = []
55
-
56
- const wind = $derived({
57
- [`$${position}`]: true,
58
- ...rest,
59
- })
60
- const Message = $derived(message)
61
- </script>
62
-
63
- <ws-toaster use:wsx={wind}>
64
- {#each items as {props, id} (id)}
65
- <zephyr-toast-wrapper ws-x="[grid]" transition:fade={{duration: 200}}>
66
- <Message
67
- {...props}
68
- onaction={act(id, {...props})}
69
- />
70
- </zephyr-toast-wrapper>
71
- {/each}
72
- </ws-toaster>
@@ -1,25 +0,0 @@
1
- <script>
2
- import { fade } from "svelte/transition"
3
-
4
- import wsx from "../wsx.js"
5
-
6
- import Paper from "./paper.svelte"
7
-
8
- const props = $props()
9
-
10
- const trick = (node, options) => ({
11
- delay: 0,
12
- duration: 250,
13
- css: () => "",
14
- })
15
- const onclick = (evt) => {
16
- evt.stopPropagation()
17
- }
18
- </script>
19
-
20
- <!-- svelte-ignore a11y_click_events_have_key_events -->
21
- <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
22
- <!-- svelte-ignore a11y_interactive_supports_focus -->
23
- <wind-wrapper transition:trick ws-x="@@dialog [grid]" {onclick} role="dialog">
24
- <Paper {...props} />
25
- </wind-wrapper>
@@ -1,70 +0,0 @@
1
- <script module>
2
- const defs = {
3
- select: {
4
- "@@select": true,
5
- "w.min": "35vw",
6
- grid: true,
7
- over: "hidden"
8
- },
9
- menu: {
10
- "@@menu": true,
11
- },
12
- action: {
13
- "@@action": true,
14
- }
15
- }
16
- const parseTime = (timestring) => {
17
- if (!timestring) {
18
- return 200
19
- }
20
- const { base, scale } =
21
- timestring.match(/(?<base>\d+)(?<scale>s|ms)/)?.groups ?? {}
22
- if (base === undefined) {
23
- return 200
24
- }
25
- const numeric = parseInt(base)
26
- if (scale === "ms") {
27
- return numeric
28
- }
29
- return numeric * 1000
30
- }
31
- </script>
32
-
33
- <script>
34
- import wsx from "../wsx.js"
35
-
36
- import Paper from "./paper.svelte"
37
- import { modalAnimTime } from "./modal.svelte"
38
-
39
- const {
40
- height,
41
- type = "menu",
42
- ...rest
43
- } = $props()
44
-
45
- const animTime = modalAnimTime()
46
-
47
- // When Svelte removes things from the DOM they are removed immediately
48
- // unless Svelte has a transition running. Adding this prevents the drawer
49
- // from disappearing without first letting the built in animations run.
50
- const trick = (node, options) => ({
51
- delay: 0,
52
- duration: parseTime($animTime),
53
- css: () => "",
54
- })
55
-
56
- const container = $derived({
57
- ...defs[type],
58
- $show: true,
59
- h: (type === "select") ? height : "100%",
60
- grid: true,
61
- })
62
- const onclick = (evt) => evt.stopPropagation()
63
- </script>
64
-
65
- <!-- svelte-ignore a11y_interactive_supports_focus -->
66
- <!-- svelte-ignore a11y_click_events_have_key_events -->
67
- <wind-drawer-container use:wsx={container} {onclick} role="menubar"
68
- transition:trick>
69
- <Paper r="0px" {...rest} />
70
- </wind-drawer-container>
@@ -1,24 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- const {
5
- direction = false,
6
- cross = "stretch",
7
- main = "start",
8
- scrollable = false,
9
- children,
10
- ...rest
11
- } = $props()
12
-
13
- const wind = $derived({
14
- "fl.dir": direction,
15
- "fl.cross": cross,
16
- "fl.main": main,
17
- over: (scrollable === true) ? "auto" : null,
18
- ...rest
19
- })
20
- </script>
21
-
22
- <ws-flex use:wsx={wind}>
23
- {@render children?.()}
24
- </ws-flex>
@@ -1,32 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- const {
5
- direction = false,
6
- cols = null,
7
- rows = null,
8
- autoCol = false,
9
- autoRow = false,
10
- colsFit = false,
11
- colsFill = false,
12
- scrollable = false,
13
- children,
14
- ...rest
15
- } = $props()
16
-
17
- const wind = $derived({
18
- "gr.flow": direction,
19
- "gr.cols": cols?.join?.(" ") ?? cols ?? false,
20
- "gr.rows": rows?.join?.(" ") ?? rows ?? false,
21
- "gr.cols.a": autoCol,
22
- "gr.rows.a": autoRow,
23
- "gr.cols-fit": colsFit,
24
- "gr.cols-fill": colsFill,
25
- over: (scrollable === true) ? "auto" : null,
26
- ...rest
27
- })
28
- </script>
29
-
30
- <ws-grid use:wsx={wind}>
31
- {@render children?.()}
32
- </ws-grid>
@@ -1,71 +0,0 @@
1
- <script module>
2
- import { getContext } from "svelte"
3
-
4
- let topClose = null
5
- const modalAnimTimeSymbol = Symbol("modal animation time")
6
- const modalContextSymbol = Symbol("modal context")
7
-
8
- export const modalAnimTime = () => getContext(modalAnimTimeSymbol)
9
- export const modalContext = () => getContext(modalContextSymbol)
10
- </script>
11
-
12
- <script>
13
- import { setContext } from "svelte"
14
- import { writable } from "svelte/store"
15
-
16
- import wsx from "../wsx.js"
17
- import { frameDelay } from "../internals.js"
18
-
19
- const {
20
- children,
21
- cancelable = false,
22
- animTime = "200ms"
23
- } = $props()
24
-
25
- let resolver = $state(null)
26
- let shown = $state(false)
27
-
28
- const close = (value) => {
29
- resolver(value)
30
- resolver = null
31
- shown = false
32
- if (topClose !== close) {
33
- return
34
- }
35
- topClose = null
36
- }
37
- const closeToTop = (value) => {
38
- topClose(value)
39
- }
40
- const cancel = () => {
41
- if (cancelable === false) {
42
- return
43
- }
44
- close(null)
45
- }
46
-
47
- export const show = (props) => new Promise(
48
- (resolve) => {
49
- topClose = topClose ?? close
50
- resolver = resolve
51
- frameDelay(1, () => shown = true)
52
- }
53
- )
54
-
55
- const animationTime = writable(animTime)
56
- const wind = $derived({
57
- "@anim-time": $animationTime,
58
- $show: shown === true,
59
- })
60
- setContext(modalAnimTimeSymbol, animationTime)
61
- setContext(modalContextSymbol, { close, closeToTop })
62
- </script>
63
-
64
- <!-- svelte-ignore a11y_click_events_have_key_events -->
65
- <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
66
- <!-- svelte-ignore a11y_interactive_supports_focus -->
67
- <ws-modal onclick={cancel} role="dialog" use:wsx={wind}>
68
- {#if resolver !== null}
69
- {@render children()}
70
- {/if}
71
- </ws-modal>
@@ -1,54 +0,0 @@
1
- <script>
2
- import Flex from "./flex.svelte"
3
- import wsx from "../wsx.js"
4
- import { splitProps } from "../props.js"
5
-
6
- const {
7
- color,
8
- card = false,
9
- square = false,
10
- layout = Flex,
11
- scrollable = true,
12
- children,
13
- content,
14
- header,
15
- footer,
16
- ...rest
17
- } = $props()
18
-
19
- const props = $derived(
20
- splitProps(rest, "l!")
21
- )
22
-
23
- const layoutProps = $derived({
24
- over: scrollable ? "auto" : false,
25
- $content: true,
26
- ...props["l!"],
27
- })
28
- const wind = $derived({
29
- "$color": color,
30
- "$outline": card,
31
- r: square && "0px",
32
- ...props.rest,
33
- })
34
- </script>
35
-
36
- <ws-paper use:wsx={wind}>
37
- {#if header}
38
- <div ws-x="[$header] [grid] [p 0px]">
39
- {@render header()}
40
- </div>
41
- {/if}
42
- {#if content}
43
- {@render content()}
44
- {:else}
45
- <Flex {...layoutProps}>
46
- {@render children?.()}
47
- </Flex>
48
- {/if}
49
- {#if footer}
50
- <div ws-x="[$footer] [grid] [p 0px]">
51
- {@render footer()}
52
- </div>
53
- {/if}
54
- </ws-paper>
@@ -1,38 +0,0 @@
1
- <script module>
2
- const ctxStack = Symbol("stack context")
3
- const ctxClose = Symbol("close context")
4
- </script>
5
-
6
- <script>
7
- import { getContext, setContext } from "svelte"
8
- import { fly } from "svelte/transition"
9
-
10
- import wsx from "../wsx.js"
11
-
12
- const {
13
- alignLeft = false,
14
- width = false,
15
- children,
16
- ...rest
17
- } = $props()
18
-
19
- const stack = getContext(ctxStack) ?? 0
20
- const animation = {
21
- y: window.innerHeight,
22
- duration: 350
23
- }
24
-
25
- setContext(ctxStack, stack + 1)
26
-
27
- const wind = $derived({
28
- "@stack": stack.toString(),
29
- "@screen-width": width,
30
- "bg.c": "transparent",
31
- $left: alignLeft,
32
- ...rest
33
- })
34
- </script>
35
-
36
- <ws-screen use:wsx={wind} transition:fly={animation}>
37
- {@render children?.()}
38
- </ws-screen>
@@ -1,18 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- const {
5
- size = "100px",
6
- color = "@primary",
7
- ...rest
8
- } = $props()
9
-
10
- const wind = $derived({
11
- ...rest,
12
- "@size": size,
13
- "$color": color,
14
- })
15
- </script>
16
-
17
- <!-- svelte-ignore element_invalid_self_closing_tag -->
18
- <ws-circle-spinner use:wsx={wind} style="aspect-ratio: 1 / 1;" />
@@ -1,18 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- const {
5
- size = "100px",
6
- color = "@primary",
7
- ...rest
8
- } = $props()
9
-
10
- const wind = $derived({
11
- ...rest,
12
- "@size": size,
13
- "$color": color,
14
- })
15
- </script>
16
-
17
- <!-- svelte-ignore element_invalid_self_closing_tag -->
18
- <ws-hexagon-spinner use:wsx={wind} style="aspect-ratio: 1 / 1;" />
package/src/text.svelte DELETED
@@ -1,16 +0,0 @@
1
- <script>
2
- import wsx from "./wsx.js"
3
-
4
- const { adorn, subtitle, title, children, ...rest } = $props()
5
-
6
- const wind = $derived({
7
- "$title-text": title,
8
- "$subtitle-text": subtitle,
9
- "$adorn": adorn,
10
- ...rest
11
- })
12
- </script>
13
-
14
- <span use:wsx={wind}>
15
- {@render children?.()}
16
- </span>
package/src/wsx.js DELETED
@@ -1,29 +0,0 @@
1
- import ws from "./wind.js"
2
-
3
- export const none = Symbol("none")
4
- export default (node, props) => {
5
- const update = (props) => {
6
- const { slot = null, ...goodProps } = props ?? {}
7
- if (goodProps === null || goodProps === undefined) {
8
- node.setAttribute("ws-x", null)
9
- return
10
- }
11
- const formatted = Object.entries(goodProps).reduce(
12
- (props, [key, value]) => {
13
- if (key === none) {
14
- return props
15
- }
16
- const realKey = key.replace(/^!/, "").replaceAll("_", ":")
17
- props[realKey] = value
18
- return props
19
- },
20
- {}
21
- )
22
- node.setAttribute(
23
- "ws-x",
24
- ws.x(formatted)
25
- )
26
- }
27
- update(props)
28
- return { update }
29
- }
File without changes
File without changes