@orange-halo/components 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 (138) hide show
  1. package/custom-elements.json +186 -0
  2. package/dist/base.d.ts +30 -0
  3. package/dist/base.d.ts.map +1 -0
  4. package/dist/base.js +78 -0
  5. package/dist/base.js.map +1 -0
  6. package/dist/index.d.ts +83 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +72 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/oh-accordion.d.ts +47 -0
  11. package/dist/oh-accordion.d.ts.map +1 -0
  12. package/dist/oh-accordion.js +387 -0
  13. package/dist/oh-accordion.js.map +1 -0
  14. package/dist/oh-alert.d.ts +48 -0
  15. package/dist/oh-alert.d.ts.map +1 -0
  16. package/dist/oh-alert.js +343 -0
  17. package/dist/oh-alert.js.map +1 -0
  18. package/dist/oh-badge.d.ts +38 -0
  19. package/dist/oh-badge.d.ts.map +1 -0
  20. package/dist/oh-badge.js +176 -0
  21. package/dist/oh-badge.js.map +1 -0
  22. package/dist/oh-breadcrumb.d.ts +39 -0
  23. package/dist/oh-breadcrumb.d.ts.map +1 -0
  24. package/dist/oh-breadcrumb.js +277 -0
  25. package/dist/oh-breadcrumb.js.map +1 -0
  26. package/dist/oh-button.d.ts +62 -0
  27. package/dist/oh-button.d.ts.map +1 -0
  28. package/dist/oh-button.figma.d.ts +2 -0
  29. package/dist/oh-button.figma.d.ts.map +1 -0
  30. package/dist/oh-button.figma.js +20 -0
  31. package/dist/oh-button.figma.js.map +1 -0
  32. package/dist/oh-button.js +490 -0
  33. package/dist/oh-button.js.map +1 -0
  34. package/dist/oh-card.d.ts +44 -0
  35. package/dist/oh-card.d.ts.map +1 -0
  36. package/dist/oh-card.js +340 -0
  37. package/dist/oh-card.js.map +1 -0
  38. package/dist/oh-checkbox-group.d.ts +39 -0
  39. package/dist/oh-checkbox-group.d.ts.map +1 -0
  40. package/dist/oh-checkbox-group.figma.d.ts +2 -0
  41. package/dist/oh-checkbox-group.figma.d.ts.map +1 -0
  42. package/dist/oh-checkbox-group.figma.js +24 -0
  43. package/dist/oh-checkbox-group.figma.js.map +1 -0
  44. package/dist/oh-checkbox-group.js +309 -0
  45. package/dist/oh-checkbox-group.js.map +1 -0
  46. package/dist/oh-checkbox.d.ts +50 -0
  47. package/dist/oh-checkbox.d.ts.map +1 -0
  48. package/dist/oh-checkbox.js +315 -0
  49. package/dist/oh-checkbox.js.map +1 -0
  50. package/dist/oh-cluster.d.ts +38 -0
  51. package/dist/oh-cluster.d.ts.map +1 -0
  52. package/dist/oh-cluster.js +141 -0
  53. package/dist/oh-cluster.js.map +1 -0
  54. package/dist/oh-container.d.ts +38 -0
  55. package/dist/oh-container.d.ts.map +1 -0
  56. package/dist/oh-container.js +116 -0
  57. package/dist/oh-container.js.map +1 -0
  58. package/dist/oh-drawer.d.ts +66 -0
  59. package/dist/oh-drawer.d.ts.map +1 -0
  60. package/dist/oh-drawer.js +284 -0
  61. package/dist/oh-drawer.js.map +1 -0
  62. package/dist/oh-footer.d.ts +40 -0
  63. package/dist/oh-footer.d.ts.map +1 -0
  64. package/dist/oh-footer.js +112 -0
  65. package/dist/oh-footer.js.map +1 -0
  66. package/dist/oh-grid.d.ts +40 -0
  67. package/dist/oh-grid.d.ts.map +1 -0
  68. package/dist/oh-grid.js +168 -0
  69. package/dist/oh-grid.js.map +1 -0
  70. package/dist/oh-hero.d.ts +28 -0
  71. package/dist/oh-hero.d.ts.map +1 -0
  72. package/dist/oh-hero.js +242 -0
  73. package/dist/oh-hero.js.map +1 -0
  74. package/dist/oh-icon.d.ts +44 -0
  75. package/dist/oh-icon.d.ts.map +1 -0
  76. package/dist/oh-icon.js +321 -0
  77. package/dist/oh-icon.js.map +1 -0
  78. package/dist/oh-input.d.ts +56 -0
  79. package/dist/oh-input.d.ts.map +1 -0
  80. package/dist/oh-input.figma.d.ts +2 -0
  81. package/dist/oh-input.figma.d.ts.map +1 -0
  82. package/dist/oh-input.figma.js +36 -0
  83. package/dist/oh-input.figma.js.map +1 -0
  84. package/dist/oh-input.js +320 -0
  85. package/dist/oh-input.js.map +1 -0
  86. package/dist/oh-link.d.ts +45 -0
  87. package/dist/oh-link.d.ts.map +1 -0
  88. package/dist/oh-link.js +392 -0
  89. package/dist/oh-link.js.map +1 -0
  90. package/dist/oh-modal.d.ts +54 -0
  91. package/dist/oh-modal.d.ts.map +1 -0
  92. package/dist/oh-modal.js +450 -0
  93. package/dist/oh-modal.js.map +1 -0
  94. package/dist/oh-navbar.d.ts +49 -0
  95. package/dist/oh-navbar.d.ts.map +1 -0
  96. package/dist/oh-navbar.js +185 -0
  97. package/dist/oh-navbar.js.map +1 -0
  98. package/dist/oh-progress.d.ts +56 -0
  99. package/dist/oh-progress.d.ts.map +1 -0
  100. package/dist/oh-progress.js +299 -0
  101. package/dist/oh-progress.js.map +1 -0
  102. package/dist/oh-radio-group.d.ts +43 -0
  103. package/dist/oh-radio-group.d.ts.map +1 -0
  104. package/dist/oh-radio-group.figma.d.ts +2 -0
  105. package/dist/oh-radio-group.figma.d.ts.map +1 -0
  106. package/dist/oh-radio-group.figma.js +22 -0
  107. package/dist/oh-radio-group.figma.js.map +1 -0
  108. package/dist/oh-radio-group.js +324 -0
  109. package/dist/oh-radio-group.js.map +1 -0
  110. package/dist/oh-radio.d.ts +50 -0
  111. package/dist/oh-radio.d.ts.map +1 -0
  112. package/dist/oh-radio.js +314 -0
  113. package/dist/oh-radio.js.map +1 -0
  114. package/dist/oh-select.d.ts +82 -0
  115. package/dist/oh-select.d.ts.map +1 -0
  116. package/dist/oh-select.js +638 -0
  117. package/dist/oh-select.js.map +1 -0
  118. package/dist/oh-skip-link.d.ts +37 -0
  119. package/dist/oh-skip-link.d.ts.map +1 -0
  120. package/dist/oh-skip-link.js +145 -0
  121. package/dist/oh-skip-link.js.map +1 -0
  122. package/dist/oh-stack.d.ts +36 -0
  123. package/dist/oh-stack.d.ts.map +1 -0
  124. package/dist/oh-stack.js +112 -0
  125. package/dist/oh-stack.js.map +1 -0
  126. package/dist/oh-tabs.d.ts +85 -0
  127. package/dist/oh-tabs.d.ts.map +1 -0
  128. package/dist/oh-tabs.js +417 -0
  129. package/dist/oh-tabs.js.map +1 -0
  130. package/dist/oh-toggle.d.ts +51 -0
  131. package/dist/oh-toggle.d.ts.map +1 -0
  132. package/dist/oh-toggle.js +219 -0
  133. package/dist/oh-toggle.js.map +1 -0
  134. package/dist/styles/typography.d.ts +15 -0
  135. package/dist/styles/typography.d.ts.map +1 -0
  136. package/dist/styles/typography.js +235 -0
  137. package/dist/styles/typography.js.map +1 -0
  138. package/package.json +140 -0
@@ -0,0 +1,219 @@
1
+ /**
2
+ * oh-toggle
3
+ *
4
+ * A toggle/switch component for binary on/off states.
5
+ *
6
+ * DESIGN DECISIONS:
7
+ * ─────────────────
8
+ * 1. CHUNKY 3D FEEL
9
+ * - Thumb offset up-left from center to appear "popping out"
10
+ * - Shadow flips horizontally when checked (light source stays consistent)
11
+ * - Smooth slide animation
12
+ *
13
+ * 2. VISUAL STATES
14
+ * - Off: Neutral track, thumb on left, shadow bottom-right
15
+ * - On: Brand primary track, thumb on right, shadow bottom-left (flipped)
16
+ *
17
+ * 3. ACCESSIBILITY
18
+ * - Uses role="switch" with aria-checked
19
+ * - Keyboard: Space/Enter to toggle
20
+ * - Focus ring matches design system
21
+ * - Label association via aria-labelledby
22
+ *
23
+ * @element oh-toggle
24
+ *
25
+ * @fires oh-change - Fired when the toggle state changes
26
+ */
27
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
28
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
29
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
30
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
31
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
32
+ };
33
+ import { html, css, nothing } from "lit";
34
+ import { customElement, property } from "lit/decorators.js";
35
+ import { OhElement, baseStyles } from "./base.js";
36
+ let OhToggle = class OhToggle extends OhElement {
37
+ constructor() {
38
+ super(...arguments);
39
+ /** Whether the toggle is checked/on */
40
+ this.checked = false;
41
+ /** Accessible label when no visible label is provided */
42
+ this.ariaLabel = null;
43
+ /** Value for form submission */
44
+ this.value = "on";
45
+ this._labelId = `oh-toggle-label-${Math.random().toString(36).slice(2, 9)}`;
46
+ }
47
+ static { this.styles = [
48
+ baseStyles,
49
+ css `
50
+ :host {
51
+ display: inline-flex;
52
+ align-items: center;
53
+ gap: var(--oh-spacing-3);
54
+ font-family: var(--oh-font-family-sans);
55
+ cursor: pointer;
56
+ }
57
+
58
+ /* ═══════════════════════════════════════════════════════════════
59
+ TOGGLE TRACK
60
+ Pill-shaped container
61
+ ═══════════════════════════════════════════════════════════════ */
62
+
63
+ .toggle__track {
64
+ position: relative;
65
+ display: inline-flex;
66
+ width: 48px;
67
+ height: 26px;
68
+ background-color: var(--oh-color-surface-raised);
69
+ border: none;
70
+ border-radius: 9999px;
71
+ transition: background-color var(--oh-motion-snappy) ease;
72
+ }
73
+
74
+ .toggle__track:focus {
75
+ outline: none;
76
+ }
77
+
78
+ .toggle__track:focus-visible {
79
+ outline: 2px solid var(--oh-color-border-focus);
80
+ outline-offset: 2px;
81
+ box-shadow: 0 0 0 4px var(--oh-focus-glow-color);
82
+ }
83
+
84
+ /* Checked state */
85
+ .toggle__track--checked {
86
+ background-color: var(--oh-color-brand-primary);
87
+ }
88
+
89
+ /* ═══════════════════════════════════════════════════════════════
90
+ TOGGLE THUMB
91
+ Chunky circle offset up-left to appear raised/3D
92
+ Shadow flips horizontally when checked
93
+ ═══════════════════════════════════════════════════════════════ */
94
+
95
+ .toggle__thumb {
96
+ position: absolute;
97
+ top: -3px;
98
+ left: -3px;
99
+ width: 26px;
100
+ height: 26px;
101
+ background-color: var(--oh-color-surface-base);
102
+ border: var(--oh-input-base-border-width) solid var(--oh-color-border-emphasis);
103
+ border-radius: 50%;
104
+ box-shadow: 3px 3px 0 0 var(--oh-shadow-secondary);
105
+ transition:
106
+ transform var(--oh-motion-snappy) var(--oh-motion-ease-gentle),
107
+ box-shadow var(--oh-motion-snappy) ease;
108
+ }
109
+
110
+ /* Checked: thumb moves right, shadow flips to bottom-left */
111
+ .toggle__track--checked .toggle__thumb {
112
+ transform: translateX(30px);
113
+ box-shadow: -3px 3px 0 0 var(--oh-shadow-primary);
114
+ }
115
+
116
+ /* Hover state - lift further up-left, shadow grows */
117
+ .toggle__track:hover .toggle__thumb {
118
+ transform: translate(-1px, -1px);
119
+ box-shadow: 4px 4px 0 0 var(--oh-shadow-secondary);
120
+ }
121
+
122
+ /* Checked hover - shadow flipped and grows */
123
+ .toggle__track--checked:hover .toggle__thumb {
124
+ transform: translateX(30px) translate(1px, -1px);
125
+ box-shadow: -4px 4px 0 0 var(--oh-shadow-primary);
126
+ }
127
+
128
+ /* Active/pressed state - press down, shadow shrinks */
129
+ .toggle__track:active .toggle__thumb {
130
+ transform: translate(1px, 1px);
131
+ box-shadow: 1px 1px 0 0 var(--oh-shadow-secondary);
132
+ }
133
+
134
+ /* Checked active - shadow flipped and shrinks */
135
+ .toggle__track--checked:active .toggle__thumb {
136
+ transform: translateX(30px) translate(-1px, 1px);
137
+ box-shadow: -1px 1px 0 0 var(--oh-shadow-primary);
138
+ }
139
+
140
+ /* ═══════════════════════════════════════════════════════════════
141
+ LABEL
142
+ ═══════════════════════════════════════════════════════════════ */
143
+
144
+ .toggle__label {
145
+ font-size: var(--oh-font-size-base);
146
+ color: var(--oh-color-text-primary);
147
+ user-select: none;
148
+ }
149
+
150
+ /* ═══════════════════════════════════════════════════════════════
151
+ REDUCED MOTION
152
+ ═══════════════════════════════════════════════════════════════ */
153
+
154
+ @media (prefers-reduced-motion: reduce) {
155
+ .toggle__track,
156
+ .toggle__thumb {
157
+ transition: none;
158
+ }
159
+ }
160
+ `,
161
+ ]; }
162
+ _toggle() {
163
+ this.checked = !this.checked;
164
+ this.dispatchEvent(new CustomEvent("oh-change", {
165
+ detail: { checked: this.checked },
166
+ bubbles: true,
167
+ composed: true,
168
+ }));
169
+ }
170
+ _handleKeydown(e) {
171
+ if (e.key === " " || e.key === "Enter") {
172
+ e.preventDefault();
173
+ this._toggle();
174
+ }
175
+ }
176
+ _handleClick() {
177
+ this._toggle();
178
+ }
179
+ render() {
180
+ const hasVisibleLabel = Boolean(this.label);
181
+ return html `
182
+ <div
183
+ class="toggle__track ${this.checked ? "toggle__track--checked" : ""}"
184
+ role="switch"
185
+ aria-checked="${this.checked}"
186
+ aria-labelledby="${hasVisibleLabel ? this._labelId : nothing}"
187
+ aria-label="${!hasVisibleLabel && this.ariaLabel ? this.ariaLabel : nothing}"
188
+ tabindex="0"
189
+ @click="${this._handleClick}"
190
+ @keydown="${this._handleKeydown}"
191
+ >
192
+ <div class="toggle__thumb"></div>
193
+ </div>
194
+ ${hasVisibleLabel
195
+ ? html `<span id="${this._labelId}" class="toggle__label" @click="${this._handleClick}">${this.label}</span>`
196
+ : nothing}
197
+ `;
198
+ }
199
+ };
200
+ __decorate([
201
+ property({ type: Boolean, reflect: true })
202
+ ], OhToggle.prototype, "checked", void 0);
203
+ __decorate([
204
+ property({ type: String })
205
+ ], OhToggle.prototype, "label", void 0);
206
+ __decorate([
207
+ property({ type: String, attribute: "aria-label" })
208
+ ], OhToggle.prototype, "ariaLabel", void 0);
209
+ __decorate([
210
+ property({ type: String })
211
+ ], OhToggle.prototype, "name", void 0);
212
+ __decorate([
213
+ property({ type: String })
214
+ ], OhToggle.prototype, "value", void 0);
215
+ OhToggle = __decorate([
216
+ customElement("oh-toggle")
217
+ ], OhToggle);
218
+ export { OhToggle };
219
+ //# sourceMappingURL=oh-toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oh-toggle.js","sourceRoot":"","sources":["../src/oh-toggle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Typography Styles
3
+ *
4
+ * CSS styles for typography that can be applied to host applications.
5
+ * Import this CSS in your app to apply Orange Halo typography tokens.
6
+ */
7
+ /**
8
+ * Base typography styles using design tokens
9
+ */
10
+ export declare const typographyStyles: import("lit").CSSResult;
11
+ /**
12
+ * Export typography as a CSS string for use outside Lit
13
+ */
14
+ export declare const typographyCSS: string;
15
+ //# sourceMappingURL=typography.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typography.d.ts","sourceRoot":"","sources":["../../src/styles/typography.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,eAAO,MAAM,gBAAgB,yBA2N5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,QAA2B,CAAC"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Typography Styles
3
+ *
4
+ * CSS styles for typography that can be applied to host applications.
5
+ * Import this CSS in your app to apply Orange Halo typography tokens.
6
+ */
7
+ import { css } from "lit";
8
+ /**
9
+ * Base typography styles using design tokens
10
+ */
11
+ export const typographyStyles = css `
12
+ /* Base typography setup */
13
+ :host {
14
+ font-family: var(--oh-font-family-sans);
15
+ font-size: var(--oh-font-size-base);
16
+ line-height: var(--oh-font-line-height-normal);
17
+ color: var(--oh-color-text-primary);
18
+ -webkit-font-smoothing: antialiased;
19
+ -moz-osx-font-smoothing: grayscale;
20
+ }
21
+
22
+ /* Headings */
23
+ h1,
24
+ .oh-h1 {
25
+ font-size: var(--oh-font-size-4xl);
26
+ font-weight: var(--oh-font-weight-bold);
27
+ line-height: var(--oh-font-line-height-tight);
28
+ color: var(--oh-color-text-primary);
29
+ margin: 0 0 var(--oh-spacing-4);
30
+ }
31
+
32
+ h2,
33
+ .oh-h2 {
34
+ font-size: var(--oh-font-size-3xl);
35
+ font-weight: var(--oh-font-weight-bold);
36
+ line-height: var(--oh-font-line-height-tight);
37
+ color: var(--oh-color-text-primary);
38
+ margin: 0 0 var(--oh-spacing-4);
39
+ }
40
+
41
+ h3,
42
+ .oh-h3 {
43
+ font-size: var(--oh-font-size-2xl);
44
+ font-weight: var(--oh-font-weight-semibold);
45
+ line-height: var(--oh-font-line-height-snug);
46
+ color: var(--oh-color-text-primary);
47
+ margin: 0 0 var(--oh-spacing-3);
48
+ }
49
+
50
+ h4,
51
+ .oh-h4 {
52
+ font-size: var(--oh-font-size-xl);
53
+ font-weight: var(--oh-font-weight-semibold);
54
+ line-height: var(--oh-font-line-height-snug);
55
+ color: var(--oh-color-text-primary);
56
+ margin: 0 0 var(--oh-spacing-3);
57
+ }
58
+
59
+ h5,
60
+ .oh-h5 {
61
+ font-size: var(--oh-font-size-lg);
62
+ font-weight: var(--oh-font-weight-medium);
63
+ line-height: var(--oh-font-line-height-normal);
64
+ color: var(--oh-color-text-primary);
65
+ margin: 0 0 var(--oh-spacing-2);
66
+ }
67
+
68
+ h6,
69
+ .oh-h6 {
70
+ font-size: var(--oh-font-size-base);
71
+ font-weight: var(--oh-font-weight-medium);
72
+ line-height: var(--oh-font-line-height-normal);
73
+ color: var(--oh-color-text-primary);
74
+ margin: 0 0 var(--oh-spacing-2);
75
+ }
76
+
77
+ /* Body text */
78
+ p,
79
+ .oh-body {
80
+ font-size: var(--oh-font-size-base);
81
+ font-weight: var(--oh-font-weight-normal);
82
+ line-height: var(--oh-font-line-height-normal);
83
+ color: var(--oh-color-text-secondary);
84
+ margin: 0 0 var(--oh-spacing-4);
85
+ }
86
+
87
+ .oh-body-lg {
88
+ font-size: var(--oh-font-size-lg);
89
+ line-height: var(--oh-font-line-height-relaxed);
90
+ }
91
+
92
+ .oh-body-sm {
93
+ font-size: var(--oh-font-size-sm);
94
+ }
95
+
96
+ .oh-body-xs {
97
+ font-size: var(--oh-font-size-xs);
98
+ }
99
+
100
+ /* Labels */
101
+ .oh-label {
102
+ font-size: var(--oh-font-size-sm);
103
+ font-weight: var(--oh-font-weight-medium);
104
+ line-height: var(--oh-font-line-height-normal);
105
+ color: var(--oh-color-text-primary);
106
+ }
107
+
108
+ .oh-label-lg {
109
+ font-size: var(--oh-font-size-base);
110
+ }
111
+
112
+ .oh-label-sm {
113
+ font-size: var(--oh-font-size-xs);
114
+ }
115
+
116
+ /* Links - dashed underline with shrink animation */
117
+ a,
118
+ .oh-link {
119
+ position: relative;
120
+ color: var(--oh-color-brand-primary);
121
+ text-decoration: none;
122
+ font-weight: var(--oh-font-weight-semibold);
123
+ }
124
+
125
+ a::after,
126
+ .oh-link::after {
127
+ content: '';
128
+ position: absolute;
129
+ left: 0;
130
+ right: 0;
131
+ bottom: 0;
132
+ height: 2px;
133
+ background: repeating-linear-gradient(
134
+ to right,
135
+ currentColor 0,
136
+ currentColor 4px,
137
+ transparent 4px,
138
+ transparent 8px
139
+ );
140
+ transform-origin: right;
141
+ transition: transform var(--oh-motion-slow, 450ms) ease;
142
+ }
143
+
144
+ a:hover::after,
145
+ .oh-link:hover::after {
146
+ transform: scaleX(0);
147
+ }
148
+
149
+ a:focus-visible,
150
+ .oh-link:focus-visible {
151
+ outline: none;
152
+ background-color: var(--oh-color-surface-hover, rgba(0,0,0,0.05));
153
+ border-radius: 2px;
154
+ padding: 0 0.25rem;
155
+ margin: 0 -0.25rem;
156
+ }
157
+
158
+ a:focus-visible::after,
159
+ .oh-link:focus-visible::after {
160
+ background: currentColor;
161
+ transform: scaleX(1);
162
+ }
163
+
164
+ /* Code */
165
+ code,
166
+ .oh-code {
167
+ font-family: var(--oh-font-family-mono);
168
+ font-size: var(--oh-font-size-sm);
169
+ background-color: var(--oh-color-surface-inset);
170
+ padding: 0.125em 0.375em;
171
+ border-radius: var(--oh-radius-xs);
172
+ }
173
+
174
+ pre {
175
+ font-family: var(--oh-font-family-mono);
176
+ font-size: var(--oh-font-size-sm);
177
+ background-color: var(--oh-color-surface-inset);
178
+ padding: var(--oh-spacing-4);
179
+ border-radius: var(--oh-radius-sm);
180
+ overflow-x: auto;
181
+ margin: 0 0 var(--oh-spacing-4);
182
+ }
183
+
184
+ pre code {
185
+ background: none;
186
+ padding: 0;
187
+ }
188
+
189
+ /* Text utilities */
190
+ .oh-text-primary {
191
+ color: var(--oh-color-text-primary);
192
+ }
193
+
194
+ .oh-text-secondary {
195
+ color: var(--oh-color-text-secondary);
196
+ }
197
+
198
+ .oh-text-brand {
199
+ color: var(--oh-color-brand-primary);
200
+ }
201
+
202
+ .oh-text-success {
203
+ color: var(--oh-color-feedback-success);
204
+ }
205
+
206
+ .oh-text-error {
207
+ color: var(--oh-color-feedback-error);
208
+ }
209
+
210
+ .oh-text-warning {
211
+ color: var(--oh-color-feedback-warning);
212
+ }
213
+
214
+ /* Font weight utilities */
215
+ .oh-font-normal {
216
+ font-weight: var(--oh-font-weight-normal);
217
+ }
218
+
219
+ .oh-font-medium {
220
+ font-weight: var(--oh-font-weight-medium);
221
+ }
222
+
223
+ .oh-font-semibold {
224
+ font-weight: var(--oh-font-weight-semibold);
225
+ }
226
+
227
+ .oh-font-bold {
228
+ font-weight: var(--oh-font-weight-bold);
229
+ }
230
+ `;
231
+ /**
232
+ * Export typography as a CSS string for use outside Lit
233
+ */
234
+ export const typographyCSS = typographyStyles.cssText;
235
+ //# sourceMappingURL=typography.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typography.js","sourceRoot":"","sources":["../../src/styles/typography.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2NlC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,140 @@
1
+ {
2
+ "name": "@orange-halo/components",
3
+ "version": "1.0.0",
4
+ "description": "Web Components for Orange Halo Design System",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./oh-accordion.js": {
14
+ "types": "./dist/oh-accordion.d.ts",
15
+ "import": "./dist/oh-accordion.js"
16
+ },
17
+ "./oh-alert.js": {
18
+ "types": "./dist/oh-alert.d.ts",
19
+ "import": "./dist/oh-alert.js"
20
+ },
21
+ "./oh-badge.js": {
22
+ "types": "./dist/oh-badge.d.ts",
23
+ "import": "./dist/oh-badge.js"
24
+ },
25
+ "./oh-breadcrumb.js": {
26
+ "types": "./dist/oh-breadcrumb.d.ts",
27
+ "import": "./dist/oh-breadcrumb.js"
28
+ },
29
+ "./oh-button.js": {
30
+ "types": "./dist/oh-button.d.ts",
31
+ "import": "./dist/oh-button.js"
32
+ },
33
+ "./oh-card.js": {
34
+ "types": "./dist/oh-card.d.ts",
35
+ "import": "./dist/oh-card.js"
36
+ },
37
+ "./oh-checkbox.js": {
38
+ "types": "./dist/oh-checkbox.d.ts",
39
+ "import": "./dist/oh-checkbox.js"
40
+ },
41
+ "./oh-checkbox-group.js": {
42
+ "types": "./dist/oh-checkbox-group.d.ts",
43
+ "import": "./dist/oh-checkbox-group.js"
44
+ },
45
+ "./oh-cluster.js": {
46
+ "types": "./dist/oh-cluster.d.ts",
47
+ "import": "./dist/oh-cluster.js"
48
+ },
49
+ "./oh-container.js": {
50
+ "types": "./dist/oh-container.d.ts",
51
+ "import": "./dist/oh-container.js"
52
+ },
53
+ "./oh-drawer.js": {
54
+ "types": "./dist/oh-drawer.d.ts",
55
+ "import": "./dist/oh-drawer.js"
56
+ },
57
+ "./oh-footer.js": {
58
+ "types": "./dist/oh-footer.d.ts",
59
+ "import": "./dist/oh-footer.js"
60
+ },
61
+ "./oh-grid.js": {
62
+ "types": "./dist/oh-grid.d.ts",
63
+ "import": "./dist/oh-grid.js"
64
+ },
65
+ "./oh-hero.js": {
66
+ "types": "./dist/oh-hero.d.ts",
67
+ "import": "./dist/oh-hero.js"
68
+ },
69
+ "./oh-icon.js": {
70
+ "types": "./dist/oh-icon.d.ts",
71
+ "import": "./dist/oh-icon.js"
72
+ },
73
+ "./oh-input.js": {
74
+ "types": "./dist/oh-input.d.ts",
75
+ "import": "./dist/oh-input.js"
76
+ },
77
+ "./oh-link.js": {
78
+ "types": "./dist/oh-link.d.ts",
79
+ "import": "./dist/oh-link.js"
80
+ },
81
+ "./oh-modal.js": {
82
+ "types": "./dist/oh-modal.d.ts",
83
+ "import": "./dist/oh-modal.js"
84
+ },
85
+ "./oh-navbar.js": {
86
+ "types": "./dist/oh-navbar.d.ts",
87
+ "import": "./dist/oh-navbar.js"
88
+ },
89
+ "./oh-progress.js": {
90
+ "types": "./dist/oh-progress.d.ts",
91
+ "import": "./dist/oh-progress.js"
92
+ },
93
+ "./oh-radio.js": {
94
+ "types": "./dist/oh-radio.d.ts",
95
+ "import": "./dist/oh-radio.js"
96
+ },
97
+ "./oh-radio-group.js": {
98
+ "types": "./dist/oh-radio-group.d.ts",
99
+ "import": "./dist/oh-radio-group.js"
100
+ },
101
+ "./oh-select.js": {
102
+ "types": "./dist/oh-select.d.ts",
103
+ "import": "./dist/oh-select.js"
104
+ },
105
+ "./oh-skip-link.js": {
106
+ "types": "./dist/oh-skip-link.d.ts",
107
+ "import": "./dist/oh-skip-link.js"
108
+ },
109
+ "./oh-stack.js": {
110
+ "types": "./dist/oh-stack.d.ts",
111
+ "import": "./dist/oh-stack.js"
112
+ },
113
+ "./oh-tabs.js": {
114
+ "types": "./dist/oh-tabs.d.ts",
115
+ "import": "./dist/oh-tabs.js"
116
+ }
117
+ },
118
+ "files": [
119
+ "dist",
120
+ "custom-elements.json"
121
+ ],
122
+ "customElements": "custom-elements.json",
123
+ "dependencies": {
124
+ "lit": "^3.2.1"
125
+ },
126
+ "peerDependencies": {
127
+ "@orange-halo/tokens": "^1.0.0",
128
+ "@orange-halo/utils": "^1.0.0"
129
+ },
130
+ "publishConfig": {
131
+ "access": "public"
132
+ },
133
+ "scripts": {
134
+ "build": "tsc",
135
+ "dev": "tsc --watch",
136
+ "clean": "rm -rf dist",
137
+ "lint": "eslint src/",
138
+ "lint:fix": "eslint src/ --fix"
139
+ }
140
+ }