@tabelhadev/tabelhawebui 0.28.4

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 (175) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +222 -0
  3. package/README.pt-BR.md +217 -0
  4. package/dist/actions/click-outside.d.ts +3 -0
  5. package/dist/actions/click-outside.js +12 -0
  6. package/dist/actions/combobox-keyboard-nav.d.ts +9 -0
  7. package/dist/actions/combobox-keyboard-nav.js +28 -0
  8. package/dist/actions/focus-trap.d.ts +1 -0
  9. package/dist/actions/focus-trap.js +34 -0
  10. package/dist/actions/scroll-lock.d.ts +1 -0
  11. package/dist/actions/scroll-lock.js +17 -0
  12. package/dist/components/actions/Button.svelte +169 -0
  13. package/dist/components/actions/Button.svelte.d.ts +19 -0
  14. package/dist/components/appshell/AppShell.svelte +50 -0
  15. package/dist/components/appshell/AppShell.svelte.d.ts +19 -0
  16. package/dist/components/appshell/AppShellBottomNav.svelte +67 -0
  17. package/dist/components/appshell/AppShellBottomNav.svelte.d.ts +9 -0
  18. package/dist/components/appshell/AppShellContent.svelte +38 -0
  19. package/dist/components/appshell/AppShellContent.svelte.d.ts +10 -0
  20. package/dist/components/appshell/AppShellSidebar.svelte +196 -0
  21. package/dist/components/appshell/AppShellSidebar.svelte.d.ts +15 -0
  22. package/dist/components/appshell/types.d.ts +6 -0
  23. package/dist/components/appshell/types.js +1 -0
  24. package/dist/components/appshell/utils.d.ts +1 -0
  25. package/dist/components/appshell/utils.js +3 -0
  26. package/dist/components/card/Card.svelte +31 -0
  27. package/dist/components/card/Card.svelte.d.ts +9 -0
  28. package/dist/components/card/CardAction.svelte +57 -0
  29. package/dist/components/card/CardAction.svelte.d.ts +10 -0
  30. package/dist/components/card/CardContent.svelte +25 -0
  31. package/dist/components/card/CardContent.svelte.d.ts +8 -0
  32. package/dist/components/card/CardDescription.svelte +24 -0
  33. package/dist/components/card/CardDescription.svelte.d.ts +8 -0
  34. package/dist/components/card/CardFooter.svelte +25 -0
  35. package/dist/components/card/CardFooter.svelte.d.ts +8 -0
  36. package/dist/components/card/CardHeader.svelte +54 -0
  37. package/dist/components/card/CardHeader.svelte.d.ts +10 -0
  38. package/dist/components/card/CardTitle.svelte +25 -0
  39. package/dist/components/card/CardTitle.svelte.d.ts +8 -0
  40. package/dist/components/chat/ChatMessage.svelte +104 -0
  41. package/dist/components/chat/ChatMessage.svelte.d.ts +10 -0
  42. package/dist/components/choice/Listbox.svelte +183 -0
  43. package/dist/components/choice/Listbox.svelte.d.ts +15 -0
  44. package/dist/components/choice/MultiSelect.svelte +278 -0
  45. package/dist/components/choice/MultiSelect.svelte.d.ts +18 -0
  46. package/dist/components/choice/Rating.svelte +91 -0
  47. package/dist/components/choice/Rating.svelte.d.ts +12 -0
  48. package/dist/components/choice/Toggle.svelte +112 -0
  49. package/dist/components/choice/Toggle.svelte.d.ts +12 -0
  50. package/dist/components/feedback/Badge.svelte +66 -0
  51. package/dist/components/feedback/Badge.svelte.d.ts +9 -0
  52. package/dist/components/feedback/ErrorPage.svelte +99 -0
  53. package/dist/components/feedback/ErrorPage.svelte.d.ts +13 -0
  54. package/dist/components/feedback/Message.svelte +130 -0
  55. package/dist/components/feedback/Message.svelte.d.ts +14 -0
  56. package/dist/components/feedback/ProgressBar.svelte +69 -0
  57. package/dist/components/feedback/ProgressBar.svelte.d.ts +8 -0
  58. package/dist/components/feedback/Skeleton.svelte +47 -0
  59. package/dist/components/feedback/Skeleton.svelte.d.ts +9 -0
  60. package/dist/components/feedback/Status.svelte +75 -0
  61. package/dist/components/feedback/Status.svelte.d.ts +10 -0
  62. package/dist/components/feedback/StatusPill.svelte +94 -0
  63. package/dist/components/feedback/StatusPill.svelte.d.ts +13 -0
  64. package/dist/components/feedback/Toaster.svelte +122 -0
  65. package/dist/components/feedback/Toaster.svelte.d.ts +7 -0
  66. package/dist/components/feedback/Tooltip.svelte +126 -0
  67. package/dist/components/feedback/Tooltip.svelte.d.ts +10 -0
  68. package/dist/components/feedback/toast.svelte.d.ts +27 -0
  69. package/dist/components/feedback/toast.svelte.js +23 -0
  70. package/dist/components/forms/Checkbox.svelte +96 -0
  71. package/dist/components/forms/Checkbox.svelte.d.ts +11 -0
  72. package/dist/components/forms/DatePicker.svelte +372 -0
  73. package/dist/components/forms/DatePicker.svelte.d.ts +21 -0
  74. package/dist/components/forms/Field.svelte +47 -0
  75. package/dist/components/forms/Field.svelte.d.ts +11 -0
  76. package/dist/components/forms/FileUpload.svelte +504 -0
  77. package/dist/components/forms/FileUpload.svelte.d.ts +43 -0
  78. package/dist/components/forms/Input.svelte +93 -0
  79. package/dist/components/forms/Input.svelte.d.ts +9 -0
  80. package/dist/components/forms/Label.svelte +30 -0
  81. package/dist/components/forms/Label.svelte.d.ts +10 -0
  82. package/dist/components/forms/Radio.svelte +80 -0
  83. package/dist/components/forms/Radio.svelte.d.ts +11 -0
  84. package/dist/components/forms/Select.svelte +322 -0
  85. package/dist/components/forms/Select.svelte.d.ts +22 -0
  86. package/dist/components/forms/TagInput.svelte +336 -0
  87. package/dist/components/forms/TagInput.svelte.d.ts +16 -0
  88. package/dist/components/forms/Textarea.svelte +64 -0
  89. package/dist/components/forms/Textarea.svelte.d.ts +9 -0
  90. package/dist/components/landing/Landing.svelte +47 -0
  91. package/dist/components/landing/Landing.svelte.d.ts +8 -0
  92. package/dist/components/landing/LandingFeatures.svelte +92 -0
  93. package/dist/components/landing/LandingFeatures.svelte.d.ts +15 -0
  94. package/dist/components/landing/LandingHero.svelte +92 -0
  95. package/dist/components/landing/LandingHero.svelte.d.ts +13 -0
  96. package/dist/components/landing/LandingRoadmap.svelte +42 -0
  97. package/dist/components/landing/LandingRoadmap.svelte.d.ts +11 -0
  98. package/dist/components/landing/LandingSection.svelte +25 -0
  99. package/dist/components/landing/LandingSection.svelte.d.ts +9 -0
  100. package/dist/components/landing/LandingSectionHeading.svelte +19 -0
  101. package/dist/components/landing/LandingSectionHeading.svelte.d.ts +10 -0
  102. package/dist/components/landing/LandingSteps.svelte +100 -0
  103. package/dist/components/landing/LandingSteps.svelte.d.ts +13 -0
  104. package/dist/components/layout/BracketLink.svelte +41 -0
  105. package/dist/components/layout/BracketLink.svelte.d.ts +9 -0
  106. package/dist/components/layout/Divider.svelte +70 -0
  107. package/dist/components/layout/Divider.svelte.d.ts +9 -0
  108. package/dist/components/layout/Eyebrow.svelte +24 -0
  109. package/dist/components/layout/Eyebrow.svelte.d.ts +8 -0
  110. package/dist/components/layout/PageHeader.svelte +106 -0
  111. package/dist/components/layout/PageHeader.svelte.d.ts +15 -0
  112. package/dist/components/layout/PageSeo.svelte +34 -0
  113. package/dist/components/layout/PageSeo.svelte.d.ts +10 -0
  114. package/dist/components/layout/PageShell.svelte +25 -0
  115. package/dist/components/layout/PageShell.svelte.d.ts +8 -0
  116. package/dist/components/layout/Panel.svelte +105 -0
  117. package/dist/components/layout/Panel.svelte.d.ts +12 -0
  118. package/dist/components/layout/Prose.svelte +101 -0
  119. package/dist/components/layout/Prose.svelte.d.ts +7 -0
  120. package/dist/components/layout/RuleCard.svelte +63 -0
  121. package/dist/components/layout/RuleCard.svelte.d.ts +13 -0
  122. package/dist/components/layout/SectionHeading.svelte +57 -0
  123. package/dist/components/layout/SectionHeading.svelte.d.ts +10 -0
  124. package/dist/components/layout/StatTile.svelte +76 -0
  125. package/dist/components/layout/StatTile.svelte.d.ts +12 -0
  126. package/dist/components/layout/TerminalWindow.svelte +81 -0
  127. package/dist/components/layout/TerminalWindow.svelte.d.ts +9 -0
  128. package/dist/components/layout/Wordmark.svelte +26 -0
  129. package/dist/components/layout/Wordmark.svelte.d.ts +8 -0
  130. package/dist/components/list/List.svelte +40 -0
  131. package/dist/components/list/List.svelte.d.ts +13 -0
  132. package/dist/components/list/ListItem.svelte +81 -0
  133. package/dist/components/list/ListItem.svelte.d.ts +13 -0
  134. package/dist/components/marketing/MarketingShell.svelte +170 -0
  135. package/dist/components/marketing/MarketingShell.svelte.d.ts +23 -0
  136. package/dist/components/marketing/MarketingShellFooter.svelte +92 -0
  137. package/dist/components/marketing/MarketingShellFooter.svelte.d.ts +14 -0
  138. package/dist/components/navigation/Accordion.svelte +110 -0
  139. package/dist/components/navigation/Accordion.svelte.d.ts +15 -0
  140. package/dist/components/navigation/Carousel.svelte +115 -0
  141. package/dist/components/navigation/Carousel.svelte.d.ts +12 -0
  142. package/dist/components/navigation/InstructionStep.svelte +115 -0
  143. package/dist/components/navigation/InstructionStep.svelte.d.ts +10 -0
  144. package/dist/components/navigation/InstructionSteps.svelte +39 -0
  145. package/dist/components/navigation/InstructionSteps.svelte.d.ts +8 -0
  146. package/dist/components/navigation/Nav.svelte +102 -0
  147. package/dist/components/navigation/Nav.svelte.d.ts +14 -0
  148. package/dist/components/navigation/Stepper.svelte +112 -0
  149. package/dist/components/navigation/Stepper.svelte.d.ts +12 -0
  150. package/dist/components/navigation/TabCard.svelte +62 -0
  151. package/dist/components/navigation/TabCard.svelte.d.ts +10 -0
  152. package/dist/components/navigation/Tabs.svelte +83 -0
  153. package/dist/components/navigation/Tabs.svelte.d.ts +12 -0
  154. package/dist/components/navigation/ThemeToggle.svelte +118 -0
  155. package/dist/components/navigation/ThemeToggle.svelte.d.ts +20 -0
  156. package/dist/components/overlay/Dialog.svelte +200 -0
  157. package/dist/components/overlay/Dialog.svelte.d.ts +19 -0
  158. package/dist/components/overlay/DialogActions.svelte +50 -0
  159. package/dist/components/overlay/DialogActions.svelte.d.ts +9 -0
  160. package/dist/components/overlay/Dropdown.svelte +110 -0
  161. package/dist/components/overlay/Dropdown.svelte.d.ts +10 -0
  162. package/dist/components/overlay/FloatingActionPill.svelte +96 -0
  163. package/dist/components/overlay/FloatingActionPill.svelte.d.ts +14 -0
  164. package/dist/components/overlay/Sidebar.svelte +258 -0
  165. package/dist/components/overlay/Sidebar.svelte.d.ts +18 -0
  166. package/dist/components/table/Table.svelte +550 -0
  167. package/dist/components/table/Table.svelte.d.ts +42 -0
  168. package/dist/components/timeline/Timeline.svelte +25 -0
  169. package/dist/components/timeline/Timeline.svelte.d.ts +8 -0
  170. package/dist/components/timeline/TimelineItem.svelte +220 -0
  171. package/dist/components/timeline/TimelineItem.svelte.d.ts +18 -0
  172. package/dist/index.d.ts +156 -0
  173. package/dist/index.js +149 -0
  174. package/dist/theme/theme.css +348 -0
  175. package/package.json +52 -0
@@ -0,0 +1,42 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ let {
5
+ items,
6
+ class: className = ''
7
+ }: {
8
+ // icon is a Snippet (e.g. `icon: () => <Icon class="..." />`). Don't use
9
+ // a Component directly: there's no way to distinguish snippet from component in
10
+ // Svelte 5 runtime (would break on SSR).
11
+ items: Array<{ icon: Snippet; label: string }>;
12
+ class?: string;
13
+ } = $props();
14
+ </script>
15
+
16
+ <div class="twui-landing-roadmap {className}">
17
+ {#each items as item (item.label)}
18
+ <span class="twui-landing-roadmap-item">
19
+ {@render item.icon()}
20
+ {item.label}
21
+ </span>
22
+ {/each}
23
+ </div>
24
+
25
+ <style>
26
+ .twui-landing-roadmap {
27
+ display: flex;
28
+ flex-wrap: wrap;
29
+ gap: 8px;
30
+ }
31
+
32
+ .twui-landing-roadmap-item {
33
+ display: inline-flex;
34
+ align-items: center;
35
+ gap: 6px;
36
+ padding: 4px 10px;
37
+ border: 1px solid var(--twui-rule);
38
+ font-family: var(--twui-font-mono);
39
+ font-size: 12px;
40
+ color: var(--twui-ink-soft);
41
+ }
42
+ </style>
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ items: Array<{
4
+ icon: Snippet;
5
+ label: string;
6
+ }>;
7
+ class?: string;
8
+ };
9
+ declare const LandingRoadmap: import("svelte").Component<$$ComponentProps, {}, "">;
10
+ type LandingRoadmap = ReturnType<typeof LandingRoadmap>;
11
+ export default LandingRoadmap;
@@ -0,0 +1,25 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ let {
5
+ id,
6
+ children,
7
+ class: className = ''
8
+ }: {
9
+ id?: string;
10
+ children?: Snippet;
11
+ class?: string;
12
+ } = $props();
13
+ </script>
14
+
15
+ <section {id} class="twui-landing-section {className}">
16
+ {@render children?.()}
17
+ </section>
18
+
19
+ <style>
20
+ .twui-landing-section {
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: 2rem;
24
+ }
25
+ </style>
@@ -0,0 +1,9 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ id?: string;
4
+ children?: Snippet;
5
+ class?: string;
6
+ };
7
+ declare const LandingSection: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type LandingSection = ReturnType<typeof LandingSection>;
9
+ export default LandingSection;
@@ -0,0 +1,19 @@
1
+ <script lang="ts">
2
+ import SectionHeading from '../layout/SectionHeading.svelte';
3
+
4
+ let {
5
+ eyebrow,
6
+ title,
7
+ lead,
8
+ justify = false,
9
+ class: className = ''
10
+ }: {
11
+ eyebrow: string;
12
+ title: string;
13
+ lead?: string;
14
+ justify?: boolean;
15
+ class?: string;
16
+ } = $props();
17
+ </script>
18
+
19
+ <SectionHeading {eyebrow} {title} {lead} {justify} class={className} />
@@ -0,0 +1,10 @@
1
+ type $$ComponentProps = {
2
+ eyebrow: string;
3
+ title: string;
4
+ lead?: string;
5
+ justify?: boolean;
6
+ class?: string;
7
+ };
8
+ declare const LandingSectionHeading: import("svelte").Component<$$ComponentProps, {}, "">;
9
+ type LandingSectionHeading = ReturnType<typeof LandingSectionHeading>;
10
+ export default LandingSectionHeading;
@@ -0,0 +1,100 @@
1
+ <script lang="ts">
2
+ import Card from '../card/Card.svelte';
3
+ import CardContent from '../card/CardContent.svelte';
4
+
5
+ let {
6
+ steps,
7
+ justify = false,
8
+ class: className = ''
9
+ }: {
10
+ steps: Array<{ number: string; color: string; title: string; body: string }>;
11
+ justify?: boolean;
12
+ class?: string;
13
+ } = $props();
14
+ </script>
15
+
16
+ <ol class="twui-landing-steps {className}">
17
+ {#each steps as step (step.number)}
18
+ <li class="twui-landing-step">
19
+ <Card>
20
+ <CardContent>
21
+ <div
22
+ class="twui-landing-step-number"
23
+ style="background:color-mix(in srgb, {step.color} 12%, transparent); color:{step.color}"
24
+ >
25
+ {step.number}
26
+ </div>
27
+ <h3 class="twui-landing-step-title">{step.title}</h3>
28
+ <p class="twui-landing-step-body {justify ? 'twui-landing-step-body-justify' : ''}">{step.body}</p>
29
+ </CardContent>
30
+ </Card>
31
+ </li>
32
+ {/each}
33
+ </ol>
34
+
35
+ <style>
36
+ .twui-landing-steps {
37
+ display: grid;
38
+ grid-template-columns: 1fr;
39
+ gap: 16px;
40
+ margin: 0;
41
+ padding: 0;
42
+ list-style: none;
43
+ }
44
+
45
+ .twui-landing-step {
46
+ display: flex;
47
+ min-width: 0;
48
+ }
49
+
50
+ .twui-landing-step > :global(.twui-card) {
51
+ flex: 1;
52
+ }
53
+
54
+ .twui-landing-step-number {
55
+ display: flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ width: 36px;
59
+ height: 36px;
60
+ margin-bottom: 12px;
61
+ border-radius: 8px;
62
+ font-family: var(--twui-font-mono);
63
+ font-size: 16px;
64
+ font-weight: 700;
65
+ line-height: 1;
66
+ }
67
+
68
+ .twui-landing-step-title {
69
+ margin: 0;
70
+ font-family: var(--twui-font-mono);
71
+ font-size: 14px;
72
+ font-weight: 600;
73
+ color: var(--twui-ink);
74
+ }
75
+
76
+ .twui-landing-step-body {
77
+ margin: 6px 0 0;
78
+ font-family: var(--twui-font-serif, 'Newsreader', Georgia, serif);
79
+ font-size: 15px;
80
+ line-height: 1.55;
81
+ color: var(--twui-ink-soft);
82
+ }
83
+
84
+ .twui-landing-step-body-justify {
85
+ text-align: justify;
86
+ text-justify: inter-word;
87
+ }
88
+
89
+ @media (min-width: 640px) {
90
+ .twui-landing-steps {
91
+ grid-template-columns: repeat(2, 1fr);
92
+ }
93
+ }
94
+
95
+ @media (min-width: 1024px) {
96
+ .twui-landing-steps {
97
+ grid-template-columns: repeat(4, 1fr);
98
+ }
99
+ }
100
+ </style>
@@ -0,0 +1,13 @@
1
+ type $$ComponentProps = {
2
+ steps: Array<{
3
+ number: string;
4
+ color: string;
5
+ title: string;
6
+ body: string;
7
+ }>;
8
+ justify?: boolean;
9
+ class?: string;
10
+ };
11
+ declare const LandingSteps: import("svelte").Component<$$ComponentProps, {}, "">;
12
+ type LandingSteps = ReturnType<typeof LandingSteps>;
13
+ export default LandingSteps;
@@ -0,0 +1,41 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAnchorAttributes } from 'svelte/elements';
4
+
5
+ let {
6
+ children,
7
+ class: className = '',
8
+ ...rest
9
+ }: {
10
+ children: Snippet;
11
+ class?: string;
12
+ } & HTMLAnchorAttributes = $props();
13
+ </script>
14
+
15
+ <a class="twui-bracketlink {className}" {...rest}>
16
+ <span class="twui-bracketlink-bracket" aria-hidden="true">[</span>{@render children()}<span
17
+ class="twui-bracketlink-bracket"
18
+ aria-hidden="true"
19
+ >]</span
20
+ >
21
+ </a>
22
+
23
+ <style>
24
+ .twui-bracketlink {
25
+ font-family: var(--twui-font-mono);
26
+ font-size: 14px;
27
+ color: var(--twui-ink);
28
+ text-decoration: none;
29
+ transition: color 0.15s ease;
30
+ }
31
+
32
+ .twui-bracketlink-bracket {
33
+ color: var(--twui-ink-faint);
34
+ transition: color 0.15s ease;
35
+ }
36
+
37
+ .twui-bracketlink:hover,
38
+ .twui-bracketlink:hover .twui-bracketlink-bracket {
39
+ color: var(--twui-accent);
40
+ }
41
+ </style>
@@ -0,0 +1,9 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAnchorAttributes } from 'svelte/elements';
3
+ type $$ComponentProps = {
4
+ children: Snippet;
5
+ class?: string;
6
+ } & HTMLAnchorAttributes;
7
+ declare const BracketLink: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type BracketLink = ReturnType<typeof BracketLink>;
9
+ export default BracketLink;
@@ -0,0 +1,70 @@
1
+ <script lang="ts">
2
+ let {
3
+ layout = 'horizontal',
4
+ type = 'solid',
5
+ label,
6
+ class: className = ''
7
+ }: {
8
+ layout?: 'horizontal' | 'vertical';
9
+ type?: 'solid' | 'dashed';
10
+ label?: string;
11
+ class?: string;
12
+ } = $props();
13
+ </script>
14
+
15
+ {#if layout === 'vertical'}
16
+ <div class="twui-divider twui-divider-vertical twui-divider-{type} {className}" aria-hidden="true"></div>
17
+ {:else if label}
18
+ <div class="twui-divider twui-divider-with-label {className}" role="separator">
19
+ <span class="twui-divider-line twui-divider-{type}" aria-hidden="true"></span>
20
+ <span class="twui-divider-label-text">{label}</span>
21
+ <span class="twui-divider-line twui-divider-{type}" aria-hidden="true"></span>
22
+ </div>
23
+ {:else}
24
+ <div class="twui-divider twui-divider-{type} {className}" role="separator" aria-hidden="true"></div>
25
+ {/if}
26
+
27
+ <style>
28
+ .twui-divider {
29
+ border-top: 1px solid var(--twui-rule);
30
+ }
31
+
32
+ .twui-divider-dashed {
33
+ border-top-style: dashed;
34
+ }
35
+
36
+ .twui-divider-vertical {
37
+ display: inline-block;
38
+ height: 1em;
39
+ margin: 0 8px;
40
+ border-top: none;
41
+ border-left: 1px solid var(--twui-rule);
42
+ vertical-align: middle;
43
+ }
44
+
45
+ .twui-divider-vertical.twui-divider-dashed {
46
+ border-left-style: dashed;
47
+ }
48
+
49
+ .twui-divider-with-label {
50
+ display: flex;
51
+ align-items: center;
52
+ gap: 12px;
53
+ border-top: none;
54
+ }
55
+
56
+ .twui-divider-line {
57
+ flex: 1;
58
+ border-top: 1px solid var(--twui-rule);
59
+ }
60
+
61
+ .twui-divider-line.twui-divider-dashed {
62
+ border-top-style: dashed;
63
+ }
64
+
65
+ .twui-divider-label-text {
66
+ font-family: var(--twui-font-mono);
67
+ font-size: 12px;
68
+ color: var(--twui-ink-faint);
69
+ }
70
+ </style>
@@ -0,0 +1,9 @@
1
+ type $$ComponentProps = {
2
+ layout?: 'horizontal' | 'vertical';
3
+ type?: 'solid' | 'dashed';
4
+ label?: string;
5
+ class?: string;
6
+ };
7
+ declare const Divider: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type Divider = ReturnType<typeof Divider>;
9
+ export default Divider;
@@ -0,0 +1,24 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ let {
5
+ children,
6
+ class: className = ''
7
+ }: {
8
+ children: Snippet;
9
+ class?: string;
10
+ } = $props();
11
+ </script>
12
+
13
+ <span class="twui-eyebrow {className}">
14
+ {@render children()}
15
+ </span>
16
+
17
+ <style>
18
+ .twui-eyebrow {
19
+ font-family: var(--twui-font-mono);
20
+ font-size: 12px;
21
+ text-transform: uppercase;
22
+ color: var(--twui-ink-faint);
23
+ }
24
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ children: Snippet;
4
+ class?: string;
5
+ };
6
+ declare const Eyebrow: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type Eyebrow = ReturnType<typeof Eyebrow>;
8
+ export default Eyebrow;
@@ -0,0 +1,106 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import Button from '../actions/Button.svelte';
4
+
5
+ let {
6
+ title,
7
+ subtitle,
8
+ prefix,
9
+ action,
10
+ back,
11
+ class: className = ''
12
+ }: {
13
+ title: string;
14
+ subtitle?: Snippet | string;
15
+ prefix?: Snippet;
16
+ action?: Snippet;
17
+ back?: { label: string; href: string };
18
+ class?: string;
19
+ } = $props();
20
+
21
+ const subtitleSnippet = $derived(typeof subtitle === 'function' ? (subtitle as Snippet) : null);
22
+ </script>
23
+
24
+ <header class="twui-page-header {className}">
25
+ <div class="twui-page-header-text">
26
+ <h1 class="twui-page-header-title">{title}</h1>
27
+ {#if subtitle}
28
+ <p class="twui-page-header-subtitle">
29
+ {#if prefix}
30
+ {@render prefix()}
31
+ {:else}
32
+ <span class="twui-page-header-prefix">//</span>
33
+ {/if}
34
+ {#if subtitleSnippet}
35
+ {@render subtitleSnippet()}
36
+ {:else}
37
+ {subtitle}
38
+ {/if}
39
+ </p>
40
+ {/if}
41
+ </div>
42
+ {#if action || back}
43
+ <div class="twui-page-header-action">
44
+ {#if action}
45
+ {@render action()}
46
+ {/if}
47
+ {#if back}
48
+ <Button href={back.href} variant="ghost" size="sm" class="-ml-2">
49
+ <svg
50
+ xmlns="http://www.w3.org/2000/svg"
51
+ viewBox="0 0 24 24"
52
+ fill="none"
53
+ stroke="currentColor"
54
+ stroke-width="2"
55
+ stroke-linecap="round"
56
+ stroke-linejoin="round"
57
+ class="size-4"
58
+ aria-hidden="true"
59
+ >
60
+ <path d="m12 19-7-7 7-7" />
61
+ <path d="M19 12H5" />
62
+ </svg>
63
+ {back.label}
64
+ </Button>
65
+ {/if}
66
+ </div>
67
+ {/if}
68
+ </header>
69
+
70
+ <style>
71
+ .twui-page-header {
72
+ display: flex;
73
+ align-items: baseline;
74
+ justify-content: space-between;
75
+ gap: 16px;
76
+ }
77
+
78
+ .twui-page-header-text {
79
+ display: flex;
80
+ flex-direction: column;
81
+ gap: 2px;
82
+ }
83
+
84
+ .twui-page-header-title {
85
+ margin: 0;
86
+ font-family: var(--twui-font-mono);
87
+ font-size: 1.5rem;
88
+ font-weight: 700;
89
+ color: var(--twui-ink);
90
+ }
91
+
92
+ .twui-page-header-subtitle {
93
+ margin: 0;
94
+ font-family: var(--twui-font-mono);
95
+ font-size: 0.875rem;
96
+ color: var(--twui-ink-soft);
97
+ }
98
+
99
+ .twui-page-header-prefix {
100
+ color: var(--twui-ink-faint);
101
+ }
102
+
103
+ .twui-page-header-action {
104
+ flex-shrink: 0;
105
+ }
106
+ </style>
@@ -0,0 +1,15 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ title: string;
4
+ subtitle?: Snippet | string;
5
+ prefix?: Snippet;
6
+ action?: Snippet;
7
+ back?: {
8
+ label: string;
9
+ href: string;
10
+ };
11
+ class?: string;
12
+ };
13
+ declare const PageHeader: import("svelte").Component<$$ComponentProps, {}, "">;
14
+ type PageHeader = ReturnType<typeof PageHeader>;
15
+ export default PageHeader;
@@ -0,0 +1,34 @@
1
+ <script lang="ts">
2
+ import { page } from '$app/state';
3
+
4
+ let {
5
+ siteName,
6
+ title,
7
+ description,
8
+ type = 'website',
9
+ locale = 'pt_BR'
10
+ }: {
11
+ siteName: string;
12
+ title: string;
13
+ description: string;
14
+ type?: 'website' | 'article';
15
+ locale?: string;
16
+ } = $props();
17
+
18
+ const canonical = $derived(`${page.url.origin}${page.url.pathname}`);
19
+ </script>
20
+
21
+ <svelte:head>
22
+ <title>{title}</title>
23
+ <meta name="description" content={description} />
24
+ <link rel="canonical" href={canonical} />
25
+ <meta property="og:type" content={type} />
26
+ <meta property="og:site_name" content={siteName} />
27
+ <meta property="og:locale" content={locale} />
28
+ <meta property="og:title" content={title} />
29
+ <meta property="og:description" content={description} />
30
+ <meta property="og:url" content={canonical} />
31
+ <meta name="twitter:card" content="summary" />
32
+ <meta name="twitter:title" content={title} />
33
+ <meta name="twitter:description" content={description} />
34
+ </svelte:head>
@@ -0,0 +1,10 @@
1
+ type $$ComponentProps = {
2
+ siteName: string;
3
+ title: string;
4
+ description: string;
5
+ type?: 'website' | 'article';
6
+ locale?: string;
7
+ };
8
+ declare const PageSeo: import("svelte").Component<$$ComponentProps, {}, "">;
9
+ type PageSeo = ReturnType<typeof PageSeo>;
10
+ export default PageSeo;
@@ -0,0 +1,25 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ let {
5
+ children,
6
+ class: className = ''
7
+ }: {
8
+ children: Snippet;
9
+ class?: string;
10
+ } = $props();
11
+ </script>
12
+
13
+ <div class="twui-page-shell {className}">
14
+ {@render children()}
15
+ </div>
16
+
17
+ <style>
18
+ .twui-page-shell {
19
+ display: flex;
20
+ flex-direction: column;
21
+ gap: 20px;
22
+ padding: 56px 24px 32px;
23
+ width: 100%;
24
+ }
25
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ children: Snippet;
4
+ class?: string;
5
+ };
6
+ declare const PageShell: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type PageShell = ReturnType<typeof PageShell>;
8
+ export default PageShell;