mac-human-design 0.1.16 → 0.1.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.
package/changelog.md CHANGED
@@ -2,6 +2,32 @@
2
2
 
3
3
  This file tracks changes between published npm versions of `mac-human-design`.
4
4
 
5
+ ## 0.1.18
6
+
7
+ ### Changed
8
+
9
+ - Added Motion-backed entrance behavior and live-region semantics to
10
+ `StatusMessage`.
11
+ - Added shared motion defaults for toast surfaces, chips, chip remove buttons,
12
+ and scroll thumbs.
13
+ - Tuned floating surface transform origins from placement side attributes, plus
14
+ hover and transition polish for avatars, chips, scrollbars, and status
15
+ surfaces.
16
+ - Bumped the package to `0.1.18`.
17
+
18
+ ## 0.1.17
19
+
20
+ ### Changed
21
+
22
+ - Added center-origin Motion feedback for checkbox, radio, switch, slider thumb,
23
+ and tab indicator primitives so selection controls feel responsive without
24
+ shifting layout.
25
+ - Added CSS transition polish for menu rows, tabs, toggles, switches, sliders,
26
+ progress indicators, and selected states.
27
+ - Preserved icon-only button centering by keeping all new feedback scale-based
28
+ and non-positional.
29
+ - Bumped the package to `0.1.17`.
30
+
5
31
  ## 0.1.16
6
32
 
7
33
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mac-human-design",
3
- "version": "0.1.16",
3
+ "version": "0.1.18",
4
4
  "description": "Reusable macOS-oriented UI primitives and SF Symbols bridge for Tauri apps.",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -165,6 +165,21 @@ function getMotionDefaults(macClassName: string, props: Record<string, unknown>)
165
165
  };
166
166
  }
167
167
 
168
+ if (includesAny(macClassName, ["hd-mac-checkbox", "hd-mac-radio"])) {
169
+ return {
170
+ whileHover: { scale: 1.03 },
171
+ whileTap: { scale: 0.92 },
172
+ transition: macFastTransition,
173
+ };
174
+ }
175
+
176
+ if (macClassName.includes("hd-mac-switch")) {
177
+ return {
178
+ whileTap: { scale: 0.985 },
179
+ transition: macFastTransition,
180
+ };
181
+ }
182
+
168
183
  if (includesAny(macClassName, ["hd-mac-checkbox-indicator", "hd-mac-radio-indicator"])) {
169
184
  return fadeScaleDefaults({ opacity: 0, scale: 0.72 }, { opacity: 1, scale: 1 });
170
185
  }
@@ -172,6 +187,7 @@ function getMotionDefaults(macClassName: string, props: Record<string, unknown>)
172
187
  if (macClassName.includes("hd-mac-switch-thumb") || macClassName.includes("hd-mac-slider-thumb")) {
173
188
  return {
174
189
  layout: true,
190
+ whileHover: { scale: 1.04 },
175
191
  whileTap: { scale: 0.92 },
176
192
  transition: macDefaultTransition,
177
193
  };
@@ -184,7 +200,7 @@ function getMotionDefaults(macClassName: string, props: Record<string, unknown>)
184
200
  };
185
201
  }
186
202
 
187
- if (includesAny(macClassName, ["hd-mac-popup", "hd-mac-popover", "hd-mac-preview-card"])) {
203
+ if (includesAny(macClassName, ["hd-mac-popup", "hd-mac-popover", "hd-mac-preview-card", "hd-mac-toast"])) {
188
204
  return fadeScaleDefaults({ opacity: 0, scale: 0.97, y: 4 });
189
205
  }
190
206
 
@@ -234,10 +250,34 @@ function getMotionDefaults(macClassName: string, props: Record<string, unknown>)
234
250
  return fadeScaleDefaults({ opacity: 0, scale: 0.76 }, { opacity: 1, scale: 1 }, macFastTransition);
235
251
  }
236
252
 
253
+ if (macClassName.includes("hd-mac-tab-indicator")) {
254
+ return {
255
+ layout: true,
256
+ transition: macDefaultTransition,
257
+ };
258
+ }
259
+
237
260
  if (includesAny(macClassName, ["hd-mac-avatar", "hd-mac-avatar-image", "hd-mac-avatar-fallback"])) {
238
261
  return fadeScaleDefaults({ opacity: 0, scale: 0.92 });
239
262
  }
240
263
 
264
+ if (includesAny(macClassName, ["hd-mac-chip", "hd-mac-chip-remove"])) {
265
+ return {
266
+ initial: { opacity: 0, scale: 0.94 },
267
+ animate: { opacity: 1, scale: 1 },
268
+ whileHover: macClassName.includes("hd-mac-chip-remove") ? { scale: 1.08 } : { scale: 1.015 },
269
+ whileTap: { scale: 0.96 },
270
+ transition: macFastTransition,
271
+ };
272
+ }
273
+
274
+ if (macClassName.includes("hd-mac-scroll-thumb")) {
275
+ return {
276
+ whileHover: { scaleX: 1.18 },
277
+ transition: macFastTransition,
278
+ };
279
+ }
280
+
241
281
  if (includesAny(macClassName, ["hd-mac-error-text", "hd-mac-help-text", "hd-mac-status-text", "hd-mac-validity"])) {
242
282
  return fadeScaleDefaults({ opacity: 0, y: -3 }, { opacity: 1, y: 0 }, macFastTransition);
243
283
  }
@@ -1,3 +1,5 @@
1
+ import { motion } from "motion/react";
2
+
1
3
  type StatusMessageProps = {
2
4
  intent: "error" | "success" | "info";
3
5
  message: string;
@@ -5,8 +7,15 @@ type StatusMessageProps = {
5
7
 
6
8
  export function StatusMessage({ intent, message }: StatusMessageProps) {
7
9
  return (
8
- <div className="hd-mac-status-message" data-intent={intent}>
10
+ <motion.div
11
+ initial={{ opacity: 0, y: -4, scale: 0.99 }}
12
+ animate={{ opacity: 1, y: 0, scale: 1 }}
13
+ transition={{ type: "spring", stiffness: 520, damping: 38, mass: 0.8 }}
14
+ className="hd-mac-status-message"
15
+ data-intent={intent}
16
+ role={intent === "error" ? "alert" : "status"}
17
+ >
9
18
  {message}
10
- </div>
19
+ </motion.div>
11
20
  );
12
21
  }
@@ -66,6 +66,16 @@
66
66
  .hd-mac-switch,
67
67
  .hd-mac-switch-thumb,
68
68
  .hd-mac-slider-thumb,
69
+ .hd-mac-checkbox,
70
+ .hd-mac-radio,
71
+ .hd-mac-tab,
72
+ .hd-mac-menu-item,
73
+ .hd-mac-toast,
74
+ .hd-mac-chip,
75
+ .hd-mac-chip-remove,
76
+ .hd-mac-avatar,
77
+ .hd-mac-scroll-thumb,
78
+ .hd-mac-status-message,
69
79
  .hd-mac-window-toolbar,
70
80
  .hd-mac-data-table,
71
81
  .hd-mac-data-table-row {
@@ -130,6 +140,12 @@
130
140
  background: color-mix(in srgb, var(--hd-mac-blue) 10%, transparent);
131
141
  color: var(--hd-mac-blue-active);
132
142
  font: 400 13px/18px var(--hd-mac-font);
143
+ transform-origin: top center;
144
+ transition:
145
+ background-color var(--hd-mac-motion-standard),
146
+ border-color var(--hd-mac-motion-standard),
147
+ color var(--hd-mac-motion-standard),
148
+ box-shadow var(--hd-mac-motion-standard);
133
149
  }
134
150
 
135
151
  .hd-mac-status-message[data-intent="error"] {
@@ -531,6 +547,38 @@
531
547
  box-shadow var(--hd-mac-motion-surface);
532
548
  }
533
549
 
550
+ .hd-mac-positioner[data-side="top"] .hd-mac-popup,
551
+ .hd-mac-positioner[data-side="top"] .hd-mac-popover,
552
+ .hd-mac-positioner[data-side="top"] .hd-mac-preview-card,
553
+ .hd-mac-positioner[data-side="top"] .hd-mac-menu,
554
+ .hd-mac-positioner[data-side="top"] .hd-mac-tooltip {
555
+ transform-origin: bottom center;
556
+ }
557
+
558
+ .hd-mac-positioner[data-side="bottom"] .hd-mac-popup,
559
+ .hd-mac-positioner[data-side="bottom"] .hd-mac-popover,
560
+ .hd-mac-positioner[data-side="bottom"] .hd-mac-preview-card,
561
+ .hd-mac-positioner[data-side="bottom"] .hd-mac-menu,
562
+ .hd-mac-positioner[data-side="bottom"] .hd-mac-tooltip {
563
+ transform-origin: top center;
564
+ }
565
+
566
+ .hd-mac-positioner[data-side="left"] .hd-mac-popup,
567
+ .hd-mac-positioner[data-side="left"] .hd-mac-popover,
568
+ .hd-mac-positioner[data-side="left"] .hd-mac-preview-card,
569
+ .hd-mac-positioner[data-side="left"] .hd-mac-menu,
570
+ .hd-mac-positioner[data-side="left"] .hd-mac-tooltip {
571
+ transform-origin: center right;
572
+ }
573
+
574
+ .hd-mac-positioner[data-side="right"] .hd-mac-popup,
575
+ .hd-mac-positioner[data-side="right"] .hd-mac-popover,
576
+ .hd-mac-positioner[data-side="right"] .hd-mac-preview-card,
577
+ .hd-mac-positioner[data-side="right"] .hd-mac-menu,
578
+ .hd-mac-positioner[data-side="right"] .hd-mac-tooltip {
579
+ transform-origin: center left;
580
+ }
581
+
534
582
  .hd-mac-popup,
535
583
  .hd-mac-popover,
536
584
  .hd-mac-preview-card,
@@ -585,6 +633,10 @@
585
633
  font: 400 13px/18px var(--hd-mac-font);
586
634
  text-decoration: none;
587
635
  user-select: none;
636
+ transition:
637
+ background-color var(--hd-mac-motion-fast),
638
+ color var(--hd-mac-motion-fast),
639
+ filter var(--hd-mac-motion-fast);
588
640
  }
589
641
 
590
642
  .hd-mac-menu-item[data-highlighted],
@@ -595,6 +647,11 @@
595
647
  color: #fff;
596
648
  }
597
649
 
650
+ .hd-mac-menu-item:active,
651
+ .hd-mac-navigation-link:active {
652
+ filter: brightness(0.96);
653
+ }
654
+
598
655
  .hd-mac-menu-item-indicator {
599
656
  width: 14px;
600
657
  display: inline-flex;
@@ -720,6 +777,23 @@
720
777
  background: var(--hd-mac-raised);
721
778
  box-shadow: var(--hd-mac-control-shadow);
722
779
  color: #fff;
780
+ transform-origin: center;
781
+ transition:
782
+ background-color var(--hd-mac-motion-standard),
783
+ border-color var(--hd-mac-motion-standard),
784
+ box-shadow var(--hd-mac-motion-standard),
785
+ filter var(--hd-mac-motion-fast),
786
+ transform var(--hd-mac-motion-fast);
787
+ }
788
+
789
+ .hd-mac-checkbox:hover,
790
+ .hd-mac-radio:hover {
791
+ filter: brightness(1.04);
792
+ }
793
+
794
+ .hd-mac-checkbox:active,
795
+ .hd-mac-radio:active {
796
+ filter: brightness(0.98);
723
797
  }
724
798
 
725
799
  .hd-mac-checkbox {
@@ -735,11 +809,15 @@
735
809
  .hd-mac-radio[data-checked] {
736
810
  border-color: transparent;
737
811
  background: var(--hd-mac-blue);
812
+ box-shadow:
813
+ 0 1px 0 rgba(255, 255, 255, 0.22) inset,
814
+ 0 1px 2px rgba(10, 132, 255, 0.32);
738
815
  }
739
816
 
740
817
  .hd-mac-checkbox-indicator,
741
818
  .hd-mac-radio-indicator {
742
819
  color: currentColor;
820
+ transform-origin: center;
743
821
  }
744
822
 
745
823
  .hd-mac-checkbox-indicator::before {
@@ -772,11 +850,28 @@
772
850
  border-radius: 999px;
773
851
  padding: 2px;
774
852
  background: var(--hd-mac-fill-pressed);
775
- transition: background-color 140ms ease;
853
+ box-shadow:
854
+ 0 1px 1px rgba(0, 0, 0, 0.08) inset,
855
+ 0 1px 0 rgba(255, 255, 255, 0.32);
856
+ transform-origin: center;
857
+ transition:
858
+ background-color var(--hd-mac-motion-standard),
859
+ border-color var(--hd-mac-motion-standard),
860
+ box-shadow var(--hd-mac-motion-standard),
861
+ filter var(--hd-mac-motion-fast),
862
+ transform var(--hd-mac-motion-fast);
863
+ }
864
+
865
+ .hd-mac-switch:hover {
866
+ filter: brightness(1.035);
776
867
  }
777
868
 
778
869
  .hd-mac-switch[data-checked] {
779
870
  background: var(--hd-mac-green);
871
+ border-color: color-mix(in srgb, var(--hd-mac-green) 74%, transparent);
872
+ box-shadow:
873
+ 0 1px 0 rgba(255, 255, 255, 0.26) inset,
874
+ 0 1px 2px rgba(48, 209, 88, 0.28);
780
875
  }
781
876
 
782
877
  .hd-mac-switch-thumb {
@@ -785,13 +880,24 @@
785
880
  border-radius: 999px;
786
881
  background: #fff;
787
882
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.32);
788
- transition: transform 160ms cubic-bezier(0.22, 1, 0.36, 1);
883
+ transform-origin: center;
884
+ transition:
885
+ transform var(--hd-mac-motion-surface),
886
+ box-shadow var(--hd-mac-motion-standard);
887
+ }
888
+
889
+ .hd-mac-switch:active .hd-mac-switch-thumb {
890
+ transform: scale(0.94);
789
891
  }
790
892
 
791
893
  .hd-mac-switch[data-checked] .hd-mac-switch-thumb {
792
894
  transform: translateX(16px);
793
895
  }
794
896
 
897
+ .hd-mac-switch[data-checked]:active .hd-mac-switch-thumb {
898
+ transform: translateX(16px) scale(0.94);
899
+ }
900
+
795
901
  .hd-mac-toggle-group {
796
902
  display: inline-flex;
797
903
  align-items: center;
@@ -839,6 +945,13 @@
839
945
  background: transparent;
840
946
  box-shadow: none;
841
947
  padding: 2px 10px;
948
+ transition:
949
+ background-color var(--hd-mac-motion-standard),
950
+ border-color var(--hd-mac-motion-standard),
951
+ box-shadow var(--hd-mac-motion-standard),
952
+ color var(--hd-mac-motion-standard),
953
+ filter var(--hd-mac-motion-fast),
954
+ transform var(--hd-mac-motion-fast);
842
955
  }
843
956
 
844
957
  .hd-mac-symbol-icon-button[data-loading] {
@@ -896,6 +1009,22 @@
896
1009
  background: transparent;
897
1010
  color: var(--hd-mac-secondary-text);
898
1011
  font: 590 12px/16px var(--hd-mac-font);
1012
+ transform-origin: center;
1013
+ transition:
1014
+ background-color var(--hd-mac-motion-standard),
1015
+ box-shadow var(--hd-mac-motion-standard),
1016
+ color var(--hd-mac-motion-standard),
1017
+ filter var(--hd-mac-motion-fast),
1018
+ transform var(--hd-mac-motion-fast);
1019
+ }
1020
+
1021
+ .hd-mac-tab:hover {
1022
+ background: var(--hd-mac-fill-hover);
1023
+ color: var(--hd-mac-text);
1024
+ }
1025
+
1026
+ .hd-mac-tab:active {
1027
+ filter: brightness(0.98);
899
1028
  }
900
1029
 
901
1030
  .hd-mac-tab[data-selected] {
@@ -913,6 +1042,10 @@
913
1042
  height: 2px;
914
1043
  border-radius: 999px;
915
1044
  background: var(--hd-mac-blue);
1045
+ transform-origin: center;
1046
+ transition:
1047
+ transform var(--hd-mac-motion-standard),
1048
+ opacity var(--hd-mac-motion-standard);
916
1049
  }
917
1050
 
918
1051
  .hd-mac-slider {
@@ -939,12 +1072,17 @@
939
1072
  .hd-mac-slider-track {
940
1073
  height: 4px;
941
1074
  width: 100%;
1075
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset;
942
1076
  }
943
1077
 
944
1078
  .hd-mac-slider-indicator,
945
1079
  .hd-mac-progress-indicator,
946
1080
  .hd-mac-meter-indicator {
947
1081
  background: var(--hd-mac-blue);
1082
+ transition:
1083
+ width var(--hd-mac-motion-surface),
1084
+ transform var(--hd-mac-motion-surface),
1085
+ background-color var(--hd-mac-motion-standard);
948
1086
  }
949
1087
 
950
1088
  .hd-mac-slider-indicator {
@@ -958,6 +1096,23 @@
958
1096
  border-radius: 999px;
959
1097
  background: #fff;
960
1098
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.34);
1099
+ transform-origin: center;
1100
+ transition:
1101
+ border-color var(--hd-mac-motion-standard),
1102
+ box-shadow var(--hd-mac-motion-standard),
1103
+ transform var(--hd-mac-motion-fast);
1104
+ }
1105
+
1106
+ .hd-mac-slider-thumb:hover {
1107
+ box-shadow:
1108
+ 0 1px 4px rgba(0, 0, 0, 0.34),
1109
+ 0 0 0 3px color-mix(in srgb, var(--hd-mac-blue) 16%, transparent);
1110
+ }
1111
+
1112
+ .hd-mac-slider-thumb:active {
1113
+ box-shadow:
1114
+ 0 1px 2px rgba(0, 0, 0, 0.28),
1115
+ 0 0 0 4px color-mix(in srgb, var(--hd-mac-blue) 22%, transparent);
961
1116
  }
962
1117
 
963
1118
  .hd-mac-progress,
@@ -1020,6 +1175,14 @@
1020
1175
  background: var(--hd-mac-fill-pressed);
1021
1176
  color: var(--hd-mac-secondary-text);
1022
1177
  font: 590 13px/18px var(--hd-mac-font);
1178
+ box-shadow:
1179
+ 0 1px 0 rgba(255, 255, 255, 0.2) inset,
1180
+ 0 1px 2px rgba(0, 0, 0, 0.12);
1181
+ transform-origin: center;
1182
+ transition:
1183
+ background-color var(--hd-mac-motion-standard),
1184
+ box-shadow var(--hd-mac-motion-standard),
1185
+ transform var(--hd-mac-motion-fast);
1023
1186
  }
1024
1187
 
1025
1188
  .hd-mac-avatar-image {
@@ -1033,6 +1196,7 @@
1033
1196
  width: 100%;
1034
1197
  height: 100%;
1035
1198
  place-items: center;
1199
+ transform-origin: center;
1036
1200
  }
1037
1201
 
1038
1202
  .hd-mac-collapsible {
@@ -1056,12 +1220,34 @@
1056
1220
  background: var(--hd-mac-fill);
1057
1221
  color: var(--hd-mac-text);
1058
1222
  font: 400 12px/16px var(--hd-mac-font);
1223
+ transform-origin: center;
1224
+ transition:
1225
+ background-color var(--hd-mac-motion-standard),
1226
+ color var(--hd-mac-motion-standard),
1227
+ box-shadow var(--hd-mac-motion-standard),
1228
+ transform var(--hd-mac-motion-fast);
1229
+ }
1230
+
1231
+ .hd-mac-chip:hover {
1232
+ background: var(--hd-mac-fill-hover);
1233
+ box-shadow: 0 1px 1px rgba(15, 23, 42, 0.08);
1059
1234
  }
1060
1235
 
1061
1236
  .hd-mac-chip-remove {
1062
1237
  border: 0;
1238
+ border-radius: 999px;
1063
1239
  background: transparent;
1064
1240
  color: var(--hd-mac-muted-text);
1241
+ transform-origin: center;
1242
+ transition:
1243
+ background-color var(--hd-mac-motion-fast),
1244
+ color var(--hd-mac-motion-fast),
1245
+ transform var(--hd-mac-motion-fast);
1246
+ }
1247
+
1248
+ .hd-mac-chip-remove:hover {
1249
+ background: var(--hd-mac-fill-hover);
1250
+ color: var(--hd-mac-text);
1065
1251
  }
1066
1252
 
1067
1253
  .hd-mac-scroll-area {
@@ -1085,12 +1271,28 @@
1085
1271
  width: 10px;
1086
1272
  padding: 2px;
1087
1273
  background: transparent;
1274
+ opacity: 0.72;
1275
+ transition:
1276
+ opacity var(--hd-mac-motion-standard),
1277
+ width var(--hd-mac-motion-standard);
1278
+ }
1279
+
1280
+ .hd-mac-scroll-area:hover .hd-mac-scrollbar {
1281
+ opacity: 1;
1088
1282
  }
1089
1283
 
1090
1284
  .hd-mac-scroll-thumb {
1091
1285
  flex: 1;
1092
1286
  border-radius: 999px;
1093
1287
  background: color-mix(in srgb, var(--hd-mac-muted-text) 42%, transparent);
1288
+ transform-origin: center;
1289
+ transition:
1290
+ background-color var(--hd-mac-motion-standard),
1291
+ transform var(--hd-mac-motion-fast);
1292
+ }
1293
+
1294
+ .hd-mac-scroll-thumb:hover {
1295
+ background: color-mix(in srgb, var(--hd-mac-muted-text) 60%, transparent);
1094
1296
  }
1095
1297
 
1096
1298
  .hd-mac-scroll-corner {
@@ -1120,6 +1322,12 @@
1120
1322
  .hd-mac-toast {
1121
1323
  border-radius: 12px;
1122
1324
  padding: 12px;
1325
+ transform-origin: bottom right;
1326
+ transition:
1327
+ opacity var(--hd-mac-motion-surface),
1328
+ transform var(--hd-mac-motion-surface),
1329
+ box-shadow var(--hd-mac-motion-surface),
1330
+ border-color var(--hd-mac-motion-standard);
1123
1331
  }
1124
1332
 
1125
1333
  .hd-mac-toast-positioner {