three-slicer-viewer 0.2.5

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.
@@ -0,0 +1 @@
1
+ {"printer":["printer_technology","printable_area","extruder_printable_area","support_parallel_printheads","parallel_printheads_count","parallel_printheads_bed_exclude_areas","bed_exclude_area","bed_custom_texture","bed_custom_model","gcode_flavor","fan_kickstart","part_cooling_fan_min_pwm","fan_speedup_time","fan_speedup_overhangs","single_extruder_multi_material","manual_filament_change","file_start_gcode","machine_start_gcode","machine_end_gcode","before_layer_change_gcode","printing_by_object_gcode","layer_change_gcode","time_lapse_gcode","wrapping_detection_gcode","change_filament_gcode","change_extrusion_role_gcode","printer_model","printer_variant","printer_extruder_id","printer_extruder_variant","extruder_variant_list","default_nozzle_volume_type","printable_height","extruder_printable_height","extruder_clearance_radius","extruder_clearance_height_to_lid","extruder_clearance_height_to_rod","nozzle_height","master_extruder_id","default_print_profile","inherits","silent_mode","scan_first_layer","enable_power_loss_recovery","wrapping_detection_layers","wrapping_exclude_area","machine_load_filament_time","machine_unload_filament_time","machine_tool_change_time","time_cost","machine_pause_gcode","template_custom_gcode","nozzle_type","nozzle_hrc","auxiliary_fan","fan_direction","nozzle_volume","upward_compatible_machine","z_hop_types","travel_slope","retract_lift_enforce","support_chamber_temp_control","support_air_filtration","support_cooling_filter","cooling_filter_enabled","printer_structure","farthest_point_timelapse","best_object_pos","head_wrap_detect_zone","host_type","print_host","printhost_apikey","flashforge_serial_number","bbl_use_printhost","printer_agent","print_host_webui","printhost_cafile","printhost_port","printhost_authorization_type","printhost_user","printhost_password","printhost_ssl_ignore_revoke","thumbnails","thumbnails_format","use_relative_e_distances","extruder_type","use_firmware_retraction","printer_notes","grab_length","support_object_skip_flush","physical_extruder_map","cooling_tube_retraction","cooling_tube_length","high_current_on_filament_swap","parking_pos_retraction","extra_loading_move","wipe_tower_type","purge_in_prime_tower","enable_filament_ramming","tool_change_on_wipe_tower","z_offset","disable_m73","preferred_orientation","emit_machine_limits_to_gcode","pellet_modded_printer","support_multi_bed_types","use_3mf","default_bed_type","bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance","adaptive_bed_mesh_margin","enable_long_retraction_when_cut","long_retractions_when_cut","retraction_distances_when_cut","bed_temperature_formula","nozzle_flush_dataset","extruder_max_nozzle_count","group_algo_with_time","enable_pre_heating","hotend_heating_rate","hotend_cooling_rate","machine_hotend_change_time","machine_prepare_compensation_time","support_fast_purge_mode","deretract_speed_extruder_change","machine_max_acceleration_extruding","machine_max_acceleration_retracting","machine_max_acceleration_travel","machine_max_acceleration_x","machine_max_acceleration_y","machine_max_acceleration_z","machine_max_acceleration_e","machine_max_speed_x","machine_max_speed_y","machine_max_speed_z","machine_max_speed_e","machine_min_extruding_rate","machine_min_travel_rate","machine_max_jerk_x","machine_max_jerk_y","machine_max_jerk_z","machine_max_jerk_e","machine_max_junction_deviation","machine_max_printed_mass","resonance_avoidance","min_resonance_avoidance_speed","max_resonance_avoidance_speed","input_shaping_emit","input_shaping_type","input_shaping_freq_x","input_shaping_freq_y","input_shaping_damp_x","input_shaping_damp_y","default_filament_profile","deretraction_speed","extruder_colour","extruder_offset","max_layer_height","min_layer_height","nozzle_diameter","retract_after_wipe","retract_before_wipe","retract_length_toolchange","retract_lift_above","retract_lift_below","retract_restart_extra","retract_restart_extra_toolchange","retract_when_changing_layer","retraction_length","retraction_minimum_travel","retraction_speed","wipe","wipe_distance","z_hop"],"process":["layer_height","initial_layer_print_height","wall_loops","alternate_extra_wall","slice_closing_radius","spiral_mode","spiral_mode_smooth","spiral_mode_max_xy_smoothing","spiral_starting_flow_ratio","spiral_finishing_flow_ratio","slicing_mode","top_shell_layers","top_shell_thickness","top_surface_density","bottom_surface_density","bottom_shell_layers","bottom_shell_thickness","extra_perimeters_on_overhangs","ensure_vertical_shell_thickness","reduce_crossing_wall","detect_thin_wall","detect_overhang_wall","overhang_reverse","overhang_reverse_threshold","overhang_reverse_internal_only","wall_direction","seam_position","staggered_inner_seams","wall_sequence","is_infill_first","sparse_infill_density","fill_multiline","gyroid_optimized","sparse_infill_pattern","lateral_lattice_angle_1","lateral_lattice_angle_2","infill_overhang_angle","lightning_overhang_angle","lightning_prune_angle","lightning_straightening_angle","top_surface_pattern","top_surface_expansion","top_surface_expansion_margin","top_surface_expansion_direction","bottom_surface_pattern","top_surface_fill_order","bottom_surface_fill_order","infill_direction","solid_infill_direction","top_layer_direction","bottom_layer_direction","counterbore_hole_bridging","infill_shift_step","sparse_infill_rotate_template","solid_infill_rotate_template","symmetric_infill_y_axis","skeleton_infill_density","infill_lock_depth","skin_infill_depth","skin_infill_density","align_infill_direction_to_model","extra_solid_infills","center_of_surface_pattern","separated_infills","minimum_sparse_infill_area","reduce_infill_retraction","internal_solid_infill_pattern","gap_fill_target","ironing_type","ironing_pattern","ironing_flow","ironing_speed","ironing_spacing","ironing_angle","ironing_angle_fixed","ironing_inset","support_ironing","support_ironing_pattern","support_ironing_flow","support_ironing_spacing","max_travel_detour_distance","fuzzy_skin","fuzzy_skin_thickness","fuzzy_skin_point_distance","fuzzy_skin_first_layer","fuzzy_skin_noise_type","fuzzy_skin_mode","fuzzy_skin_scale","fuzzy_skin_octaves","fuzzy_skin_persistence","fuzzy_skin_ripples_per_layer","fuzzy_skin_ripple_offset","fuzzy_skin_layers_between_ripple_offset","max_volumetric_extrusion_rate_slope","max_volumetric_extrusion_rate_slope_segment_length","extrusion_rate_smoothing_external_perimeter_only","inner_wall_speed","outer_wall_speed","sparse_infill_speed","internal_solid_infill_speed","top_surface_speed","support_speed","support_object_xy_distance","support_object_first_layer_gap","support_interface_speed","bridge_speed","internal_bridge_speed","gap_infill_speed","travel_speed","travel_speed_z","initial_layer_speed","outer_wall_acceleration","initial_layer_acceleration","top_surface_acceleration","default_acceleration","skirt_type","skirt_loops","skirt_speed","min_skirt_length","skirt_distance","skirt_start_angle","skirt_height","single_loop_draft_shield","draft_shield","brim_width","brim_object_gap","brim_flow_ratio","brim_use_efc_outline","combine_brims","brim_type","brim_ears_max_angle","brim_ears_detection_length","enable_support","support_type","support_threshold_angle","support_threshold_overlap","enforce_support_layers","raft_layers","raft_first_layer_density","raft_first_layer_expansion","raft_contact_distance","raft_expansion","support_base_pattern","support_base_pattern_spacing","support_expansion","support_style","print_extruder_id","print_extruder_variant","independent_support_layer_height","support_angle","support_interface_top_layers","support_interface_bottom_layers","support_interface_pattern","support_interface_spacing","support_interface_loop_pattern","support_top_z_distance","support_on_build_plate_only","support_critical_regions_only","bridge_no_support","thick_bridges","thick_internal_bridges","dont_filter_internal_bridges","enable_extra_bridge_layer","max_bridge_length","print_sequence","print_order","support_remove_small_overhang","filename_format","outer_wall_filament_id","inner_wall_filament_id","support_bottom_z_distance","sparse_infill_filament_id","internal_solid_filament_id","top_surface_filament_id","bottom_surface_filament_id","support_filament","support_interface_filament","support_interface_not_for_body","ooze_prevention","standby_temperature_delta","preheat_time","preheat_steps","interface_shells","line_width","initial_layer_line_width","inner_wall_line_width","outer_wall_line_width","sparse_infill_line_width","internal_solid_infill_line_width","skin_infill_line_width","skeleton_infill_line_width","top_surface_line_width","support_line_width","infill_wall_overlap","top_bottom_infill_wall_overlap","bridge_flow","bridge_line_width","internal_bridge_flow","elefant_foot_compensation","elefant_foot_compensation_layers","elefant_foot_layers_density","xy_contour_compensation","xy_hole_compensation","resolution","enable_prime_tower","prime_tower_enable_framework","prime_tower_width","prime_tower_brim_width","prime_tower_skip_points","prime_volume","prime_tower_infill_gap","prime_tower_flat_ironing","enable_tower_interface_features","enable_tower_interface_cooldown_during_tower","wipe_tower_no_sparse_layers","compatible_printers","compatible_printers_condition","inherits","flush_into_infill","flush_into_objects","flush_into_support","tree_support_branch_angle","tree_support_angle_slow","tree_support_wall_count","tree_support_top_rate","tree_support_branch_distance","tree_support_tip_diameter","tree_support_branch_diameter","tree_support_branch_diameter_angle","detect_narrow_internal_solid_infill","gcode_add_line_number","enable_arc_fitting","precise_z_height","infill_combination","infill_combination_max_layer_height","support_bottom_interface_spacing","enable_overhang_speed","slowdown_for_curled_perimeters","overhang_1_4_speed","overhang_2_4_speed","overhang_3_4_speed","overhang_4_4_speed","initial_layer_infill_speed","only_one_wall_top","timelapse_type","wall_generator","wall_transition_length","wall_transition_filter_deviation","wall_transition_angle","wall_distribution_count","min_feature_size","min_bead_width","post_process","slicing_pipeline_plugin","plugins","process_change_extrusion_role_gcode","min_length_factor","wall_maximum_resolution","wall_maximum_deviation","small_perimeter_speed","small_perimeter_threshold","small_support_perimeter_speed","small_support_perimeter_threshold","bridge_angle","internal_bridge_angle","relative_bridge_angle","filter_out_gap_fill","travel_acceleration","inner_wall_acceleration","min_width_top_surface","default_jerk","outer_wall_jerk","inner_wall_jerk","infill_jerk","top_surface_jerk","initial_layer_jerk","travel_jerk","default_junction_deviation","top_solid_infill_flow_ratio","bottom_solid_infill_flow_ratio","only_one_wall_first_layer","print_flow_ratio","seam_gap","set_other_flow_ratios","first_layer_flow_ratio","outer_wall_flow_ratio","inner_wall_flow_ratio","overhang_flow_ratio","sparse_infill_flow_ratio","internal_solid_infill_flow_ratio","gap_fill_flow_ratio","support_flow_ratio","support_interface_flow_ratio","role_based_wipe_speed","wipe_speed","accel_to_decel_enable","accel_to_decel_factor","wipe_on_loops","wipe_before_external_loop","bridge_density","internal_bridge_density","precise_outer_wall","bridge_acceleration","sparse_infill_acceleration","internal_solid_infill_acceleration","tree_support_auto_brim","tree_support_brim_width","gcode_comments","gcode_label_objects","initial_layer_travel_speed","initial_layer_travel_acceleration","initial_layer_travel_jerk","exclude_object","slow_down_layers","infill_anchor","infill_anchor_max","initial_layer_min_bead_width","make_overhang_printable","make_overhang_printable_angle","make_overhang_printable_hole_size","notes","wipe_tower_cone_angle","wipe_tower_extra_spacing","wipe_tower_max_purge_speed","wipe_tower_wall_type","wipe_tower_extra_rib_length","wipe_tower_rib_width","wipe_tower_fillet_wall","wipe_tower_filament","wiping_volumes_extruders","wipe_tower_bridging","wipe_tower_extra_flow","single_extruder_multi_material_priming","toolchange_ordering","wipe_tower_rotation_angle","tree_support_branch_distance_organic","tree_support_branch_diameter_organic","tree_support_branch_angle_organic","hole_to_polyhole","hole_to_polyhole_threshold","hole_to_polyhole_twisted","hole_to_polyhole_max_edges","mmu_segmented_region_max_width","mmu_segmented_region_interlocking_depth","small_area_infill_flow_compensation","small_area_infill_flow_compensation_model","enable_wrapping_detection","seam_slope_type","seam_slope_conditional","scarf_angle_threshold","scarf_joint_speed","scarf_joint_flow_ratio","seam_slope_start_height","seam_slope_entire_loop","seam_slope_min_length","seam_slope_steps","seam_slope_inner_walls","scarf_overhang_threshold","interlocking_beam","interlocking_orientation","interlocking_beam_layer_count","interlocking_depth","interlocking_boundary_avoidance","interlocking_beam_width","calib_flowrate_topinfill_special_order","zaa_enabled","zaa_minimize_perimeter_height","zaa_dont_alternate_fill_direction","zaa_min_z","ironing_expansion"],"filament":["filament_colour","default_filament_colour","filament_diameter","pellet_flow_coefficient","volumetric_speed_coefficients","filament_type","filament_soluble","filament_is_support","filament_printable","filament_extruder_compatibility","filament_max_volumetric_speed","filament_adaptive_volumetric_speed","filament_flow_ratio","filament_density","filament_adhesiveness_category","filament_cost","filament_minimal_purge_on_wipe_tower","filament_tower_interface_pre_extrusion_dist","filament_tower_interface_pre_extrusion_length","filament_tower_ironing_area","filament_tower_interface_purge_volume","filament_tower_interface_print_temp","nozzle_temperature","nozzle_temperature_initial_layer","cool_plate_temp","textured_cool_plate_temp","eng_plate_temp","hot_plate_temp","textured_plate_temp","cool_plate_temp_initial_layer","textured_cool_plate_temp_initial_layer","eng_plate_temp_initial_layer","hot_plate_temp_initial_layer","textured_plate_temp_initial_layer","supertack_plate_temp_initial_layer","supertack_plate_temp","temperature_vitrification","reduce_fan_stop_start_freq","dont_slow_down_outer_wall","slow_down_for_layer_cooling","fan_min_speed","fan_max_speed","enable_overhang_bridge_fan","overhang_fan_speed","overhang_fan_threshold","close_fan_the_first_x_layers","close_additional_fan_first_x_layers","first_x_layer_fan_speed","full_fan_speed_layer","initial_layer_fan_speed","additional_fan_full_speed_layer","fan_cooling_layer_time","slow_down_layer_time","slow_down_min_speed","filament_start_gcode","filament_end_gcode","filament_change_extrusion_role_gcode","activate_air_filtration","activate_air_filtration_during_print","activate_air_filtration_on_completion","during_print_exhaust_fan_speed","complete_print_exhaust_fan_speed","filament_deretraction_speed","filament_retract_after_wipe","filament_retract_before_wipe","filament_retract_lift_above","filament_retract_lift_below","filament_retract_lift_enforce","filament_retract_restart_extra","filament_retract_when_changing_layer","filament_retraction_length","filament_retraction_minimum_travel","filament_retraction_speed","filament_wipe","filament_z_hop","filament_z_hop_types","filament_vendor","compatible_prints","compatible_prints_condition","compatible_printers","compatible_printers_condition","inherits","filament_wipe_distance","additional_cooling_fan_speed","nozzle_temperature_range_low","nozzle_temperature_range_high","filament_extruder_variant","enable_pressure_advance","pressure_advance","adaptive_pressure_advance","adaptive_pressure_advance_model","adaptive_pressure_advance_overhangs","adaptive_pressure_advance_bridges","chamber_temperature","filament_shrink","filament_shrinkage_compensation_z","support_material_interface_fan_speed","internal_bridge_fan_speed","filament_notes","ironing_fan_speed","filament_ironing_flow","filament_ironing_spacing","filament_ironing_inset","filament_ironing_speed","filament_loading_speed","filament_loading_speed_start","filament_unloading_speed","filament_unloading_speed_start","filament_toolchange_delay","filament_cooling_moves","filament_stamping_loading_speed","filament_stamping_distance","filament_cooling_initial_speed","filament_cooling_final_speed","filament_ramming_parameters","filament_multitool_ramming","filament_multitool_ramming_volume","filament_multitool_ramming_flow","activate_chamber_temp_control","chamber_minimal_temperature","filament_long_retractions_when_cut","filament_retraction_distances_when_cut","idle_temperature","filament_change_length","filament_flush_volumetric_speed","filament_flush_temp","filament_flush_temp_fast","filament_cooling_before_tower","filament_ramming_volumetric_speed","filament_ramming_volumetric_speed_nc","filament_ramming_travel_time","filament_ramming_travel_time_nc","filament_pre_cooling_temperature","filament_pre_cooling_temperature_nc","filament_preheat_temperature_delta","filament_retract_length_nc","filament_change_length_nc","filament_prime_volume","filament_prime_volume_nc","long_retractions_when_ec","retraction_distances_when_ec","filament_dev_ams_drying_ams_limitations","filament_dev_ams_drying_temperature","filament_dev_ams_drying_time","filament_dev_ams_drying_heat_distortion_temperature","filament_dev_chamber_drying_bed_temperature","filament_dev_chamber_drying_time","filament_dev_drying_softening_temperature","filament_dev_drying_cooling_temperature"]}
@@ -0,0 +1 @@
1
+ {"TabPrint::build":["layer_height","initial_layer_print_height","line_width","initial_layer_line_width","outer_wall_line_width","inner_wall_line_width","top_surface_line_width","sparse_infill_line_width","internal_solid_infill_line_width","support_line_width","bridge_line_width","seam_position","staggered_inner_seams","seam_gap","seam_slope_type","seam_slope_conditional","scarf_angle_threshold","scarf_overhang_threshold","scarf_joint_speed","seam_slope_start_height","seam_slope_entire_loop","seam_slope_min_length","seam_slope_steps","scarf_joint_flow_ratio","seam_slope_inner_walls","role_based_wipe_speed","wipe_speed","wipe_on_loops","wipe_before_external_loop","slice_closing_radius","resolution","enable_arc_fitting","xy_hole_compensation","xy_contour_compensation","elefant_foot_compensation","elefant_foot_layers_density","elefant_foot_compensation_layers","precise_outer_wall","precise_z_height","hole_to_polyhole","hole_to_polyhole_threshold","hole_to_polyhole_twisted","hole_to_polyhole_max_edges","ironing_type","ironing_pattern","ironing_flow","ironing_spacing","ironing_inset","ironing_angle","ironing_angle_fixed","zaa_enabled","zaa_minimize_perimeter_height","zaa_min_z","zaa_dont_alternate_fill_direction","wall_generator","wall_transition_angle","wall_transition_filter_deviation","wall_transition_length","wall_distribution_count","initial_layer_min_bead_width","min_bead_width","min_feature_size","min_length_factor","wall_maximum_resolution","wall_maximum_deviation","wall_sequence","is_infill_first","wall_direction","print_flow_ratio","top_solid_infill_flow_ratio","bottom_solid_infill_flow_ratio","set_other_flow_ratios","first_layer_flow_ratio","outer_wall_flow_ratio","inner_wall_flow_ratio","overhang_flow_ratio","sparse_infill_flow_ratio","internal_solid_infill_flow_ratio","gap_fill_flow_ratio","support_flow_ratio","support_interface_flow_ratio","only_one_wall_first_layer","only_one_wall_top","min_width_top_surface","reduce_crossing_wall","max_travel_detour_distance","small_area_infill_flow_compensation","bridge_flow","internal_bridge_flow","bridge_density","internal_bridge_density","thick_bridges","thick_internal_bridges","enable_extra_bridge_layer","dont_filter_internal_bridges","counterbore_hole_bridging","detect_overhang_wall","make_overhang_printable","make_overhang_printable_angle","make_overhang_printable_hole_size","extra_perimeters_on_overhangs","overhang_reverse","overhang_reverse_internal_only","overhang_reverse_threshold","wall_loops","alternate_extra_wall","detect_thin_wall","top_shell_layers","top_shell_thickness","top_surface_density","top_surface_pattern","top_surface_fill_order","top_layer_direction","top_surface_expansion","top_surface_expansion_margin","top_surface_expansion_direction","bottom_shell_layers","bottom_shell_thickness","bottom_surface_density","bottom_surface_pattern","bottom_surface_fill_order","bottom_layer_direction","center_of_surface_pattern","top_bottom_infill_wall_overlap","sparse_infill_density","fill_multiline","sparse_infill_pattern","gyroid_optimized","infill_direction","sparse_infill_rotate_template","skin_infill_density","skeleton_infill_density","infill_lock_depth","skin_infill_depth","skin_infill_line_width","skeleton_infill_line_width","symmetric_infill_y_axis","infill_shift_step","lateral_lattice_angle_1","lateral_lattice_angle_2","infill_overhang_angle","lightning_overhang_angle","lightning_prune_angle","lightning_straightening_angle","infill_anchor_max","infill_anchor","internal_solid_infill_pattern","solid_infill_direction","solid_infill_rotate_template","gap_fill_target","filter_out_gap_fill","separated_infills","infill_wall_overlap","align_infill_direction_to_model","extra_solid_infills","bridge_angle","internal_bridge_angle","relative_bridge_angle","minimum_sparse_infill_area","infill_combination","infill_combination_max_layer_height","detect_narrow_internal_solid_infill","ensure_vertical_shell_thickness","initial_layer_speed","initial_layer_infill_speed","initial_layer_travel_speed","slow_down_layers","outer_wall_speed","inner_wall_speed","small_perimeter_speed","small_perimeter_threshold","sparse_infill_speed","internal_solid_infill_speed","top_surface_speed","gap_infill_speed","ironing_speed","support_speed","support_interface_speed","small_support_perimeter_speed","small_support_perimeter_threshold","enable_overhang_speed","slowdown_for_curled_perimeters","<custom-widget line:2887>","<custom-widget line:2892>","travel_speed","default_acceleration","outer_wall_acceleration","inner_wall_acceleration","bridge_acceleration","sparse_infill_acceleration","internal_solid_infill_acceleration","initial_layer_acceleration","initial_layer_travel_acceleration","top_surface_acceleration","travel_acceleration","accel_to_decel_enable","accel_to_decel_factor","default_junction_deviation","default_jerk","outer_wall_jerk","inner_wall_jerk","infill_jerk","top_surface_jerk","initial_layer_jerk","initial_layer_travel_jerk","travel_jerk","max_volumetric_extrusion_rate_slope","max_volumetric_extrusion_rate_slope_segment_length","extrusion_rate_smoothing_external_perimeter_only","enable_support","support_type","support_style","support_threshold_angle","support_threshold_overlap","raft_first_layer_density","raft_first_layer_expansion","support_on_build_plate_only","support_critical_regions_only","support_remove_small_overhang","raft_layers","raft_contact_distance","support_filament","support_interface_filament","support_interface_not_for_body","support_ironing","support_ironing_pattern","support_ironing_flow","support_ironing_spacing","support_top_z_distance","support_bottom_z_distance","tree_support_wall_count","support_base_pattern","support_base_pattern_spacing","support_angle","support_interface_top_layers","support_interface_bottom_layers","support_interface_pattern","support_interface_spacing","support_bottom_interface_spacing","support_expansion","support_object_xy_distance","support_object_first_layer_gap","bridge_no_support","max_bridge_length","independent_support_layer_height","tree_support_tip_diameter","tree_support_branch_distance","tree_support_branch_distance_organic","tree_support_top_rate","tree_support_branch_diameter","tree_support_branch_diameter_organic","tree_support_branch_diameter_angle","tree_support_branch_angle","tree_support_branch_angle_organic","tree_support_angle_slow","tree_support_auto_brim","tree_support_brim_width","enable_prime_tower","prime_tower_skip_points","enable_tower_interface_features","enable_tower_interface_cooldown_during_tower","prime_tower_enable_framework","prime_tower_width","prime_volume","prime_tower_brim_width","prime_tower_infill_gap","wipe_tower_rotation_angle","wipe_tower_bridging","wipe_tower_extra_spacing","wipe_tower_extra_flow","wipe_tower_max_purge_speed","wipe_tower_wall_type","wipe_tower_cone_angle","wipe_tower_extra_rib_length","wipe_tower_rib_width","wipe_tower_fillet_wall","wipe_tower_no_sparse_layers","single_extruder_multi_material_priming","outer_wall_filament_id","inner_wall_filament_id","sparse_infill_filament_id","internal_solid_filament_id","top_surface_filament_id","bottom_surface_filament_id","wipe_tower_filament","ooze_prevention","standby_temperature_delta","preheat_time","preheat_steps","flush_into_infill","flush_into_objects","flush_into_support","interlocking_beam","toolchange_ordering","interface_shells","mmu_segmented_region_max_width","mmu_segmented_region_interlocking_depth","interlocking_beam_width","interlocking_orientation","interlocking_beam_layer_count","interlocking_depth","interlocking_boundary_avoidance","skirt_loops","skirt_type","min_skirt_length","skirt_distance","skirt_start_angle","skirt_speed","skirt_height","draft_shield","single_loop_draft_shield","brim_type","brim_width","brim_object_gap","brim_flow_ratio","brim_use_efc_outline","combine_brims","brim_ears_max_angle","brim_ears_detection_length","slicing_mode","print_sequence","print_order","spiral_mode","spiral_mode_smooth","spiral_mode_max_xy_smoothing","spiral_starting_flow_ratio","spiral_finishing_flow_ratio","timelapse_type","enable_wrapping_detection","fuzzy_skin","fuzzy_skin_mode","fuzzy_skin_noise_type","fuzzy_skin_point_distance","fuzzy_skin_thickness","fuzzy_skin_scale","fuzzy_skin_octaves","fuzzy_skin_persistence","fuzzy_skin_ripples_per_layer","fuzzy_skin_ripple_offset","fuzzy_skin_layers_between_ripple_offset","fuzzy_skin_first_layer","reduce_infill_retraction","gcode_add_line_number","gcode_comments","gcode_label_objects","exclude_object","print_plugin_config_overrides"],"TabPrintModel::build":[],"TabPrintPlate::build":[],"TabFilament::add_filament_overrides_page":["filament_retraction_length","filament_z_hop","filament_z_hop_types","filament_retract_lift_above","filament_retract_lift_below","filament_retract_lift_enforce","filament_retraction_speed","filament_deretraction_speed","filament_retract_restart_extra","filament_retraction_minimum_travel","filament_retract_when_changing_layer","filament_wipe","filament_wipe_distance","filament_retract_before_wipe","filament_retract_after_wipe","filament_long_retractions_when_cut","filament_retraction_distances_when_cut","filament_ironing_flow","filament_ironing_spacing","filament_ironing_inset","filament_ironing_speed"],"TabFilament::build":["filament_type","filament_vendor","filament_soluble","filament_is_support","filament_change_length","required_nozzle_HRC","default_filament_colour","filament_diameter","filament_adhesiveness_category","filament_density","filament_shrink","filament_shrinkage_compensation_z","filament_cost","temperature_vitrification","idle_temperature","<custom-widget line:4302>","pellet_flow_coefficient","filament_flow_ratio","enable_pressure_advance","pressure_advance","adaptive_pressure_advance","adaptive_pressure_advance_overhangs","adaptive_pressure_advance_bridges","activate_chamber_temp_control","<custom-widget line:4353>","<custom-widget line:4374>","<custom-widget line:4382>","<custom-widget line:4389>","<custom-widget line:4396>","<custom-widget line:4403>","<custom-widget line:4410>","<custom-widget line:4417>","filament_adaptive_volumetric_speed","filament_max_volumetric_speed","close_fan_the_first_x_layers","initial_layer_fan_speed","full_fan_speed_layer","<custom-widget line:4477>","<custom-widget line:4482>","reduce_fan_stop_start_freq","slow_down_for_layer_cooling","dont_slow_down_outer_wall","slow_down_min_speed","enable_overhang_bridge_fan","overhang_fan_threshold","overhang_fan_speed","internal_bridge_fan_speed","support_material_interface_fan_speed","ironing_fan_speed","additional_cooling_fan_speed","activate_air_filtration","<custom-widget line:4506>","<custom-widget line:4513>","filament_plugin_config_overrides","filament_minimal_purge_on_wipe_tower","filament_tower_interface_pre_extrusion_dist","filament_tower_interface_pre_extrusion_length","filament_tower_ironing_area","filament_tower_interface_purge_volume","filament_tower_interface_print_temp","long_retractions_when_ec","retraction_distances_when_ec","filament_loading_speed_start","filament_loading_speed","filament_unloading_speed_start","filament_unloading_speed","filament_toolchange_delay","filament_cooling_moves","filament_cooling_initial_speed","filament_cooling_final_speed","filament_stamping_loading_speed","filament_stamping_distance","filament_multitool_ramming","filament_multitool_ramming_volume","filament_multitool_ramming_flow"],"TabPrinter::build_fff":["parallel_printheads_count","printable_height","support_multi_bed_types","best_object_pos","z_offset","preferred_orientation","printer_structure","gcode_flavor","pellet_modded_printer","bbl_use_printhost","use_3mf","scan_first_layer","enable_power_loss_recovery","disable_m73","use_relative_e_distances","use_firmware_retraction","time_cost","printer_plugin_config_overrides","<custom-widget line:5072>","fan_kickstart","part_cooling_fan_min_pwm","extruder_clearance_radius","extruder_clearance_height_to_rod","extruder_clearance_height_to_lid","bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance","adaptive_bed_mesh_margin","nozzle_type","nozzle_hrc","auxiliary_fan","fan_direction","support_chamber_temp_control","support_air_filtration","cooling_filter_enabled"],"TabPrinter::build_kinematics_page":["emit_machine_limits_to_gcode","resonance_avoidance","<custom-widget line:5386>","input_shaping_emit","input_shaping_type","<custom-widget line:5395>","<custom-widget line:5402>","machine_max_speed_x","machine_max_speed_y","machine_max_speed_z","machine_max_speed_e","machine_max_acceleration_x","machine_max_acceleration_y","machine_max_acceleration_z","machine_max_acceleration_e","machine_max_acceleration_extruding","machine_max_acceleration_retracting","machine_max_acceleration_travel","machine_max_junction_deviation","machine_max_jerk_x","machine_max_jerk_y","machine_max_jerk_z","machine_max_jerk_e"],"TabPrinter::build_unregular_pages":["single_extruder_multi_material","manual_filament_change","bed_temperature_formula","wipe_tower_type","purge_in_prime_tower","enable_filament_ramming","tool_change_on_wipe_tower","cooling_tube_retraction","cooling_tube_length","parking_pos_retraction","extra_loading_move","high_current_on_filament_swap","machine_load_filament_time","machine_unload_filament_time","machine_tool_change_time","nozzle_diameter","nozzle_volume","extruder_printable_height","min_layer_height","max_layer_height","extruder_offset","retraction_length","retract_restart_extra","retraction_speed","deretraction_speed","retraction_minimum_travel","retract_when_changing_layer","wipe","wipe_distance","retract_before_wipe","retract_after_wipe","retract_lift_enforce","z_hop_types","z_hop","travel_slope","retract_lift_above","retract_lift_below","retract_length_toolchange","retract_restart_extra_toolchange","long_retractions_when_cut","retraction_distances_when_cut"],"TabPrinter::build_sla":["max_print_height","display_width","display_height","<custom-widget line:3032>","display_orientation","display_mirror_x","display_mirror_y","<custom-widget line:3044>","<custom-widget line:3053>","absolute_correction","elefant_foot_compensation","elefant_foot_min_width","gamma_correction","min_exposure_time","max_exposure_time","min_initial_exposure_time","max_initial_exposure_time","sla_archive_format","sla_output_precision"],"TabSLAMaterial::build":["material_colour","bottle_cost","bottle_volume","bottle_weight","material_density","initial_layer_height","exposure_time","initial_exposure_time","<custom-widget line:5492>","zcorrection_layers","<custom-widget line:5502>","material_print_speed","area_fill","<custom-widget line:5560>","<custom-widget line:5590>"],"TabSLAPrint::build":["layer_height","faded_layers","supports_enable","support_tree_type","support_enforcers_only","support_points_density_relative","support_head_front_diameter","support_head_penetration","support_head_width","support_pillar_diameter","support_small_pillar_diameter_percent","support_max_bridges_on_pillar","support_pillar_connection_mode","support_buildplate_only","support_pillar_widening_factor","support_max_weight_on_model","support_base_diameter","support_base_height","support_base_safety_distance","support_object_elevation","<custom-widget line:5890>","support_critical_angle","support_max_bridge_length","support_max_pillar_link_distance","pad_enable","pad_wall_thickness","pad_wall_height","pad_brim_size","pad_max_merge_distance","pad_wall_slope","pad_around_object","pad_around_object_everywhere","pad_object_gap","pad_object_connector_stride","pad_object_connector_width","pad_object_connector_penetration","hollowing_enable","hollowing_min_thickness","hollowing_quality","hollowing_closing_distance","slice_closing_radius","slicing_mode"]}
@@ -0,0 +1,206 @@
1
+ import e, { useRef as J, useState as w, useLayoutEffect as T, useEffect as I, useMemo as j } from "react";
2
+ import { createPortal as W } from "react-dom";
3
+ import { uiTreeKeys as $, leanSchema as U } from "three-slicer-viewer/data";
4
+ import { printerTechnology as G, settingRaw as q } from "three-slicer-viewer/settings";
5
+ import { disabledKeys as H, makeCfg as Q } from "three-slicer-viewer/toggle";
6
+ function X({ css: t, className: a, children: n }) {
7
+ const r = J(null), [l] = w(() => {
8
+ const p = document.createElement("div");
9
+ return p.style.display = "contents", p;
10
+ });
11
+ return T(() => {
12
+ const p = r.current, d = p.shadowRoot || p.attachShadow({ mode: "open" });
13
+ let i = d.querySelector("style[data-ts-css]");
14
+ i || (i = document.createElement("style"), i.setAttribute("data-ts-css", ""), d.append(i)), i.textContent = t, d.contains(l) || d.append(l);
15
+ }, [t, l]), /* @__PURE__ */ e.createElement("div", { ref: r, className: a }, W(n, l));
16
+ }
17
+ const Y = ':host{display:contents}*{box-sizing:border-box}.row{display:grid;grid-template-columns:260px 220px 70px 1fr;gap:8px;align-items:center;padding:3px 0;border-bottom:1px dashed #f0f0f0}.row .lbl{color:#222;text-decoration:none}.row .lbl:hover{color:#0a7d4f;text-decoration:underline}.row .key{font-size:11px;color:#999;overflow:hidden;text-overflow:ellipsis}.row input[type=text],.row input:not([type]),.row select,.row textarea{width:100%;max-width:260px;padding:2px 6px}.inputwrap{display:inline-flex;align-items:center;gap:4px}.unit{color:#888;font-size:12px;white-space:nowrap}.pts{font-size:11px;color:#666}.badge{font-size:10px;padding:1px 6px;border-radius:8px;color:#fff;text-align:center}.mode-simple{background:#2e9e5b}.mode-advanced{background:#3673c3}.mode-expert{background:#d9822b}.mode-develop{background:#c0392b}.mode-none,.mode-undefined{background:#aaa}.muted{color:#999;font-weight:400;font-size:12px}.row.custom{grid-template-columns:1fr}.row.disabled{opacity:.42}.row.disabled input,.row.disabled select,.row.disabled textarea{cursor:not-allowed;background:#f2f2f2}.lbl-cell{display:inline-flex;align-items:center;gap:5px;min-width:0}.lbl-cell .lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dirty-dot{flex:0 0 auto;width:7px;height:7px;border-radius:50%;background:#e8873a;box-shadow:0 0 0 2px #fff3e6}.override-dot{flex:0 0 auto;width:9px;height:9px;border-radius:50%;background:#f0a542;border:0;padding:0;cursor:pointer;box-shadow:0 0 0 2px #fdf1dd}.override-dot:hover{background:#d98c26}.widget-cell{display:inline-flex;align-items:center;gap:6px;min-width:0}.reset-btn{flex:0 0 auto;border:1px solid #d8b48a;background:#fbf1e4;color:#b5701f;border-radius:5px;cursor:pointer;font-size:13px;line-height:1;padding:1px 5px}.reset-btn:hover{background:#f3e2cb}.settings-panel{flex:0 0 400px;width:400px;border-left:1px solid #e2e2e2;display:flex;flex-direction:column;min-height:0;background:#fff;color:#222;font:14px/1.5 -apple-system,Segoe UI,sans-serif}.settings-panel .sp-top{padding:10px 12px 8px;border-bottom:1px solid #eee}.sp-builder{display:flex;align-items:center;gap:8px;font-size:12px;color:#666}.sp-builder select{flex:1;padding:4px 6px}.sp-pages{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}.sp-pages button{border:1px solid #e0e0e0;background:#fafafa;border-radius:6px;padding:4px 8px;font-size:12px;cursor:pointer}.sp-pages button.on{background:#e6f5ee;color:#0a7d4f;border-color:#b7e2cd;font-weight:700}.sp-modes{display:flex;gap:4px;margin-top:8px}.sp-modes button{border:0;background:none;font-size:11px;color:#888;padding:2px 6px;border-radius:6px;cursor:pointer}.sp-modes button.on{background:#eef2f0;color:#0a7d4f;font-weight:700}.settings-panel .sp-body{flex:1 1 auto;overflow-y:auto;padding:8px 14px 24px}.settings-panel .sp-body h2{font-size:16px}.settings-panel .row{grid-template-columns:1fr auto;grid-template-areas:"lbl badge" "key widget";row-gap:2px;padding:6px 0}.settings-panel .row .lbl{grid-area:lbl;font-weight:600}.settings-panel .row .badge{grid-area:badge;justify-self:end}.settings-panel .row .key{grid-area:key}.settings-panel .row .inputwrap,.settings-panel .row>select,.settings-panel .row>input,.settings-panel .row>textarea,.settings-panel .row>.pts,.settings-panel .row>.muted{grid-area:widget;justify-self:end}.settings-panel .row input:not([type=checkbox]):not([type=color]),.settings-panel .row select,.settings-panel .row textarea{max-width:200px}.settings-panel .row.custom{grid-template-columns:1fr;grid-template-areas:"lbl"}.sp-search{width:100%;box-sizing:border-box;padding:6px 9px;border:1px solid #d6d6d6;border-radius:6px;font-size:13px;margin-bottom:8px}:host(.sp-embedded) .settings-panel{position:static;width:auto;flex:none;border:0;height:auto}:host(.sp-embedded) .sp-body{padding:4px 2px 8px;max-height:460px}.bse{display:flex;flex-direction:column;gap:6px;min-width:0;max-width:220px}.bse-modes{display:flex;gap:4px}.bse-modes button{border:1px solid #e0e0e0;background:#fafafa;border-radius:6px;padding:2px 8px;font-size:11px;cursor:pointer}.bse-modes button.on{background:#e6f5ee;color:#0a7d4f;border-color:#b7e2cd;font-weight:700}.bse-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px 8px}.bse-grid label{display:flex;align-items:center;gap:4px;font-size:11px;color:#666;white-space:nowrap}.bse-grid input{width:56px;padding:2px 4px;font-size:12px}.bse-json{width:100%;font:11px ui-monospace,monospace;padding:4px 6px;border:1px solid #d6d6d6;border-radius:6px;box-sizing:border-box}.bse-json.err{border-color:#d0435a;background:#fdf3f4}', R = (t, a, n, r) => [[n, r], [t + n, r], [t + n, a + r], [n, a + r]], V = (t) => {
18
+ const a = t / 2, n = 32;
19
+ return Array.from({ length: n }, (r, l) => {
20
+ const p = 2 * Math.PI * l / n;
21
+ return [+(a + a * Math.cos(p)).toFixed(2), +(a + a * Math.sin(p)).toFixed(2)];
22
+ });
23
+ }, L = (t) => {
24
+ const a = t.map((r) => r[0]), n = t.map((r) => r[1]);
25
+ return { x0: Math.min(...a), y0: Math.min(...n), w: Math.max(...a) - Math.min(...a), d: Math.max(...n) - Math.min(...n) };
26
+ };
27
+ function Z({ value: t, onChange: a, disabled: n }) {
28
+ const r = Array.isArray(t) && t.length >= 3 ? t : R(200, 200, 0, 0), l = L(r), [p, d] = w(r.length === 4 ? "rect" : r.length >= 12 ? "circle" : "custom"), [i, u] = w({ w: l.w, d: l.d, ox: l.x0, oy: l.y0 }), [x, g] = w(Math.round(l.w)), [c, b] = w(JSON.stringify(r)), [C, E] = w(!1);
29
+ I(() => {
30
+ const o = L(r);
31
+ u({ w: o.w, d: o.d, ox: o.x0, oy: o.y0 }), g(Math.round(o.w)), b(JSON.stringify(r)), E(!1);
32
+ }, [JSON.stringify(t)]);
33
+ const y = (o) => {
34
+ u(o);
35
+ const { w: m, d: h, ox: A, oy: M } = o;
36
+ m > 0 && h > 0 && a(R(m, h, A, M));
37
+ }, N = (o) => {
38
+ g(o), o > 0 && a(V(o));
39
+ }, _ = (o) => {
40
+ b(o);
41
+ try {
42
+ const m = JSON.parse(o);
43
+ if (!Array.isArray(m) || m.length < 3 || !m.every((h) => Array.isArray(h) && h.length === 2 && h.every(Number.isFinite))) throw 0;
44
+ E(!1), a(m);
45
+ } catch {
46
+ E(!0);
47
+ }
48
+ }, v = (o) => {
49
+ const m = parseFloat(o);
50
+ return Number.isFinite(m) ? m : 0;
51
+ };
52
+ return /* @__PURE__ */ e.createElement("div", { className: "bse", "data-testid": "bed-shape-editor" }, /* @__PURE__ */ e.createElement("div", { className: "bse-modes" }, [["rect", "Rectangular"], ["circle", "Circular"], ["custom", "Custom"]].map(([o, m]) => /* @__PURE__ */ e.createElement("button", { key: o, type: "button", className: p === o ? "on" : "", disabled: n, onClick: () => d(o) }, m))), p === "rect" && /* @__PURE__ */ e.createElement("div", { className: "bse-grid" }, /* @__PURE__ */ e.createElement("label", null, "Width ", /* @__PURE__ */ e.createElement(
53
+ "input",
54
+ {
55
+ type: "number",
56
+ min: "1",
57
+ value: i.w,
58
+ disabled: n,
59
+ "data-testid": "bed-w",
60
+ onChange: (o) => y({ ...i, w: v(o.target.value) })
61
+ }
62
+ ), " mm"), /* @__PURE__ */ e.createElement("label", null, "Depth ", /* @__PURE__ */ e.createElement(
63
+ "input",
64
+ {
65
+ type: "number",
66
+ min: "1",
67
+ value: i.d,
68
+ disabled: n,
69
+ "data-testid": "bed-d",
70
+ onChange: (o) => y({ ...i, d: v(o.target.value) })
71
+ }
72
+ ), " mm"), /* @__PURE__ */ e.createElement("label", null, "Origin X ", /* @__PURE__ */ e.createElement(
73
+ "input",
74
+ {
75
+ type: "number",
76
+ value: i.ox,
77
+ disabled: n,
78
+ onChange: (o) => y({ ...i, ox: v(o.target.value) })
79
+ }
80
+ )), /* @__PURE__ */ e.createElement("label", null, "Origin Y ", /* @__PURE__ */ e.createElement(
81
+ "input",
82
+ {
83
+ type: "number",
84
+ value: i.oy,
85
+ disabled: n,
86
+ onChange: (o) => y({ ...i, oy: v(o.target.value) })
87
+ }
88
+ ))), p === "circle" && /* @__PURE__ */ e.createElement("div", { className: "bse-grid" }, /* @__PURE__ */ e.createElement("label", null, "Diameter ", /* @__PURE__ */ e.createElement(
89
+ "input",
90
+ {
91
+ type: "number",
92
+ min: "1",
93
+ value: x,
94
+ disabled: n,
95
+ "data-testid": "bed-dia",
96
+ onChange: (o) => N(v(o.target.value))
97
+ }
98
+ ), " mm")), p === "custom" && /* @__PURE__ */ e.createElement(
99
+ "textarea",
100
+ {
101
+ className: "bse-json" + (C ? " err" : ""),
102
+ rows: 3,
103
+ value: c,
104
+ disabled: n,
105
+ "data-testid": "bed-json",
106
+ onChange: (o) => _(o.target.value),
107
+ placeholder: "[[0,0],[200,0],[200,200],[0,200]]"
108
+ }
109
+ ));
110
+ }
111
+ const K = {
112
+ printable_area: Z
113
+ }, ee = ["all", "simple", "advanced", "expert", "develop"], B = (t) => t.replace("::build", "").replace("Tab", "").replace("_sla", " (SLA)"), te = (t) => /SLA|build_sla\b/.test(t) ? "SLA" : "FFF", ae = Object.fromEntries(Object.entries($).map(([t, a]) => [t, a.length ? [{ page: "Settings", groups: [{ group: B(t), options: a }] }] : []])), ne = { makeCfg: Q, disabledKeys: H }, re = (t) => Object.keys(t).filter((a) => t[a].length > 0);
114
+ function oe(t, a, n) {
115
+ if (!a || !(n in a)) return !1;
116
+ const r = t[n]?.default, l = Array.isArray(r) ? r[0] : r;
117
+ return String(a[n]) !== String(l ?? "");
118
+ }
119
+ function se(t, a, n) {
120
+ if (n === "all" || a.startsWith("<")) return !0;
121
+ const r = t[a]?.mode;
122
+ return n === "simple" ? r === "simple" : n === "advanced" ? r === "simple" || r === "advanced" : !0;
123
+ }
124
+ function le(t) {
125
+ return t ? t.gui_type === "color" ? "color" : t.enum_values ? "select" : t.type === "coBool" || t.type === "coBools" ? "checkbox" : t.multiline || t.is_code ? "textarea" : t.type === "coPoints" || t.type === "coPoint" ? "points" : "input" : "unknown";
126
+ }
127
+ function ie({ mode: t }) {
128
+ return /* @__PURE__ */ e.createElement("span", { className: `badge mode-${t ?? "none"}` }, t ?? "—");
129
+ }
130
+ function ce({ def: t, optKey: a, settings: n, setSettings: r, disabled: l, customWidgets: p }) {
131
+ const d = q(n, a), i = (c) => r((b) => ({ ...b, [a]: c })), u = p?.[a] ?? K[a];
132
+ if (u) return /* @__PURE__ */ e.createElement(u, { def: t, value: d, onChange: i, disabled: l });
133
+ const x = le(t), g = Array.isArray(d) ? d[0] : d;
134
+ switch (x) {
135
+ case "select":
136
+ return /* @__PURE__ */ e.createElement("select", { value: g ?? "", onChange: (c) => i(c.target.value), disabled: l }, t.enum_values.map((c, b) => /* @__PURE__ */ e.createElement("option", { key: c, value: c }, t.enum_labels?.[b] ?? c)));
137
+ case "checkbox":
138
+ return /* @__PURE__ */ e.createElement("input", { type: "checkbox", checked: Array.isArray(d) ? !!d[0] : !!d, onChange: (c) => i(c.target.checked), disabled: l });
139
+ case "color":
140
+ return /* @__PURE__ */ e.createElement("input", { type: "color", value: typeof g == "string" && g.startsWith("#") ? g : "#00ae42", onChange: (c) => i(c.target.value), disabled: l });
141
+ case "textarea":
142
+ return /* @__PURE__ */ e.createElement("textarea", { rows: 2, value: Array.isArray(d) ? d.join(`
143
+ `) : d ?? "", onChange: (c) => i(c.target.value), disabled: l });
144
+ case "points":
145
+ return /* @__PURE__ */ e.createElement("code", { className: "pts" }, JSON.stringify(d ?? []));
146
+ case "unknown":
147
+ return /* @__PURE__ */ e.createElement("span", { className: "muted" }, "No schema");
148
+ default:
149
+ return /* @__PURE__ */ e.createElement("span", { className: "inputwrap" }, /* @__PURE__ */ e.createElement("input", { value: g ?? "", onChange: (c) => i(c.target.value), disabled: l }), t.sidetext && /* @__PURE__ */ e.createElement("span", { className: "unit" }, t.sidetext));
150
+ }
151
+ }
152
+ function de({ schema: t, optKey: a, settings: n, setSettings: r, disabled: l, onOptionOpen: p, customWidgets: d, overridden: i, onRevertKey: u }) {
153
+ if (a.startsWith("<")) return /* @__PURE__ */ e.createElement("div", { className: "row custom" }, /* @__PURE__ */ e.createElement("span", { className: "muted" }, "⚙ Custom widget ", a));
154
+ const x = t[a], g = l ? l[a] : void 0, c = g != null, b = oe(t, n, a), C = () => r((y) => {
155
+ const N = { ...y };
156
+ return delete N[a], N;
157
+ }), E = x?.label || x?.full_label || a;
158
+ return /* @__PURE__ */ e.createElement("div", { className: "row" + (c ? " disabled" : ""), title: c ? `Disabled when: ${g}` : x?.tooltip ?? "", "data-testid": `row-${a}` }, /* @__PURE__ */ e.createElement("span", { className: "lbl-cell" }, i && /* @__PURE__ */ e.createElement(
159
+ "button",
160
+ {
161
+ type: "button",
162
+ className: "override-dot",
163
+ onClick: () => u?.(a),
164
+ title: "This plate's override — click to follow the global value again",
165
+ "data-testid": `override-${a}`
166
+ }
167
+ ), b && /* @__PURE__ */ e.createElement("span", { className: "dirty-dot", title: "Changed from default", "data-testid": `dirty-${a}` }), p ? /* @__PURE__ */ e.createElement("button", { type: "button", className: "lbl lbl-link", onClick: () => p(a), title: "Details" }, E) : /* @__PURE__ */ e.createElement("span", { className: "lbl" }, E)), /* @__PURE__ */ e.createElement("code", { className: "key" }, a), /* @__PURE__ */ e.createElement(ie, { mode: x?.mode }), /* @__PURE__ */ e.createElement("span", { className: "widget-cell" }, /* @__PURE__ */ e.createElement(ce, { def: x, optKey: a, settings: n, setSettings: r, disabled: c, customWidgets: d }), b && /* @__PURE__ */ e.createElement("button", { className: "reset-btn", onClick: C, title: "Reset to default", "data-testid": `reset-${a}` }, "↺")));
168
+ }
169
+ function xe({
170
+ schema: t = U,
171
+ uiTree: a = ae,
172
+ toggle: n = ne,
173
+ settings: r,
174
+ setSettings: l,
175
+ onOptionOpen: p,
176
+ embedded: d = !1,
177
+ customWidgets: i,
178
+ only: u,
179
+ overriddenKeys: x,
180
+ onRevertKey: g
181
+ }) {
182
+ const c = j(() => re(a), [a]), [b, C] = w(u?.builder ?? c[0] ?? ""), [E, y] = w(0), [N, _] = w("all"), [v, o] = w(""), m = G(r), h = c.filter((s) => te(s) === m), A = u?.builder ?? (h.includes(b) ? b : h[0] ?? ""), M = a[u?.builder ?? A] ?? [], z = u?.page ? M.filter((s) => s.page === u.page) : M, O = z[Math.min(E, z.length - 1)], P = j(() => n.disabledKeys(n.makeCfg(r)), [r, n]), k = v.trim().toLowerCase(), S = j(() => k ? Object.entries(t).filter(([s, f]) => s.includes(k) || f.label?.toLowerCase().includes(k) || f.full_label?.toLowerCase().includes(k)).slice(0, 60).map(([s]) => s) : [], [k]), D = (s, f) => /* @__PURE__ */ e.createElement(
183
+ de,
184
+ {
185
+ schema: t,
186
+ key: s + f,
187
+ optKey: s,
188
+ settings: r,
189
+ setSettings: l,
190
+ disabled: P,
191
+ onOptionOpen: p,
192
+ customWidgets: i,
193
+ overridden: x?.includes(s),
194
+ onRevertKey: g
195
+ }
196
+ );
197
+ return /* @__PURE__ */ e.createElement(X, { css: Y, className: d ? "sp-embedded" : void 0 }, /* @__PURE__ */ e.createElement("div", { className: "settings-panel" }, !u && /* @__PURE__ */ e.createElement("div", { className: "sp-top" }, /* @__PURE__ */ e.createElement("input", { className: "sp-search", placeholder: `Search options (${Object.keys(t).length})…`, value: v, onChange: (s) => o(s.target.value), "data-testid": "opt-search" }), !k && /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("label", { className: "sp-builder" }, /* @__PURE__ */ e.createElement("span", null, "Settings group"), /* @__PURE__ */ e.createElement("select", { value: A, onChange: (s) => {
198
+ C(s.target.value), y(0);
199
+ } }, h.map((s) => /* @__PURE__ */ e.createElement("option", { key: s, value: s }, B(s))))), /* @__PURE__ */ e.createElement("div", { className: "sp-pages" }, z.map((s, f) => /* @__PURE__ */ e.createElement("button", { key: s.page + f, className: f === Math.min(E, z.length - 1) ? "on" : "", onClick: () => y(f) }, s.page))), /* @__PURE__ */ e.createElement("div", { className: "sp-modes" }, ee.map((s) => /* @__PURE__ */ e.createElement("button", { key: s, className: N === s ? "on" : "", onClick: () => _(s) }, s))))), /* @__PURE__ */ e.createElement("div", { className: "sp-body" }, k ? /* @__PURE__ */ e.createElement("section", { "data-testid": "search-results" }, /* @__PURE__ */ e.createElement("h3", null, "Search: “", v, "” — ", S.length, " hit", S.length === 1 ? "" : "s", S.length === 60 ? "+" : ""), S.map(D), !S.length && /* @__PURE__ */ e.createElement("p", { className: "muted" }, "No matches")) : O ? /* @__PURE__ */ e.createElement(e.Fragment, null, !u && /* @__PURE__ */ e.createElement("h2", null, O.page, " ", /* @__PURE__ */ e.createElement("span", { className: "muted" }, "Tab.cpp:", O.line)), O.groups.map((s) => {
200
+ const f = s.options.filter((F) => se(t, F, N) && !(u && F.startsWith("<")));
201
+ return f.length ? /* @__PURE__ */ e.createElement("section", { key: s.group + s.line }, /* @__PURE__ */ e.createElement("h3", null, s.group || "(untitled group)", " ", /* @__PURE__ */ e.createElement("span", { className: "muted" }, ":", s.line)), f.map(D)) : null;
202
+ })) : /* @__PURE__ */ e.createElement("p", { className: "muted" }, "No builder"))));
203
+ }
204
+ export {
205
+ xe as default
206
+ };
@@ -0,0 +1,190 @@
1
+ const it = {
2
+ // OrcaSlicer / PrusaSlicer ;TYPE: names
3
+ "outer wall": 1,
4
+ "external perimeter": 1,
5
+ "inner wall": 1,
6
+ perimeter: 1,
7
+ "internal perimeter": 1,
8
+ "overhang wall": 1,
9
+ "overhang perimeter": 1,
10
+ "sparse infill": 2,
11
+ "internal infill": 2,
12
+ "solid infill": 3,
13
+ "internal solid infill": 3,
14
+ "top solid infill": 3,
15
+ "top surface": 3,
16
+ "bottom surface": 3,
17
+ skirt: 4,
18
+ brim: 4,
19
+ "skirt/brim": 4,
20
+ support: 5,
21
+ "support material": 5,
22
+ "support material interface": 5,
23
+ "support interface": 5,
24
+ "support transition": 5,
25
+ raft: 6,
26
+ "gap fill": 7,
27
+ "gap infill": 7,
28
+ "thin wall": 8,
29
+ bridge: 9,
30
+ "bridge infill": 9,
31
+ "internal bridge": 9,
32
+ "internal bridge infill": 9,
33
+ ironing: 10,
34
+ "prime tower": 11,
35
+ "wipe tower": 11,
36
+ custom: 1,
37
+ // Cura ;TYPE: names
38
+ "wall-outer": 1,
39
+ "wall-inner": 1,
40
+ fill: 2,
41
+ skin: 3,
42
+ "support-interface": 5,
43
+ "prime-tower": 11
44
+ }, nt = [
45
+ ["skirt/brim", 4],
46
+ ["skirt", 4],
47
+ ["walls", 1],
48
+ ["thin-wall", 8],
49
+ ["gap-fill", 7],
50
+ ["bridge", 9],
51
+ ["ironing", 10],
52
+ ["support", 5],
53
+ ["prime tower", 11],
54
+ ["wipe_tower_real", 11]
55
+ ], st = (w, c) => w === c || c.length < w.length && " (:/".includes(w[c.length]) && w.startsWith(c), at = {
56
+ 1: 1,
57
+ 2: 1,
58
+ 3: 1,
59
+ 4: 2,
60
+ 5: 3,
61
+ 6: 3,
62
+ 7: 3,
63
+ 8: 10,
64
+ 9: 9,
65
+ 10: 9,
66
+ 11: 7,
67
+ 12: 4,
68
+ 13: 4,
69
+ 14: 5,
70
+ 15: 5,
71
+ 16: 5,
72
+ 17: 11
73
+ };
74
+ function rt(w, c = {}) {
75
+ const V = Math.PI / 4 * (c.filamentDiameter > 0 ? c.filamentDiameter : 1.75) ** 2, tt = c.defaultLayerHeight > 0 ? c.defaultLayerHeight : 0.2;
76
+ let f = 0, u = 0, m = 0, L = 0, x = !0, v = !0, E = 0, P = 1, S = 0, p = null;
77
+ const g = [];
78
+ let z = !1, I = !0, R = NaN, q = 0, H = 0, O = 0;
79
+ const j = /* @__PURE__ */ new Set([0]), W = (s) => {
80
+ p = { z: s, p: [], w: [] }, g.push(p), I = !1, R = NaN, P = 1, S = 0;
81
+ }, et = () => g.length > 1 ? g[g.length - 2].z : 0, C = (s, o, d, b, N, e, t) => {
82
+ const a = Math.hypot(b - s, N - o, e - d);
83
+ if (!(a < 1e-6))
84
+ if (t > 1e-6) {
85
+ O += t, I ? W(Number.isNaN(R) ? e : R) : !z && e > p.z + 1e-3 && W(e);
86
+ const r = P + E * 16;
87
+ p.p.push(s, o, d, r, b, N, e, r);
88
+ const i = Math.max(0.02, p.z - et() || tt), F = S > 0 ? S : t * V / (a * i) + i * (1 - Math.PI / 4);
89
+ p.w.push(Math.min(3, Math.max(0.05, F))), q++;
90
+ } else p && (p.p.push(s, o, d, E * 16, b, N, e, E * 16), p.w.push(0), H++);
91
+ };
92
+ for (const s of w.split(`
93
+ `)) {
94
+ const o = s.indexOf(";"), d = (o < 0 ? s : s.slice(0, o)).trim(), b = o < 0 ? "" : s.slice(o + 1).trim();
95
+ if (b && !d) {
96
+ const t = b.toLowerCase();
97
+ if (t.startsWith("type:")) {
98
+ P = it[t.slice(5).trim()] ?? 1;
99
+ continue;
100
+ }
101
+ if (t.startsWith("_extrusion_role:")) {
102
+ P = at[parseInt(t.slice(16), 10)] ?? 1;
103
+ continue;
104
+ }
105
+ if (t.startsWith("width:")) {
106
+ const i = parseFloat(t.slice(6));
107
+ S = i > 0 ? i : 0;
108
+ continue;
109
+ }
110
+ if (t.startsWith("layer_change") || t.startsWith("layer:")) {
111
+ z = !0, I = !0;
112
+ continue;
113
+ }
114
+ if (t.startsWith("z:")) {
115
+ const i = parseFloat(t.slice(2));
116
+ I && i > 0 && (z = !0, W(i));
117
+ continue;
118
+ }
119
+ const a = /^layer \d+ z([-\d.]+)/.exec(t);
120
+ if (a) {
121
+ z = !0, W(parseFloat(a[1]));
122
+ continue;
123
+ }
124
+ const r = nt.find(([i]) => st(t, i));
125
+ r && (P = r[1]);
126
+ continue;
127
+ }
128
+ if (!d) continue;
129
+ const N = d.split(/\s+/), e = N[0].toUpperCase();
130
+ if (e === "G90") {
131
+ x = !0;
132
+ continue;
133
+ }
134
+ if (e === "G91") {
135
+ x = !1;
136
+ continue;
137
+ }
138
+ if (e === "M82") {
139
+ v = !0;
140
+ continue;
141
+ }
142
+ if (e === "M83") {
143
+ v = !1;
144
+ continue;
145
+ }
146
+ if (/^T\d+$/.test(e)) {
147
+ E = parseInt(e.slice(1), 10), j.add(E);
148
+ continue;
149
+ }
150
+ if (e === "G92" || e === "G0" || e === "G1" || e === "G2" || e === "G3") {
151
+ let t = NaN, a = NaN, r = NaN, i = NaN, F = 0, D = 0;
152
+ for (let h = 1; h < N.length; h++) {
153
+ const n = N[h][0], l = parseFloat(N[h].slice(1));
154
+ Number.isNaN(l) || (n === "X" || n === "x" ? t = l : n === "Y" || n === "y" ? a = l : n === "Z" || n === "z" ? r = l : n === "E" || n === "e" ? i = l : n === "I" || n === "i" ? F = l : (n === "J" || n === "j") && (D = l));
155
+ }
156
+ if (e === "G92") {
157
+ Number.isNaN(t) || (f = t), Number.isNaN(a) || (u = a), Number.isNaN(r) || (m = r), Number.isNaN(i) || (L = i);
158
+ continue;
159
+ }
160
+ const k = Number.isNaN(t) ? f : x ? t : f + t, A = Number.isNaN(a) ? u : x ? a : u + a, Z = Number.isNaN(r) ? m : x ? r : m + r, K = Number.isNaN(i) ? 0 : v ? i - L : i;
161
+ if (e === "G2" || e === "G3") {
162
+ const h = f + F, n = u + D, l = Math.hypot(f - h, u - n), _ = Math.atan2(u - n, f - h);
163
+ let M = Math.atan2(A - n, k - h);
164
+ const T = e === "G3";
165
+ T && M <= _ + 1e-6 && (M += 2 * Math.PI), !T && M >= _ - 1e-6 && (M -= 2 * Math.PI);
166
+ const y = Math.max(1, Math.min(360, Math.ceil(Math.abs(M - _) * l / 0.3)));
167
+ let X = f, Y = u, J = m;
168
+ for (let G = 1; G <= y; G++) {
169
+ const U = _ + (M - _) * G / y, $ = G === y ? k : h + l * Math.cos(U), B = G === y ? A : n + l * Math.sin(U), Q = m + (Z - m) * G / y;
170
+ C(X, Y, J, $, B, Q, K / y), X = $, Y = B, J = Q;
171
+ }
172
+ } else
173
+ C(f, u, m, k, A, Z, K);
174
+ f = k, u = A, m = Z, Number.isNaN(i) || (L = v ? i : L + i);
175
+ }
176
+ }
177
+ return {
178
+ layers: g.map((s) => ({ z: s.z, paths: Float32Array.from(s.p), widths: Float32Array.from(s.w) })),
179
+ stats: {
180
+ layers: g.length,
181
+ path_segments: q,
182
+ travel_segments: H,
183
+ filament_mm: O,
184
+ tools: [...j].sort((s, o) => s - o)
185
+ }
186
+ };
187
+ }
188
+ export {
189
+ rt as parseGcode
190
+ };