@jsenv/navi 0.14.29 → 0.14.30

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.
@@ -13848,6 +13848,27 @@ const installCustomConstraintValidation = (
13848
13848
  });
13849
13849
  }
13850
13850
 
13851
+ request_on_checkbox_change: {
13852
+ const isCheckbox =
13853
+ element.tagName === "INPUT" && element.type === "checkbox";
13854
+ if (!isCheckbox) {
13855
+ break request_on_checkbox_change;
13856
+ }
13857
+ const onchange = (e) => {
13858
+ if (element.parentNode.hasAttribute("data-action")) {
13859
+ dispatchActionRequestedCustomEvent(element, {
13860
+ event: e,
13861
+ requester: element,
13862
+ });
13863
+ return;
13864
+ }
13865
+ };
13866
+ element.addEventListener("change", onchange);
13867
+ addTeardown(() => {
13868
+ element.removeEventListener("change", onchange);
13869
+ });
13870
+ }
13871
+
13851
13872
  execute_on_form_submit: {
13852
13873
  if (!isForm) {
13853
13874
  break execute_on_form_submit;
@@ -16048,6 +16069,7 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
16048
16069
  --button-border-color: light-dark(#767676, #8e8e93);
16049
16070
  --button-background-color: light-dark(#f3f4f6, #2d3748);
16050
16071
  --button-color: currentColor;
16072
+ --button-cursor: pointer;
16051
16073
 
16052
16074
  /* Hover */
16053
16075
  --button-border-color-hover: color-mix(
@@ -16101,6 +16123,7 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
16101
16123
  --x-button-border-color: var(--button-border-color);
16102
16124
  --x-button-background-color: var(--button-background-color);
16103
16125
  --x-button-color: var(--button-color);
16126
+ --x-button-cursor: var(--button-cursor);
16104
16127
 
16105
16128
  position: relative;
16106
16129
  box-sizing: border-box;
@@ -16111,7 +16134,7 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
16111
16134
  border: none;
16112
16135
  border-radius: var(--x-button-border-radius);
16113
16136
  outline: none;
16114
- cursor: pointer;
16137
+ cursor: var(--x-button-cursor);
16115
16138
 
16116
16139
  &[data-icon] {
16117
16140
  --button-padding: 0;
@@ -16199,6 +16222,7 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
16199
16222
  --x-button-border-color: var(--button-border-color-readonly);
16200
16223
  --x-button-background-color: var(--button-background-color-readonly);
16201
16224
  --x-button-color: var(--button-color-readonly);
16225
+ --x-button-cursor: default;
16202
16226
  }
16203
16227
  /* Focus */
16204
16228
  &[data-focus-visible] {
@@ -16215,9 +16239,9 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
16215
16239
  --x-button-border-color: var(--button-border-color-disabled);
16216
16240
  --x-button-background-color: var(--button-background-color-disabled);
16217
16241
  --x-button-color: var(--button-color-disabled);
16242
+ --x-button-cursor: default;
16218
16243
 
16219
16244
  color: unset;
16220
- cursor: default;
16221
16245
 
16222
16246
  /* Remove active effects */
16223
16247
  .navi_button_content {
@@ -16625,7 +16649,7 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
16625
16649
  .navi_message_box {
16626
16650
  .navi_title {
16627
16651
  margin-top: 0;
16628
- margin-bottom: var(--navi-spacing-s);
16652
+ margin-bottom: var(--navi-s);
16629
16653
  color: var(--x-message-color);
16630
16654
  }
16631
16655
  }
@@ -17603,6 +17627,7 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
17603
17627
  `;
17604
17628
  const ReportReadOnlyOnLabelContext = createContext();
17605
17629
  const ReportDisabledOnLabelContext = createContext();
17630
+ const LabelPseudoClasses = [":hover", ":active", ":focus", ":focus-visible", ":read-only", ":disabled", ":-navi-loading"];
17606
17631
  const Label = props => {
17607
17632
  const {
17608
17633
  readOnly,
@@ -17617,9 +17642,10 @@ const Label = props => {
17617
17642
  return jsx(Box, {
17618
17643
  ...rest,
17619
17644
  as: "label",
17645
+ pseudoClasses: LabelPseudoClasses,
17620
17646
  basePseudoState: {
17621
- readOnly: innerReadOnly,
17622
- disabled: innerDisabled
17647
+ ":read-only": innerReadOnly,
17648
+ ":disabled": innerDisabled
17623
17649
  },
17624
17650
  children: jsx(ReportReadOnlyOnLabelContext.Provider, {
17625
17651
  value: setInputReadOnly,
@@ -17645,7 +17671,8 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
17645
17671
  --loader-color: var(--navi-loader-color);
17646
17672
  --border-color: light-dark(#767676, #8e8e93);
17647
17673
  --background-color: white;
17648
- --color: light-dark(#4476ff, #3b82f6);
17674
+ --background-color-checked: var(--color, light-dark(#4476ff, #3b82f6));
17675
+ --border-color-checked: var(--color, light-dark(#4476ff, #3b82f6));
17649
17676
  --checkmark-color-light: white;
17650
17677
  --checkmark-color-dark: rgb(55, 55, 55);
17651
17678
  --checkmark-color: var(--checkmark-color-light);
@@ -17658,12 +17685,13 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
17658
17685
  --border-color-hover: color-mix(in srgb, var(--border-color) 60%, black);
17659
17686
  --border-color-hover-checked: color-mix(
17660
17687
  in srgb,
17661
- var(--color) 80%,
17688
+ var(--border-color-checked) 80%,
17662
17689
  var(--color-mix)
17663
17690
  );
17691
+ --background-color-hover: var(--background-color);
17664
17692
  --background-color-hover-checked: color-mix(
17665
17693
  in srgb,
17666
- var(--color) 80%,
17694
+ var(--background-color-checked) 80%,
17667
17695
  var(--color-mix)
17668
17696
  );
17669
17697
  /* Readonly */
@@ -17681,20 +17709,15 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
17681
17709
  --checkmark-color-disabled: #eeeeee;
17682
17710
  --border-color-disabled-checked: #d3d3d3;
17683
17711
  --background-color-disabled-checked: #d3d3d3;
17684
- }
17685
17712
 
17686
- .navi_checkbox[data-dark] {
17687
- --color-mix: var(--color-mix-dark);
17688
- --checkmark-color: var(--navi-checkmark-color-dark);
17713
+ &[data-dark] {
17714
+ --color-mix: var(--color-mix-dark);
17715
+ --checkmark-color: var(--navi-checkmark-color-dark);
17716
+ }
17689
17717
  }
17690
17718
  }
17691
17719
 
17692
17720
  .navi_checkbox {
17693
- position: relative;
17694
- display: inline-flex;
17695
- box-sizing: content-box;
17696
- margin: 3px 3px 3px 4px;
17697
-
17698
17721
  --x-border-radius: var(--border-radius);
17699
17722
  --x-outline-offset: var(--outline-offset);
17700
17723
  --x-outline-width: var(--outline-width);
@@ -17706,82 +17729,198 @@ installImportMetaCss(import.meta);import.meta.css = /* css */`
17706
17729
  --x-border-color: var(--border-color);
17707
17730
  --x-color: var(--color);
17708
17731
  --x-checkmark-color: var(--checkmark-color);
17709
- }
17710
- .navi_checkbox .navi_native_field {
17711
- position: absolute;
17712
- inset: 0;
17713
- margin: 0;
17714
- padding: 0;
17715
- border: none;
17716
- opacity: 0;
17717
- cursor: inherit;
17718
- }
17719
- .navi_checkbox .navi_checkbox_field {
17732
+
17733
+ position: relative;
17720
17734
  display: inline-flex;
17721
- box-sizing: border-box;
17722
- width: var(--x-width);
17723
- height: var(--x-height);
17724
- background-color: var(--x-background-color);
17725
- border-width: var(--x-border-width);
17726
- border-style: solid;
17727
- border-color: var(--x-border-color);
17728
- border-radius: var(--x-border-radius);
17729
- outline-width: var(--x-outline-width);
17730
- outline-style: none;
17731
- outline-color: var(--x-outline-color);
17732
- outline-offset: var(--x-outline-offset);
17733
- }
17734
- .navi_checkbox_marker {
17735
- width: 100%;
17736
- height: 100%;
17737
- opacity: 0;
17738
- stroke: var(--x-checkmark-color);
17739
- transform: scale(0.5);
17740
- transition: all 0.15s ease;
17741
- pointer-events: none;
17742
- }
17743
- .navi_checkbox[data-checked] .navi_checkbox_marker {
17744
- opacity: 1;
17745
- transform: scale(1);
17746
- }
17735
+ box-sizing: content-box;
17736
+ margin: 3px 3px 3px 4px;
17747
17737
 
17748
- /* Focus */
17749
- .navi_checkbox[data-focus-visible] .navi_checkbox_field {
17750
- outline-style: solid;
17751
- }
17752
- /* Hover */
17753
- .navi_checkbox[data-hover] {
17754
- --x-border-color: var(--border-color-hover);
17755
- }
17756
- .navi_checkbox[data-checked][data-hover] {
17757
- --x-border-color: var(--border-color-hover-checked);
17758
- --x-background-color: var(--background-color-hover-checked);
17759
- }
17760
- /* Checked */
17761
- .navi_checkbox[data-checked] {
17762
- --x-background-color: var(--x-color);
17763
- --x-border-color: var(--x-color);
17764
- }
17765
- /* Readonly */
17766
- .navi_checkbox[data-readonly],
17767
- .navi_checkbox[data-readonly][data-hover] {
17768
- --x-border-color: var(--border-color-readonly);
17769
- --x-background-color: var(--background-color-readonly);
17770
- }
17771
- .navi_checkbox[data-readonly][data-checked] {
17772
- --x-border-color: var(--border-color-readonly-checked);
17773
- --x-background-color: var(--background-color-readonly-checked);
17774
- --x-checkmark-color: var(--checkmark-color-readonly);
17775
- }
17776
- /* Disabled */
17777
- .navi_checkbox[data-disabled] {
17778
- --x-border-color: var(--border-color-disabled);
17779
- --x-background-color: var(--background-color-disabled);
17780
- }
17781
- .navi_checkbox[data-disabled][data-checked] {
17782
- --x-border-color: var(--border-color-disabled-checked);
17783
- --x-background-color: var(--background-color-disabled-checked);
17784
- --x-checkmark-color: var(--checkmark-color-disabled);
17738
+ .navi_native_field {
17739
+ position: absolute;
17740
+ inset: 0;
17741
+ margin: 0;
17742
+ padding: 0;
17743
+ border: none;
17744
+ opacity: 0;
17745
+ cursor: inherit;
17746
+ }
17747
+
17748
+ .navi_checkbox_field {
17749
+ display: inline-flex;
17750
+ box-sizing: border-box;
17751
+ width: var(--x-width);
17752
+ height: var(--x-height);
17753
+ background-color: var(--x-background-color);
17754
+ border-width: var(--x-border-width);
17755
+ border-style: solid;
17756
+ border-color: var(--x-border-color);
17757
+ border-radius: var(--x-border-radius);
17758
+ outline-width: var(--x-outline-width);
17759
+ outline-style: none;
17760
+ outline-color: var(--x-outline-color);
17761
+ outline-offset: var(--x-outline-offset);
17762
+ pointer-events: none;
17763
+
17764
+ .navi_checkbox_marker {
17765
+ width: 100%;
17766
+ height: 100%;
17767
+ opacity: 0;
17768
+ stroke: var(--x-checkmark-color);
17769
+ transform: scale(0.5);
17770
+ }
17771
+ }
17772
+
17773
+ /* Focus */
17774
+ &[data-focus-visible] {
17775
+ .navi_checkbox_field {
17776
+ outline-style: solid;
17777
+ }
17778
+ }
17779
+ /* Hover */
17780
+ &[data-hover] {
17781
+ --x-background-color: var(--background-color-hover);
17782
+ --x-border-color: var(--border-color-hover);
17783
+
17784
+ &[data-checked] {
17785
+ --x-border-color: var(--border-color-hover-checked);
17786
+ --x-background-color: var(--background-color-hover-checked);
17787
+ }
17788
+ }
17789
+ /* Checked */
17790
+ &[data-checked] {
17791
+ --x-background-color: var(--background-color-checked);
17792
+ --x-border-color: var(--border-color-checked);
17793
+
17794
+ .navi_checkbox_marker {
17795
+ opacity: 1;
17796
+ transform: scale(1);
17797
+ transition-property: opacity, transform;
17798
+ transition-duration: 0.15s;
17799
+ transition-timing-function: ease;
17800
+ }
17801
+ }
17802
+ /* Readonly */
17803
+ &[data-readonly],
17804
+ &[data-readonly][data-hover] {
17805
+ --x-border-color: var(--border-color-readonly);
17806
+ --x-background-color: var(--background-color-readonly);
17807
+
17808
+ &[data-checked] {
17809
+ --x-border-color: var(--border-color-readonly-checked);
17810
+ --x-background-color: var(--background-color-readonly-checked);
17811
+ --x-checkmark-color: var(--checkmark-color-readonly);
17812
+ }
17813
+ }
17814
+
17815
+ /* Disabled */
17816
+ &[data-disabled] {
17817
+ --x-border-color: var(--border-color-disabled);
17818
+ --x-background-color: var(--background-color-disabled);
17819
+
17820
+ &[data-checked] {
17821
+ --x-border-color: var(--border-color-disabled-checked);
17822
+ --x-background-color: var(--background-color-disabled-checked);
17823
+ --x-checkmark-color: var(--checkmark-color-disabled);
17824
+ }
17825
+ }
17826
+
17827
+ /* Toggle appearance */
17828
+ &[data-toggle] {
17829
+ --toggle-width: 3em;
17830
+ --toggle-thumb-size: 1.2em;
17831
+ --toggle-padding: 2px;
17832
+ --toggle-thumb-border-radius: 50%;
17833
+ --toggle-background-color: light-dark(#767676, #8e8e93);
17834
+ --toggle-background-color-checked: var(
17835
+ --color,
17836
+ light-dark(#4476ff, #3b82f6)
17837
+ );
17838
+ --toggle-background-color-hover: color-mix(
17839
+ in srgb,
17840
+ var(--toggle-background-color) 60%,
17841
+ white
17842
+ );
17843
+ --toggle-background-color-readonly: color-mix(
17844
+ in srgb,
17845
+ var(--toggle-background-color) 40%,
17846
+ transparent
17847
+ );
17848
+ --toggle-background-color-disabled: color-mix(
17849
+ in srgb,
17850
+ var(--toggle-background-color) 15%,
17851
+ #d3d3d3
17852
+ );
17853
+ --toggle-background-color-hover-checked: color-mix(
17854
+ in srgb,
17855
+ var(--toggle-background-color-checked) 60%,
17856
+ black
17857
+ );
17858
+ --toggle-background-color-readonly-checked: color-mix(
17859
+ in srgb,
17860
+ var(--toggle-background-color-checked) 40%,
17861
+ transparent
17862
+ );
17863
+ --toggle-background-color-disabled-checked: color-mix(
17864
+ in srgb,
17865
+ var(--toggle-background-color-checked) 15%,
17866
+ #d3d3d3
17867
+ );
17868
+
17869
+ --toggle-thumb-color: white;
17870
+
17871
+ --background-color: var(--toggle-background-color);
17872
+ --background-color-hover: var(--toggle-background-color-hover);
17873
+ --background-color-readonly: var(--toggle-background-color-readonly);
17874
+ --background-color-disabled: var(--toggle-background-color-disabled);
17875
+ --background-color-checked: var(--toggle-background-color-checked);
17876
+ --background-color-hover-checked: var(
17877
+ --toggle-background-color-hover-checked
17878
+ );
17879
+ --background-color-readonly-checked: var(
17880
+ --toggle-background-color-readonly-checked
17881
+ );
17882
+ --background-color-disabled-checked: var(
17883
+ --toggle-background-color-disabled-checked
17884
+ );
17885
+
17886
+ margin: 0;
17887
+ border-radius: calc(
17888
+ var(--toggle-thumb-size) / 2 + calc(var(--toggle-padding) * 2)
17889
+ );
17890
+
17891
+ .navi_native_field {
17892
+ border-radius: inherit;
17893
+ appearance: none; /* This allows border-radius to have an effect */
17894
+ }
17895
+
17896
+ .navi_checkbox_field {
17897
+ position: relative;
17898
+ width: var(--toggle-width);
17899
+ height: auto;
17900
+ padding: var(--toggle-padding);
17901
+ background-color: var(--x-background-color);
17902
+ border-color: transparent;
17903
+ border-radius: inherit;
17904
+ user-select: none;
17905
+
17906
+ .navi_checkbox_marker {
17907
+ width: var(--toggle-thumb-size);
17908
+ height: var(--toggle-thumb-size);
17909
+ border-radius: var(--toggle-thumb-border-radius);
17910
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
17911
+ opacity: 1;
17912
+ fill: var(--toggle-thumb-color);
17913
+ transform: translateX(0);
17914
+ transition: transform 0.2s ease;
17915
+ }
17916
+ }
17917
+
17918
+ &[data-checked] {
17919
+ .navi_checkbox_marker {
17920
+ transform: translateX(calc(100% + var(--toggle-padding) * 2));
17921
+ }
17922
+ }
17923
+ }
17785
17924
  }
17786
17925
  `;
17787
17926
  const InputCheckbox = props => {
@@ -17853,6 +17992,7 @@ const InputCheckboxBasic = props => {
17853
17992
  defaultChecked,
17854
17993
  /* eslint-enable no-unused-vars */
17855
17994
 
17995
+ id,
17856
17996
  name,
17857
17997
  readOnly,
17858
17998
  disabled,
@@ -17862,6 +18002,7 @@ const InputCheckboxBasic = props => {
17862
18002
  onClick,
17863
18003
  onInput,
17864
18004
  color,
18005
+ toggle,
17865
18006
  ...rest
17866
18007
  } = props;
17867
18008
  const defaultRef = useRef();
@@ -17890,6 +18031,7 @@ const InputCheckboxBasic = props => {
17890
18031
  });
17891
18032
  const renderCheckbox = checkboxProps => jsx(Box, {
17892
18033
  ...checkboxProps,
18034
+ id: id,
17893
18035
  as: "input",
17894
18036
  ref: ref,
17895
18037
  type: "checkbox",
@@ -17907,7 +18049,7 @@ const InputCheckboxBasic = props => {
17907
18049
  uiStateController.setUIState(e.detail.value, e);
17908
18050
  }
17909
18051
  });
17910
- const renderCheckboxMemoized = useCallback(renderCheckbox, [innerName, checked, innerRequired]);
18052
+ const renderCheckboxMemoized = useCallback(renderCheckbox, [id, innerName, checked, innerRequired]);
17911
18053
  useLayoutEffect(() => {
17912
18054
  const naviCheckbox = ref.current;
17913
18055
  const lightColor = "var(--checkmark-color-light)";
@@ -17923,6 +18065,7 @@ const InputCheckboxBasic = props => {
17923
18065
  as: "span",
17924
18066
  ...remainingProps,
17925
18067
  ref: undefined,
18068
+ "data-toggle": toggle ? "" : undefined,
17926
18069
  baseClassName: "navi_checkbox",
17927
18070
  pseudoStateSelector: ".navi_native_field",
17928
18071
  styleCSSVars: CheckboxStyleCSSVars,
@@ -17935,13 +18078,24 @@ const InputCheckboxBasic = props => {
17935
18078
  },
17936
18079
  color: color,
17937
18080
  hasChildFunction: true,
18081
+ preventInitialTransition: true,
17938
18082
  children: [jsx(LoaderBackground, {
17939
18083
  loading: innerLoading,
17940
18084
  inset: -1,
17941
- color: "var(--loader-color)"
18085
+ color: "var(--loader-color)",
18086
+ targetSelector: ".navi_checkbox_field"
17942
18087
  }), renderCheckboxMemoized, jsx("div", {
17943
18088
  className: "navi_checkbox_field",
17944
- children: jsx("svg", {
18089
+ children: toggle ? jsx("svg", {
18090
+ viewBox: "0 0 12 12",
18091
+ "aria-hidden": "true",
18092
+ className: "navi_checkbox_marker",
18093
+ children: jsx("circle", {
18094
+ cx: "6",
18095
+ cy: "6",
18096
+ r: "5"
18097
+ })
18098
+ }) : jsx("svg", {
17945
18099
  viewBox: "0 0 12 12",
17946
18100
  "aria-hidden": "true",
17947
18101
  className: "navi_checkbox_marker",
@@ -17960,7 +18114,6 @@ const InputCheckboxWithAction = props => {
17960
18114
  const {
17961
18115
  action,
17962
18116
  onCancel,
17963
- onChange,
17964
18117
  actionErrorEffect,
17965
18118
  onActionPrevented,
17966
18119
  onActionStart,
@@ -17991,6 +18144,7 @@ const InputCheckboxWithAction = props => {
17991
18144
  uiStateController.resetUIState(e);
17992
18145
  onCancel?.(e, reason);
17993
18146
  },
18147
+ onRequested: e => forwardActionRequested(e, actionBoundToUIState),
17994
18148
  onPrevented: onActionPrevented,
17995
18149
  onAction: executeAction,
17996
18150
  onStart: onActionStart,
@@ -18010,13 +18164,7 @@ const InputCheckboxWithAction = props => {
18010
18164
  "data-action": actionBoundToUIState.name,
18011
18165
  ...rest,
18012
18166
  ref: ref,
18013
- loading: loading || actionLoading,
18014
- onChange: e => {
18015
- requestAction(e.target, actionBoundToUIState, {
18016
- event: e
18017
- });
18018
- onChange?.(e);
18019
- }
18167
+ loading: loading || actionLoading
18020
18168
  });
18021
18169
  };
18022
18170