@rokkit/ui 1.0.0-next.124 → 1.0.0-next.127
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.
- package/README.md +198 -101
- package/package.json +52 -34
- package/src/components/BreadCrumbs.svelte +82 -0
- package/src/components/Button.svelte +87 -0
- package/src/components/ButtonGroup.svelte +18 -0
- package/src/components/Card.svelte +61 -0
- package/src/components/Carousel.svelte +169 -0
- package/src/components/Code.svelte +185 -0
- package/src/components/Connector.svelte +46 -0
- package/src/components/FloatingAction.svelte +331 -0
- package/src/components/FloatingNavigation.svelte +228 -0
- package/src/components/ItemContent.svelte +24 -0
- package/src/components/List.svelte +476 -0
- package/src/components/Menu.svelte +421 -0
- package/src/components/MultiSelect.svelte +521 -0
- package/src/components/PaletteManager.svelte +354 -0
- package/src/components/Pill.svelte +78 -0
- package/src/components/ProgressBar.svelte +31 -0
- package/src/components/Range.svelte +325 -0
- package/src/components/Rating.svelte +91 -0
- package/src/components/Reveal.svelte +58 -0
- package/src/components/SearchFilter.svelte +80 -0
- package/src/components/Select.svelte +585 -0
- package/src/{Shine.svelte → components/Shine.svelte} +29 -21
- package/src/components/Stepper.svelte +169 -0
- package/src/components/Switch.svelte +75 -0
- package/src/components/Table.svelte +243 -0
- package/src/components/Tabs.svelte +268 -0
- package/src/components/Tilt.svelte +68 -0
- package/src/components/Timeline.svelte +61 -0
- package/src/components/Toggle.svelte +157 -0
- package/src/components/Toolbar.svelte +307 -0
- package/src/components/ToolbarGroup.svelte +17 -0
- package/src/components/Tree.svelte +613 -0
- package/src/components/index.ts +33 -0
- package/src/index.ts +41 -0
- package/src/types/button.ts +83 -0
- package/src/types/code.ts +46 -0
- package/src/types/floating-action.ts +118 -0
- package/src/types/floating-navigation.ts +68 -0
- package/src/types/index.ts +53 -0
- package/src/types/item-proxy.ts +358 -0
- package/src/types/list.ts +196 -0
- package/src/types/menu.ts +195 -0
- package/src/types/palette.ts +143 -0
- package/src/types/range.ts +51 -0
- package/src/types/search-filter.ts +67 -0
- package/src/types/select.ts +206 -0
- package/src/types/switch.ts +64 -0
- package/src/types/table.ts +210 -0
- package/src/types/tabs.ts +124 -0
- package/src/types/timeline.ts +51 -0
- package/src/types/toggle.ts +109 -0
- package/src/types/toolbar.ts +164 -0
- package/src/types/tree.ts +259 -0
- package/src/utils/palette.ts +582 -0
- package/src/utils/shiki.ts +122 -0
- package/dist/constants.d.ts +0 -2
- package/dist/index.d.ts +0 -41
- package/dist/lib/fields.d.ts +0 -16
- package/dist/lib/form.d.ts +0 -95
- package/dist/lib/index.d.ts +0 -6
- package/dist/lib/layout.d.ts +0 -7
- package/dist/lib/nested.d.ts +0 -48
- package/dist/lib/schema.d.ts +0 -7
- package/dist/lib/select.d.ts +0 -8
- package/dist/lib/tree.d.ts +0 -9
- package/dist/tree/List.spec.svelte.d.ts +0 -1
- package/dist/tree/Node.spec.svelte.d.ts +0 -1
- package/dist/tree/Root.spec.svelte.d.ts +0 -1
- package/dist/types.d.ts +0 -5
- package/dist/wrappers/index.d.ts +0 -3
- package/src/Accordion.svelte +0 -118
- package/src/BreadCrumbs.svelte +0 -32
- package/src/Button.svelte +0 -57
- package/src/Calendar.svelte +0 -93
- package/src/Card.svelte +0 -45
- package/src/Carousel.svelte +0 -49
- package/src/CheckBox.svelte +0 -56
- package/src/Connector.svelte +0 -40
- package/src/DropDown.svelte +0 -68
- package/src/DropSearch.svelte +0 -37
- package/src/Fillable.svelte +0 -19
- package/src/GraphPaper.svelte +0 -43
- package/src/Icon.svelte +0 -81
- package/src/Item.svelte +0 -25
- package/src/Link.svelte +0 -21
- package/src/List.svelte +0 -89
- package/src/ListBody.svelte +0 -43
- package/src/Message.svelte +0 -11
- package/src/MultiSelect.svelte +0 -48
- package/src/NestedList.svelte +0 -78
- package/src/NestedPaginator.svelte +0 -63
- package/src/Node.svelte +0 -76
- package/src/Overlay.svelte +0 -21
- package/src/PageNavigator.svelte +0 -94
- package/src/PickOne.svelte +0 -60
- package/src/Pill.svelte +0 -41
- package/src/ProgressBar.svelte +0 -21
- package/src/ProgressDots.svelte +0 -53
- package/src/RadioGroup.svelte +0 -52
- package/src/Range.svelte +0 -45
- package/src/RangeMinMax.svelte +0 -124
- package/src/RangeSlider.svelte +0 -79
- package/src/RangeTick.svelte +0 -28
- package/src/Rating.svelte +0 -95
- package/src/ResponsiveGrid.svelte +0 -88
- package/src/Scrollable.svelte +0 -7
- package/src/Select.svelte +0 -114
- package/src/Separator.svelte +0 -1
- package/src/Slider.svelte +0 -14
- package/src/SlidingColumns.svelte +0 -50
- package/src/Stage.svelte +0 -41
- package/src/Stepper.svelte +0 -66
- package/src/Summary.svelte +0 -22
- package/src/Switch.svelte +0 -106
- package/src/TableCell.svelte +0 -51
- package/src/TableHeaderCell.svelte +0 -54
- package/src/Tabs.svelte +0 -176
- package/src/Tilt.svelte +0 -66
- package/src/Toggle.svelte +0 -58
- package/src/ToggleThemeMode.svelte +0 -23
- package/src/Tree.svelte +0 -80
- package/src/TreeTable.svelte +0 -171
- package/src/ValidationReport.svelte +0 -23
- package/src/constants.js +0 -4
- package/src/index.js +0 -48
- package/src/lib/fields.js +0 -118
- package/src/lib/form.js +0 -72
- package/src/lib/index.js +0 -13
- package/src/lib/layout.js +0 -63
- package/src/lib/nested.js +0 -192
- package/src/lib/schema.js +0 -32
- package/src/lib/select.js +0 -38
- package/src/lib/tree.js +0 -22
- package/src/tree/List.spec.svelte.js +0 -84
- package/src/tree/List.svelte +0 -78
- package/src/tree/Node.spec.svelte.js +0 -104
- package/src/tree/Node.svelte +0 -80
- package/src/tree/Root.spec.svelte.js +0 -63
- package/src/tree/Root.svelte +0 -81
- package/src/types.js +0 -9
- package/src/wrappers/Category.svelte +0 -27
- package/src/wrappers/Section.svelte +0 -16
- package/src/wrappers/Wrapper.svelte +0 -12
- package/src/wrappers/index.js +0 -3
package/src/CheckBox.svelte
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { defaultStateIcons } from '@rokkit/core'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @typedef {Object} Props
|
|
6
|
-
* @property {string} [class]
|
|
7
|
-
* @property {any} [id]
|
|
8
|
-
* @property {any} name
|
|
9
|
-
* @property {boolean} [value]
|
|
10
|
-
* @property {boolean} [readOnly]
|
|
11
|
-
* @property {any} [stateIcons]
|
|
12
|
-
* @property {number} [tabindex]
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
/** @type {Props} */
|
|
16
|
-
let {
|
|
17
|
-
class: classes = '',
|
|
18
|
-
id = null,
|
|
19
|
-
name,
|
|
20
|
-
value = $bindable(false),
|
|
21
|
-
readOnly = false,
|
|
22
|
-
stateIcons = defaultStateIcons.checkbox,
|
|
23
|
-
tabindex = 0
|
|
24
|
-
} = $props()
|
|
25
|
-
|
|
26
|
-
let state = $derived(value === null ? 'unknown' : value ? 'checked' : 'unchecked')
|
|
27
|
-
|
|
28
|
-
function toggle(event) {
|
|
29
|
-
event.preventDefault()
|
|
30
|
-
event.stopPropagation()
|
|
31
|
-
value = !value
|
|
32
|
-
}
|
|
33
|
-
function handleClick(event) {
|
|
34
|
-
if (!readOnly) toggle(event)
|
|
35
|
-
}
|
|
36
|
-
function handleKeydown(event) {
|
|
37
|
-
if (readOnly) return
|
|
38
|
-
if (event.key === 'Enter' || event.key === ' ') toggle(event)
|
|
39
|
-
}
|
|
40
|
-
</script>
|
|
41
|
-
|
|
42
|
-
<rk-checkbox
|
|
43
|
-
{id}
|
|
44
|
-
class={classes}
|
|
45
|
-
class:disabled={readOnly}
|
|
46
|
-
role="checkbox"
|
|
47
|
-
aria-checked={state}
|
|
48
|
-
aria-disabled={readOnly}
|
|
49
|
-
onclick={handleClick}
|
|
50
|
-
onkeydown={handleKeydown}
|
|
51
|
-
{tabindex}
|
|
52
|
-
>
|
|
53
|
-
<input hidden type="checkbox" {name} {readOnly} bind:checked={value} />
|
|
54
|
-
|
|
55
|
-
<icon class={stateIcons[state]}></icon>
|
|
56
|
-
</rk-checkbox>
|
package/src/Connector.svelte
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
/**
|
|
3
|
-
* @typedef {Object} Props
|
|
4
|
-
* @property {import('./types.js').ConnectionType} [type]
|
|
5
|
-
* @property {boolean} [rtl=false]
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/** @type {Props} */
|
|
9
|
-
let { type = $bindable('empty'), rtl = false } = $props()
|
|
10
|
-
let validatedType = $derived(['last', 'child', 'sibling'].includes(type) ? type : 'empty')
|
|
11
|
-
</script>
|
|
12
|
-
|
|
13
|
-
<span
|
|
14
|
-
class="grid h-full w-4 min-w-4 grid-cols-2 grid-rows-2"
|
|
15
|
-
data-tag-tree-line
|
|
16
|
-
data-tag-line-empty={validatedType === 'empty' ? '' : undefined}
|
|
17
|
-
data-tag-line-child={validatedType === 'child' ? '' : undefined}
|
|
18
|
-
data-tag-line-sibling={validatedType === 'sibling' ? '' : undefined}
|
|
19
|
-
data-tag-line-last={validatedType === 'last' ? '' : undefined}
|
|
20
|
-
>
|
|
21
|
-
{#if validatedType === 'last'}
|
|
22
|
-
{#if rtl}
|
|
23
|
-
<i class="border-b border-r"></i>
|
|
24
|
-
{:else}
|
|
25
|
-
<i class="border-r"></i>
|
|
26
|
-
<i class="border-b"></i>
|
|
27
|
-
{/if}
|
|
28
|
-
{:else if validatedType === 'child'}
|
|
29
|
-
{#if rtl}
|
|
30
|
-
<i class="row-span-2 grid grid-rows-2 border-r">
|
|
31
|
-
<i class="border-b"></i>
|
|
32
|
-
</i>
|
|
33
|
-
{:else}
|
|
34
|
-
<i class="col-span-1 row-span-2 border-r"></i>
|
|
35
|
-
<i class="border-b"></i>
|
|
36
|
-
{/if}
|
|
37
|
-
{:else if validatedType === 'sibling'}
|
|
38
|
-
<i class="row-span-2 border-r"></i>
|
|
39
|
-
{/if}
|
|
40
|
-
</span>
|
package/src/DropDown.svelte
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { defaultFields, defaultStateIcons } from '@rokkit/core'
|
|
3
|
-
import { dismissable } from '@rokkit/actions'
|
|
4
|
-
import Icon from './Icon.svelte'
|
|
5
|
-
import Slider from './Slider.svelte'
|
|
6
|
-
import Item from './Item.svelte'
|
|
7
|
-
import List from './List.svelte'
|
|
8
|
-
|
|
9
|
-
let {
|
|
10
|
-
class: className,
|
|
11
|
-
options = [],
|
|
12
|
-
fields = defaultFields,
|
|
13
|
-
using = { default: Item },
|
|
14
|
-
value = null,
|
|
15
|
-
title = null,
|
|
16
|
-
icon = null,
|
|
17
|
-
small = false,
|
|
18
|
-
disabled = false
|
|
19
|
-
} = $props()
|
|
20
|
-
|
|
21
|
-
using = { default: Item, ...using }
|
|
22
|
-
fields = { ...defaultFields, ...fields }
|
|
23
|
-
|
|
24
|
-
let offsetTop = $state(0)
|
|
25
|
-
let open = $state(false)
|
|
26
|
-
let icons = defaultStateIcons.selector
|
|
27
|
-
|
|
28
|
-
function handleSelect(event) {
|
|
29
|
-
open = false
|
|
30
|
-
// dispatch('change', event.detail)
|
|
31
|
-
}
|
|
32
|
-
</script>
|
|
33
|
-
|
|
34
|
-
<drop-down
|
|
35
|
-
class="dropdown relative flex cursor-pointer select-none {className}"
|
|
36
|
-
class:open
|
|
37
|
-
aria-haspopup="true"
|
|
38
|
-
aria-controls="menu"
|
|
39
|
-
>
|
|
40
|
-
<button
|
|
41
|
-
class="flex items-center"
|
|
42
|
-
bind:clientHeight={offsetTop}
|
|
43
|
-
tabindex="0"
|
|
44
|
-
use:dismissable
|
|
45
|
-
ondismiss={() => (open = false)}
|
|
46
|
-
onfocus={() => (open = true)}
|
|
47
|
-
onblur={() => (open = false)}
|
|
48
|
-
>
|
|
49
|
-
<span class="flex items-center">
|
|
50
|
-
{#if icon !== null}
|
|
51
|
-
<Icon name={icon} />
|
|
52
|
-
{/if}
|
|
53
|
-
{#if !small && title}
|
|
54
|
-
<p class="flex w-full">{title}</p>
|
|
55
|
-
{/if}
|
|
56
|
-
{#if open}
|
|
57
|
-
<Icon name={icons.opened} />
|
|
58
|
-
{:else}
|
|
59
|
-
<Icon name={icons.closed} />
|
|
60
|
-
{/if}
|
|
61
|
-
</span>
|
|
62
|
-
</button>
|
|
63
|
-
{#if open}
|
|
64
|
-
<Slider top={offsetTop + 4}>
|
|
65
|
-
<List items={options} {fields} {using} bind:value onselect={handleSelect} tabindex="-1" />
|
|
66
|
-
</Slider>
|
|
67
|
-
{/if}
|
|
68
|
-
</drop-down>
|
package/src/DropSearch.svelte
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { defaultFields, getText } from '@rokkit/core'
|
|
3
|
-
import Select from './Select.svelte'
|
|
4
|
-
|
|
5
|
-
let { options, name, value, fields = defaultFields, ...restProps } = $props()
|
|
6
|
-
|
|
7
|
-
let searchText = $state('')
|
|
8
|
-
let searchBox
|
|
9
|
-
let filtered = $state(options)
|
|
10
|
-
|
|
11
|
-
fields = { ...defaultFields, ...fields }
|
|
12
|
-
|
|
13
|
-
function applySearch(event) {
|
|
14
|
-
searchText = event.target.value
|
|
15
|
-
if (searchText) {
|
|
16
|
-
filtered = options.filter((option) =>
|
|
17
|
-
getText(option, fields).toLowerCase().includes(searchText.toLowerCase())
|
|
18
|
-
)
|
|
19
|
-
} else filtered = options
|
|
20
|
-
}
|
|
21
|
-
function handleSelect(event) {
|
|
22
|
-
value = event.detail
|
|
23
|
-
searchText = getText(event.detail, fields)
|
|
24
|
-
}
|
|
25
|
-
</script>
|
|
26
|
-
|
|
27
|
-
<Select {name} bind:value bind:options={filtered} {...restProps} {fields} onselect={handleSelect}>
|
|
28
|
-
<span class="flex flex-grow">
|
|
29
|
-
<input
|
|
30
|
-
type="text"
|
|
31
|
-
class="w-full border-none bg-transparent p-0"
|
|
32
|
-
bind:value={searchText}
|
|
33
|
-
bind:this={searchBox}
|
|
34
|
-
onchange={applySearch}
|
|
35
|
-
/>
|
|
36
|
-
</span>
|
|
37
|
-
</Select>
|
package/src/Fillable.svelte
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { marked } from 'marked'
|
|
3
|
-
import { mangle } from 'marked-mangle'
|
|
4
|
-
import { gfmHeadingId } from 'marked-gfm-heading-id'
|
|
5
|
-
import { fillable } from '@rokkit/actions'
|
|
6
|
-
|
|
7
|
-
export let text = ''
|
|
8
|
-
export let options = []
|
|
9
|
-
export let current = 0
|
|
10
|
-
export let check = false
|
|
11
|
-
|
|
12
|
-
marked.use(mangle())
|
|
13
|
-
marked.use(gfmHeadingId())
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<!-- eslint-disable svelte/no-at-html-tags -->
|
|
17
|
-
<div use:fillable={{ options, current, check }} on:remove class="flex-grow">
|
|
18
|
-
{@html marked(text)}
|
|
19
|
-
</div>
|
package/src/GraphPaper.svelte
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
let {
|
|
3
|
-
class: className = '',
|
|
4
|
-
unit = '.5rem',
|
|
5
|
-
majorGridSize = 5,
|
|
6
|
-
minorGridThickness = 0.5,
|
|
7
|
-
majorGridThickness = 0.5,
|
|
8
|
-
children
|
|
9
|
-
} = $props()
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<div
|
|
13
|
-
data-graph-paper
|
|
14
|
-
class="flex flex-col {className}"
|
|
15
|
-
style:--unit={unit}
|
|
16
|
-
style:--size="calc( {majorGridSize} * {unit})"
|
|
17
|
-
style:--minor-grid="{minorGridThickness}px"
|
|
18
|
-
style:--major-grid="{majorGridThickness}px"
|
|
19
|
-
>
|
|
20
|
-
<content class="flex flex-col">
|
|
21
|
-
{@render children?.()}
|
|
22
|
-
</content>
|
|
23
|
-
</div>
|
|
24
|
-
|
|
25
|
-
<style>
|
|
26
|
-
[data-graph-paper] {
|
|
27
|
-
background-image:
|
|
28
|
-
linear-gradient(currentColor var(--major-grid), transparent var(--major-grid)),
|
|
29
|
-
linear-gradient(90deg, currentColor var(--major-grid), transparent var(--major-grid)),
|
|
30
|
-
linear-gradient(currentColor var(--minor-grid), transparent var(--minor-grid)),
|
|
31
|
-
linear-gradient(90deg, currentColor var(--minor-grid), transparent var(--minor-grid));
|
|
32
|
-
background-size:
|
|
33
|
-
var(--size) var(--size),
|
|
34
|
-
var(--size) var(--size),
|
|
35
|
-
var(--unit) var(--unit),
|
|
36
|
-
var(--unit) var(--unit);
|
|
37
|
-
background-position:
|
|
38
|
-
calc(-1 * var(--minor-grid)) calc(-1 * var(--minor-grid)),
|
|
39
|
-
calc(-1 * var(--minor-grid)) calc(-1 * var(--minor-grid)),
|
|
40
|
-
calc(-1 * var(--minor-grid)) calc(-1 * var(--minor-grid)),
|
|
41
|
-
calc(-1 * var(--minor-grid)) calc(-1 * var(--minor-grid));
|
|
42
|
-
}
|
|
43
|
-
</style>
|
package/src/Icon.svelte
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
/**
|
|
3
|
-
* @typedef {Object} Props
|
|
4
|
-
* @property {string} [class]
|
|
5
|
-
* @property {any} name
|
|
6
|
-
* @property {any} [state]
|
|
7
|
-
* @property {string} [size]
|
|
8
|
-
* @property {'img'|'button'|'checkbox'|'option'} [role]
|
|
9
|
-
* @property {any} [label]
|
|
10
|
-
* @property {boolean} [disabled]
|
|
11
|
-
* @property {number} [tabindex]
|
|
12
|
-
* @property {any} [checked]
|
|
13
|
-
* @event {MouseEvent} [onclick]
|
|
14
|
-
* @event {CustomEvent} [onchange]
|
|
15
|
-
* @event {MouseEvent} [onmouseenter]
|
|
16
|
-
* @event {MouseEvent} [onmouseleave]
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
/** @type {Props} */
|
|
20
|
-
let {
|
|
21
|
-
ref = $bindable(),
|
|
22
|
-
class: classes = '',
|
|
23
|
-
name = '?',
|
|
24
|
-
state = null,
|
|
25
|
-
size = 'base',
|
|
26
|
-
role = 'img',
|
|
27
|
-
label = null,
|
|
28
|
-
disabled = false,
|
|
29
|
-
tabindex = $bindable(0),
|
|
30
|
-
checked = $bindable(),
|
|
31
|
-
onclick,
|
|
32
|
-
onchange,
|
|
33
|
-
onmouseenter,
|
|
34
|
-
onmouseleave,
|
|
35
|
-
...restProps
|
|
36
|
-
} = $props()
|
|
37
|
-
|
|
38
|
-
function handleClick(e) {
|
|
39
|
-
if (role === 'img') return
|
|
40
|
-
e.preventDefault()
|
|
41
|
-
|
|
42
|
-
if (!disabled) {
|
|
43
|
-
if (isCheckbox) {
|
|
44
|
-
checked = !Boolean(checked)
|
|
45
|
-
onchange?.(checked)
|
|
46
|
-
}
|
|
47
|
-
onclick?.()
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
let isCheckbox = $derived(role === 'checkbox' || role === 'option')
|
|
52
|
-
let validatedTabindex = $derived(role === 'img' || disabled ? -1 : tabindex)
|
|
53
|
-
let ariaChecked = $derived(['checkbox', 'option'].includes(role) && checked)
|
|
54
|
-
</script>
|
|
55
|
-
|
|
56
|
-
<!-- svelte-ignore a11y_no_noninteractive_tabindex -->
|
|
57
|
-
<icon
|
|
58
|
-
bind:this={ref}
|
|
59
|
-
data-tag-icon
|
|
60
|
-
data-state={state}
|
|
61
|
-
data-tag-button={role === 'button' ? true : undefined}
|
|
62
|
-
data-tag-checkbox={isCheckbox ? true : undefined}
|
|
63
|
-
data-size={size}
|
|
64
|
-
data-disabled={disabled}
|
|
65
|
-
class={classes}
|
|
66
|
-
{role}
|
|
67
|
-
aria-label={label ?? name}
|
|
68
|
-
aria-checked={ariaChecked}
|
|
69
|
-
onclick={handleClick}
|
|
70
|
-
onkeydown={(e) => e.key === 'Enter' && e.currentTarget.click()}
|
|
71
|
-
tabindex={validatedTabindex}
|
|
72
|
-
{onmouseenter}
|
|
73
|
-
{onmouseleave}
|
|
74
|
-
{...restProps}
|
|
75
|
-
>
|
|
76
|
-
{#if name.length <= 2}
|
|
77
|
-
<span>{name}</span>
|
|
78
|
-
{:else}
|
|
79
|
-
<i class={name} aria-hidden="true"></i>
|
|
80
|
-
{/if}
|
|
81
|
-
</icon>
|
package/src/Item.svelte
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import Icon from './Icon.svelte'
|
|
3
|
-
import { Proxy } from '@rokkit/states'
|
|
4
|
-
/**
|
|
5
|
-
* @typedef {Object} Props
|
|
6
|
-
* @property {import('@rokkit/states').NodeProxy} [value]
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/** @type {Props} */
|
|
10
|
-
let { value, fields, proxy = null } = $props()
|
|
11
|
-
let proxyItem = $derived(proxy ?? new Proxy(value, fields))
|
|
12
|
-
let content = $derived(proxyItem.get('text'))
|
|
13
|
-
let ariaLabel = $derived(proxyItem.get('label') ?? content)
|
|
14
|
-
let icon = $derived(proxyItem.get('icon'))
|
|
15
|
-
let image = $derived(proxyItem.get('image'))
|
|
16
|
-
</script>
|
|
17
|
-
|
|
18
|
-
{#if icon}
|
|
19
|
-
<Icon name={icon} label={ariaLabel} />
|
|
20
|
-
{:else if image}
|
|
21
|
-
<img src={image} alt={ariaLabel} />
|
|
22
|
-
{/if}
|
|
23
|
-
{#if content}
|
|
24
|
-
<p>{content}</p>
|
|
25
|
-
{/if}
|
package/src/Link.svelte
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { FieldMapper } from '@rokkit/core'
|
|
3
|
-
import Item from './Item.svelte'
|
|
4
|
-
/**
|
|
5
|
-
* @typedef {Object} Props
|
|
6
|
-
* @property {string} [class]
|
|
7
|
-
* @property {string|Object} [value]
|
|
8
|
-
* @property {FieldMapper} [mapping]
|
|
9
|
-
* @property {string} [href]
|
|
10
|
-
* @property {Object} [rest]
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/** @type {Props} */
|
|
14
|
-
let { class: classes = '', value, mapping = new FieldMapper(), href = '#', ...rest } = $props()
|
|
15
|
-
let url = $derived(mapping.get('href', value, href))
|
|
16
|
-
let props = $derived({ ...mapping.get('props', value, {}), ...rest })
|
|
17
|
-
</script>
|
|
18
|
-
|
|
19
|
-
<a href={url} class={classes} {...props}>
|
|
20
|
-
<Item {value} {mapping} />
|
|
21
|
-
</a>
|
package/src/List.svelte
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { createEmitter } from '@rokkit/core'
|
|
3
|
-
import { navigator } from '@rokkit/actions'
|
|
4
|
-
import ListBody from './ListBody.svelte'
|
|
5
|
-
import { ListController } from '@rokkit/states'
|
|
6
|
-
import { omit, has } from 'ramda'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @typedef {Object} Props
|
|
10
|
-
* @property {string} [class]
|
|
11
|
-
* @property {string} [name]
|
|
12
|
-
* @property {any} [items]
|
|
13
|
-
* @property {import('@rokkit/core').FieldMapping} [fields]
|
|
14
|
-
* @property {any} [value]
|
|
15
|
-
* @property {number} [tabindex]
|
|
16
|
-
* @property {any} [hierarchy]
|
|
17
|
-
* @property {import('svelte').Snippet} [children]
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
/** @type {Props} */
|
|
21
|
-
let {
|
|
22
|
-
class: classes = '',
|
|
23
|
-
name = 'list',
|
|
24
|
-
items = $bindable([]),
|
|
25
|
-
value = $bindable(null),
|
|
26
|
-
fields,
|
|
27
|
-
tabindex = 0,
|
|
28
|
-
hierarchy = [],
|
|
29
|
-
multiSelect = false,
|
|
30
|
-
header,
|
|
31
|
-
footer,
|
|
32
|
-
empty,
|
|
33
|
-
onselect,
|
|
34
|
-
onchange,
|
|
35
|
-
onmove,
|
|
36
|
-
...snippets
|
|
37
|
-
} = $props()
|
|
38
|
-
|
|
39
|
-
let selected = $state([])
|
|
40
|
-
|
|
41
|
-
function handleAction(event) {
|
|
42
|
-
const { name, data } = event.detail
|
|
43
|
-
|
|
44
|
-
if (has(name, emitter)) {
|
|
45
|
-
value = data.value
|
|
46
|
-
selected = data.selected
|
|
47
|
-
emitter[name](data)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
let emitter = createEmitter({ onchange, onmove, onselect }, ['select', 'change', 'move'])
|
|
52
|
-
let wrapper = new ListController(items, value, fields, { multiSelect })
|
|
53
|
-
</script>
|
|
54
|
-
|
|
55
|
-
<div
|
|
56
|
-
data-list
|
|
57
|
-
class={classes}
|
|
58
|
-
role="listbox"
|
|
59
|
-
aria-label={name}
|
|
60
|
-
use:navigator={{ wrapper }}
|
|
61
|
-
{tabindex}
|
|
62
|
-
onaction={handleAction}
|
|
63
|
-
>
|
|
64
|
-
{#if header}
|
|
65
|
-
<div data-list-header>{@render header()}</div>
|
|
66
|
-
{/if}
|
|
67
|
-
<div data-list-body>
|
|
68
|
-
{#if items.length === 0}
|
|
69
|
-
{#if empty}
|
|
70
|
-
{@render empty()}
|
|
71
|
-
{:else}
|
|
72
|
-
<p>No items found.</p>
|
|
73
|
-
{/if}
|
|
74
|
-
{:else}
|
|
75
|
-
<ListBody
|
|
76
|
-
bind:items
|
|
77
|
-
bind:value
|
|
78
|
-
{fields}
|
|
79
|
-
selectedKeys={wrapper.selectedKeys}
|
|
80
|
-
focusedKey={wrapper.focusedKey}
|
|
81
|
-
onchange={emitter.change}
|
|
82
|
-
{snippets}
|
|
83
|
-
/>
|
|
84
|
-
{/if}
|
|
85
|
-
</div>
|
|
86
|
-
{#if footer}
|
|
87
|
-
<div data-list-footer>{@render footer()}</div>
|
|
88
|
-
{/if}
|
|
89
|
-
</div>
|
package/src/ListBody.svelte
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { getKeyFromPath, FieldMapper, getSnippet } from '@rokkit/core'
|
|
3
|
-
import Item from './Item.svelte'
|
|
4
|
-
import { equals } from 'ramda'
|
|
5
|
-
|
|
6
|
-
let {
|
|
7
|
-
items = $bindable([]),
|
|
8
|
-
value = null,
|
|
9
|
-
fields,
|
|
10
|
-
path = [],
|
|
11
|
-
onchange = () => {},
|
|
12
|
-
selectedKeys = new SvelteSet(),
|
|
13
|
-
focusedKey = null,
|
|
14
|
-
snippets = {}
|
|
15
|
-
} = $props()
|
|
16
|
-
let fm = $derived.by(() => {
|
|
17
|
-
return new FieldMapper(fields)
|
|
18
|
-
})
|
|
19
|
-
</script>
|
|
20
|
-
|
|
21
|
-
{#each items as item, index (index)}
|
|
22
|
-
{@const template = getSnippet(snippets, fm.get('snippet', item, 'stub'))}
|
|
23
|
-
{@const pathKey = getKeyFromPath([...path, index])}
|
|
24
|
-
{@const props = fm.get('props', item) || {}}
|
|
25
|
-
<div
|
|
26
|
-
data-list-item
|
|
27
|
-
role="option"
|
|
28
|
-
data-path={pathKey}
|
|
29
|
-
aria-selected={selectedKeys.has(pathKey)}
|
|
30
|
-
aria-current={focusedKey === pathKey}
|
|
31
|
-
>
|
|
32
|
-
<svelte:boundary>
|
|
33
|
-
{#if template}
|
|
34
|
-
{@render template(item, props, onchange)}
|
|
35
|
-
{#snippet failed()}
|
|
36
|
-
<Item value={item} {fields} />
|
|
37
|
-
{/snippet}
|
|
38
|
-
{:else}
|
|
39
|
-
<Item value={item} {fields} />
|
|
40
|
-
{/if}
|
|
41
|
-
</svelte:boundary>
|
|
42
|
-
</div>
|
|
43
|
-
{/each}
|
package/src/Message.svelte
DELETED
package/src/MultiSelect.svelte
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import Select from './Select.svelte'
|
|
3
|
-
import Item from './Item.svelte'
|
|
4
|
-
import { defaultFields } from '@rokkit/core'
|
|
5
|
-
|
|
6
|
-
let className = ''
|
|
7
|
-
export { className as class }
|
|
8
|
-
export let name
|
|
9
|
-
export let value = []
|
|
10
|
-
export let options = []
|
|
11
|
-
/** @type {import('@rokkit/core').FieldMapping} */
|
|
12
|
-
export let fields = {}
|
|
13
|
-
export let using = {}
|
|
14
|
-
export let placeholder = ''
|
|
15
|
-
|
|
16
|
-
$: available = options.filter((item) => !value.includes(item))
|
|
17
|
-
|
|
18
|
-
function handleRemove(event) {
|
|
19
|
-
value = [...value.filter((item) => item !== event.detail)]
|
|
20
|
-
}
|
|
21
|
-
function handleSelect(event) {
|
|
22
|
-
if (!value.includes(event.detail)) value = [...value, event.detail]
|
|
23
|
-
}
|
|
24
|
-
$: using = { default: Item, ...using }
|
|
25
|
-
$: fields = { ...defaultFields, ...fields }
|
|
26
|
-
</script>
|
|
27
|
-
|
|
28
|
-
<Select
|
|
29
|
-
{name}
|
|
30
|
-
options={available}
|
|
31
|
-
{fields}
|
|
32
|
-
{using}
|
|
33
|
-
on:select={handleSelect}
|
|
34
|
-
class={className}
|
|
35
|
-
{placeholder}
|
|
36
|
-
>
|
|
37
|
-
{#if value.length > 0}
|
|
38
|
-
<items class="flex flex-wrap">
|
|
39
|
-
{#each value as item, index (index)}
|
|
40
|
-
<Item value={item} {fields} {using} removable on:remove={handleRemove} class="pill" />
|
|
41
|
-
{/each}
|
|
42
|
-
</items>
|
|
43
|
-
{:else}
|
|
44
|
-
<item class="flex w-full">
|
|
45
|
-
<svelte:component this={using.default} value={placeholder} />
|
|
46
|
-
</item>
|
|
47
|
-
{/if}
|
|
48
|
-
</Select>
|
package/src/NestedList.svelte
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { SvelteSet } from 'svelte/reactivity'
|
|
3
|
-
import {
|
|
4
|
-
defaultStateIcons,
|
|
5
|
-
getLineTypes,
|
|
6
|
-
getKeyFromPath,
|
|
7
|
-
getNestedFields,
|
|
8
|
-
hasChildren
|
|
9
|
-
} from '@rokkit/core'
|
|
10
|
-
import Node from './Node.svelte'
|
|
11
|
-
import NestedList from './NestedList.svelte'
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @typedef {Object} Props
|
|
15
|
-
* @property {Array<NodeProxy>} [items=[]]
|
|
16
|
-
* @property {any} [value=null]
|
|
17
|
-
* @property {import('./types').FieldMapping} fields
|
|
18
|
-
* @property {number[]} [path=[]]
|
|
19
|
-
* @property {import('./types').NodeStateIcons} icons
|
|
20
|
-
* @property {import('./types').ConnectionType[]} [types=[]]
|
|
21
|
-
* @property {string} [focusedKey]
|
|
22
|
-
* @property {SvelteSet} [selectedKeys]
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
/** @type {Props} */
|
|
26
|
-
let {
|
|
27
|
-
items = $bindable([]),
|
|
28
|
-
value = $bindable(null),
|
|
29
|
-
fields,
|
|
30
|
-
path = [],
|
|
31
|
-
icons = {},
|
|
32
|
-
types = [],
|
|
33
|
-
focusedKey,
|
|
34
|
-
selectedKeys = new SvelteSet(),
|
|
35
|
-
stub,
|
|
36
|
-
snippets
|
|
37
|
-
} = $props()
|
|
38
|
-
|
|
39
|
-
const stateIcons = $derived({ ...defaultStateIcons.node, ...icons })
|
|
40
|
-
const childFields = $derived(getNestedFields(fields))
|
|
41
|
-
// $inspect(childFields, items[0], expandedKeys)
|
|
42
|
-
</script>
|
|
43
|
-
|
|
44
|
-
<rk-nested-list role="tree">
|
|
45
|
-
{#each items as item, index (index)}
|
|
46
|
-
{@const nodePath = [...path, index]}
|
|
47
|
-
{@const key = getKeyFromPath(nodePath)}
|
|
48
|
-
{@const expanded = item[fields.expanded]}
|
|
49
|
-
{@const nodeType = index === items.length - 1 ? 'last' : 'child'}
|
|
50
|
-
{@const connectors = getLineTypes(hasChildren(item, fields), types, nodeType)}
|
|
51
|
-
|
|
52
|
-
<Node
|
|
53
|
-
value={item}
|
|
54
|
-
{fields}
|
|
55
|
-
{stateIcons}
|
|
56
|
-
types={connectors}
|
|
57
|
-
focused={focusedKey === key}
|
|
58
|
-
selected={selectedKeys.has(key)}
|
|
59
|
-
{expanded}
|
|
60
|
-
path={nodePath}
|
|
61
|
-
{stub}
|
|
62
|
-
{snippets}
|
|
63
|
-
>
|
|
64
|
-
{#if hasChildren(item, fields) && expanded}
|
|
65
|
-
<NestedList
|
|
66
|
-
items={item[fields.children]}
|
|
67
|
-
{value}
|
|
68
|
-
fields={childFields}
|
|
69
|
-
path={nodePath}
|
|
70
|
-
icons={stateIcons}
|
|
71
|
-
types={connectors}
|
|
72
|
-
{focusedKey}
|
|
73
|
-
{selectedKeys}
|
|
74
|
-
/>
|
|
75
|
-
{/if}
|
|
76
|
-
</Node>
|
|
77
|
-
{/each}
|
|
78
|
-
</rk-nested-list>
|