@lupinum/ginko-docs 0.2.2

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 (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -0
  3. package/app/app.config.ts +49 -0
  4. package/app/app.vue +71 -0
  5. package/app/assets/css/prose.css +1154 -0
  6. package/app/assets/css/tailwind.css +365 -0
  7. package/app/components/OgImage/GinkoDocs.satori.vue +117 -0
  8. package/app/components/content/DocumentPageShell.vue +55 -0
  9. package/app/components/content/Feedback.vue +97 -0
  10. package/app/components/content/PageMarkdownCopy.vue +102 -0
  11. package/app/components/mdc/MdcAccordion.vue +64 -0
  12. package/app/components/mdc/MdcAccordionItem.vue +51 -0
  13. package/app/components/mdc/MdcAlert.vue +34 -0
  14. package/app/components/mdc/MdcAside.vue +27 -0
  15. package/app/components/mdc/MdcCallout.vue +62 -0
  16. package/app/components/mdc/MdcCard.vue +186 -0
  17. package/app/components/mdc/MdcCardGroup.vue +47 -0
  18. package/app/components/mdc/MdcCenter.vue +71 -0
  19. package/app/components/mdc/MdcCodeGroup.vue +193 -0
  20. package/app/components/mdc/MdcColumn.vue +70 -0
  21. package/app/components/mdc/MdcDocImg.vue +25 -0
  22. package/app/components/mdc/MdcDropcap.vue +84 -0
  23. package/app/components/mdc/MdcError.vue +16 -0
  24. package/app/components/mdc/MdcField.vue +62 -0
  25. package/app/components/mdc/MdcFieldGroup.vue +18 -0
  26. package/app/components/mdc/MdcFigure.vue +51 -0
  27. package/app/components/mdc/MdcIdea.vue +16 -0
  28. package/app/components/mdc/MdcInfo.vue +16 -0
  29. package/app/components/mdc/MdcLayout.vue +57 -0
  30. package/app/components/mdc/MdcNote.vue +16 -0
  31. package/app/components/mdc/MdcPassage.vue +32 -0
  32. package/app/components/mdc/MdcQuiz.vue +281 -0
  33. package/app/components/mdc/MdcQuizOption.vue +91 -0
  34. package/app/components/mdc/MdcQuizQuestion.vue +226 -0
  35. package/app/components/mdc/MdcReadMore.vue +90 -0
  36. package/app/components/mdc/MdcReadMoreGroup.vue +18 -0
  37. package/app/components/mdc/MdcShortcut.vue +46 -0
  38. package/app/components/mdc/MdcStep.vue +42 -0
  39. package/app/components/mdc/MdcSteps.vue +25 -0
  40. package/app/components/mdc/MdcSuccess.vue +16 -0
  41. package/app/components/mdc/MdcTab.vue +17 -0
  42. package/app/components/mdc/MdcTabs.vue +132 -0
  43. package/app/components/mdc/MdcTimeline.vue +14 -0
  44. package/app/components/mdc/MdcTimelineItem.vue +49 -0
  45. package/app/components/mdc/MdcWarning.vue +16 -0
  46. package/app/components/mdc/icons.ts +10 -0
  47. package/app/components/prose/ProseA.vue +27 -0
  48. package/app/components/prose/ProseBlockquote.vue +14 -0
  49. package/app/components/prose/ProseCode.vue +14 -0
  50. package/app/components/prose/ProseEm.vue +14 -0
  51. package/app/components/prose/ProseH1.vue +18 -0
  52. package/app/components/prose/ProseH2.vue +24 -0
  53. package/app/components/prose/ProseH3.vue +24 -0
  54. package/app/components/prose/ProseH4.vue +14 -0
  55. package/app/components/prose/ProseHr.vue +12 -0
  56. package/app/components/prose/ProseImg.vue +120 -0
  57. package/app/components/prose/ProseLi.vue +14 -0
  58. package/app/components/prose/ProseOl.vue +14 -0
  59. package/app/components/prose/ProseP.vue +14 -0
  60. package/app/components/prose/ProsePre.vue +217 -0
  61. package/app/components/prose/ProseStrong.vue +14 -0
  62. package/app/components/prose/ProseTable.vue +16 -0
  63. package/app/components/prose/ProseTbody.vue +14 -0
  64. package/app/components/prose/ProseTd.vue +14 -0
  65. package/app/components/prose/ProseTh.vue +14 -0
  66. package/app/components/prose/ProseThead.vue +14 -0
  67. package/app/components/prose/ProseTr.vue +14 -0
  68. package/app/components/prose/ProseUl.vue +14 -0
  69. package/app/components/site/ModeToggle.vue +123 -0
  70. package/app/components/site/SiteBanner.vue +56 -0
  71. package/app/components/site/SiteFooter.vue +80 -0
  72. package/app/components/site/SiteHeader.vue +250 -0
  73. package/app/components/site/SiteInteractionLayer.vue +35 -0
  74. package/app/components/site/SiteLocaleSwitcher.vue +268 -0
  75. package/app/components/site/SiteLogoMark.vue +12 -0
  76. package/app/components/site/SiteSkipLink.vue +14 -0
  77. package/app/components/ui/accordion/Accordion.vue +15 -0
  78. package/app/components/ui/accordion/AccordionContent.vue +23 -0
  79. package/app/components/ui/accordion/AccordionItem.vue +24 -0
  80. package/app/components/ui/accordion/AccordionTrigger.vue +35 -0
  81. package/app/components/ui/accordion/index.ts +4 -0
  82. package/app/components/ui/alert/Alert.vue +21 -0
  83. package/app/components/ui/alert/AlertDescription.vue +22 -0
  84. package/app/components/ui/alert/AlertTitle.vue +22 -0
  85. package/app/components/ui/alert/index.ts +34 -0
  86. package/app/components/ui/badge/Badge.vue +28 -0
  87. package/app/components/ui/badge/index.ts +24 -0
  88. package/app/components/ui/button/Button.vue +31 -0
  89. package/app/components/ui/button/index.ts +35 -0
  90. package/app/components/ui/card/Card.vue +16 -0
  91. package/app/components/ui/card/CardAction.vue +17 -0
  92. package/app/components/ui/card/CardContent.vue +14 -0
  93. package/app/components/ui/card/CardDescription.vue +14 -0
  94. package/app/components/ui/card/CardFooter.vue +14 -0
  95. package/app/components/ui/card/CardHeader.vue +22 -0
  96. package/app/components/ui/card/CardTitle.vue +14 -0
  97. package/app/components/ui/card/card-variants.ts +15 -0
  98. package/app/components/ui/card/index.ts +8 -0
  99. package/app/components/ui/checkbox/Checkbox.vue +35 -0
  100. package/app/components/ui/checkbox/index.ts +1 -0
  101. package/app/components/ui/collapsible/Collapsible.vue +15 -0
  102. package/app/components/ui/collapsible/CollapsibleContent.vue +25 -0
  103. package/app/components/ui/collapsible/CollapsibleTrigger.vue +12 -0
  104. package/app/components/ui/collapsible/index.ts +3 -0
  105. package/app/components/ui/dialog/Dialog.vue +15 -0
  106. package/app/components/ui/dialog/DialogClose.vue +12 -0
  107. package/app/components/ui/dialog/DialogContent.vue +69 -0
  108. package/app/components/ui/dialog/DialogDescription.vue +21 -0
  109. package/app/components/ui/dialog/DialogFooter.vue +15 -0
  110. package/app/components/ui/dialog/DialogHeader.vue +12 -0
  111. package/app/components/ui/dialog/DialogOverlay.vue +26 -0
  112. package/app/components/ui/dialog/DialogPortal.vue +12 -0
  113. package/app/components/ui/dialog/DialogTitle.vue +21 -0
  114. package/app/components/ui/dialog/DialogTrigger.vue +12 -0
  115. package/app/components/ui/dialog/index.ts +10 -0
  116. package/app/components/ui/dropdown-menu/DropdownMenu.vue +15 -0
  117. package/app/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +36 -0
  118. package/app/components/ui/dropdown-menu/DropdownMenuContent.vue +40 -0
  119. package/app/components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
  120. package/app/components/ui/dropdown-menu/DropdownMenuItem.vue +41 -0
  121. package/app/components/ui/dropdown-menu/DropdownMenuLabel.vue +25 -0
  122. package/app/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +15 -0
  123. package/app/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +37 -0
  124. package/app/components/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
  125. package/app/components/ui/dropdown-menu/DropdownMenuShortcut.vue +17 -0
  126. package/app/components/ui/dropdown-menu/DropdownMenuSub.vue +15 -0
  127. package/app/components/ui/dropdown-menu/DropdownMenuSubContent.vue +29 -0
  128. package/app/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +31 -0
  129. package/app/components/ui/dropdown-menu/DropdownMenuTrigger.vue +14 -0
  130. package/app/components/ui/dropdown-menu/index.ts +16 -0
  131. package/app/components/ui/input/Input.vue +23 -0
  132. package/app/components/ui/input/index.ts +1 -0
  133. package/app/components/ui/kbd/Kbd.vue +23 -0
  134. package/app/components/ui/kbd/KbdGroup.vue +14 -0
  135. package/app/components/ui/kbd/index.ts +22 -0
  136. package/app/components/ui/label/Label.vue +14 -0
  137. package/app/components/ui/label/index.ts +1 -0
  138. package/app/components/ui/scroll-area/ScrollArea.vue +39 -0
  139. package/app/components/ui/scroll-area/ScrollBar.vue +33 -0
  140. package/app/components/ui/scroll-area/index.ts +2 -0
  141. package/app/components/ui/separator/Separator.vue +27 -0
  142. package/app/components/ui/separator/index.ts +1 -0
  143. package/app/components/ui/sheet/Sheet.vue +15 -0
  144. package/app/components/ui/sheet/SheetClose.vue +12 -0
  145. package/app/components/ui/sheet/SheetContent.vue +59 -0
  146. package/app/components/ui/sheet/SheetDescription.vue +21 -0
  147. package/app/components/ui/sheet/SheetFooter.vue +12 -0
  148. package/app/components/ui/sheet/SheetHeader.vue +12 -0
  149. package/app/components/ui/sheet/SheetOverlay.vue +26 -0
  150. package/app/components/ui/sheet/SheetTitle.vue +21 -0
  151. package/app/components/ui/sheet/SheetTrigger.vue +12 -0
  152. package/app/components/ui/sheet/index.ts +8 -0
  153. package/app/components/ui/switch/Switch.vue +39 -0
  154. package/app/components/ui/switch/index.ts +1 -0
  155. package/app/components/ui/tabs/Tabs.vue +24 -0
  156. package/app/components/ui/tabs/TabsContent.vue +21 -0
  157. package/app/components/ui/tabs/TabsList.vue +26 -0
  158. package/app/components/ui/tabs/TabsTrigger.vue +28 -0
  159. package/app/components/ui/tabs/index.ts +4 -0
  160. package/app/components/ui/textarea/Textarea.vue +31 -0
  161. package/app/components/ui/textarea/index.ts +1 -0
  162. package/app/composables/site-navigation.utils.ts +80 -0
  163. package/app/composables/useCanonicalUrl.ts +9 -0
  164. package/app/composables/useContentRouteAlternates.ts +43 -0
  165. package/app/composables/useGinkoAnalytics.ts +37 -0
  166. package/app/composables/useGinkoDocsConfig.ts +6 -0
  167. package/app/composables/useGinkoOgImage.ts +20 -0
  168. package/app/composables/useLocalizedPath.ts +12 -0
  169. package/app/composables/useLocalizedRouteSwitch.ts +31 -0
  170. package/app/composables/usePageMarkdownActions.ts +79 -0
  171. package/app/composables/useSchemaJsonLd.ts +25 -0
  172. package/app/composables/useSiteNavigation.ts +86 -0
  173. package/app/config/site.utils.ts +36 -0
  174. package/app/error.vue +125 -0
  175. package/app/features/docs/components/DocsContributeLinks.vue +65 -0
  176. package/app/features/docs/components/DocsMobileToc.vue +104 -0
  177. package/app/features/docs/components/DocsPageContent.vue +188 -0
  178. package/app/features/docs/components/DocsPageNav.vue +57 -0
  179. package/app/features/docs/components/DocsSidebar.vue +129 -0
  180. package/app/features/docs/components/DocsSidebarDropdown.vue +70 -0
  181. package/app/features/docs/components/DocsSidebarItem.vue +169 -0
  182. package/app/features/docs/components/DocsSidebarList.vue +35 -0
  183. package/app/features/docs/components/DocsSidebarTabs.vue +35 -0
  184. package/app/features/docs/components/DocsToc.vue +60 -0
  185. package/app/features/docs/composables/useDocsEntryPath.ts +13 -0
  186. package/app/features/docs/composables/useDocsNavigation.ts +29 -0
  187. package/app/features/docs/composables/useDocsNavigationData.ts +15 -0
  188. package/app/features/docs/composables/useScrollspy.ts +67 -0
  189. package/app/features/docs/docs-navigation.ts +170 -0
  190. package/app/features/search/command-center.ts +156 -0
  191. package/app/features/search/components/SiteCommandCenter.vue +323 -0
  192. package/app/features/search/components/SiteSearchPageHighlight.vue +124 -0
  193. package/app/features/search/useCommandCenter.ts +300 -0
  194. package/app/layouts/blog.vue +15 -0
  195. package/app/layouts/default.vue +12 -0
  196. package/app/layouts/docs.vue +20 -0
  197. package/app/lib/errors.ts +84 -0
  198. package/app/lib/schema-org.ts +38 -0
  199. package/app/lib/utils.ts +7 -0
  200. package/app/pages/blog/[slug].vue +211 -0
  201. package/app/pages/blog/index.vue +106 -0
  202. package/app/pages/docs/[...slug].vue +10 -0
  203. package/app/pages/docs/index.vue +23 -0
  204. package/app/pages/index.vue +140 -0
  205. package/app/plugins/ssr-width.ts +6 -0
  206. package/app/utils/content.ts +56 -0
  207. package/app/utils/index.ts +1 -0
  208. package/components.ts +9 -0
  209. package/content.js +175 -0
  210. package/content.ts +148 -0
  211. package/i18n/i18n.config.ts +10 -0
  212. package/i18n/locales.ts +81 -0
  213. package/i18n/messages/global/banner.ts +8 -0
  214. package/i18n/messages/global/blog.ts +14 -0
  215. package/i18n/messages/global/command.ts +44 -0
  216. package/i18n/messages/global/docs.ts +32 -0
  217. package/i18n/messages/global/errors.ts +36 -0
  218. package/i18n/messages/global/feedback.ts +11 -0
  219. package/i18n/messages/global/index.ts +21 -0
  220. package/i18n/messages/global/nav.ts +18 -0
  221. package/i18n/messages/global/site.ts +4 -0
  222. package/i18n/messages/global/theme.ts +7 -0
  223. package/i18n/messages/index.ts +20 -0
  224. package/i18n/messages/localize.ts +35 -0
  225. package/i18n/messages/source.ts +5 -0
  226. package/i18n/routes.ts +33 -0
  227. package/icon-bundle.ts +141 -0
  228. package/index.d.ts +13 -0
  229. package/modules/feature-routing.ts +32 -0
  230. package/nuxt.config.ts +194 -0
  231. package/package.json +91 -0
  232. package/runtime/markdown/inline-code-highlight.ts +155 -0
  233. package/runtime/server/agent-markdown.ts +21 -0
  234. package/runtime/utils.ts +7 -0
  235. package/server/mcp/tools/get-page.ts +14 -0
  236. package/server/mcp/tools/list-pages.ts +10 -0
  237. package/server/plugins/agent-markdown.ts +6 -0
  238. package/shared/route-slugs.ts +5 -0
  239. package/shared/types/app-config.ts +100 -0
  240. package/tags.ts +204 -0
package/tags.ts ADDED
@@ -0,0 +1,204 @@
1
+ import type { PortableComponentPolicyV1 } from "@lupinum/ginko-content/cms-contract";
2
+
3
+ export const contentComponentTags = {
4
+ accordion: "MdcAccordion",
5
+ "accordion-item": "MdcAccordionItem",
6
+ alert: "MdcAlert",
7
+ aside: "MdcAside",
8
+ callout: "MdcCallout",
9
+ card: "MdcCard",
10
+ "card-group": "MdcCardGroup",
11
+ center: "MdcCenter",
12
+ "code-group": "MdcCodeGroup",
13
+ column: "MdcColumn",
14
+ danger: "MdcError",
15
+ "doc-img": "MdcDocImg",
16
+ dropcap: "MdcDropcap",
17
+ error: "MdcError",
18
+ field: "MdcField",
19
+ "field-group": "MdcFieldGroup",
20
+ figure: "MdcFigure",
21
+ idea: "MdcIdea",
22
+ img: "ProseImg",
23
+ info: "MdcInfo",
24
+ kbd: "MdcShortcut",
25
+ layout: "MdcLayout",
26
+ note: "MdcNote",
27
+ passage: "MdcPassage",
28
+ quiz: "MdcQuiz",
29
+ "quiz-option": "MdcQuizOption",
30
+ "quiz-question": "MdcQuizQuestion",
31
+ "read-more": "MdcReadMore",
32
+ "read-more-group": "MdcReadMoreGroup",
33
+ shortcut: "MdcShortcut",
34
+ step: "MdcStep",
35
+ steps: "MdcSteps",
36
+ success: "MdcSuccess",
37
+ tab: "MdcTab",
38
+ tabs: "MdcTabs",
39
+ timeline: "MdcTimeline",
40
+ "timeline-item": "MdcTimelineItem",
41
+ warn: "MdcWarning",
42
+ warning: "MdcWarning",
43
+ } as const;
44
+
45
+ type ComponentDefinition = PortableComponentPolicyV1["components"][string];
46
+ type ComponentProps = ComponentDefinition["props"];
47
+
48
+ const optional = (type: ComponentProps[string]["type"]) => ({ type, required: false });
49
+ const required = (type: ComponentProps[string]["type"]) => ({ type, required: true });
50
+ const block = (
51
+ props: ComponentProps = {},
52
+ slots: string[] = ["default"],
53
+ media: ComponentDefinition["media"] = null,
54
+ ): ComponentDefinition => ({ kind: "block", props, slots, media });
55
+ const inline = (props: ComponentProps = {}): ComponentDefinition => ({
56
+ kind: "inline",
57
+ props,
58
+ slots: ["default"],
59
+ media: null,
60
+ });
61
+
62
+ const notice = block({ title: optional("string"), icon: optional("string") });
63
+ const shortcut = inline({ value: optional("string"), size: optional("string") });
64
+
65
+ export const contentComponentPolicy = {
66
+ components: {
67
+ accordion: block({
68
+ type: optional("string"),
69
+ collapsible: optional("boolean"),
70
+ defaultValue: optional("json"),
71
+ }),
72
+ "accordion-item": block(
73
+ {
74
+ value: optional("string"),
75
+ title: optional("string"),
76
+ content: optional("string"),
77
+ },
78
+ ["default", "title", "content"],
79
+ ),
80
+ alert: block({
81
+ title: optional("string"),
82
+ icon: optional("string"),
83
+ type: optional("string"),
84
+ }),
85
+ aside: block({ label: optional("string") }),
86
+ callout: block({
87
+ title: optional("string"),
88
+ type: optional("string"),
89
+ icon: optional("string"),
90
+ }),
91
+ card: block(
92
+ {
93
+ title: optional("string"),
94
+ description: optional("string"),
95
+ footer: optional("string"),
96
+ to: optional("string"),
97
+ target: optional("string"),
98
+ icon: optional("string"),
99
+ iconColor: optional("string"),
100
+ img: optional("asset"),
101
+ showLinkIcon: optional("boolean"),
102
+ horizontal: optional("boolean"),
103
+ },
104
+ ["default", "title", "description", "footer"],
105
+ { sourceProp: "img", altProp: null, titleProp: null, filenameProp: null },
106
+ ),
107
+ "card-group": block({ cols: optional("string") }),
108
+ center: block({
109
+ size: optional("string"),
110
+ max: optional("string"),
111
+ type: optional("string"),
112
+ }),
113
+ "code-group": block(),
114
+ column: block({ size: optional("string") }),
115
+ danger: notice,
116
+ "doc-img": block({ bleed: optional("string") }),
117
+ dropcap: block({ lines: optional("json") }),
118
+ error: notice,
119
+ field: block({
120
+ name: required("string"),
121
+ type: optional("string"),
122
+ required: optional("boolean"),
123
+ description: optional("string"),
124
+ defaultValue: optional("string"),
125
+ }),
126
+ "field-group": block(),
127
+ figure: block(
128
+ {
129
+ src: required("asset"),
130
+ alt: required("string"),
131
+ caption: optional("string"),
132
+ width: optional("json"),
133
+ height: optional("json"),
134
+ bleed: optional("string"),
135
+ aspect: optional("string"),
136
+ fit: optional("string"),
137
+ },
138
+ ["default"],
139
+ { sourceProp: "src", altProp: "alt", titleProp: null, filenameProp: null },
140
+ ),
141
+ idea: notice,
142
+ info: notice,
143
+ kbd: shortcut,
144
+ layout: block({ type: optional("string") }),
145
+ note: notice,
146
+ passage: block({ label: optional("string") }),
147
+ quiz: block({
148
+ title: optional("string"),
149
+ description: optional("string"),
150
+ questionLabel: optional("string"),
151
+ backLabel: optional("string"),
152
+ nextLabel: optional("string"),
153
+ resultsLabel: optional("string"),
154
+ correctSummaryLabel: optional("string"),
155
+ perfectLabel: optional("string"),
156
+ retryPrompt: optional("string"),
157
+ resetLabel: optional("string"),
158
+ }),
159
+ "quiz-option": block({
160
+ correct: optional("boolean"),
161
+ label: optional("string"),
162
+ }),
163
+ "quiz-question": block({
164
+ question: required("string"),
165
+ type: optional("string"),
166
+ explanation: optional("string"),
167
+ options: optional("json"),
168
+ checkLabel: optional("string"),
169
+ correctLabel: optional("string"),
170
+ incorrectLabel: optional("string"),
171
+ resetLabel: optional("string"),
172
+ multipleChoiceLabel: optional("string"),
173
+ }),
174
+ "read-more": block(
175
+ {
176
+ title: optional("string"),
177
+ to: required("string"),
178
+ target: optional("string"),
179
+ icon: optional("string"),
180
+ },
181
+ [],
182
+ ),
183
+ "read-more-group": block(),
184
+ shortcut,
185
+ step: block({ title: optional("string"), icon: optional("string") }),
186
+ steps: block({ variant: optional("string") }),
187
+ success: notice,
188
+ tab: block({ icon: optional("string"), label: optional("string") }),
189
+ tabs: block({ variant: optional("string"), padded: optional("boolean") }),
190
+ timeline: block(),
191
+ "timeline-item": block({
192
+ date: optional("string"),
193
+ label: optional("string"),
194
+ title: optional("string"),
195
+ }),
196
+ warn: notice,
197
+ warning: notice,
198
+ },
199
+ } satisfies PortableComponentPolicyV1;
200
+
201
+ export const contentComponentNames = Array.from(new Set(Object.values(contentComponentTags)));
202
+
203
+ export type ContentComponentTag = keyof typeof contentComponentTags;
204
+ export type ContentComponentName = (typeof contentComponentTags)[ContentComponentTag];