@poveste/app 0.1.2 → 0.2.0
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/dist/app/style/floating.pcss +4 -4
- package/dist/app/style/main.pcss +2 -2
- package/dist/app/style/sandbox.css +1 -1
- package/dist/bundle-main.js +2 -0
- package/dist/bundled/App.vue2.js +81 -37
- package/dist/bundled/app.css +51 -46
- package/dist/bundled/components/HomeView.vue2.js +3 -3
- package/dist/bundled/components/app/AppActions.vue.js +5 -0
- package/dist/bundled/components/app/AppActions.vue2.js +76 -0
- package/dist/bundled/components/app/AppHeader.vue2.js +5 -47
- package/dist/bundled/components/app/Breadcrumb.vue.js +1 -1
- package/dist/bundled/components/app/Breadcrumb.vue2.js +9 -9
- package/dist/bundled/components/app/HomeCounter.vue2.js +5 -5
- package/dist/bundled/components/app/InitialLoading.vue2.js +5 -5
- package/dist/bundled/components/app/MobileOverlay.vue2.js +5 -5
- package/dist/bundled/components/app/TopBar.vue.js +5 -0
- package/dist/bundled/components/app/TopBar.vue2.js +73 -0
- package/dist/bundled/components/app/TopBarChip.vue.js +13 -0
- package/dist/bundled/components/app/TopBarChipItem.vue.js +13 -0
- package/dist/bundled/components/base/BaseButton.vue2.js +3 -3
- package/dist/bundled/components/base/BaseCheckbox.vue2.js +8 -8
- package/dist/bundled/components/base/BaseEmpty.vue.js +2 -2
- package/dist/bundled/components/base/BaseKeyboardShortcut.vue2.js +1 -1
- package/dist/bundled/components/base/BaseListItem.vue2.js +2 -2
- package/dist/bundled/components/base/BaseListItemLink.vue.js +2 -2
- package/dist/bundled/components/base/BaseOverflowMenu.vue2.js +4 -4
- package/dist/bundled/components/base/BaseOverflowTab.vue.js +3 -3
- package/dist/bundled/components/base/BaseSelect.vue2.js +6 -6
- package/dist/bundled/components/base/BaseSplitPane.vue.js +1 -1
- package/dist/bundled/components/base/BaseSplitPane.vue2.js +20 -16
- package/dist/bundled/components/base/BaseTab.vue.js +3 -3
- package/dist/bundled/components/base/BaseTag.vue.js +1 -1
- package/dist/bundled/components/command/CommandPrompts.vue2.js +5 -5
- package/dist/bundled/components/command/CommandPromptsModal.vue2.js +3 -3
- package/dist/bundled/components/command/PromptSelect.vue2.js +12 -12
- package/dist/bundled/components/command/PromptText.vue2.js +4 -4
- package/dist/bundled/components/layout/LayoutItem.vue.js +5 -0
- package/dist/bundled/components/layout/LayoutItem.vue2.js +44 -0
- package/dist/bundled/components/layout/LayoutItemGroup.vue.js +5 -0
- package/dist/bundled/components/layout/LayoutItemGroup.vue2.js +25 -0
- package/dist/bundled/components/layout/LayoutModal.vue.js +5 -0
- package/dist/bundled/components/layout/LayoutModal.vue2.js +68 -0
- package/dist/bundled/components/layout/LayoutPane.vue.js +5 -0
- package/dist/bundled/components/layout/LayoutPane.vue2.js +59 -0
- package/dist/bundled/components/panel/ControlsComponentPropItem.vue2.js +2 -2
- package/dist/bundled/components/panel/ControlsComponentProps.vue2.js +4 -4
- package/dist/bundled/components/panel/ControlsComponentState.vue2.js +2 -2
- package/dist/bundled/components/panel/PaneTabs.vue2.js +4 -4
- package/dist/bundled/components/panel/StatePresets.vue2.js +13 -13
- package/dist/bundled/components/panel/StoryControls.vue2.js +6 -6
- package/dist/bundled/components/panel/StoryDocs.vue2.js +4 -4
- package/dist/bundled/components/panel/StoryEvent.vue2.js +7 -7
- package/dist/bundled/components/panel/StoryEvents.vue2.js +1 -1
- package/dist/bundled/components/panel/StorySidePanel.vue2.js +58 -47
- package/dist/bundled/components/panel/StorySourceCode.vue.js +1 -1
- package/dist/bundled/components/panel/StorySourceCode.vue2.js +19 -19
- package/dist/bundled/components/search/SearchItem.vue.js +1 -1
- package/dist/bundled/components/search/SearchItem.vue2.js +3 -3
- package/dist/bundled/components/search/SearchItemContent.vue2.js +9 -9
- package/dist/bundled/components/search/SearchLoading.vue2.js +2 -2
- package/dist/bundled/components/search/SearchModal.vue2.js +3 -3
- package/dist/bundled/components/search/SearchPane.vue2.js +4 -4
- package/dist/bundled/components/story/StoryResponsivePreview.vue.js +1 -1
- package/dist/bundled/components/story/StoryResponsivePreview.vue2.js +21 -21
- package/dist/bundled/components/story/StoryVariantGrid.vue2.js +7 -26
- package/dist/bundled/components/story/StoryVariantGridItem.vue.js +1 -1
- package/dist/bundled/components/story/StoryVariantGridItem.vue2.js +36 -21
- package/dist/bundled/components/story/StoryVariantListItem.vue.js +1 -1
- package/dist/bundled/components/story/StoryVariantListItem.vue2.js +5 -5
- package/dist/bundled/components/story/StoryVariantSingle.vue.js +1 -1
- package/dist/bundled/components/story/StoryVariantSingle.vue2.js +10 -10
- package/dist/bundled/components/story/StoryVariantSinglePreviewNative.vue2.js +6 -5
- package/dist/bundled/components/story/StoryVariantSinglePreviewRemote.vue2.js +33 -8
- package/dist/bundled/components/story/StoryVariantSingleView.vue2.js +8 -39
- package/dist/bundled/components/story/StoryView.vue2.js +21 -11
- package/dist/bundled/components/story/StoryViewer.vue.js +1 -1
- package/dist/bundled/components/story/StoryViewer.vue2.js +2 -2
- package/dist/bundled/components/toolbar/DevOnlyToolbarOpenInEditor.vue2.js +13 -9
- package/dist/bundled/components/toolbar/ToolbarBackground.vue.js +1 -1
- package/dist/bundled/components/toolbar/ToolbarBackground.vue2.js +62 -33
- package/dist/bundled/components/toolbar/ToolbarNewTab.vue2.js +13 -10
- package/dist/bundled/components/toolbar/ToolbarResponsiveSize.vue2.js +14 -14
- package/dist/bundled/components/toolbar/ToolbarTextDirection.vue2.js +13 -9
- package/dist/bundled/components/toolbar/ToolbarTitle.vue.js +4 -1
- package/dist/bundled/components/toolbar/ToolbarTitle.vue2.js +30 -7
- package/dist/bundled/components/tree/StoryGroup.vue2.js +5 -5
- package/dist/bundled/components/tree/StoryList.vue2.js +1 -1
- package/dist/bundled/components/tree/StoryListFolder.vue.js +1 -1
- package/dist/bundled/components/tree/StoryListFolder.vue2.js +7 -7
- package/dist/bundled/components/tree/StoryListItem.vue.js +1 -1
- package/dist/bundled/components/tree/StoryListItem.vue2.js +8 -8
- package/dist/bundled/index.js +3 -0
- package/dist/bundled/sandbox.js +41 -15
- package/dist/bundled/stores/layout.js +16 -0
- package/dist/bundled/stores/preview-settings.js +19 -4
- package/dist/bundled/util/color-scheme.js +27 -0
- package/dist/bundled/util/const.js +2 -0
- package/dist/bundled/util/dark.js +3 -3
- package/dist/bundled/util/keyboard.js +60 -32
- package/dist/bundled/util/preview-settings.js +11 -0
- package/dist/bundled/util/tooltip.js +2 -2
- package/dist/style.css +644 -529
- package/package.json +8 -8
- package/src/app/App.vue +109 -66
- package/src/app/components/HomeView.vue +3 -3
- package/src/app/components/app/AppActions.vue +58 -0
- package/src/app/components/app/AppHeader.vue +4 -47
- package/src/app/components/app/Breadcrumb.vue +8 -8
- package/src/app/components/app/HomeCounter.vue +5 -5
- package/src/app/components/app/InitialLoading.vue +5 -5
- package/src/app/components/app/MobileOverlay.vue +5 -5
- package/src/app/components/app/TopBar.vue +60 -0
- package/src/app/components/app/TopBarChip.vue +5 -0
- package/src/app/components/app/TopBarChipItem.vue +7 -0
- package/src/app/components/base/BaseButton.vue +3 -3
- package/src/app/components/base/BaseCheckbox.vue +9 -9
- package/src/app/components/base/BaseCopyIcon.vue +1 -1
- package/src/app/components/base/BaseEmpty.vue +4 -4
- package/src/app/components/base/BaseKeyboardShortcut.vue +1 -1
- package/src/app/components/base/BaseListItem.vue +3 -3
- package/src/app/components/base/BaseListItemLink.vue +3 -3
- package/src/app/components/base/BaseOverflowMenu.vue +4 -4
- package/src/app/components/base/BaseOverflowTab.vue +3 -3
- package/src/app/components/base/BaseSelect.vue +6 -6
- package/src/app/components/base/BaseSplitPane.vue +21 -16
- package/src/app/components/base/BaseTab.vue +3 -3
- package/src/app/components/base/BaseTag.vue +1 -1
- package/src/app/components/command/CommandPrompts.vue +5 -5
- package/src/app/components/command/CommandPromptsModal.vue +3 -3
- package/src/app/components/command/PromptSelect.vue +14 -14
- package/src/app/components/command/PromptText.vue +4 -4
- package/src/app/components/layout/LayoutItem.vue +36 -0
- package/src/app/components/layout/LayoutItemGroup.vue +18 -0
- package/src/app/components/layout/LayoutModal.vue +60 -0
- package/src/app/components/layout/LayoutPane.vue +45 -0
- package/src/app/components/panel/ControlsComponentPropItem.vue +2 -2
- package/src/app/components/panel/ControlsComponentProps.vue +3 -3
- package/src/app/components/panel/ControlsComponentState.vue +2 -2
- package/src/app/components/panel/PaneTabs.vue +4 -4
- package/src/app/components/panel/StatePresets.vue +13 -13
- package/src/app/components/panel/StoryControls.vue +6 -6
- package/src/app/components/panel/StoryDocs.vue +4 -4
- package/src/app/components/panel/StoryEvent.vue +7 -7
- package/src/app/components/panel/StoryEvents.vue +1 -1
- package/src/app/components/panel/StorySidePanel.vue +51 -41
- package/src/app/components/panel/StorySourceCode.vue +19 -19
- package/src/app/components/search/SearchItem.vue +2 -2
- package/src/app/components/search/SearchItemContent.vue +9 -9
- package/src/app/components/search/SearchLoading.vue +2 -2
- package/src/app/components/search/SearchModal.vue +3 -3
- package/src/app/components/search/SearchPane.vue +4 -4
- package/src/app/components/story/StoryResponsivePreview.vue +27 -27
- package/src/app/components/story/StoryVariantGrid.vue +5 -24
- package/src/app/components/story/StoryVariantGridItem.vue +36 -17
- package/src/app/components/story/StoryVariantListItem.vue +4 -4
- package/src/app/components/story/StoryVariantSingle.vue +9 -9
- package/src/app/components/story/StoryVariantSinglePreviewNative.vue +7 -5
- package/src/app/components/story/StoryVariantSinglePreviewRemote.vue +37 -7
- package/src/app/components/story/StoryVariantSingleView.vue +1 -34
- package/src/app/components/story/StoryView.vue +23 -8
- package/src/app/components/story/StoryViewer.vue +1 -1
- package/src/app/components/toolbar/DevOnlyToolbarOpenInEditor.vue +5 -4
- package/src/app/components/toolbar/ToolbarBackground.vue +62 -25
- package/src/app/components/toolbar/ToolbarNewTab.vue +5 -4
- package/src/app/components/toolbar/ToolbarResponsiveSize.vue +15 -15
- package/src/app/components/toolbar/ToolbarTextDirection.vue +5 -4
- package/src/app/components/toolbar/ToolbarTitle.vue +32 -8
- package/src/app/components/tree/StoryGroup.vue +5 -5
- package/src/app/components/tree/StoryList.vue +1 -1
- package/src/app/components/tree/StoryListFolder.vue +6 -6
- package/src/app/components/tree/StoryListItem.vue +6 -6
- package/src/app/index.ts +3 -0
- package/src/app/sandbox.ts +59 -15
- package/src/app/stores/layout.ts +22 -0
- package/src/app/stores/preview-settings.ts +26 -2
- package/src/app/style/floating.pcss +4 -4
- package/src/app/style/main.pcss +2 -2
- package/src/app/style/sandbox.css +1 -1
- package/src/app/types.ts +49 -0
- package/src/app/util/color-scheme.ts +36 -0
- package/src/app/util/const.ts +1 -0
- package/src/app/util/dark.ts +3 -3
- package/src/app/util/keyboard.ts +65 -32
- package/src/app/util/preview-settings.ts +16 -0
- package/src/app/util/tooltip.ts +2 -2
- package/src/bundle-main.js +2 -0
- package/src/shim.d.ts +2 -2
|
@@ -34,35 +34,35 @@ watch(path, () => {
|
|
|
34
34
|
<div
|
|
35
35
|
role="checkbox"
|
|
36
36
|
tabindex="0"
|
|
37
|
-
class="poveste-base-checkbox
|
|
37
|
+
class="poveste-base-checkbox ptw-flex ptw-items-center ptw-gap-2 ptw-select-none ptw-px-4 ptw-py-3 ptw-cursor-pointer hover:ptw-bg-primary-100 dark:hover:ptw-bg-primary-700"
|
|
38
38
|
@click="toggle()"
|
|
39
39
|
@keydown.enter.prevent="toggle()"
|
|
40
40
|
@keydown.space.prevent="toggle()"
|
|
41
41
|
>
|
|
42
|
-
<div class="
|
|
42
|
+
<div class="ptw-text-white ptw-w-[16px] ptw-h-[16px] ptw-relative">
|
|
43
43
|
<div
|
|
44
|
-
class="
|
|
44
|
+
class="ptw-border group-active:ptw-bg-gray-500/20 ptw-rounded-sm ptw-box-border ptw-absolute ptw-inset-0 ptw-transition-border ptw-duration-150 ptw-ease-out"
|
|
45
45
|
:class="[
|
|
46
46
|
modelValue
|
|
47
|
-
? '
|
|
48
|
-
: '
|
|
47
|
+
? 'ptw-border-primary-500 ptw-border-8'
|
|
48
|
+
: 'ptw-border-black/25 dark:ptw-border-white/25 ptw-delay-150',
|
|
49
49
|
]"
|
|
50
50
|
/>
|
|
51
51
|
<svg
|
|
52
52
|
width="16"
|
|
53
53
|
height="16"
|
|
54
54
|
viewBox="0 0 24 24"
|
|
55
|
-
class="
|
|
55
|
+
class="ptw-relative ptw-z-10"
|
|
56
56
|
>
|
|
57
57
|
<path
|
|
58
58
|
ref="path"
|
|
59
59
|
d="m 4 12 l 5 5 l 10 -10"
|
|
60
60
|
fill="none"
|
|
61
|
-
class="
|
|
61
|
+
class="ptw-stroke-white ptw-stroke-2 ptw-duration-200 ptw-ease-in-out"
|
|
62
62
|
:class="[
|
|
63
|
-
animationEnabled ? '
|
|
63
|
+
animationEnabled ? 'ptw-transition-all' : 'ptw-transition-none',
|
|
64
64
|
{
|
|
65
|
-
'
|
|
65
|
+
'ptw-delay-150': modelValue,
|
|
66
66
|
},
|
|
67
67
|
]"
|
|
68
68
|
:stroke-dasharray="dasharray"
|
|
@@ -28,7 +28,7 @@ const action = () => copy(props.content)
|
|
|
28
28
|
delay: 0,
|
|
29
29
|
}"
|
|
30
30
|
icon="carbon:copy-file"
|
|
31
|
-
class="poveste-base-copy-icon
|
|
31
|
+
class="poveste-base-copy-icon ptw-w-4 ptw-h-4 ptw-opacity-50 hover:ptw-opacity-100 hover:ptw-text-primary-500 ptw-cursor-pointer"
|
|
32
32
|
@click="action()"
|
|
33
33
|
/>
|
|
34
34
|
</template>
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="poveste-base-empty
|
|
2
|
+
<div class="poveste-base-empty ptw-base-empty ptw-flex ptw-flex-col ptw-items-center ptw-justify-center ptw-space-y-4 ptw-py-12 ptw-h-full ptw-text-center ptw-text-gray-400 ptw-text-lg">
|
|
3
3
|
<slot />
|
|
4
4
|
</div>
|
|
5
5
|
</template>
|
|
6
6
|
|
|
7
7
|
<style scoped>
|
|
8
|
-
.
|
|
9
|
-
animation:
|
|
8
|
+
.ptw-base-empty:not(.no-animation) {
|
|
9
|
+
animation: ptw-base-empty .15s .2s both;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
@keyframes
|
|
12
|
+
@keyframes ptw-base-empty {
|
|
13
13
|
0% {
|
|
14
14
|
opacity: 0;
|
|
15
15
|
}
|
|
@@ -10,7 +10,7 @@ const formatted = computed(() => props.shortcut.split('+').map(k => formatKey(k.
|
|
|
10
10
|
</script>
|
|
11
11
|
|
|
12
12
|
<template>
|
|
13
|
-
<span class="poveste-base-keyboard-shortcut
|
|
13
|
+
<span class="poveste-base-keyboard-shortcut ptw-border ptw-border-current ptw-opacity-50 ptw-px-1 ptw-rounded-sm">
|
|
14
14
|
{{ formatted }}
|
|
15
15
|
</span>
|
|
16
16
|
</template>
|
|
@@ -14,12 +14,12 @@ function handleNavigate() {
|
|
|
14
14
|
|
|
15
15
|
<template>
|
|
16
16
|
<a
|
|
17
|
-
class="
|
|
17
|
+
class="poveste-base-list-item ptw-flex ptw-items-center ptw-gap-2 ptw-text-gray-900 dark:ptw-text-gray-100"
|
|
18
18
|
:class="[
|
|
19
19
|
$attrs.class,
|
|
20
20
|
isActive
|
|
21
|
-
? 'active
|
|
22
|
-
: 'hover:
|
|
21
|
+
? 'active ptw-bg-primary-500 hover:ptw-bg-primary-600 ptw-text-white dark:ptw-text-black'
|
|
22
|
+
: 'hover:ptw-bg-primary-100 dark:hover:ptw-bg-primary-900',
|
|
23
23
|
]"
|
|
24
24
|
@click="handleNavigate()"
|
|
25
25
|
@keyup.enter="handleNavigate()"
|
|
@@ -37,12 +37,12 @@ export default defineComponent({
|
|
|
37
37
|
>
|
|
38
38
|
<a
|
|
39
39
|
:href="href"
|
|
40
|
-
class="
|
|
40
|
+
class="ptw-flex ptw-items-center ptw-gap-2 ptw-text-gray-900 dark:ptw-text-gray-100"
|
|
41
41
|
:class="[
|
|
42
42
|
$attrs.class,
|
|
43
43
|
(isActive != null ? isActive : linkIsActive)
|
|
44
|
-
? 'active
|
|
45
|
-
: 'hover:
|
|
44
|
+
? 'active ptw-bg-primary-500 hover:ptw-bg-primary-600 ptw-text-white dark:ptw-text-black'
|
|
45
|
+
: 'hover:ptw-bg-primary-100 dark:hover:ptw-bg-primary-900',
|
|
46
46
|
]"
|
|
47
47
|
@click="handleNavigate($event, navigate)"
|
|
48
48
|
@keyup.enter="handleNavigate($event, navigate)"
|
|
@@ -86,7 +86,7 @@ function ChildrenSlice(props, { slots }) {
|
|
|
86
86
|
<template>
|
|
87
87
|
<div
|
|
88
88
|
ref="el"
|
|
89
|
-
class="poveste-base-overflow-menu
|
|
89
|
+
class="poveste-base-overflow-menu ptw-flex ptw-overflow-hidden ptw-relative"
|
|
90
90
|
>
|
|
91
91
|
<ChildrenRender>
|
|
92
92
|
<slot />
|
|
@@ -97,16 +97,16 @@ function ChildrenSlice(props, { slots }) {
|
|
|
97
97
|
>
|
|
98
98
|
<div
|
|
99
99
|
role="button"
|
|
100
|
-
class="
|
|
100
|
+
class="ptw-cursor-pointer hover:ptw-bg-primary-50 dark:hover:ptw-bg-primary-900 ptw-w-8 ptw-h-full ptw-flex ptw-items-center ptw-justify-center ptw-absolute ptw-top-0 ptw-right-0"
|
|
101
101
|
>
|
|
102
102
|
<Icon
|
|
103
103
|
icon="carbon:caret-down"
|
|
104
|
-
class="
|
|
104
|
+
class="ptw-w-4 ptw-h-4 ptw-opacity-50 group-hover:ptw-opacity-100"
|
|
105
105
|
/>
|
|
106
106
|
</div>
|
|
107
107
|
|
|
108
108
|
<template #popper>
|
|
109
|
-
<div class="
|
|
109
|
+
<div class="ptw-flex ptw-flex-col ptw-items-stretch">
|
|
110
110
|
<ChildrenSlice
|
|
111
111
|
:start="visibleChildrenCount"
|
|
112
112
|
>
|
|
@@ -28,9 +28,9 @@ export default defineComponent({
|
|
|
28
28
|
<a
|
|
29
29
|
v-bind="$attrs"
|
|
30
30
|
:href="href"
|
|
31
|
-
class="
|
|
31
|
+
class="ptw-px-4 ptw-h-10 ptw-min-w-[150px] ptw-inline-flex ptw-items-center hover:ptw-bg-primary-50 dark:hover:ptw-bg-primary-900 ptw-relative ptw-text-gray-900 dark:ptw-text-gray-100"
|
|
32
32
|
:class="{
|
|
33
|
-
'
|
|
33
|
+
'ptw-text-primary-500 dark:ptw-text-primary-400': matched != null ? matched : (exact && isExactActive) || (!exact && isActive),
|
|
34
34
|
}"
|
|
35
35
|
@click="navigate"
|
|
36
36
|
>
|
|
@@ -39,7 +39,7 @@ export default defineComponent({
|
|
|
39
39
|
<transition name="__poveste-scale-y">
|
|
40
40
|
<div
|
|
41
41
|
v-if="matched != null ? matched : (exact && isExactActive) || (!exact && isActive)"
|
|
42
|
-
class="
|
|
42
|
+
class="ptw-absolute ptw-top-0 ptw-left-0 ptw-h-full ptw-w-[2px] ptw-bg-primary-500 dark:ptw-bg-primary-400"
|
|
43
43
|
/>
|
|
44
44
|
</transition>
|
|
45
45
|
</a>
|
|
@@ -37,27 +37,27 @@ function selectValue(value: string, hide: () => void) {
|
|
|
37
37
|
auto-boundary-max-size
|
|
38
38
|
>
|
|
39
39
|
<div
|
|
40
|
-
class="
|
|
40
|
+
class="ptw-cursor-pointer ptw-w-full ptw-outline-none ptw-px-2 ptw-h-[27px] -ptw-my-1 ptw-border ptw-border-solid ptw-border-black/25 dark:ptw-border-white/25 hover:ptw-border-primary-500 dark:hover:ptw-border-primary-500 ptw-rounded-sm ptw-flex ptw-gap-2 ptw-items-center ptw-leading-normal"
|
|
41
41
|
>
|
|
42
|
-
<div class="
|
|
42
|
+
<div class="ptw-flex-1 ptw-truncate">
|
|
43
43
|
<slot :label="selectedLabel">
|
|
44
44
|
{{ selectedLabel }}
|
|
45
45
|
</slot>
|
|
46
46
|
</div>
|
|
47
47
|
<Icon
|
|
48
48
|
icon="carbon:chevron-sort"
|
|
49
|
-
class="
|
|
49
|
+
class="ptw-w-4 ptw-h-4 ptw-flex-none ptw-ml-auto"
|
|
50
50
|
/>
|
|
51
51
|
</div>
|
|
52
52
|
<template #popper="{ hide }">
|
|
53
|
-
<div class="
|
|
53
|
+
<div class="ptw-flex ptw-flex-col ptw-bg-gray-50 dark:ptw-bg-gray-700">
|
|
54
54
|
<div
|
|
55
55
|
v-for="(label, value) in formattedOptions"
|
|
56
56
|
v-bind="{ ...$attrs, class: null, style: null }"
|
|
57
57
|
:key="label"
|
|
58
|
-
class="
|
|
58
|
+
class="ptw-px-2 ptw-py-1 ptw-cursor-pointer hover:ptw-bg-primary-100 dark:hover:ptw-bg-primary-700"
|
|
59
59
|
:class="{
|
|
60
|
-
'
|
|
60
|
+
'ptw-bg-primary-200 dark:ptw-bg-primary-800': props.modelValue === value,
|
|
61
61
|
}"
|
|
62
62
|
@click="selectValue(value, hide)"
|
|
63
63
|
>
|
|
@@ -45,6 +45,11 @@ const props = defineProps({
|
|
|
45
45
|
type: Boolean,
|
|
46
46
|
default: false,
|
|
47
47
|
},
|
|
48
|
+
|
|
49
|
+
showDivider: {
|
|
50
|
+
type: Boolean,
|
|
51
|
+
default: true,
|
|
52
|
+
},
|
|
48
53
|
})
|
|
49
54
|
|
|
50
55
|
const emit = defineEmits({
|
|
@@ -165,42 +170,42 @@ onUnmounted(() => {
|
|
|
165
170
|
<template>
|
|
166
171
|
<div
|
|
167
172
|
ref="el"
|
|
168
|
-
class="poveste-base-split-pane
|
|
173
|
+
class="poveste-base-split-pane ptw-flex ptw-h-full ptw-isolate ptw-overflow-auto"
|
|
169
174
|
:class="{
|
|
170
|
-
'
|
|
171
|
-
'
|
|
172
|
-
'
|
|
175
|
+
'ptw-flex-col': orientation === 'portrait',
|
|
176
|
+
'ptw-cursor-ew-resize': dragging && orientation === 'landscape',
|
|
177
|
+
'ptw-cursor-ns-resize': dragging && orientation === 'portrait',
|
|
173
178
|
[orientation]: true,
|
|
174
179
|
}"
|
|
175
180
|
>
|
|
176
181
|
<div
|
|
177
|
-
class="
|
|
182
|
+
class="ptw-relative ptw-top-0 ptw-left-0 ptw-z-20"
|
|
178
183
|
:class="{
|
|
179
|
-
'
|
|
180
|
-
'
|
|
181
|
-
'
|
|
184
|
+
'ptw-pointer-events-none': dragging,
|
|
185
|
+
'ptw-border-r ptw-border-gray-300/30 dark:ptw-border-gray-800': orientation === 'landscape' && showDivider,
|
|
186
|
+
'ptw-flex-none': fixed,
|
|
182
187
|
}"
|
|
183
188
|
:style="leftStyle"
|
|
184
189
|
>
|
|
185
190
|
<slot name="first" />
|
|
186
191
|
|
|
187
192
|
<div
|
|
188
|
-
class="dragger
|
|
193
|
+
class="dragger ptw-absolute ptw-z-100 hover:ptw-bg-primary-500/50 ptw-transition-colors ptw-duration-150 ptw-delay-150"
|
|
189
194
|
:class="{
|
|
190
|
-
'
|
|
191
|
-
'
|
|
195
|
+
'ptw-top-0 ptw-bottom-0 ptw-cursor-ew-resize': orientation === 'landscape',
|
|
196
|
+
'ptw-left-0 ptw-right-0 ptw-cursor-ns-resize': orientation === 'portrait',
|
|
192
197
|
[`dragger-offset-${draggerOffset}`]: true,
|
|
193
|
-
'
|
|
198
|
+
'ptw-bg-primary-500/25': dragging,
|
|
194
199
|
}"
|
|
195
200
|
@mousedown.prevent="dragStart"
|
|
196
201
|
/>
|
|
197
202
|
</div>
|
|
198
203
|
<div
|
|
199
|
-
class="
|
|
204
|
+
class="ptw-relative ptw-bottom-0 ptw-right-0"
|
|
200
205
|
:class="{
|
|
201
|
-
'
|
|
202
|
-
'
|
|
203
|
-
'
|
|
206
|
+
'ptw-pointer-events-none': dragging,
|
|
207
|
+
'ptw-border-t ptw-border-gray-300/30 dark:ptw-border-gray-800': orientation === 'portrait' && showDivider,
|
|
208
|
+
'ptw-flex-1': fixed,
|
|
204
209
|
}"
|
|
205
210
|
:style="rightStyle"
|
|
206
211
|
>
|
|
@@ -28,9 +28,9 @@ export default defineComponent({
|
|
|
28
28
|
<a
|
|
29
29
|
v-bind="$attrs"
|
|
30
30
|
:href="href"
|
|
31
|
-
class="
|
|
31
|
+
class="ptw-px-4 ptw-h-full ptw-inline-flex ptw-items-center hover:ptw-bg-primary-50 dark:hover:ptw-bg-primary-900 ptw-relative ptw-text-gray-900 dark:ptw-text-gray-100"
|
|
32
32
|
:class="{
|
|
33
|
-
'
|
|
33
|
+
'ptw-text-primary-500 dark:ptw-text-primary-400': matched != null ? matched : (exact && isExactActive) || (!exact && isActive),
|
|
34
34
|
}"
|
|
35
35
|
@click="navigate"
|
|
36
36
|
>
|
|
@@ -39,7 +39,7 @@ export default defineComponent({
|
|
|
39
39
|
<transition name="__poveste-scale-x">
|
|
40
40
|
<div
|
|
41
41
|
v-if="matched != null ? matched : (exact && isExactActive) || (!exact && isActive)"
|
|
42
|
-
class="
|
|
42
|
+
class="ptw-absolute ptw-bottom-0 ptw-left-0 ptw-w-full ptw-h-[2px] ptw-bg-primary-500 dark:ptw-bg-primary-400"
|
|
43
43
|
/>
|
|
44
44
|
</transition>
|
|
45
45
|
</a>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<span class="poveste-base-tag
|
|
2
|
+
<span class="poveste-base-tag ptw-text-center ptw-text-xs ptw-mx-1 ptw-px-0.5 ptw-h-4 ptw-uppercase ptw-min-w-4 ptw-rounded-full ptw-bg-primary-500 ptw-text-white dark:ptw-text-black">
|
|
3
3
|
<slot />
|
|
4
4
|
</span>
|
|
5
5
|
</template>
|
|
@@ -59,11 +59,11 @@ onMounted(() => {
|
|
|
59
59
|
|
|
60
60
|
<template>
|
|
61
61
|
<form
|
|
62
|
-
class="poveste-command-prompts
|
|
62
|
+
class="poveste-command-prompts ptw-flex ptw-flex-col"
|
|
63
63
|
@submit.prevent="submit()"
|
|
64
64
|
@keyup.escape="$emit('close')"
|
|
65
65
|
>
|
|
66
|
-
<div class="
|
|
66
|
+
<div class="ptw-p-4 ptw-opacity-70">
|
|
67
67
|
{{ command.label }}
|
|
68
68
|
</div>
|
|
69
69
|
|
|
@@ -76,14 +76,14 @@ onMounted(() => {
|
|
|
76
76
|
:prompt="prompt"
|
|
77
77
|
:answers="answers"
|
|
78
78
|
:index="index"
|
|
79
|
-
class="hover:
|
|
79
|
+
class="hover:ptw-bg-gray-500/10 focus-within:ptw-bg-gray-500/5"
|
|
80
80
|
@next="focusPrompt(index + 1)"
|
|
81
81
|
/>
|
|
82
82
|
|
|
83
|
-
<div class="
|
|
83
|
+
<div class="ptw-flex ptw-justify-end ptw-gap-2 ptw-p-2">
|
|
84
84
|
<BaseButton
|
|
85
85
|
type="submit"
|
|
86
|
-
class="
|
|
86
|
+
class="ptw-px-4 ptw-py-2 ptw-flex ptw-items-start ptw-gap-2"
|
|
87
87
|
>
|
|
88
88
|
<BaseKeyboardShortcut
|
|
89
89
|
shortcut="Enter"
|
|
@@ -25,13 +25,13 @@ const commandStore = useCommandStore()
|
|
|
25
25
|
<template>
|
|
26
26
|
<div
|
|
27
27
|
v-if="shown"
|
|
28
|
-
class="poveste-command-prompts-modal
|
|
28
|
+
class="poveste-command-prompts-modal ptw-fixed ptw-inset-0 ptw-bg-white/80 dark:ptw-bg-gray-900/80 ptw-z-20"
|
|
29
29
|
>
|
|
30
30
|
<div
|
|
31
|
-
class="
|
|
31
|
+
class="ptw-absolute ptw-inset-0"
|
|
32
32
|
@click="close()"
|
|
33
33
|
/>
|
|
34
|
-
<div class="
|
|
34
|
+
<div class="ptw-bg-white dark:ptw-bg-gray-900 md:ptw-mt-16 md:ptw-mx-auto ptw-w-screen ptw-max-w-[512px] ptw-max-h-[80vh] ptw-overflow-y-auto ptw-scroll-smooth ptw-shadow-xl ptw-border ptw-border-gray-200 dark:ptw-border-gray-750 ptw-rounded-lg ptw-relative ptw-divide-y ptw-divide-gray-200 dark:ptw-divide-gray-850">
|
|
35
35
|
<CommandPrompts
|
|
36
36
|
:command="commandStore.selectedCommand"
|
|
37
37
|
@close="close()"
|
|
@@ -84,36 +84,36 @@ function selectIndex(index: number) {
|
|
|
84
84
|
</script>
|
|
85
85
|
|
|
86
86
|
<template>
|
|
87
|
-
<div class="poveste-prompt-select
|
|
87
|
+
<div class="poveste-prompt-select ptw-relative ptw-group">
|
|
88
88
|
<input
|
|
89
89
|
v-model="model"
|
|
90
90
|
:required="prompt.required"
|
|
91
91
|
tabindex="-1"
|
|
92
|
-
class="
|
|
92
|
+
class="ptw-absolute ptw-inset-0 ptw-opacity-0 ptw-pointer-events-none"
|
|
93
93
|
>
|
|
94
|
-
<label class="
|
|
95
|
-
<span class="
|
|
94
|
+
<label class="ptw-flex ptw-flex-col ptw-gap-2 ptw-p-2">
|
|
95
|
+
<span class="ptw-px-2 ptw-flex">
|
|
96
96
|
<span>{{ prompt.label }}</span>
|
|
97
97
|
<span
|
|
98
98
|
v-if="prompt.required"
|
|
99
|
-
class="
|
|
99
|
+
class="ptw-opacity-70"
|
|
100
100
|
>*</span>
|
|
101
101
|
|
|
102
|
-
<span class="
|
|
102
|
+
<span class="ptw-opacity-40 ptw-text-sm ptw-ml-auto ptw-invisible group-focus-within:ptw-visible">
|
|
103
103
|
Press <BaseKeyboardShortcut shortcut="Space" /> to select
|
|
104
104
|
</span>
|
|
105
105
|
</span>
|
|
106
106
|
<input
|
|
107
107
|
ref="input"
|
|
108
108
|
v-model="search"
|
|
109
|
-
class="
|
|
109
|
+
class="ptw-bg-transparent ptw-w-full ptw-p-2 ptw-border ptw-border-gray-500/50 focus:ptw-border-primary-500/50 ptw-rounded ptw-outline-none"
|
|
110
110
|
@keydown.down.prevent="selectNext()"
|
|
111
111
|
@keydown.up.prevent="selectPrevious()"
|
|
112
112
|
@keydown.space.prevent="selectIndex(selectedIndex)"
|
|
113
113
|
>
|
|
114
114
|
</label>
|
|
115
115
|
|
|
116
|
-
<div class="
|
|
116
|
+
<div class="ptw-overflow-auto max-h-[300px] ptw-mb-2">
|
|
117
117
|
<button
|
|
118
118
|
v-for="(option, index) of formattedOptions"
|
|
119
119
|
:key="option.value"
|
|
@@ -121,20 +121,20 @@ function selectIndex(index: number) {
|
|
|
121
121
|
tabindex="-1"
|
|
122
122
|
:class="[
|
|
123
123
|
model === option.value
|
|
124
|
-
? '
|
|
124
|
+
? 'ptw-bg-primary-500/20'
|
|
125
125
|
: index === selectedIndex
|
|
126
|
-
? '
|
|
127
|
-
: '
|
|
126
|
+
? 'ptw-bg-primary-500/10'
|
|
127
|
+
: 'ptw-bg-transparent',
|
|
128
128
|
]"
|
|
129
|
-
class="
|
|
129
|
+
class="ptw-w-full ptw-text-left ptw-px-4 ptw-py-2 hover:ptw-bg-primary-500/10 ptw-flex ptw-items-center"
|
|
130
130
|
@click="model = option.value"
|
|
131
131
|
>
|
|
132
|
-
<span class="
|
|
132
|
+
<span class="ptw-flex-1">{{ option.label }}</span>
|
|
133
133
|
|
|
134
134
|
<Icon
|
|
135
135
|
v-if="model === option.value"
|
|
136
136
|
icon="carbon:checkmark"
|
|
137
|
-
class="
|
|
137
|
+
class="ptw-w-4 ptw-h-4 ptw-text-primary-500"
|
|
138
138
|
/>
|
|
139
139
|
</button>
|
|
140
140
|
</div>
|
|
@@ -46,18 +46,18 @@ watch(defaultValue, (value) => {
|
|
|
46
46
|
|
|
47
47
|
<template>
|
|
48
48
|
<div class="poveste-prompt-text">
|
|
49
|
-
<label class="
|
|
50
|
-
<span class="
|
|
49
|
+
<label class="ptw-flex ptw-flex-col ptw-gap-2 ptw-p-2">
|
|
50
|
+
<span class="ptw-px-2">
|
|
51
51
|
<span>{{ prompt.label }}</span>
|
|
52
52
|
<span
|
|
53
53
|
v-if="prompt.required"
|
|
54
|
-
class="
|
|
54
|
+
class="ptw-opacity-70"
|
|
55
55
|
>*</span>
|
|
56
56
|
</span>
|
|
57
57
|
<input
|
|
58
58
|
ref="input"
|
|
59
59
|
v-model="model"
|
|
60
|
-
class="
|
|
60
|
+
class="ptw-bg-transparent ptw-w-full ptw-p-2 ptw-border ptw-border-gray-500/50 focus:ptw-border-primary-500/50 ptw-rounded ptw-outline-none"
|
|
61
61
|
:required="prompt.required"
|
|
62
62
|
>
|
|
63
63
|
</label>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { Icon } from '@iconify/vue'
|
|
3
|
+
import BaseListItem from '../base/BaseListItem.vue'
|
|
4
|
+
|
|
5
|
+
defineProps<{
|
|
6
|
+
title: string
|
|
7
|
+
icon: string
|
|
8
|
+
stateIcon?: string
|
|
9
|
+
isActive?: boolean
|
|
10
|
+
}>()
|
|
11
|
+
|
|
12
|
+
defineEmits<{
|
|
13
|
+
(e: 'click'): void
|
|
14
|
+
}>()
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<BaseListItem
|
|
19
|
+
:is-active="isActive"
|
|
20
|
+
class="ptw-px-6 ptw-py-4 ptw-gap-4"
|
|
21
|
+
@navigate="$emit('click')"
|
|
22
|
+
>
|
|
23
|
+
<Icon
|
|
24
|
+
class="ptw-w-4 ptw-h-4 ptw-flex-none"
|
|
25
|
+
:icon="icon"
|
|
26
|
+
aria-hidden="true"
|
|
27
|
+
/>
|
|
28
|
+
<span class="ptw-flex-1">{{ title }}</span>
|
|
29
|
+
<Icon
|
|
30
|
+
v-if="stateIcon"
|
|
31
|
+
class="ptw-w-4 ptw-h-4 ptw-flex-none ptw-opacity-70"
|
|
32
|
+
:icon="stateIcon"
|
|
33
|
+
aria-hidden="true"
|
|
34
|
+
/>
|
|
35
|
+
</BaseListItem>
|
|
36
|
+
</template>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
defineProps<{
|
|
3
|
+
title: string
|
|
4
|
+
}>()
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<template>
|
|
8
|
+
<div role="group">
|
|
9
|
+
<div
|
|
10
|
+
role="heading"
|
|
11
|
+
aria-level="3"
|
|
12
|
+
class="ptw-px-6 ptw-pt-3 ptw-pb-1 ptw-text-xs ptw-uppercase ptw-tracking-wide ptw-opacity-50"
|
|
13
|
+
>
|
|
14
|
+
{{ title }}
|
|
15
|
+
</div>
|
|
16
|
+
<slot />
|
|
17
|
+
</div>
|
|
18
|
+
</template>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { Icon } from '@iconify/vue'
|
|
3
|
+
import { onKeyboardShortcut } from '../../util/keyboard'
|
|
4
|
+
import LayoutPane from './LayoutPane.vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps({
|
|
7
|
+
shown: {
|
|
8
|
+
type: Boolean,
|
|
9
|
+
default: false,
|
|
10
|
+
},
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
const emit = defineEmits({
|
|
14
|
+
close: () => true,
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
function close() {
|
|
18
|
+
emit('close')
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
onKeyboardShortcut(['escape'], () => {
|
|
22
|
+
if (props.shown) {
|
|
23
|
+
close()
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<div
|
|
30
|
+
v-show="shown"
|
|
31
|
+
class="poveste-layout-modal ptw-fixed ptw-inset-0 ptw-bg-white/80 dark:ptw-bg-gray-900/80 ptw-z-20"
|
|
32
|
+
data-test-id="layout-modal"
|
|
33
|
+
>
|
|
34
|
+
<div
|
|
35
|
+
class="ptw-absolute ptw-inset-0"
|
|
36
|
+
@click="close()"
|
|
37
|
+
/>
|
|
38
|
+
<div class="ptw-bg-white dark:ptw-bg-gray-900 md:ptw-mt-16 md:ptw-mx-auto ptw-w-screen ptw-max-w-[512px] ptw-shadow-xl ptw-border ptw-border-gray-200 dark:ptw-border-gray-750 ptw-rounded-lg ptw-relative ptw-divide-y ptw-divide-gray-200 dark:ptw-divide-gray-850">
|
|
39
|
+
<div class="ptw-flex ptw-items-center ptw-px-6 ptw-py-3 ptw-text-gray-900 dark:ptw-text-gray-100">
|
|
40
|
+
<h2 class="ptw-flex-1 ptw-text-sm ptw-font-medium ptw-m-0">
|
|
41
|
+
Customize Layout
|
|
42
|
+
</h2>
|
|
43
|
+
<button
|
|
44
|
+
type="button"
|
|
45
|
+
class="ptw-flex ptw-items-center ptw-justify-center ptw-p-1 ptw-bg-transparent ptw-border-0 ptw-text-gray-500 dark:ptw-text-gray-400 hover:ptw-text-primary-500 dark:hover:ptw-text-primary-400 ptw-cursor-pointer"
|
|
46
|
+
aria-label="Close layout customization"
|
|
47
|
+
data-test-id="layout-modal-close"
|
|
48
|
+
@click="close()"
|
|
49
|
+
>
|
|
50
|
+
<Icon
|
|
51
|
+
icon="carbon:close"
|
|
52
|
+
class="ptw-w-5 ptw-h-5"
|
|
53
|
+
aria-hidden="true"
|
|
54
|
+
/>
|
|
55
|
+
</button>
|
|
56
|
+
</div>
|
|
57
|
+
<LayoutPane />
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</template>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useLayoutStore } from '../../stores/layout'
|
|
3
|
+
import LayoutItem from './LayoutItem.vue'
|
|
4
|
+
import LayoutItemGroup from './LayoutItemGroup.vue'
|
|
5
|
+
|
|
6
|
+
const settings = useLayoutStore().settings
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<template>
|
|
10
|
+
<div class="ptw-py-2">
|
|
11
|
+
<LayoutItemGroup title="Visibility">
|
|
12
|
+
<LayoutItem
|
|
13
|
+
title="Story List"
|
|
14
|
+
icon="carbon:open-panel-filled-left"
|
|
15
|
+
:state-icon="settings.storyListVisible ? 'carbon:view' : 'carbon:view-off'"
|
|
16
|
+
data-test-id="layout-toggle-story-list"
|
|
17
|
+
@click="settings.storyListVisible = !settings.storyListVisible"
|
|
18
|
+
/>
|
|
19
|
+
<LayoutItem
|
|
20
|
+
title="Story Options"
|
|
21
|
+
icon="carbon:open-panel-filled-right"
|
|
22
|
+
:state-icon="settings.storyOptionsVisible ? 'carbon:view' : 'carbon:view-off'"
|
|
23
|
+
data-test-id="layout-toggle-story-options"
|
|
24
|
+
@click="settings.storyOptionsVisible = !settings.storyOptionsVisible"
|
|
25
|
+
/>
|
|
26
|
+
</LayoutItemGroup>
|
|
27
|
+
|
|
28
|
+
<LayoutItemGroup title="Story Options Placement">
|
|
29
|
+
<LayoutItem
|
|
30
|
+
title="Right"
|
|
31
|
+
icon="carbon:open-panel-filled-right"
|
|
32
|
+
:is-active="settings.storyOptionsPlacement === 'right'"
|
|
33
|
+
data-test-id="layout-placement-right"
|
|
34
|
+
@click="settings.storyOptionsPlacement = 'right'"
|
|
35
|
+
/>
|
|
36
|
+
<LayoutItem
|
|
37
|
+
title="Bottom"
|
|
38
|
+
icon="carbon:open-panel-filled-bottom"
|
|
39
|
+
:is-active="settings.storyOptionsPlacement === 'bottom'"
|
|
40
|
+
data-test-id="layout-placement-bottom"
|
|
41
|
+
@click="settings.storyOptionsPlacement = 'bottom'"
|
|
42
|
+
/>
|
|
43
|
+
</LayoutItemGroup>
|
|
44
|
+
</div>
|
|
45
|
+
</template>
|
|
@@ -62,9 +62,9 @@ const canReset = computed(() => props.variant.state?._hPropState?.[props.compone
|
|
|
62
62
|
<Icon
|
|
63
63
|
v-tooltip="'Remove override'"
|
|
64
64
|
icon="carbon:erase"
|
|
65
|
-
class="
|
|
65
|
+
class="ptw-cursor-pointer ptw-w-4 ptw-h-4 hover:ptw-text-primary-500 dark:hover:ptw-text-primary-400 ptw-text-gray-900 dark:ptw-text-gray-100"
|
|
66
66
|
:class="[
|
|
67
|
-
canReset ? '
|
|
67
|
+
canReset ? 'ptw-opacity-50 hover:ptw-opacity-100' : 'ptw-opacity-25 ptw-pointer-events-none',
|
|
68
68
|
]"
|
|
69
69
|
@click.stop="reset()"
|
|
70
70
|
/>
|