@purestack/ts-components 1.1.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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -0
  3. package/dist/ts-components.d.mts +1662 -0
  4. package/dist/ts-components.d.mts.map +1 -0
  5. package/dist/ts-components.mjs +9200 -0
  6. package/dist/ts-components.mjs.map +1 -0
  7. package/package.json +130 -0
  8. package/src/defineComponents.ts +87 -0
  9. package/src/index.ts +270 -0
  10. package/src/registerStyles.ts +63 -0
  11. package/src/standard/alertBox/alertBox.ts +64 -0
  12. package/src/standard/autoId.ts +25 -0
  13. package/src/standard/badge/badge.ts +41 -0
  14. package/src/standard/badge/badgeStyle.ts +21 -0
  15. package/src/standard/barChart/barChart.ts +338 -0
  16. package/src/standard/barChart/barChartStyle.ts +81 -0
  17. package/src/standard/btn/btn.ts +191 -0
  18. package/src/standard/btn/btnStyle.ts +59 -0
  19. package/src/standard/btnGroup/btnGroup.ts +208 -0
  20. package/src/standard/btnGroup/btnGroupStyle.ts +85 -0
  21. package/src/standard/chart/cartesianChart.ts +99 -0
  22. package/src/standard/chart/chartDefaults.ts +25 -0
  23. package/src/standard/chart/chartUtils.ts +84 -0
  24. package/src/standard/classicLogo/classicLogo.ts +429 -0
  25. package/src/standard/classicLogo/classicLogoStyle.ts +292 -0
  26. package/src/standard/componentVariant.ts +153 -0
  27. package/src/standard/composer/composer.ts +1035 -0
  28. package/src/standard/composer/composerCanvasInitialStyle.ts +225 -0
  29. package/src/standard/composer/composerCanvasRevertStyle.ts +14 -0
  30. package/src/standard/composer/composerCanvasSharedStyle.ts +60 -0
  31. package/src/standard/composer/composerCanvasStyleTypes.ts +8 -0
  32. package/src/standard/composer/composerCanvasThemeStyle.ts +53 -0
  33. package/src/standard/composer/composerStyle.ts +156 -0
  34. package/src/standard/composer/emailHtmlPolicy.ts +474 -0
  35. package/src/standard/consent/consent.ts +173 -0
  36. package/src/standard/consent/consentStyle.ts +44 -0
  37. package/src/standard/contactForm/contactForm.ts +135 -0
  38. package/src/standard/contactForm/contactFormStyle.ts +116 -0
  39. package/src/standard/doughnutChart/doughnutChart.ts +527 -0
  40. package/src/standard/doughnutChart/doughnutChartStyle.ts +64 -0
  41. package/src/standard/dropFiles/dropFiles.ts +480 -0
  42. package/src/standard/dropFiles/dropFilesStyle.ts +171 -0
  43. package/src/standard/expandablePanel/expandablePanel.ts +106 -0
  44. package/src/standard/expandablePanel/expandablePanelStyle.ts +56 -0
  45. package/src/standard/flex/flex.ts +269 -0
  46. package/src/standard/flex/flexStyle.ts +556 -0
  47. package/src/standard/footer/footer.ts +93 -0
  48. package/src/standard/footer/footerStyle.ts +39 -0
  49. package/src/standard/form/autoCompleteInput.ts +567 -0
  50. package/src/standard/form/form.ts +205 -0
  51. package/src/standard/form/formCheck.ts +96 -0
  52. package/src/standard/form/formInputField.ts +184 -0
  53. package/src/standard/form/formSelectField.ts +152 -0
  54. package/src/standard/form/formStyle.ts +585 -0
  55. package/src/standard/form/multiAutoCompleteInput.ts +880 -0
  56. package/src/standard/grid/grid.ts +177 -0
  57. package/src/standard/grid/gridStyle.ts +56 -0
  58. package/src/standard/icon/icon.ts +96 -0
  59. package/src/standard/icon/iconStyle.ts +50 -0
  60. package/src/standard/landing/codeShowcase.ts +54 -0
  61. package/src/standard/landing/comparisonColumn.ts +30 -0
  62. package/src/standard/landing/comparisonFeature.ts +22 -0
  63. package/src/standard/landing/comparisonTable.ts +38 -0
  64. package/src/standard/landing/ctaSection.ts +59 -0
  65. package/src/standard/landing/featureCard.ts +41 -0
  66. package/src/standard/landing/landing.ts +52 -0
  67. package/src/standard/landing/landingBand.ts +217 -0
  68. package/src/standard/landing/landingSection.ts +43 -0
  69. package/src/standard/landing/landingTypes.ts +141 -0
  70. package/src/standard/landing/metricItem.ts +25 -0
  71. package/src/standard/landing/metricStrip.ts +20 -0
  72. package/src/standard/lineChart/lineChart.ts +462 -0
  73. package/src/standard/lineChart/lineChartStyle.ts +91 -0
  74. package/src/standard/logo/logo.ts +192 -0
  75. package/src/standard/logo/logoStyle.ts +164 -0
  76. package/src/standard/modal/modal.ts +171 -0
  77. package/src/standard/modal/modalStore.ts +154 -0
  78. package/src/standard/modal/modalStyle.ts +190 -0
  79. package/src/standard/navMenu/navMenu.ts +278 -0
  80. package/src/standard/navMenu/navMenuStyle.ts +323 -0
  81. package/src/standard/pageLinks/pageLinks.ts +90 -0
  82. package/src/standard/pageScript/pageScript.ts +155 -0
  83. package/src/standard/pageToc/pageToc.ts +154 -0
  84. package/src/standard/pageToc/pageTocStyle.ts +372 -0
  85. package/src/standard/panel/panel.ts +55 -0
  86. package/src/standard/panel/panelStyle.ts +15 -0
  87. package/src/standard/pricing/pricing.ts +146 -0
  88. package/src/standard/searchBox/searchBox.ts +54 -0
  89. package/src/standard/searchBox/searchBoxStyle.ts +180 -0
  90. package/src/standard/sectionHeader/sectionHeader.ts +99 -0
  91. package/src/standard/signIn/signIn.ts +167 -0
  92. package/src/standard/signIn/signInStyle.ts +70 -0
  93. package/src/standard/tabs/tabs.ts +193 -0
  94. package/src/standard/tabs/tabsStyle.ts +231 -0
  95. package/src/standard/themeToggle/themeToggle.ts +33 -0
  96. package/src/standard/themeToggle/themeToggleStyle.ts +88 -0
  97. package/src/standard/toast/toastHost.ts +42 -0
  98. package/src/standard/toast/toastStore.ts +50 -0
  99. package/src/standard/topBar/topBar.ts +101 -0
  100. package/src/standard/topBar/topBarStyle.ts +169 -0
  101. package/src/standard/virtualList/variableVirtualTable.ts +371 -0
  102. package/src/standard/virtualList/virtualList.ts +423 -0
  103. package/src/standard/virtualList/virtualListStyle.ts +34 -0
  104. package/src/standard/virtualList/virtualTable.ts +179 -0
  105. package/src/standard/virtualList/virtualTableStyle.ts +24 -0
  106. package/tsconfig.json +23 -0
@@ -0,0 +1,153 @@
1
+ import { getSemanticToneClass, type SemanticTone } from '@purestack/ts-style'
2
+ import { type RefOrValue, unref } from 'regor'
3
+
4
+ export type ComponentVariant =
5
+ | 'none'
6
+ | 'solid'
7
+ | 'surface'
8
+ | 'surfaceAlt'
9
+ | 'spotlight'
10
+ | 'glass'
11
+ | 'flat'
12
+ | 'flatAlt'
13
+ | 'flatSolid'
14
+ | 'outlineFill'
15
+ | 'outline'
16
+ | 'subtle'
17
+ | 'subtleBtn'
18
+ | 'link'
19
+ | 'sheen'
20
+ | 'underline'
21
+ | 'rail'
22
+ | 'bracket'
23
+
24
+ export type ComponentVariantMode = 'stateful' | 'stateless'
25
+
26
+ export const DEFAULT_COMPONENT_VARIANT: ComponentVariant = 'solid'
27
+ export const DEFAULT_COMPONENT_VARIANT_MODE: ComponentVariantMode = 'stateful'
28
+
29
+ export interface ComponentClassProps {
30
+ tone?: RefOrValue<SemanticTone>
31
+ variant?: RefOrValue<ComponentVariant>
32
+ variantMode?: RefOrValue<ComponentVariantMode>
33
+ }
34
+
35
+ export interface ResolveComponentClassesOptions {
36
+ defaultVariant?: ComponentVariant
37
+ defaultVariantMode?: ComponentVariantMode
38
+ classes?: Array<RefOrValue<string | undefined | false>>
39
+ }
40
+
41
+ const STATELESS_COMPONENT_VARIANT_CLASSES: Record<ComponentVariant, string> = {
42
+ none: '',
43
+ solid: 'b-1 rounded-md tone-fill-button tone-border-button tone-text-button',
44
+ surface:
45
+ 'b-1 rounded-md tone-fill-surface tone-border-surface tone-text-surface',
46
+ surfaceAlt:
47
+ 'b-1 rounded-md tone-fill-surface-alt tone-border-surface-alt tone-text-surface-alt',
48
+ spotlight:
49
+ 'b-1 rounded-md tone-fill-spotlight tone-border-surface-alt tone-text-surface-alt',
50
+ glass:
51
+ 'b-1 rounded-md tone-fill-glass tone-border-surface-alt tone-text-surface-alt',
52
+ flat: 'b-1 rounded-md tone-fill-flat tone-border-surface tone-text-surface',
53
+ flatAlt:
54
+ 'b-1 rounded-md tone-fill-flat-alt tone-border-surface-alt tone-text-surface-alt',
55
+ flatSolid:
56
+ 'b-1 rounded-md tone-fill-flat-solid tone-border-button tone-text-button',
57
+ outlineFill: 'b-2 rounded-md tone-border-button tone-text',
58
+ outline: 'b-2 rounded-md tone-text',
59
+ subtle: 'b-0 rounded-md tone-text',
60
+ subtleBtn: 'b-0 rounded-md tone-text',
61
+ link: 'tone-text',
62
+ sheen: 'tone-text-bg-button',
63
+ underline: 'tone-text',
64
+ rail: 'bl-1 inset-size-4 pl-4 pr-3 tone-border-button tone-text',
65
+ bracket: 'tone-text',
66
+ }
67
+
68
+ const STATEFUL_COMPONENT_VARIANT_CLASSES = {
69
+ spotlight:
70
+ 'tone-fill-spotlight-hover tone-fill-spotlight-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',
71
+ glass:
72
+ 'tone-fill-glass-hover tone-fill-glass-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',
73
+ flat: 'tone-fill-flat-hover tone-fill-flat-active tone-border-surface-hover tone-border-surface-active tone-text-surface-hover tone-text-surface-active',
74
+ flatAlt:
75
+ 'tone-fill-flat-alt-hover tone-fill-flat-alt-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',
76
+ flatSolid:
77
+ 'tone-fill-flat-solid-hover tone-fill-flat-solid-active tone-border-button-hover tone-border-button-active tone-text-button-hover tone-text-button-active',
78
+ solid:
79
+ 'tone-fill-button-hover tone-fill-button-active tone-border-button-hover tone-border-button-active tone-text-button-hover tone-text-button-active',
80
+ surface:
81
+ 'tone-fill-surface-hover tone-fill-surface-active tone-border-surface-hover tone-border-surface-active tone-text-surface-hover tone-text-surface-active',
82
+ surfaceAlt:
83
+ 'tone-fill-surface-alt-hover tone-fill-surface-alt-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',
84
+ outlineFill:
85
+ 'tone-fill-button-hover tone-text-button-hover tone-fill-button-active tone-text-button-active',
86
+ outline:
87
+ 'b-2-hover tone-border-button-hover tone-border-button-active tone-fill-button-active tone-text-button-active',
88
+ subtle:
89
+ 'tone-fill-surface-hover tone-fill-surface-active tone-text-surface-hover tone-text-surface-active',
90
+ subtleBtn:
91
+ 'tone-fill-button-hover tone-fill-button-active tone-text-button-hover tone-text-button-active',
92
+ link: 'underline-hover',
93
+ sheen: 'tone-text-bg-button-hover tone-text-bg-button-active',
94
+ underline: 'tone-inset-b-hover tone-inset-b-active',
95
+ rail: 'tone-inset-l-hover tone-fill-active tone-text-button-active',
96
+ bracket:
97
+ 'tone-inset-y-hover tone-inset-y-active tone-fill-active tone-text-button-active',
98
+ } satisfies Partial<Record<ComponentVariant, string>>
99
+
100
+ const COMPONENT_VARIANT_CLASSES = mergeComponentVariantClasses(
101
+ STATELESS_COMPONENT_VARIANT_CLASSES,
102
+ STATEFUL_COMPONENT_VARIANT_CLASSES,
103
+ )
104
+
105
+ const COMPONENT_VARIANT_CLASS_MODES: Record<
106
+ ComponentVariantMode,
107
+ Record<ComponentVariant, string>
108
+ > = {
109
+ stateful: COMPONENT_VARIANT_CLASSES,
110
+ stateless: STATELESS_COMPONENT_VARIANT_CLASSES,
111
+ }
112
+
113
+ function mergeComponentVariantClasses(
114
+ base: Record<ComponentVariant, string>,
115
+ additions: Partial<Record<ComponentVariant, string>>,
116
+ ): Record<ComponentVariant, string> {
117
+ const merged = {} as Record<ComponentVariant, string>
118
+ for (const variant of Object.keys(base) as ComponentVariant[]) {
119
+ merged[variant] = [base[variant], additions[variant]]
120
+ .filter(Boolean)
121
+ .join(' ')
122
+ }
123
+ return merged
124
+ }
125
+
126
+ function resolveComponentVariantClassName(
127
+ variant: RefOrValue<ComponentVariant> | undefined,
128
+ defaultVariant: ComponentVariant = DEFAULT_COMPONENT_VARIANT,
129
+ variantMode:
130
+ | RefOrValue<ComponentVariantMode>
131
+ | undefined = DEFAULT_COMPONENT_VARIANT_MODE,
132
+ ) {
133
+ const resolvedVariant = unref(variant) || defaultVariant
134
+ const resolvedMode = unref(variantMode) || DEFAULT_COMPONENT_VARIANT_MODE
135
+ return COMPONENT_VARIANT_CLASS_MODES[resolvedMode][resolvedVariant]
136
+ }
137
+
138
+ export function resolveComponentClasses(
139
+ props: ComponentClassProps,
140
+ options: ResolveComponentClassesOptions = {},
141
+ ) {
142
+ return [
143
+ resolveComponentVariantClassName(
144
+ props.variant,
145
+ options.defaultVariant,
146
+ props.variantMode || options.defaultVariantMode,
147
+ ),
148
+ getSemanticToneClass(unref(props.tone)),
149
+ ...(options.classes || []).map(unref),
150
+ ]
151
+ .filter(Boolean)
152
+ .join(' ')
153
+ }