@mixd-id/web-scaffold 0.2.240706 → 0.2.250801010

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 (220) hide show
  1. package/docs/components/Dashboard.md +56 -0
  2. package/log.txt +7 -0
  3. package/package.json +27 -19
  4. package/src/components/404.vue +61 -0
  5. package/src/components/AccountIcon.vue +19 -0
  6. package/src/components/Ahref.vue +1 -1
  7. package/src/components/Alert.vue +4 -13
  8. package/src/components/ArrayList.vue +49 -0
  9. package/src/components/Article.vue +24 -30
  10. package/src/components/Button.vue +83 -169
  11. package/src/components/Card.vue +257 -0
  12. package/src/components/Carousel.vue +61 -60
  13. package/src/components/Cart.vue +192 -0
  14. package/src/components/CartIcon.vue +89 -0
  15. package/src/components/ChartBar.vue +2 -3
  16. package/src/components/Checkbox.vue +20 -11
  17. package/src/components/Checkout.vue +373 -0
  18. package/src/components/CheckoutDelivery.vue +267 -0
  19. package/src/components/CodeEditor.vue +5 -16
  20. package/src/components/CollapsiblePanel.vue +70 -0
  21. package/src/components/ColorPicker.vue +12 -5
  22. package/src/components/ColorPicker2.vue +41 -19
  23. package/src/components/ColorPicker3.vue +100 -0
  24. package/src/components/Confirm.vue +9 -7
  25. package/src/components/ContextMenu.vue +122 -206
  26. package/src/components/ContextMenuItem.vue +53 -0
  27. package/src/components/Dashboard.vue +243 -0
  28. package/src/components/Dashboard2.vue +118 -0
  29. package/src/components/DashboardComponentSelector.vue +96 -0
  30. package/src/components/DashboardConfigs.vue +202 -0
  31. package/src/components/Datepicker.vue +102 -41
  32. package/src/components/DayTimeRange.vue +3 -2
  33. package/src/components/Dropdown.vue +7 -4
  34. package/src/components/Flex.vue +14 -40
  35. package/src/components/GHeatMaps.vue +2 -2
  36. package/src/components/Grid.vue +6 -6
  37. package/src/components/HTMLEditor.vue +27 -14
  38. package/src/components/Image.vue +62 -108
  39. package/src/components/ImagePreview.vue +14 -4
  40. package/src/components/ImageUploader.vue +114 -0
  41. package/src/components/ImportModal.vue +3 -3
  42. package/src/components/Link.vue +62 -6
  43. package/src/components/List.vue +528 -403
  44. package/src/components/ListContextMenu.vue +88 -0
  45. package/src/components/ListItem.vue +6 -4
  46. package/src/components/ListPage1.vue +14 -15
  47. package/src/components/ListView.vue +5 -6
  48. package/src/components/ListViewSettings.vue +2 -2
  49. package/src/components/LogViewerItem.vue +1 -1
  50. package/src/components/MarkdownEdit.vue +128 -0
  51. package/src/components/MarkdownPreview.vue +102 -0
  52. package/src/components/MenuItem1.vue +36 -0
  53. package/src/components/Modal.vue +95 -43
  54. package/src/components/MultiDropdown.vue +124 -0
  55. package/src/components/MultilineText.vue +1 -4
  56. package/src/components/OTPField.vue +40 -26
  57. package/src/components/ObjectTree.vue +1 -1
  58. package/src/components/PageBuilder.vue +3 -3
  59. package/src/components/Paragraph.vue +1 -2
  60. package/src/components/PresetSelectorFilterItem.vue +107 -95
  61. package/src/components/Radio.vue +1 -1
  62. package/src/components/SearchModal.vue +153 -0
  63. package/src/components/Slider.vue +1 -1
  64. package/src/components/Svg.vue +1 -1
  65. package/src/components/SvgEditor.vue +173 -0
  66. package/src/components/Switch.vue +4 -5
  67. package/src/components/Table.vue +2 -2
  68. package/src/components/TableView.vue +2 -3
  69. package/src/components/TableViewHead.vue +2 -2
  70. package/src/components/Tabs.vue +1 -1
  71. package/src/components/Testimonial.vue +2 -2
  72. package/src/components/Text.vue +7 -22
  73. package/src/components/TextEditor.vue +3 -3
  74. package/src/components/TextWithTag.vue +61 -30
  75. package/src/components/Textarea.vue +16 -22
  76. package/src/components/Textbox.vue +9 -19
  77. package/src/components/Timepicker.vue +25 -15
  78. package/src/components/Toast.vue +5 -3
  79. package/src/components/TreeMenu.vue +122 -0
  80. package/src/components/TreeView.vue +15 -10
  81. package/src/components/TreeView2.vue +38 -0
  82. package/src/components/TreeViewItem.vue +58 -29
  83. package/src/components/TreeViewItem2.vue +55 -0
  84. package/src/components/Uploader.vue +45 -0
  85. package/src/components/Video.vue +119 -0
  86. package/src/components/VirtualGrid.vue +24 -7
  87. package/src/components/VirtualTable.vue +363 -128
  88. package/src/configs/dashboard/data-table.js +9 -0
  89. package/src/configs/web-page-builder.js +118 -0
  90. package/src/directives/intersect.js +26 -0
  91. package/src/hooks/device.js +14 -0
  92. package/src/index.js +62 -107
  93. package/src/mixin/component.js +151 -67
  94. package/src/themes/default/index.js +118 -159
  95. package/src/utils/dashboard.js +22 -962
  96. package/src/utils/helpers.cjs +635 -0
  97. package/src/utils/helpers.js +91 -60
  98. package/src/utils/helpers.mjs +245 -12
  99. package/src/utils/importer.js +22 -3
  100. package/src/utils/list.mjs +1509 -0
  101. package/src/utils/preset-selector.cjs +1455 -0
  102. package/src/utils/preset-selector.js +489 -95
  103. package/src/utils/preset-selector.mjs +59 -20
  104. package/src/utils/queue.js +63 -0
  105. package/src/utils/web.mjs +120 -0
  106. package/src/utils/wss.js +38 -36
  107. package/src/utils/wss.mjs +24 -19
  108. package/src/widgets/AhrefSetting.vue +16 -13
  109. package/src/widgets/ArticleSetting.vue +15 -27
  110. package/src/widgets/BackgroundColorSetting.vue +153 -0
  111. package/src/widgets/BorderColorSetting.vue +57 -0
  112. package/src/widgets/BotEditor/BotEditorActions.vue +3 -2
  113. package/src/widgets/BotEditor/BotEditorSettings.vue +21 -0
  114. package/src/widgets/BotEditor.vue +35 -15
  115. package/src/widgets/ButtonSetting.vue +12 -13
  116. package/src/widgets/CarouselSetting.vue +33 -45
  117. package/src/widgets/CartSetting.vue +46 -0
  118. package/src/widgets/CheckoutSetting.vue +46 -0
  119. package/src/widgets/CollapsiblePanelSetting.vue +46 -0
  120. package/src/widgets/ColumnSelector.vue +29 -5
  121. package/src/widgets/ComponentSetting.vue +1 -1
  122. package/src/widgets/ComponentSetting2.vue +145 -236
  123. package/src/widgets/ComponentSetting3.vue +1 -1
  124. package/src/widgets/ContactForm.vue +3 -3
  125. package/src/widgets/ContactFormSetting.vue +41 -30
  126. package/src/widgets/Dashboard/BarChart.vue +47 -11
  127. package/src/widgets/Dashboard/BarChartSetting.vue +1 -1
  128. package/src/widgets/Dashboard/DataTable.vue +125 -0
  129. package/src/widgets/Dashboard/DataTableSetting.vue +243 -0
  130. package/src/widgets/Dashboard/DatasourceSelector.vue +1 -1
  131. package/src/widgets/Dashboard/Doughnut.vue +49 -7
  132. package/src/widgets/Dashboard/DoughnutSetting.vue +2 -2
  133. package/src/widgets/Dashboard/Metric.vue +78 -19
  134. package/src/widgets/Dashboard/MetricSetting.vue +81 -28
  135. package/src/widgets/Dashboard/Pie.vue +55 -6
  136. package/src/widgets/Dashboard/PieSetting.vue +1 -1
  137. package/src/widgets/Dashboard/PolarArea.vue +49 -7
  138. package/src/widgets/Dashboard/PolarAreaSetting.vue +1 -1
  139. package/src/widgets/Dashboard/SharingModal.vue +4 -5
  140. package/src/widgets/Dashboard/ViewSelector.vue +2 -2
  141. package/src/widgets/Dashboard/VirtualTableSetting.vue +121 -184
  142. package/src/widgets/{Dashboard.vue → Dashboard0.vue} +426 -343
  143. package/src/widgets/EmbeddedVideoSetting.vue +7 -5
  144. package/src/widgets/FAQ.vue +16 -3
  145. package/src/widgets/FAQSetting.vue +53 -47
  146. package/src/widgets/FeatureList.vue +3 -0
  147. package/src/widgets/FeatureListSetting.vue +112 -102
  148. package/src/widgets/FlexSetting.vue +83 -106
  149. package/src/widgets/GridSetting.vue +71 -196
  150. package/src/widgets/Header2.vue +34 -71
  151. package/src/widgets/Header2Setting.vue +95 -179
  152. package/src/widgets/HeaderSetting.vue +16 -18
  153. package/src/widgets/IconListSetting.vue +69 -65
  154. package/src/widgets/ImageSetting.vue +33 -60
  155. package/src/widgets/LinkSetting.vue +60 -37
  156. package/src/widgets/LinkSettingModal.vue +173 -0
  157. package/src/widgets/LogViewer.vue +1 -1
  158. package/src/widgets/MarginSetting.vue +2 -2
  159. package/src/widgets/MenuEditor.vue +1 -1
  160. package/src/widgets/MenuItem1Setting.vue +78 -0
  161. package/src/widgets/ModalSetting.vue +42 -44
  162. package/src/widgets/MultiValueSetting.vue +2 -2
  163. package/src/widgets/MultiValueSetting2.vue +78 -45
  164. package/src/widgets/OGSettingModal.vue +103 -0
  165. package/src/widgets/PaddingSetting.vue +2 -2
  166. package/src/widgets/ParagraphSetting.vue +16 -13
  167. package/src/widgets/PositionSetting.vue +209 -0
  168. package/src/widgets/PresetBar.vue +359 -210
  169. package/src/widgets/PresetBarPivot.vue +31 -19
  170. package/src/widgets/PresetSelector.vue +29 -17
  171. package/src/widgets/SearchModalSetting.vue +70 -0
  172. package/src/widgets/Share.vue +1 -2
  173. package/src/widgets/ShareSetting.vue +67 -60
  174. package/src/widgets/StyleSetting.vue +365 -150
  175. package/src/widgets/TestimonialSetting.vue +97 -88
  176. package/src/widgets/TextBlockSetting.vue +16 -13
  177. package/src/widgets/UserActionBuilder/UserActionConsole.vue +30 -10
  178. package/src/widgets/UserActionBuilder/UserActionOutput.vue +2 -2
  179. package/src/widgets/UserActionBuilder/UserActionOutputReply.vue +64 -87
  180. package/src/widgets/UserActionBuilder/UserActionProps.vue +3 -3
  181. package/src/widgets/UserActionBuilder.vue +4 -16
  182. package/src/widgets/WebComponentSelector.vue +15 -11
  183. package/src/widgets/WebLayoutSelector.vue +41 -270
  184. package/src/widgets/WebPageBuilder.vue +1019 -707
  185. package/src/widgets/WebPageBuilder2.vue +7 -7
  186. package/src/widgets/WebPageBuilder4/ButtonSetting.vue +0 -8
  187. package/src/widgets/WebPageBuilder4/CarouselSetting.vue +63 -7
  188. package/src/widgets/WebPageBuilder4/FlexAlignSetting.vue +3 -3
  189. package/src/widgets/WebPageBuilder4/FlexSetting.vue +1 -10
  190. package/src/widgets/WebPageBuilder4/MultiValueSetting.vue +2 -2
  191. package/src/widgets/WebPageBuilder4/PropertySetting.vue +0 -7
  192. package/src/widgets/WebPageBuilder4/WebPageComponentSelector.vue +1 -7
  193. package/src/widgets/WebPageBuilder4.vue +289 -575
  194. package/src/widgets/WebPageSelector.vue +1 -1
  195. package/src/widgets/YoutubeVideoSetting.vue +16 -13
  196. package/tailwind.config.js +3 -35
  197. package/docs/schema/user-action.json +0 -266
  198. package/src/App.vue +0 -25
  199. package/src/components/SearchButton.vue +0 -57
  200. package/src/entry-client.js +0 -27
  201. package/src/entry-server.js +0 -73
  202. package/src/events/event.js +0 -2
  203. package/src/main.js +0 -29
  204. package/src/mixin/website.js +0 -121
  205. package/src/router.js +0 -57
  206. package/src/widgets/MobileMenu.vue +0 -182
  207. package/src/widgets/WebPageBuilder4/ActionSetting.vue +0 -158
  208. package/src/widgets/WebPageBuilder4/ColorSetting.vue +0 -63
  209. package/src/widgets/WebPageBuilder4/DataSetting.vue +0 -92
  210. package/src/widgets/WebPageBuilder4/FontSizeSetting.vue +0 -76
  211. package/src/widgets/WebPageBuilder4/LinkSetting.vue +0 -68
  212. package/src/widgets/WebPageBuilder4/MobileMenuSetting.vue +0 -106
  213. package/src/widgets/WebPageBuilder4/Setting.vue +0 -73
  214. package/src/widgets/WebPageBuilder4/StyleSetting.vue +0 -77
  215. package/src/widgets/WebPageBuilder4/SvgSetting.vue +0 -207
  216. package/src/widgets/WebPageBuilder4/TextTransformSetting.vue +0 -70
  217. package/src/widgets/WebPageBuilder4/WebPageDataEdit.vue +0 -121
  218. package/test.json +0 -22
  219. /package/src/widgets/{Header1.vue → Header0.vue} +0 -0
  220. /package/src/widgets/{Header1Setting.vue → Header0Setting.vue} +0 -0
@@ -1,169 +1,308 @@
1
1
  <template>
2
2
  <div :class="$style.comp">
3
3
 
4
- <div v-for="(_, index) in viewTypes"
5
- v-show="_.value === viewType">
6
- <div class="flex flex-col gap-8">
4
+ <div class="flex flex-col divide-y divide-border-50">
7
5
 
8
- <div>
6
+ <div class="flex flex-col gap-4 p-6">
7
+
8
+ <strong @dblclick="log(item)">Style</strong>
9
9
 
10
- <div class="flex flex-row gap-4 items-center cursor-pointer">
11
- <strong class="flex-1 text-text-400">All</strong>
10
+ <div>
11
+ <div class="flex flex-row">
12
+ <div class="flex-1">
13
+ <small class="text-text-400">Font Family</small>
14
+ </div>
15
+ <div class="flex flex-row gap-1 self-center">
16
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['fontFamily'] === 0 ? 'bg-primary text-white': ''" @click="selectorIndexes['fontFamily'] = 0">base</button>
17
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['fontFamily'] === 1 ? 'bg-primary text-white': ''" @click="selectorIndexes['fontFamily'] = 1">md</button>
18
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['fontFamily'] === 2 ? 'bg-primary text-white': ''" @click="selectorIndexes['fontFamily'] = 2">lg</button>
19
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['fontFamily'] === 3 ? 'bg-primary text-white': ''" @click="selectorIndexes['fontFamily'] = 3">xl</button>
20
+ </div>
12
21
  </div>
22
+ <Dropdown v-model="media['*']['font-family'][selectorIndex('fontFamily')]" class="mt-1">
23
+ <option value="">Default</option>
24
+ <option v-for="opt in components.fontFamily"
25
+ :value="`${opt[1]}`">
26
+ {{ opt[0] }}
27
+ </option>
28
+ </Dropdown>
29
+ </div>
13
30
 
14
- <div class="h-[1px] bg-text-100 mt-2 mb-4"></div>
15
-
16
- <div class="flex flex-col gap-4">
17
-
18
- <div>
19
- <label :class="$style.label">Font Family</label>
20
- <Dropdown v-model="mediaOf(_.value, '*')['font-family']" class="mt-1">
21
- <option value="">Default</option>
22
- <option v-for="opt in components.fontFamily"
23
- :value="`${opt[1]}`">
24
- {{ opt[0] }}
25
- </option>
26
- </Dropdown>
27
- </div>
28
-
29
- <div>
30
- <label :class="$style.label">Font Size</label>
31
- <Dropdown v-model="mediaOf(_.value, 'html, .html')['font-size']" class="mt-1">
32
- <option value="">Default</option>
33
- <option v-for="opt in components.fontSize"
34
- :value="`${opt[1]}`">
35
- {{ opt[0] }}
36
- </option>
37
- </Dropdown>
38
- </div>
39
-
40
- <div>
41
- <label :class="$style.label">Primary Color</label>
42
- <div class="mt-1 grid grid-cols-8 gap-4">
43
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--primary-100']"
44
- mode="hex" :custom-color="true" value-type="rgb" />
45
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--primary-200']"
46
- mode="hex" :custom-color="true" value-type="rgb" />
47
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--primary-300']"
48
- mode="hex" :custom-color="true" value-type="rgb" />
49
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--primary-400']"
50
- mode="hex" :custom-color="true" value-type="rgb" />
51
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--primary-500']"
52
- mode="hex" :custom-color="true" value-type="rgb" />
53
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--primary-600']"
54
- mode="hex" :custom-color="true" value-type="rgb" />
55
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--primary-700']"
56
- mode="hex" :custom-color="true" value-type="rgb" />
57
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--primary-800']"
58
- mode="hex" :custom-color="true" value-type="rgb" />
59
- </div>
60
- </div>
61
-
62
- <div>
63
- <label :class="$style.label">Secondary Color</label>
64
- <div class="mt-1 grid grid-cols-8 gap-4">
65
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--secondary-100']"
66
- mode="hex" :custom-color="true" value-type="rgb" />
67
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--secondary-200']"
68
- mode="hex" :custom-color="true" value-type="rgb" />
69
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--secondary-300']"
70
- mode="hex" :custom-color="true" value-type="rgb" />
71
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--secondary-400']"
72
- mode="hex" :custom-color="true" value-type="rgb" />
73
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--secondary-500']"
74
- mode="hex" :custom-color="true" value-type="rgb" />
75
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--secondary-600']"
76
- mode="hex" :custom-color="true" value-type="rgb" />
77
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--secondary-700']"
78
- mode="hex" :custom-color="true" value-type="rgb" />
79
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--secondary-800']"
80
- mode="hex" :custom-color="true" value-type="rgb" />
81
- </div>
82
- </div>
83
-
84
- <div>
85
- <label :class="$style.label">Text Color</label>
86
- <div class="mt-1 grid grid-cols-8 gap-4">
87
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--text-100']"
88
- mode="hex" :custom-color="true" value-type="rgb" />
89
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--text-200']"
90
- mode="hex" :custom-color="true" value-type="rgb" />
91
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--text-300']"
92
- mode="hex" :custom-color="true" value-type="rgb" />
93
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--text-400']"
94
- mode="hex" :custom-color="true" value-type="rgb" />
95
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--text-500']"
96
- mode="hex" :custom-color="true" value-type="rgb" />
97
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--text-600']"
98
- mode="hex" :custom-color="true" value-type="rgb" />
99
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--text-700']"
100
- mode="hex" :custom-color="true" value-type="rgb" />
101
- <ColorPicker v-model="mediaOf(_.value, 'html, .html')['--text-800']"
102
- mode="hex" :custom-color="true" value-type="rgb" />
103
- </div>
31
+ <div>
32
+ <div class="flex flex-row">
33
+ <div class="flex-1">
34
+ <small class="text-text-400">Font Size</small>
104
35
  </div>
36
+ <div class="flex flex-row gap-1 self-center">
37
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['fontSize'] === 0 ? 'bg-primary text-white': ''" @click="selectorIndexes['fontSize'] = 0">base</button>
38
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['fontSize'] === 1 ? 'bg-primary text-white': ''" @click="selectorIndexes['fontSize'] = 1">md</button>
39
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['fontSize'] === 2 ? 'bg-primary text-white': ''" @click="selectorIndexes['fontSize'] = 2">lg</button>
40
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['fontSize'] === 3 ? 'bg-primary text-white': ''" @click="selectorIndexes['fontSize'] = 3">xl</button>
41
+ </div>
42
+ </div>
43
+ <Dropdown v-model="media['html, .html']['font-size'][selectorIndex('fontSize')]" class="mt-1">
44
+ <option value="">Default</option>
45
+ <option v-for="opt in components.fontSize"
46
+ :value="`${opt[1]}`">
47
+ {{ opt[0] }}
48
+ </option>
49
+ </Dropdown>
50
+ </div>
105
51
 
52
+ <div>
53
+ <div class="flex flex-row">
54
+ <div class="flex-1">
55
+ <small class="text-text-400">Primary Color</small>
56
+ </div>
57
+ <div class="flex flex-row gap-1 self-center">
58
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['primary'] === 0 ? 'bg-primary text-white': ''" @click="selectorIndexes['primary'] = 0">base</button>
59
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['primary'] === 1 ? 'bg-primary text-white': ''" @click="selectorIndexes['primary'] = 1">md</button>
60
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['primary'] === 2 ? 'bg-primary text-white': ''" @click="selectorIndexes['primary'] = 2">lg</button>
61
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['primary'] === 3 ? 'bg-primary text-white': ''" @click="selectorIndexes['primary'] = 3">xl</button>
62
+ </div>
106
63
  </div>
64
+ <div class="grid grid-cols-8 gap-2 mt-2">
65
+ <div class="flex flex-col items-center gap-2">
66
+ <ColorPicker v-model="media['html, .html']['--primary-800'][selectorIndex('primary')]"
67
+ mode="hex" :custom-color="true" value-type="rgb" />
68
+ <small class="text-text-400 text-xs">+300</small>
69
+ </div>
70
+
71
+ <div class="flex flex-col items-center gap-2">
72
+ <ColorPicker v-model="media['html, .html']['--primary-700'][selectorIndex('primary')]"
73
+ mode="hex" :custom-color="true" value-type="rgb" />
74
+ <small class="text-text-400 text-xs">+200</small>
75
+ </div>
76
+
77
+ <div class="flex flex-col items-center gap-2">
78
+ <ColorPicker v-model="media['html, .html']['--primary-600'][selectorIndex('primary')]"
79
+ mode="hex" :custom-color="true" value-type="rgb" />
80
+ <small class="text-text-400 text-xs">+100</small>
81
+ </div>
82
+
83
+ <div class="flex flex-col items-center gap-2">
84
+ <ColorPicker v-model="media['html, .html']['--primary-500'][selectorIndex('primary')]"
85
+ mode="hex" :custom-color="true" value-type="rgb" />
86
+ <small class="text-text-400 text-xs">normal</small>
87
+ </div>
88
+
89
+ <div class="flex flex-col items-center gap-2">
90
+ <ColorPicker v-model="media['html, .html']['--primary-400'][selectorIndex('primary')]"
91
+ mode="hex" :custom-color="true" value-type="rgb" />
92
+ <small class="text-text-400 text-xs">-100</small>
93
+ </div>
107
94
 
95
+ <div class="flex flex-col items-center gap-2">
96
+ <ColorPicker v-model="media['html, .html']['--primary-300'][selectorIndex('primary')]"
97
+ mode="hex" :custom-color="true" value-type="rgb" />
98
+ <small class="text-text-400 text-xs">-200</small>
99
+ </div>
100
+
101
+ <div class="flex flex-col items-center gap-2">
102
+ <ColorPicker v-model="media['html, .html']['--primary-200'][selectorIndex('primary')]"
103
+ mode="hex" :custom-color="true" value-type="rgb" />
104
+ <small class="text-text-400 text-xs">-300</small>
105
+ </div>
108
106
 
107
+ <div class="flex flex-col items-center gap-2">
108
+ <ColorPicker v-model="media['html, .html']['--primary-100'][selectorIndex('primary')]"
109
+ mode="hex" :custom-color="true" value-type="rgb" />
110
+ <small class="text-text-400 text-xs">-400</small>
111
+ </div>
112
+ </div>
109
113
  </div>
110
114
 
111
115
  <div>
116
+ <div class="flex flex-row">
117
+ <div class="flex-1">
118
+ <small class="text-text-400">Secondary Color</small>
119
+ </div>
120
+ <div class="flex flex-row gap-1 self-center">
121
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['secondary'] === 0 ? 'bg-primary text-white': ''" @click="selectorIndexes['secondary'] = 0">base</button>
122
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['secondary'] === 1 ? 'bg-primary text-white': ''" @click="selectorIndexes['secondary'] = 1">md</button>
123
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['secondary'] === 2 ? 'bg-primary text-white': ''" @click="selectorIndexes['secondary'] = 2">lg</button>
124
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['secondary'] === 3 ? 'bg-primary text-white': ''" @click="selectorIndexes['secondary'] = 3">xl</button>
125
+ </div>
126
+ </div>
127
+ <div class="grid grid-cols-8 gap-2 mt-2">
128
+ <div class="flex flex-col items-center gap-2">
129
+ <ColorPicker v-model="media['html, .html']['--secondary-800'][selectorIndex('secondary')]"
130
+ mode="hex" :custom-color="true" value-type="rgb" />
131
+ <small class="text-text-400 text-xs">800</small>
132
+ </div>
133
+
134
+ <div class="flex flex-col items-center gap-2">
135
+ <ColorPicker v-model="media['html, .html']['--secondary-700'][selectorIndex('secondary')]"
136
+ mode="hex" :custom-color="true" value-type="rgb" />
137
+ <small class="text-text-400 text-xs">700</small>
138
+ </div>
139
+
140
+ <div class="flex flex-col items-center gap-2">
141
+ <ColorPicker v-model="media['html, .html']['--secondary-600'][selectorIndex('secondary')]"
142
+ mode="hex" :custom-color="true" value-type="rgb" />
143
+ <small class="text-text-400 text-xs">600</small>
144
+ </div>
145
+
146
+ <div class="flex flex-col items-center gap-2">
147
+ <ColorPicker v-model="media['html, .html']['--secondary-500'][selectorIndex('secondary')]"
148
+ mode="hex" :custom-color="true" value-type="rgb" />
149
+ <small class="text-text-400 text-xs">500</small>
150
+ </div>
112
151
 
113
- <div class="flex flex-row gap-4 items-center cursor-pointer">
114
- <strong class="flex-1 text-text-400">Headings</strong>
152
+ <div class="flex flex-col items-center gap-2">
153
+ <ColorPicker v-model="media['html, .html']['--secondary-400'][selectorIndex('secondary')]"
154
+ mode="hex" :custom-color="true" value-type="rgb" />
155
+ <small class="text-text-400 text-xs">400</small>
156
+ </div>
157
+
158
+ <div class="flex flex-col items-center gap-2">
159
+ <ColorPicker v-model="media['html, .html']['--secondary-300'][selectorIndex('secondary')]"
160
+ mode="hex" :custom-color="true" value-type="rgb" />
161
+ <small class="text-text-400 text-xs">300</small>
162
+ </div>
163
+
164
+ <div class="flex flex-col items-center gap-2">
165
+ <ColorPicker v-model="media['html, .html']['--secondary-200'][selectorIndex('secondary')]"
166
+ mode="hex" :custom-color="true" value-type="rgb" />
167
+ <small class="text-text-400 text-xs">200</small>
168
+ </div>
169
+
170
+ <div class="flex flex-col items-center gap-2">
171
+ <ColorPicker v-model="media['html, .html']['--secondary-100'][selectorIndex('secondary')]"
172
+ mode="hex" :custom-color="true" value-type="rgb" />
173
+ <small class="text-text-400 text-xs">100</small>
174
+ </div>
115
175
  </div>
176
+ </div>
116
177
 
117
- <div class="h-[1px] bg-text-100 mt-2 mb-4"></div>
178
+ <div>
179
+ <div class="flex flex-row">
180
+ <div class="flex-1">
181
+ <small class="text-text-400">Text Color</small>
182
+ </div>
183
+ <div class="flex flex-row gap-1 self-center">
184
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['text'] === 0 ? 'bg-primary text-white': ''" @click="selectorIndexes['text'] = 0">base</button>
185
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['text'] === 1 ? 'bg-primary text-white': ''" @click="selectorIndexes['text'] = 1">md</button>
186
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['text'] === 2 ? 'bg-primary text-white': ''" @click="selectorIndexes['text'] = 2">lg</button>
187
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['text'] === 3 ? 'bg-primary text-white': ''" @click="selectorIndexes['text'] = 3">xl</button>
188
+ </div>
189
+ </div>
190
+ <div class="grid grid-cols-8 gap-2 mt-2">
191
+ <div class="flex flex-col items-center gap-2">
192
+ <ColorPicker v-model="media['html, .html']['--text-800'][selectorIndex('text')]"
193
+ mode="hex" :custom-color="true" value-type="rgb" />
194
+ <small class="text-text-400 text-xs">800</small>
195
+ </div>
196
+
197
+ <div class="flex flex-col items-center gap-2">
198
+ <ColorPicker v-model="media['html, .html']['--text-700'][selectorIndex('text')]"
199
+ mode="hex" :custom-color="true" value-type="rgb" />
200
+ <small class="text-text-400 text-xs">700</small>
201
+ </div>
202
+
203
+ <div class="flex flex-col items-center gap-2">
204
+ <ColorPicker v-model="media['html, .html']['--text-600'][selectorIndex('text')]"
205
+ mode="hex" :custom-color="true" value-type="rgb" />
206
+ <small class="text-text-400 text-xs">600</small>
207
+ </div>
208
+
209
+ <div class="flex flex-col items-center gap-2">
210
+ <ColorPicker v-model="media['html, .html']['--text-500'][selectorIndex('text')]"
211
+ mode="hex" :custom-color="true" value-type="rgb" />
212
+ <small class="text-text-400 text-xs">500</small>
213
+ </div>
214
+
215
+ <div class="flex flex-col items-center gap-2">
216
+ <ColorPicker v-model="media['html, .html']['--text-400'][selectorIndex('text')]"
217
+ mode="hex" :custom-color="true" value-type="rgb" />
218
+ <small class="text-text-400 text-xs">400</small>
219
+ </div>
118
220
 
119
- <div class="flex flex-col gap-4">
221
+ <div class="flex flex-col items-center gap-2">
222
+ <ColorPicker v-model="media['html, .html']['--text-300'][selectorIndex('text')]"
223
+ mode="hex" :custom-color="true" value-type="rgb" />
224
+ <small class="text-text-400 text-xs">300</small>
225
+ </div>
120
226
 
121
- <div>
122
- <label :class="$style.label">Font Family</label>
123
- <Dropdown v-model="mediaOf(_.value, 'h1, h2, h3, h4, h5')['font-family']" class="mt-1">
124
- <option value="">Default</option>
125
- <option v-for="opt in components.fontFamily"
126
- :value="`${opt[1]}`">
127
- {{ opt[0] }}
128
- </option>
129
- </Dropdown>
227
+ <div class="flex flex-col items-center gap-2">
228
+ <ColorPicker v-model="media['html, .html']['--text-200'][selectorIndex('text')]"
229
+ mode="hex" :custom-color="true" value-type="rgb" />
230
+ <small class="text-text-400 text-xs">200</small>
130
231
  </div>
131
232
 
233
+ <div class="flex flex-col items-center gap-2">
234
+ <ColorPicker v-model="media['html, .html']['--text-100'][selectorIndex('text')]"
235
+ mode="hex" :custom-color="true" value-type="rgb" />
236
+ <small class="text-text-400 text-xs">100</small>
237
+ </div>
132
238
  </div>
133
239
  </div>
134
240
 
135
- </div>
136
- </div>
241
+ <div>
242
+ <div class="flex flex-row">
243
+ <div class="flex-1">
244
+ <small class="text-text-400">Background Color</small>
245
+ </div>
246
+ <div class="flex flex-row gap-1 self-center">
247
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['base'] === 0 ? 'bg-primary text-white': ''" @click="selectorIndexes['base'] = 0">base</button>
248
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['base'] === 1 ? 'bg-primary text-white': ''" @click="selectorIndexes['base'] = 1">md</button>
249
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['base'] === 2 ? 'bg-primary text-white': ''" @click="selectorIndexes['base'] = 2">lg</button>
250
+ <button type="button" class="text-xs px-1" :class="selectorIndexes['base'] === 3 ? 'bg-primary text-white': ''" @click="selectorIndexes['base'] = 3">xl</button>
251
+ </div>
252
+ </div>
253
+ <div class="grid grid-cols-8 gap-2 mt-2">
254
+ <div class="flex flex-col items-center gap-2">
255
+ <ColorPicker v-model="media['html, .html']['--base-300'][selectorIndex('base')]"
256
+ mode="hex" :custom-color="true" value-type="rgb" />
257
+ <small class="text-text-400 text-xs">300</small>
258
+ </div>
137
259
 
138
- <div>
260
+ <div class="flex flex-col items-center gap-2">
261
+ <ColorPicker v-model="media['html, .html']['--base-400'][selectorIndex('base')]"
262
+ mode="hex" :custom-color="true" value-type="rgb" />
263
+ <small class="text-text-400 text-xs">400</small>
264
+ </div>
265
+
266
+ <div class="flex flex-col items-center gap-2">
267
+ <ColorPicker v-model="media['html, .html']['--base-500'][selectorIndex('base')]"
268
+ mode="hex" :custom-color="true" value-type="rgb" />
269
+ <small class="text-text-400 text-xs">500</small>
270
+ </div>
271
+ </div>
272
+ </div>
139
273
 
140
- <div class="flex flex-row gap-4 items-center cursor-pointer">
141
- <strong class="flex-1 text-text-400">Splash</strong>
142
274
  </div>
143
275
 
144
- <div class="mt-1 flex flex-col items-center gap-2">
145
- <Image ref="splashImg"
146
- :src="item.props.splash"
147
- :editable="true"
148
- @change="setSplash"
149
- class="aspect-square bg-text-50 rounded-lg w-[100px]" />
150
-
151
- <div class="flex flex-row gap-8">
152
- <button type="button" class="text-primary"
153
- @click="$refs.splashImg.edit()">
154
- Upload
155
- </button>
156
- <button type="button" class="text-primary"
157
- @click="removeSplash">
158
- Remove
159
- </button>
276
+ <div class="p-6">
277
+
278
+ <small class="text-text-400">Splash</small>
279
+
280
+ <div class="mt-1 flex flex-col items-center gap-2">
281
+ <Image ref="splashImg"
282
+ :src="item.props.splash"
283
+ :editable="true"
284
+ @change="setSplash"
285
+ class="aspect-square bg-text-50 rounded-lg w-[100px]" />
286
+
287
+ <div class="flex flex-row gap-8">
288
+ <button type="button" class="text-primary"
289
+ @click="$refs.splashImg.edit()">
290
+ Upload
291
+ </button>
292
+ <button type="button" class="text-primary"
293
+ @click="removeSplash">
294
+ Remove
295
+ </button>
296
+ </div>
160
297
  </div>
298
+
161
299
  </div>
162
300
 
163
- </div>
301
+ <div class="p-6 text-center">
302
+ <br />
303
+ <button type="button" class="text-text-300 hover:text-primary" @click="resetMedia">Reset</button>
304
+ </div>
164
305
 
165
- <div class="p-6 text-center">
166
- <button type="button" class="text-primary" @click="resetMedia">Reset to Default Style</button>
167
306
  </div>
168
307
 
169
308
  </div>
@@ -172,6 +311,60 @@
172
311
  <script>
173
312
 
174
313
  import ColorPicker from "../components/ColorPicker.vue";
314
+ import tinycolor from "tinycolor2";
315
+
316
+ const defaultMedia = {
317
+ ":root": {
318
+ "--spacing-1": [],
319
+ "--spacing-2": [],
320
+ "--spacing-3": [],
321
+ "--spacing-4": [],
322
+ "--spacing-5": [],
323
+ "--spacing-6": [],
324
+ "--spacing-7": [],
325
+ "--spacing-8": [],
326
+ "--spacing-9": [],
327
+ "--spacing-10": [],
328
+ "--spacing-11": [],
329
+ "--spacing-12": []
330
+ },
331
+ "*": {
332
+ "font-family": [ "Poppins, sans-serif" ]
333
+ },
334
+ "html, .html": {
335
+ "font-size": [ '16px', '15px' ],
336
+ "--base-300": [ "rgb(235, 235, 235)" ],
337
+ "--base-400": [ "rgb(245, 245, 245)" ],
338
+ "--base-500": [ "rgb(255, 255, 255)" ],
339
+ "--primary-100": [],
340
+ "--primary-200": [],
341
+ "--primary-300": [],
342
+ "--primary-400": [],
343
+ "--primary-500": [ "rgb(0, 0, 0)" ],
344
+ "--primary-600": [ "rgb(15, 15, 15)" ],
345
+ "--primary-700": [],
346
+ "--primary-800": [],
347
+ "--primary-900": [],
348
+ "--secondary-100": [],
349
+ "--secondary-200": [],
350
+ "--secondary-300": [],
351
+ "--secondary-400": [],
352
+ "--secondary-500": [],
353
+ "--secondary-600": [],
354
+ "--secondary-700": [],
355
+ "--secondary-800": [],
356
+ "--secondary-900": [],
357
+ "--text-100": [],
358
+ "--text-200": [],
359
+ "--text-300": [],
360
+ "--text-400": [],
361
+ "--text-500": [ "rgb(33, 33, 33)" ],
362
+ "--text-600": [],
363
+ "--text-700": [],
364
+ "--text-800": [],
365
+ "--text-900": []
366
+ },
367
+ }
175
368
 
176
369
  export default{
177
370
  components: {ColorPicker},
@@ -189,6 +382,8 @@ export default{
189
382
 
190
383
  viewType: String,
191
384
 
385
+ viewIndex: Number,
386
+
192
387
  viewTypes: Array,
193
388
 
194
389
  },
@@ -226,14 +421,28 @@ export default{
226
421
  return this.media[key][propertyKey]
227
422
  },
228
423
 
229
- resetMedia(){
424
+ generateShade(key, value){
425
+ this.mediaOf('', 'html, .html')[`${key}`] = value
426
+ this.mediaOf('', 'html, .html')[`${key}-500`] = value
427
+
428
+ const lightenLevels = [[50, 52], [100, 37], [200, 26], [300, 12], [400, 6]];
429
+ const darkenLevels = [[600, 6], [700, 12], [800, 18], [900, 24]];
430
+
431
+ for(let [ idx, lvl ] of lightenLevels){
432
+ this.mediaOf(this.viewType, 'html, .html')[`${key}-${idx}`] =
433
+ tinycolor(`rgb(${value})`).lighten(lvl).toRgbString().substring(4).slice(0, -1)
434
+ }
230
435
 
231
- this.item.props.media = {}
232
- for(let i in this.viewTypes){
233
- const key = this.viewTypes[i].value
234
- this.item.props.media[key] = { '*': {}, 'html, .html': {}, 'h1, h2, h3, h4, h5':{} }
436
+ for(let [ idx, lvl ] of darkenLevels){
437
+ this.mediaOf(this.viewType, 'html, .html')[`${key}-${idx}`] =
438
+ tinycolor(`rgb(${value})`).darken(lvl).toRgbString().substring(4).slice(0, -1)
235
439
  }
440
+ },
236
441
 
442
+ resetMedia(){
443
+ this.confirm('Reset styles?', () => {
444
+ this.media = defaultMedia
445
+ })
237
446
  },
238
447
 
239
448
  setSplash(base64, file){
@@ -254,6 +463,12 @@ export default{
254
463
 
255
464
  removeSplash(){
256
465
  this.item.props.splash = null
466
+ },
467
+
468
+ selectorIndex(selector){
469
+ if(!this.selectorIndexes[selector])
470
+ this.selectorIndexes[selector] = 0
471
+ return this.selectorIndexes[selector]
257
472
  }
258
473
 
259
474
  },
@@ -264,19 +479,10 @@ export default{
264
479
  computed: {
265
480
 
266
481
  media(){
267
- if(!this.item.props.media){
268
- this.resetMedia()
269
- }
270
-
482
+ if(!this.item.props.media)
483
+ this.item.props.media = JSON.parse(JSON.stringify(defaultMedia))
271
484
  return this.item.props.media
272
- },
273
-
274
- fontFamily(){
275
- if(!Array.isArray(this.item.props['font-family']))
276
- this.item.props['font-family'] = []
277
-
278
- return this.item.props['font-family']
279
- },
485
+ }
280
486
 
281
487
  },
282
488
 
@@ -293,10 +499,14 @@ export default{
293
499
  ['Montserrat', 'Montserrat, sans-serif'],
294
500
  ['Noto Sans', '"Noto Sans", sans-serif'],
295
501
  ['Oswald', 'Oswald, sans-serif'],
502
+ ['Oxygen', 'Oxygen, sans-serif'],
296
503
  ['Poppins', 'Poppins, sans-serif'],
504
+ ['Quantico', 'Quantico, sans-serif'],
297
505
  ['Raleway', 'Raleway, sans-serif'],
506
+ ['Reddit Sans', '"Reddit Sans", sans-serif'],
298
507
  ['Roboto', '"Roboto", sans-serif'],
299
508
  ['Roboto Slab', '"Roboto Slab", serif'],
509
+ ['Volkhov', 'Volkhov, serif'],
300
510
  ['Work Sans', '"Work Sans", serif'],
301
511
  ],
302
512
 
@@ -309,9 +519,14 @@ export default{
309
519
  [ '16px', '16px' ],
310
520
  [ '17px', '17px' ],
311
521
  [ '18px', '18px' ],
522
+ [ '19px', '19px' ],
523
+ [ '20px', '20px' ],
524
+ [ '21px', '21px' ],
312
525
  ]
313
526
  },
314
527
 
528
+ selectorIndexes: {}
529
+
315
530
  }
316
531
  },
317
532