@salesmind-ai/design-system 0.7.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.
- package/dist/{chunk-WE4QIIVN.cjs → chunk-6BXKRDK5.cjs} +4 -12
- package/dist/chunk-6BXKRDK5.cjs.map +1 -0
- package/dist/{chunk-R3ZECV5P.cjs → chunk-FVSL5YMB.cjs} +13 -34
- package/dist/chunk-FVSL5YMB.cjs.map +1 -0
- package/dist/{chunk-HHQ6J7B6.js → chunk-KSEETC4E.js} +4 -12
- package/dist/chunk-KSEETC4E.js.map +1 -0
- package/dist/{chunk-27Y5ESMM.js → chunk-VFO2MUPI.js} +13 -33
- package/dist/chunk-VFO2MUPI.js.map +1 -0
- package/dist/{index-BJ8rBqrO.d.cts → index-C8A3X92-.d.cts} +1 -1
- package/dist/{index-BxMqCbqE.d.ts → index-wZPBPkOV.d.ts} +1 -1
- package/dist/index.cjs +31 -35
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +0 -108
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/marketing/index.cjs +25 -25
- package/dist/marketing/index.d.cts +1 -1
- package/dist/marketing/index.d.ts +1 -1
- package/dist/marketing/index.js +1 -1
- package/dist/styles/styles.css +0 -109
- package/dist/theme/index.cjs +3 -7
- package/dist/theme/index.css +0 -108
- package/dist/theme/index.css.map +1 -1
- package/dist/theme/index.d.cts +1 -28
- package/dist/theme/index.d.ts +1 -28
- package/dist/theme/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-27Y5ESMM.js.map +0 -1
- package/dist/chunk-HHQ6J7B6.js.map +0 -1
- package/dist/chunk-R3ZECV5P.cjs.map +0 -1
- package/dist/chunk-WE4QIIVN.cjs.map +0 -1
package/dist/theme/index.css
CHANGED
|
@@ -109,112 +109,4 @@
|
|
|
109
109
|
border: none;
|
|
110
110
|
padding: 0;
|
|
111
111
|
}
|
|
112
|
-
|
|
113
|
-
/* src/components/VoidBackground/VoidBackground.css */
|
|
114
|
-
.void {
|
|
115
|
-
position: relative;
|
|
116
|
-
display: flex;
|
|
117
|
-
flex-direction: column;
|
|
118
|
-
width: 100%;
|
|
119
|
-
min-height: 100vh;
|
|
120
|
-
overflow: hidden;
|
|
121
|
-
isolation: isolate;
|
|
122
|
-
}
|
|
123
|
-
.void__base {
|
|
124
|
-
position: absolute;
|
|
125
|
-
inset: 0;
|
|
126
|
-
background-color: var(--void-base);
|
|
127
|
-
z-index: -4;
|
|
128
|
-
}
|
|
129
|
-
.void__orbs {
|
|
130
|
-
position: absolute;
|
|
131
|
-
inset: 0;
|
|
132
|
-
z-index: -3;
|
|
133
|
-
pointer-events: none;
|
|
134
|
-
}
|
|
135
|
-
.void__orb {
|
|
136
|
-
position: absolute;
|
|
137
|
-
border-radius: 50%;
|
|
138
|
-
mix-blend-mode: screen;
|
|
139
|
-
filter: blur(140px);
|
|
140
|
-
opacity: 0.6;
|
|
141
|
-
}
|
|
142
|
-
.void__orb--warm {
|
|
143
|
-
width: 800px;
|
|
144
|
-
height: 800px;
|
|
145
|
-
top: 10%;
|
|
146
|
-
right: 10%;
|
|
147
|
-
background:
|
|
148
|
-
radial-gradient(
|
|
149
|
-
circle at center,
|
|
150
|
-
rgba(var(--void-orb-yellow-rgb), 0.4) 0%,
|
|
151
|
-
rgba(var(--void-orb-pink-rgb), 0.3) 40%,
|
|
152
|
-
transparent 70%);
|
|
153
|
-
}
|
|
154
|
-
.void__orb--purple {
|
|
155
|
-
width: 600px;
|
|
156
|
-
height: 600px;
|
|
157
|
-
bottom: 10%;
|
|
158
|
-
left: 10%;
|
|
159
|
-
background:
|
|
160
|
-
radial-gradient(
|
|
161
|
-
circle at center,
|
|
162
|
-
rgba(var(--void-orb-purple-rgb), 0.5) 0%,
|
|
163
|
-
rgba(var(--void-orb-purple-rgb), 0.2) 50%,
|
|
164
|
-
transparent 70%);
|
|
165
|
-
}
|
|
166
|
-
.void__grid {
|
|
167
|
-
position: absolute;
|
|
168
|
-
inset: 0;
|
|
169
|
-
z-index: -2;
|
|
170
|
-
pointer-events: none;
|
|
171
|
-
background-image:
|
|
172
|
-
linear-gradient(
|
|
173
|
-
to right,
|
|
174
|
-
var(--void-grid-color) 1px,
|
|
175
|
-
transparent 1px),
|
|
176
|
-
linear-gradient(
|
|
177
|
-
to bottom,
|
|
178
|
-
var(--void-grid-color) 1px,
|
|
179
|
-
transparent 1px);
|
|
180
|
-
background-size: var(--grid-cell-web) var(--grid-cell-web);
|
|
181
|
-
mask-image:
|
|
182
|
-
radial-gradient(
|
|
183
|
-
ellipse 70% 60% at 50% 40%,
|
|
184
|
-
black 0%,
|
|
185
|
-
transparent 100%);
|
|
186
|
-
-webkit-mask-image:
|
|
187
|
-
radial-gradient(
|
|
188
|
-
ellipse 70% 60% at 50% 40%,
|
|
189
|
-
black 0%,
|
|
190
|
-
transparent 100%);
|
|
191
|
-
}
|
|
192
|
-
.void__grain {
|
|
193
|
-
position: absolute;
|
|
194
|
-
inset: 0;
|
|
195
|
-
z-index: -1;
|
|
196
|
-
pointer-events: none;
|
|
197
|
-
opacity: var(--void-grid-grain-opacity, 0.04);
|
|
198
|
-
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
|
|
199
|
-
background-repeat: repeat;
|
|
200
|
-
background-size: 200px 200px;
|
|
201
|
-
}
|
|
202
|
-
.void__content {
|
|
203
|
-
position: relative;
|
|
204
|
-
z-index: 1;
|
|
205
|
-
flex: 1;
|
|
206
|
-
display: flex;
|
|
207
|
-
flex-direction: column;
|
|
208
|
-
}
|
|
209
|
-
.void--inline {
|
|
210
|
-
min-height: auto;
|
|
211
|
-
}
|
|
212
|
-
.void--inline .void__content {
|
|
213
|
-
min-height: auto;
|
|
214
|
-
}
|
|
215
|
-
@media (prefers-reduced-motion: reduce) {
|
|
216
|
-
.void__orb {
|
|
217
|
-
animation: none;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
112
|
/*# sourceMappingURL=index.css.map */
|
package/dist/theme/index.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/ThemeSelector/ThemeSelector.css","../../src/components/ColorPicker/ColorPicker.css","../../src/components/VoidBackground/VoidBackground.css"],"sourcesContent":[".ds-theme-selector {\n display: inline-flex;\n align-items: center;\n border: 1px solid var(--rim-light-top);\n border-radius: var(--radius-badge);\n padding: var(--space-1);\n gap: var(--space-1);\n}\n\n[data-theme='light'] .ds-theme-selector,\n[data-theme='light-contrast'] .ds-theme-selector {\n background-color: var(--void-base);\n}\n\n[data-theme='dark'] .ds-theme-selector,\n[data-theme='dark-contrast'] .ds-theme-selector {\n background: var(--glass-base);\n backdrop-filter: var(--glass-backdrop);\n -webkit-backdrop-filter: var(--glass-backdrop);\n}\n\n.ds-theme-selector__btn {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-3);\n border: none;\n background: transparent;\n color: var(--text-secondary);\n font-family: inherit;\n font-size: var(--font-size-sm, 14px);\n font-weight: 500;\n border-radius: var(--radius-badge);\n cursor: pointer;\n transition: color var(--transition-fast), background-color var(--transition-fast);\n line-height: 1;\n white-space: nowrap;\n}\n\n.ds-theme-selector__btn:hover {\n color: var(--text-primary);\n background-color: var(--interactive-hover-bg);\n}\n\n.ds-theme-selector__btn--active {\n background-color: rgba(var(--accent-rgb),.2);\n box-shadow: none;\n}\n\n[data-theme='light'] .ds-theme-selector__btn--active .ds-theme-selector__label,\n[data-theme='light-contrast'] .ds-theme-selector__btn--active .ds-theme-selector__label,\n[data-theme='dark'] .ds-theme-selector__btn--active .ds-theme-selector__label,\n[data-theme='dark-contrast'] .ds-theme-selector__btn--active .ds-theme-selector__label {\n color: var(--text-secondary);\n}\n\n.ds-theme-selector__btn--active .ds-theme-selector__icon {\n color: rgb(var(--accent-rgb));\n}\n\n.ds-theme-selector__icon {\n width: 16px;\n height: 16px;\n color: inherit;\n transition: color var(--transition-fast);\n}\n",".ds-color-picker {\n display: flex;\n align-items: center;\n gap: var(--space-1);\n padding: var(--space-1);\n border-radius: var(--radius-badge);\n background: var(--interactive-hover-bg);\n border: 1px solid var(--rim-light-bottom);\n}\n\n.ds-color-picker__swatch {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--space-1);\n border: none;\n border-radius: var(--radius-xs);\n background: transparent;\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.ds-color-picker__swatch:hover {\n background: var(--interactive-hover-bg);\n}\n\n.ds-color-picker__swatch--active {\n background: var(--interactive-active-bg);\n}\n\n.ds-color-picker__dot {\n width: 14px;\n height: 14px;\n border-radius: 50%;\n background: var(--swatch-color);\n border: 1.5px solid var(--rim-light-bottom);\n transition: box-shadow var(--transition-fast);\n}\n\n.ds-color-picker__swatch--active .ds-color-picker__dot {\n box-shadow: 0 0 0 2px var(--swatch-color);\n}\n\n/* Native <input type=\"color\"> hidden behind the custom swatch */\n.ds-color-picker__swatch--custom {\n position: relative;\n}\n\n.ds-color-picker__native-input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n cursor: pointer;\n border: none;\n padding: 0;\n}\n","/* ============================================================================\n VOID BACKGROUND — LEVEL 0 ATMOSPHERIC SYSTEM\n ============================================================================ */\n\n.void {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 100vh;\n overflow: hidden;\n isolation: isolate;\n}\n\n/* ==========================================================================\n Layer 1: Base Color — Deep purple-black\n ========================================================================== */\n\n.void__base {\n position: absolute;\n inset: 0;\n background-color: var(--void-base);\n z-index: -4;\n}\n\n/* ==========================================================================\n Layer 2: Light Orbs — Brand colors as light sources\n ========================================================================== */\n\n.void__orbs {\n position: absolute;\n inset: 0;\n z-index: -3;\n pointer-events: none;\n}\n\n.void__orb {\n position: absolute;\n border-radius: 50%;\n mix-blend-mode: screen;\n filter: blur(140px);\n opacity: 0.6;\n}\n\n/* Warm Orb: Yellow → Pink gradient, positioned near primary content */\n.void__orb--warm {\n width: 800px;\n height: 800px;\n top: 10%;\n right: 10%;\n background: radial-gradient(\n circle at center,\n rgba(var(--void-orb-yellow-rgb), 0.4) 0%,\n rgba(var(--void-orb-pink-rgb), 0.3) 40%,\n transparent 70%\n );\n}\n\n/* Purple Orb: Deep purple for depth balance */\n.void__orb--purple {\n width: 600px;\n height: 600px;\n bottom: 10%;\n left: 10%;\n background: radial-gradient(\n circle at center,\n rgba(var(--void-orb-purple-rgb), 0.5) 0%,\n rgba(var(--void-orb-purple-rgb), 0.2) 50%,\n transparent 70%\n );\n}\n\n/* ==========================================================================\n Layer 3: Engineered Grid — 80×80px with radial fade\n ========================================================================== */\n\n.void__grid {\n position: absolute;\n inset: 0;\n z-index: -2;\n pointer-events: none;\n background-image:\n linear-gradient(to right, var(--void-grid-color) 1px, transparent 1px),\n linear-gradient(to bottom, var(--void-grid-color) 1px, transparent 1px);\n background-size: var(--grid-cell-web) var(--grid-cell-web);\n /* Grid fades toward edges — CRITICAL */\n mask-image: radial-gradient(ellipse 70% 60% at 50% 40%, black 0%, transparent 100%);\n -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 40%, black 0%, transparent 100%);\n}\n\n/* ==========================================================================\n Layer 4: Film Grain — Static noise texture\n ========================================================================== */\n\n.void__grain {\n position: absolute;\n inset: 0;\n z-index: -1;\n pointer-events: none;\n opacity: var(--void-grid-grain-opacity, 0.04);\n background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E\");\n background-repeat: repeat;\n background-size: 200px 200px;\n}\n\n/* ==========================================================================\n Content Layer\n ========================================================================== */\n\n.void__content {\n position: relative;\n z-index: 1;\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n/* ==========================================================================\n Utility: Inline Void (for smaller containers)\n ========================================================================== */\n\n.void--inline {\n min-height: auto;\n}\n\n.void--inline .void__content {\n min-height: auto;\n}\n\n/* ==========================================================================\n Reduced Motion: Disable any future animations\n ========================================================================== */\n\n@media (prefers-reduced-motion: reduce) {\n .void__orb {\n animation: none;\n }\n}\n"],"mappings":";AAAA,CAAC;AACC,WAAS;AACT,eAAa;AACb,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB,WAAS,IAAI;AACb,OAAK,IAAI;AACX;AAEA,CAAC,kBAAoB,CATpB;AAUD,CAAC,2BAA6B,CAV7B;AAWC,oBAAkB,IAAI;AACxB;AAEA,CAAC,iBAAmB,CAdnB;AAeD,CAAC,0BAA4B,CAf5B;AAgBC,cAAY,IAAI;AAChB,mBAAiB,IAAI;AACrB,2BAAyB,IAAI;AAC/B;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,WAAS,IAAI,WAAW,IAAI;AAC5B,UAAQ;AACR,cAAY;AACZ,SAAO,IAAI;AACX,eAAa;AACb,aAAW,IAAI,cAAc,EAAE;AAC/B,eAAa;AACb,iBAAe,IAAI;AACnB,UAAQ;AACR,cAAY,MAAM,IAAI,kBAAkB,EAAE,iBAAiB,IAAI;AAC/D,eAAa;AACb,eAAa;AACf;AAEA,CAlBC,sBAkBsB;AACrB,SAAO,IAAI;AACX,oBAAkB,IAAI;AACxB;AAEA,CAAC;AACC,oBAAkB,KAAK,IAAI,aAAa,EAAC;AACzC,cAAY;AACd;AAEA,CAAC,kBAAoB,CALpB,+BAKoD,CAAC;AACtD,CAAC,2BAA6B,CAN7B,+BAM6D,CADR;AAEtD,CAAC,iBAAmB,CAPnB,+BAOmD,CAFE;AAGtD,CAAC,0BAA4B,CAR5B,+BAQ4D,CAHP;AAIpD,SAAO,IAAI;AACb;AAEA,CAZC,+BAY+B,CAAC;AAC/B,SAAO,IAAI,IAAI;AACjB;AAEA,CAJiC;AAK/B,SAAO;AACP,UAAQ;AACR,SAAO;AACP,cAAY,MAAM,IAAI;AACxB;;;ACjEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,WAAS,IAAI;AACb,iBAAe,IAAI;AACnB,cAAY,IAAI;AAChB,UAAQ,IAAI,MAAM,IAAI;AACxB;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,WAAS,IAAI;AACb,UAAQ;AACR,iBAAe,IAAI;AACnB,cAAY;AACZ,UAAQ;AACR,cAAY,WAAW,IAAI;AAC7B;AAEA,CAZC,uBAYuB;AACtB,cAAY,IAAI;AAClB;AAEA,CAAC;AACC,cAAY,IAAI;AAClB;AAEA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,iBAAe;AACf,cAAY,IAAI;AAChB,UAAQ,MAAM,MAAM,IAAI;AACxB,cAAY,WAAW,IAAI;AAC7B;AAEA,CAbC,gCAagC,CAThC;AAUC,cAAY,EAAE,EAAE,EAAE,IAAI,IAAI;AAC5B;AAGA,CAAC;AACC,YAAU;AACZ;AAEA,CAAC;AACC,YAAU;AACV,SAAO;AACP,SAAO;AACP,UAAQ;AACR,WAAS;AACT,UAAQ;AACR,UAAQ;AACR,WAAS;AACX;;;ACrDA,CAAC;AACC,YAAU;AACV,WAAS;AACT,kBAAgB;AAChB,SAAO;AACP,cAAY;AACZ,YAAU;AACV,aAAW;AACb;AAMA,CAAC;AACC,YAAU;AACV,SAAO;AACP,oBAAkB,IAAI;AACtB,WAAS;AACX;AAMA,CAAC;AACC,YAAU;AACV,SAAO;AACP,WAAS;AACT,kBAAgB;AAClB;AAEA,CAAC;AACC,YAAU;AACV,iBAAe;AACf,kBAAgB;AAChB,UAAQ,KAAK;AACb,WAAS;AACX;AAGA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,OAAK;AACL,SAAO;AACP;AAAA,IAAY;AAAA,MACV,OAAO,GAAG,MAAM;AAAA,MAChB,KAAK,IAAI,sBAAsB,EAAE,KAAK,EAAE;AAAA,MACxC,KAAK,IAAI,oBAAoB,EAAE,KAAK,GAAG;AAAA,MACvC,YAAY;AAEhB;AAGA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,UAAQ;AACR,QAAM;AACN;AAAA,IAAY;AAAA,MACV,OAAO,GAAG,MAAM;AAAA,MAChB,KAAK,IAAI,sBAAsB,EAAE,KAAK,EAAE;AAAA,MACxC,KAAK,IAAI,sBAAsB,EAAE,KAAK,GAAG;AAAA,MACzC,YAAY;AAEhB;AAMA,CAAC;AACC,YAAU;AACV,SAAO;AACP,WAAS;AACT,kBAAgB;AAChB;AAAA,IACE;AAAA,MAAgB,GAAG,KAAK;AAAA,MAAE,IAAI,mBAAmB,GAAG;AAAA,MAAE,YAAY,IAAI;AAAA,IACtE;AAAA,MAAgB,GAAG,MAAM;AAAA,MAAE,IAAI,mBAAmB,GAAG;AAAA,MAAE,YAAY;AACrE,mBAAiB,IAAI,iBAAiB,IAAI;AAE1C;AAAA,IAAY;AAAA,MAAgB,QAAQ,IAAI,IAAI,GAAG,IAAI,GAAG;AAAA,MAAE,MAAM,EAAE;AAAA,MAAE,YAAY;AAC9E;AAAA,IAAoB;AAAA,MAAgB,QAAQ,IAAI,IAAI,GAAG,IAAI,GAAG;AAAA,MAAE,MAAM,EAAE;AAAA,MAAE,YAAY;AACxF;AAMA,CAAC;AACC,YAAU;AACV,SAAO;AACP,WAAS;AACT,kBAAgB;AAChB,WAAS,IAAI,yBAAyB,EAAE;AACxC,oBAAkB;AAClB,qBAAmB;AACnB,mBAAiB,MAAM;AACzB;AAMA,CAAC;AACC,YAAU;AACV,WAAS;AACT,QAAM;AACN,WAAS;AACT,kBAAgB;AAClB;AAMA,CAAC;AACC,cAAY;AACd;AAEA,CAJC,aAIa,CAhBb;AAiBC,cAAY;AACd;AAMA,OAAO,CAAC,sBAAsB,EAAE;AAC9B,GAlGD;AAmGG,eAAW;AACb;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/ThemeSelector/ThemeSelector.css","../../src/components/ColorPicker/ColorPicker.css"],"sourcesContent":[".ds-theme-selector {\n display: inline-flex;\n align-items: center;\n border: 1px solid var(--rim-light-top);\n border-radius: var(--radius-badge);\n padding: var(--space-1);\n gap: var(--space-1);\n}\n\n[data-theme='light'] .ds-theme-selector,\n[data-theme='light-contrast'] .ds-theme-selector {\n background-color: var(--void-base);\n}\n\n[data-theme='dark'] .ds-theme-selector,\n[data-theme='dark-contrast'] .ds-theme-selector {\n background: var(--glass-base);\n backdrop-filter: var(--glass-backdrop);\n -webkit-backdrop-filter: var(--glass-backdrop);\n}\n\n.ds-theme-selector__btn {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-3);\n border: none;\n background: transparent;\n color: var(--text-secondary);\n font-family: inherit;\n font-size: var(--font-size-sm, 14px);\n font-weight: 500;\n border-radius: var(--radius-badge);\n cursor: pointer;\n transition: color var(--transition-fast), background-color var(--transition-fast);\n line-height: 1;\n white-space: nowrap;\n}\n\n.ds-theme-selector__btn:hover {\n color: var(--text-primary);\n background-color: var(--interactive-hover-bg);\n}\n\n.ds-theme-selector__btn--active {\n background-color: rgba(var(--accent-rgb),.2);\n box-shadow: none;\n}\n\n[data-theme='light'] .ds-theme-selector__btn--active .ds-theme-selector__label,\n[data-theme='light-contrast'] .ds-theme-selector__btn--active .ds-theme-selector__label,\n[data-theme='dark'] .ds-theme-selector__btn--active .ds-theme-selector__label,\n[data-theme='dark-contrast'] .ds-theme-selector__btn--active .ds-theme-selector__label {\n color: var(--text-secondary);\n}\n\n.ds-theme-selector__btn--active .ds-theme-selector__icon {\n color: rgb(var(--accent-rgb));\n}\n\n.ds-theme-selector__icon {\n width: 16px;\n height: 16px;\n color: inherit;\n transition: color var(--transition-fast);\n}\n",".ds-color-picker {\n display: flex;\n align-items: center;\n gap: var(--space-1);\n padding: var(--space-1);\n border-radius: var(--radius-badge);\n background: var(--interactive-hover-bg);\n border: 1px solid var(--rim-light-bottom);\n}\n\n.ds-color-picker__swatch {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--space-1);\n border: none;\n border-radius: var(--radius-xs);\n background: transparent;\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.ds-color-picker__swatch:hover {\n background: var(--interactive-hover-bg);\n}\n\n.ds-color-picker__swatch--active {\n background: var(--interactive-active-bg);\n}\n\n.ds-color-picker__dot {\n width: 14px;\n height: 14px;\n border-radius: 50%;\n background: var(--swatch-color);\n border: 1.5px solid var(--rim-light-bottom);\n transition: box-shadow var(--transition-fast);\n}\n\n.ds-color-picker__swatch--active .ds-color-picker__dot {\n box-shadow: 0 0 0 2px var(--swatch-color);\n}\n\n/* Native <input type=\"color\"> hidden behind the custom swatch */\n.ds-color-picker__swatch--custom {\n position: relative;\n}\n\n.ds-color-picker__native-input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n cursor: pointer;\n border: none;\n padding: 0;\n}\n"],"mappings":";AAAA,CAAC;AACC,WAAS;AACT,eAAa;AACb,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB,WAAS,IAAI;AACb,OAAK,IAAI;AACX;AAEA,CAAC,kBAAoB,CATpB;AAUD,CAAC,2BAA6B,CAV7B;AAWC,oBAAkB,IAAI;AACxB;AAEA,CAAC,iBAAmB,CAdnB;AAeD,CAAC,0BAA4B,CAf5B;AAgBC,cAAY,IAAI;AAChB,mBAAiB,IAAI;AACrB,2BAAyB,IAAI;AAC/B;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,WAAS,IAAI,WAAW,IAAI;AAC5B,UAAQ;AACR,cAAY;AACZ,SAAO,IAAI;AACX,eAAa;AACb,aAAW,IAAI,cAAc,EAAE;AAC/B,eAAa;AACb,iBAAe,IAAI;AACnB,UAAQ;AACR,cAAY,MAAM,IAAI,kBAAkB,EAAE,iBAAiB,IAAI;AAC/D,eAAa;AACb,eAAa;AACf;AAEA,CAlBC,sBAkBsB;AACrB,SAAO,IAAI;AACX,oBAAkB,IAAI;AACxB;AAEA,CAAC;AACC,oBAAkB,KAAK,IAAI,aAAa,EAAC;AACzC,cAAY;AACd;AAEA,CAAC,kBAAoB,CALpB,+BAKoD,CAAC;AACtD,CAAC,2BAA6B,CAN7B,+BAM6D,CADR;AAEtD,CAAC,iBAAmB,CAPnB,+BAOmD,CAFE;AAGtD,CAAC,0BAA4B,CAR5B,+BAQ4D,CAHP;AAIpD,SAAO,IAAI;AACb;AAEA,CAZC,+BAY+B,CAAC;AAC/B,SAAO,IAAI,IAAI;AACjB;AAEA,CAJiC;AAK/B,SAAO;AACP,UAAQ;AACR,SAAO;AACP,cAAY,MAAM,IAAI;AACxB;;;ACjEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,WAAS,IAAI;AACb,iBAAe,IAAI;AACnB,cAAY,IAAI;AAChB,UAAQ,IAAI,MAAM,IAAI;AACxB;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,WAAS,IAAI;AACb,UAAQ;AACR,iBAAe,IAAI;AACnB,cAAY;AACZ,UAAQ;AACR,cAAY,WAAW,IAAI;AAC7B;AAEA,CAZC,uBAYuB;AACtB,cAAY,IAAI;AAClB;AAEA,CAAC;AACC,cAAY,IAAI;AAClB;AAEA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,iBAAe;AACf,cAAY,IAAI;AAChB,UAAQ,MAAM,MAAM,IAAI;AACxB,cAAY,WAAW,IAAI;AAC7B;AAEA,CAbC,gCAagC,CAThC;AAUC,cAAY,EAAE,EAAE,EAAE,IAAI,IAAI;AAC5B;AAGA,CAAC;AACC,YAAU;AACZ;AAEA,CAAC;AACC,YAAU;AACV,SAAO;AACP,SAAO;AACP,UAAQ;AACR,WAAS;AACT,UAAQ;AACR,UAAQ;AACR,WAAS;AACX;","names":[]}
|
package/dist/theme/index.d.cts
CHANGED
|
@@ -2,33 +2,6 @@ export { A as AppearanceContextValue, a as AppearanceProvider, b as AppearancePr
|
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import 'react/jsx-runtime';
|
|
4
4
|
|
|
5
|
-
interface VoidBackgroundProps {
|
|
6
|
-
/** Show the engineered grid overlay */
|
|
7
|
-
showGrid?: boolean;
|
|
8
|
-
/** Show the film grain texture */
|
|
9
|
-
showGrain?: boolean;
|
|
10
|
-
/** Custom class name */
|
|
11
|
-
className?: string;
|
|
12
|
-
/** Child content rendered above the void */
|
|
13
|
-
children?: React__default.ReactNode;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* VoidBackground — The Void Signature Design System Level 0 Environment
|
|
17
|
-
*
|
|
18
|
-
* @deprecated since v2; use AuroraVoid from @salesmind-ai/design-system. Will be removed in v3.
|
|
19
|
-
*
|
|
20
|
-
* A four-layer atmospheric background system:
|
|
21
|
-
* 1. Base Color — Deep purple-black (#08040a)
|
|
22
|
-
* 2. Light Orbs — Radial gradients with mix-blend-mode: screen
|
|
23
|
-
* 3. Engineered Grid — 80×80px with radial fade mask
|
|
24
|
-
* 4. Film Grain — Static SVG noise for texture
|
|
25
|
-
*
|
|
26
|
-
* The Void is not decoration — it is the lighting engine for the UI.
|
|
27
|
-
*
|
|
28
|
-
* @see AuroraVoid
|
|
29
|
-
*/
|
|
30
|
-
declare const VoidBackground: React__default.ForwardRefExoticComponent<VoidBackgroundProps & React__default.RefAttributes<HTMLDivElement>>;
|
|
31
|
-
|
|
32
5
|
interface ThemeSelectorProps {
|
|
33
6
|
className?: string;
|
|
34
7
|
style?: React__default.CSSProperties;
|
|
@@ -56,4 +29,4 @@ interface ColorPickerProps {
|
|
|
56
29
|
*/
|
|
57
30
|
declare const ColorPicker: React__default.ForwardRefExoticComponent<ColorPickerProps & React__default.RefAttributes<HTMLDivElement>>;
|
|
58
31
|
|
|
59
|
-
export { ColorPicker, type ColorPickerProps, ThemeSelector, type ThemeSelectorProps
|
|
32
|
+
export { ColorPicker, type ColorPickerProps, ThemeSelector, type ThemeSelectorProps };
|
package/dist/theme/index.d.ts
CHANGED
|
@@ -2,33 +2,6 @@ export { A as AppearanceContextValue, a as AppearanceProvider, b as AppearancePr
|
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import 'react/jsx-runtime';
|
|
4
4
|
|
|
5
|
-
interface VoidBackgroundProps {
|
|
6
|
-
/** Show the engineered grid overlay */
|
|
7
|
-
showGrid?: boolean;
|
|
8
|
-
/** Show the film grain texture */
|
|
9
|
-
showGrain?: boolean;
|
|
10
|
-
/** Custom class name */
|
|
11
|
-
className?: string;
|
|
12
|
-
/** Child content rendered above the void */
|
|
13
|
-
children?: React__default.ReactNode;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* VoidBackground — The Void Signature Design System Level 0 Environment
|
|
17
|
-
*
|
|
18
|
-
* @deprecated since v2; use AuroraVoid from @salesmind-ai/design-system. Will be removed in v3.
|
|
19
|
-
*
|
|
20
|
-
* A four-layer atmospheric background system:
|
|
21
|
-
* 1. Base Color — Deep purple-black (#08040a)
|
|
22
|
-
* 2. Light Orbs — Radial gradients with mix-blend-mode: screen
|
|
23
|
-
* 3. Engineered Grid — 80×80px with radial fade mask
|
|
24
|
-
* 4. Film Grain — Static SVG noise for texture
|
|
25
|
-
*
|
|
26
|
-
* The Void is not decoration — it is the lighting engine for the UI.
|
|
27
|
-
*
|
|
28
|
-
* @see AuroraVoid
|
|
29
|
-
*/
|
|
30
|
-
declare const VoidBackground: React__default.ForwardRefExoticComponent<VoidBackgroundProps & React__default.RefAttributes<HTMLDivElement>>;
|
|
31
|
-
|
|
32
5
|
interface ThemeSelectorProps {
|
|
33
6
|
className?: string;
|
|
34
7
|
style?: React__default.CSSProperties;
|
|
@@ -56,4 +29,4 @@ interface ColorPickerProps {
|
|
|
56
29
|
*/
|
|
57
30
|
declare const ColorPicker: React__default.ForwardRefExoticComponent<ColorPickerProps & React__default.RefAttributes<HTMLDivElement>>;
|
|
58
31
|
|
|
59
|
-
export { ColorPicker, type ColorPickerProps, ThemeSelector, type ThemeSelectorProps
|
|
32
|
+
export { ColorPicker, type ColorPickerProps, ThemeSelector, type ThemeSelectorProps };
|
package/dist/theme/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { ColorPicker, ThemeSelector
|
|
2
|
+
export { ColorPicker, ThemeSelector } from '../chunk-VFO2MUPI.js';
|
|
3
3
|
export { AppearanceProvider, accentForegroundRgb, hexToRgb, initializeAppearance, prefersReducedMotion, relativeLuminance, useAppearance } from '../chunk-MBAG654R.js';
|
|
4
4
|
//# sourceMappingURL=out.js.map
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/VoidBackground/VoidBackground.tsx","../src/components/ThemeSelector/ThemeSelector.tsx","../src/components/ColorPicker/ColorPicker.tsx"],"names":["clsx","jsx","jsxs","React"],"mappings":"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","sourcesContent":["import React from 'react';\nimport clsx from 'clsx';\nimport './VoidBackground.css';\n\nexport interface VoidBackgroundProps {\n /** Show the engineered grid overlay */\n showGrid?: boolean;\n /** Show the film grain texture */\n showGrain?: boolean;\n /** Custom class name */\n className?: string;\n /** Child content rendered above the void */\n children?: React.ReactNode;\n}\n\n/**\n * VoidBackground — The Void Signature Design System Level 0 Environment\n *\n * @deprecated since v2; use AuroraVoid from @salesmind-ai/design-system. Will be removed in v3.\n *\n * A four-layer atmospheric background system:\n * 1. Base Color — Deep purple-black (#08040a)\n * 2. Light Orbs — Radial gradients with mix-blend-mode: screen\n * 3. Engineered Grid — 80×80px with radial fade mask\n * 4. Film Grain — Static SVG noise for texture\n *\n * The Void is not decoration — it is the lighting engine for the UI.\n *\n * @see AuroraVoid\n */\nexport const VoidBackground = React.forwardRef<HTMLDivElement, VoidBackgroundProps>(\n ({ showGrid = true, showGrain = true, className, children }, ref) => {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n 'VoidBackground is deprecated since v2; use AuroraVoid from @salesmind-ai/design-system. Will be removed in v3.',\n );\n }\n return (\n <div ref={ref} className={clsx('void', className)}>\n {/* Layer 1: Base Color */}\n <div className=\"void__base\" aria-hidden=\"true\" />\n\n {/* Layer 2: Light Orbs (Infusion Engine) */}\n <div className=\"void__orbs\" aria-hidden=\"true\">\n <div className=\"void__orb void__orb--warm\" />\n <div className=\"void__orb void__orb--purple\" />\n </div>\n\n {/* Layer 3: Engineered Grid */}\n {showGrid && <div className=\"void__grid\" aria-hidden=\"true\" />}\n\n {/* Layer 4: Film Grain */}\n {showGrain && <div className=\"void__grain\" aria-hidden=\"true\" />}\n\n {/* Content Layer */}\n {children && <div className=\"void__content\">{children}</div>}\n </div>\n );\n },\n);\n\nVoidBackground.displayName = 'VoidBackground';\n","import React from 'react';\nimport { Sun, Moon } from 'lucide-react';\nimport clsx from 'clsx';\nimport { useAppearance, Theme } from '../../theme/AppearanceProvider';\nimport './ThemeSelector.css';\n\nexport interface ThemeSelectorProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const ThemeSelector: React.FC<ThemeSelectorProps> = ({ className, style }) => {\n const { theme, setTheme } = useAppearance();\n\n const handleThemeChange = (newTheme: Theme) => {\n setTheme(newTheme);\n };\n\n return (\n <div className={clsx('ds-theme-selector', className)} style={style} role=\"group\" aria-label=\"Theme Selector\">\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'light' })}\n onClick={() => handleThemeChange('light')}\n aria-pressed={theme === 'light'}\n >\n <Sun className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Light</span>\n </button>\n\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'light-contrast' })}\n onClick={() => handleThemeChange('light-contrast')}\n aria-pressed={theme === 'light-contrast'}\n >\n <Sun className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Light HC</span>\n </button>\n\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'dark' })}\n onClick={() => handleThemeChange('dark')}\n aria-pressed={theme === 'dark'}\n >\n <Moon className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Dark</span>\n </button>\n\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'dark-contrast' })}\n onClick={() => handleThemeChange('dark-contrast')}\n aria-pressed={theme === 'dark-contrast'}\n >\n <Moon className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Dark HC</span>\n </button>\n </div>\n );\n};\n\nThemeSelector.displayName = 'ThemeSelector';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useAppearance, Brand } from '../../theme/AppearanceProvider';\nimport './ColorPicker.css';\n\n/** Pre-configured brand presets shown as swatches. */\nconst BRAND_PRESETS: { value: Brand; label: string; color: string }[] = [\n { value: 'default', label: 'Warm Intelligence', color: '#f97316' },\n { value: 'salesmind', label: 'SalesMind', color: '#ff005a' },\n];\n\nexport interface ColorPickerProps {\n /** Additional CSS class name. */\n className?: string;\n /** Inline styles. */\n style?: React.CSSProperties;\n /**\n * Hide the custom color swatch and native color input.\n * When `true`, only the curated brand presets are shown.\n * Use this on production surfaces (e.g., marketing website footer)\n * where arbitrary custom colors would undermine brand consistency.\n * @default false\n */\n hideCustom?: boolean;\n}\n\n/**\n * Compact brand/accent color picker.\n * Renders preset brand swatches and an optional custom color input.\n * Consumes the `useAppearance()` context for state.\n */\nexport const ColorPicker = React.forwardRef<HTMLDivElement, ColorPickerProps>(\n ({ className, style, hideCustom = false }, ref) => {\n const { brand, setBrand, customColor, setCustomColor } = useAppearance();\n\n return (\n <div\n ref={ref}\n className={clsx('ds-color-picker', className)}\n style={style}\n role=\"group\"\n aria-label=\"Brand Color\"\n >\n {BRAND_PRESETS.map(({ value, label, color }) => (\n <button\n key={value}\n type=\"button\"\n className={clsx('ds-color-picker__swatch', {\n 'ds-color-picker__swatch--active': brand === value,\n })}\n onClick={() => setBrand(value)}\n aria-label={`Switch to ${label} color scheme`}\n aria-pressed={brand === value}\n title={label}\n >\n <span\n className=\"ds-color-picker__dot\"\n style={{ '--swatch-color': color } as React.CSSProperties}\n />\n </button>\n ))}\n\n {/* Custom color — clicking the dot opens the native color picker */}\n {!hideCustom && (\n <label\n className={clsx('ds-color-picker__swatch', 'ds-color-picker__swatch--custom', {\n 'ds-color-picker__swatch--active': brand === 'custom',\n })}\n title={`Custom: ${customColor}`}\n >\n <span\n className=\"ds-color-picker__dot\"\n style={{ '--swatch-color': customColor } as React.CSSProperties}\n />\n <input\n type=\"color\"\n value={customColor}\n onChange={(e) => setCustomColor(e.target.value)}\n className=\"ds-color-picker__native-input\"\n aria-label=\"Pick a custom accent color\"\n />\n </label>\n )}\n </div>\n );\n },\n);\n\nColorPicker.displayName = 'ColorPicker';\n"]}
|