@happyvertical/smrt-ui 0.55.16 → 0.55.18

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 (166) hide show
  1. package/AGENTS.md +14 -0
  2. package/README.md +75 -0
  3. package/dist/components/calendar/Calendar.svelte +59 -56
  4. package/dist/components/calendar/CalendarView.svelte +80 -77
  5. package/dist/components/calendar/DayView.svelte +39 -36
  6. package/dist/components/chat/MessageBubble.svelte +26 -23
  7. package/dist/components/chat/ReactionPicker.svelte +12 -9
  8. package/dist/components/chat/TypingIndicator.svelte +12 -9
  9. package/dist/components/data/CollectionList.svelte +11 -8
  10. package/dist/components/data/CollectionToolbar.svelte +5 -2
  11. package/dist/components/data/DataTable.svelte +74 -59
  12. package/dist/components/data/ListSortSelect.svelte +8 -5
  13. package/dist/components/data/SortableHeader.svelte +10 -7
  14. package/dist/components/display/ConfidenceBadge.svelte +11 -8
  15. package/dist/components/display/CurrencyDisplay.svelte +7 -4
  16. package/dist/components/display/DateDisplay.svelte +6 -3
  17. package/dist/components/display/Icon.svelte +4 -1
  18. package/dist/components/display/StatusBadge.svelte +9 -6
  19. package/dist/components/feedback/Alert.svelte +12 -8
  20. package/dist/components/feedback/ConfirmDialog.svelte +13 -10
  21. package/dist/components/feedback/LoadingOverlay.svelte +37 -34
  22. package/dist/components/feedback/Meter.svelte +4 -1
  23. package/dist/components/feedback/Modal.svelte +26 -21
  24. package/dist/components/feedback/PhoneSheet.svelte +6 -3
  25. package/dist/components/feedback/Progress.svelte +8 -5
  26. package/dist/components/feedback/ProgressBar.svelte +13 -10
  27. package/dist/components/feedback/Spinner.svelte +4 -1
  28. package/dist/components/feedback/ToastViewport.svelte +18 -15
  29. package/dist/components/feedback/WorkingStrip.svelte +6 -3
  30. package/dist/components/forms/CameraCapture.svelte +8 -5
  31. package/dist/components/forms/Checkbox.svelte +11 -8
  32. package/dist/components/forms/Combobox.svelte +5 -2
  33. package/dist/components/forms/DatePicker.svelte +7 -2
  34. package/dist/components/forms/DictationButton.svelte +17 -14
  35. package/dist/components/forms/DictationStatus.svelte +12 -9
  36. package/dist/components/forms/ErrorSummary.svelte +4 -1
  37. package/dist/components/forms/FieldLabel.svelte +9 -6
  38. package/dist/components/forms/Fieldset.svelte +4 -1
  39. package/dist/components/forms/FilePicker.svelte +5 -2
  40. package/dist/components/forms/Form.svelte +1 -1
  41. package/dist/components/forms/FormActionBar.svelte +4 -1
  42. package/dist/components/forms/FormGroup.svelte +6 -3
  43. package/dist/components/forms/Input.svelte +22 -15
  44. package/dist/components/forms/InputGroup.svelte +6 -3
  45. package/dist/components/forms/Listbox.svelte +5 -2
  46. package/dist/components/forms/MultiSelect.svelte +4 -1
  47. package/dist/components/forms/Radio.svelte +9 -6
  48. package/dist/components/forms/RadioGroup.svelte +5 -2
  49. package/dist/components/forms/RangeSlider.svelte +5 -2
  50. package/dist/components/forms/RelationInput.svelte +7 -4
  51. package/dist/components/forms/SearchInput.svelte +7 -4
  52. package/dist/components/forms/SegmentedControl.svelte +6 -3
  53. package/dist/components/forms/Select.svelte +20 -13
  54. package/dist/components/forms/SignaturePad.svelte +8 -5
  55. package/dist/components/forms/Slider.svelte +5 -2
  56. package/dist/components/forms/StagedControlReview.svelte +15 -12
  57. package/dist/components/forms/Switch.svelte +8 -5
  58. package/dist/components/forms/TagsInput.svelte +5 -2
  59. package/dist/components/forms/Textarea.svelte +20 -13
  60. package/dist/components/forms/TimePicker.svelte +7 -2
  61. package/dist/components/forms/Toggle.svelte +14 -11
  62. package/dist/components/forms/ToggleButton.svelte +5 -2
  63. package/dist/components/layout/ActionGroup.svelte +4 -1
  64. package/dist/components/layout/Container.svelte +4 -1
  65. package/dist/components/layout/EmptyState.svelte +11 -8
  66. package/dist/components/layout/Footer.svelte +4 -1
  67. package/dist/components/layout/Grid.svelte +13 -10
  68. package/dist/components/layout/Header.svelte +4 -1
  69. package/dist/components/layout/Masthead.svelte +4 -1
  70. package/dist/components/layout/PageHeader.svelte +12 -9
  71. package/dist/components/layout/PageLayout.svelte +3 -0
  72. package/dist/components/layout/SummaryCard.svelte +9 -6
  73. package/dist/components/memberships/MembershipCard.svelte +5 -2
  74. package/dist/components/memberships/MembershipList.svelte +5 -2
  75. package/dist/components/nav/FilterChips.svelte +13 -10
  76. package/dist/components/nav/Tabs.svelte +75 -41
  77. package/dist/components/permissions/PermissionPicker.svelte +5 -2
  78. package/dist/components/roles/RoleBadge.svelte +8 -5
  79. package/dist/components/roles/RoleSelector.svelte +22 -19
  80. package/dist/components/theme/ThemeProvider.svelte +7 -4
  81. package/dist/components/ui/Accordion.svelte +4 -1
  82. package/dist/components/ui/AccordionItem.svelte +5 -2
  83. package/dist/components/ui/Avatar.svelte +10 -7
  84. package/dist/components/ui/Badge.svelte +6 -2
  85. package/dist/components/ui/Button.svelte +49 -37
  86. package/dist/components/ui/Card.svelte +18 -14
  87. package/dist/components/ui/Chip.svelte +41 -14
  88. package/dist/components/ui/Disclosure.svelte +5 -2
  89. package/dist/components/ui/Dropdown.svelte +33 -25
  90. package/dist/components/ui/IconToggle.svelte +12 -9
  91. package/dist/components/ui/IconToggle.svelte.d.ts +1 -1
  92. package/dist/components/ui/IconToggle.svelte.d.ts.map +1 -1
  93. package/dist/components/ui/IconToggleGroup.svelte +8 -5
  94. package/dist/components/ui/Pagination.svelte +11 -8
  95. package/dist/components/ui/Popover.svelte +9 -6
  96. package/dist/components/ui/Skeleton.svelte +10 -7
  97. package/dist/components/ui/Tooltip.svelte +13 -9
  98. package/dist/components/ui/Tree.svelte +12 -9
  99. package/dist/styles/layers.css +8 -0
  100. package/dist/styles/layers.d.ts +9 -0
  101. package/dist/styles/layers.d.ts.map +1 -0
  102. package/dist/styles/layers.js +8 -0
  103. package/dist/styles/tokens.css +27 -69
  104. package/dist/styles/unstyled.css +65 -0
  105. package/dist/svelte/playground/BaseControlsPreview.svelte +3 -0
  106. package/dist/svelte/playground/CalendarPreview.svelte +5 -2
  107. package/dist/svelte/playground/CapturePreview.svelte +3 -0
  108. package/dist/svelte/playground/CodeSelectorsPreview.svelte +3 -0
  109. package/dist/svelte/playground/CollectionsPreview.svelte +3 -0
  110. package/dist/svelte/playground/DataTablePreview.svelte +3 -0
  111. package/dist/svelte/playground/FeedbackPreview.svelte +3 -0
  112. package/dist/svelte/playground/InteractiveControlsPreview.svelte +3 -0
  113. package/dist/svelte/playground/StylelessPreview.svelte +110 -0
  114. package/dist/svelte/playground/StylelessPreview.svelte.d.ts +4 -0
  115. package/dist/svelte/playground/StylelessPreview.svelte.d.ts.map +1 -0
  116. package/dist/svelte/playground.d.ts.map +1 -1
  117. package/dist/svelte/playground.js +10 -0
  118. package/dist/test-support/setup.js +9 -0
  119. package/dist/theme/ThemeProvider.svelte +3 -0
  120. package/dist/themes/CUSTOM_THEME_GUIDE.md +40 -0
  121. package/dist/themes/README.md +151 -0
  122. package/dist/themes/ThemeProvider.svelte +181 -12
  123. package/dist/themes/ThemeProvider.svelte.d.ts +7 -2
  124. package/dist/themes/ThemeProvider.svelte.d.ts.map +1 -1
  125. package/dist/themes/components/ColorSchemeToggle.svelte +17 -14
  126. package/dist/themes/components/ThemeSwitcher.svelte +14 -11
  127. package/dist/themes/create-theme.d.ts +22 -1
  128. package/dist/themes/create-theme.d.ts.map +1 -1
  129. package/dist/themes/create-theme.js +100 -9
  130. package/dist/themes/css-generator.d.ts.map +1 -1
  131. package/dist/themes/css-generator.js +20 -20
  132. package/dist/themes/derive.d.ts +31 -0
  133. package/dist/themes/derive.d.ts.map +1 -0
  134. package/dist/themes/derive.js +183 -0
  135. package/dist/themes/glass/index.d.ts.map +1 -1
  136. package/dist/themes/glass/index.js +127 -14
  137. package/dist/themes/happyvertical/index.d.ts.map +1 -1
  138. package/dist/themes/happyvertical/index.js +101 -20
  139. package/dist/themes/index.d.ts +2 -2
  140. package/dist/themes/index.d.ts.map +1 -1
  141. package/dist/themes/index.js +1 -1
  142. package/dist/themes/material/index.d.ts.map +1 -1
  143. package/dist/themes/material/index.js +129 -28
  144. package/dist/themes/required-tokens.generated.json +201 -0
  145. package/dist/themes/shared.d.ts +35 -0
  146. package/dist/themes/shared.d.ts.map +1 -1
  147. package/dist/themes/shared.js +32 -0
  148. package/dist/themes/smrt/index.d.ts +3 -0
  149. package/dist/themes/smrt/index.d.ts.map +1 -1
  150. package/dist/themes/smrt/index.js +108 -26
  151. package/dist/themes/studio/index.d.ts.map +1 -1
  152. package/dist/themes/studio/index.js +116 -40
  153. package/dist/themes/styles/base.css +229 -1
  154. package/dist/themes/styles/glass.css +107 -20
  155. package/dist/themes/styles/happyvertical.css +111 -15
  156. package/dist/themes/styles/material.css +127 -35
  157. package/dist/themes/styles/smrt.css +126 -31
  158. package/dist/themes/styles/studio.css +132 -37
  159. package/dist/themes/theme-script.d.ts +3 -1
  160. package/dist/themes/theme-script.d.ts.map +1 -1
  161. package/dist/themes/theme-script.js +7 -2
  162. package/dist/themes/types.d.ts +118 -6
  163. package/dist/themes/types.d.ts.map +1 -1
  164. package/dist/utils/theme/typography.d.ts +21 -21
  165. package/dist/utils/theme/typography.js +21 -21
  166. package/package.json +8 -2
@@ -329,7 +329,7 @@ function spanNote(entry: CalendarEntry): string | null {
329
329
  }
330
330
 
331
331
  function itemStyle(item: CalendarItem): string {
332
- return item.color ? `--cv-item: ${item.color};` : '';
332
+ return item.color ? `--smrt-calendar-view-item: ${item.color};` : '';
333
333
  }
334
334
 
335
335
  // ---- Navigation and selection ----
@@ -531,7 +531,7 @@ $effect(() => {
531
531
  bind:this={root}
532
532
  class="cv {className}"
533
533
  class:cv--agenda={view === 'agenda'}
534
- data-view={view}
534
+ data-view={view} data-smrt-component="CalendarView"
535
535
  >
536
536
  <header class="cv-header">
537
537
  <svelte:element
@@ -589,8 +589,8 @@ $effect(() => {
589
589
  <div
590
590
  class="cv-week"
591
591
  role="row"
592
- style="grid-template-rows: var(--cv-daynum-h) {week.lanes > 0
593
- ? `repeat(${week.lanes}, var(--cv-band-row))`
592
+ style="grid-template-rows: var(--smrt-calendar-view-daynum-h) {week.lanes > 0
593
+ ? `repeat(${week.lanes}, var(--smrt-calendar-view-band-row))`
594
594
  : ''} auto;"
595
595
  >
596
596
  {#each week.days as day, column (day.key)}
@@ -635,7 +635,7 @@ $effect(() => {
635
635
  {/if}
636
636
  <div
637
637
  class="cv-day-body"
638
- style="padding-top: calc({week.lanes} * var(--cv-band-row));"
638
+ style="padding-top: calc({week.lanes} * var(--smrt-calendar-view-band-row));"
639
639
  aria-hidden="true"
640
640
  >
641
641
  {#each day.visible as entry (entry.item.id)}
@@ -819,33 +819,35 @@ $effect(() => {
819
819
  </div>
820
820
 
821
821
  <style>
822
+ @layer smrt.reset, smrt.structure, smrt.theme;
823
+ @layer smrt.theme {
822
824
  .cv {
823
- --cv-border: var(--smrt-color-outline-variant, #c4c6d0);
824
- --cv-surface: var(--smrt-color-surface, #ffffff);
825
- --cv-muted: var(--smrt-color-on-surface-variant, #44474e);
826
- --cv-text: var(--smrt-color-on-surface, #1b1b1f);
827
- --cv-daynum-h: 2.75rem;
828
- --cv-band-row: 1.625rem;
829
- --cv-target: 2.75rem;
830
- color: var(--cv-text);
831
- background: var(--cv-surface);
832
- border: 1px solid var(--cv-border);
833
- border-radius: var(--smrt-radius-large, 12px);
825
+ --smrt-calendar-view-border: var(--smrt-color-outline-variant);
826
+ --smrt-calendar-view-surface: var(--smrt-color-surface);
827
+ --smrt-calendar-view-muted: var(--smrt-color-on-surface-variant);
828
+ --smrt-calendar-view-text: var(--smrt-color-on-surface);
829
+ --smrt-calendar-view-daynum-h: 2.75rem;
830
+ --smrt-calendar-view-band-row: 1.625rem;
831
+ --smrt-calendar-view-target: 2.75rem;
832
+ color: var(--smrt-calendar-view-text);
833
+ background: var(--smrt-calendar-view-surface);
834
+ border: 1px solid var(--smrt-calendar-view-border);
835
+ border-radius: var(--smrt-radius-large);
834
836
  overflow: hidden;
835
837
  min-width: 0;
836
838
  container-type: inline-size;
837
839
  }
838
840
 
839
- [data-tone='primary'] { --cv-tone: var(--smrt-color-primary, #005ac1); --cv-fill: var(--smrt-color-primary-container, #d8e2ff); --cv-ink: var(--smrt-color-on-primary-container, #001a41); }
840
- [data-tone='secondary'] { --cv-tone: var(--smrt-color-secondary, #575e71); --cv-fill: var(--smrt-color-secondary-container, #dbe2f9); --cv-ink: var(--smrt-color-on-secondary-container, #141b2c); }
841
- [data-tone='tertiary'] { --cv-tone: var(--smrt-color-tertiary, #715573); --cv-fill: var(--smrt-color-tertiary-container, #fbd7fc); --cv-ink: var(--smrt-color-on-tertiary-container, #29132d); }
842
- [data-tone='success'] { --cv-tone: var(--smrt-color-success, #1b6d2f); --cv-fill: var(--smrt-color-success-container, #a4f5a9); --cv-ink: var(--smrt-color-on-success-container, #002108); }
843
- [data-tone='warning'] { --cv-tone: var(--smrt-color-warning, #7a5900); --cv-fill: var(--smrt-color-warning-container, #ffdea3); --cv-ink: var(--smrt-color-on-warning-container, #261900); }
844
- [data-tone='error'] { --cv-tone: var(--smrt-color-error, #ba1a1a); --cv-fill: var(--smrt-color-error-container, #ffdad6); --cv-ink: var(--smrt-color-on-error-container, #410002); }
845
- [data-tone='neutral'] { --cv-tone: var(--smrt-color-outline, #74777f); --cv-fill: var(--smrt-color-surface-container-high, #e8e7ec); --cv-ink: var(--smrt-color-on-surface, #1b1b1f); }
841
+ [data-tone='primary'] { --smrt-calendar-view-tone: var(--smrt-color-primary); --smrt-calendar-view-fill: var(--smrt-color-primary-container); --smrt-calendar-view-ink: var(--smrt-color-on-primary-container); }
842
+ [data-tone='secondary'] { --smrt-calendar-view-tone: var(--smrt-color-secondary); --smrt-calendar-view-fill: var(--smrt-color-secondary-container); --smrt-calendar-view-ink: var(--smrt-color-on-secondary-container); }
843
+ [data-tone='tertiary'] { --smrt-calendar-view-tone: var(--smrt-color-tertiary); --smrt-calendar-view-fill: var(--smrt-color-tertiary-container); --smrt-calendar-view-ink: var(--smrt-color-on-tertiary-container); }
844
+ [data-tone='success'] { --smrt-calendar-view-tone: var(--smrt-color-success); --smrt-calendar-view-fill: var(--smrt-color-success-container); --smrt-calendar-view-ink: var(--smrt-color-on-success-container); }
845
+ [data-tone='warning'] { --smrt-calendar-view-tone: var(--smrt-color-warning); --smrt-calendar-view-fill: var(--smrt-color-warning-container); --smrt-calendar-view-ink: var(--smrt-color-on-warning-container); }
846
+ [data-tone='error'] { --smrt-calendar-view-tone: var(--smrt-color-error); --smrt-calendar-view-fill: var(--smrt-color-error-container); --smrt-calendar-view-ink: var(--smrt-color-on-error-container); }
847
+ [data-tone='neutral'] { --smrt-calendar-view-tone: var(--smrt-color-outline); --smrt-calendar-view-fill: var(--smrt-color-surface-container-high); --smrt-calendar-view-ink: var(--smrt-color-on-surface); }
846
848
 
847
849
  /* An explicit item color wins over the tone. */
848
- [style*='--cv-item'] { --cv-tone: var(--cv-item); --cv-fill: color-mix(in srgb, var(--cv-item) 22%, var(--cv-surface)); --cv-ink: var(--cv-text); }
850
+ [style*='--smrt-calendar-view-item'] { --smrt-calendar-view-tone: var(--smrt-calendar-view-item); --smrt-calendar-view-fill: color-mix(in srgb, var(--smrt-calendar-view-item) 22%, var(--smrt-calendar-view-surface)); --smrt-calendar-view-ink: var(--smrt-calendar-view-text); }
849
851
 
850
852
  .cv-header {
851
853
  display: flex;
@@ -853,8 +855,8 @@ $effect(() => {
853
855
  justify-content: space-between;
854
856
  gap: var(--smrt-spacing-2, 0.5rem);
855
857
  padding: var(--smrt-spacing-2, 0.5rem) var(--smrt-spacing-3, 0.75rem);
856
- background: var(--smrt-color-surface-container-low, #f5f3f7);
857
- border-bottom: 1px solid var(--cv-border);
858
+ background: var(--smrt-color-surface-container-low);
859
+ border-bottom: 1px solid var(--smrt-calendar-view-border);
858
860
  }
859
861
 
860
862
  .cv-title {
@@ -878,27 +880,27 @@ $effect(() => {
878
880
  display: inline-flex;
879
881
  align-items: center;
880
882
  justify-content: center;
881
- min-width: var(--cv-target);
882
- min-height: var(--cv-target);
883
+ min-width: var(--smrt-calendar-view-target);
884
+ min-height: var(--smrt-calendar-view-target);
883
885
  border: 1px solid transparent;
884
- border-radius: var(--smrt-radius-medium, 8px);
886
+ border-radius: var(--smrt-radius-medium);
885
887
  background: transparent;
886
- color: var(--cv-muted);
888
+ color: var(--smrt-calendar-view-muted);
887
889
  font: inherit;
888
890
  cursor: pointer;
889
891
  }
890
892
 
891
893
  .cv-today-btn {
892
894
  padding: 0 var(--smrt-spacing-3, 0.75rem);
893
- border-color: var(--cv-border);
894
- color: var(--smrt-color-primary, #005ac1);
895
+ border-color: var(--smrt-calendar-view-border);
896
+ color: var(--smrt-color-primary);
895
897
  font-weight: 500;
896
898
  }
897
899
 
898
900
  .cv-icon-btn:hover,
899
901
  .cv-today-btn:hover {
900
- background: var(--smrt-color-surface-container-high, #e8e7ec);
901
- color: var(--cv-text);
902
+ background: var(--smrt-color-surface-container-high);
903
+ color: var(--smrt-calendar-view-text);
902
904
  }
903
905
 
904
906
  .cv-sr {
@@ -915,8 +917,8 @@ $effect(() => {
915
917
 
916
918
  button:focus-visible,
917
919
  a:focus-visible {
918
- outline: 2px solid var(--smrt-color-primary, #005ac1);
919
- outline-offset: 2px;
920
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
921
+ outline-offset: var(--smrt-focus-ring-offset);
920
922
  }
921
923
 
922
924
  /* ---- Month grid ---- */
@@ -936,13 +938,13 @@ $effect(() => {
936
938
  text-align: center;
937
939
  font-size: var(--smrt-typography-label-medium-size, 0.75rem);
938
940
  font-weight: 500;
939
- color: var(--cv-muted);
940
- border-bottom: 1px solid var(--cv-border);
941
+ color: var(--smrt-calendar-view-muted);
942
+ border-bottom: 1px solid var(--smrt-calendar-view-border);
941
943
  }
942
944
 
943
945
  .cv-week {
944
946
  position: relative;
945
- border-bottom: 1px solid var(--cv-border);
947
+ border-bottom: 1px solid var(--smrt-calendar-view-border);
946
948
  }
947
949
 
948
950
  .cv-week:last-child {
@@ -955,7 +957,7 @@ $effect(() => {
955
957
  flex-direction: column;
956
958
  min-width: 0;
957
959
  min-height: 6.5rem;
958
- border-right: 1px solid var(--cv-border);
960
+ border-right: 1px solid var(--smrt-calendar-view-border);
959
961
  }
960
962
 
961
963
  .cv-day:nth-child(7) {
@@ -963,21 +965,21 @@ $effect(() => {
963
965
  }
964
966
 
965
967
  .cv-day--out .cv-daynum {
966
- color: var(--cv-muted);
968
+ color: var(--smrt-calendar-view-muted);
967
969
  opacity: 0.7;
968
970
  }
969
971
 
970
972
  .cv-day--selected {
971
- background: var(--smrt-color-surface-container, #efedf1);
972
- box-shadow: inset 0 0 0 2px var(--smrt-color-primary, #005ac1);
973
+ background: var(--smrt-color-surface-container);
974
+ box-shadow: inset 0 0 0 2px var(--smrt-color-primary);
973
975
  }
974
976
 
975
977
  .cv-daynum {
976
978
  display: flex;
977
979
  align-items: flex-start;
978
980
  justify-content: flex-end;
979
- height: var(--cv-daynum-h);
980
- min-height: var(--cv-target);
981
+ height: var(--smrt-calendar-view-daynum-h);
982
+ min-height: var(--smrt-calendar-view-target);
981
983
  padding: var(--smrt-spacing-2, 0.5rem);
982
984
  border: 0;
983
985
  background: transparent;
@@ -991,7 +993,7 @@ $effect(() => {
991
993
 
992
994
  .cv-day--today .cv-daynum {
993
995
  font-weight: 700;
994
- color: var(--smrt-color-primary, #005ac1);
996
+ color: var(--smrt-color-primary);
995
997
  }
996
998
 
997
999
  .cv-day-body {
@@ -1010,7 +1012,7 @@ $effect(() => {
1010
1012
  min-width: 0;
1011
1013
  padding: 1px var(--smrt-spacing-1, 0.25rem);
1012
1014
  border: 0;
1013
- border-radius: var(--smrt-radius-small, 4px);
1015
+ border-radius: var(--smrt-radius-small);
1014
1016
  background: transparent;
1015
1017
  color: inherit;
1016
1018
  font: inherit;
@@ -1029,12 +1031,12 @@ $effect(() => {
1029
1031
  width: 0.5rem;
1030
1032
  height: 0.5rem;
1031
1033
  border-radius: 50%;
1032
- background: var(--cv-tone);
1034
+ background: var(--smrt-calendar-view-tone);
1033
1035
  }
1034
1036
 
1035
1037
  .cv-chip:hover,
1036
1038
  .cv-more:hover {
1037
- background: var(--smrt-color-surface-container-high, #e8e7ec);
1039
+ background: var(--smrt-color-surface-container-high);
1038
1040
  }
1039
1041
 
1040
1042
  .cv-chip,
@@ -1043,7 +1045,7 @@ $effect(() => {
1043
1045
  }
1044
1046
 
1045
1047
  .cv-chip-time {
1046
- color: var(--cv-muted);
1048
+ color: var(--smrt-calendar-view-muted);
1047
1049
  flex-shrink: 0;
1048
1050
  }
1049
1051
 
@@ -1073,7 +1075,7 @@ $effect(() => {
1073
1075
  }
1074
1076
 
1075
1077
  .cv-more {
1076
- color: var(--smrt-color-primary, #005ac1);
1078
+ color: var(--smrt-color-primary);
1077
1079
  font-weight: 500;
1078
1080
  }
1079
1081
 
@@ -1081,17 +1083,17 @@ $effect(() => {
1081
1083
  z-index: 1;
1082
1084
  align-self: center;
1083
1085
  margin: 0 var(--smrt-spacing-1, 0.25rem);
1084
- height: calc(var(--cv-band-row) - 4px);
1086
+ height: calc(var(--smrt-calendar-view-band-row) - 4px);
1085
1087
  padding: 0 var(--smrt-spacing-2, 0.5rem);
1086
1088
  border: 0;
1087
- border-radius: var(--smrt-radius-small, 4px);
1088
- background: var(--cv-fill);
1089
- color: var(--cv-ink);
1090
- box-shadow: inset 3px 0 0 var(--cv-tone);
1089
+ border-radius: var(--smrt-radius-small);
1090
+ background: var(--smrt-calendar-view-fill);
1091
+ color: var(--smrt-calendar-view-ink);
1092
+ box-shadow: inset 3px 0 0 var(--smrt-calendar-view-tone);
1091
1093
  font: inherit;
1092
1094
  font-size: var(--smrt-typography-label-medium-size, 0.75rem);
1093
1095
  font-weight: 500;
1094
- line-height: calc(var(--cv-band-row) - 4px);
1096
+ line-height: calc(var(--smrt-calendar-view-band-row) - 4px);
1095
1097
  text-align: start;
1096
1098
  text-decoration: none;
1097
1099
  white-space: nowrap;
@@ -1117,7 +1119,7 @@ $effect(() => {
1117
1119
  /* ---- Day panel and agenda rows ---- */
1118
1120
 
1119
1121
  .cv-day-panel {
1120
- border-top: 1px solid var(--cv-border);
1122
+ border-top: 1px solid var(--smrt-calendar-view-border);
1121
1123
  padding: var(--smrt-spacing-2, 0.5rem) var(--smrt-spacing-3, 0.75rem) var(--smrt-spacing-3, 0.75rem);
1122
1124
  }
1123
1125
 
@@ -1153,12 +1155,12 @@ $effect(() => {
1153
1155
  align-items: center;
1154
1156
  gap: var(--smrt-spacing-3, 0.75rem);
1155
1157
  width: 100%;
1156
- min-height: var(--cv-target);
1158
+ min-height: var(--smrt-calendar-view-target);
1157
1159
  padding: var(--smrt-spacing-2, 0.5rem) var(--smrt-spacing-3, 0.75rem);
1158
- border: 1px solid var(--cv-border);
1159
- border-inline-start: 4px solid var(--cv-tone);
1160
- border-radius: var(--smrt-radius-medium, 8px);
1161
- background: var(--cv-surface);
1160
+ border: 1px solid var(--smrt-calendar-view-border);
1161
+ border-inline-start: 4px solid var(--smrt-calendar-view-tone);
1162
+ border-radius: var(--smrt-radius-medium);
1163
+ background: var(--smrt-calendar-view-surface);
1162
1164
  color: inherit;
1163
1165
  font: inherit;
1164
1166
  text-align: start;
@@ -1167,12 +1169,12 @@ $effect(() => {
1167
1169
  }
1168
1170
 
1169
1171
  .cv-row:hover {
1170
- background: var(--smrt-color-surface-container-low, #f5f3f7);
1172
+ background: var(--smrt-color-surface-container-low);
1171
1173
  }
1172
1174
 
1173
1175
  .cv-row-time {
1174
1176
  flex: 0 0 4.5rem;
1175
- color: var(--cv-muted);
1177
+ color: var(--smrt-calendar-view-muted);
1176
1178
  font-size: var(--smrt-typography-body-small-size, 0.8125rem);
1177
1179
  }
1178
1180
 
@@ -1191,22 +1193,22 @@ $effect(() => {
1191
1193
  display: flex;
1192
1194
  flex-wrap: wrap;
1193
1195
  gap: var(--smrt-spacing-2, 0.5rem);
1194
- color: var(--cv-muted);
1196
+ color: var(--smrt-calendar-view-muted);
1195
1197
  font-size: var(--smrt-typography-body-small-size, 0.8125rem);
1196
1198
  }
1197
1199
 
1198
1200
  /* Tone is a fill with its own ink, never a text color (brand rule). */
1199
1201
  .cv-row-label {
1200
1202
  padding: 0 0.375rem;
1201
- border-radius: var(--smrt-radius-small, 4px);
1202
- background: var(--cv-fill);
1203
- color: var(--cv-ink);
1203
+ border-radius: var(--smrt-radius-small);
1204
+ background: var(--smrt-calendar-view-fill);
1205
+ color: var(--smrt-calendar-view-ink);
1204
1206
  font-weight: 500;
1205
1207
  }
1206
1208
 
1207
1209
  .cv-empty {
1208
1210
  margin: var(--smrt-spacing-2, 0.5rem) 0;
1209
- color: var(--cv-muted);
1211
+ color: var(--smrt-calendar-view-muted);
1210
1212
  }
1211
1213
 
1212
1214
  /* ---- Agenda ---- */
@@ -1218,12 +1220,12 @@ $effect(() => {
1218
1220
  overscroll-behavior-x: contain;
1219
1221
  scroll-snap-type: x proximity;
1220
1222
  padding: var(--smrt-spacing-2, 0.5rem) var(--smrt-spacing-3, 0.75rem);
1221
- border-bottom: 1px solid var(--cv-border);
1223
+ border-bottom: 1px solid var(--smrt-calendar-view-border);
1222
1224
  scrollbar-width: none;
1223
1225
  }
1224
1226
 
1225
1227
  .cv-strip-day {
1226
- flex: 0 0 var(--cv-target);
1228
+ flex: 0 0 var(--smrt-calendar-view-target);
1227
1229
  display: flex;
1228
1230
  flex-direction: column;
1229
1231
  align-items: center;
@@ -1231,7 +1233,7 @@ $effect(() => {
1231
1233
  min-height: 3.5rem;
1232
1234
  padding: var(--smrt-spacing-1, 0.25rem) 0;
1233
1235
  border: 1px solid transparent;
1234
- border-radius: var(--smrt-radius-medium, 8px);
1236
+ border-radius: var(--smrt-radius-medium);
1235
1237
  background: transparent;
1236
1238
  color: inherit;
1237
1239
  font: inherit;
@@ -1240,12 +1242,12 @@ $effect(() => {
1240
1242
  }
1241
1243
 
1242
1244
  .cv-strip-day[aria-pressed='true'] {
1243
- background: var(--smrt-color-primary, #005ac1);
1244
- color: var(--smrt-color-on-primary, #ffffff);
1245
+ background: var(--smrt-color-primary);
1246
+ color: var(--smrt-color-on-primary);
1245
1247
  }
1246
1248
 
1247
1249
  .cv-strip-day--today:not([aria-pressed='true']) {
1248
- border-color: var(--smrt-color-primary, #005ac1);
1250
+ border-color: var(--smrt-color-primary);
1249
1251
  }
1250
1252
 
1251
1253
  .cv-strip-weekday {
@@ -1284,7 +1286,7 @@ $effect(() => {
1284
1286
  }
1285
1287
 
1286
1288
  .cv-agenda-day--today .cv-agenda-date {
1287
- color: var(--smrt-color-primary, #005ac1);
1289
+ color: var(--smrt-color-primary);
1288
1290
  }
1289
1291
 
1290
1292
  .cv--agenda .cv-empty {
@@ -1300,4 +1302,5 @@ $effect(() => {
1300
1302
  scroll-behavior: auto;
1301
1303
  }
1302
1304
  }
1305
+ }
1303
1306
  </style>
@@ -101,7 +101,7 @@ function getTypeLabel(type: string): string {
101
101
  }
102
102
  </script>
103
103
 
104
- <div class="day-view">
104
+ <div class="day-view" data-smrt-component="DayView">
105
105
  <header class="day-header">
106
106
  <a href={calendarUrl} class="back-link">
107
107
  <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
@@ -175,13 +175,15 @@ function getTypeLabel(type: string): string {
175
175
  </div>
176
176
 
177
177
  <style>
178
+ @layer smrt.reset, smrt.structure, smrt.theme;
179
+ @layer smrt.theme {
178
180
  .day-view {
179
- --view-bg: var(--smrt-color-surface, #ffffff);
180
- --view-border: var(--smrt-color-outline-variant, #e5e7eb);
181
- --header-bg: var(--smrt-color-surface-container-low, #f5f5f5);
182
- --card-hover: var(--smrt-color-surface-container-low, #f5f5f5);
181
+ --smrt-day-view-bg: var(--smrt-color-surface);
182
+ --smrt-day-view-border: var(--smrt-color-outline-variant);
183
+ --smrt-day-view-header-bg: var(--smrt-color-surface-container-low);
184
+ --smrt-day-view-card-hover: var(--smrt-color-surface-container-low);
183
185
 
184
- background: var(--view-bg);
186
+ background: var(--smrt-day-view-bg);
185
187
  }
186
188
 
187
189
  /*
@@ -190,32 +192,32 @@ function getTypeLabel(type: string): string {
190
192
  * `--smrt-color-*-dark` tokens were never emitted).
191
193
  */
192
194
  :global([data-theme="dark"]) .day-view {
193
- --view-bg: var(--smrt-color-surface, #242424);
194
- --view-border: var(--smrt-color-outline-variant, #3a3a3a);
195
- --header-bg: var(--smrt-color-surface-container-low, #2e2e2e);
196
- --card-hover: var(--smrt-color-surface-container-high, #3a3a3a);
195
+ --smrt-day-view-bg: var(--smrt-color-surface);
196
+ --smrt-day-view-border: var(--smrt-color-outline-variant);
197
+ --smrt-day-view-header-bg: var(--smrt-color-surface-container-low);
198
+ --smrt-day-view-card-hover: var(--smrt-color-surface-container-high);
197
199
  }
198
200
 
199
201
  @media (prefers-color-scheme: dark) {
200
202
  :global(:root:not([data-theme="light"])) .day-view {
201
- --view-bg: var(--smrt-color-surface, #242424);
202
- --view-border: var(--smrt-color-outline-variant, #3a3a3a);
203
- --header-bg: var(--smrt-color-surface-container-low, #2e2e2e);
204
- --card-hover: var(--smrt-color-surface-container-high, #3a3a3a);
203
+ --smrt-day-view-bg: var(--smrt-color-surface);
204
+ --smrt-day-view-border: var(--smrt-color-outline-variant);
205
+ --smrt-day-view-header-bg: var(--smrt-color-surface-container-low);
206
+ --smrt-day-view-card-hover: var(--smrt-color-surface-container-high);
205
207
  }
206
208
  }
207
209
 
208
210
  .day-header {
209
211
  padding: var(--smrt-spacing-6, 1.5rem);
210
- background: var(--header-bg);
211
- border-bottom: 1px solid var(--view-border);
212
+ background: var(--smrt-day-view-header-bg);
213
+ border-bottom: 1px solid var(--smrt-day-view-border);
212
214
  }
213
215
 
214
216
  .back-link {
215
217
  display: inline-flex;
216
218
  align-items: center;
217
219
  gap: var(--smrt-spacing-1, 0.25rem);
218
- color: var(--smrt-color-primary, #005ac1);
220
+ color: var(--smrt-color-primary);
219
221
  text-decoration: none;
220
222
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
221
223
  margin-bottom: var(--smrt-spacing-4, 1rem);
@@ -223,14 +225,14 @@ function getTypeLabel(type: string): string {
223
225
  }
224
226
 
225
227
  .back-link:hover {
226
- color: var(--smrt-color-on-primary-container, #1b1b1f);
228
+ color: var(--smrt-color-on-primary-container);
227
229
  }
228
230
 
229
231
  .date-title {
230
232
  margin: 0;
231
233
  font-size: var(--smrt-typography-headline-small-size, 1.5rem);
232
234
  font-weight: var(--smrt-typography-headline-small-weight, 600);
233
- color: var(--smrt-color-on-surface, #333);
235
+ color: var(--smrt-color-on-surface);
234
236
  }
235
237
 
236
238
  .weather-summary {
@@ -241,7 +243,7 @@ function getTypeLabel(type: string): string {
241
243
  }
242
244
 
243
245
  .weather-icon {
244
- font-size: var(--smrt-typography-headline-small-size, 24px);
246
+ font-size: var(--smrt-typography-headline-small-size);
245
247
  }
246
248
 
247
249
  .weather-temps {
@@ -255,7 +257,7 @@ function getTypeLabel(type: string): string {
255
257
  }
256
258
 
257
259
  .low {
258
- color: var(--smrt-color-on-surface-variant, #666);
260
+ color: var(--smrt-color-on-surface-variant);
259
261
  }
260
262
 
261
263
  .day-content {
@@ -265,11 +267,11 @@ function getTypeLabel(type: string): string {
265
267
  .empty-state {
266
268
  text-align: center;
267
269
  padding: var(--smrt-spacing-12, 3rem) var(--smrt-spacing-6, 1.5rem);
268
- color: var(--smrt-color-on-surface-variant, #666);
270
+ color: var(--smrt-color-on-surface-variant);
269
271
  }
270
272
 
271
273
  .empty-icon {
272
- font-size: var(--smrt-typography-display-medium-size, 48px);
274
+ font-size: var(--smrt-typography-display-medium-size);
273
275
  display: block;
274
276
  margin-bottom: var(--smrt-spacing-4, 1rem);
275
277
  opacity: 0.5;
@@ -295,16 +297,16 @@ function getTypeLabel(type: string): string {
295
297
  margin: 0 0 var(--smrt-spacing-4, 1rem) 0;
296
298
  font-size: var(--smrt-typography-title-medium-size, 1.125rem);
297
299
  font-weight: var(--smrt-typography-title-medium-weight, 600);
298
- color: var(--smrt-color-on-surface, #333);
300
+ color: var(--smrt-color-on-surface);
299
301
  }
300
302
 
301
303
  .group-icon {
302
- font-size: var(--smrt-typography-title-large-size, 20px);
304
+ font-size: var(--smrt-typography-title-large-size);
303
305
  }
304
306
 
305
307
  .group-count {
306
308
  font-weight: var(--smrt-typography-body-medium-weight, 400);
307
- color: var(--smrt-color-on-surface-variant, #666);
309
+ color: var(--smrt-color-on-surface-variant);
308
310
  }
309
311
 
310
312
  .event-list {
@@ -318,17 +320,17 @@ function getTypeLabel(type: string): string {
318
320
  align-items: center;
319
321
  gap: var(--smrt-spacing-4, 1rem);
320
322
  padding: var(--smrt-spacing-4, 1rem);
321
- background: var(--view-bg);
322
- border: 1px solid var(--view-border);
323
- border-radius: var(--smrt-radius-medium, 8px);
323
+ background: var(--smrt-day-view-bg);
324
+ border: 1px solid var(--smrt-day-view-border);
325
+ border-radius: var(--smrt-radius-medium);
324
326
  text-decoration: none;
325
- color: var(--smrt-color-on-surface, #333);
327
+ color: var(--smrt-color-on-surface);
326
328
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
327
329
  }
328
330
 
329
331
  .event-card--link:hover {
330
- background: var(--card-hover);
331
- border-color: var(--smrt-color-outline, #79747e);
332
+ background: var(--smrt-day-view-card-hover);
333
+ border-color: var(--smrt-color-outline);
332
334
  }
333
335
 
334
336
  .event-card--link:hover .event-arrow {
@@ -341,7 +343,7 @@ function getTypeLabel(type: string): string {
341
343
  width: 80px;
342
344
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
343
345
  font-weight: var(--smrt-typography-body-medium-weight, 500);
344
- color: var(--smrt-color-on-surface-variant, #666);
346
+ color: var(--smrt-color-on-surface-variant);
345
347
  }
346
348
 
347
349
  .event-details {
@@ -360,13 +362,13 @@ function getTypeLabel(type: string): string {
360
362
  .event-venue {
361
363
  display: block;
362
364
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
363
- color: var(--smrt-color-on-surface-variant, #666);
364
- margin-top: var(--smrt-spacing-1, 4px);
365
+ color: var(--smrt-color-on-surface-variant);
366
+ margin-top: var(--smrt-spacing-1);
365
367
  }
366
368
 
367
369
  .event-arrow {
368
370
  flex-shrink: 0;
369
- color: var(--smrt-color-on-surface-variant, #666);
371
+ color: var(--smrt-color-on-surface-variant);
370
372
  transition: transform var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
371
373
  }
372
374
 
@@ -395,4 +397,5 @@ function getTypeLabel(type: string): string {
395
397
  width: 100%;
396
398
  }
397
399
  }
400
+ }
398
401
  </style>