@cambly/syntax-core 4.0.0 → 4.2.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/index.js CHANGED
@@ -185,6 +185,7 @@ function Box(props) {
185
185
  display,
186
186
  smDisplay,
187
187
  lgDisplay,
188
+ flexShrink,
188
189
  flexWrap,
189
190
  gap: gap2,
190
191
  justifyContent,
@@ -236,6 +237,7 @@ function Box(props) {
236
237
  "display",
237
238
  "smDisplay",
238
239
  "lgDisplay",
240
+ "flexShrink",
239
241
  "flexWrap",
240
242
  "gap",
241
243
  "justifyContent",
@@ -337,6 +339,7 @@ function Box(props) {
337
339
  rounding && rounding !== "none" && Box_module_default[`rounding${rounding}`]
338
340
  ),
339
341
  style: __spreadValues({
342
+ flexShrink,
340
343
  height,
341
344
  maxHeight,
342
345
  maxWidth,
@@ -640,11 +643,98 @@ var IconButton = ({
640
643
  var IconButton_default = IconButton;
641
644
 
642
645
  // src/Checkbox/Checkbox.tsx
643
- var import_react = require("react");
646
+ var import_react2 = require("react");
644
647
  var import_classnames7 = __toESM(require_classnames());
645
648
 
649
+ // src/useFocusVisible.tsx
650
+ var import_react = require("react");
651
+ var hasSetupGlobalListeners = false;
652
+ var currentModality = null;
653
+ var changeHandlers = /* @__PURE__ */ new Set();
654
+ var hasEventBeforeFocus = false;
655
+ var isMac = typeof window !== "undefined" && window.navigator != null ? /^Mac/.test(window.navigator.platform) : false;
656
+ function isValidKey(e) {
657
+ return !(e.metaKey || !isMac && e.altKey || e.ctrlKey);
658
+ }
659
+ function triggerChangeHandlers(modality, e) {
660
+ changeHandlers.forEach((handler) => {
661
+ handler(modality, e);
662
+ });
663
+ }
664
+ function handleKeyboardEvent(e) {
665
+ hasEventBeforeFocus = true;
666
+ if (isValidKey(e)) {
667
+ currentModality = "keyboard";
668
+ triggerChangeHandlers("keyboard", e);
669
+ }
670
+ }
671
+ function handlePointerEvent(e) {
672
+ currentModality = "pointer";
673
+ if (e.type === "mousedown" || e.type === "pointerdown") {
674
+ hasEventBeforeFocus = true;
675
+ triggerChangeHandlers("pointer", e);
676
+ }
677
+ }
678
+ function handleFocusEvent(e) {
679
+ if (e.target === window || e.target === document) {
680
+ return;
681
+ }
682
+ if (!hasEventBeforeFocus) {
683
+ currentModality = "keyboard";
684
+ triggerChangeHandlers("keyboard", e);
685
+ }
686
+ hasEventBeforeFocus = false;
687
+ }
688
+ function handleWindowBlur() {
689
+ hasEventBeforeFocus = false;
690
+ }
691
+ function isFocusVisible() {
692
+ return currentModality !== "pointer";
693
+ }
694
+ function setupGlobalFocusEvents() {
695
+ if (typeof window === "undefined" || hasSetupGlobalListeners) {
696
+ return;
697
+ }
698
+ const { focus } = HTMLElement.prototype;
699
+ HTMLElement.prototype.focus = function focusElement(...args) {
700
+ hasEventBeforeFocus = true;
701
+ focus.apply(this, args);
702
+ };
703
+ document.addEventListener("keydown", handleKeyboardEvent, true);
704
+ document.addEventListener("keyup", handleKeyboardEvent, true);
705
+ window.addEventListener("focus", handleFocusEvent, true);
706
+ window.addEventListener("blur", handleWindowBlur, false);
707
+ if (typeof PointerEvent !== "undefined") {
708
+ document.addEventListener("pointerdown", handlePointerEvent, true);
709
+ document.addEventListener("pointermove", handlePointerEvent, true);
710
+ document.addEventListener("pointerup", handlePointerEvent, true);
711
+ } else {
712
+ document.addEventListener("mousedown", handlePointerEvent, true);
713
+ document.addEventListener("mousemove", handlePointerEvent, true);
714
+ document.addEventListener("mouseup", handlePointerEvent, true);
715
+ }
716
+ hasSetupGlobalListeners = true;
717
+ }
718
+ function useFocusVisible() {
719
+ setupGlobalFocusEvents();
720
+ const [isFocusVisibleState, setFocusVisible] = (0, import_react.useState)(isFocusVisible());
721
+ (0, import_react.useEffect)(() => {
722
+ const handler = () => {
723
+ setFocusVisible(isFocusVisible());
724
+ };
725
+ changeHandlers.add(handler);
726
+ return () => {
727
+ changeHandlers.delete(handler);
728
+ };
729
+ }, []);
730
+ return { isFocusVisible: isFocusVisibleState };
731
+ }
732
+
646
733
  // css-module:./Checkbox.module.css#css-module
647
- var Checkbox_module_default = { "mainContainer": "_mainContainer_p0un4_1", "checkboxContainer": "_checkboxContainer_p0un4_8", "inputOverlay": "_inputOverlay_p0un4_13", "focusedCheckbox": "_focusedCheckbox_p0un4_21", "checkbox": "_checkbox_p0un4_8", "uncheckedBox": "_uncheckedBox_p0un4_35", "uncheckedBorder": "_uncheckedBorder_p0un4_39", "uncheckedErrorBorder": "_uncheckedErrorBorder_p0un4_43", "checkedBox": "_checkedBox_p0un4_47", "checkedNonError": "_checkedNonError_p0un4_51", "checkedError": "_checkedError_p0un4_55", "sm": "_sm_p0un4_59", "md": "_md_p0un4_65" };
734
+ var Checkbox_module_default = { "mainContainer": "_mainContainer_1jq7b_1", "checkboxContainer": "_checkboxContainer_1jq7b_8", "inputOverlay": "_inputOverlay_1jq7b_13", "checkbox": "_checkbox_1jq7b_8", "uncheckedBox": "_uncheckedBox_1jq7b_30", "uncheckedBorder": "_uncheckedBorder_1jq7b_34", "uncheckedErrorBorder": "_uncheckedErrorBorder_1jq7b_38", "checkedBox": "_checkedBox_1jq7b_42", "checkedNonError": "_checkedNonError_1jq7b_46", "checkedError": "_checkedError_1jq7b_50", "sm": "_sm_1jq7b_54", "md": "_md_1jq7b_60" };
735
+
736
+ // css-module:../Focus.module.css#css-module
737
+ var Focus_module_default = { "accessibilityOutlineFocus": "_accessibilityOutlineFocus_1h8bq_1" };
648
738
 
649
739
  // src/Checkbox/Checkbox.tsx
650
740
  var import_jsx_runtime10 = require("react/jsx-runtime");
@@ -664,17 +754,18 @@ var Checkbox = ({
664
754
  error = false,
665
755
  onChange
666
756
  }) => {
667
- const [isFocused, setIsFocused] = (0, import_react.useState)(false);
757
+ const [isFocused, setIsFocused] = (0, import_react2.useState)(false);
758
+ const { isFocusVisible: isFocusVisible2 } = useFocusVisible();
668
759
  const checkboxStyling = (0, import_classnames7.default)(Checkbox_module_default.checkbox, Checkbox_module_default[size]);
669
760
  const uncheckedStyling = (0, import_classnames7.default)(checkboxStyling, Checkbox_module_default.uncheckedBox, {
670
761
  [Checkbox_module_default.uncheckedBorder]: !error,
671
762
  [Checkbox_module_default.uncheckedErrorBorder]: error,
672
- [Checkbox_module_default.focusedCheckbox]: isFocused
763
+ [Focus_module_default.accessibilityOutlineFocus]: isFocused && isFocusVisible2
673
764
  });
674
765
  const checkedStyling = (0, import_classnames7.default)(checkboxStyling, Checkbox_module_default.checkedBox, {
675
766
  [Checkbox_module_default.checkedNonError]: !error,
676
767
  [Checkbox_module_default.checkedError]: error,
677
- [Checkbox_module_default.focusedCheckbox]: isFocused
768
+ [Focus_module_default.accessibilityOutlineFocus]: isFocused && isFocusVisible2
678
769
  });
679
770
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("label", { className: (0, import_classnames7.default)(Checkbox_module_default.mainContainer), children: [
680
771
  /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: Checkbox_module_default.checkboxContainer, children: [
@@ -729,91 +820,7 @@ var import_react3 = require("react");
729
820
  var import_classnames8 = __toESM(require_classnames());
730
821
 
731
822
  // css-module:./RadioButton.module.css#css-module
732
- var RadioButton_module_default = { "radioBaseContainer": "_radioBaseContainer_x6och_1", "smBase": "_smBase_x6och_8", "mdBase": "_mdBase_x6och_13", "radioStyleOverride": "_radioStyleOverride_x6och_18", "smOverride": "_smOverride_x6och_23", "mdOverride": "_mdOverride_x6och_28", "background": "_background_x6och_33", "sm": "_sm_x6och_8", "md": "_md_x6och_13", "neutralBorder": "_neutralBorder_x6och_50", "smCheckedBorder": "_smCheckedBorder_x6och_54", "mdCheckedBorder": "_mdCheckedBorder_x6och_58", "errorBorderColor": "_errorBorderColor_x6och_62", "borderColor": "_borderColor_x6och_66", "focusedRadioButton": "_focusedRadioButton_x6och_70" };
733
-
734
- // src/useFocusVisible.tsx
735
- var import_react2 = require("react");
736
- var hasSetupGlobalListeners = false;
737
- var currentModality = null;
738
- var changeHandlers = /* @__PURE__ */ new Set();
739
- var hasEventBeforeFocus = false;
740
- var isMac = typeof window !== "undefined" && window.navigator != null ? /^Mac/.test(window.navigator.platform) : false;
741
- function isValidKey(e) {
742
- return !(e.metaKey || !isMac && e.altKey || e.ctrlKey);
743
- }
744
- function triggerChangeHandlers(modality, e) {
745
- changeHandlers.forEach((handler) => {
746
- handler(modality, e);
747
- });
748
- }
749
- function handleKeyboardEvent(e) {
750
- hasEventBeforeFocus = true;
751
- if (isValidKey(e)) {
752
- currentModality = "keyboard";
753
- triggerChangeHandlers("keyboard", e);
754
- }
755
- }
756
- function handlePointerEvent(e) {
757
- currentModality = "pointer";
758
- if (e.type === "mousedown" || e.type === "pointerdown") {
759
- hasEventBeforeFocus = true;
760
- triggerChangeHandlers("pointer", e);
761
- }
762
- }
763
- function handleFocusEvent(e) {
764
- if (e.target === window || e.target === document) {
765
- return;
766
- }
767
- if (!hasEventBeforeFocus) {
768
- currentModality = "keyboard";
769
- triggerChangeHandlers("keyboard", e);
770
- }
771
- hasEventBeforeFocus = false;
772
- }
773
- function handleWindowBlur() {
774
- hasEventBeforeFocus = false;
775
- }
776
- function isFocusVisible() {
777
- return currentModality !== "pointer";
778
- }
779
- function setupGlobalFocusEvents() {
780
- if (typeof window === "undefined" || hasSetupGlobalListeners) {
781
- return;
782
- }
783
- const { focus } = HTMLElement.prototype;
784
- HTMLElement.prototype.focus = function focusElement(...args) {
785
- hasEventBeforeFocus = true;
786
- focus.apply(this, args);
787
- };
788
- document.addEventListener("keydown", handleKeyboardEvent, true);
789
- document.addEventListener("keyup", handleKeyboardEvent, true);
790
- window.addEventListener("focus", handleFocusEvent, true);
791
- window.addEventListener("blur", handleWindowBlur, false);
792
- if (typeof PointerEvent !== "undefined") {
793
- document.addEventListener("pointerdown", handlePointerEvent, true);
794
- document.addEventListener("pointermove", handlePointerEvent, true);
795
- document.addEventListener("pointerup", handlePointerEvent, true);
796
- } else {
797
- document.addEventListener("mousedown", handlePointerEvent, true);
798
- document.addEventListener("mousemove", handlePointerEvent, true);
799
- document.addEventListener("mouseup", handlePointerEvent, true);
800
- }
801
- hasSetupGlobalListeners = true;
802
- }
803
- function useFocusVisible() {
804
- setupGlobalFocusEvents();
805
- const [isFocusVisibleState, setFocusVisible] = (0, import_react2.useState)(isFocusVisible());
806
- (0, import_react2.useEffect)(() => {
807
- const handler = () => {
808
- setFocusVisible(isFocusVisible());
809
- };
810
- changeHandlers.add(handler);
811
- return () => {
812
- changeHandlers.delete(handler);
813
- };
814
- }, []);
815
- return { isFocusVisible: isFocusVisibleState };
816
- }
823
+ var RadioButton_module_default = { "radioBaseContainer": "_radioBaseContainer_144ms_1", "smBase": "_smBase_144ms_8", "mdBase": "_mdBase_144ms_13", "radioStyleOverride": "_radioStyleOverride_144ms_18", "smOverride": "_smOverride_144ms_23", "mdOverride": "_mdOverride_144ms_28", "background": "_background_144ms_33", "sm": "_sm_144ms_8", "md": "_md_144ms_13", "neutralBorder": "_neutralBorder_144ms_50", "smCheckedBorder": "_smCheckedBorder_144ms_54", "mdCheckedBorder": "_mdCheckedBorder_144ms_58", "errorBorderColor": "_errorBorderColor_144ms_62", "borderColor": "_borderColor_144ms_66" };
817
824
 
818
825
  // src/RadioButton/RadioButton.tsx
819
826
  var import_jsx_runtime12 = require("react/jsx-runtime");
@@ -832,7 +839,7 @@ var RadioButton = ({
832
839
  const sharedStyles = (0, import_classnames8.default)(RadioButton_module_default.background, RadioButton_module_default[size], {
833
840
  [RadioButton_module_default.errorBorderColor]: error,
834
841
  [RadioButton_module_default.borderColor]: !error,
835
- [RadioButton_module_default.focusedRadioButton]: isFocused && isFocusVisible2
842
+ [Focus_module_default.accessibilityOutlineFocus]: isFocused && isFocusVisible2
836
843
  });
837
844
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
838
845
  "label",
@@ -895,7 +902,7 @@ var ColorBaseDestructive700 = "#d32a4b";
895
902
  var ColorBaseGray800 = "#353535";
896
903
 
897
904
  // css-module:./SelectList.module.css#css-module
898
- var SelectList_module_default = { "selectContainer": "_selectContainer_1y5p4_1", "opacityOverlay": "_opacityOverlay_1y5p4_7", "outerTextContainer": "_outerTextContainer_1y5p4_11", "selectWrapper": "_selectWrapper_1y5p4_16", "selectBox": "_selectBox_1y5p4_21", "unselected": "_unselected_1y5p4_40", "selected": "_selected_1y5p4_44", "arrowIcon": "_arrowIcon_1y5p4_48", "sm": "_sm_1y5p4_62", "md": "_md_1y5p4_67", "lg": "_lg_1y5p4_72", "selectError": "_selectError_1y5p4_77" };
905
+ var SelectList_module_default = { "selectContainer": "_selectContainer_1e7f9_1", "opacityOverlay": "_opacityOverlay_1e7f9_7", "outerTextContainer": "_outerTextContainer_1e7f9_11", "selectWrapper": "_selectWrapper_1e7f9_16", "selectBox": "_selectBox_1e7f9_21", "seletBoxMouseFocusStyling": "_seletBoxMouseFocusStyling_1e7f9_35", "unselected": "_unselected_1e7f9_40", "selected": "_selected_1e7f9_44", "arrowIcon": "_arrowIcon_1e7f9_48", "sm": "_sm_1e7f9_62", "md": "_md_1e7f9_67", "lg": "_lg_1e7f9_72", "selectError": "_selectError_1e7f9_77" };
899
906
 
900
907
  // src/SelectList/SelectOption.tsx
901
908
  var import_jsx_runtime13 = require("react/jsx-runtime");
@@ -933,6 +940,8 @@ var SelectList = ({
933
940
  size = "md"
934
941
  }) => {
935
942
  const id = (0, import_react4.useId)();
943
+ const { isFocusVisible: isFocusVisible2 } = useFocusVisible();
944
+ const [isFocused, setIsFocused] = (0, import_react4.useState)(false);
936
945
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
937
946
  "div",
938
947
  {
@@ -951,10 +960,16 @@ var SelectList = ({
951
960
  className: (0, import_classnames9.default)(SelectList_module_default.selectBox, SelectList_module_default[size], {
952
961
  [SelectList_module_default.unselected]: !selectedValue && !errorText,
953
962
  [SelectList_module_default.selected]: selectedValue && !errorText,
954
- [SelectList_module_default.selectError]: errorText
963
+ [SelectList_module_default.selectError]: errorText,
964
+ [Focus_module_default.accessibilityOutlineFocus]: isFocused && isFocusVisible2,
965
+ // for focus keyboard
966
+ [SelectList_module_default.seletBoxMouseFocusStyling]: isFocused && !isFocusVisible2
967
+ // for focus mouse
955
968
  }),
956
969
  onChange,
957
970
  value: placeholderText && !selectedValue ? placeholderText : selectedValue,
971
+ onFocus: () => setIsFocused(true),
972
+ onBlur: () => setIsFocused(false),
958
973
  children: [
959
974
  placeholderText && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("option", { disabled: true, value: placeholderText, children: placeholderText }),
960
975
  children