obsidian-dev-utils 1.7.0 → 1.7.1

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
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.7.1
4
+
5
+ - Make proper `bindValueComponent` overloads
6
+
3
7
  ## 1.7.0
4
8
 
5
9
  - Allow convert plugin setting values
@@ -45,26 +45,26 @@ class PluginSettingsTabBase extends import_obsidian.PluginSettingTab {
45
45
  this.plugin = plugin;
46
46
  }
47
47
  /**
48
- * Binds a value component to a plugin setting property.
48
+ * Internal implementation of `bindValueComponent` that handles both overloads.
49
49
  *
50
- * @template TValueComponent - The type of the value component.
51
- * @template Property - The type of the plugin setting property.
52
- * @template PropertyType - The type of the plugin setting property value.
50
+ * @typeParam TValueComponent - The type of the value component extending `ValueComponent`.
51
+ * @typeParam Property - The key of the plugin setting that the component is bound to.
52
+ * @typeParam UIValueType - The inferred type of the UI value based on the value component's type.
53
53
  *
54
- * @param valueComponent - The value component to bind.
55
- * @param property - The plugin setting property to bind the value component to.
56
- * @param options - Additional options for binding.
57
- * @param options.autoSave - Whether to automatically save the settings when the value changes. Default is true.
58
- * @param options.settingToUIValueConverter - A function to convert the setting value to the UI value. Default is identity function.
59
- * @param options.uiToSettingValueConverter - A function to convert the UI value to the setting value. Default is identity function.
54
+ * @param valueComponent - The component that will display and interact with the setting value.
55
+ * @param property - The property key in `PluginSettings` to bind to the component.
56
+ * @param options - Configuration options.
57
+ * @param options.autoSave - If true, saves the plugin settings automatically after the component value changes.
58
+ * @param options.settingToUIValueConverter - A function that converts the setting value to the value used by the UI component.
59
+ * @param options.uiToSettingValueConverter - A function that converts the UI component's value back to the setting value.
60
60
  *
61
- * @returns The bound value component.
61
+ * @returns The `TValueComponent` instance that was bound to the property.
62
62
  */
63
63
  bindValueComponent(valueComponent, property, {
64
- autoSave = true,
65
- settingToUIValueConverter = (value) => value,
66
- uiToSettingValueConverter = (value) => value
67
- } = {}) {
64
+ autoSave,
65
+ settingToUIValueConverter,
66
+ uiToSettingValueConverter
67
+ }) {
68
68
  const pluginSettings = this.plugin.settingsCopy;
69
69
  valueComponent.setValue(settingToUIValueConverter(pluginSettings[property])).onChange(async (newValue) => {
70
70
  pluginSettings[property] = uiToSettingValueConverter(newValue);
@@ -79,4 +79,4 @@ class PluginSettingsTabBase extends import_obsidian.PluginSettingTab {
79
79
  0 && (module.exports = {
80
80
  PluginSettingsTabBase
81
81
  });
82
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5TZXR0aW5nc1RhYkJhc2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1tcImltcG9ydC5tZXRhLnVybFwiXSA/PyAoKCk9PnJlcXVpcmUoXCJub2RlOnVybFwiKS5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpKSgpO1xuY29uc3QgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl0gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAZmlsZSBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgcGx1Z2luIHNldHRpbmcgdGFicyBpbiBPYnNpZGlhbi5cbiAqIEl0IHByb3ZpZGVzIGEgdXRpbGl0eSBtZXRob2QgdG8gYmluZCB2YWx1ZSBjb21wb25lbnRzIHRvIHBsdWdpbiBzZXR0aW5ncyBhbmQgaGFuZGxlIGNoYW5nZXMuXG4gKi9cblxuaW1wb3J0IHsgUGx1Z2luU2V0dGluZ1RhYiB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgUGx1Z2luQmFzZSB9IGZyb20gXCIuL1BsdWdpbkJhc2UudHNcIjtcbmltcG9ydCB0eXBlIHsgS2V5c01hdGNoaW5nIH0gZnJvbSBcIi4uLy4uL0B0eXBlcy50c1wiO1xuXG5pbnRlcmZhY2UgVmFsdWVDb21wb25lbnQ8VD4ge1xuICBzZXRWYWx1ZSh2YWx1ZTogVCk6IHRoaXM7XG4gIG9uQ2hhbmdlKGNhbGxiYWNrOiAobmV3VmFsdWU6IFQpID0+IFByb21pc2U8dm9pZD4pOiB0aGlzO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5ncyB0YWJzIGluIE9ic2lkaWFuLlxuICogUHJvdmlkZXMgYSBtZXRob2QgZm9yIGJpbmRpbmcgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsaW5nIGNoYW5nZXMuXG4gKlxuICogQHRlbXBsYXRlIFRQbHVnaW4gLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHRoYXQgZXh0ZW5kcyBQbHVnaW5CYXNlLlxuICogQHRlbXBsYXRlIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncyBvYmplY3QuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQbHVnaW5TZXR0aW5nc1RhYkJhc2U8XG4gIFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW5CYXNlPFBsdWdpblNldHRpbmdzPixcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Rcbj4gZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUGx1Z2luU2V0dGluZ3NUYWJCYXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RQbHVnaW59IHBsdWdpbiAtIFRoZSBwbHVnaW4gaW5zdGFuY2UgdG8gd2hpY2ggdGhpcyBzZXR0aW5ncyB0YWIgYmVsb25ncy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgb3ZlcnJpZGUgcGx1Z2luOiBUUGx1Z2luKSB7XG4gICAgc3VwZXIocGx1Z2luLmFwcCwgcGx1Z2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nIHByb3BlcnR5LlxuICAgKlxuICAgKiBAdGVtcGxhdGUgVFZhbHVlQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHRlbXBsYXRlIFByb3BlcnR5IC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5nIHByb3BlcnR5LlxuICAgKiBAdGVtcGxhdGUgUHJvcGVydHlUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5nIHByb3BlcnR5IHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVDb21wb25lbnQgLSBUaGUgdmFsdWUgY29tcG9uZW50IHRvIGJpbmQuXG4gICAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwbHVnaW4gc2V0dGluZyBwcm9wZXJ0eSB0byBiaW5kIHRoZSB2YWx1ZSBjb21wb25lbnQgdG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBiaW5kaW5nLlxuICAgKiBAcGFyYW0gb3B0aW9ucy5hdXRvU2F2ZSAtIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzYXZlIHRoZSBzZXR0aW5ncyB3aGVuIHRoZSB2YWx1ZSBjaGFuZ2VzLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqIEBwYXJhbSBvcHRpb25zLnNldHRpbmdUb1VJVmFsdWVDb252ZXJ0ZXIgLSBBIGZ1bmN0aW9uIHRvIGNvbnZlcnQgdGhlIHNldHRpbmcgdmFsdWUgdG8gdGhlIFVJIHZhbHVlLiBEZWZhdWx0IGlzIGlkZW50aXR5IGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gb3B0aW9ucy51aVRvU2V0dGluZ1ZhbHVlQ29udmVydGVyIC0gQSBmdW5jdGlvbiB0byBjb252ZXJ0IHRoZSBVSSB2YWx1ZSB0byB0aGUgc2V0dGluZyB2YWx1ZS4gRGVmYXVsdCBpcyBpZGVudGl0eSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGJvdW5kIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBiaW5kVmFsdWVDb21wb25lbnQ8XG4gICAgVFZhbHVlQ29tcG9uZW50IGV4dGVuZHMgVmFsdWVDb21wb25lbnQ8dW5rbm93bj4sXG4gICAgUHJvcGVydHkgZXh0ZW5kcyBLZXlzTWF0Y2hpbmc8UGx1Z2luU2V0dGluZ3MsIFByb3BlcnR5VHlwZT4sXG4gICAgUHJvcGVydHlUeXBlID0gVFZhbHVlQ29tcG9uZW50IGV4dGVuZHMgVmFsdWVDb21wb25lbnQ8aW5mZXIgUD4gPyBQIDogbmV2ZXIsXG4gID4oXG4gICAgdmFsdWVDb21wb25lbnQ6IFRWYWx1ZUNvbXBvbmVudCxcbiAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAge1xuICAgICAgYXV0b1NhdmUgPSB0cnVlLFxuICAgICAgc2V0dGluZ1RvVUlWYWx1ZUNvbnZlcnRlciA9ICh2YWx1ZSk6IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5XSA9PiB2YWx1ZSxcbiAgICAgIHVpVG9TZXR0aW5nVmFsdWVDb252ZXJ0ZXIgPSAodmFsdWUpOiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eV0gPT4gdmFsdWVcbiAgICB9OiB7XG4gICAgICBhdXRvU2F2ZT86IGJvb2xlYW5cbiAgICAgIHNldHRpbmdUb1VJVmFsdWVDb252ZXJ0ZXI/OiAodmFsdWU6IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5XSkgPT4gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHldLFxuICAgICAgdWlUb1NldHRpbmdWYWx1ZUNvbnZlcnRlcj86ICh2YWx1ZTogUGx1Z2luU2V0dGluZ3NbUHJvcGVydHldKSA9PiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eV1cbiAgICB9ID0ge31cbiAgKTogVFZhbHVlQ29tcG9uZW50IHtcbiAgICBjb25zdCBwbHVnaW5TZXR0aW5ncyA9IHRoaXMucGx1Z2luLnNldHRpbmdzQ29weTtcbiAgICB2YWx1ZUNvbXBvbmVudFxuICAgICAgLnNldFZhbHVlKHNldHRpbmdUb1VJVmFsdWVDb252ZXJ0ZXIocGx1Z2luU2V0dGluZ3NbcHJvcGVydHldKSlcbiAgICAgIC5vbkNoYW5nZShhc3luYyAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgcGx1Z2luU2V0dGluZ3NbcHJvcGVydHldID0gdWlUb1NldHRpbmdWYWx1ZUNvbnZlcnRlcihuZXdWYWx1ZSBhcyBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eV0pO1xuICAgICAgICBpZiAoYXV0b1NhdmUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MocGx1Z2luU2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVDb21wb25lbnQ7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHNCQUFpQztBQUNqQyx3QkFBMkI7QUFaM0IsTUFBTSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxNQUFJLFFBQVEsVUFBVSxFQUFFLGNBQWMsVUFBVSxHQUFHO0FBQy9HLE1BQU0sWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3pDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUFzQk8sTUFBZSw4QkFHWixpQ0FBaUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNbEIsWUFBNEIsUUFBaUI7QUFDbEQsVUFBTSxPQUFPLEtBQUssTUFBTTtBQURTO0FBQUEsRUFFbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBa0JVLG1CQUtSLGdCQUNBLFVBQ0E7QUFBQSxJQUNFLFdBQVc7QUFBQSxJQUNYLDRCQUE0QixDQUFDLFVBQW9DO0FBQUEsSUFDakUsNEJBQTRCLENBQUMsVUFBb0M7QUFBQSxFQUNuRSxJQUlJLENBQUMsR0FDWTtBQUNqQixVQUFNLGlCQUFpQixLQUFLLE9BQU87QUFDbkMsbUJBQ0csU0FBUywwQkFBMEIsZUFBZSxRQUFRLENBQUMsQ0FBQyxFQUM1RCxTQUFTLE9BQU8sYUFBYTtBQUM1QixxQkFBZSxRQUFRLElBQUksMEJBQTBCLFFBQW9DO0FBQ3pGLFVBQUksVUFBVTtBQUNaLGNBQU0sS0FBSyxPQUFPLGFBQWEsY0FBYztBQUFBLE1BQy9DO0FBQUEsSUFDRixDQUFDO0FBQ0gsV0FBTztBQUFBLEVBQ1Q7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
82
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5TZXR0aW5nc1RhYkJhc2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1tcImltcG9ydC5tZXRhLnVybFwiXSA/PyAoKCk9PnJlcXVpcmUoXCJub2RlOnVybFwiKS5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpKSgpO1xuY29uc3QgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl0gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAZmlsZSBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgcGx1Z2luIHNldHRpbmcgdGFicyBpbiBPYnNpZGlhbi5cbiAqIEl0IHByb3ZpZGVzIGEgdXRpbGl0eSBtZXRob2QgdG8gYmluZCB2YWx1ZSBjb21wb25lbnRzIHRvIHBsdWdpbiBzZXR0aW5ncyBhbmQgaGFuZGxlIGNoYW5nZXMuXG4gKi9cblxuaW1wb3J0IHsgUGx1Z2luU2V0dGluZ1RhYiB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgUGx1Z2luQmFzZSB9IGZyb20gXCIuL1BsdWdpbkJhc2UudHNcIjtcbmltcG9ydCB0eXBlIHsgS2V5c01hdGNoaW5nIH0gZnJvbSBcIi4uLy4uL0B0eXBlcy50c1wiO1xuXG5pbnRlcmZhY2UgVmFsdWVDb21wb25lbnQ8VD4ge1xuICBzZXRWYWx1ZSh2YWx1ZTogVCk6IHRoaXM7XG4gIG9uQ2hhbmdlKGNhbGxiYWNrOiAobmV3VmFsdWU6IFQpID0+IFByb21pc2U8dm9pZD4pOiB0aGlzO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5ncyB0YWJzIGluIE9ic2lkaWFuLlxuICogUHJvdmlkZXMgYSBtZXRob2QgZm9yIGJpbmRpbmcgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsaW5nIGNoYW5nZXMuXG4gKlxuICogQHRlbXBsYXRlIFRQbHVnaW4gLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHRoYXQgZXh0ZW5kcyBQbHVnaW5CYXNlLlxuICogQHRlbXBsYXRlIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncyBvYmplY3QuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQbHVnaW5TZXR0aW5nc1RhYkJhc2U8XG4gIFRQbHVnaW4gZXh0ZW5kcyBQbHVnaW5CYXNlPFBsdWdpblNldHRpbmdzPixcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Rcbj4gZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUGx1Z2luU2V0dGluZ3NUYWJCYXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RQbHVnaW59IHBsdWdpbiAtIFRoZSBwbHVnaW4gaW5zdGFuY2UgdG8gd2hpY2ggdGhpcyBzZXR0aW5ncyB0YWIgYmVsb25ncy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgb3ZlcnJpZGUgcGx1Z2luOiBUUGx1Z2luKSB7XG4gICAgc3VwZXIocGx1Z2luLmFwcCwgcGx1Z2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHByb3BlcnR5IGluIHRoZSBwbHVnaW4gc2V0dGluZ3Mgd2l0aCBvcHRpb25hbCBhdXRvbWF0aWMgc2F2aW5nIGFuZCB2YWx1ZSBjb252ZXJzaW9uLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQgZXh0ZW5kaW5nIGBWYWx1ZUNvbXBvbmVudGAuXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHkgLSBUaGUga2V5IG9mIHRoZSBwbHVnaW4gc2V0dGluZyB0aGF0IHRoZSBjb21wb25lbnQgaXMgYm91bmQgdG8uXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHlUeXBlIC0gVGhlIGluZmVycmVkIHR5cGUgb2YgdGhlIHByb3BlcnR5IGJhc2VkIG9uIHRoZSB2YWx1ZSBjb21wb25lbnQncyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVDb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHRoYXQgd2lsbCBkaXNwbGF5IGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBzZXR0aW5nIHZhbHVlLlxuICAgKiBAcGFyYW0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IGluIGBQbHVnaW5TZXR0aW5nc2AgdG8gYmluZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIG9wdGlvbnMuYXV0b1NhdmUgLSBJZiB0cnVlLCBzYXZlcyB0aGUgcGx1Z2luIHNldHRpbmdzIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGNvbXBvbmVudCB2YWx1ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgYFRWYWx1ZUNvbXBvbmVudGAgaW5zdGFuY2UgdGhhdCB3YXMgYm91bmQgdG8gdGhlIHByb3BlcnR5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGJpbmRWYWx1ZUNvbXBvbmVudDxcbiAgICBUVmFsdWVDb21wb25lbnQgZXh0ZW5kcyBWYWx1ZUNvbXBvbmVudDx1bmtub3duPixcbiAgICBQcm9wZXJ0eSBleHRlbmRzIEtleXNNYXRjaGluZzxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZVR5cGU+LFxuICAgIFVJVmFsdWVUeXBlID0gVFZhbHVlQ29tcG9uZW50IGV4dGVuZHMgVmFsdWVDb21wb25lbnQ8aW5mZXIgUD4gPyBQIDogbmV2ZXIsXG4gID4oXG4gICAgdmFsdWVDb21wb25lbnQ6IFRWYWx1ZUNvbXBvbmVudCxcbiAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGF1dG9TYXZlPzogYm9vbGVhblxuICAgIH1cbiAgKTogVFZhbHVlQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHByb3BlcnR5IGluIHRoZSBwbHVnaW4gc2V0dGluZ3Mgd2l0aCBhdXRvbWF0aWMgc2F2aW5nIGFuZCBjdXN0b20gdmFsdWUgY29udmVyc2lvbi5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50IGV4dGVuZGluZyBgVmFsdWVDb21wb25lbnRgLlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5IC0gVGhlIGtleSBvZiB0aGUgcGx1Z2luIHNldHRpbmcgdGhhdCB0aGUgY29tcG9uZW50IGlzIGJvdW5kIHRvLlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWVUeXBlIC0gVGhlIGluZmVycmVkIHR5cGUgb2YgdGhlIFVJIHZhbHVlIGJhc2VkIG9uIHRoZSB2YWx1ZSBjb21wb25lbnQncyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVDb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHRoYXQgd2lsbCBkaXNwbGF5IGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBzZXR0aW5nIHZhbHVlLlxuICAgKiBAcGFyYW0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IGluIGBQbHVnaW5TZXR0aW5nc2AgdG8gYmluZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIG9wdGlvbnMuYXV0b1NhdmUgLSBJZiB0cnVlLCBzYXZlcyB0aGUgcGx1Z2luIHNldHRpbmdzIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGNvbXBvbmVudCB2YWx1ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gb3B0aW9ucy5zZXR0aW5nVG9VSVZhbHVlQ29udmVydGVyIC0gQSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIHRoZSBzZXR0aW5nIHZhbHVlIHRvIHRoZSB2YWx1ZSB1c2VkIGJ5IHRoZSBVSSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBvcHRpb25zLnVpVG9TZXR0aW5nVmFsdWVDb252ZXJ0ZXIgLSBBIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgdGhlIFVJIGNvbXBvbmVudCdzIHZhbHVlIGJhY2sgdG8gdGhlIHNldHRpbmcgdmFsdWUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBgVFZhbHVlQ29tcG9uZW50YCBpbnN0YW5jZSB0aGF0IHdhcyBib3VuZCB0byB0aGUgcHJvcGVydHkuXG4gICAqL1xuICBwcm90ZWN0ZWQgYmluZFZhbHVlQ29tcG9uZW50PFxuICAgIFRWYWx1ZUNvbXBvbmVudCBleHRlbmRzIFZhbHVlQ29tcG9uZW50PHVua25vd24+LFxuICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgUGx1Z2luU2V0dGluZ3MsXG4gICAgVUlWYWx1ZVR5cGUgPSBUVmFsdWVDb21wb25lbnQgZXh0ZW5kcyBWYWx1ZUNvbXBvbmVudDxpbmZlciBQPiA/IFAgOiBuZXZlcixcbiAgPihcbiAgICB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50LFxuICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBhdXRvU2F2ZT86IGJvb2xlYW4sXG4gICAgICBzZXR0aW5nVG9VSVZhbHVlQ29udmVydGVyOiAocHJvcGVydHlWYWx1ZTogUGx1Z2luU2V0dGluZ3NbUHJvcGVydHldKSA9PiBVSVZhbHVlVHlwZSxcbiAgICAgIHVpVG9TZXR0aW5nVmFsdWVDb252ZXJ0ZXI6ICh1aVZhbHVlOiBVSVZhbHVlVHlwZSkgPT4gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHldXG4gICAgfVxuICApOiBUVmFsdWVDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGBiaW5kVmFsdWVDb21wb25lbnRgIHRoYXQgaGFuZGxlcyBib3RoIG92ZXJsb2Fkcy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50IGV4dGVuZGluZyBgVmFsdWVDb21wb25lbnRgLlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5IC0gVGhlIGtleSBvZiB0aGUgcGx1Z2luIHNldHRpbmcgdGhhdCB0aGUgY29tcG9uZW50IGlzIGJvdW5kIHRvLlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWVUeXBlIC0gVGhlIGluZmVycmVkIHR5cGUgb2YgdGhlIFVJIHZhbHVlIGJhc2VkIG9uIHRoZSB2YWx1ZSBjb21wb25lbnQncyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVDb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHRoYXQgd2lsbCBkaXNwbGF5IGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBzZXR0aW5nIHZhbHVlLlxuICAgKiBAcGFyYW0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IGluIGBQbHVnaW5TZXR0aW5nc2AgdG8gYmluZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIG9wdGlvbnMuYXV0b1NhdmUgLSBJZiB0cnVlLCBzYXZlcyB0aGUgcGx1Z2luIHNldHRpbmdzIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGNvbXBvbmVudCB2YWx1ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gb3B0aW9ucy5zZXR0aW5nVG9VSVZhbHVlQ29udmVydGVyIC0gQSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIHRoZSBzZXR0aW5nIHZhbHVlIHRvIHRoZSB2YWx1ZSB1c2VkIGJ5IHRoZSBVSSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBvcHRpb25zLnVpVG9TZXR0aW5nVmFsdWVDb252ZXJ0ZXIgLSBBIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgdGhlIFVJIGNvbXBvbmVudCdzIHZhbHVlIGJhY2sgdG8gdGhlIHNldHRpbmcgdmFsdWUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBgVFZhbHVlQ29tcG9uZW50YCBpbnN0YW5jZSB0aGF0IHdhcyBib3VuZCB0byB0aGUgcHJvcGVydHkuXG4gICAqL1xuICBwcm90ZWN0ZWQgYmluZFZhbHVlQ29tcG9uZW50PFxuICAgIFRWYWx1ZUNvbXBvbmVudCBleHRlbmRzIFZhbHVlQ29tcG9uZW50PHVua25vd24+LFxuICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgUGx1Z2luU2V0dGluZ3MsXG4gICAgVUlWYWx1ZVR5cGUgPSBUVmFsdWVDb21wb25lbnQgZXh0ZW5kcyBWYWx1ZUNvbXBvbmVudDxpbmZlciBQPiA/IFAgOiBuZXZlcixcbiAgPihcbiAgICB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50LFxuICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICB7XG4gICAgICBhdXRvU2F2ZSxcbiAgICAgIHNldHRpbmdUb1VJVmFsdWVDb252ZXJ0ZXIsXG4gICAgICB1aVRvU2V0dGluZ1ZhbHVlQ29udmVydGVyXG4gICAgfToge1xuICAgICAgYXV0b1NhdmU/OiBib29sZWFuLFxuICAgICAgc2V0dGluZ1RvVUlWYWx1ZUNvbnZlcnRlcjogKHByb3BlcnR5VmFsdWU6IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5XSkgPT4gVUlWYWx1ZVR5cGUsXG4gICAgICB1aVRvU2V0dGluZ1ZhbHVlQ29udmVydGVyOiAodWlWYWx1ZTogVUlWYWx1ZVR5cGUpID0+IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5XVxuICAgIH1cbiAgKTogVFZhbHVlQ29tcG9uZW50IHtcbiAgICBjb25zdCBwbHVnaW5TZXR0aW5ncyA9IHRoaXMucGx1Z2luLnNldHRpbmdzQ29weTtcbiAgICAodmFsdWVDb21wb25lbnQgYXMgVmFsdWVDb21wb25lbnQ8VUlWYWx1ZVR5cGU+KVxuICAgICAgLnNldFZhbHVlKHNldHRpbmdUb1VJVmFsdWVDb252ZXJ0ZXIocGx1Z2luU2V0dGluZ3NbcHJvcGVydHldKSlcbiAgICAgIC5vbkNoYW5nZShhc3luYyAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgcGx1Z2luU2V0dGluZ3NbcHJvcGVydHldID0gdWlUb1NldHRpbmdWYWx1ZUNvbnZlcnRlcihuZXdWYWx1ZSk7XG4gICAgICAgIGlmIChhdXRvU2F2ZSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncyhwbHVnaW5TZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZUNvbXBvbmVudDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0Esc0JBQWlDO0FBQ2pDLHdCQUEyQjtBQVozQixNQUFNLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUksUUFBUSxVQUFVLEVBQUUsY0FBYyxVQUFVLEdBQUc7QUFDL0csTUFBTSxZQUFZLFdBQVcsU0FBUyxLQUFLO0FBQUEsRUFDekMsT0FBTyxNQUFJO0FBQUEsRUFDWCxPQUFPLENBQUM7QUFBQSxFQUNSLFlBQVk7QUFDZDtBQXNCTyxNQUFlLDhCQUdaLGlDQUFpQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1sQixZQUE0QixRQUFpQjtBQUNsRCxVQUFNLE9BQU8sS0FBSyxNQUFNO0FBRFM7QUFBQSxFQUVuQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUEwRVUsbUJBS1IsZ0JBQ0EsVUFDQTtBQUFBLElBQ0U7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsR0FLaUI7QUFDakIsVUFBTSxpQkFBaUIsS0FBSyxPQUFPO0FBQ25DLElBQUMsZUFDRSxTQUFTLDBCQUEwQixlQUFlLFFBQVEsQ0FBQyxDQUFDLEVBQzVELFNBQVMsT0FBTyxhQUFhO0FBQzVCLHFCQUFlLFFBQVEsSUFBSSwwQkFBMEIsUUFBUTtBQUM3RCxVQUFJLFVBQVU7QUFDWixjQUFNLEtBQUssT0FBTyxhQUFhLGNBQWM7QUFBQSxNQUMvQztBQUFBLElBQ0YsQ0FBQztBQUNILFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -25,25 +25,42 @@ export declare abstract class PluginSettingsTabBase<TPlugin extends PluginBase<P
25
25
  */
26
26
  constructor(plugin: TPlugin);
27
27
  /**
28
- * Binds a value component to a plugin setting property.
28
+ * Binds a value component to a property in the plugin settings with optional automatic saving and value conversion.
29
29
  *
30
- * @template TValueComponent - The type of the value component.
31
- * @template Property - The type of the plugin setting property.
32
- * @template PropertyType - The type of the plugin setting property value.
30
+ * @typeParam TValueComponent - The type of the value component extending `ValueComponent`.
31
+ * @typeParam Property - The key of the plugin setting that the component is bound to.
32
+ * @typeParam PropertyType - The inferred type of the property based on the value component's type.
33
33
  *
34
- * @param valueComponent - The value component to bind.
35
- * @param property - The plugin setting property to bind the value component to.
36
- * @param options - Additional options for binding.
37
- * @param options.autoSave - Whether to automatically save the settings when the value changes. Default is true.
38
- * @param options.settingToUIValueConverter - A function to convert the setting value to the UI value. Default is identity function.
39
- * @param options.uiToSettingValueConverter - A function to convert the UI value to the setting value. Default is identity function.
34
+ * @param valueComponent - The component that will display and interact with the setting value.
35
+ * @param property - The property key in `PluginSettings` to bind to the component.
36
+ * @param options - Configuration options.
37
+ * @param options.autoSave - If true, saves the plugin settings automatically after the component value changes.
40
38
  *
41
- * @returns The bound value component.
39
+ * @returns The `TValueComponent` instance that was bound to the property.
42
40
  */
43
- protected bindValueComponent<TValueComponent extends ValueComponent<unknown>, Property extends KeysMatching<PluginSettings, PropertyType>, PropertyType = TValueComponent extends ValueComponent<infer P> ? P : never>(valueComponent: TValueComponent, property: Property, { autoSave, settingToUIValueConverter, uiToSettingValueConverter }?: {
41
+ protected bindValueComponent<TValueComponent extends ValueComponent<unknown>, Property extends KeysMatching<PluginSettings, UIValueType>, UIValueType = TValueComponent extends ValueComponent<infer P> ? P : never>(valueComponent: TValueComponent, property: Property, options?: {
44
42
  autoSave?: boolean;
45
- settingToUIValueConverter?: (value: PluginSettings[Property]) => PluginSettings[Property];
46
- uiToSettingValueConverter?: (value: PluginSettings[Property]) => PluginSettings[Property];
43
+ }): TValueComponent;
44
+ /**
45
+ * Binds a value component to a property in the plugin settings with automatic saving and custom value conversion.
46
+ *
47
+ * @typeParam TValueComponent - The type of the value component extending `ValueComponent`.
48
+ * @typeParam Property - The key of the plugin setting that the component is bound to.
49
+ * @typeParam UIValueType - The inferred type of the UI value based on the value component's type.
50
+ *
51
+ * @param valueComponent - The component that will display and interact with the setting value.
52
+ * @param property - The property key in `PluginSettings` to bind to the component.
53
+ * @param options - Configuration options.
54
+ * @param options.autoSave - If true, saves the plugin settings automatically after the component value changes.
55
+ * @param options.settingToUIValueConverter - A function that converts the setting value to the value used by the UI component.
56
+ * @param options.uiToSettingValueConverter - A function that converts the UI component's value back to the setting value.
57
+ *
58
+ * @returns The `TValueComponent` instance that was bound to the property.
59
+ */
60
+ protected bindValueComponent<TValueComponent extends ValueComponent<unknown>, Property extends keyof PluginSettings, UIValueType = TValueComponent extends ValueComponent<infer P> ? P : never>(valueComponent: TValueComponent, property: Property, options: {
61
+ autoSave?: boolean;
62
+ settingToUIValueConverter: (propertyValue: PluginSettings[Property]) => UIValueType;
63
+ uiToSettingValueConverter: (uiValue: UIValueType) => PluginSettings[Property];
47
64
  }): TValueComponent;
48
65
  }
49
66
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-utils",
3
- "version": "1.7.0",
3
+ "version": "1.7.1",
4
4
  "description": "This is the collection of useful functions that you can use for your Obsidian plugin development",
5
5
  "main": "./dist/lib/index.cjs",
6
6
  "types": "./dist/lib/index.d.ts",