docyard 0.8.0 → 1.0.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 (189) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +67 -1
  3. data/README.md +8 -253
  4. data/exe/docyard +6 -0
  5. data/lib/docyard/build/asset_bundler.rb +2 -2
  6. data/lib/docyard/build/file_copier.rb +12 -5
  7. data/lib/docyard/build/llms_txt_generator.rb +103 -0
  8. data/lib/docyard/build/sitemap_generator.rb +1 -1
  9. data/lib/docyard/build/static_generator.rb +115 -79
  10. data/lib/docyard/builder.rb +6 -2
  11. data/lib/docyard/cli.rb +14 -4
  12. data/lib/docyard/components/aliases.rb +12 -0
  13. data/lib/docyard/components/processors/abbreviation_processor.rb +72 -0
  14. data/lib/docyard/components/processors/accordion_processor.rb +81 -0
  15. data/lib/docyard/components/processors/badge_processor.rb +72 -0
  16. data/lib/docyard/components/processors/callout_processor.rb +9 -3
  17. data/lib/docyard/components/processors/cards_processor.rb +100 -0
  18. data/lib/docyard/components/processors/code_block_extended_fence_postprocessor.rb +24 -0
  19. data/lib/docyard/components/processors/code_block_extended_fence_preprocessor.rb +44 -0
  20. data/lib/docyard/components/processors/code_block_options_preprocessor.rb +34 -3
  21. data/lib/docyard/components/processors/code_block_processor.rb +11 -24
  22. data/lib/docyard/components/processors/code_group_processor.rb +182 -0
  23. data/lib/docyard/components/processors/code_snippet_import_preprocessor.rb +7 -1
  24. data/lib/docyard/components/processors/custom_anchor_processor.rb +42 -0
  25. data/lib/docyard/components/processors/file_tree_processor.rb +150 -0
  26. data/lib/docyard/components/processors/icon_processor.rb +8 -2
  27. data/lib/docyard/components/processors/image_caption_processor.rb +96 -0
  28. data/lib/docyard/components/processors/include_processor.rb +86 -0
  29. data/lib/docyard/components/processors/steps_processor.rb +89 -0
  30. data/lib/docyard/components/processors/tabs_processor.rb +9 -1
  31. data/lib/docyard/components/processors/tooltip_processor.rb +57 -0
  32. data/lib/docyard/components/processors/video_embed_processor.rb +207 -0
  33. data/lib/docyard/components/support/code_block/feature_extractor.rb +3 -1
  34. data/lib/docyard/components/support/code_block/icon_detector.rb +5 -12
  35. data/lib/docyard/components/support/code_block/line_number_resolver.rb +30 -0
  36. data/lib/docyard/components/support/code_detector.rb +2 -12
  37. data/lib/docyard/components/support/code_group/html_builder.rb +118 -0
  38. data/lib/docyard/components/support/markdown_code_block_helper.rb +56 -0
  39. data/lib/docyard/components/support/tabs/icon_detector.rb +6 -2
  40. data/lib/docyard/components/support/tabs/parser.rb +6 -23
  41. data/lib/docyard/config/analytics_resolver.rb +24 -0
  42. data/lib/docyard/config/branding_resolver.rb +84 -58
  43. data/lib/docyard/config/key_validator.rb +30 -0
  44. data/lib/docyard/config/logo_detector.rb +39 -0
  45. data/lib/docyard/config/schema.rb +39 -0
  46. data/lib/docyard/config/section.rb +21 -0
  47. data/lib/docyard/config/validation_helpers.rb +83 -0
  48. data/lib/docyard/config/validator.rb +45 -144
  49. data/lib/docyard/config/validators/navigation.rb +43 -0
  50. data/lib/docyard/config/validators/section.rb +114 -0
  51. data/lib/docyard/config.rb +45 -96
  52. data/lib/docyard/constants.rb +59 -0
  53. data/lib/docyard/{utils/errors.rb → errors.rb} +6 -0
  54. data/lib/docyard/initializer.rb +100 -49
  55. data/lib/docyard/navigation/page_navigation_builder.rb +65 -0
  56. data/lib/docyard/navigation/sidebar/auto_builder.rb +107 -0
  57. data/lib/docyard/navigation/sidebar/cache.rb +96 -0
  58. data/lib/docyard/navigation/sidebar/config_builder.rb +179 -0
  59. data/lib/docyard/navigation/sidebar/distributed_builder.rb +145 -0
  60. data/lib/docyard/navigation/sidebar/item.rb +6 -1
  61. data/lib/docyard/navigation/sidebar/local_config_loader.rb +69 -3
  62. data/lib/docyard/navigation/sidebar/renderer.rb +18 -3
  63. data/lib/docyard/navigation/sidebar_builder.rb +43 -81
  64. data/lib/docyard/rendering/branding_variables.rb +65 -0
  65. data/lib/docyard/rendering/icon_helpers.rb +14 -1
  66. data/lib/docyard/rendering/icons/devicons.rb +63 -0
  67. data/lib/docyard/rendering/icons.rb +26 -27
  68. data/lib/docyard/rendering/markdown.rb +20 -15
  69. data/lib/docyard/rendering/og_helpers.rb +36 -0
  70. data/lib/docyard/rendering/renderer.rb +87 -58
  71. data/lib/docyard/rendering/template_resolver.rb +14 -0
  72. data/lib/docyard/routing/fallback_resolver.rb +3 -3
  73. data/lib/docyard/search/build_indexer.rb +2 -2
  74. data/lib/docyard/search/dev_indexer.rb +36 -28
  75. data/lib/docyard/search/pagefind_support.rb +1 -1
  76. data/lib/docyard/server/asset_handler.rb +40 -15
  77. data/lib/docyard/server/dev_server.rb +90 -55
  78. data/lib/docyard/server/file_watcher.rb +68 -18
  79. data/lib/docyard/server/pagefind_handler.rb +1 -1
  80. data/lib/docyard/server/preview_server.rb +29 -33
  81. data/lib/docyard/server/rack_application.rb +38 -70
  82. data/lib/docyard/server/router.rb +11 -7
  83. data/lib/docyard/server/sse_server.rb +157 -0
  84. data/lib/docyard/server/static_file_app.rb +42 -0
  85. data/lib/docyard/templates/assets/css/components/abbreviation.css +86 -0
  86. data/lib/docyard/templates/assets/css/components/accordion.css +138 -0
  87. data/lib/docyard/templates/assets/css/components/badges.css +47 -0
  88. data/lib/docyard/templates/assets/css/components/banner.css +233 -0
  89. data/lib/docyard/templates/assets/css/components/breadcrumbs.css +2 -1
  90. data/lib/docyard/templates/assets/css/components/callout.css +26 -6
  91. data/lib/docyard/templates/assets/css/components/cards.css +100 -0
  92. data/lib/docyard/templates/assets/css/components/code-block.css +14 -2
  93. data/lib/docyard/templates/assets/css/components/code-group.css +294 -0
  94. data/lib/docyard/templates/assets/css/components/feedback.css +126 -0
  95. data/lib/docyard/templates/assets/css/components/figure.css +22 -0
  96. data/lib/docyard/templates/assets/css/components/file-tree.css +125 -0
  97. data/lib/docyard/templates/assets/css/components/heading-anchor.css +21 -13
  98. data/lib/docyard/templates/assets/css/components/icon.css +5 -0
  99. data/lib/docyard/templates/assets/css/components/lightbox.css +65 -0
  100. data/lib/docyard/templates/assets/css/components/nav-menu.css +20 -4
  101. data/lib/docyard/templates/assets/css/components/navigation.css +32 -3
  102. data/lib/docyard/templates/assets/css/components/page-actions.css +131 -0
  103. data/lib/docyard/templates/assets/css/components/prev-next.css +20 -22
  104. data/lib/docyard/templates/assets/css/components/search.css +6 -10
  105. data/lib/docyard/templates/assets/css/components/steps.css +122 -0
  106. data/lib/docyard/templates/assets/css/components/tab-bar.css +7 -4
  107. data/lib/docyard/templates/assets/css/components/table-of-contents.css +57 -11
  108. data/lib/docyard/templates/assets/css/components/tabs.css +13 -5
  109. data/lib/docyard/templates/assets/css/components/theme-toggle.css +3 -1
  110. data/lib/docyard/templates/assets/css/components/tooltip.css +113 -0
  111. data/lib/docyard/templates/assets/css/components/video.css +41 -0
  112. data/lib/docyard/templates/assets/css/landing.css +82 -13
  113. data/lib/docyard/templates/assets/css/layout.css +17 -0
  114. data/lib/docyard/templates/assets/css/markdown.css +25 -3
  115. data/lib/docyard/templates/assets/css/variables.css +13 -1
  116. data/lib/docyard/templates/assets/js/components/abbreviation.js +85 -0
  117. data/lib/docyard/templates/assets/js/components/banner.js +81 -0
  118. data/lib/docyard/templates/assets/js/components/code-group.js +286 -0
  119. data/lib/docyard/templates/assets/js/components/copy-page.js +115 -0
  120. data/lib/docyard/templates/assets/js/components/feedback.js +66 -0
  121. data/lib/docyard/templates/assets/js/components/file-tree.js +39 -0
  122. data/lib/docyard/templates/assets/js/components/lightbox.js +72 -0
  123. data/lib/docyard/templates/assets/js/components/navigation.js +3 -3
  124. data/lib/docyard/templates/assets/js/components/search.js +3 -3
  125. data/lib/docyard/templates/assets/js/components/table-of-contents.js +12 -6
  126. data/lib/docyard/templates/assets/js/components/tabs.js +45 -22
  127. data/lib/docyard/templates/assets/js/components/tooltip.js +118 -0
  128. data/lib/docyard/templates/assets/js/hot-reload.js +44 -0
  129. data/lib/docyard/templates/errors/404.html.erb +114 -5
  130. data/lib/docyard/templates/errors/500.html.erb +173 -10
  131. data/lib/docyard/templates/init/_sidebar.yml +36 -0
  132. data/lib/docyard/templates/init/docyard.yml +36 -0
  133. data/lib/docyard/templates/init/pages/components.md +146 -0
  134. data/lib/docyard/templates/init/pages/getting-started.md +94 -0
  135. data/lib/docyard/templates/init/pages/index.md +22 -0
  136. data/lib/docyard/templates/layouts/default.html.erb +11 -0
  137. data/lib/docyard/templates/layouts/splash.html.erb +15 -1
  138. data/lib/docyard/templates/partials/_accordion.html.erb +9 -0
  139. data/lib/docyard/templates/partials/_analytics.html.erb +24 -0
  140. data/lib/docyard/templates/partials/_banner.html.erb +27 -0
  141. data/lib/docyard/templates/partials/_card.html.erb +23 -0
  142. data/lib/docyard/templates/partials/_code_block.html.erb +1 -1
  143. data/lib/docyard/templates/partials/_feedback.html.erb +14 -0
  144. data/lib/docyard/templates/partials/_footer.html.erb +1 -1
  145. data/lib/docyard/templates/partials/_head.html.erb +79 -4
  146. data/lib/docyard/templates/partials/_icon_library.html.erb +8 -0
  147. data/lib/docyard/templates/partials/_nav_group.html.erb +6 -0
  148. data/lib/docyard/templates/partials/_nav_leaf.html.erb +3 -0
  149. data/lib/docyard/templates/partials/_page_actions.html.erb +21 -0
  150. data/lib/docyard/templates/partials/_scripts.html.erb +6 -3
  151. data/lib/docyard/templates/partials/_step.html.erb +14 -0
  152. data/lib/docyard/templates/partials/_tabs.html.erb +4 -1
  153. data/lib/docyard/utils/git_info.rb +157 -0
  154. data/lib/docyard/utils/hash_utils.rb +31 -0
  155. data/lib/docyard/utils/html_helpers.rb +8 -0
  156. data/lib/docyard/utils/logging.rb +44 -3
  157. data/lib/docyard/utils/path_resolver.rb +0 -10
  158. data/lib/docyard/utils/path_utils.rb +73 -0
  159. data/lib/docyard/version.rb +1 -1
  160. data/lib/docyard.rb +2 -2
  161. metadata +114 -47
  162. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -31
  163. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  164. data/.github/pull_request_template.md +0 -14
  165. data/.github/workflows/ci.yml +0 -49
  166. data/.rubocop.yml +0 -42
  167. data/CODE_OF_CONDUCT.md +0 -132
  168. data/CONTRIBUTING.md +0 -55
  169. data/LICENSE.vscode-icons +0 -42
  170. data/Rakefile +0 -8
  171. data/lib/docyard/config/constants.rb +0 -31
  172. data/lib/docyard/navigation/sidebar/children_discoverer.rb +0 -51
  173. data/lib/docyard/navigation/sidebar/config_parser.rb +0 -208
  174. data/lib/docyard/navigation/sidebar/file_resolver.rb +0 -78
  175. data/lib/docyard/navigation/sidebar/file_system_scanner.rb +0 -78
  176. data/lib/docyard/navigation/sidebar/metadata_extractor.rb +0 -69
  177. data/lib/docyard/navigation/sidebar/metadata_reader.rb +0 -47
  178. data/lib/docyard/navigation/sidebar/path_prefixer.rb +0 -34
  179. data/lib/docyard/navigation/sidebar/sorter.rb +0 -21
  180. data/lib/docyard/navigation/sidebar/title_extractor.rb +0 -25
  181. data/lib/docyard/navigation/sidebar/tree_builder.rb +0 -139
  182. data/lib/docyard/rendering/icons/LICENSE.phosphor +0 -21
  183. data/lib/docyard/rendering/icons/file_types.rb +0 -79
  184. data/lib/docyard/rendering/icons/phosphor.rb +0 -90
  185. data/lib/docyard/rendering/language_mapping.rb +0 -52
  186. data/lib/docyard/templates/assets/js/reload.js +0 -98
  187. data/lib/docyard/templates/partials/_icon.html.erb +0 -1
  188. data/lib/docyard/templates/partials/_icon_file_extension.html.erb +0 -1
  189. data/sig/docyard.rbs +0 -4
@@ -15,16 +15,17 @@
15
15
 
16
16
  .docyard-callout__icon {
17
17
  flex-shrink: 0;
18
- width: 1.25rem;
19
- height: 1.25rem;
18
+ width: 1.5rem;
19
+ height: 1.5rem;
20
20
  display: flex;
21
21
  align-items: center;
22
22
  justify-content: center;
23
23
  }
24
24
 
25
- .docyard-callout__icon .docyard-icon {
26
- width: 100%;
27
- height: 100%;
25
+ .docyard-callout__icon .docyard-icon,
26
+ .docyard-callout__icon i[class*="ph-"] {
27
+ font-size: 1.25rem;
28
+ display: inline-block;
28
29
  }
29
30
 
30
31
  .docyard-callout__icon svg {
@@ -98,11 +99,30 @@
98
99
  }
99
100
 
100
101
  .docyard-callout__body :not(pre)>code {
101
- background-color: oklch(from var(--input) l c h / 30%);
102
102
  padding: 0.125rem 0.375rem;
103
103
  border-radius: var(--radius-sm);
104
104
  }
105
105
 
106
+ .docyard-callout--note .docyard-callout__body :not(pre)>code {
107
+ background-color: oklch(from var(--callout-note-border) l c h / 15%);
108
+ }
109
+
110
+ .docyard-callout--tip .docyard-callout__body :not(pre)>code {
111
+ background-color: oklch(from var(--callout-tip-border) l c h / 15%);
112
+ }
113
+
114
+ .docyard-callout--important .docyard-callout__body :not(pre)>code {
115
+ background-color: oklch(from var(--callout-important-border) l c h / 15%);
116
+ }
117
+
118
+ .docyard-callout--warning .docyard-callout__body :not(pre)>code {
119
+ background-color: oklch(from var(--callout-warning-border) l c h / 15%);
120
+ }
121
+
122
+ .docyard-callout--danger .docyard-callout__body :not(pre)>code {
123
+ background-color: oklch(from var(--callout-danger-border) l c h / 15%);
124
+ }
125
+
106
126
  .docyard-callout--note {
107
127
  border-color: var(--callout-note-border);
108
128
  background-color: var(--callout-note-background);
@@ -0,0 +1,100 @@
1
+ .docyard-cards {
2
+ display: grid;
3
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
4
+ gap: var(--spacing-4);
5
+ margin: var(--spacing-6) 0;
6
+ }
7
+
8
+ .docyard-card {
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: var(--spacing-3);
12
+ padding: var(--spacing-5);
13
+ border: 1px solid var(--border);
14
+ border-radius: var(--radius-xl);
15
+ background-color: var(--card);
16
+ text-decoration: none;
17
+ color: inherit;
18
+ transition:
19
+ border-color var(--transition-fast),
20
+ box-shadow var(--transition-fast),
21
+ transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
22
+ }
23
+
24
+ a.docyard-card:hover {
25
+ border-color: var(--primary);
26
+ box-shadow: 0 4px 12px oklch(from var(--primary) l c h / 0.1);
27
+ }
28
+
29
+ a.docyard-card:active {
30
+ transform: scale(0.98);
31
+ transition: transform 0.1s cubic-bezier(0.4, 0, 1, 1);
32
+ }
33
+
34
+ .docyard-card__icon {
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ width: 2.5rem;
39
+ height: 2.5rem;
40
+ border-radius: var(--radius-lg);
41
+ background-color: oklch(from var(--primary) l c h / 0.1);
42
+ color: var(--primary);
43
+ }
44
+
45
+ .docyard-card__icon svg {
46
+ width: 1.25rem;
47
+ height: 1.25rem;
48
+ }
49
+
50
+ .docyard-card__content {
51
+ display: flex;
52
+ flex-direction: column;
53
+ gap: var(--spacing-2);
54
+ }
55
+
56
+ .docyard-card__title {
57
+ margin: 0;
58
+ font-size: var(--text-base);
59
+ font-weight: var(--font-semibold);
60
+ color: var(--foreground);
61
+ line-height: var(--leading-tight);
62
+ }
63
+
64
+ .docyard-card__body {
65
+ font-size: var(--text-sm);
66
+ color: var(--muted-foreground);
67
+ line-height: var(--leading-relaxed);
68
+ }
69
+
70
+ .docyard-card__body > *:first-child {
71
+ margin-top: 0;
72
+ }
73
+
74
+ .docyard-card__body > *:last-child {
75
+ margin-bottom: 0;
76
+ }
77
+
78
+ .docyard-card__body p {
79
+ margin: 0;
80
+ }
81
+
82
+ @media (max-width: 640px) {
83
+ .docyard-cards {
84
+ grid-template-columns: 1fr;
85
+ }
86
+
87
+ .docyard-card {
88
+ padding: var(--spacing-4);
89
+ }
90
+ }
91
+
92
+ @media (prefers-reduced-motion: reduce) {
93
+ .docyard-card {
94
+ transition: border-color var(--transition-fast);
95
+ }
96
+
97
+ a.docyard-card:active {
98
+ transform: none;
99
+ }
100
+ }
@@ -57,7 +57,8 @@
57
57
  flex-shrink: 0;
58
58
  }
59
59
 
60
- .docyard-code-block__icon .docyard-icon {
60
+ .docyard-code-block__icon .docyard-icon,
61
+ .docyard-code-block__icon i[class*="ph-"] {
61
62
  width: 1rem;
62
63
  height: 1rem;
63
64
  display: inline-flex;
@@ -121,6 +122,16 @@
121
122
  overscroll-behavior-x: contain;
122
123
  }
123
124
 
125
+ .docyard-code-block__scroll-spacer {
126
+ display: inline;
127
+ padding-right: 5rem;
128
+ }
129
+
130
+ .docyard-code-block:not(.docyard-code-block--titled) .docyard-code-block__copy {
131
+ backdrop-filter: blur(8px);
132
+ -webkit-backdrop-filter: blur(8px);
133
+ }
134
+
124
135
  .docyard-code-line {
125
136
  display: block;
126
137
  }
@@ -458,7 +469,8 @@
458
469
  gap: var(--spacing-2);
459
470
  }
460
471
 
461
- .docyard-code-block__icon .docyard-icon {
472
+ .docyard-code-block__icon .docyard-icon,
473
+ .docyard-code-block__icon i[class*="ph-"] {
462
474
  width: 0.875rem;
463
475
  height: 0.875rem;
464
476
  }
@@ -0,0 +1,294 @@
1
+ .docyard-code-group {
2
+ margin: var(--spacing-4) 0;
3
+ border: 1px solid var(--code-block-border);
4
+ border-radius: var(--radius-2xl);
5
+ overflow: hidden;
6
+ background-color: var(--code-block-bg);
7
+ }
8
+
9
+ .docyard-code-group__tabs-wrapper {
10
+ display: flex;
11
+ align-items: center;
12
+ gap: var(--spacing-2);
13
+ padding: var(--spacing-2) var(--spacing-4) 0;
14
+ background: var(--code-block-header-bg);
15
+ border-bottom: 1px solid var(--code-block-header-border);
16
+ font-size: var(--text-xs);
17
+ font-weight: var(--font-medium);
18
+ color: var(--muted-foreground);
19
+ }
20
+
21
+ .docyard-code-group__tabs-scroll-container {
22
+ position: relative;
23
+ flex: 1;
24
+ min-width: 0;
25
+ }
26
+
27
+ .docyard-code-group__tabs {
28
+ display: flex;
29
+ align-items: center;
30
+ gap: 0;
31
+ position: relative;
32
+ overflow-x: auto;
33
+ overscroll-behavior-x: contain;
34
+ -webkit-overflow-scrolling: touch;
35
+ scrollbar-width: none;
36
+ margin: 0;
37
+ padding: 0 0 var(--spacing-2);
38
+ }
39
+
40
+ .docyard-code-group__tabs::-webkit-scrollbar {
41
+ display: none;
42
+ }
43
+
44
+ .docyard-code-group__tab {
45
+ display: inline-flex;
46
+ align-items: center;
47
+ justify-content: flex-start;
48
+ gap: var(--spacing-1-5);
49
+ padding: var(--spacing-2) var(--spacing-2-5);
50
+ background: transparent;
51
+ border: none;
52
+ font-size: var(--text-sm);
53
+ font-weight: inherit;
54
+ font-family: var(--font-sans);
55
+ color: inherit;
56
+ cursor: pointer;
57
+ transition: color 0.15s ease;
58
+ position: relative;
59
+ white-space: nowrap;
60
+ flex-shrink: 0;
61
+ line-height: 1.5;
62
+ outline: none;
63
+ max-width: 14rem;
64
+ }
65
+
66
+ .docyard-code-group__tab:hover {
67
+ color: var(--foreground);
68
+ }
69
+
70
+ .docyard-code-group__tab[aria-selected="true"] {
71
+ color: var(--foreground);
72
+ }
73
+
74
+ .docyard-code-group__tab:focus-visible {
75
+ outline: 2px solid var(--ring);
76
+ outline-offset: -2px;
77
+ border-radius: var(--radius-sm);
78
+ }
79
+
80
+ .docyard-code-group__tab .docyard-icon,
81
+ .docyard-code-group__tab i[class*="ph-"] {
82
+ width: 1rem;
83
+ height: 1rem;
84
+ display: inline-flex;
85
+ flex-shrink: 0;
86
+ }
87
+
88
+ .docyard-code-group__tab .docyard-icon svg {
89
+ width: 100%;
90
+ height: 100%;
91
+ }
92
+
93
+ .docyard-code-group__tab-label {
94
+ overflow: hidden;
95
+ text-overflow: ellipsis;
96
+ direction: rtl;
97
+ text-align: left;
98
+ }
99
+
100
+ .docyard-code-group__indicator {
101
+ position: absolute;
102
+ bottom: 0;
103
+ left: 0;
104
+ height: 2px;
105
+ background: var(--primary);
106
+ border-radius: 1px;
107
+ pointer-events: none;
108
+ z-index: 1;
109
+ opacity: 0;
110
+ transition:
111
+ transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
112
+ width 0.3s cubic-bezier(0.34, 1.56, 0.64, 1),
113
+ opacity 0.15s ease;
114
+ will-change: transform, width;
115
+ }
116
+
117
+ .docyard-code-group__indicator.is-ready {
118
+ opacity: 1;
119
+ }
120
+
121
+ .docyard-code-group__tabs-scroll-container.can-scroll-left .docyard-code-group__tabs {
122
+ mask-image: linear-gradient(to right, transparent, black 2rem);
123
+ -webkit-mask-image: linear-gradient(to right, transparent, black 2rem);
124
+ }
125
+
126
+ .docyard-code-group__tabs-scroll-container.can-scroll-right .docyard-code-group__tabs {
127
+ mask-image: linear-gradient(to left, transparent, black 2rem);
128
+ -webkit-mask-image: linear-gradient(to left, transparent, black 2rem);
129
+ }
130
+
131
+ .docyard-code-group__tabs-scroll-container.can-scroll-left.can-scroll-right .docyard-code-group__tabs {
132
+ mask-image: linear-gradient(to right, transparent, black 2rem, black calc(100% - 2rem), transparent);
133
+ -webkit-mask-image: linear-gradient(to right, transparent, black 2rem, black calc(100% - 2rem), transparent);
134
+ }
135
+
136
+ .docyard-code-group__copy {
137
+ display: inline-flex;
138
+ align-items: center;
139
+ justify-content: center;
140
+ gap: var(--spacing-1-5);
141
+ height: 1.75rem;
142
+ padding: 0 var(--spacing-2-5);
143
+ margin-bottom: var(--spacing-2);
144
+ border: none;
145
+ border-radius: 9999px;
146
+ background-color: var(--code-block-copy-bg);
147
+ color: var(--muted-foreground);
148
+ cursor: pointer;
149
+ flex-shrink: 0;
150
+ transition:
151
+ transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
152
+ background-color 0.2s ease,
153
+ color 0.2s ease,
154
+ box-shadow 0.2s ease;
155
+ box-shadow: var(--code-block-copy-shadow);
156
+ }
157
+
158
+ .docyard-code-group__copy:hover {
159
+ background-color: var(--code-block-copy-bg-hover);
160
+ color: var(--foreground);
161
+ box-shadow: var(--code-block-copy-shadow-hover);
162
+ }
163
+
164
+ .docyard-code-group__copy:active {
165
+ transform: scale(0.92);
166
+ transition:
167
+ transform 0.1s cubic-bezier(0.4, 0, 1, 1),
168
+ background-color 0.1s ease,
169
+ box-shadow 0.1s ease;
170
+ box-shadow: var(--code-block-copy-shadow-active);
171
+ }
172
+
173
+ .docyard-code-group__copy:focus-visible {
174
+ outline: none;
175
+ box-shadow:
176
+ 0 1px 2px oklch(from var(--foreground) l c h / 5%),
177
+ 0 0 0 2px var(--background),
178
+ 0 0 0 4px var(--ring);
179
+ }
180
+
181
+ .docyard-code-group__copy.is-success {
182
+ background-color: var(--primary);
183
+ color: white;
184
+ box-shadow:
185
+ 0 1px 2px oklch(from var(--primary) l c h / 20%),
186
+ 0 0 0 1px oklch(from var(--primary) l c h / 30%);
187
+ }
188
+
189
+ .docyard-code-group__copy.is-success:hover {
190
+ background-color: oklch(from var(--primary) calc(l - 0.03) c h);
191
+ color: white;
192
+ box-shadow:
193
+ 0 2px 4px oklch(from var(--primary) l c h / 25%),
194
+ 0 0 0 1px oklch(from var(--primary) l c h / 35%);
195
+ }
196
+
197
+ .docyard-code-group__copy-icon {
198
+ display: inline-flex;
199
+ align-items: center;
200
+ justify-content: center;
201
+ flex-shrink: 0;
202
+ }
203
+
204
+ .docyard-code-group__copy-icon svg {
205
+ width: 0.875rem;
206
+ height: 0.875rem;
207
+ }
208
+
209
+ .docyard-code-group__copy-text {
210
+ font-size: var(--text-xs);
211
+ font-weight: var(--font-medium);
212
+ font-family: var(--font-sans);
213
+ line-height: 1;
214
+ }
215
+
216
+ .docyard-code-group__panels {
217
+ position: relative;
218
+ }
219
+
220
+ .docyard-code-group__panel {
221
+ display: none;
222
+ outline: none;
223
+ }
224
+
225
+ .docyard-code-group__panel[aria-hidden="false"] {
226
+ display: block;
227
+ }
228
+
229
+ .docyard-code-group__panel .docyard-code-block {
230
+ margin: 0;
231
+ border: none;
232
+ border-radius: 0;
233
+ background-color: transparent;
234
+ }
235
+
236
+ .docyard-code-group__panel .docyard-code-block__header {
237
+ display: none;
238
+ }
239
+
240
+ .docyard-code-group__panel .docyard-code-block__copy {
241
+ display: none;
242
+ }
243
+
244
+ .docyard-code-group__panel .docyard-code-block__content {
245
+ border-radius: 0;
246
+ }
247
+
248
+ .docyard-code-group__panel .docyard-code-block pre {
249
+ border-radius: 0;
250
+ }
251
+
252
+ @media (max-width: 640px) {
253
+ .docyard-code-group {
254
+ border-radius: var(--radius-xl);
255
+ }
256
+
257
+ .docyard-code-group__tabs-wrapper {
258
+ padding: var(--spacing-2) var(--spacing-3) 0;
259
+ gap: var(--spacing-2);
260
+ }
261
+
262
+ .docyard-code-group__tab {
263
+ padding: var(--spacing-1-5) var(--spacing-2);
264
+ gap: var(--spacing-1);
265
+ }
266
+
267
+ .docyard-code-group__tab .docyard-icon,
268
+ .docyard-code-group__tab i[class*="ph-"] {
269
+ width: 0.875rem;
270
+ height: 0.875rem;
271
+ }
272
+
273
+ .docyard-code-group__copy {
274
+ height: 1.5rem;
275
+ padding: 0 var(--spacing-2);
276
+ gap: var(--spacing-1);
277
+ }
278
+
279
+ .docyard-code-group__copy-icon svg {
280
+ width: 0.75rem;
281
+ height: 0.75rem;
282
+ }
283
+
284
+ .docyard-code-group__copy-text {
285
+ font-size: 0.625rem;
286
+ }
287
+ }
288
+
289
+ @media (prefers-reduced-motion: reduce) {
290
+ .docyard-code-group__tab,
291
+ .docyard-code-group__indicator {
292
+ transition: none;
293
+ }
294
+ }
@@ -0,0 +1,126 @@
1
+ .feedback {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: center;
5
+ gap: var(--spacing-3);
6
+ margin-top: var(--spacing-10);
7
+ padding-top: var(--spacing-6);
8
+ }
9
+
10
+ .feedback__question {
11
+ margin: 0;
12
+ font-size: var(--text-sm);
13
+ font-weight: var(--font-medium);
14
+ color: var(--foreground);
15
+ }
16
+
17
+ .feedback__buttons {
18
+ display: flex;
19
+ gap: var(--spacing-2);
20
+ }
21
+
22
+ .feedback__btn {
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: center;
26
+ width: 2.5rem;
27
+ height: 2.5rem;
28
+ padding: 0;
29
+ background-color: var(--background);
30
+ border: 1px solid var(--border);
31
+ border-radius: var(--radius-lg);
32
+ color: var(--muted-foreground);
33
+ cursor: pointer;
34
+ transition:
35
+ transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
36
+ background-color var(--transition-fast),
37
+ border-color var(--transition-fast),
38
+ color var(--transition-fast),
39
+ box-shadow 0.2s ease;
40
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
41
+ }
42
+
43
+ .feedback__btn:hover {
44
+ background-color: var(--background);
45
+ border-color: var(--foreground);
46
+ color: var(--foreground);
47
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
48
+ }
49
+
50
+ .feedback__btn:active {
51
+ transform: scale(0.92);
52
+ transition:
53
+ transform 0.1s cubic-bezier(0.4, 0, 1, 1),
54
+ background-color var(--transition-fast),
55
+ border-color var(--transition-fast),
56
+ color var(--transition-fast);
57
+ box-shadow: 0 0 1px rgba(0, 0, 0, 0.05);
58
+ }
59
+
60
+ .feedback__btn:focus-visible {
61
+ outline: 2px solid var(--primary);
62
+ outline-offset: 2px;
63
+ }
64
+
65
+ .feedback__btn i[class*="ph-"] {
66
+ font-size: 1.125rem;
67
+ transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
68
+ }
69
+
70
+ .feedback__btn.is-selected {
71
+ background-color: var(--primary);
72
+ border-color: var(--primary);
73
+ color: var(--primary-foreground);
74
+ pointer-events: none;
75
+ }
76
+
77
+ .feedback__btn.is-selected i[class*="ph-"] {
78
+ animation: feedbackPop 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
79
+ }
80
+
81
+ .feedback__btn.is-not-selected {
82
+ opacity: 0.4;
83
+ pointer-events: none;
84
+ }
85
+
86
+ @keyframes feedbackPop {
87
+ 0% {
88
+ transform: scale(1);
89
+ }
90
+ 50% {
91
+ transform: scale(1.3);
92
+ }
93
+ 100% {
94
+ transform: scale(1);
95
+ }
96
+ }
97
+
98
+ .feedback__thanks {
99
+ margin: 0;
100
+ font-size: var(--text-sm);
101
+ color: var(--muted-foreground);
102
+ animation: feedbackFadeIn 0.3s ease;
103
+ }
104
+
105
+ .feedback__thanks[hidden] {
106
+ display: none;
107
+ }
108
+
109
+ @keyframes feedbackFadeIn {
110
+ from {
111
+ opacity: 0;
112
+ transform: translateY(-4px);
113
+ }
114
+ to {
115
+ opacity: 1;
116
+ transform: translateY(0);
117
+ }
118
+ }
119
+
120
+ .feedback.is-submitted .feedback__question {
121
+ display: none;
122
+ }
123
+
124
+ .feedback.is-submitted .feedback__buttons {
125
+ display: none;
126
+ }
@@ -0,0 +1,22 @@
1
+ .docyard-figure {
2
+ margin: var(--spacing-6) 0;
3
+ padding: 0;
4
+ text-align: center;
5
+ }
6
+
7
+ .docyard-figure img {
8
+ display: inline-block;
9
+ max-width: 100%;
10
+ height: auto;
11
+ border-radius: var(--radius-xl);
12
+ border: 1px solid var(--border);
13
+ cursor: zoom-in;
14
+ }
15
+
16
+ .docyard-figure figcaption {
17
+ margin-top: var(--spacing-3);
18
+ font-size: var(--text-sm);
19
+ color: var(--muted-foreground);
20
+ text-align: center;
21
+ font-style: italic;
22
+ }