@carissa-io/theme-default 0.3.5 → 0.3.6

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/DESIGN.md CHANGED
@@ -306,6 +306,19 @@ The sweep is a band of `--c-background` at 60%, 1.5s per pass; with `prefers-red
306
306
  From [components-progress](components/components-progress): `Progress` as a bar (0.25, 0.5 or 0.75rem tall, square ends) or a ring (1.5, 2.5 or 4rem). The track is `--c-surface-active` and the fill `--c-primary` (black in light, white in dark): 16.67:1 and 15.13:1 on
307
307
  the track, well above the 3:1 of a graphic. The visible percentage is bold `--c-text`. Indeterminate slides (bar) or turns (ring) in 1.4s; with reduced motion both become a slow opacity pulse (2s).
308
308
 
309
+ ## Tooltip
310
+ From [components-tooltip](components/components-tooltip): `Tooltip`, a short hint on hover and keyboard focus. **The bubble is inverted**: `--c-text` as the background and `--c-background` as the text, so it stands out from
311
+ the page in both modes and needs no shadow. Light: white text on `#171717`, 17.93:1; dark: `#0a0a0a` text on `#f5f5f5`, 18.16:1 (the same ratios separate the bubble from the page as a graphic). Square corners, 0.875rem text,
312
+ 0.5rem padding on the block axis and 0.75rem on the inline one, at most 20rem wide, a 0.5rem arrow, 0.5rem from the trigger. The fade follows `$transition-duration` (0.2s) and is removed with reduced motion. It opens after 300ms of hover
313
+ or focus, stays open while the pointer is over it and closes on `Escape`; the bubble is `role="tooltip"` and the trigger gets `aria-describedby`. The hint is never the only way to get information (touch has no hover).
314
+
315
+ ## Prose
316
+ From [components-prose](components/components-prose): `Prose`, raw HTML content (markdown, a CMS, an article) with the same hierarchy as `Heading` and `Text`. Body text is `--c-text` at 1rem and a 1.6 line height, 65ch wide (small and
317
+ large scale the text and the headings by 0.875 and 1.125). Headings use the type scale tokens: `h1` and `h2` black (900), `h3` to `h6` bold, with the line heights of the typography block. Links are `--c-primary` and always underlined
318
+ (21:1 light, 19.8:1 dark), `--c-primary-hover` on hover (15.13:1 and 15.72:1). The quote edge, the `hr` and the table borders are `--c-muted` (4.74:1 light, 7.85:1 dark, above the 3:1 of a graphic); the quote text and the figure
319
+ caption are `--c-muted` on the page background too. Code, `pre`, `kbd` and the table head sit on `--c-surface` with `--c-text` (16.44:1 in both modes); `kbd` has a `--c-muted` edge. Everything is square (`$radius`), code uses `$font-family-mono`.
320
+ `--c-muted` is not used for text on `--c-surface` (4.35:1 in light).
321
+
309
322
  ## Keyboard focus (all controls)
310
323
  One rule keeps the controls coherent: **an outlined control thickens its own border from 1px to 2px, black** (text fields,
311
324
  select, combobox, date picker, textarea, upload, empty checkbox, off switch, radio, secondary and ghost buttons); **a filled
package/README.md CHANGED
@@ -142,7 +142,7 @@ it: check the names against the theme's `scss/_tokens.scss` before you switch.
142
142
 
143
143
  ## What it configures
144
144
  `components-input`, `-button`, `-checkbox`, `-switch`, `-radio-group`, `-slider`, `-popover`, `-listbox`, `-select`,
145
- `-combobox`, `-upload`, `-calendar`, `-date-picker`, `-search`, `-typography`, `-card`, `-alert`, `-spinner`, `-modal`, `-toast`, `-divider`, `-badge`, `-tag`, `-link`, `-avatar`, `-skeleton` and `-progress`. `components-email`, `-password`, `-url` and `-textarea`
145
+ `-combobox`, `-upload`, `-calendar`, `-date-picker`, `-search`, `-typography`, `-card`, `-alert`, `-spinner`, `-modal`, `-toast`, `-divider`, `-badge`, `-tag`, `-link`, `-avatar`, `-skeleton`, `-progress`, `-tooltip` and `-prose`. `components-email`, `-password`, `-url` and `-textarea`
146
146
  are styled through the input.
147
147
 
148
148
  ## Change a value
package/dist/index.css CHANGED
@@ -2304,3 +2304,284 @@ hr.c-divider {
2304
2304
  animation: c-progress-pulse 2s ease-in-out infinite;
2305
2305
  }
2306
2306
  }
2307
+ .c-tooltip {
2308
+ position: relative;
2309
+ display: inline-block;
2310
+ }
2311
+
2312
+ .c-tooltip__bubble {
2313
+ position: absolute;
2314
+ z-index: 1000;
2315
+ box-sizing: border-box;
2316
+ width: max-content;
2317
+ max-width: 20rem;
2318
+ padding: 0.5rem 0.75rem;
2319
+ font-size: 0.875rem;
2320
+ font-weight: 400;
2321
+ line-height: 1.5;
2322
+ color: var(--c-background);
2323
+ text-align: start;
2324
+ overflow-wrap: break-word;
2325
+ white-space: normal;
2326
+ visibility: hidden;
2327
+ background: var(--c-text);
2328
+ border-radius: 0;
2329
+ box-shadow: none;
2330
+ opacity: 0;
2331
+ transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out;
2332
+ pointer-events: none;
2333
+ }
2334
+ .c-tooltip__bubble::before {
2335
+ position: absolute;
2336
+ content: "";
2337
+ }
2338
+ .c-tooltip__bubble::after {
2339
+ position: absolute;
2340
+ width: 0.5rem;
2341
+ height: 0.5rem;
2342
+ content: "";
2343
+ background: inherit;
2344
+ transform: rotate(45deg);
2345
+ }
2346
+ .c-tooltip__bubble--top, .c-tooltip__bubble--bottom {
2347
+ left: 50%;
2348
+ translate: -50% 0;
2349
+ }
2350
+ .c-tooltip__bubble--top::before, .c-tooltip__bubble--bottom::before {
2351
+ right: 0;
2352
+ left: 0;
2353
+ height: 0.5rem;
2354
+ }
2355
+ .c-tooltip__bubble--top::after, .c-tooltip__bubble--bottom::after {
2356
+ left: calc(50% - 0.5rem / 2);
2357
+ }
2358
+ .c-tooltip__bubble--top {
2359
+ bottom: calc(100% + 0.5rem);
2360
+ }
2361
+ .c-tooltip__bubble--top::before {
2362
+ top: 100%;
2363
+ }
2364
+ .c-tooltip__bubble--top::after {
2365
+ bottom: calc(0.5rem / -2);
2366
+ }
2367
+ .c-tooltip__bubble--bottom {
2368
+ top: calc(100% + 0.5rem);
2369
+ }
2370
+ .c-tooltip__bubble--bottom::before {
2371
+ bottom: 100%;
2372
+ }
2373
+ .c-tooltip__bubble--bottom::after {
2374
+ top: calc(0.5rem / -2);
2375
+ }
2376
+ .c-tooltip__bubble--left, .c-tooltip__bubble--right {
2377
+ top: 50%;
2378
+ translate: 0 -50%;
2379
+ }
2380
+ .c-tooltip__bubble--left::before, .c-tooltip__bubble--right::before {
2381
+ top: 0;
2382
+ bottom: 0;
2383
+ width: 0.5rem;
2384
+ }
2385
+ .c-tooltip__bubble--left::after, .c-tooltip__bubble--right::after {
2386
+ top: calc(50% - 0.5rem / 2);
2387
+ }
2388
+ .c-tooltip__bubble--left {
2389
+ right: calc(100% + 0.5rem);
2390
+ }
2391
+ .c-tooltip__bubble--left::before {
2392
+ left: 100%;
2393
+ }
2394
+ .c-tooltip__bubble--left::after {
2395
+ right: calc(0.5rem / -2);
2396
+ }
2397
+ .c-tooltip__bubble--right {
2398
+ left: calc(100% + 0.5rem);
2399
+ }
2400
+ .c-tooltip__bubble--right::before {
2401
+ right: 100%;
2402
+ }
2403
+ .c-tooltip__bubble--right::after {
2404
+ left: calc(0.5rem / -2);
2405
+ }
2406
+
2407
+ .c-tooltip--open > .c-tooltip__bubble {
2408
+ visibility: visible;
2409
+ opacity: 1;
2410
+ pointer-events: auto;
2411
+ }
2412
+
2413
+ @media (prefers-reduced-motion: reduce) {
2414
+ .c-tooltip__bubble {
2415
+ transition: none;
2416
+ }
2417
+ }
2418
+ .c-prose {
2419
+ --c-prose-scale: 1;
2420
+ max-width: 65ch;
2421
+ font-family: "Helvetica Neue", Helvetica, Arial, "Liberation Sans", sans-serif;
2422
+ font-size: calc(1rem * var(--c-prose-scale));
2423
+ line-height: 1.6;
2424
+ color: var(--c-text);
2425
+ }
2426
+ .c-prose--sm {
2427
+ --c-prose-scale: 0.875;
2428
+ }
2429
+ .c-prose--md {
2430
+ --c-prose-scale: 1;
2431
+ }
2432
+ .c-prose--lg {
2433
+ --c-prose-scale: 1.125;
2434
+ }
2435
+ .c-prose p,
2436
+ .c-prose ul,
2437
+ .c-prose ol,
2438
+ .c-prose blockquote,
2439
+ .c-prose pre,
2440
+ .c-prose figure,
2441
+ .c-prose table {
2442
+ margin: 1.25em 0;
2443
+ }
2444
+ .c-prose h1,
2445
+ .c-prose h2,
2446
+ .c-prose h3,
2447
+ .c-prose h4,
2448
+ .c-prose h5,
2449
+ .c-prose h6 {
2450
+ margin: 1.75em 0 0.5em;
2451
+ font-family: "Helvetica Neue", Helvetica, Arial, "Liberation Sans", sans-serif;
2452
+ color: var(--c-text);
2453
+ }
2454
+ .c-prose h1 {
2455
+ font-size: calc(2.5rem * var(--c-prose-scale));
2456
+ font-weight: 900;
2457
+ line-height: 1.1;
2458
+ }
2459
+ .c-prose h2 {
2460
+ font-size: calc(1.75rem * var(--c-prose-scale));
2461
+ font-weight: 900;
2462
+ line-height: 1.2;
2463
+ }
2464
+ .c-prose h3 {
2465
+ font-size: calc(1.25rem * var(--c-prose-scale));
2466
+ font-weight: 700;
2467
+ line-height: 1.3;
2468
+ }
2469
+ .c-prose h4 {
2470
+ font-size: calc(1.125rem * var(--c-prose-scale));
2471
+ font-weight: 700;
2472
+ line-height: 1.3;
2473
+ }
2474
+ .c-prose h5 {
2475
+ font-size: calc(1rem * var(--c-prose-scale));
2476
+ font-weight: 700;
2477
+ line-height: 1.4;
2478
+ }
2479
+ .c-prose h6 {
2480
+ font-size: calc(0.875rem * var(--c-prose-scale));
2481
+ font-weight: 700;
2482
+ line-height: 1.4;
2483
+ }
2484
+ .c-prose ul,
2485
+ .c-prose ol {
2486
+ padding-inline-start: 1.5em;
2487
+ }
2488
+ .c-prose ul {
2489
+ list-style: disc;
2490
+ }
2491
+ .c-prose ol {
2492
+ list-style: decimal;
2493
+ }
2494
+ .c-prose li {
2495
+ margin: 0.25em 0;
2496
+ }
2497
+ .c-prose li > ul,
2498
+ .c-prose li > ol {
2499
+ margin: 0.25em 0 0;
2500
+ }
2501
+ .c-prose a {
2502
+ color: var(--c-primary);
2503
+ text-decoration: underline;
2504
+ }
2505
+ .c-prose a:hover {
2506
+ color: var(--c-primary-hover);
2507
+ text-decoration: underline;
2508
+ }
2509
+ .c-prose blockquote {
2510
+ padding: 0 0 0 1em;
2511
+ color: var(--c-muted);
2512
+ border-inline-start: 4px solid var(--c-muted);
2513
+ }
2514
+ .c-prose code,
2515
+ .c-prose kbd {
2516
+ font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono", monospace;
2517
+ font-size: 0.875em;
2518
+ }
2519
+ .c-prose code {
2520
+ padding: 0.15em 0.4em;
2521
+ color: var(--c-text);
2522
+ background: var(--c-surface);
2523
+ border-radius: 0;
2524
+ }
2525
+ .c-prose kbd {
2526
+ padding: 0.1em 0.4em;
2527
+ color: var(--c-text);
2528
+ background: var(--c-surface);
2529
+ border: 1px solid var(--c-muted);
2530
+ border-bottom-width: 2px;
2531
+ border-radius: 0;
2532
+ }
2533
+ .c-prose pre {
2534
+ padding: 1rem;
2535
+ overflow: auto;
2536
+ color: var(--c-text);
2537
+ background: var(--c-surface);
2538
+ border-radius: 0;
2539
+ }
2540
+ .c-prose pre code {
2541
+ padding: 0;
2542
+ font-size: 0.875em;
2543
+ color: inherit;
2544
+ background: none;
2545
+ border-radius: 0;
2546
+ }
2547
+ .c-prose hr {
2548
+ height: 0;
2549
+ margin: 2em 0;
2550
+ border: 0;
2551
+ border-top: 1px solid var(--c-muted);
2552
+ }
2553
+ .c-prose img {
2554
+ display: block;
2555
+ max-width: 100%;
2556
+ height: auto;
2557
+ border-radius: 0;
2558
+ }
2559
+ .c-prose figure > img {
2560
+ margin-inline: auto;
2561
+ }
2562
+ .c-prose figcaption {
2563
+ margin-top: 0.5em;
2564
+ font-size: 0.875em;
2565
+ color: var(--c-muted);
2566
+ }
2567
+ .c-prose table {
2568
+ width: 100%;
2569
+ border-collapse: collapse;
2570
+ }
2571
+ .c-prose th,
2572
+ .c-prose td {
2573
+ padding: 0.5rem 0.75rem;
2574
+ text-align: start;
2575
+ vertical-align: top;
2576
+ border: 1px solid var(--c-muted);
2577
+ }
2578
+ .c-prose th {
2579
+ font-weight: 700;
2580
+ background: var(--c-surface);
2581
+ }
2582
+ .c-prose > :first-child {
2583
+ margin-top: 0;
2584
+ }
2585
+ .c-prose > :last-child {
2586
+ margin-bottom: 0;
2587
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carissa-io/theme-default",
3
- "version": "0.3.5",
3
+ "version": "0.3.6",
4
4
  "description": "Carissa UI: the default theme (Swiss minimalism) as SCSS variable overrides of the Carissa components, with a compiled CSS build",
5
5
  "type": "module",
6
6
  "style": "dist/index.css",
@@ -64,7 +64,9 @@
64
64
  "@carissa-io/components-link": "^0.1.0",
65
65
  "@carissa-io/components-avatar": "^0.1.0",
66
66
  "@carissa-io/components-skeleton": "^0.1.0",
67
- "@carissa-io/components-progress": "^0.1.0"
67
+ "@carissa-io/components-progress": "^0.1.0",
68
+ "@carissa-io/components-tooltip": "^0.1.0",
69
+ "@carissa-io/components-prose": "^0.1.0"
68
70
  },
69
71
  "peerDependenciesMeta": {
70
72
  "@carissa-io/components-input": {
@@ -159,6 +161,12 @@
159
161
  },
160
162
  "@carissa-io/components-progress": {
161
163
  "optional": true
164
+ },
165
+ "@carissa-io/components-tooltip": {
166
+ "optional": true
167
+ },
168
+ "@carissa-io/components-prose": {
169
+ "optional": true
162
170
  }
163
171
  },
164
172
  "devDependencies": {
@@ -178,6 +186,7 @@
178
186
  "@carissa-io/components-modal": "^0.1.0",
179
187
  "@carissa-io/components-popover": "^0.1.1",
180
188
  "@carissa-io/components-progress": "^0.1.0",
189
+ "@carissa-io/components-prose": "^0.1.0",
181
190
  "@carissa-io/components-radio-group": "^0.1.1",
182
191
  "@carissa-io/components-search": "^0.1.1",
183
192
  "@carissa-io/components-select": "^0.1.1",
@@ -187,6 +196,7 @@
187
196
  "@carissa-io/components-switch": "^0.1.1",
188
197
  "@carissa-io/components-tag": "^0.1.0",
189
198
  "@carissa-io/components-toast": "^0.1.0",
199
+ "@carissa-io/components-tooltip": "^0.1.0",
190
200
  "@carissa-io/components-typography": "^0.1.0",
191
201
  "@carissa-io/components-upload": "^0.1.1",
192
202
  "sass-embedded": "^1.105.1",
package/scss/index.scss CHANGED
@@ -853,3 +853,87 @@
853
853
  $c-progress-duration: 1.4s,
854
854
  $c-progress-duration-reduced: 2s
855
855
  );
856
+
857
+ // Tooltip: the bubble is inverted (--c-text as the background, --c-background as the text), so it reads against the page in
858
+ // both modes: a near-black bubble with white text in light, a near-white one with near-black text in dark. Square like the
859
+ // rest, no shadow (the contrast is the separation), 0.875rem text, at most 20rem wide, a 0.5rem arrow. The fade follows
860
+ // $transition-duration and the package removes it with reduced motion. No other block forwards it, so it can go anywhere.
861
+ @use '@carissa-io/components-tooltip/scss' as tooltip with (
862
+ $c-tooltip-background: $var-text,
863
+ $c-tooltip-color: $var-background,
864
+ $c-tooltip-radius: $radius,
865
+ $c-tooltip-padding: 0.5rem 0.75rem,
866
+ $c-tooltip-font-size: $font-size-small,
867
+ $c-tooltip-line-height: $line-height-normal,
868
+ $c-tooltip-max-width: 20rem,
869
+ $c-tooltip-shadow: none,
870
+ $c-tooltip-offset: 0.5rem,
871
+ $c-tooltip-arrow-size: 0.5rem,
872
+ $c-tooltip-transition-duration: $transition-duration
873
+ );
874
+
875
+ // Prose: raw HTML content with the same hierarchy as Heading and Text: the type scale tokens ($font-size-h1 to h6, the weights
876
+ // and line heights of the typography block), body text in --c-text at a 1.6 line height, 65ch measure. Links are --c-primary
877
+ // and underlined like Link; the quote edge, the rules and the table borders are --c-muted (the card and field edge), code, pre
878
+ // and the table head sit on --c-surface. Colors only through the custom properties. No other block forwards it.
879
+ @use '@carissa-io/components-prose/scss' as prose with (
880
+ $c-prose-max-width: 65ch,
881
+ $c-prose-font-family: $font-family,
882
+ $c-prose-font-size: $font-size-body,
883
+ $c-prose-color: $var-text,
884
+ $c-prose-line-height: 1.6,
885
+ $c-prose-gap: 1.25em,
886
+
887
+ $c-prose-heading-font-family: $font-family,
888
+ $c-prose-heading-color: $var-text,
889
+
890
+ $c-prose-h1-font-size: $font-size-h1,
891
+ $c-prose-h1-font-weight: $font-weight-black,
892
+ $c-prose-h1-line-height: 1.1,
893
+ $c-prose-h2-font-size: $font-size-h2,
894
+ $c-prose-h2-font-weight: $font-weight-black,
895
+ $c-prose-h2-line-height: 1.2,
896
+ $c-prose-h3-font-size: $font-size-h3,
897
+ $c-prose-h3-font-weight: $font-weight-bold,
898
+ $c-prose-h3-line-height: $line-height-tight,
899
+ $c-prose-h4-font-size: $font-size-h4,
900
+ $c-prose-h4-font-weight: $font-weight-bold,
901
+ $c-prose-h4-line-height: $line-height-tight,
902
+ $c-prose-h5-font-size: $font-size-h5,
903
+ $c-prose-h5-font-weight: $font-weight-bold,
904
+ $c-prose-h5-line-height: 1.4,
905
+ $c-prose-h6-font-size: $font-size-h6,
906
+ $c-prose-h6-font-weight: $font-weight-bold,
907
+ $c-prose-h6-line-height: 1.4,
908
+
909
+ $c-prose-link-color: $var-primary,
910
+ $c-prose-link-decoration: underline,
911
+ $c-prose-link-hover-color: $var-primary-hover,
912
+ $c-prose-link-hover-decoration: underline,
913
+
914
+ $c-prose-blockquote-border-width: 4px,
915
+ $c-prose-blockquote-border-color: $var-muted,
916
+ $c-prose-blockquote-color: $var-muted,
917
+
918
+ $c-prose-code-font-family: $font-family-mono,
919
+ $c-prose-code-font-size: 0.875em,
920
+ $c-prose-code-background: $var-surface,
921
+ $c-prose-code-color: $var-text,
922
+ $c-prose-code-radius: $radius,
923
+ $c-prose-pre-background: $var-surface,
924
+ $c-prose-pre-color: $var-text,
925
+ $c-prose-pre-radius: $radius,
926
+
927
+ $c-prose-kbd-background: $var-surface,
928
+ $c-prose-kbd-color: $var-text,
929
+ $c-prose-kbd-border-color: $var-muted,
930
+ $c-prose-kbd-radius: $radius,
931
+
932
+ $c-prose-hr-color: $var-muted,
933
+ $c-prose-img-radius: $radius,
934
+ $c-prose-figcaption-color: $var-muted,
935
+
936
+ $c-prose-table-border-color: $var-muted,
937
+ $c-prose-table-head-background: $var-surface,
938
+ $c-prose-table-head-font-weight: $font-weight-bold
939
+ );