@poveste/app 0.1.3 → 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.
Files changed (187) hide show
  1. package/dist/app/style/floating.pcss +4 -4
  2. package/dist/app/style/main.pcss +2 -2
  3. package/dist/app/style/sandbox.css +1 -1
  4. package/dist/bundle-main.js +2 -0
  5. package/dist/bundled/App.vue2.js +81 -37
  6. package/dist/bundled/app.css +51 -46
  7. package/dist/bundled/components/HomeView.vue2.js +3 -3
  8. package/dist/bundled/components/app/AppActions.vue.js +5 -0
  9. package/dist/bundled/components/app/AppActions.vue2.js +76 -0
  10. package/dist/bundled/components/app/AppHeader.vue2.js +5 -47
  11. package/dist/bundled/components/app/Breadcrumb.vue.js +1 -1
  12. package/dist/bundled/components/app/Breadcrumb.vue2.js +9 -9
  13. package/dist/bundled/components/app/HomeCounter.vue2.js +5 -5
  14. package/dist/bundled/components/app/InitialLoading.vue2.js +5 -5
  15. package/dist/bundled/components/app/MobileOverlay.vue2.js +5 -5
  16. package/dist/bundled/components/app/TopBar.vue.js +5 -0
  17. package/dist/bundled/components/app/TopBar.vue2.js +73 -0
  18. package/dist/bundled/components/app/TopBarChip.vue.js +13 -0
  19. package/dist/bundled/components/app/TopBarChipItem.vue.js +13 -0
  20. package/dist/bundled/components/base/BaseButton.vue2.js +3 -3
  21. package/dist/bundled/components/base/BaseCheckbox.vue2.js +8 -8
  22. package/dist/bundled/components/base/BaseEmpty.vue.js +2 -2
  23. package/dist/bundled/components/base/BaseKeyboardShortcut.vue2.js +1 -1
  24. package/dist/bundled/components/base/BaseListItem.vue2.js +2 -2
  25. package/dist/bundled/components/base/BaseListItemLink.vue.js +2 -2
  26. package/dist/bundled/components/base/BaseOverflowMenu.vue2.js +4 -4
  27. package/dist/bundled/components/base/BaseOverflowTab.vue.js +3 -3
  28. package/dist/bundled/components/base/BaseSelect.vue2.js +6 -6
  29. package/dist/bundled/components/base/BaseSplitPane.vue.js +1 -1
  30. package/dist/bundled/components/base/BaseSplitPane.vue2.js +20 -16
  31. package/dist/bundled/components/base/BaseTab.vue.js +3 -3
  32. package/dist/bundled/components/base/BaseTag.vue.js +1 -1
  33. package/dist/bundled/components/command/CommandPrompts.vue2.js +5 -5
  34. package/dist/bundled/components/command/CommandPromptsModal.vue2.js +3 -3
  35. package/dist/bundled/components/command/PromptSelect.vue2.js +12 -12
  36. package/dist/bundled/components/command/PromptText.vue2.js +4 -4
  37. package/dist/bundled/components/layout/LayoutItem.vue.js +5 -0
  38. package/dist/bundled/components/layout/LayoutItem.vue2.js +44 -0
  39. package/dist/bundled/components/layout/LayoutItemGroup.vue.js +5 -0
  40. package/dist/bundled/components/layout/LayoutItemGroup.vue2.js +25 -0
  41. package/dist/bundled/components/layout/LayoutModal.vue.js +5 -0
  42. package/dist/bundled/components/layout/LayoutModal.vue2.js +68 -0
  43. package/dist/bundled/components/layout/LayoutPane.vue.js +5 -0
  44. package/dist/bundled/components/layout/LayoutPane.vue2.js +59 -0
  45. package/dist/bundled/components/panel/ControlsComponentPropItem.vue2.js +2 -2
  46. package/dist/bundled/components/panel/ControlsComponentProps.vue2.js +4 -4
  47. package/dist/bundled/components/panel/ControlsComponentState.vue2.js +2 -2
  48. package/dist/bundled/components/panel/PaneTabs.vue2.js +4 -4
  49. package/dist/bundled/components/panel/StatePresets.vue2.js +13 -13
  50. package/dist/bundled/components/panel/StoryControls.vue2.js +6 -6
  51. package/dist/bundled/components/panel/StoryDocs.vue2.js +4 -4
  52. package/dist/bundled/components/panel/StoryEvent.vue2.js +7 -7
  53. package/dist/bundled/components/panel/StoryEvents.vue2.js +1 -1
  54. package/dist/bundled/components/panel/StorySidePanel.vue2.js +58 -47
  55. package/dist/bundled/components/panel/StorySourceCode.vue.js +1 -1
  56. package/dist/bundled/components/panel/StorySourceCode.vue2.js +19 -19
  57. package/dist/bundled/components/search/SearchItem.vue.js +1 -1
  58. package/dist/bundled/components/search/SearchItem.vue2.js +3 -3
  59. package/dist/bundled/components/search/SearchItemContent.vue2.js +9 -9
  60. package/dist/bundled/components/search/SearchLoading.vue2.js +2 -2
  61. package/dist/bundled/components/search/SearchModal.vue2.js +3 -3
  62. package/dist/bundled/components/search/SearchPane.vue2.js +4 -4
  63. package/dist/bundled/components/story/StoryResponsivePreview.vue.js +1 -1
  64. package/dist/bundled/components/story/StoryResponsivePreview.vue2.js +21 -21
  65. package/dist/bundled/components/story/StoryVariantGrid.vue2.js +7 -26
  66. package/dist/bundled/components/story/StoryVariantGridItem.vue.js +1 -1
  67. package/dist/bundled/components/story/StoryVariantGridItem.vue2.js +36 -21
  68. package/dist/bundled/components/story/StoryVariantListItem.vue.js +1 -1
  69. package/dist/bundled/components/story/StoryVariantListItem.vue2.js +5 -5
  70. package/dist/bundled/components/story/StoryVariantSingle.vue.js +1 -1
  71. package/dist/bundled/components/story/StoryVariantSingle.vue2.js +10 -10
  72. package/dist/bundled/components/story/StoryVariantSinglePreviewNative.vue2.js +6 -5
  73. package/dist/bundled/components/story/StoryVariantSinglePreviewRemote.vue2.js +33 -8
  74. package/dist/bundled/components/story/StoryVariantSingleView.vue2.js +8 -39
  75. package/dist/bundled/components/story/StoryView.vue2.js +21 -11
  76. package/dist/bundled/components/story/StoryViewer.vue.js +1 -1
  77. package/dist/bundled/components/story/StoryViewer.vue2.js +2 -2
  78. package/dist/bundled/components/toolbar/DevOnlyToolbarOpenInEditor.vue2.js +13 -9
  79. package/dist/bundled/components/toolbar/ToolbarBackground.vue.js +1 -1
  80. package/dist/bundled/components/toolbar/ToolbarBackground.vue2.js +62 -33
  81. package/dist/bundled/components/toolbar/ToolbarNewTab.vue2.js +13 -10
  82. package/dist/bundled/components/toolbar/ToolbarResponsiveSize.vue2.js +14 -14
  83. package/dist/bundled/components/toolbar/ToolbarTextDirection.vue2.js +13 -9
  84. package/dist/bundled/components/toolbar/ToolbarTitle.vue.js +4 -1
  85. package/dist/bundled/components/toolbar/ToolbarTitle.vue2.js +30 -7
  86. package/dist/bundled/components/tree/StoryGroup.vue2.js +5 -5
  87. package/dist/bundled/components/tree/StoryList.vue2.js +1 -1
  88. package/dist/bundled/components/tree/StoryListFolder.vue.js +1 -1
  89. package/dist/bundled/components/tree/StoryListFolder.vue2.js +7 -7
  90. package/dist/bundled/components/tree/StoryListItem.vue.js +1 -1
  91. package/dist/bundled/components/tree/StoryListItem.vue2.js +8 -8
  92. package/dist/bundled/index.js +3 -0
  93. package/dist/bundled/sandbox.js +41 -15
  94. package/dist/bundled/stores/layout.js +16 -0
  95. package/dist/bundled/stores/preview-settings.js +19 -4
  96. package/dist/bundled/util/color-scheme.js +27 -0
  97. package/dist/bundled/util/const.js +2 -0
  98. package/dist/bundled/util/dark.js +3 -3
  99. package/dist/bundled/util/keyboard.js +60 -32
  100. package/dist/bundled/util/preview-settings.js +11 -0
  101. package/dist/bundled/util/tooltip.js +2 -2
  102. package/dist/style.css +644 -529
  103. package/package.json +8 -8
  104. package/src/app/App.vue +109 -66
  105. package/src/app/components/HomeView.vue +3 -3
  106. package/src/app/components/app/AppActions.vue +58 -0
  107. package/src/app/components/app/AppHeader.vue +4 -47
  108. package/src/app/components/app/Breadcrumb.vue +8 -8
  109. package/src/app/components/app/HomeCounter.vue +5 -5
  110. package/src/app/components/app/InitialLoading.vue +5 -5
  111. package/src/app/components/app/MobileOverlay.vue +5 -5
  112. package/src/app/components/app/TopBar.vue +60 -0
  113. package/src/app/components/app/TopBarChip.vue +5 -0
  114. package/src/app/components/app/TopBarChipItem.vue +7 -0
  115. package/src/app/components/base/BaseButton.vue +3 -3
  116. package/src/app/components/base/BaseCheckbox.vue +9 -9
  117. package/src/app/components/base/BaseCopyIcon.vue +1 -1
  118. package/src/app/components/base/BaseEmpty.vue +4 -4
  119. package/src/app/components/base/BaseKeyboardShortcut.vue +1 -1
  120. package/src/app/components/base/BaseListItem.vue +3 -3
  121. package/src/app/components/base/BaseListItemLink.vue +3 -3
  122. package/src/app/components/base/BaseOverflowMenu.vue +4 -4
  123. package/src/app/components/base/BaseOverflowTab.vue +3 -3
  124. package/src/app/components/base/BaseSelect.vue +6 -6
  125. package/src/app/components/base/BaseSplitPane.vue +21 -16
  126. package/src/app/components/base/BaseTab.vue +3 -3
  127. package/src/app/components/base/BaseTag.vue +1 -1
  128. package/src/app/components/command/CommandPrompts.vue +5 -5
  129. package/src/app/components/command/CommandPromptsModal.vue +3 -3
  130. package/src/app/components/command/PromptSelect.vue +14 -14
  131. package/src/app/components/command/PromptText.vue +4 -4
  132. package/src/app/components/layout/LayoutItem.vue +36 -0
  133. package/src/app/components/layout/LayoutItemGroup.vue +18 -0
  134. package/src/app/components/layout/LayoutModal.vue +60 -0
  135. package/src/app/components/layout/LayoutPane.vue +45 -0
  136. package/src/app/components/panel/ControlsComponentPropItem.vue +2 -2
  137. package/src/app/components/panel/ControlsComponentProps.vue +3 -3
  138. package/src/app/components/panel/ControlsComponentState.vue +2 -2
  139. package/src/app/components/panel/PaneTabs.vue +4 -4
  140. package/src/app/components/panel/StatePresets.vue +13 -13
  141. package/src/app/components/panel/StoryControls.vue +6 -6
  142. package/src/app/components/panel/StoryDocs.vue +4 -4
  143. package/src/app/components/panel/StoryEvent.vue +7 -7
  144. package/src/app/components/panel/StoryEvents.vue +1 -1
  145. package/src/app/components/panel/StorySidePanel.vue +51 -41
  146. package/src/app/components/panel/StorySourceCode.vue +19 -19
  147. package/src/app/components/search/SearchItem.vue +2 -2
  148. package/src/app/components/search/SearchItemContent.vue +9 -9
  149. package/src/app/components/search/SearchLoading.vue +2 -2
  150. package/src/app/components/search/SearchModal.vue +3 -3
  151. package/src/app/components/search/SearchPane.vue +4 -4
  152. package/src/app/components/story/StoryResponsivePreview.vue +27 -27
  153. package/src/app/components/story/StoryVariantGrid.vue +5 -24
  154. package/src/app/components/story/StoryVariantGridItem.vue +36 -17
  155. package/src/app/components/story/StoryVariantListItem.vue +4 -4
  156. package/src/app/components/story/StoryVariantSingle.vue +9 -9
  157. package/src/app/components/story/StoryVariantSinglePreviewNative.vue +7 -5
  158. package/src/app/components/story/StoryVariantSinglePreviewRemote.vue +37 -7
  159. package/src/app/components/story/StoryVariantSingleView.vue +1 -34
  160. package/src/app/components/story/StoryView.vue +23 -8
  161. package/src/app/components/story/StoryViewer.vue +1 -1
  162. package/src/app/components/toolbar/DevOnlyToolbarOpenInEditor.vue +5 -4
  163. package/src/app/components/toolbar/ToolbarBackground.vue +62 -25
  164. package/src/app/components/toolbar/ToolbarNewTab.vue +5 -4
  165. package/src/app/components/toolbar/ToolbarResponsiveSize.vue +15 -15
  166. package/src/app/components/toolbar/ToolbarTextDirection.vue +5 -4
  167. package/src/app/components/toolbar/ToolbarTitle.vue +32 -8
  168. package/src/app/components/tree/StoryGroup.vue +5 -5
  169. package/src/app/components/tree/StoryList.vue +1 -1
  170. package/src/app/components/tree/StoryListFolder.vue +6 -6
  171. package/src/app/components/tree/StoryListItem.vue +6 -6
  172. package/src/app/index.ts +3 -0
  173. package/src/app/sandbox.ts +59 -15
  174. package/src/app/stores/layout.ts +22 -0
  175. package/src/app/stores/preview-settings.ts +26 -2
  176. package/src/app/style/floating.pcss +4 -4
  177. package/src/app/style/main.pcss +2 -2
  178. package/src/app/style/sandbox.css +1 -1
  179. package/src/app/types.ts +49 -0
  180. package/src/app/util/color-scheme.ts +36 -0
  181. package/src/app/util/const.ts +1 -0
  182. package/src/app/util/dark.ts +3 -3
  183. package/src/app/util/keyboard.ts +65 -32
  184. package/src/app/util/preview-settings.ts +16 -0
  185. package/src/app/util/tooltip.ts +2 -2
  186. package/src/bundle-main.js +2 -0
  187. package/src/shim.d.ts +2 -2
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@poveste/app",
3
3
  "type": "module",
4
- "version": "0.1.3",
4
+ "version": "0.2.0",
5
5
  "description": "Pre-bundled UI for Poveste",
6
6
  "author": {
7
7
  "name": "Sorin Gitlan"
@@ -15,10 +15,6 @@
15
15
  "publishConfig": {
16
16
  "access": "public"
17
17
  },
18
- "files": [
19
- "dist",
20
- "src"
21
- ],
22
18
  "exports": {
23
19
  ".": {
24
20
  "types": "./dist/index.d.ts",
@@ -27,12 +23,16 @@
27
23
  "./*": "./*"
28
24
  },
29
25
  "types": "./src/index.ts",
26
+ "files": [
27
+ "dist",
28
+ "src"
29
+ ],
30
30
  "dependencies": {
31
31
  "fuse.js": "^7.0.0",
32
32
  "shiki": "^3.0.0",
33
- "@poveste/controls": "^0.1.3",
34
- "@poveste/vendors": "^0.1.3",
35
- "@poveste/shared": "^0.1.3"
33
+ "@poveste/controls": "^0.2.0",
34
+ "@poveste/shared": "^0.2.0",
35
+ "@poveste/vendors": "^0.2.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@tailwindcss/typography": "^0.5.15",
package/src/app/App.vue CHANGED
@@ -9,17 +9,22 @@ import type { StoryFile, Tree } from './types'
9
9
  import { useTitle } from '@vueuse/core'
10
10
  import { onUpdate, files as rawFiles, tree as rawTree } from 'virtual:$poveste-stories'
11
11
  import { computed, onMounted, ref, watch } from 'vue'
12
+ import AppActions from './components/app/AppActions.vue'
12
13
  import AppHeader from './components/app/AppHeader.vue'
13
14
  import Breadcrumb from './components/app/Breadcrumb.vue'
14
15
  import InitialLoading from './components/app/InitialLoading.vue'
16
+ import TopBar from './components/app/TopBar.vue'
15
17
  import BaseSplitPane from './components/base/BaseSplitPane.vue'
16
18
  import CommandPromptsModal from './components/command/CommandPromptsModal.vue'
19
+ import LayoutModal from './components/layout/LayoutModal.vue'
17
20
  import SearchModal from './components/search/SearchModal.vue'
18
21
  import GenericMountStory from './components/story/GenericMountStory.vue'
19
22
  import StoryList from './components/tree/StoryList.vue'
20
23
  import { useCommandStore } from './stores/command'
24
+ import { useLayoutStore } from './stores/layout'
21
25
  import { useStoryStore } from './stores/story'
22
26
  import { povesteConfig } from './util/config'
27
+ import { toggleDark } from './util/dark'
23
28
  import { onKeyboardShortcut } from './util/keyboard'
24
29
  import { mapFile } from './util/mapping'
25
30
  import { isMobile } from './util/responsive'
@@ -61,10 +66,9 @@ useTitle(computed(() => {
61
66
  return povesteConfig.theme.title
62
67
  }))
63
68
 
64
- // Search
65
-
66
69
  const loadSearch = ref(false)
67
70
  const isSearchOpen = ref(false)
71
+ const isLayoutOpen = ref(false)
68
72
 
69
73
  watch(isSearchOpen, (value) => {
70
74
  if (value) {
@@ -77,6 +81,16 @@ onKeyboardShortcut(['ctrl+k', 'meta+k'], (event) => {
77
81
  event.preventDefault()
78
82
  })
79
83
 
84
+ onKeyboardShortcut(['ctrl+shift+l', 'meta+shift+l'], (event) => {
85
+ isLayoutOpen.value = !isLayoutOpen.value
86
+ event.preventDefault()
87
+ })
88
+
89
+ onKeyboardShortcut(['ctrl+shift+d', 'meta+shift+d'], (event) => {
90
+ event.preventDefault()
91
+ toggleDark()
92
+ })
93
+
80
94
  const loading = ref(false)
81
95
 
82
96
  if (import.meta.hot && !rawFiles.length) {
@@ -92,81 +106,110 @@ onMounted(() => {
92
106
  })
93
107
 
94
108
  const commandStore = useCommandStore()
109
+ const layoutStore = useLayoutStore()
95
110
  </script>
96
111
 
97
112
  <template>
98
- <div
99
- v-if="storyStore.currentStory"
100
- class="poveste-app htw-hidden"
101
- >
102
- <GenericMountStory
103
- :key="storyStore.currentStory.id"
104
- :story="storyStore.currentStory"
105
- />
106
- </div>
107
-
108
- <div
109
- class="htw-h-screen htw-bg-white dark:htw-bg-gray-700 dark:htw-text-gray-100"
110
- :style="{
111
- // Prevent flash of content
112
- opacity: mounted ? 1 : 0,
113
- }"
114
- >
113
+ <div class="poveste-app-root ptw-h-full">
115
114
  <div
116
- v-if="isMobile"
117
- class="htw-h-full htw-flex htw-flex-col htw-divide-y htw-divide-gray-100 dark:htw-divide-gray-800"
115
+ v-if="storyStore.currentStory"
116
+ class="poveste-app ptw-hidden"
118
117
  >
119
- <AppHeader @search="isSearchOpen = true" />
120
- <Breadcrumb
121
- :tree="tree"
122
- :stories="stories"
118
+ <GenericMountStory
119
+ :key="storyStore.currentStory.id"
120
+ :story="storyStore.currentStory"
123
121
  />
124
- <RouterView class="htw-grow" />
125
122
  </div>
126
123
 
127
- <BaseSplitPane
128
- v-else
129
- save-id="main-horiz"
130
- :min="5"
131
- :max="50"
132
- :default-split="15"
133
- class="htw-h-full"
124
+ <div
125
+ class="ptw-h-screen ptw-bg-gray-100 dark:ptw-bg-gray-750 dark:ptw-text-gray-100"
126
+ :style="{
127
+ // Prevent flash of content
128
+ opacity: mounted ? 1 : 0,
129
+ }"
134
130
  >
135
- <template #first>
136
- <div class="htw-flex htw-flex-col htw-h-full htw-bg-gray-100 dark:htw-bg-gray-750 __poveste-pane-shadow-from-right">
137
- <AppHeader
138
- class="htw-flex-none"
131
+ <div
132
+ v-if="isMobile"
133
+ class="ptw-h-full ptw-flex ptw-flex-col ptw-divide-y ptw-divide-gray-100 dark:ptw-divide-gray-800"
134
+ >
135
+ <div class="ptw-flex ptw-items-center ptw-gap-2 ptw-pr-4">
136
+ <AppHeader class="ptw-flex-1" />
137
+ <AppActions
138
+ class="ptw-flex-none"
139
+ @layout="isLayoutOpen = true"
139
140
  @search="isSearchOpen = true"
140
141
  />
141
- <StoryList
142
- :tree="tree"
143
- :stories="stories"
144
- class="htw-flex-1"
145
- />
146
142
  </div>
147
- </template>
148
-
149
- <template #last>
150
- <RouterView />
151
- </template>
152
- </BaseSplitPane>
153
-
154
- <SearchModal
155
- v-if="loadSearch"
156
- :shown="isSearchOpen"
157
- @close="isSearchOpen = false"
158
- />
159
-
160
- <CommandPromptsModal
161
- v-if="__POVESTE_DEV__"
162
- :shown="commandStore.showPromptsModal"
163
- @close="commandStore.showPromptsModal = false"
164
- />
165
- </div>
143
+ <Breadcrumb
144
+ :tree="tree"
145
+ :stories="stories"
146
+ />
147
+ <RouterView class="ptw-grow" />
148
+ </div>
149
+
150
+ <BaseSplitPane
151
+ v-else-if="layoutStore.settings.storyListVisible"
152
+ save-id="main-horiz"
153
+ :min="5"
154
+ :max="50"
155
+ :default-split="15"
156
+ class="ptw-h-full"
157
+ >
158
+ <template #first>
159
+ <div class="ptw-flex ptw-flex-col ptw-h-full ptw-bg-gray-100 dark:ptw-bg-gray-750 __poveste-pane-shadow-from-right">
160
+ <AppHeader class="ptw-flex-none" />
161
+ <StoryList
162
+ :tree="tree"
163
+ :stories="stories"
164
+ class="ptw-flex-1"
165
+ />
166
+ </div>
167
+ </template>
168
+
169
+ <template #last>
170
+ <div class="ptw-flex ptw-flex-col ptw-h-full">
171
+ <TopBar
172
+ @layout="isLayoutOpen = true"
173
+ @search="isSearchOpen = true"
174
+ />
175
+ <RouterView class="ptw-flex-1 ptw-min-h-0" />
176
+ </div>
177
+ </template>
178
+ </BaseSplitPane>
179
+ <div
180
+ v-else
181
+ class="ptw-h-full ptw-flex ptw-flex-col"
182
+ >
183
+ <TopBar
184
+ @layout="isLayoutOpen = true"
185
+ @search="isSearchOpen = true"
186
+ />
187
+ <RouterView class="ptw-flex-1 ptw-min-h-0" />
188
+ </div>
189
+
190
+ <LayoutModal
191
+ v-if="!isMobile"
192
+ :shown="isLayoutOpen"
193
+ @close="isLayoutOpen = false"
194
+ />
195
+
196
+ <SearchModal
197
+ v-if="loadSearch"
198
+ :shown="isSearchOpen"
199
+ @close="isSearchOpen = false"
200
+ />
166
201
 
167
- <transition name="__poveste-fade">
168
- <InitialLoading
169
- v-if="loading"
170
- />
171
- </transition>
202
+ <CommandPromptsModal
203
+ v-if="__POVESTE_DEV__"
204
+ :shown="commandStore.showPromptsModal"
205
+ @close="commandStore.showPromptsModal = false"
206
+ />
207
+ </div>
208
+
209
+ <transition name="__poveste-fade">
210
+ <InitialLoading
211
+ v-if="loading"
212
+ />
213
+ </transition>
214
+ </div>
172
215
  </template>
@@ -34,13 +34,13 @@ const stats = computed(() => {
34
34
  </script>
35
35
 
36
36
  <template>
37
- <div class="poveste-home-view htw-flex md:htw-flex-col htw-gap-12 htw-items-center htw-justify-center htw-h-full">
37
+ <div class="poveste-home-view ptw-flex md:ptw-flex-col ptw-gap-12 ptw-items-center ptw-justify-center ptw-h-full">
38
38
  <img
39
39
  :src="logoUrl"
40
40
  alt="Logo"
41
- class="htw-w-64 htw-h-64 htw-opacity-25 htw-mb-8 htw-hidden md:htw-block"
41
+ class="ptw-w-64 ptw-h-64 ptw-opacity-25 ptw-mb-8 ptw-hidden md:ptw-block"
42
42
  >
43
- <div class="htw-flex !md:htw-flex-col htw-flex-wrap htw-justify-evenly htw-gap-2 htw-px-4 htw-py-2 htw-bg-gray-100 dark:htw-bg-gray-750 htw-rounded htw-border htw-border-gray-500/30">
43
+ <div class="ptw-flex !md:ptw-flex-col ptw-flex-wrap ptw-justify-evenly ptw-gap-2 ptw-px-4 ptw-py-2 ptw-bg-gray-100 dark:ptw-bg-gray-750 ptw-rounded ptw-border ptw-border-gray-500/30">
44
44
  <HomeCounter
45
45
  title="Stories"
46
46
  icon="carbon:cube"
@@ -0,0 +1,58 @@
1
+ <script setup lang="ts">
2
+ import { Icon } from '@iconify/vue'
3
+ import { computed } from 'vue'
4
+ import { povesteConfig } from '../../util/config'
5
+ import { isDark, toggleDark } from '../../util/dark'
6
+ import { isMobile } from '../../util/responsive'
7
+ import { makeTooltip } from '../../util/tooltip'
8
+ import TopBarChip from './TopBarChip.vue'
9
+ import TopBarChipItem from './TopBarChipItem.vue'
10
+
11
+ defineEmits({
12
+ search: () => true,
13
+ layout: () => true,
14
+ })
15
+
16
+ const themeIcon = computed(() => {
17
+ return isDark.value ? 'carbon:moon' : 'carbon:sun'
18
+ })
19
+ </script>
20
+
21
+ <template>
22
+ <TopBarChip>
23
+ <TopBarChipItem
24
+ v-if="!isMobile"
25
+ v-tooltip="makeTooltip('Layout', ({ isMac }) => isMac ? 'meta+shift+l' : 'ctrl+shift+l')"
26
+ aria-label="Open layout customization"
27
+ data-test-id="layout-btn"
28
+ @click="$emit('layout')"
29
+ >
30
+ <Icon
31
+ icon="carbon:panel-expansion"
32
+ class="ptw-w-4 ptw-h-4"
33
+ />
34
+ </TopBarChipItem>
35
+
36
+ <TopBarChipItem
37
+ v-tooltip="makeTooltip('Search', ({ isMac }) => isMac ? 'meta+k' : 'ctrl+k')"
38
+ data-test-id="search-btn"
39
+ @click="$emit('search')"
40
+ >
41
+ <Icon
42
+ icon="carbon:search"
43
+ class="ptw-w-4 ptw-h-4"
44
+ />
45
+ </TopBarChipItem>
46
+
47
+ <TopBarChipItem
48
+ v-if="!povesteConfig.theme.hideColorSchemeSwitch"
49
+ v-tooltip="makeTooltip('Toggle dark mode', ({ isMac }) => isMac ? 'meta+shift+d' : 'ctrl+shift+d')"
50
+ @click="toggleDark()"
51
+ >
52
+ <Icon
53
+ :icon="themeIcon"
54
+ class="ptw-w-4 ptw-h-4"
55
+ />
56
+ </TopBarChipItem>
57
+ </TopBarChip>
58
+ </template>
@@ -1,63 +1,20 @@
1
1
  <script setup lang="ts">
2
- import { Icon } from '@iconify/vue'
3
- import { computed } from 'vue'
4
2
  import { povesteConfig } from '../../util/config'
5
- import { isDark, toggleDark } from '../../util/dark'
6
- import { onKeyboardShortcut } from '../../util/keyboard'
7
- import { makeTooltip } from '../../util/tooltip'
8
3
  import AppLogo from './AppLogo.vue'
9
-
10
- defineEmits({
11
- search: () => true,
12
- })
13
-
14
- const themeIcon = computed(() => {
15
- return isDark.value ? 'carbon:moon' : 'carbon:sun'
16
- })
17
-
18
- onKeyboardShortcut(['ctrl+shift+d', 'meta+shift+d'], (event) => {
19
- event.preventDefault()
20
- toggleDark()
21
- })
22
4
  </script>
23
5
 
24
6
  <template>
25
7
  <div
26
- class="poveste-app-header htw-px-4 htw-h-16 htw-flex htw-items-center htw-gap-2"
8
+ class="poveste-app-header ptw-px-4 ptw-h-14 ptw-flex ptw-items-center ptw-gap-2"
27
9
  >
28
- <div class="htw-py-3 sm:htw-py-4 htw-flex-1 htw-h-full htw-flex htw-items-center htw-pr-2">
10
+ <div class="ptw-py-3 sm:ptw-py-4 ptw-flex-1 ptw-h-full ptw-flex ptw-items-center ptw-pr-2">
29
11
  <a
30
12
  :href="povesteConfig.theme?.logoHref"
31
13
  target="_blank"
32
- class="htw-w-full htw-h-full htw-flex htw-items-center"
14
+ class="ptw-w-full ptw-h-full ptw-flex ptw-items-center"
33
15
  >
34
16
  <AppLogo
35
- class="htw-max-w-full htw-max-h-full"
36
- />
37
- </a>
38
- </div>
39
- <div class="htw-ml-auto htw-flex-none htw-flex">
40
- <a
41
- v-tooltip="makeTooltip('Search', ({ isMac }) => isMac ? 'meta+k' : 'ctrl+k')"
42
- class="htw-p-2 sm:htw-p-1 hover:htw-text-primary-500 dark:hover:htw-text-primary-400 htw-cursor-pointer htw-text-gray-900 dark:htw-text-gray-100"
43
- data-test-id="search-btn"
44
- @click="$emit('search')"
45
- >
46
- <Icon
47
- icon="carbon:search"
48
- class="htw-w-6 htw-h-6 sm:htw-w-4 sm:htw-h-4"
49
- />
50
- </a>
51
-
52
- <a
53
- v-if="!povesteConfig.theme.hideColorSchemeSwitch"
54
- v-tooltip="makeTooltip('Toggle dark mode', ({ isMac }) => isMac ? 'meta+shift+d' : 'ctrl+shift+d')"
55
- class="htw-p-2 sm:htw-p-1 hover:htw-text-primary-500 dark:hover:htw-text-primary-400 htw-cursor-pointer htw-text-gray-900 dark:htw-text-gray-100"
56
- @click="toggleDark()"
57
- >
58
- <Icon
59
- :icon="themeIcon"
60
- class="htw-w-6 htw-h-6 sm:htw-w-4 sm:htw-h-4"
17
+ class="ptw-max-w-full ptw-max-h-full"
61
18
  />
62
19
  </a>
63
20
  </div>
@@ -37,7 +37,7 @@ watch(story, () => {
37
37
  <template>
38
38
  <div class="poveste-breadcrumb">
39
39
  <a
40
- class="htw-px-6 htw-h-12 hover:htw-text-primary-500 dark:hover:htw-text-primary-400 htw-cursor-pointer htw-flex htw-gap-2 htw-flex-wrap htw-w-full htw-items-center"
40
+ class="ptw-px-6 ptw-h-12 hover:ptw-text-primary-500 dark:hover:ptw-text-primary-400 ptw-cursor-pointer ptw-flex ptw-gap-2 ptw-flex-wrap ptw-w-full ptw-items-center"
41
41
  @click="openMenu"
42
42
  >
43
43
  <template v-if="story">
@@ -48,21 +48,21 @@ watch(story, () => {
48
48
  <span>
49
49
  {{ file }}
50
50
  </span>
51
- <span class="htw-opacity-40">
51
+ <span class="ptw-opacity-40">
52
52
  /
53
53
  </span>
54
54
  </template>
55
- <span class="htw-flex htw-items-center htw-gap-2">
55
+ <span class="ptw-flex ptw-items-center ptw-gap-2">
56
56
  <Icon
57
57
  :icon="story.icon ?? 'carbon:cube'"
58
- class="htw-w-5 htw-h-5 htw-flex-none"
58
+ class="ptw-w-5 ptw-h-5 ptw-flex-none"
59
59
  :class="{
60
- 'htw-text-primary-500': !story.iconColor,
60
+ 'ptw-text-primary-500': !story.iconColor,
61
61
  'bind-icon-color': story.iconColor,
62
62
  }"
63
63
  />
64
64
  {{ story.title }}
65
- <span class="htw-opacity-40 htw-text-sm">
65
+ <span class="ptw-opacity-40 ptw-text-sm">
66
66
  {{ story.variants.length }}
67
67
  </span>
68
68
  </span>
@@ -73,7 +73,7 @@ watch(story, () => {
73
73
 
74
74
  <Icon
75
75
  icon="carbon:chevron-sort"
76
- class="htw-w-5 htw-h-5 htw-shrink-0 htw-ml-auto"
76
+ class="ptw-w-5 ptw-h-5 ptw-shrink-0 ptw-ml-auto"
77
77
  />
78
78
  </a>
79
79
  </div>
@@ -86,7 +86,7 @@ watch(story, () => {
86
86
  <StoryList
87
87
  :tree="tree"
88
88
  :stories="stories"
89
- class="htw-flex-1 htw-overflow-y-scroll"
89
+ class="ptw-flex-1 ptw-overflow-y-scroll"
90
90
  />
91
91
  </MobileOverlay>
92
92
  </template>
@@ -18,19 +18,19 @@ const props = defineProps({
18
18
  </script>
19
19
 
20
20
  <template>
21
- <div class="htw-p-2 htw-flex htw-items-center htw-gap-x-2">
21
+ <div class="ptw-p-2 ptw-flex ptw-items-center ptw-gap-x-2">
22
22
  <Icon
23
23
  :icon="props.icon"
24
- class="htw-text-2xl htw-text-gray-700 dark:htw-text-gray-300 htw-flex-none"
24
+ class="ptw-text-2xl ptw-text-gray-700 dark:ptw-text-gray-300 ptw-flex-none"
25
25
  />
26
- <div class="htw-flex htw-flex-col htw-leading-none">
26
+ <div class="ptw-flex ptw-flex-col ptw-leading-none">
27
27
  <span
28
- class="htw-text-primary-500 htw-min-w-[80px] htw-font-bold"
28
+ class="ptw-text-primary-500 ptw-min-w-[80px] ptw-font-bold"
29
29
  >
30
30
  {{ count }}
31
31
  </span>
32
32
  <span
33
- class="htw-text-sm htw-text-gray-900 dark:htw-text-gray-100"
33
+ class="ptw-text-sm ptw-text-gray-900 dark:ptw-text-gray-100"
34
34
  >
35
35
  {{ title }}
36
36
  </span>
@@ -17,11 +17,11 @@ if (import.meta.hot) {
17
17
  </script>
18
18
 
19
19
  <template>
20
- <div class="poveste-initial-loading htw-fixed htw-inset-0 htw-bg-white dark:htw-bg-gray-700 htw-flex htw-flex-col htw-gap-6 htw-items-center htw-justify-center">
20
+ <div class="poveste-initial-loading ptw-fixed ptw-inset-0 ptw-bg-white dark:ptw-bg-gray-700 ptw-flex ptw-flex-col ptw-gap-6 ptw-items-center ptw-justify-center">
21
21
  <transition name="__poveste-fade">
22
22
  <div
23
23
  v-if="progress.total > 0"
24
- class="htw-grid htw-gap-2"
24
+ class="ptw-grid ptw-gap-2"
25
25
  :style="{
26
26
  gridTemplateColumns: `repeat(${Math.min(Math.ceil(Math.sqrt(progress.total)), maxCols)}, minmax(0, 1fr))`,
27
27
  }"
@@ -29,12 +29,12 @@ if (import.meta.hot) {
29
29
  <div
30
30
  v-for="n in progress.total"
31
31
  :key="n"
32
- class="htw-bg-primary-500/10 htw-rounded-full"
32
+ class="ptw-bg-primary-500/10 ptw-rounded-full"
33
33
  >
34
34
  <div
35
- class="htw-w-3 htw-h-3 htw-bg-primary-500 htw-rounded-full htw-duration-150 htw-ease-out"
35
+ class="ptw-w-3 ptw-h-3 ptw-bg-primary-500 ptw-rounded-full ptw-duration-150 ptw-ease-out"
36
36
  :class="{
37
- 'htw-transition-transform htw-scale-0': n >= progress.loaded,
37
+ 'ptw-transition-transform ptw-scale-0': n >= progress.loaded,
38
38
  }"
39
39
  />
40
40
  </div>
@@ -13,17 +13,17 @@ const emit = defineEmits<{ (e: 'close'): void }>()
13
13
  <transition name="__poveste-fade-bottom">
14
14
  <div
15
15
  v-if="opened"
16
- class="poveste-mobile-overlay htw-absolute htw-z-10 htw-bg-white dark:htw-bg-gray-700 htw-w-screen htw-h-screen htw-inset-0 htw-overflow-hidden htw-flex htw-flex-col"
16
+ class="poveste-mobile-overlay ptw-absolute ptw-z-10 ptw-bg-white dark:ptw-bg-gray-700 ptw-w-screen ptw-h-screen ptw-inset-0 ptw-overflow-hidden ptw-flex ptw-flex-col"
17
17
  >
18
- <div class="htw-p-4 htw-h-16 htw-flex htw-border-b htw-border-gray-100 dark:htw-border-gray-800 htw-items-center htw-place-content-between">
19
- <span class="htw-text-gray-500">{{ title }}</span>
18
+ <div class="ptw-p-4 ptw-h-16 ptw-flex ptw-border-b ptw-border-gray-100 dark:ptw-border-gray-800 ptw-items-center ptw-place-content-between">
19
+ <span class="ptw-text-gray-500">{{ title }}</span>
20
20
  <a
21
- class="htw-p-1 hover:htw-text-primary-500 dark:hover:htw-text-primary-400 htw-cursor-pointer"
21
+ class="ptw-p-1 hover:ptw-text-primary-500 dark:hover:ptw-text-primary-400 ptw-cursor-pointer"
22
22
  @click="emit('close')"
23
23
  >
24
24
  <Icon
25
25
  icon="carbon:close"
26
- class="htw-w-8 htw-h-8 htw-shrink-0"
26
+ class="ptw-w-8 ptw-h-8 ptw-shrink-0"
27
27
  />
28
28
  </a>
29
29
  </div>
@@ -0,0 +1,60 @@
1
+ <script lang="ts" setup>
2
+ import { useStoryStore } from '../../stores/story'
3
+ import DevOnlyToolbarOpenInEditor from '../toolbar/DevOnlyToolbarOpenInEditor.vue'
4
+ import ToolbarBackground from '../toolbar/ToolbarBackground.vue'
5
+ import ToolbarNewTab from '../toolbar/ToolbarNewTab.vue'
6
+ import ToolbarResponsiveSize from '../toolbar/ToolbarResponsiveSize.vue'
7
+ import ToolbarTextDirection from '../toolbar/ToolbarTextDirection.vue'
8
+ import ToolbarTitle from '../toolbar/ToolbarTitle.vue'
9
+ import AppActions from './AppActions.vue'
10
+ import TopBarChip from './TopBarChip.vue'
11
+
12
+ defineEmits({
13
+ search: () => true,
14
+ layout: () => true,
15
+ })
16
+
17
+ const storyStore = useStoryStore()
18
+ </script>
19
+
20
+ <template>
21
+ <div class="poveste-top-bar ptw-flex-none ptw-grid ptw-grid-cols-[1fr_auto_1fr] ptw-items-center ptw-h-14 ptw-px-4 ptw-gap-3">
22
+ <AppActions
23
+ class="ptw-justify-self-start"
24
+ @layout="$emit('layout')"
25
+ @search="$emit('search')"
26
+ />
27
+
28
+ <TopBarChip
29
+ v-if="storyStore.currentStory || storyStore.currentVariant"
30
+ class="ptw-px-6 ptw-py-1.5 ptw-max-w-full"
31
+ >
32
+ <ToolbarTitle
33
+ :variant="storyStore.currentVariant ?? undefined"
34
+ :story="storyStore.currentStory ?? undefined"
35
+ />
36
+ </TopBarChip>
37
+ <span v-else />
38
+
39
+ <TopBarChip
40
+ v-if="storyStore.currentStory && !storyStore.currentStory.docsOnly"
41
+ class="ptw-justify-self-end"
42
+ >
43
+ <ToolbarResponsiveSize
44
+ v-if="storyStore.currentVariant && !storyStore.currentVariant.responsiveDisabled"
45
+ />
46
+ <ToolbarBackground />
47
+ <ToolbarTextDirection />
48
+ <ToolbarNewTab
49
+ v-if="storyStore.currentVariant"
50
+ :variant="storyStore.currentVariant"
51
+ :story="storyStore.currentStory"
52
+ />
53
+ <DevOnlyToolbarOpenInEditor
54
+ v-if="__POVESTE_DEV__"
55
+ :file="storyStore.currentStory.file?.filePath"
56
+ tooltip="Edit story in editor"
57
+ />
58
+ </TopBarChip>
59
+ </div>
60
+ </template>
@@ -0,0 +1,5 @@
1
+ <template>
2
+ <div class="poveste-top-bar-chip ptw-flex ptw-items-center ptw-bg-gradient-to-b ptw-from-white/85 ptw-to-white/60 dark:ptw-from-gray-800/65 dark:ptw-to-gray-800/40 ptw-backdrop-blur-md ptw-border ptw-border-white/60 dark:ptw-border-white/15 ptw-rounded-lg ptw-overflow-hidden ptw-shadow-md">
3
+ <slot />
4
+ </div>
5
+ </template>
@@ -0,0 +1,7 @@
1
+ <template>
2
+ <a
3
+ class="poveste-top-bar-chip-item ptw-flex ptw-items-center ptw-gap-1 ptw-px-2.5 ptw-py-1.5 hover:ptw-bg-white/50 active:ptw-bg-white/70 dark:hover:ptw-bg-white/10 dark:active:ptw-bg-white/15 hover:ptw-text-primary-500 dark:hover:ptw-text-primary-400 ptw-cursor-pointer ptw-text-gray-900 dark:ptw-text-gray-100 ptw-transition-colors"
4
+ >
5
+ <slot />
6
+ </a>
7
+ </template>
@@ -22,10 +22,10 @@ const comp = computed(() => {
22
22
  <template>
23
23
  <component
24
24
  :is="comp"
25
- class="poveste-base-button htw-rounded htw-cursor-pointer"
25
+ class="poveste-base-button ptw-rounded ptw-cursor-pointer"
26
26
  :class="{
27
- 'htw-bg-primary-200 dark:htw-bg-primary-800 hover:htw-bg-primary-300 dark:hover:htw-bg-primary-700': color === 'primary' || !color,
28
- 'htw-bg-grey-100 dark:htw-bg-grey-900 hover:htw-bg-grey-200 dark:hover:htw-bg-grey-800': color === 'grey',
27
+ 'ptw-bg-primary-200 dark:ptw-bg-primary-800 hover:ptw-bg-primary-300 dark:hover:ptw-bg-primary-700': color === 'primary' || !color,
28
+ 'ptw-bg-grey-100 dark:ptw-bg-grey-900 hover:ptw-bg-grey-200 dark:hover:ptw-bg-grey-800': color === 'grey',
29
29
  }"
30
30
  >
31
31
  <slot />