@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,69 +0,0 @@
1
- <script module>
2
- const groupOptions = (options) => options.reduce(
3
- ({grouped, target = grouped}, item, pos) => {
4
- const opt = { ... item, pos }
5
- if (item.group === undefined) {
6
- target.push(opt)
7
- return { grouped, target }
8
- }
9
- const next = [opt]
10
- grouped.push(next)
11
- return { grouped, target: next }
12
- },
13
- { grouped: [] }
14
- ).grouped
15
- </script>
16
-
17
- <script>
18
- import wsx from "../wsx.js"
19
-
20
- let {
21
- disabled = false,
22
- color = "@default",
23
- flat = false,
24
- label = null,
25
- options = [],
26
- value = $bindable(),
27
- ...rest
28
- } = $props()
29
-
30
- const update = (evt) => value = options[evt.target.value].value
31
-
32
- const indexValue = $derived(
33
- options.findIndex(item => item.value === value)
34
- )
35
-
36
- const grouped = $derived(
37
- groupOptions(options)
38
- )
39
-
40
- const wind = $derived({
41
- "@@control": true,
42
- "$flat": flat,
43
- "$color": color,
44
- ...rest,
45
- })
46
- </script>
47
-
48
- <label use:wsx={wind}>
49
- {#if label}
50
- <span ws-x="[$label]">{label}</span>
51
- {/if}
52
- <select value={indexValue} oninput={update} {disabled}>
53
- {#each grouped as item, index}
54
- {#if Array.isArray(item) === false}
55
- <option value={item.pos}>
56
- {item.label}
57
- </option>
58
- {:else}
59
- <optgroup label={item[0].group}>
60
- {#each item.slice(1) as subitem, subindex}
61
- <option value={subitem.pos}>
62
- {subitem.label}
63
- </option>
64
- {/each}
65
- </optgroup>
66
- {/if}
67
- {/each}
68
- </select>
69
- </label>
@@ -1,35 +0,0 @@
1
- <script>
2
- import { writable } from "svelte/store"
3
-
4
- import wsx from "../wsx.js"
5
- import { handler$ } from "../handler$.js"
6
- import { splitProps } from "../props.js"
7
-
8
- let {
9
- color = "@default",
10
- fill = false,
11
- options = [],
12
- value = $bindable(),
13
- vertical = false,
14
- ...rest
15
- } = $props()
16
-
17
- const props = $derived(
18
- splitProps(rest, "t!")
19
- )
20
- const wind = $derived({
21
- "$fill": fill,
22
- "$color": color,
23
- $vert: vertical,
24
- ...props.rest,
25
- })
26
- </script>
27
-
28
- <ws-tabs use:wsx={wind} role="tablist">
29
- {#each options as tab, i}
30
- <label>
31
- <input type="radio" value={tab.value} bind:group={value} />
32
- <ws-tab use:wsx={props["t!"]}>{tab.label}</ws-tab>
33
- </label>
34
- {/each}
35
- </ws-tabs>
@@ -1,60 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- let {
5
- color = "@default",
6
- checkbox = false,
7
- checked = $bindable(),
8
- flat = false,
9
- group = $bindable(),
10
- label = "",
11
- reverse = false,
12
- value,
13
- children,
14
- ...rest
15
- } = $props()
16
-
17
- const container = $derived({
18
- "@@toggle": true,
19
- "$flat": flat,
20
- "$color": color,
21
- "fl.dir": reverse ? "row-reverse" : false,
22
- ...rest,
23
- })
24
- const input = $derived({
25
- "@@switch": checkbox === false
26
- })
27
-
28
- const updateGroup = (checked) => {
29
- if (Array.isArray(group) === false) {
30
- return
31
- }
32
- if (checked === true) {
33
- if (group.includes(value) === true) {
34
- return
35
- }
36
- group.push(value)
37
- return
38
- }
39
- if (group.includes(value) === false) {
40
- return
41
- }
42
- group.splice(group.indexOf(value), 1)
43
- }
44
- const get = () => checked
45
- const set = (next) => {
46
- checked = next
47
- updateGroup(next)
48
- }
49
- </script>
50
-
51
- <label use:wsx={container}>
52
- <div>
53
- {#if children}
54
- {@render children()}
55
- {:else}
56
- {label}
57
- {/if}
58
- </div>
59
- <input type="checkbox" bind:checked={get,set} use:wsx={input} />
60
- </label>
@@ -1,9 +0,0 @@
1
- const head = document.head
2
- const macros = document.createElement("style")
3
- macros.setAttribute("ws-root", "")
4
- macros.innerHTML = `
5
- .ws-style {
6
- --con: "contain: {$}";
7
- }
8
- `
9
- head.append(macros)
@@ -1,29 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- let {
5
- alt = "",
6
- image = null,
7
-
8
- text = "",
9
-
10
- color = false,
11
- ...rest
12
- } = $props()
13
-
14
- const wind = $derived({
15
- "$color": color,
16
- ...rest
17
- })
18
- </script>
19
-
20
- <ws-avatar use:wsx={wind}>
21
- {#if image !== null}
22
- <!-- svelte-ignore a11y_missing_attribute -->
23
- <object data={image} type="image/png">
24
- {alt}
25
- </object>
26
- {:else}
27
- {text}
28
- {/if}
29
- </ws-avatar>
@@ -1,16 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- let {
5
- color = null,
6
- text = "",
7
- children,
8
- ...rest
9
- } = $props()
10
-
11
- const wind = $derived({ "$color": color, ...rest })
12
- </script>
13
-
14
- <ws-badge ws-text={text} use:wsx={wind}>
15
- {@render children?.()}
16
- </ws-badge>
@@ -1,38 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
- import variant from "../variant.js"
4
-
5
- let {
6
- color = "@default",
7
- clickable = false,
8
-
9
- fill = false,
10
- outline = false,
11
- flat = false,
12
- children,
13
- onclick,
14
- ...rest
15
- } = $props()
16
-
17
- const type = $derived(
18
- variant(
19
- "$outline",
20
- { fill },
21
- { outline },
22
- { flat },
23
- )
24
- )
25
-
26
- const wind = $derived({
27
- [type]: true,
28
- "$color": color,
29
- "@@click": clickable,
30
- ...rest
31
- })
32
- </script>
33
-
34
- <!-- svelte-ignore a11y_interactive_supports_focus -->
35
- <!-- svelte-ignore a11y_click_events_have_key_events -->
36
- <ws-chip use:wsx={wind} {onclick} role="button">
37
- {@render children?.()}
38
- </ws-chip>
@@ -1,33 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
- import { splitProps } from "../props.js"
4
-
5
- let {
6
- label,
7
- outline,
8
- color = "@default",
9
- open = false,
10
- children,
11
- ...rest
12
- } = $props()
13
-
14
- const props = $derived(
15
- splitProps(rest, "s!")
16
- )
17
- const wind = $derived({
18
- "$color": color,
19
- "$outline": outline,
20
- ...props.rest,
21
- })
22
- </script>
23
-
24
- <details use:wsx={wind} bind:open>
25
- <summary use:wsx={props["s!"]}>
26
- {#if typeof label === "string"}
27
- {label}
28
- {:else}
29
- {@render label?.()}
30
- {/if}
31
- </summary>
32
- {@render children?.()}
33
- </details>
@@ -1,28 +0,0 @@
1
- <script>
2
- import { fade } from "svelte/transition"
3
- import wsx from "../wsx.js"
4
-
5
- let {
6
- visible = $bindable(false),
7
- content,
8
- popover,
9
- ...rest
10
- } = $props()
11
- const show = () => visible = true
12
- const hide = () => visible = false
13
- const anim = { duration: 250 }
14
-
15
- const wind = $derived({
16
- $show: true,
17
- ...rest,
18
- })
19
- </script>
20
-
21
- <ws-popover use:wsx={wind}>
22
- {@render content?.(show)}
23
- {#if visible}
24
- <wind-content ws-x="[$content] [inset 0px]" transition:fade={anim}>
25
- {@render popover?.(hide)}
26
- </wind-content>
27
- {/if}
28
- </ws-popover>
@@ -1,25 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- const {
5
- buffer = 0,
6
- busy = false,
7
- color = "@default",
8
- max = 1,
9
- min = 0,
10
- value = 0,
11
- ...rest
12
- } = $props()
13
-
14
- const wind = $derived({
15
- "$color": color,
16
- ...rest,
17
- })
18
-
19
- const busyStatus = $derived(
20
- (busy === true) ? { busy: true } : {}
21
- )
22
- </script>
23
-
24
- <!-- svelte-ignore element_invalid_self_closing_tag -->
25
- <ws-progress use:wsx={wind} {...busyStatus} {min} {max} {value} {buffer} />
@@ -1,50 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- const {
5
- color = "@default",
6
- data = [],
7
- fillHeader = false,
8
- stickyHeader = false,
9
- cols = "1fr",
10
- header,
11
- row,
12
- emptyRow,
13
- ...rest
14
- } = $props()
15
-
16
- const wind = $derived({
17
- "$color": color,
18
- "$fill-header": fillHeader,
19
- "$sticky-header": stickyHeader,
20
- "gr.cols": cols,
21
- ...rest,
22
- })
23
- </script>
24
-
25
- <table use:wsx={wind}>
26
- <thead>
27
- {#if header}
28
- {@render header()}
29
- {:else}
30
- <tr>
31
- <th>No Header Template</th>
32
- </tr>
33
- {/if}
34
- </thead>
35
- <tbody>
36
- {#each data as rowValue, rowNum}
37
- {#if rowValue === undefined}
38
- {@render emptyRow(rowNum)}
39
- {:else}
40
- {#if row}
41
- {@render row(rowValue, rowNum)}
42
- {:else}
43
- <tr>
44
- <td>No Row Template</td>
45
- </tr>
46
- {/if}
47
- {/if}
48
- {/each}
49
- </tbody>
50
- </table>
@@ -1,19 +0,0 @@
1
- <script>
2
- import wsx from "../wsx.js"
3
-
4
- const {
5
- text = "",
6
- bottom = false,
7
- children,
8
- ...rest
9
- } = $props()
10
-
11
- const wind = $derived({
12
- $bottom: bottom,
13
- ...rest,
14
- })
15
- </script>
16
-
17
- <ws-tooltip ws-text={text} use:wsx={wind}>
18
- {@render children?.()}
19
- </ws-tooltip>
@@ -1,41 +0,0 @@
1
- <script>
2
- import Button from "../control/button.svelte"
3
- import Dialog from "../layout/dialog.svelte"
4
- import Icon from "../info/icon.svelte"
5
- import Text from "../text.svelte"
6
- import Titlebar from "../info/titlebar.svelte"
7
- import { modalContext } from "../layout/modal.svelte"
8
-
9
- const {
10
- color = "@default",
11
- icon,
12
- message,
13
- okText = "OK",
14
- title: titleText = "Alert",
15
- } = $props()
16
- const { close } = modalContext()
17
- </script>
18
-
19
- <Dialog card {color}>
20
- {#snippet header()}
21
- <Titlebar {color}>
22
- {#snippet title()}
23
- <Text title>
24
- <Icon name={icon}>
25
- {titleText}
26
- </Icon>
27
- </Text>
28
- {/snippet}
29
- </Titlebar>
30
- {/snippet}
31
-
32
- <Text>
33
- {message}
34
- </Text>
35
-
36
- {#snippet footer()}
37
- <Button onclick={() => close(true)} {color} ground>
38
- {okText}
39
- </Button>
40
- {/snippet}
41
- </Dialog>
@@ -1,52 +0,0 @@
1
- <script>
2
- import Button from "../control/button.svelte"
3
- import Dialog from "../layout/dialog.svelte"
4
- import Grid from "../layout/grid.svelte"
5
- import Icon from "../info/icon.svelte"
6
- import Text from "../text.svelte"
7
- import Titlebar from "../info/titlebar.svelte"
8
- import { modalContext } from "../layout/modal.svelte"
9
-
10
- import { handler$ } from "../handler$.js"
11
-
12
- const {
13
- title: titleText = "Confirm",
14
- icon,
15
- message,
16
- okText = "OK",
17
- cancelText = "Cancel",
18
- color = "@default",
19
- } = $props()
20
-
21
- const { close } = modalContext()
22
- const cls = handler$(close)
23
- </script>
24
-
25
- <Dialog card {color}>
26
- {#snippet header()}
27
- <Titlebar {color}>
28
- {#snippet title()}
29
- <Text title>
30
- <Icon name={icon}>
31
- {titleText}
32
- </Icon>
33
- </Text>
34
- {/snippet}
35
- </Titlebar>
36
- {/snippet}
37
-
38
- <Text>
39
- {message}
40
- </Text>
41
-
42
- {#snippet footer()}
43
- <Grid cols="1fr 1fr" p="0px">
44
- <Button onclick={cls(false)} color="@danger" ground>
45
- {cancelText}
46
- </Button>
47
- <Button onclick={cls(true)} color="@secondary" ground>
48
- {okText}
49
- </Button>
50
- </Grid>
51
- {/snippet}
52
- </Dialog>
@@ -1,67 +0,0 @@
1
- <script>
2
- import Button from "../control/button.svelte"
3
- import Dialog from "../layout/dialog.svelte"
4
- import Grid from "../layout/grid.svelte"
5
- import Icon from "../info/icon.svelte"
6
- import Input from "../control/input.svelte"
7
- import Text from "../text.svelte"
8
- import Titlebar from "../info/titlebar.svelte"
9
- import { modalContext } from "../layout/modal.svelte"
10
-
11
- import { handler$ } from "../handler$.js"
12
- import { frameDelay } from "../internals.js"
13
-
14
- let {
15
- title: titleText = "Confirm",
16
- icon,
17
- message,
18
- okText = "OK",
19
- cancelText = "Cancel",
20
- color = "@default",
21
- value = $bindable(""),
22
- initial = ""
23
- } = $props()
24
-
25
- const { close } = modalContext()
26
- const cls = handler$(close)
27
- let input = $state(null)
28
-
29
- const done = (evt) => {
30
- evt.preventDefault()
31
- evt.stopPropagation()
32
- close(true)
33
- }
34
-
35
- // the first 1-2 frames it's in the DOM it's not visible, focus didn't work
36
- frameDelay(3, () => input.focus())
37
- value = initial
38
- </script>
39
-
40
- <Dialog card {color}>
41
- {#snippet header()}
42
- <Titlebar {color}>
43
- {#snippet title()}
44
- <Text title>
45
- <Icon name={icon}>
46
- {titleText}
47
- </Icon>
48
- </Text>
49
- {/snippet}
50
- </Titlebar>
51
- {/snippet}
52
-
53
- <form onsubmit={done} ws-x="[grid]">
54
- <Input bind:value {color} bind:this={input} label={message} />
55
- </form>
56
-
57
- {#snippet footer()}
58
- <Grid cols="1fr 1fr" p="0px">
59
- <Button onclick={cls(false)} color="@danger" ground>
60
- {cancelText}
61
- </Button>
62
- <Button onclick={cls(true)} color="@secondary" ground>
63
- {okText}
64
- </Button>
65
- </Grid>
66
- {/snippet}
67
- </Dialog>
@@ -1,110 +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
-
17
- const macros = {
18
- top: {
19
- x: "50%",
20
- tf: "translateX(-50%)",
21
- "-y": "100%",
22
- flex: "column-reverse",
23
- },
24
- bottom: {
25
- x: "50%",
26
- tf: "translateX(-50%)",
27
- "y": "100%",
28
- flex: "column"
29
- },
30
- left: {
31
- y: "50%",
32
- tf: "translateY(-50%)",
33
- "-x": "100%",
34
- flex: "row-reverse"
35
- },
36
- right: {
37
- y: "50%",
38
- tf: "translateY(-50%)",
39
- "x": "100%",
40
- flex: "row"
41
- },
42
- }
43
- </script>
44
-
45
- <script>
46
- import { fade } from "svelte/transition"
47
-
48
- import { eventHandler$ } from "../handler$.js"
49
- import wsx from "../wsx.js"
50
-
51
- import ToastMessage from "./toaster/message.svelte"
52
-
53
- const {
54
- component = ToastMessage,
55
- position = "top",
56
- content,
57
- onaction,
58
- ...rest
59
- } = $props()
60
-
61
- let items = $state([])
62
-
63
- const act = eventHandler$(
64
- (evt, id, props) => {
65
- delay.trigger(id)
66
- evt.props = props
67
- onaction?.(evt)
68
- // dispatch(
69
- // "action",
70
- // { value: evt.detail, props }
71
- // )
72
- }
73
- )
74
-
75
- export const show = (duration, props) => {
76
- const id = genID()
77
- items = [...items, { id, props }]
78
- delay({
79
- action: () => items = items.filter(
80
- item => item.id !== id
81
- ),
82
- time: duration,
83
- id,
84
- })
85
- }
86
- export const clear = () => items = []
87
-
88
- const wind = $derived({
89
- gap: "8px",
90
- pos: "absolute",
91
- z: "50",
92
- ...macros[position],
93
- ...rest,
94
- })
95
- const Message = $derived(component)
96
- </script>
97
-
98
- <zephyr-element-toaster ws-x="[disp inline-grid] [pos relative]">
99
- {@render content?.(show)}
100
- <zephyr-element-toast-messages use:wsx={wind}>
101
- {#each items as {props, id} (id)}
102
- <zephyr-toast-wrapper ws-x="[grid]" transition:fade={{duration: 200}}>
103
- <Message
104
- {...props}
105
- onaction={act(id, props)}
106
- />
107
- </zephyr-toast-wrapper>
108
- {/each}
109
- </zephyr-element-toast-messages>
110
- </zephyr-element-toaster>