"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file

This program source code file is part of KiCad, a free EDA CAD application.

Copyright (C) 2024 Jon Evans <jon@craftyjon.com>
Copyright (C) 2024 KiCad Developers, see AUTHORS.txt for contributors.

This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program.  If not, see <http://www.gnu.org/licenses/>.
"""
from .. import board
import builtins
import collections.abc
from .. import common
import google.protobuf.any_pb2
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.internal.enum_type_wrapper
import google.protobuf.message
import sys
import typing
if sys.version_info >= (3, 10):
    import typing as typing_extensions
else:
    import typing_extensions
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor

class _BoardLayerType:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _BoardLayerTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_BoardLayerType.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    BLT_UNDEFINED: _BoardLayerType.ValueType
    BLT_SIGNAL: _BoardLayerType.ValueType
    'Signal layer (default for copper)'
    BLT_POWER: _BoardLayerType.ValueType
    'Power plane'
    BLT_MIXED: _BoardLayerType.ValueType
    'Mixed signal/power'
    BLT_JUMPER: _BoardLayerType.ValueType
    'Jumper layer'
    BLT_AUX: _BoardLayerType.ValueType
    'Auxiliary (for non-copper layers)'
    BLT_FRONT: _BoardLayerType.ValueType
    'Front layer'
    BLT_BACK: _BoardLayerType.ValueType
    'Back layer'

class BoardLayerType(_BoardLayerType, metaclass=_BoardLayerTypeEnumTypeWrapper):
    """
    Board layer info (name, type, enabled state)

    Layer type for copper layers (matches LAYER_T enum in KiCad)
    """
BLT_UNDEFINED: BoardLayerType.ValueType
BLT_SIGNAL: BoardLayerType.ValueType
'Signal layer (default for copper)'
BLT_POWER: BoardLayerType.ValueType
'Power plane'
BLT_MIXED: BoardLayerType.ValueType
'Mixed signal/power'
BLT_JUMPER: BoardLayerType.ValueType
'Jumper layer'
BLT_AUX: BoardLayerType.ValueType
'Auxiliary (for non-copper layers)'
BLT_FRONT: BoardLayerType.ValueType
'Front layer'
BLT_BACK: BoardLayerType.ValueType
'Back layer'
global___BoardLayerType = BoardLayerType

class _BoardOriginType:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _BoardOriginTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_BoardOriginType.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    BOT_UNKNOWN: _BoardOriginType.ValueType
    BOT_GRID: _BoardOriginType.ValueType
    BOT_DRILL: _BoardOriginType.ValueType

class BoardOriginType(_BoardOriginType, metaclass=_BoardOriginTypeEnumTypeWrapper):
    ...
BOT_UNKNOWN: BoardOriginType.ValueType
BOT_GRID: BoardOriginType.ValueType
BOT_DRILL: BoardOriginType.ValueType
global___BoardOriginType = BoardOriginType

class _PadstackPresence:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _PadstackPresenceEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_PadstackPresence.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    PSP_UNKNOWN: _PadstackPresence.ValueType
    PSP_PRESENT: _PadstackPresence.ValueType
    'The padstack has a shape on a given layer (is flashed)'
    PSP_NOT_PRESENT: _PadstackPresence.ValueType
    'The padstack has no shape on a given layer (is not flashed)'

class PadstackPresence(_PadstackPresence, metaclass=_PadstackPresenceEnumTypeWrapper):
    ...
PSP_UNKNOWN: PadstackPresence.ValueType
PSP_PRESENT: PadstackPresence.ValueType
'The padstack has a shape on a given layer (is flashed)'
PSP_NOT_PRESENT: PadstackPresence.ValueType
'The padstack has no shape on a given layer (is not flashed)'
global___PadstackPresence = PadstackPresence

class _DrcSeverity:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _DrcSeverityEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_DrcSeverity.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    DRS_UNKNOWN: _DrcSeverity.ValueType
    DRS_WARNING: _DrcSeverity.ValueType
    DRS_ERROR: _DrcSeverity.ValueType
    DRS_EXCLUSION: _DrcSeverity.ValueType
    DRS_IGNORE: _DrcSeverity.ValueType
    DRS_INFO: _DrcSeverity.ValueType
    DRS_ACTION: _DrcSeverity.ValueType
    DRS_DEBUG: _DrcSeverity.ValueType
    DRS_UNDEFINED: _DrcSeverity.ValueType

class DrcSeverity(_DrcSeverity, metaclass=_DrcSeverityEnumTypeWrapper):
    """DRC markers"""
DRS_UNKNOWN: DrcSeverity.ValueType
DRS_WARNING: DrcSeverity.ValueType
DRS_ERROR: DrcSeverity.ValueType
DRS_EXCLUSION: DrcSeverity.ValueType
DRS_IGNORE: DrcSeverity.ValueType
DRS_INFO: DrcSeverity.ValueType
DRS_ACTION: DrcSeverity.ValueType
DRS_DEBUG: DrcSeverity.ValueType
DRS_UNDEFINED: DrcSeverity.ValueType
global___DrcSeverity = DrcSeverity

class _InactiveLayerDisplayMode:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _InactiveLayerDisplayModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_InactiveLayerDisplayMode.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    ILDM_UNKNOWN: _InactiveLayerDisplayMode.ValueType
    ILDM_NORMAL: _InactiveLayerDisplayMode.ValueType
    'Inactive layers are shown'
    ILDM_DIMMED: _InactiveLayerDisplayMode.ValueType
    'Inactive layers are shown with dimmed colors'
    ILDM_HIDDEN: _InactiveLayerDisplayMode.ValueType
    'Inactive layers are hidden'

class InactiveLayerDisplayMode(_InactiveLayerDisplayMode, metaclass=_InactiveLayerDisplayModeEnumTypeWrapper):
    ...
ILDM_UNKNOWN: InactiveLayerDisplayMode.ValueType
ILDM_NORMAL: InactiveLayerDisplayMode.ValueType
'Inactive layers are shown'
ILDM_DIMMED: InactiveLayerDisplayMode.ValueType
'Inactive layers are shown with dimmed colors'
ILDM_HIDDEN: InactiveLayerDisplayMode.ValueType
'Inactive layers are hidden'
global___InactiveLayerDisplayMode = InactiveLayerDisplayMode

class _NetColorDisplayMode:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _NetColorDisplayModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_NetColorDisplayMode.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    NCDM_UNKNOWN: _NetColorDisplayMode.ValueType
    NCDM_ALL: _NetColorDisplayMode.ValueType
    'Net and netclass colors are shown in the ratsnest and on all copper items'
    NCDM_RATSNEST: _NetColorDisplayMode.ValueType
    'Net and netclass colors are shown in the ratsnest only'
    NCDM_OFF: _NetColorDisplayMode.ValueType
    'Net and netclass colors are not shown'

class NetColorDisplayMode(_NetColorDisplayMode, metaclass=_NetColorDisplayModeEnumTypeWrapper):
    ...
NCDM_UNKNOWN: NetColorDisplayMode.ValueType
NCDM_ALL: NetColorDisplayMode.ValueType
'Net and netclass colors are shown in the ratsnest and on all copper items'
NCDM_RATSNEST: NetColorDisplayMode.ValueType
'Net and netclass colors are shown in the ratsnest only'
NCDM_OFF: NetColorDisplayMode.ValueType
'Net and netclass colors are not shown'
global___NetColorDisplayMode = NetColorDisplayMode

class _BoardFlipMode:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _BoardFlipModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_BoardFlipMode.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    BFM_UNKNOWN: _BoardFlipMode.ValueType
    BFM_NORMAL: _BoardFlipMode.ValueType
    'Normal ("non-flipped") mode'
    BFM_FLIPPED_X: _BoardFlipMode.ValueType
    '"Flipped" mode, viewed from the back and mirrored around the X axis'

class BoardFlipMode(_BoardFlipMode, metaclass=_BoardFlipModeEnumTypeWrapper):
    ...
BFM_UNKNOWN: BoardFlipMode.ValueType
BFM_NORMAL: BoardFlipMode.ValueType
'Normal ("non-flipped") mode'
BFM_FLIPPED_X: BoardFlipMode.ValueType
'"Flipped" mode, viewed from the back and mirrored around the X axis'
global___BoardFlipMode = BoardFlipMode

class _RatsnestDisplayMode:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _RatsnestDisplayModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_RatsnestDisplayMode.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    RDM_UNKNOWN: _RatsnestDisplayMode.ValueType
    RDM_ALL_LAYERS: _RatsnestDisplayMode.ValueType
    'Ratsnest lines are drawn to objects even if they are on hidden layers'
    RDM_VISIBLE_LAYERS: _RatsnestDisplayMode.ValueType
    'Ratsnest lines are hidden when at least one endpoint is an item on a hidden layer'

class RatsnestDisplayMode(_RatsnestDisplayMode, metaclass=_RatsnestDisplayModeEnumTypeWrapper):
    ...
RDM_UNKNOWN: RatsnestDisplayMode.ValueType
RDM_ALL_LAYERS: RatsnestDisplayMode.ValueType
'Ratsnest lines are drawn to objects even if they are on hidden layers'
RDM_VISIBLE_LAYERS: RatsnestDisplayMode.ValueType
'Ratsnest lines are hidden when at least one endpoint is an item on a hidden layer'
global___RatsnestDisplayMode = RatsnestDisplayMode

class _GridStyle:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _GridStyleEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_GridStyle.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    GS_UNKNOWN: _GridStyle.ValueType
    GS_DOTS: _GridStyle.ValueType
    GS_LINES: _GridStyle.ValueType
    GS_SMALL_CROSS: _GridStyle.ValueType

class GridStyle(_GridStyle, metaclass=_GridStyleEnumTypeWrapper):
    """
    Grid Settings

    Grid style enum
    """
GS_UNKNOWN: GridStyle.ValueType
GS_DOTS: GridStyle.ValueType
GS_LINES: GridStyle.ValueType
GS_SMALL_CROSS: GridStyle.ValueType
global___GridStyle = GridStyle

class _DimensionUnitsMode:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _DimensionUnitsModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_DimensionUnitsMode.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    DUM_AUTOMATIC: _DimensionUnitsMode.ValueType
    'Use current editor units'
    DUM_INCHES: _DimensionUnitsMode.ValueType
    DUM_MILS: _DimensionUnitsMode.ValueType
    DUM_MILLIMETERS: _DimensionUnitsMode.ValueType

class DimensionUnitsMode(_DimensionUnitsMode, metaclass=_DimensionUnitsModeEnumTypeWrapper):
    """
    Dimension Defaults
    Default settings for new dimension objects (Board Setup -> Text & Graphics -> Defaults)

    Units mode for dimensions
    """
DUM_AUTOMATIC: DimensionUnitsMode.ValueType
'Use current editor units'
DUM_INCHES: DimensionUnitsMode.ValueType
DUM_MILS: DimensionUnitsMode.ValueType
DUM_MILLIMETERS: DimensionUnitsMode.ValueType
global___DimensionUnitsMode = DimensionUnitsMode

class _DimensionUnitsFormat:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _DimensionUnitsFormatEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_DimensionUnitsFormat.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    DUF_NO_SUFFIX: _DimensionUnitsFormat.ValueType
    '1234.0'
    DUF_BARE_SUFFIX: _DimensionUnitsFormat.ValueType
    '1234.0 mm'
    DUF_PAREN_SUFFIX: _DimensionUnitsFormat.ValueType
    '1234.0 (mm)'

class DimensionUnitsFormat(_DimensionUnitsFormat, metaclass=_DimensionUnitsFormatEnumTypeWrapper):
    """Units display format for dimensions"""
DUF_NO_SUFFIX: DimensionUnitsFormat.ValueType
'1234.0'
DUF_BARE_SUFFIX: DimensionUnitsFormat.ValueType
'1234.0 mm'
DUF_PAREN_SUFFIX: DimensionUnitsFormat.ValueType
'1234.0 (mm)'
global___DimensionUnitsFormat = DimensionUnitsFormat

class _DimensionPrecision:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _DimensionPrecisionEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_DimensionPrecision.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    DP_X: _DimensionPrecision.ValueType
    '0 digits (integer)'
    DP_X_X: _DimensionPrecision.ValueType
    '1 digit (0.0)'
    DP_X_XX: _DimensionPrecision.ValueType
    '2 digits (0.00)'
    DP_X_XXX: _DimensionPrecision.ValueType
    '3 digits (0.000)'
    DP_X_XXXX: _DimensionPrecision.ValueType
    '4 digits (0.0000)'
    DP_X_XXXXX: _DimensionPrecision.ValueType
    '5 digits (0.00000)'
    DP_V_VV: _DimensionPrecision.ValueType
    'Variable: 0.00 / 0 / 0.0'
    DP_V_VVV: _DimensionPrecision.ValueType
    'Variable: 0.000 / 0 / 0.00'
    DP_V_VVVV: _DimensionPrecision.ValueType
    'Variable: 0.0000 / 0.0 / 0.000'
    DP_V_VVVVV: _DimensionPrecision.ValueType
    'Variable: 0.00000 / 0.00 / 0.0000'

class DimensionPrecision(_DimensionPrecision, metaclass=_DimensionPrecisionEnumTypeWrapper):
    """Precision (number of decimal places)"""
DP_X: DimensionPrecision.ValueType
'0 digits (integer)'
DP_X_X: DimensionPrecision.ValueType
'1 digit (0.0)'
DP_X_XX: DimensionPrecision.ValueType
'2 digits (0.00)'
DP_X_XXX: DimensionPrecision.ValueType
'3 digits (0.000)'
DP_X_XXXX: DimensionPrecision.ValueType
'4 digits (0.0000)'
DP_X_XXXXX: DimensionPrecision.ValueType
'5 digits (0.00000)'
DP_V_VV: DimensionPrecision.ValueType
'Variable: 0.00 / 0 / 0.0'
DP_V_VVV: DimensionPrecision.ValueType
'Variable: 0.000 / 0 / 0.00'
DP_V_VVVV: DimensionPrecision.ValueType
'Variable: 0.0000 / 0.0 / 0.000'
DP_V_VVVVV: DimensionPrecision.ValueType
'Variable: 0.00000 / 0.00 / 0.0000'
global___DimensionPrecision = DimensionPrecision

class _DimensionTextPosition:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _DimensionTextPositionEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_DimensionTextPosition.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    DTP_OUTSIDE: _DimensionTextPosition.ValueType
    'Text appears outside the dimension line'
    DTP_INLINE: _DimensionTextPosition.ValueType
    'Text appears in line with the dimension line'
    DTP_MANUAL: _DimensionTextPosition.ValueType
    'Text placement is manually set by user'

class DimensionTextPosition(_DimensionTextPosition, metaclass=_DimensionTextPositionEnumTypeWrapper):
    """Text position mode for dimensions"""
DTP_OUTSIDE: DimensionTextPosition.ValueType
'Text appears outside the dimension line'
DTP_INLINE: DimensionTextPosition.ValueType
'Text appears in line with the dimension line'
DTP_MANUAL: DimensionTextPosition.ValueType
'Text placement is manually set by user'
global___DimensionTextPosition = DimensionTextPosition

class _ZoneCornerSmoothing:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _ZoneCornerSmoothingEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ZoneCornerSmoothing.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    ZCS_NONE: _ZoneCornerSmoothing.ValueType
    'No smoothing'
    ZCS_CHAMFER: _ZoneCornerSmoothing.ValueType
    'Chamfered corners'
    ZCS_FILLET: _ZoneCornerSmoothing.ValueType
    'Filleted (rounded) corners'

class ZoneCornerSmoothing(_ZoneCornerSmoothing, metaclass=_ZoneCornerSmoothingEnumTypeWrapper):
    """
    Zone Defaults
    Default settings for new zones (Board Setup -> Text & Graphics -> Defaults)

    Corner smoothing type for zones
    """
ZCS_NONE: ZoneCornerSmoothing.ValueType
'No smoothing'
ZCS_CHAMFER: ZoneCornerSmoothing.ValueType
'Chamfered corners'
ZCS_FILLET: ZoneCornerSmoothing.ValueType
'Filleted (rounded) corners'
global___ZoneCornerSmoothing = ZoneCornerSmoothing

class _ZonePadConnection:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _ZonePadConnectionEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ZonePadConnection.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    ZPC_INHERITED: _ZonePadConnection.ValueType
    'Inherit from pad settings'
    ZPC_NONE: _ZonePadConnection.ValueType
    'No connection (pads not covered)'
    ZPC_THERMAL: _ZonePadConnection.ValueType
    'Thermal relief'
    ZPC_SOLID: _ZonePadConnection.ValueType
    'Solid connection (full copper)'
    ZPC_THT_THERMAL: _ZonePadConnection.ValueType
    'Thermal for THT, solid for SMD'

class ZonePadConnection(_ZonePadConnection, metaclass=_ZonePadConnectionEnumTypeWrapper):
    """Pad connection type for zones"""
ZPC_INHERITED: ZonePadConnection.ValueType
'Inherit from pad settings'
ZPC_NONE: ZonePadConnection.ValueType
'No connection (pads not covered)'
ZPC_THERMAL: ZonePadConnection.ValueType
'Thermal relief'
ZPC_SOLID: ZonePadConnection.ValueType
'Solid connection (full copper)'
ZPC_THT_THERMAL: ZonePadConnection.ValueType
'Thermal for THT, solid for SMD'
global___ZonePadConnection = ZonePadConnection

class _ZoneIslandRemoval:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _ZoneIslandRemovalEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ZoneIslandRemoval.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    ZIR_ALWAYS: _ZoneIslandRemoval.ValueType
    'Always remove isolated islands'
    ZIR_NEVER: _ZoneIslandRemoval.ValueType
    'Never remove isolated islands'
    ZIR_AREA: _ZoneIslandRemoval.ValueType
    'Remove islands below minimum area'

class ZoneIslandRemoval(_ZoneIslandRemoval, metaclass=_ZoneIslandRemovalEnumTypeWrapper):
    """Island removal mode for zones"""
ZIR_ALWAYS: ZoneIslandRemoval.ValueType
'Always remove isolated islands'
ZIR_NEVER: ZoneIslandRemoval.ValueType
'Never remove isolated islands'
ZIR_AREA: ZoneIslandRemoval.ValueType
'Remove islands below minimum area'
global___ZoneIslandRemoval = ZoneIslandRemoval

class _MeanderCornerStyle:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _MeanderCornerStyleEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_MeanderCornerStyle.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    MCS_ROUND: _MeanderCornerStyle.ValueType
    'Rounded corners (fillet)'
    MCS_CHAMFER: _MeanderCornerStyle.ValueType
    'Chamfered corners (45 degree)'

class MeanderCornerStyle(_MeanderCornerStyle, metaclass=_MeanderCornerStyleEnumTypeWrapper):
    """
    Length-Tuning Pattern Settings
    Default settings for meander patterns (Design Rules -> Length-tuning Patterns)

    Corner style for meander patterns
    """
MCS_ROUND: MeanderCornerStyle.ValueType
'Rounded corners (fillet)'
MCS_CHAMFER: MeanderCornerStyle.ValueType
'Chamfered corners (45 degree)'
global___MeanderCornerStyle = MeanderCornerStyle

class _TuningProfileType:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _TuningProfileTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_TuningProfileType.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    TPT_SINGLE: _TuningProfileType.ValueType
    'Single-ended track'
    TPT_DIFFERENTIAL: _TuningProfileType.ValueType
    'Differential pair'

class TuningProfileType(_TuningProfileType, metaclass=_TuningProfileTypeEnumTypeWrapper):
    """
    Tuning Profiles
    Named profiles for impedance/delay tuning (Design Rules -> Tuning Profiles)

    Tuning profile type
    """
TPT_SINGLE: TuningProfileType.ValueType
'Single-ended track'
TPT_DIFFERENTIAL: TuningProfileType.ValueType
'Differential pair'
global___TuningProfileType = TuningProfileType

class _ComponentClassConditionType:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _ComponentClassConditionTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ComponentClassConditionType.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    CCCT_REFERENCE: _ComponentClassConditionType.ValueType
    'Match by reference designator pattern'
    CCCT_FOOTPRINT: _ComponentClassConditionType.ValueType
    'Match by footprint name pattern'
    CCCT_SIDE: _ComponentClassConditionType.ValueType
    'Match by board side (Top/Bottom)'
    CCCT_ROTATION: _ComponentClassConditionType.ValueType
    'Match by rotation angle'
    CCCT_FOOTPRINT_FIELD: _ComponentClassConditionType.ValueType
    'Match by footprint field value'
    CCCT_CUSTOM: _ComponentClassConditionType.ValueType
    'Custom expression'
    CCCT_SHEET_NAME: _ComponentClassConditionType.ValueType
    'Match by hierarchical sheet name'

class ComponentClassConditionType(_ComponentClassConditionType, metaclass=_ComponentClassConditionTypeEnumTypeWrapper):
    """============================================================================
    Component Classes
    ============================================================================

    Condition type for component class assignment rules
    """
CCCT_REFERENCE: ComponentClassConditionType.ValueType
'Match by reference designator pattern'
CCCT_FOOTPRINT: ComponentClassConditionType.ValueType
'Match by footprint name pattern'
CCCT_SIDE: ComponentClassConditionType.ValueType
'Match by board side (Top/Bottom)'
CCCT_ROTATION: ComponentClassConditionType.ValueType
'Match by rotation angle'
CCCT_FOOTPRINT_FIELD: ComponentClassConditionType.ValueType
'Match by footprint field value'
CCCT_CUSTOM: ComponentClassConditionType.ValueType
'Custom expression'
CCCT_SHEET_NAME: ComponentClassConditionType.ValueType
'Match by hierarchical sheet name'
global___ComponentClassConditionType = ComponentClassConditionType

class _ComponentClassConditionsOperator:
    ValueType = typing.NewType('ValueType', builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _ComponentClassConditionsOperatorEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ComponentClassConditionsOperator.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    CCCO_ALL: _ComponentClassConditionsOperator.ValueType
    'All conditions must match (AND)'
    CCCO_ANY: _ComponentClassConditionsOperator.ValueType
    'Any condition can match (OR)'

class ComponentClassConditionsOperator(_ComponentClassConditionsOperator, metaclass=_ComponentClassConditionsOperatorEnumTypeWrapper):
    """How multiple conditions are combined"""
CCCO_ALL: ComponentClassConditionsOperator.ValueType
'All conditions must match (AND)'
CCCO_ANY: ComponentClassConditionsOperator.ValueType
'Any condition can match (OR)'
global___ComponentClassConditionsOperator = ComponentClassConditionsOperator

@typing.final
class GetBoardStackup(google.protobuf.message.Message):
    """
    Board stackup and properties
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetBoardStackup = GetBoardStackup

@typing.final
class BoardStackupResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    STACKUP_FIELD_NUMBER: builtins.int

    @property
    def stackup(self) -> board.board_pb2.BoardStackup:
        ...

    def __init__(self, *, stackup: board.board_pb2.BoardStackup | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['stackup', b'stackup']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['stackup', b'stackup']) -> None:
        ...
global___BoardStackupResponse = BoardStackupResponse

@typing.final
class UpdateBoardStackup(google.protobuf.message.Message):
    """Changes the stackup for the given board according to the contents of the message (**not yet implemented**)
    WARNING: any existing content on layers that are removed by this call is deleted.  This operation cannot be undone.
    Returns BoardStackupResponse with the updated stackup, in normalized form
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    STACKUP_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def stackup(self) -> board.board_pb2.BoardStackup:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., stackup: board.board_pb2.BoardStackup | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'stackup', b'stackup']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'stackup', b'stackup']) -> None:
        ...
global___UpdateBoardStackup = UpdateBoardStackup

@typing.final
class GetBoardEnabledLayers(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetBoardEnabledLayers = GetBoardEnabledLayers

@typing.final
class BoardEnabledLayersResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    COPPER_LAYER_COUNT_FIELD_NUMBER: builtins.int
    LAYERS_FIELD_NUMBER: builtins.int
    copper_layer_count: builtins.int
    'The number of copper layers enabled in this board.'

    @property
    def layers(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[board.board_types_pb2.BoardLayer.ValueType]:
        """A list of all layers enabled in this board, including copper layers and ones which cannot be disabled."""

    def __init__(self, *, copper_layer_count: builtins.int=..., layers: collections.abc.Iterable[board.board_types_pb2.BoardLayer.ValueType] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['copper_layer_count', b'copper_layer_count', 'layers', b'layers']) -> None:
        ...
global___BoardEnabledLayersResponse = BoardEnabledLayersResponse

@typing.final
class SetBoardEnabledLayers(google.protobuf.message.Message):
    """Changes which layers are enabled in the board stackup
    WARNING: any existing content on layers that are removed by this call is deleted.  This operation cannot be undone.
    Returns BoardEnabledLayersResponse with the updated layer set.
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    COPPER_LAYER_COUNT_FIELD_NUMBER: builtins.int
    LAYERS_FIELD_NUMBER: builtins.int
    copper_layer_count: builtins.int
    'The number of copper layers to enable in the board.  Currently, this must be an even number >= 2.'

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def layers(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[board.board_types_pb2.BoardLayer.ValueType]:
        """The non-copper layers to enable.  Note that any copper layers in this list are ignored; copper layers are enabled
        by setting copper_layer_count.  Note that the F/B.Courtyard, Edge.Cuts, and Margin layers cannot be disabled and
        will be present in the board even if they are omitted from this list.
        """

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., copper_layer_count: builtins.int=..., layers: collections.abc.Iterable[board.board_types_pb2.BoardLayer.ValueType] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'copper_layer_count', b'copper_layer_count', 'layers', b'layers']) -> None:
        ...
global___SetBoardEnabledLayers = SetBoardEnabledLayers

@typing.final
class BoardLayerInfo(google.protobuf.message.Message):
    """Information about a single board layer"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    LAYER_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    USER_NAME_FIELD_NUMBER: builtins.int
    TYPE_FIELD_NUMBER: builtins.int
    ENABLED_FIELD_NUMBER: builtins.int
    VISIBLE_FIELD_NUMBER: builtins.int
    layer: board.board_types_pb2.BoardLayer.ValueType
    'The layer ID'
    name: builtins.str
    'The canonical layer name (e.g., "F.Cu", "B.Silkscreen")'
    user_name: builtins.str
    'User-customized layer name (empty if using default)'
    type: global___BoardLayerType.ValueType
    'Layer type (primarily for copper layers)'
    enabled: builtins.bool
    'Whether the layer is enabled'
    visible: builtins.bool
    'Whether the layer is visible in the editor'

    def __init__(self, *, layer: board.board_types_pb2.BoardLayer.ValueType=..., name: builtins.str=..., user_name: builtins.str=..., type: global___BoardLayerType.ValueType=..., enabled: builtins.bool=..., visible: builtins.bool=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['enabled', b'enabled', 'layer', b'layer', 'name', b'name', 'type', b'type', 'user_name', b'user_name', 'visible', b'visible']) -> None:
        ...
global___BoardLayerInfo = BoardLayerInfo

@typing.final
class GetBoardLayersInfo(google.protobuf.message.Message):
    """Get information about all board layers
    Returns BoardLayersInfoResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetBoardLayersInfo = GetBoardLayersInfo

@typing.final
class BoardLayersInfoResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    COPPER_LAYER_COUNT_FIELD_NUMBER: builtins.int
    LAYERS_FIELD_NUMBER: builtins.int
    copper_layer_count: builtins.int
    'Number of copper layers'

    @property
    def layers(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BoardLayerInfo]:
        """All layer information"""

    def __init__(self, *, copper_layer_count: builtins.int=..., layers: collections.abc.Iterable[global___BoardLayerInfo] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['copper_layer_count', b'copper_layer_count', 'layers', b'layers']) -> None:
        ...
global___BoardLayersInfoResponse = BoardLayersInfoResponse

@typing.final
class SetLayerName(google.protobuf.message.Message):
    """Set a layer's custom name
    Returns Empty
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    LAYER_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    layer: board.board_types_pb2.BoardLayer.ValueType
    'The layer to rename'
    name: builtins.str
    'The new custom name (empty string to reset to default)'

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., layer: board.board_types_pb2.BoardLayer.ValueType=..., name: builtins.str=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'layer', b'layer', 'name', b'name']) -> None:
        ...
global___SetLayerName = SetLayerName

@typing.final
class SetLayerType(google.protobuf.message.Message):
    """Set a layer's type (for copper layers)
    Returns Empty
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    LAYER_FIELD_NUMBER: builtins.int
    TYPE_FIELD_NUMBER: builtins.int
    layer: board.board_types_pb2.BoardLayer.ValueType
    'The layer to modify (must be a copper layer)'
    type: global___BoardLayerType.ValueType
    'The new layer type'

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., layer: board.board_types_pb2.BoardLayer.ValueType=..., type: global___BoardLayerType.ValueType=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'layer', b'layer', 'type', b'type']) -> None:
        ...
global___SetLayerType = SetLayerType

@typing.final
class GetGraphicsDefaults(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetGraphicsDefaults = GetGraphicsDefaults

@typing.final
class GraphicsDefaultsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    DEFAULTS_FIELD_NUMBER: builtins.int

    @property
    def defaults(self) -> board.board_pb2.GraphicsDefaults:
        ...

    def __init__(self, *, defaults: board.board_pb2.GraphicsDefaults | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['defaults', b'defaults']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['defaults', b'defaults']) -> None:
        ...
global___GraphicsDefaultsResponse = GraphicsDefaultsResponse

@typing.final
class GetBoardOrigin(google.protobuf.message.Message):
    """Returns a Vector2 with the specified origin point"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    TYPE_FIELD_NUMBER: builtins.int
    type: global___BoardOriginType.ValueType

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., type: global___BoardOriginType.ValueType=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'type', b'type']) -> None:
        ...
global___GetBoardOrigin = GetBoardOrigin

@typing.final
class SetBoardOrigin(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    TYPE_FIELD_NUMBER: builtins.int
    ORIGIN_FIELD_NUMBER: builtins.int
    type: global___BoardOriginType.ValueType

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def origin(self) -> common.types.base_types_pb2.Vector2:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., type: global___BoardOriginType.ValueType=..., origin: common.types.base_types_pb2.Vector2 | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'origin', b'origin']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'origin', b'origin', 'type', b'type']) -> None:
        ...
global___SetBoardOrigin = SetBoardOrigin

@typing.final
class GetNets(google.protobuf.message.Message):
    """
    Net management
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    NETCLASS_FILTER_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def netclass_filter(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
        """If provided, will only return nets that belong to the given netclass.
        If more than one netclass_filter is given, nets belonging to any of the given classes will
        be returned.
        """

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., netclass_filter: collections.abc.Iterable[builtins.str] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'netclass_filter', b'netclass_filter']) -> None:
        ...
global___GetNets = GetNets

@typing.final
class NetsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    NETS_FIELD_NUMBER: builtins.int

    @property
    def nets(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[board.board_types_pb2.Net]:
        ...

    def __init__(self, *, nets: collections.abc.Iterable[board.board_types_pb2.Net] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['nets', b'nets']) -> None:
        ...
global___NetsResponse = NetsResponse

@typing.final
class GetItemsByNet(google.protobuf.message.Message):
    """Retrieve all the copper items belonging to a certain net or set of nets
    returns kiapi.common.commands.GetItemsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    HEADER_FIELD_NUMBER: builtins.int
    TYPES_FIELD_NUMBER: builtins.int
    NET_CODES_FIELD_NUMBER: builtins.int

    @property
    def header(self) -> common.types.base_types_pb2.ItemHeader:
        """Specifies which document to query, which fields to return, etc."""

    @property
    def types(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[common.types.enums_pb2.KiCadObjectType.ValueType]:
        """List of one or more types of items to retreive"""

    @property
    def net_codes(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[board.board_types_pb2.NetCode]:
        """A list of net codes to filter items by"""

    def __init__(self, *, header: common.types.base_types_pb2.ItemHeader | None=..., types: collections.abc.Iterable[common.types.enums_pb2.KiCadObjectType.ValueType] | None=..., net_codes: collections.abc.Iterable[board.board_types_pb2.NetCode] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['header', b'header']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['header', b'header', 'net_codes', b'net_codes', 'types', b'types']) -> None:
        ...
global___GetItemsByNet = GetItemsByNet

@typing.final
class GetItemsByNetClass(google.protobuf.message.Message):
    """Retrieve all the copper items belonging to a certain net class or set of net classes
    returns kiapi.common.commands.GetItemsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    HEADER_FIELD_NUMBER: builtins.int
    TYPES_FIELD_NUMBER: builtins.int
    NET_CLASSES_FIELD_NUMBER: builtins.int

    @property
    def header(self) -> common.types.base_types_pb2.ItemHeader:
        """Specifies which document to query, which fields to return, etc."""

    @property
    def types(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[common.types.enums_pb2.KiCadObjectType.ValueType]:
        """List of one or more types of items to retreive"""

    @property
    def net_classes(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
        """A list of net class names to filter items by"""

    def __init__(self, *, header: common.types.base_types_pb2.ItemHeader | None=..., types: collections.abc.Iterable[common.types.enums_pb2.KiCadObjectType.ValueType] | None=..., net_classes: collections.abc.Iterable[builtins.str] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['header', b'header']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['header', b'header', 'net_classes', b'net_classes', 'types', b'types']) -> None:
        ...
global___GetItemsByNetClass = GetItemsByNetClass

@typing.final
class GetNetClassForNets(google.protobuf.message.Message):
    """A net may be part of multiple classes that have a priority ordering, which will result in a
    composite "effective" netclass containing the merged/overridden properties of all the constituent
    netclasses it contains.  This message retrieves this effective netclass for a net or list of
    nets.
    Returns NetClassForNetsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    NET_FIELD_NUMBER: builtins.int

    @property
    def net(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[board.board_types_pb2.Net]:
        ...

    def __init__(self, *, net: collections.abc.Iterable[board.board_types_pb2.Net] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['net', b'net']) -> None:
        ...
global___GetNetClassForNets = GetNetClassForNets

@typing.final
class NetClassForNetsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    @typing.final
    class ClassesEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor
        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.str

        @property
        def value(self) -> common.types.project_settings_pb2.NetClass:
            ...

        def __init__(self, *, key: builtins.str=..., value: common.types.project_settings_pb2.NetClass | None=...) -> None:
            ...

        def HasField(self, field_name: typing.Literal['value', b'value']) -> builtins.bool:
            ...

        def ClearField(self, field_name: typing.Literal['key', b'key', 'value', b'value']) -> None:
            ...
    CLASSES_FIELD_NUMBER: builtins.int

    @property
    def classes(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, common.types.project_settings_pb2.NetClass]:
        """Map of net name to netclass info"""

    def __init__(self, *, classes: collections.abc.Mapping[builtins.str, common.types.project_settings_pb2.NetClass] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['classes', b'classes']) -> None:
        ...
global___NetClassForNetsResponse = NetClassForNetsResponse

@typing.final
class RefillZones(google.protobuf.message.Message):
    """
    Blocking operations

    Refills some or all zones on the board.
    This is a blocking operation; it will return Empty immediately, but KiCad will return
    ApiStatusCode.AS_BUSY to all future API requests until the zone fill has completed.
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    ZONES_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def zones(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        """A list of zones to refill.  If empty, all zones are refilled."""

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., zones: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'zones', b'zones']) -> None:
        ...
global___RefillZones = RefillZones

@typing.final
class GetPadShapeAsPolygon(google.protobuf.message.Message):
    """
    Utilities

    Computes the polygon representation of a pad, merging any custom shapes together.
    This representation will approximate curves as a series of segments.
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    PADS_FIELD_NUMBER: builtins.int
    LAYER_FIELD_NUMBER: builtins.int
    layer: board.board_types_pb2.BoardLayer.ValueType
    'The layer to process'

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        """The board to process"""

    @property
    def pads(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        """A list of one or more pads to process"""

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., pads: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=..., layer: board.board_types_pb2.BoardLayer.ValueType=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'layer', b'layer', 'pads', b'pads']) -> None:
        ...
global___GetPadShapeAsPolygon = GetPadShapeAsPolygon

@typing.final
class PadShapeAsPolygonResponse(google.protobuf.message.Message):
    """Returned from GetPadShapeAsPolygon.  The pads and polygons repeated fields will have the same length
    and can be treated as a list of tuples.
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    PADS_FIELD_NUMBER: builtins.int
    POLYGONS_FIELD_NUMBER: builtins.int

    @property
    def pads(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        """The pads that were processed"""

    @property
    def polygons(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.PolygonWithHoles]:
        """The polygon representation of each pad"""

    def __init__(self, *, pads: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=..., polygons: collections.abc.Iterable[common.types.base_types_pb2.PolygonWithHoles] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['pads', b'pads', 'polygons', b'polygons']) -> None:
        ...
global___PadShapeAsPolygonResponse = PadShapeAsPolygonResponse

@typing.final
class CheckPadstackPresenceOnLayers(google.protobuf.message.Message):
    """Tests if the given set of items with padstacks (pads or vias) has content on the given set of layers.
    This is a dynamic call rather than a property of the padstack because pads and vias can be set to only include
    shapes on connected copper layers, and whether or not the pad is connected can't be determined in isolation.
    To optimize API call performance, multiple items and multiple layers to test may be passed in with this
    command message.  The return will include the results for each valid item on each valid layer.
    Note that not all layers make sense for a given item (for example, testing against BL_UNDEFINED never makes
    sense).  In general, the internal KiCad APIs will not return an error when testing non-sensical layers for a given
    item, and instead will return a default of "true" for any such layers.
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    ITEMS_FIELD_NUMBER: builtins.int
    LAYERS_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        ...

    @property
    def layers(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[board.board_types_pb2.BoardLayer.ValueType]:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., items: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=..., layers: collections.abc.Iterable[board.board_types_pb2.BoardLayer.ValueType] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'items', b'items', 'layers', b'layers']) -> None:
        ...
global___CheckPadstackPresenceOnLayers = CheckPadstackPresenceOnLayers

@typing.final
class PadstackPresenceEntry(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    ITEM_FIELD_NUMBER: builtins.int
    LAYER_FIELD_NUMBER: builtins.int
    PRESENCE_FIELD_NUMBER: builtins.int
    layer: board.board_types_pb2.BoardLayer.ValueType
    presence: global___PadstackPresence.ValueType

    @property
    def item(self) -> common.types.base_types_pb2.KIID:
        ...

    def __init__(self, *, item: common.types.base_types_pb2.KIID | None=..., layer: board.board_types_pb2.BoardLayer.ValueType=..., presence: global___PadstackPresence.ValueType=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['item', b'item']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['item', b'item', 'layer', b'layer', 'presence', b'presence']) -> None:
        ...
global___PadstackPresenceEntry = PadstackPresenceEntry

@typing.final
class PadstackPresenceResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    ENTRIES_FIELD_NUMBER: builtins.int

    @property
    def entries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___PadstackPresenceEntry]:
        ...

    def __init__(self, *, entries: collections.abc.Iterable[global___PadstackPresenceEntry] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['entries', b'entries']) -> None:
        ...
global___PadstackPresenceResponse = PadstackPresenceResponse

@typing.final
class InjectDrcError(google.protobuf.message.Message):
    """Returns InjectDrcErrorResponse"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    SEVERITY_FIELD_NUMBER: builtins.int
    MESSAGE_FIELD_NUMBER: builtins.int
    POSITION_FIELD_NUMBER: builtins.int
    ITEMS_FIELD_NUMBER: builtins.int
    severity: global___DrcSeverity.ValueType
    message: builtins.str

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def position(self) -> common.types.base_types_pb2.Vector2:
        ...

    @property
    def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., severity: global___DrcSeverity.ValueType=..., message: builtins.str=..., position: common.types.base_types_pb2.Vector2 | None=..., items: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'position', b'position']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'items', b'items', 'message', b'message', 'position', b'position', 'severity', b'severity']) -> None:
        ...
global___InjectDrcError = InjectDrcError

@typing.final
class InjectDrcErrorResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    MARKER_FIELD_NUMBER: builtins.int

    @property
    def marker(self) -> common.types.base_types_pb2.KIID:
        ...

    def __init__(self, *, marker: common.types.base_types_pb2.KIID | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['marker', b'marker']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['marker', b'marker']) -> None:
        ...
global___InjectDrcErrorResponse = InjectDrcErrorResponse

@typing.final
class GetVisibleLayers(google.protobuf.message.Message):
    """PCB editor commands

    returns BoardLayers
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetVisibleLayers = GetVisibleLayers

@typing.final
class BoardLayerResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    LAYER_FIELD_NUMBER: builtins.int
    layer: board.board_types_pb2.BoardLayer.ValueType

    def __init__(self, *, layer: board.board_types_pb2.BoardLayer.ValueType=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['layer', b'layer']) -> None:
        ...
global___BoardLayerResponse = BoardLayerResponse

@typing.final
class BoardLayers(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    LAYERS_FIELD_NUMBER: builtins.int

    @property
    def layers(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[board.board_types_pb2.BoardLayer.ValueType]:
        ...

    def __init__(self, *, layers: collections.abc.Iterable[board.board_types_pb2.BoardLayer.ValueType] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['layers', b'layers']) -> None:
        ...
global___BoardLayers = BoardLayers

@typing.final
class SetVisibleLayers(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    LAYERS_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def layers(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[board.board_types_pb2.BoardLayer.ValueType]:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., layers: collections.abc.Iterable[board.board_types_pb2.BoardLayer.ValueType] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'layers', b'layers']) -> None:
        ...
global___SetVisibleLayers = SetVisibleLayers

@typing.final
class GetActiveLayer(google.protobuf.message.Message):
    """returns BoardLayerResponse"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetActiveLayer = GetActiveLayer

@typing.final
class SetActiveLayer(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    LAYER_FIELD_NUMBER: builtins.int
    layer: board.board_types_pb2.BoardLayer.ValueType

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., layer: board.board_types_pb2.BoardLayer.ValueType=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'layer', b'layer']) -> None:
        ...
global___SetActiveLayer = SetActiveLayer

@typing.final
class BoardEditorAppearanceSettings(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    INACTIVE_LAYER_DISPLAY_FIELD_NUMBER: builtins.int
    NET_COLOR_DISPLAY_FIELD_NUMBER: builtins.int
    BOARD_FLIP_FIELD_NUMBER: builtins.int
    RATSNEST_DISPLAY_FIELD_NUMBER: builtins.int
    inactive_layer_display: global___InactiveLayerDisplayMode.ValueType
    net_color_display: global___NetColorDisplayMode.ValueType
    board_flip: global___BoardFlipMode.ValueType
    ratsnest_display: global___RatsnestDisplayMode.ValueType

    def __init__(self, *, inactive_layer_display: global___InactiveLayerDisplayMode.ValueType=..., net_color_display: global___NetColorDisplayMode.ValueType=..., board_flip: global___BoardFlipMode.ValueType=..., ratsnest_display: global___RatsnestDisplayMode.ValueType=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['board_flip', b'board_flip', 'inactive_layer_display', b'inactive_layer_display', 'net_color_display', b'net_color_display', 'ratsnest_display', b'ratsnest_display']) -> None:
        ...
global___BoardEditorAppearanceSettings = BoardEditorAppearanceSettings

@typing.final
class GetBoardEditorAppearanceSettings(google.protobuf.message.Message):
    """Returns BoardEditorAppearanceSettings"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    def __init__(self) -> None:
        ...
global___GetBoardEditorAppearanceSettings = GetBoardEditorAppearanceSettings

@typing.final
class SetBoardEditorAppearanceSettings(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    SETTINGS_FIELD_NUMBER: builtins.int

    @property
    def settings(self) -> global___BoardEditorAppearanceSettings:
        ...

    def __init__(self, *, settings: global___BoardEditorAppearanceSettings | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['settings', b'settings']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['settings', b'settings']) -> None:
        ...
global___SetBoardEditorAppearanceSettings = SetBoardEditorAppearanceSettings

@typing.final
class InteractiveMoveItems(google.protobuf.message.Message):
    """// Interactive commands ////
    These commands begin an interactive operation in the editor.
    They return a response immediately, but the editor will become busy
    and will not reply to further API commands until the user has finished
    the operation.
    These commands will return an error if received in a non-interactive context.

    Selects and begins an interactive move of the given item(s).
    NOTE: Takes ownership of the active commit, if one exists:
          the move tool will push the commit when the user confirms the move,
          or roll back the commit if the user cancels the move.  Keep this in
          mind if using this command in combination with commands that create
          or modify items using an explicit commit.
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    ITEMS_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., items: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'items', b'items']) -> None:
        ...
global___InteractiveMoveItems = InteractiveMoveItems

@typing.final
class ShowDiffOverlay(google.protobuf.message.Message):
    """Shows a diff overlay on the board editor for testing purposes.
    The overlay will be shown at the specified bounding box location.
    If no bounding box is provided, uses the board's bounding box.
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    BOUNDING_BOX_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def bounding_box(self) -> common.types.base_types_pb2.Box2:
        """Optional bounding box for the overlay. If not provided or has zero size,
        the board's bounding box will be used.
        """

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., bounding_box: common.types.base_types_pb2.Box2 | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'bounding_box', b'bounding_box']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'bounding_box', b'bounding_box']) -> None:
        ...
global___ShowDiffOverlay = ShowDiffOverlay

@typing.final
class RunDRC(google.protobuf.message.Message):
    """
    DRC (Design Rule Check) Operations

    Run design rule checks on the board.
    This is a blocking operation; returns when DRC is complete.
    Returns RunDRCResponse with summary of violations found.
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    REFILL_ZONES_FIELD_NUMBER: builtins.int
    REPORT_ALL_TRACK_ERRORS_FIELD_NUMBER: builtins.int
    TEST_FOOTPRINTS_FIELD_NUMBER: builtins.int
    refill_zones: builtins.bool
    'If true, refill all zones before running DRC'
    report_all_track_errors: builtins.bool
    'If true, report all track errors (not just the first per track)'
    test_footprints: builtins.bool
    'If true, test footprints against library footprints'

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., refill_zones: builtins.bool=..., report_all_track_errors: builtins.bool=..., test_footprints: builtins.bool=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'refill_zones', b'refill_zones', 'report_all_track_errors', b'report_all_track_errors', 'test_footprints', b'test_footprints']) -> None:
        ...
global___RunDRC = RunDRC

@typing.final
class RunDRCResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    ERROR_COUNT_FIELD_NUMBER: builtins.int
    WARNING_COUNT_FIELD_NUMBER: builtins.int
    EXCLUSION_COUNT_FIELD_NUMBER: builtins.int
    error_count: builtins.int
    'Number of errors found'
    warning_count: builtins.int
    'Number of warnings found'
    exclusion_count: builtins.int
    'Number of exclusions (user-marked items to ignore)'

    def __init__(self, *, error_count: builtins.int=..., warning_count: builtins.int=..., exclusion_count: builtins.int=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['error_count', b'error_count', 'exclusion_count', b'exclusion_count', 'warning_count', b'warning_count']) -> None:
        ...
global___RunDRCResponse = RunDRCResponse

@typing.final
class GetDRCViolations(google.protobuf.message.Message):
    """Get all current DRC violations/markers from the board
    Returns DRCViolationsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    SEVERITIES_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def severities(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[global___DrcSeverity.ValueType]:
        """Optional: filter by severity (if empty, returns all)"""

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., severities: collections.abc.Iterable[global___DrcSeverity.ValueType] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'severities', b'severities']) -> None:
        ...
global___GetDRCViolations = GetDRCViolations

@typing.final
class DRCViolation(google.protobuf.message.Message):
    """Represents a single DRC violation"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    ID_FIELD_NUMBER: builtins.int
    SEVERITY_FIELD_NUMBER: builtins.int
    ERROR_CODE_FIELD_NUMBER: builtins.int
    ERROR_TYPE_FIELD_NUMBER: builtins.int
    MESSAGE_FIELD_NUMBER: builtins.int
    POSITION_FIELD_NUMBER: builtins.int
    ITEMS_FIELD_NUMBER: builtins.int
    severity: global___DrcSeverity.ValueType
    'Severity of the violation'
    error_code: builtins.int
    'Error type/code'
    error_type: builtins.str
    'Human-readable error type name'
    message: builtins.str
    'Detailed error message'

    @property
    def id(self) -> common.types.base_types_pb2.KIID:
        """The marker ID"""

    @property
    def position(self) -> common.types.base_types_pb2.Vector2:
        """Position of the violation marker"""

    @property
    def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        """IDs of items involved in the violation"""

    def __init__(self, *, id: common.types.base_types_pb2.KIID | None=..., severity: global___DrcSeverity.ValueType=..., error_code: builtins.int=..., error_type: builtins.str=..., message: builtins.str=..., position: common.types.base_types_pb2.Vector2 | None=..., items: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['id', b'id', 'position', b'position']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['error_code', b'error_code', 'error_type', b'error_type', 'id', b'id', 'items', b'items', 'message', b'message', 'position', b'position', 'severity', b'severity']) -> None:
        ...
global___DRCViolation = DRCViolation

@typing.final
class DRCViolationsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    VIOLATIONS_FIELD_NUMBER: builtins.int

    @property
    def violations(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___DRCViolation]:
        ...

    def __init__(self, *, violations: collections.abc.Iterable[global___DRCViolation] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['violations', b'violations']) -> None:
        ...
global___DRCViolationsResponse = DRCViolationsResponse

@typing.final
class ClearDRCMarkers(google.protobuf.message.Message):
    """Clear DRC markers from the board
    Returns Empty
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    CLEAR_VIOLATIONS_FIELD_NUMBER: builtins.int
    CLEAR_EXCLUSIONS_FIELD_NUMBER: builtins.int
    clear_violations: builtins.bool
    'If true, clear errors and warnings'
    clear_exclusions: builtins.bool
    'If true, clear exclusions (user-marked items to ignore)'

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., clear_violations: builtins.bool=..., clear_exclusions: builtins.bool=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'clear_exclusions', b'clear_exclusions', 'clear_violations', b'clear_violations']) -> None:
        ...
global___ClearDRCMarkers = ClearDRCMarkers

@typing.final
class BoardDesignRules(google.protobuf.message.Message):
    """
    Design Rules

    Board design rules/constraints
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    MIN_CLEARANCE_FIELD_NUMBER: builtins.int
    MIN_TRACK_WIDTH_FIELD_NUMBER: builtins.int
    MIN_CONNECTION_FIELD_NUMBER: builtins.int
    MIN_VIA_DIAMETER_FIELD_NUMBER: builtins.int
    MIN_VIA_DRILL_FIELD_NUMBER: builtins.int
    MIN_VIA_ANNULAR_WIDTH_FIELD_NUMBER: builtins.int
    MIN_MICROVIA_DIAMETER_FIELD_NUMBER: builtins.int
    MIN_MICROVIA_DRILL_FIELD_NUMBER: builtins.int
    MIN_THROUGH_HOLE_FIELD_NUMBER: builtins.int
    MIN_HOLE_TO_HOLE_FIELD_NUMBER: builtins.int
    HOLE_TO_COPPER_CLEARANCE_FIELD_NUMBER: builtins.int
    MIN_SILK_CLEARANCE_FIELD_NUMBER: builtins.int
    MIN_SILK_TEXT_HEIGHT_FIELD_NUMBER: builtins.int
    MIN_SILK_TEXT_THICKNESS_FIELD_NUMBER: builtins.int
    COPPER_EDGE_CLEARANCE_FIELD_NUMBER: builtins.int
    SOLDER_MASK_EXPANSION_FIELD_NUMBER: builtins.int
    SOLDER_MASK_MIN_WIDTH_FIELD_NUMBER: builtins.int
    SOLDER_MASK_TO_COPPER_CLEARANCE_FIELD_NUMBER: builtins.int
    ALLOW_SOLDERMASK_BRIDGES_IN_FPS_FIELD_NUMBER: builtins.int
    TENT_VIAS_FRONT_FIELD_NUMBER: builtins.int
    TENT_VIAS_BACK_FIELD_NUMBER: builtins.int
    SOLDER_PASTE_MARGIN_FIELD_NUMBER: builtins.int
    SOLDER_PASTE_MARGIN_RATIO_FIELD_NUMBER: builtins.int
    MIN_RESOLVED_SPOKES_FIELD_NUMBER: builtins.int
    MAX_ERROR_FIELD_NUMBER: builtins.int
    ALLOW_EXTERNAL_FILLETS_FIELD_NUMBER: builtins.int
    INCLUDE_STACKUP_IN_LENGTH_FIELD_NUMBER: builtins.int
    min_clearance: builtins.int
    'Copper clearances (in nanometers)'
    min_track_width: builtins.int
    min_connection: builtins.int
    'For zone connections'
    min_via_diameter: builtins.int
    'Via constraints'
    min_via_drill: builtins.int
    min_via_annular_width: builtins.int
    min_microvia_diameter: builtins.int
    'Microvia constraints'
    min_microvia_drill: builtins.int
    min_through_hole: builtins.int
    'Hole constraints'
    min_hole_to_hole: builtins.int
    hole_to_copper_clearance: builtins.int
    min_silk_clearance: builtins.int
    'Silkscreen'
    min_silk_text_height: builtins.int
    min_silk_text_thickness: builtins.int
    copper_edge_clearance: builtins.int
    'Board edge'
    solder_mask_expansion: builtins.int
    'Solder mask'
    solder_mask_min_width: builtins.int
    solder_mask_to_copper_clearance: builtins.int
    allow_soldermask_bridges_in_fps: builtins.bool
    tent_vias_front: builtins.bool
    tent_vias_back: builtins.bool
    solder_paste_margin: builtins.int
    'Solder paste'
    solder_paste_margin_ratio: builtins.float
    min_resolved_spokes: builtins.int
    'Minimum resolved spokes for thermals'
    max_error: builtins.int
    'Arc/Circle Approximations\n    Maximum allowed deviation when approximating arcs/circles (nm)\n    '
    allow_external_fillets: builtins.bool
    'Zone Fill Strategy\n    Allow fillets/chamfers outside zone outline\n    '
    include_stackup_in_length: builtins.bool
    'Length Tuning\n    Include stackup height in track length calculations\n    '

    def __init__(self, *, min_clearance: builtins.int=..., min_track_width: builtins.int=..., min_connection: builtins.int=..., min_via_diameter: builtins.int=..., min_via_drill: builtins.int=..., min_via_annular_width: builtins.int=..., min_microvia_diameter: builtins.int=..., min_microvia_drill: builtins.int=..., min_through_hole: builtins.int=..., min_hole_to_hole: builtins.int=..., hole_to_copper_clearance: builtins.int=..., min_silk_clearance: builtins.int=..., min_silk_text_height: builtins.int=..., min_silk_text_thickness: builtins.int=..., copper_edge_clearance: builtins.int=..., solder_mask_expansion: builtins.int=..., solder_mask_min_width: builtins.int=..., solder_mask_to_copper_clearance: builtins.int=..., allow_soldermask_bridges_in_fps: builtins.bool=..., tent_vias_front: builtins.bool=..., tent_vias_back: builtins.bool=..., solder_paste_margin: builtins.int=..., solder_paste_margin_ratio: builtins.float=..., min_resolved_spokes: builtins.int=..., max_error: builtins.int=..., allow_external_fillets: builtins.bool=..., include_stackup_in_length: builtins.bool=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['allow_external_fillets', b'allow_external_fillets', 'allow_soldermask_bridges_in_fps', b'allow_soldermask_bridges_in_fps', 'copper_edge_clearance', b'copper_edge_clearance', 'hole_to_copper_clearance', b'hole_to_copper_clearance', 'include_stackup_in_length', b'include_stackup_in_length', 'max_error', b'max_error', 'min_clearance', b'min_clearance', 'min_connection', b'min_connection', 'min_hole_to_hole', b'min_hole_to_hole', 'min_microvia_diameter', b'min_microvia_diameter', 'min_microvia_drill', b'min_microvia_drill', 'min_resolved_spokes', b'min_resolved_spokes', 'min_silk_clearance', b'min_silk_clearance', 'min_silk_text_height', b'min_silk_text_height', 'min_silk_text_thickness', b'min_silk_text_thickness', 'min_through_hole', b'min_through_hole', 'min_track_width', b'min_track_width', 'min_via_annular_width', b'min_via_annular_width', 'min_via_diameter', b'min_via_diameter', 'min_via_drill', b'min_via_drill', 'solder_mask_expansion', b'solder_mask_expansion', 'solder_mask_min_width', b'solder_mask_min_width', 'solder_mask_to_copper_clearance', b'solder_mask_to_copper_clearance', 'solder_paste_margin', b'solder_paste_margin', 'solder_paste_margin_ratio', b'solder_paste_margin_ratio', 'tent_vias_back', b'tent_vias_back', 'tent_vias_front', b'tent_vias_front']) -> None:
        ...
global___BoardDesignRules = BoardDesignRules

@typing.final
class GetDesignRules(google.protobuf.message.Message):
    """Get design rules
    Returns DesignRulesResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetDesignRules = GetDesignRules

@typing.final
class DesignRulesResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    RULES_FIELD_NUMBER: builtins.int

    @property
    def rules(self) -> global___BoardDesignRules:
        ...

    def __init__(self, *, rules: global___BoardDesignRules | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['rules', b'rules']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['rules', b'rules']) -> None:
        ...
global___DesignRulesResponse = DesignRulesResponse

@typing.final
class SetDesignRules(google.protobuf.message.Message):
    """Set design rules
    Returns DesignRulesResponse with the updated rules
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    RULES_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def rules(self) -> global___BoardDesignRules:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., rules: global___BoardDesignRules | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'rules', b'rules']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'rules', b'rules']) -> None:
        ...
global___SetDesignRules = SetDesignRules

@typing.final
class DRCCheckSeverity(google.protobuf.message.Message):
    """
    DRC Settings

    DRC check severity setting
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    CHECK_NAME_FIELD_NUMBER: builtins.int
    SEVERITY_FIELD_NUMBER: builtins.int
    check_name: builtins.str
    'DRC check name (e.g., "clearance", "track_width")'
    severity: global___DrcSeverity.ValueType
    'Severity level'

    def __init__(self, *, check_name: builtins.str=..., severity: global___DrcSeverity.ValueType=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['check_name', b'check_name', 'severity', b'severity']) -> None:
        ...
global___DRCCheckSeverity = DRCCheckSeverity

@typing.final
class DRCSettingsData(google.protobuf.message.Message):
    """DRC settings configuration"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    CHECK_SEVERITIES_FIELD_NUMBER: builtins.int

    @property
    def check_severities(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___DRCCheckSeverity]:
        """Severity overrides for individual DRC checks"""

    def __init__(self, *, check_severities: collections.abc.Iterable[global___DRCCheckSeverity] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['check_severities', b'check_severities']) -> None:
        ...
global___DRCSettingsData = DRCSettingsData

@typing.final
class GetDRCSettings(google.protobuf.message.Message):
    """Get DRC settings
    Returns DRCSettingsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetDRCSettings = GetDRCSettings

@typing.final
class DRCSettingsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    SETTINGS_FIELD_NUMBER: builtins.int

    @property
    def settings(self) -> global___DRCSettingsData:
        ...

    def __init__(self, *, settings: global___DRCSettingsData | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['settings', b'settings']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['settings', b'settings']) -> None:
        ...
global___DRCSettingsResponse = DRCSettingsResponse

@typing.final
class SetDRCSettings(google.protobuf.message.Message):
    """Set DRC settings
    Returns Empty
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    SETTINGS_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def settings(self) -> global___DRCSettingsData:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., settings: global___DRCSettingsData | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'settings', b'settings']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'settings', b'settings']) -> None:
        ...
global___SetDRCSettings = SetDRCSettings

@typing.final
class PCBGridSettings(google.protobuf.message.Message):
    """PCB grid settings"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    GRID_SIZE_X_NM_FIELD_NUMBER: builtins.int
    GRID_SIZE_Y_NM_FIELD_NUMBER: builtins.int
    SHOW_GRID_FIELD_NUMBER: builtins.int
    STYLE_FIELD_NUMBER: builtins.int
    grid_size_x_nm: builtins.int
    'Grid X spacing in nanometers'
    grid_size_y_nm: builtins.int
    'Grid Y spacing in nanometers'
    show_grid: builtins.bool
    style: global___GridStyle.ValueType

    def __init__(self, *, grid_size_x_nm: builtins.int=..., grid_size_y_nm: builtins.int=..., show_grid: builtins.bool=..., style: global___GridStyle.ValueType=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['grid_size_x_nm', b'grid_size_x_nm', 'grid_size_y_nm', b'grid_size_y_nm', 'show_grid', b'show_grid', 'style', b'style']) -> None:
        ...
global___PCBGridSettings = PCBGridSettings

@typing.final
class GetPCBGridSettings(google.protobuf.message.Message):
    """Get PCB grid settings
    Returns PCBGridSettingsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetPCBGridSettings = GetPCBGridSettings

@typing.final
class PCBGridSettingsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    SETTINGS_FIELD_NUMBER: builtins.int

    @property
    def settings(self) -> global___PCBGridSettings:
        ...

    def __init__(self, *, settings: global___PCBGridSettings | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['settings', b'settings']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['settings', b'settings']) -> None:
        ...
global___PCBGridSettingsResponse = PCBGridSettingsResponse

@typing.final
class SetPCBGridSettings(google.protobuf.message.Message):
    """Set PCB grid settings
    Returns Empty
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    GRID_SIZE_X_NM_FIELD_NUMBER: builtins.int
    GRID_SIZE_Y_NM_FIELD_NUMBER: builtins.int
    SHOW_GRID_FIELD_NUMBER: builtins.int
    STYLE_FIELD_NUMBER: builtins.int
    grid_size_x_nm: builtins.int
    'Grid X spacing in nanometers'
    grid_size_y_nm: builtins.int
    'Grid Y spacing in nanometers'
    show_grid: builtins.bool
    style: global___GridStyle.ValueType

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., grid_size_x_nm: builtins.int | None=..., grid_size_y_nm: builtins.int | None=..., show_grid: builtins.bool | None=..., style: global___GridStyle.ValueType | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['_grid_size_x_nm', b'_grid_size_x_nm', '_grid_size_y_nm', b'_grid_size_y_nm', '_show_grid', b'_show_grid', '_style', b'_style', 'board', b'board', 'grid_size_x_nm', b'grid_size_x_nm', 'grid_size_y_nm', b'grid_size_y_nm', 'show_grid', b'show_grid', 'style', b'style']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['_grid_size_x_nm', b'_grid_size_x_nm', '_grid_size_y_nm', b'_grid_size_y_nm', '_show_grid', b'_show_grid', '_style', b'_style', 'board', b'board', 'grid_size_x_nm', b'grid_size_x_nm', 'grid_size_y_nm', b'grid_size_y_nm', 'show_grid', b'show_grid', 'style', b'style']) -> None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_grid_size_x_nm', b'_grid_size_x_nm']) -> typing.Literal['grid_size_x_nm'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_grid_size_y_nm', b'_grid_size_y_nm']) -> typing.Literal['grid_size_y_nm'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_show_grid', b'_show_grid']) -> typing.Literal['show_grid'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_style', b'_style']) -> typing.Literal['style'] | None:
        ...
global___SetPCBGridSettings = SetPCBGridSettings

@typing.final
class SetGraphicsDefaults(google.protobuf.message.Message):
    """
    Graphics Defaults (Set)

    Set default graphics settings per layer class
    Returns GraphicsDefaultsResponse with the updated defaults
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    DEFAULTS_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def defaults(self) -> board.board_pb2.GraphicsDefaults:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., defaults: board.board_pb2.GraphicsDefaults | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'defaults', b'defaults']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'defaults', b'defaults']) -> None:
        ...
global___SetGraphicsDefaults = SetGraphicsDefaults

@typing.final
class UpdatePCBFromSchematicOptions(google.protobuf.message.Message):
    """
    Update PCB from Schematic

    Options for updating PCB from schematic
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    LOOKUP_BY_TIMESTAMP_FIELD_NUMBER: builtins.int
    REPLACE_FOOTPRINTS_FIELD_NUMBER: builtins.int
    DELETE_UNUSED_FOOTPRINTS_FIELD_NUMBER: builtins.int
    OVERRIDE_LOCKS_FIELD_NUMBER: builtins.int
    UPDATE_FIELDS_FIELD_NUMBER: builtins.int
    REMOVE_EXTRA_FIELDS_FIELD_NUMBER: builtins.int
    TRANSFER_GROUPS_FIELD_NUMBER: builtins.int
    lookup_by_timestamp: builtins.bool
    'Footprint matching strategy: true = match by UUID, false = match by reference'
    replace_footprints: builtins.bool
    "Footprint handling\n    Replace footprints when library ID doesn't match\n    "
    delete_unused_footprints: builtins.bool
    'Remove footprints not in schematic'
    override_locks: builtins.bool
    'Allow changes to locked footprints'
    update_fields: builtins.bool
    'Field synchronization\n    Sync custom field values from schematic\n    '
    remove_extra_fields: builtins.bool
    'Remove fields not present in schematic'
    transfer_groups: builtins.bool
    'Groups (design blocks)\n    Copy group membership from schematic\n    '

    def __init__(self, *, lookup_by_timestamp: builtins.bool=..., replace_footprints: builtins.bool=..., delete_unused_footprints: builtins.bool=..., override_locks: builtins.bool=..., update_fields: builtins.bool=..., remove_extra_fields: builtins.bool=..., transfer_groups: builtins.bool=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['delete_unused_footprints', b'delete_unused_footprints', 'lookup_by_timestamp', b'lookup_by_timestamp', 'override_locks', b'override_locks', 'remove_extra_fields', b'remove_extra_fields', 'replace_footprints', b'replace_footprints', 'transfer_groups', b'transfer_groups', 'update_fields', b'update_fields']) -> None:
        ...
global___UpdatePCBFromSchematicOptions = UpdatePCBFromSchematicOptions

@typing.final
class UpdatePCBFromSchematic(google.protobuf.message.Message):
    """Request to update PCB from schematic
    Returns UpdatePCBFromSchematicResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    SCHEMATIC_FIELD_NUMBER: builtins.int
    OPTIONS_FIELD_NUMBER: builtins.int
    DRY_RUN_FIELD_NUMBER: builtins.int
    dry_run: builtins.bool
    'If true, only preview changes without applying'

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def schematic(self) -> common.types.base_types_pb2.DocumentSpecifier:
        """If not specified, uses the schematic associated with the board's project"""

    @property
    def options(self) -> global___UpdatePCBFromSchematicOptions:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., schematic: common.types.base_types_pb2.DocumentSpecifier | None=..., options: global___UpdatePCBFromSchematicOptions | None=..., dry_run: builtins.bool=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'options', b'options', 'schematic', b'schematic']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'dry_run', b'dry_run', 'options', b'options', 'schematic', b'schematic']) -> None:
        ...
global___UpdatePCBFromSchematic = UpdatePCBFromSchematic

@typing.final
class PCBUpdateChange(google.protobuf.message.Message):
    """Single change item in the update report"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class _ChangeType:
        ValueType = typing.NewType('ValueType', builtins.int)
        V: typing_extensions.TypeAlias = ValueType

    class _ChangeTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[PCBUpdateChange._ChangeType.ValueType], builtins.type):
        DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
        CT_UNKNOWN: PCBUpdateChange._ChangeType.ValueType
        CT_FOOTPRINT_ADDED: PCBUpdateChange._ChangeType.ValueType
        CT_FOOTPRINT_REPLACED: PCBUpdateChange._ChangeType.ValueType
        CT_FOOTPRINT_DELETED: PCBUpdateChange._ChangeType.ValueType
        CT_FOOTPRINT_UPDATED: PCBUpdateChange._ChangeType.ValueType
        'Fields/value changed'
        CT_NET_CHANGED: PCBUpdateChange._ChangeType.ValueType
        CT_PAD_NET_CHANGED: PCBUpdateChange._ChangeType.ValueType
        CT_GROUP_ADDED: PCBUpdateChange._ChangeType.ValueType
        CT_WARNING: PCBUpdateChange._ChangeType.ValueType
        CT_ERROR: PCBUpdateChange._ChangeType.ValueType

    class ChangeType(_ChangeType, metaclass=_ChangeTypeEnumTypeWrapper):
        ...
    CT_UNKNOWN: PCBUpdateChange.ChangeType.ValueType
    CT_FOOTPRINT_ADDED: PCBUpdateChange.ChangeType.ValueType
    CT_FOOTPRINT_REPLACED: PCBUpdateChange.ChangeType.ValueType
    CT_FOOTPRINT_DELETED: PCBUpdateChange.ChangeType.ValueType
    CT_FOOTPRINT_UPDATED: PCBUpdateChange.ChangeType.ValueType
    'Fields/value changed'
    CT_NET_CHANGED: PCBUpdateChange.ChangeType.ValueType
    CT_PAD_NET_CHANGED: PCBUpdateChange.ChangeType.ValueType
    CT_GROUP_ADDED: PCBUpdateChange.ChangeType.ValueType
    CT_WARNING: PCBUpdateChange.ChangeType.ValueType
    CT_ERROR: PCBUpdateChange.ChangeType.ValueType
    TYPE_FIELD_NUMBER: builtins.int
    REFERENCE_FIELD_NUMBER: builtins.int
    MESSAGE_FIELD_NUMBER: builtins.int
    ITEM_ID_FIELD_NUMBER: builtins.int
    type: global___PCBUpdateChange.ChangeType.ValueType
    reference: builtins.str
    'Component reference (U1, R5, etc.)'
    message: builtins.str
    'Human-readable description'

    @property
    def item_id(self) -> common.types.base_types_pb2.KIID:
        """Affected item ID (if applicable)"""

    def __init__(self, *, type: global___PCBUpdateChange.ChangeType.ValueType=..., reference: builtins.str=..., message: builtins.str=..., item_id: common.types.base_types_pb2.KIID | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['item_id', b'item_id']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['item_id', b'item_id', 'message', b'message', 'reference', b'reference', 'type', b'type']) -> None:
        ...
global___PCBUpdateChange = PCBUpdateChange

@typing.final
class UpdatePCBFromSchematicResponse(google.protobuf.message.Message):
    """Response from UpdatePCBFromSchematic"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    STATUS_FIELD_NUMBER: builtins.int
    FOOTPRINTS_ADDED_FIELD_NUMBER: builtins.int
    FOOTPRINTS_REPLACED_FIELD_NUMBER: builtins.int
    FOOTPRINTS_DELETED_FIELD_NUMBER: builtins.int
    FOOTPRINTS_UPDATED_FIELD_NUMBER: builtins.int
    NETS_CHANGED_FIELD_NUMBER: builtins.int
    WARNINGS_FIELD_NUMBER: builtins.int
    ERRORS_FIELD_NUMBER: builtins.int
    CHANGES_FIELD_NUMBER: builtins.int
    CHANGES_APPLIED_FIELD_NUMBER: builtins.int
    status: common.types.base_types_pb2.CommandStatus.ValueType
    footprints_added: builtins.int
    'Summary counts'
    footprints_replaced: builtins.int
    footprints_deleted: builtins.int
    footprints_updated: builtins.int
    nets_changed: builtins.int
    warnings: builtins.int
    errors: builtins.int
    changes_applied: builtins.bool
    'true if update was applied (false for dry_run)'

    @property
    def changes(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___PCBUpdateChange]:
        """Detailed change log"""

    def __init__(self, *, status: common.types.base_types_pb2.CommandStatus.ValueType=..., footprints_added: builtins.int=..., footprints_replaced: builtins.int=..., footprints_deleted: builtins.int=..., footprints_updated: builtins.int=..., nets_changed: builtins.int=..., warnings: builtins.int=..., errors: builtins.int=..., changes: collections.abc.Iterable[global___PCBUpdateChange] | None=..., changes_applied: builtins.bool=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['changes', b'changes', 'changes_applied', b'changes_applied', 'errors', b'errors', 'footprints_added', b'footprints_added', 'footprints_deleted', b'footprints_deleted', 'footprints_replaced', b'footprints_replaced', 'footprints_updated', b'footprints_updated', 'nets_changed', b'nets_changed', 'status', b'status', 'warnings', b'warnings']) -> None:
        ...
global___UpdatePCBFromSchematicResponse = UpdatePCBFromSchematicResponse

@typing.final
class FootprintInfo(google.protobuf.message.Message):
    """
    Footprint Library Browsing

    Basic footprint metadata
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    NAME_FIELD_NUMBER: builtins.int
    LIB_ID_FIELD_NUMBER: builtins.int
    DESCRIPTION_FIELD_NUMBER: builtins.int
    KEYWORDS_FIELD_NUMBER: builtins.int
    PAD_COUNT_FIELD_NUMBER: builtins.int
    UNIQUE_PAD_COUNT_FIELD_NUMBER: builtins.int
    name: builtins.str
    'Footprint name (e.g., "R_0402_1005Metric")'
    lib_id: builtins.str
    'Full lib_id (e.g., "Resistor_SMD:R_0402_1005Metric")'
    description: builtins.str
    'Description text'
    keywords: builtins.str
    'Keywords for searching'
    pad_count: builtins.int
    'Number of pads'
    unique_pad_count: builtins.int
    'Unique pad shapes'

    def __init__(self, *, name: builtins.str=..., lib_id: builtins.str=..., description: builtins.str=..., keywords: builtins.str=..., pad_count: builtins.int=..., unique_pad_count: builtins.int=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['description', b'description', 'keywords', b'keywords', 'lib_id', b'lib_id', 'name', b'name', 'pad_count', b'pad_count', 'unique_pad_count', b'unique_pad_count']) -> None:
        ...
global___FootprintInfo = FootprintInfo

@typing.final
class PadInfo(google.protobuf.message.Message):
    """Pad information for detailed footprint view"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    NUMBER_FIELD_NUMBER: builtins.int
    NET_NAME_FIELD_NUMBER: builtins.int
    POSITION_FIELD_NUMBER: builtins.int
    SIZE_FIELD_NUMBER: builtins.int
    SHAPE_FIELD_NUMBER: builtins.int
    number: builtins.str
    'Pad number/name'
    net_name: builtins.str
    'Net name (empty for library footprint)'
    shape: builtins.int
    'PAD_SHAPE enum'

    @property
    def position(self) -> common.types.base_types_pb2.Vector2:
        """Relative position"""

    @property
    def size(self) -> common.types.base_types_pb2.Vector2:
        """Pad size"""

    def __init__(self, *, number: builtins.str=..., net_name: builtins.str=..., position: common.types.base_types_pb2.Vector2 | None=..., size: common.types.base_types_pb2.Vector2 | None=..., shape: builtins.int=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['position', b'position', 'size', b'size']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['net_name', b'net_name', 'number', b'number', 'position', b'position', 'shape', b'shape', 'size', b'size']) -> None:
        ...
global___PadInfo = PadInfo

@typing.final
class GetLibraryFootprints(google.protobuf.message.Message):
    """Get all footprints in a library
    Returns GetLibraryFootprintsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    LIBRARY_NAME_FIELD_NUMBER: builtins.int
    library_name: builtins.str
    'Library nickname (e.g., "Resistor_SMD")'

    def __init__(self, *, library_name: builtins.str=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['library_name', b'library_name']) -> None:
        ...
global___GetLibraryFootprints = GetLibraryFootprints

@typing.final
class GetLibraryFootprintsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    FOOTPRINTS_FIELD_NUMBER: builtins.int

    @property
    def footprints(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___FootprintInfo]:
        ...

    def __init__(self, *, footprints: collections.abc.Iterable[global___FootprintInfo] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['footprints', b'footprints']) -> None:
        ...
global___GetLibraryFootprintsResponse = GetLibraryFootprintsResponse

@typing.final
class SearchLibraryFootprints(google.protobuf.message.Message):
    """Search footprints across libraries
    Returns SearchLibraryFootprintsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    QUERY_FIELD_NUMBER: builtins.int
    LIBRARIES_FIELD_NUMBER: builtins.int
    MAX_RESULTS_FIELD_NUMBER: builtins.int
    query: builtins.str
    'Search term'
    max_results: builtins.int
    'Limit results (0 = unlimited)'

    @property
    def libraries(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
        """Libraries to search (empty = all)"""

    def __init__(self, *, query: builtins.str=..., libraries: collections.abc.Iterable[builtins.str] | None=..., max_results: builtins.int=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['libraries', b'libraries', 'max_results', b'max_results', 'query', b'query']) -> None:
        ...
global___SearchLibraryFootprints = SearchLibraryFootprints

@typing.final
class SearchLibraryFootprintsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    RESULTS_FIELD_NUMBER: builtins.int

    @property
    def results(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___FootprintInfo]:
        ...

    def __init__(self, *, results: collections.abc.Iterable[global___FootprintInfo] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['results', b'results']) -> None:
        ...
global___SearchLibraryFootprintsResponse = SearchLibraryFootprintsResponse

@typing.final
class GetFootprintInfo(google.protobuf.message.Message):
    """Get detailed footprint info
    Returns GetFootprintInfoResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    LIB_ID_FIELD_NUMBER: builtins.int
    lib_id: builtins.str
    '"Library:Footprint" format'

    def __init__(self, *, lib_id: builtins.str=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['lib_id', b'lib_id']) -> None:
        ...
global___GetFootprintInfo = GetFootprintInfo

@typing.final
class GetFootprintInfoResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    INFO_FIELD_NUMBER: builtins.int
    PADS_FIELD_NUMBER: builtins.int
    BOUNDING_BOX_FIELD_NUMBER: builtins.int
    DOC_LINK_FIELD_NUMBER: builtins.int
    doc_link: builtins.str
    'Documentation URL'

    @property
    def info(self) -> global___FootprintInfo:
        ...

    @property
    def pads(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___PadInfo]:
        """Pad details"""

    @property
    def bounding_box(self) -> common.types.base_types_pb2.Box2:
        """Footprint bounds"""

    def __init__(self, *, info: global___FootprintInfo | None=..., pads: collections.abc.Iterable[global___PadInfo] | None=..., bounding_box: common.types.base_types_pb2.Box2 | None=..., doc_link: builtins.str=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['bounding_box', b'bounding_box', 'info', b'info']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['bounding_box', b'bounding_box', 'doc_link', b'doc_link', 'info', b'info', 'pads', b'pads']) -> None:
        ...
global___GetFootprintInfoResponse = GetFootprintInfoResponse

@typing.final
class RatsnestLine(google.protobuf.message.Message):
    """
    Ratsnest Query

    Individual ratsnest line (unrouted connection)
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    NET_CODE_FIELD_NUMBER: builtins.int
    NET_NAME_FIELD_NUMBER: builtins.int
    PAD1_ID_FIELD_NUMBER: builtins.int
    PAD2_ID_FIELD_NUMBER: builtins.int
    START_FIELD_NUMBER: builtins.int
    END_FIELD_NUMBER: builtins.int
    LENGTH_FIELD_NUMBER: builtins.int
    net_code: builtins.int
    net_name: builtins.str
    length: builtins.int
    'Manhattan distance (nm)'

    @property
    def pad1_id(self) -> common.types.base_types_pb2.KIID:
        """Source pad/via"""

    @property
    def pad2_id(self) -> common.types.base_types_pb2.KIID:
        """Destination pad/via"""

    @property
    def start(self) -> common.types.base_types_pb2.Vector2:
        """Start position"""

    @property
    def end(self) -> common.types.base_types_pb2.Vector2:
        """End position"""

    def __init__(self, *, net_code: builtins.int=..., net_name: builtins.str=..., pad1_id: common.types.base_types_pb2.KIID | None=..., pad2_id: common.types.base_types_pb2.KIID | None=..., start: common.types.base_types_pb2.Vector2 | None=..., end: common.types.base_types_pb2.Vector2 | None=..., length: builtins.int=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['end', b'end', 'pad1_id', b'pad1_id', 'pad2_id', b'pad2_id', 'start', b'start']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['end', b'end', 'length', b'length', 'net_code', b'net_code', 'net_name', b'net_name', 'pad1_id', b'pad1_id', 'pad2_id', b'pad2_id', 'start', b'start']) -> None:
        ...
global___RatsnestLine = RatsnestLine

@typing.final
class GetRatsnest(google.protobuf.message.Message):
    """Get unrouted connections (ratsnest lines)
    Returns GetRatsnestResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    NET_CODES_FIELD_NUMBER: builtins.int
    INCLUDE_ZONES_FIELD_NUMBER: builtins.int
    include_zones: builtins.bool
    'Include zone connections'

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def net_codes(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
        """Filter by nets (empty = all)"""

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., net_codes: collections.abc.Iterable[builtins.int] | None=..., include_zones: builtins.bool=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'include_zones', b'include_zones', 'net_codes', b'net_codes']) -> None:
        ...
global___GetRatsnest = GetRatsnest

@typing.final
class GetRatsnestResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    LINES_FIELD_NUMBER: builtins.int
    TOTAL_UNROUTED_FIELD_NUMBER: builtins.int
    total_unrouted: builtins.int
    'Total unrouted count'

    @property
    def lines(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___RatsnestLine]:
        ...

    def __init__(self, *, lines: collections.abc.Iterable[global___RatsnestLine] | None=..., total_unrouted: builtins.int=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['lines', b'lines', 'total_unrouted', b'total_unrouted']) -> None:
        ...
global___GetRatsnestResponse = GetRatsnestResponse

@typing.final
class UnroutedNetInfo(google.protobuf.message.Message):
    """Information about unrouted nets"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    NET_CODE_FIELD_NUMBER: builtins.int
    NET_NAME_FIELD_NUMBER: builtins.int
    TOTAL_PADS_FIELD_NUMBER: builtins.int
    ROUTED_CONNECTIONS_FIELD_NUMBER: builtins.int
    UNROUTED_CONNECTIONS_FIELD_NUMBER: builtins.int
    IS_COMPLETE_FIELD_NUMBER: builtins.int
    net_code: builtins.int
    net_name: builtins.str
    total_pads: builtins.int
    'Total pads on net'
    routed_connections: builtins.int
    'Completed connections'
    unrouted_connections: builtins.int
    'Remaining connections'
    is_complete: builtins.bool
    'Fully routed?'

    def __init__(self, *, net_code: builtins.int=..., net_name: builtins.str=..., total_pads: builtins.int=..., routed_connections: builtins.int=..., unrouted_connections: builtins.int=..., is_complete: builtins.bool=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['is_complete', b'is_complete', 'net_code', b'net_code', 'net_name', b'net_name', 'routed_connections', b'routed_connections', 'total_pads', b'total_pads', 'unrouted_connections', b'unrouted_connections']) -> None:
        ...
global___UnroutedNetInfo = UnroutedNetInfo

@typing.final
class GetUnroutedNets(google.protobuf.message.Message):
    """Get nets with incomplete routing
    Returns GetUnroutedNetsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetUnroutedNets = GetUnroutedNets

@typing.final
class GetUnroutedNetsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    NETS_FIELD_NUMBER: builtins.int

    @property
    def nets(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___UnroutedNetInfo]:
        ...

    def __init__(self, *, nets: collections.abc.Iterable[global___UnroutedNetInfo] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['nets', b'nets']) -> None:
        ...
global___GetUnroutedNetsResponse = GetUnroutedNetsResponse

@typing.final
class ItemConnectivity(google.protobuf.message.Message):
    """Connectivity status for a single item"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    ITEM_ID_FIELD_NUMBER: builtins.int
    NET_CODE_FIELD_NUMBER: builtins.int
    NET_NAME_FIELD_NUMBER: builtins.int
    CONNECTED_ITEMS_FIELD_NUMBER: builtins.int
    UNCONNECTED_ITEMS_FIELD_NUMBER: builtins.int
    net_code: builtins.int
    net_name: builtins.str

    @property
    def item_id(self) -> common.types.base_types_pb2.KIID:
        ...

    @property
    def connected_items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        """Items electrically connected"""

    @property
    def unconnected_items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        """Items on same net but not connected"""

    def __init__(self, *, item_id: common.types.base_types_pb2.KIID | None=..., net_code: builtins.int=..., net_name: builtins.str=..., connected_items: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=..., unconnected_items: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['item_id', b'item_id']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['connected_items', b'connected_items', 'item_id', b'item_id', 'net_code', b'net_code', 'net_name', b'net_name', 'unconnected_items', b'unconnected_items']) -> None:
        ...
global___ItemConnectivity = ItemConnectivity

@typing.final
class GetConnectivityStatus(google.protobuf.message.Message):
    """Get connectivity status for specific items
    Returns GetConnectivityStatusResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    ITEM_IDS_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def item_ids(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        """Pads/vias to check"""

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., item_ids: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'item_ids', b'item_ids']) -> None:
        ...
global___GetConnectivityStatus = GetConnectivityStatus

@typing.final
class GetConnectivityStatusResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    ITEMS_FIELD_NUMBER: builtins.int

    @property
    def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ItemConnectivity]:
        ...

    def __init__(self, *, items: collections.abc.Iterable[global___ItemConnectivity] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['items', b'items']) -> None:
        ...
global___GetConnectivityStatusResponse = GetConnectivityStatusResponse

@typing.final
class GroupInfo(google.protobuf.message.Message):
    """
    Group Operations

    Group information
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    ID_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    MEMBER_IDS_FIELD_NUMBER: builtins.int
    LOCKED_FIELD_NUMBER: builtins.int
    name: builtins.str
    locked: builtins.bool

    @property
    def id(self) -> common.types.base_types_pb2.KIID:
        ...

    @property
    def member_ids(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        ...

    def __init__(self, *, id: common.types.base_types_pb2.KIID | None=..., name: builtins.str=..., member_ids: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=..., locked: builtins.bool=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['id', b'id']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['id', b'id', 'locked', b'locked', 'member_ids', b'member_ids', 'name', b'name']) -> None:
        ...
global___GroupInfo = GroupInfo

@typing.final
class GetGroups(google.protobuf.message.Message):
    """Get all groups on board
    Returns GetGroupsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetGroups = GetGroups

@typing.final
class GetGroupsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    GROUPS_FIELD_NUMBER: builtins.int

    @property
    def groups(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___GroupInfo]:
        ...

    def __init__(self, *, groups: collections.abc.Iterable[global___GroupInfo] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['groups', b'groups']) -> None:
        ...
global___GetGroupsResponse = GetGroupsResponse

@typing.final
class CreateGroup(google.protobuf.message.Message):
    """Create a new group
    Returns CreateGroupResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    MEMBER_IDS_FIELD_NUMBER: builtins.int
    name: builtins.str

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def member_ids(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        """Items to add to group"""

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., name: builtins.str=..., member_ids: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'member_ids', b'member_ids', 'name', b'name']) -> None:
        ...
global___CreateGroup = CreateGroup

@typing.final
class CreateGroupResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    GROUP_ID_FIELD_NUMBER: builtins.int
    GROUP_FIELD_NUMBER: builtins.int

    @property
    def group_id(self) -> common.types.base_types_pb2.KIID:
        ...

    @property
    def group(self) -> global___GroupInfo:
        ...

    def __init__(self, *, group_id: common.types.base_types_pb2.KIID | None=..., group: global___GroupInfo | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['group', b'group', 'group_id', b'group_id']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['group', b'group', 'group_id', b'group_id']) -> None:
        ...
global___CreateGroupResponse = CreateGroupResponse

@typing.final
class DeleteGroup(google.protobuf.message.Message):
    """Delete a group (does not delete members)
    Returns DeleteGroupResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    GROUP_ID_FIELD_NUMBER: builtins.int
    UNGROUP_MEMBERS_FIELD_NUMBER: builtins.int
    ungroup_members: builtins.bool
    'If true, remove items from group first'

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def group_id(self) -> common.types.base_types_pb2.KIID:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., group_id: common.types.base_types_pb2.KIID | None=..., ungroup_members: builtins.bool=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'group_id', b'group_id']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'group_id', b'group_id', 'ungroup_members', b'ungroup_members']) -> None:
        ...
global___DeleteGroup = DeleteGroup

@typing.final
class DeleteGroupResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    SUCCESS_FIELD_NUMBER: builtins.int
    success: builtins.bool

    def __init__(self, *, success: builtins.bool=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['success', b'success']) -> None:
        ...
global___DeleteGroupResponse = DeleteGroupResponse

@typing.final
class AddToGroup(google.protobuf.message.Message):
    """Add items to existing group
    Returns AddToGroupResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    GROUP_ID_FIELD_NUMBER: builtins.int
    ITEM_IDS_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def group_id(self) -> common.types.base_types_pb2.KIID:
        ...

    @property
    def item_ids(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., group_id: common.types.base_types_pb2.KIID | None=..., item_ids: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'group_id', b'group_id']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'group_id', b'group_id', 'item_ids', b'item_ids']) -> None:
        ...
global___AddToGroup = AddToGroup

@typing.final
class AddToGroupResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    ITEMS_ADDED_FIELD_NUMBER: builtins.int
    FAILED_IDS_FIELD_NUMBER: builtins.int
    items_added: builtins.int

    @property
    def failed_ids(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        """Items that couldn't be added"""

    def __init__(self, *, items_added: builtins.int=..., failed_ids: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['failed_ids', b'failed_ids', 'items_added', b'items_added']) -> None:
        ...
global___AddToGroupResponse = AddToGroupResponse

@typing.final
class RemoveFromGroup(google.protobuf.message.Message):
    """Remove items from group
    Returns RemoveFromGroupResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    GROUP_ID_FIELD_NUMBER: builtins.int
    ITEM_IDS_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def group_id(self) -> common.types.base_types_pb2.KIID:
        ...

    @property
    def item_ids(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., group_id: common.types.base_types_pb2.KIID | None=..., item_ids: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'group_id', b'group_id']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'group_id', b'group_id', 'item_ids', b'item_ids']) -> None:
        ...
global___RemoveFromGroup = RemoveFromGroup

@typing.final
class RemoveFromGroupResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    ITEMS_REMOVED_FIELD_NUMBER: builtins.int
    items_removed: builtins.int

    def __init__(self, *, items_removed: builtins.int=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['items_removed', b'items_removed']) -> None:
        ...
global___RemoveFromGroupResponse = RemoveFromGroupResponse

@typing.final
class GetGroupMembers(google.protobuf.message.Message):
    """Get members of a specific group
    Returns GetGroupMembersResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    GROUP_ID_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def group_id(self) -> common.types.base_types_pb2.KIID:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., group_id: common.types.base_types_pb2.KIID | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'group_id', b'group_id']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'group_id', b'group_id']) -> None:
        ...
global___GetGroupMembers = GetGroupMembers

@typing.final
class GetGroupMembersResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    ITEMS_FIELD_NUMBER: builtins.int

    @property
    def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[google.protobuf.any_pb2.Any]:
        """Full item data"""

    def __init__(self, *, items: collections.abc.Iterable[google.protobuf.any_pb2.Any] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['items', b'items']) -> None:
        ...
global___GetGroupMembersResponse = GetGroupMembersResponse

@typing.final
class GetZoneHatchOffsets(google.protobuf.message.Message):
    """
    Zone Hatch Offsets
    Per-layer hatching offset settings for zone fills (Board Setup -> Zone Hatch Offsets)

    Get zone hatch offsets for all copper layers
    Returns ZoneHatchOffsetsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetZoneHatchOffsets = GetZoneHatchOffsets

@typing.final
class ZoneHatchOffset(google.protobuf.message.Message):
    """Zone hatch offset for a single layer"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    LAYER_FIELD_NUMBER: builtins.int
    OFFSET_FIELD_NUMBER: builtins.int
    layer: board.board_types_pb2.BoardLayer.ValueType

    @property
    def offset(self) -> common.types.base_types_pb2.Vector2:
        """Hatching offset X/Y in nanometers"""

    def __init__(self, *, layer: board.board_types_pb2.BoardLayer.ValueType=..., offset: common.types.base_types_pb2.Vector2 | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['offset', b'offset']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['layer', b'layer', 'offset', b'offset']) -> None:
        ...
global___ZoneHatchOffset = ZoneHatchOffset

@typing.final
class ZoneHatchOffsetsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    LAYER_OFFSETS_FIELD_NUMBER: builtins.int

    @property
    def layer_offsets(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ZoneHatchOffset]:
        ...

    def __init__(self, *, layer_offsets: collections.abc.Iterable[global___ZoneHatchOffset] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['layer_offsets', b'layer_offsets']) -> None:
        ...
global___ZoneHatchOffsetsResponse = ZoneHatchOffsetsResponse

@typing.final
class SetZoneHatchOffsets(google.protobuf.message.Message):
    """Set zone hatch offsets for specific layers
    Returns ZoneHatchOffsetsResponse with the updated offsets
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    LAYER_OFFSETS_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def layer_offsets(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ZoneHatchOffset]:
        """Only specified layers are updated"""

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., layer_offsets: collections.abc.Iterable[global___ZoneHatchOffset] | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'layer_offsets', b'layer_offsets']) -> None:
        ...
global___SetZoneHatchOffsets = SetZoneHatchOffsets

@typing.final
class GetDimensionDefaults(google.protobuf.message.Message):
    """Get default settings for new dimension objects
    Returns DimensionDefaultsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetDimensionDefaults = GetDimensionDefaults

@typing.final
class DimensionDefaultsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    UNITS_MODE_FIELD_NUMBER: builtins.int
    UNITS_FORMAT_FIELD_NUMBER: builtins.int
    PRECISION_FIELD_NUMBER: builtins.int
    SUPPRESS_ZEROES_FIELD_NUMBER: builtins.int
    TEXT_POSITION_FIELD_NUMBER: builtins.int
    KEEP_TEXT_ALIGNED_FIELD_NUMBER: builtins.int
    ARROW_LENGTH_FIELD_NUMBER: builtins.int
    EXTENSION_OFFSET_FIELD_NUMBER: builtins.int
    units_mode: global___DimensionUnitsMode.ValueType
    units_format: global___DimensionUnitsFormat.ValueType
    precision: global___DimensionPrecision.ValueType
    suppress_zeroes: builtins.bool
    text_position: global___DimensionTextPosition.ValueType
    keep_text_aligned: builtins.bool

    @property
    def arrow_length(self) -> common.types.base_types_pb2.Distance:
        ...

    @property
    def extension_offset(self) -> common.types.base_types_pb2.Distance:
        ...

    def __init__(self, *, units_mode: global___DimensionUnitsMode.ValueType=..., units_format: global___DimensionUnitsFormat.ValueType=..., precision: global___DimensionPrecision.ValueType=..., suppress_zeroes: builtins.bool=..., text_position: global___DimensionTextPosition.ValueType=..., keep_text_aligned: builtins.bool=..., arrow_length: common.types.base_types_pb2.Distance | None=..., extension_offset: common.types.base_types_pb2.Distance | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['arrow_length', b'arrow_length', 'extension_offset', b'extension_offset']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['arrow_length', b'arrow_length', 'extension_offset', b'extension_offset', 'keep_text_aligned', b'keep_text_aligned', 'precision', b'precision', 'suppress_zeroes', b'suppress_zeroes', 'text_position', b'text_position', 'units_format', b'units_format', 'units_mode', b'units_mode']) -> None:
        ...
global___DimensionDefaultsResponse = DimensionDefaultsResponse

@typing.final
class SetDimensionDefaults(google.protobuf.message.Message):
    """Set default settings for new dimension objects
    Returns DimensionDefaultsResponse with updated values
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    UNITS_MODE_FIELD_NUMBER: builtins.int
    UNITS_FORMAT_FIELD_NUMBER: builtins.int
    PRECISION_FIELD_NUMBER: builtins.int
    SUPPRESS_ZEROES_FIELD_NUMBER: builtins.int
    TEXT_POSITION_FIELD_NUMBER: builtins.int
    KEEP_TEXT_ALIGNED_FIELD_NUMBER: builtins.int
    ARROW_LENGTH_FIELD_NUMBER: builtins.int
    EXTENSION_OFFSET_FIELD_NUMBER: builtins.int
    units_mode: global___DimensionUnitsMode.ValueType
    units_format: global___DimensionUnitsFormat.ValueType
    precision: global___DimensionPrecision.ValueType
    suppress_zeroes: builtins.bool
    text_position: global___DimensionTextPosition.ValueType
    keep_text_aligned: builtins.bool

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def arrow_length(self) -> common.types.base_types_pb2.Distance:
        ...

    @property
    def extension_offset(self) -> common.types.base_types_pb2.Distance:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., units_mode: global___DimensionUnitsMode.ValueType | None=..., units_format: global___DimensionUnitsFormat.ValueType | None=..., precision: global___DimensionPrecision.ValueType | None=..., suppress_zeroes: builtins.bool | None=..., text_position: global___DimensionTextPosition.ValueType | None=..., keep_text_aligned: builtins.bool | None=..., arrow_length: common.types.base_types_pb2.Distance | None=..., extension_offset: common.types.base_types_pb2.Distance | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['_arrow_length', b'_arrow_length', '_extension_offset', b'_extension_offset', '_keep_text_aligned', b'_keep_text_aligned', '_precision', b'_precision', '_suppress_zeroes', b'_suppress_zeroes', '_text_position', b'_text_position', '_units_format', b'_units_format', '_units_mode', b'_units_mode', 'arrow_length', b'arrow_length', 'board', b'board', 'extension_offset', b'extension_offset', 'keep_text_aligned', b'keep_text_aligned', 'precision', b'precision', 'suppress_zeroes', b'suppress_zeroes', 'text_position', b'text_position', 'units_format', b'units_format', 'units_mode', b'units_mode']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['_arrow_length', b'_arrow_length', '_extension_offset', b'_extension_offset', '_keep_text_aligned', b'_keep_text_aligned', '_precision', b'_precision', '_suppress_zeroes', b'_suppress_zeroes', '_text_position', b'_text_position', '_units_format', b'_units_format', '_units_mode', b'_units_mode', 'arrow_length', b'arrow_length', 'board', b'board', 'extension_offset', b'extension_offset', 'keep_text_aligned', b'keep_text_aligned', 'precision', b'precision', 'suppress_zeroes', b'suppress_zeroes', 'text_position', b'text_position', 'units_format', b'units_format', 'units_mode', b'units_mode']) -> None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_arrow_length', b'_arrow_length']) -> typing.Literal['arrow_length'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_extension_offset', b'_extension_offset']) -> typing.Literal['extension_offset'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_keep_text_aligned', b'_keep_text_aligned']) -> typing.Literal['keep_text_aligned'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_precision', b'_precision']) -> typing.Literal['precision'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_suppress_zeroes', b'_suppress_zeroes']) -> typing.Literal['suppress_zeroes'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_text_position', b'_text_position']) -> typing.Literal['text_position'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_units_format', b'_units_format']) -> typing.Literal['units_format'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_units_mode', b'_units_mode']) -> typing.Literal['units_mode'] | None:
        ...
global___SetDimensionDefaults = SetDimensionDefaults

@typing.final
class GetZoneDefaults(google.protobuf.message.Message):
    """Get default settings for new zones
    Returns ZoneDefaultsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetZoneDefaults = GetZoneDefaults

@typing.final
class ZoneDefaultsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    NAME_FIELD_NUMBER: builtins.int
    LOCKED_FIELD_NUMBER: builtins.int
    PRIORITY_FIELD_NUMBER: builtins.int
    CORNER_SMOOTHING_FIELD_NUMBER: builtins.int
    CORNER_RADIUS_FIELD_NUMBER: builtins.int
    CLEARANCE_FIELD_NUMBER: builtins.int
    MIN_THICKNESS_FIELD_NUMBER: builtins.int
    PAD_CONNECTION_FIELD_NUMBER: builtins.int
    THERMAL_GAP_FIELD_NUMBER: builtins.int
    THERMAL_SPOKE_WIDTH_FIELD_NUMBER: builtins.int
    ISLAND_REMOVAL_FIELD_NUMBER: builtins.int
    MIN_ISLAND_AREA_NM2_FIELD_NUMBER: builtins.int
    name: builtins.str
    'Default zone name (usually empty)'
    locked: builtins.bool
    'Default locked state'
    priority: builtins.int
    'Default priority (0 = lowest)'
    corner_smoothing: global___ZoneCornerSmoothing.ValueType
    'Corner smoothing type'
    pad_connection: global___ZonePadConnection.ValueType
    'Pad connection type'
    island_removal: global___ZoneIslandRemoval.ValueType
    'Island removal mode'
    min_island_area_nm2: builtins.int
    'Minimum island area (for ZIR_AREA)'

    @property
    def corner_radius(self) -> common.types.base_types_pb2.Distance:
        """Corner radius for chamfer/fillet"""

    @property
    def clearance(self) -> common.types.base_types_pb2.Distance:
        """Zone clearance"""

    @property
    def min_thickness(self) -> common.types.base_types_pb2.Distance:
        """Minimum fill width"""

    @property
    def thermal_gap(self) -> common.types.base_types_pb2.Distance:
        """Thermal relief gap"""

    @property
    def thermal_spoke_width(self) -> common.types.base_types_pb2.Distance:
        """Thermal relief spoke width"""

    def __init__(self, *, name: builtins.str=..., locked: builtins.bool=..., priority: builtins.int=..., corner_smoothing: global___ZoneCornerSmoothing.ValueType=..., corner_radius: common.types.base_types_pb2.Distance | None=..., clearance: common.types.base_types_pb2.Distance | None=..., min_thickness: common.types.base_types_pb2.Distance | None=..., pad_connection: global___ZonePadConnection.ValueType=..., thermal_gap: common.types.base_types_pb2.Distance | None=..., thermal_spoke_width: common.types.base_types_pb2.Distance | None=..., island_removal: global___ZoneIslandRemoval.ValueType=..., min_island_area_nm2: builtins.int=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['clearance', b'clearance', 'corner_radius', b'corner_radius', 'min_thickness', b'min_thickness', 'thermal_gap', b'thermal_gap', 'thermal_spoke_width', b'thermal_spoke_width']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['clearance', b'clearance', 'corner_radius', b'corner_radius', 'corner_smoothing', b'corner_smoothing', 'island_removal', b'island_removal', 'locked', b'locked', 'min_island_area_nm2', b'min_island_area_nm2', 'min_thickness', b'min_thickness', 'name', b'name', 'pad_connection', b'pad_connection', 'priority', b'priority', 'thermal_gap', b'thermal_gap', 'thermal_spoke_width', b'thermal_spoke_width']) -> None:
        ...
global___ZoneDefaultsResponse = ZoneDefaultsResponse

@typing.final
class SetZoneDefaults(google.protobuf.message.Message):
    """Set default settings for new zones
    Returns ZoneDefaultsResponse with updated values
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    LOCKED_FIELD_NUMBER: builtins.int
    PRIORITY_FIELD_NUMBER: builtins.int
    CORNER_SMOOTHING_FIELD_NUMBER: builtins.int
    CORNER_RADIUS_FIELD_NUMBER: builtins.int
    CLEARANCE_FIELD_NUMBER: builtins.int
    MIN_THICKNESS_FIELD_NUMBER: builtins.int
    PAD_CONNECTION_FIELD_NUMBER: builtins.int
    THERMAL_GAP_FIELD_NUMBER: builtins.int
    THERMAL_SPOKE_WIDTH_FIELD_NUMBER: builtins.int
    ISLAND_REMOVAL_FIELD_NUMBER: builtins.int
    MIN_ISLAND_AREA_NM2_FIELD_NUMBER: builtins.int
    name: builtins.str
    locked: builtins.bool
    priority: builtins.int
    corner_smoothing: global___ZoneCornerSmoothing.ValueType
    pad_connection: global___ZonePadConnection.ValueType
    island_removal: global___ZoneIslandRemoval.ValueType
    min_island_area_nm2: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def corner_radius(self) -> common.types.base_types_pb2.Distance:
        ...

    @property
    def clearance(self) -> common.types.base_types_pb2.Distance:
        ...

    @property
    def min_thickness(self) -> common.types.base_types_pb2.Distance:
        ...

    @property
    def thermal_gap(self) -> common.types.base_types_pb2.Distance:
        ...

    @property
    def thermal_spoke_width(self) -> common.types.base_types_pb2.Distance:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., name: builtins.str | None=..., locked: builtins.bool | None=..., priority: builtins.int | None=..., corner_smoothing: global___ZoneCornerSmoothing.ValueType | None=..., corner_radius: common.types.base_types_pb2.Distance | None=..., clearance: common.types.base_types_pb2.Distance | None=..., min_thickness: common.types.base_types_pb2.Distance | None=..., pad_connection: global___ZonePadConnection.ValueType | None=..., thermal_gap: common.types.base_types_pb2.Distance | None=..., thermal_spoke_width: common.types.base_types_pb2.Distance | None=..., island_removal: global___ZoneIslandRemoval.ValueType | None=..., min_island_area_nm2: builtins.int | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['_clearance', b'_clearance', '_corner_radius', b'_corner_radius', '_corner_smoothing', b'_corner_smoothing', '_island_removal', b'_island_removal', '_locked', b'_locked', '_min_island_area_nm2', b'_min_island_area_nm2', '_min_thickness', b'_min_thickness', '_name', b'_name', '_pad_connection', b'_pad_connection', '_priority', b'_priority', '_thermal_gap', b'_thermal_gap', '_thermal_spoke_width', b'_thermal_spoke_width', 'board', b'board', 'clearance', b'clearance', 'corner_radius', b'corner_radius', 'corner_smoothing', b'corner_smoothing', 'island_removal', b'island_removal', 'locked', b'locked', 'min_island_area_nm2', b'min_island_area_nm2', 'min_thickness', b'min_thickness', 'name', b'name', 'pad_connection', b'pad_connection', 'priority', b'priority', 'thermal_gap', b'thermal_gap', 'thermal_spoke_width', b'thermal_spoke_width']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['_clearance', b'_clearance', '_corner_radius', b'_corner_radius', '_corner_smoothing', b'_corner_smoothing', '_island_removal', b'_island_removal', '_locked', b'_locked', '_min_island_area_nm2', b'_min_island_area_nm2', '_min_thickness', b'_min_thickness', '_name', b'_name', '_pad_connection', b'_pad_connection', '_priority', b'_priority', '_thermal_gap', b'_thermal_gap', '_thermal_spoke_width', b'_thermal_spoke_width', 'board', b'board', 'clearance', b'clearance', 'corner_radius', b'corner_radius', 'corner_smoothing', b'corner_smoothing', 'island_removal', b'island_removal', 'locked', b'locked', 'min_island_area_nm2', b'min_island_area_nm2', 'min_thickness', b'min_thickness', 'name', b'name', 'pad_connection', b'pad_connection', 'priority', b'priority', 'thermal_gap', b'thermal_gap', 'thermal_spoke_width', b'thermal_spoke_width']) -> None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_clearance', b'_clearance']) -> typing.Literal['clearance'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_corner_radius', b'_corner_radius']) -> typing.Literal['corner_radius'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_corner_smoothing', b'_corner_smoothing']) -> typing.Literal['corner_smoothing'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_island_removal', b'_island_removal']) -> typing.Literal['island_removal'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_locked', b'_locked']) -> typing.Literal['locked'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_min_island_area_nm2', b'_min_island_area_nm2']) -> typing.Literal['min_island_area_nm2'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_min_thickness', b'_min_thickness']) -> typing.Literal['min_thickness'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_name', b'_name']) -> typing.Literal['name'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_pad_connection', b'_pad_connection']) -> typing.Literal['pad_connection'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_priority', b'_priority']) -> typing.Literal['priority'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_thermal_gap', b'_thermal_gap']) -> typing.Literal['thermal_gap'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_thermal_spoke_width', b'_thermal_spoke_width']) -> typing.Literal['thermal_spoke_width'] | None:
        ...
global___SetZoneDefaults = SetZoneDefaults

@typing.final
class ViaDimension(google.protobuf.message.Message):
    """
    Pre-defined Sizes
    Track widths, via sizes, and differential pair dimensions (Design Rules -> Pre-defined Sizes)

    A predefined via size (diameter and drill)
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    DIAMETER_NM_FIELD_NUMBER: builtins.int
    DRILL_NM_FIELD_NUMBER: builtins.int
    diameter_nm: builtins.int
    'Via pad diameter in nanometers'
    drill_nm: builtins.int
    'Via drill diameter in nanometers'

    def __init__(self, *, diameter_nm: builtins.int=..., drill_nm: builtins.int=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['diameter_nm', b'diameter_nm', 'drill_nm', b'drill_nm']) -> None:
        ...
global___ViaDimension = ViaDimension

@typing.final
class DiffPairDimension(google.protobuf.message.Message):
    """A predefined differential pair dimension"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    WIDTH_NM_FIELD_NUMBER: builtins.int
    GAP_NM_FIELD_NUMBER: builtins.int
    VIA_GAP_NM_FIELD_NUMBER: builtins.int
    width_nm: builtins.int
    'Track width in nanometers'
    gap_nm: builtins.int
    'Gap between tracks in nanometers'
    via_gap_nm: builtins.int
    'Gap between vias in nanometers'

    def __init__(self, *, width_nm: builtins.int=..., gap_nm: builtins.int=..., via_gap_nm: builtins.int=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['gap_nm', b'gap_nm', 'via_gap_nm', b'via_gap_nm', 'width_nm', b'width_nm']) -> None:
        ...
global___DiffPairDimension = DiffPairDimension

@typing.final
class PreDefinedSizes(google.protobuf.message.Message):
    """Collection of all predefined sizes"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    TRACK_WIDTHS_NM_FIELD_NUMBER: builtins.int
    VIA_SIZES_FIELD_NUMBER: builtins.int
    DIFF_PAIRS_FIELD_NUMBER: builtins.int

    @property
    def track_widths_nm(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
        """List of predefined track widths"""

    @property
    def via_sizes(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ViaDimension]:
        """List of predefined via dimensions"""

    @property
    def diff_pairs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___DiffPairDimension]:
        """List of predefined diff pair dimensions"""

    def __init__(self, *, track_widths_nm: collections.abc.Iterable[builtins.int] | None=..., via_sizes: collections.abc.Iterable[global___ViaDimension] | None=..., diff_pairs: collections.abc.Iterable[global___DiffPairDimension] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['diff_pairs', b'diff_pairs', 'track_widths_nm', b'track_widths_nm', 'via_sizes', b'via_sizes']) -> None:
        ...
global___PreDefinedSizes = PreDefinedSizes

@typing.final
class GetPreDefinedSizes(google.protobuf.message.Message):
    """Get all predefined sizes
    Returns PreDefinedSizesResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetPreDefinedSizes = GetPreDefinedSizes

@typing.final
class PreDefinedSizesResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    SIZES_FIELD_NUMBER: builtins.int

    @property
    def sizes(self) -> global___PreDefinedSizes:
        ...

    def __init__(self, *, sizes: global___PreDefinedSizes | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['sizes', b'sizes']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['sizes', b'sizes']) -> None:
        ...
global___PreDefinedSizesResponse = PreDefinedSizesResponse

@typing.final
class SetPreDefinedSizes(google.protobuf.message.Message):
    """Set (replace) all predefined sizes
    Returns PreDefinedSizesResponse with the updated sizes
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    SIZES_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def sizes(self) -> global___PreDefinedSizes:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., sizes: global___PreDefinedSizes | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'sizes', b'sizes']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'sizes', b'sizes']) -> None:
        ...
global___SetPreDefinedSizes = SetPreDefinedSizes

@typing.final
class TeardropParameters(google.protobuf.message.Message):
    """
    Teardrop Settings
    Default properties for teardrops (Design Rules -> Teardrops)

    Parameters for a single teardrop target type (round, rect, or track)
    All fields are optional to support partial updates in SetTeardropSettings
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BEST_LENGTH_RATIO_FIELD_NUMBER: builtins.int
    MAX_LENGTH_NM_FIELD_NUMBER: builtins.int
    BEST_WIDTH_RATIO_FIELD_NUMBER: builtins.int
    MAX_WIDTH_NM_FIELD_NUMBER: builtins.int
    CURVED_EDGES_FIELD_NUMBER: builtins.int
    ALLOW_TWO_SEGMENTS_FIELD_NUMBER: builtins.int
    PREFER_ZONE_CONNECTION_FIELD_NUMBER: builtins.int
    TRACK_WIDTH_LIMIT_RATIO_FIELD_NUMBER: builtins.int
    best_length_ratio: builtins.float
    'Best length as ratio of pad size (e.g., 0.5 = 50%)'
    max_length_nm: builtins.int
    'Maximum length in nanometers'
    best_width_ratio: builtins.float
    'Best width as ratio of pad size (e.g., 1.0 = 100%)'
    max_width_nm: builtins.int
    'Maximum width in nanometers'
    curved_edges: builtins.bool
    'Use curved edges'
    allow_two_segments: builtins.bool
    'Allow teardrop to span two track segments'
    prefer_zone_connection: builtins.bool
    'Prefer zone connection (for pads in zones)'
    track_width_limit_ratio: builtins.float
    'Track width limit as ratio (e.g., 0.9 = 90%)'

    def __init__(self, *, best_length_ratio: builtins.float | None=..., max_length_nm: builtins.int | None=..., best_width_ratio: builtins.float | None=..., max_width_nm: builtins.int | None=..., curved_edges: builtins.bool | None=..., allow_two_segments: builtins.bool | None=..., prefer_zone_connection: builtins.bool | None=..., track_width_limit_ratio: builtins.float | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['_allow_two_segments', b'_allow_two_segments', '_best_length_ratio', b'_best_length_ratio', '_best_width_ratio', b'_best_width_ratio', '_curved_edges', b'_curved_edges', '_max_length_nm', b'_max_length_nm', '_max_width_nm', b'_max_width_nm', '_prefer_zone_connection', b'_prefer_zone_connection', '_track_width_limit_ratio', b'_track_width_limit_ratio', 'allow_two_segments', b'allow_two_segments', 'best_length_ratio', b'best_length_ratio', 'best_width_ratio', b'best_width_ratio', 'curved_edges', b'curved_edges', 'max_length_nm', b'max_length_nm', 'max_width_nm', b'max_width_nm', 'prefer_zone_connection', b'prefer_zone_connection', 'track_width_limit_ratio', b'track_width_limit_ratio']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['_allow_two_segments', b'_allow_two_segments', '_best_length_ratio', b'_best_length_ratio', '_best_width_ratio', b'_best_width_ratio', '_curved_edges', b'_curved_edges', '_max_length_nm', b'_max_length_nm', '_max_width_nm', b'_max_width_nm', '_prefer_zone_connection', b'_prefer_zone_connection', '_track_width_limit_ratio', b'_track_width_limit_ratio', 'allow_two_segments', b'allow_two_segments', 'best_length_ratio', b'best_length_ratio', 'best_width_ratio', b'best_width_ratio', 'curved_edges', b'curved_edges', 'max_length_nm', b'max_length_nm', 'max_width_nm', b'max_width_nm', 'prefer_zone_connection', b'prefer_zone_connection', 'track_width_limit_ratio', b'track_width_limit_ratio']) -> None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_allow_two_segments', b'_allow_two_segments']) -> typing.Literal['allow_two_segments'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_best_length_ratio', b'_best_length_ratio']) -> typing.Literal['best_length_ratio'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_best_width_ratio', b'_best_width_ratio']) -> typing.Literal['best_width_ratio'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_curved_edges', b'_curved_edges']) -> typing.Literal['curved_edges'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_max_length_nm', b'_max_length_nm']) -> typing.Literal['max_length_nm'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_max_width_nm', b'_max_width_nm']) -> typing.Literal['max_width_nm'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_prefer_zone_connection', b'_prefer_zone_connection']) -> typing.Literal['prefer_zone_connection'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_track_width_limit_ratio', b'_track_width_limit_ratio']) -> typing.Literal['track_width_limit_ratio'] | None:
        ...
global___TeardropParameters = TeardropParameters

@typing.final
class TeardropSettings(google.protobuf.message.Message):
    """All teardrop settings (global + per-type parameters)"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    TARGET_VIAS_FIELD_NUMBER: builtins.int
    TARGET_PTH_PADS_FIELD_NUMBER: builtins.int
    TARGET_SMD_PADS_FIELD_NUMBER: builtins.int
    TARGET_TRACK_TO_TRACK_FIELD_NUMBER: builtins.int
    ROUND_SHAPES_ONLY_FIELD_NUMBER: builtins.int
    ROUND_SHAPES_FIELD_NUMBER: builtins.int
    RECT_SHAPES_FIELD_NUMBER: builtins.int
    TRACK_TO_TRACK_FIELD_NUMBER: builtins.int
    target_vias: builtins.bool
    'Global target enable flags\n    Create teardrops for vias\n    '
    target_pth_pads: builtins.bool
    'Create teardrops for PTH pads'
    target_smd_pads: builtins.bool
    'Create teardrops for SMD pads'
    target_track_to_track: builtins.bool
    'Create teardrops at track-to-track junctions'
    round_shapes_only: builtins.bool
    'Only apply to round shapes'

    @property
    def round_shapes(self) -> global___TeardropParameters:
        """Per-type parameters
        For round pads/vias
        """

    @property
    def rect_shapes(self) -> global___TeardropParameters:
        """For rectangular pads"""

    @property
    def track_to_track(self) -> global___TeardropParameters:
        """For track-to-track junctions"""

    def __init__(self, *, target_vias: builtins.bool=..., target_pth_pads: builtins.bool=..., target_smd_pads: builtins.bool=..., target_track_to_track: builtins.bool=..., round_shapes_only: builtins.bool=..., round_shapes: global___TeardropParameters | None=..., rect_shapes: global___TeardropParameters | None=..., track_to_track: global___TeardropParameters | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['rect_shapes', b'rect_shapes', 'round_shapes', b'round_shapes', 'track_to_track', b'track_to_track']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['rect_shapes', b'rect_shapes', 'round_shapes', b'round_shapes', 'round_shapes_only', b'round_shapes_only', 'target_pth_pads', b'target_pth_pads', 'target_smd_pads', b'target_smd_pads', 'target_track_to_track', b'target_track_to_track', 'target_vias', b'target_vias', 'track_to_track', b'track_to_track']) -> None:
        ...
global___TeardropSettings = TeardropSettings

@typing.final
class GetTeardropSettings(google.protobuf.message.Message):
    """Get teardrop settings
    Returns TeardropSettingsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetTeardropSettings = GetTeardropSettings

@typing.final
class TeardropSettingsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    SETTINGS_FIELD_NUMBER: builtins.int

    @property
    def settings(self) -> global___TeardropSettings:
        ...

    def __init__(self, *, settings: global___TeardropSettings | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['settings', b'settings']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['settings', b'settings']) -> None:
        ...
global___TeardropSettingsResponse = TeardropSettingsResponse

@typing.final
class SetTeardropSettings(google.protobuf.message.Message):
    """Set teardrop settings
    Returns TeardropSettingsResponse with updated settings
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    TARGET_VIAS_FIELD_NUMBER: builtins.int
    TARGET_PTH_PADS_FIELD_NUMBER: builtins.int
    TARGET_SMD_PADS_FIELD_NUMBER: builtins.int
    TARGET_TRACK_TO_TRACK_FIELD_NUMBER: builtins.int
    ROUND_SHAPES_ONLY_FIELD_NUMBER: builtins.int
    ROUND_SHAPES_FIELD_NUMBER: builtins.int
    RECT_SHAPES_FIELD_NUMBER: builtins.int
    TRACK_TO_TRACK_FIELD_NUMBER: builtins.int
    target_vias: builtins.bool
    'Global target enable flags (optional - only set if provided)'
    target_pth_pads: builtins.bool
    target_smd_pads: builtins.bool
    target_track_to_track: builtins.bool
    round_shapes_only: builtins.bool

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def round_shapes(self) -> global___TeardropParameters:
        """Per-type parameters (optional - only update provided types)"""

    @property
    def rect_shapes(self) -> global___TeardropParameters:
        ...

    @property
    def track_to_track(self) -> global___TeardropParameters:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., target_vias: builtins.bool | None=..., target_pth_pads: builtins.bool | None=..., target_smd_pads: builtins.bool | None=..., target_track_to_track: builtins.bool | None=..., round_shapes_only: builtins.bool | None=..., round_shapes: global___TeardropParameters | None=..., rect_shapes: global___TeardropParameters | None=..., track_to_track: global___TeardropParameters | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['_rect_shapes', b'_rect_shapes', '_round_shapes', b'_round_shapes', '_round_shapes_only', b'_round_shapes_only', '_target_pth_pads', b'_target_pth_pads', '_target_smd_pads', b'_target_smd_pads', '_target_track_to_track', b'_target_track_to_track', '_target_vias', b'_target_vias', '_track_to_track', b'_track_to_track', 'board', b'board', 'rect_shapes', b'rect_shapes', 'round_shapes', b'round_shapes', 'round_shapes_only', b'round_shapes_only', 'target_pth_pads', b'target_pth_pads', 'target_smd_pads', b'target_smd_pads', 'target_track_to_track', b'target_track_to_track', 'target_vias', b'target_vias', 'track_to_track', b'track_to_track']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['_rect_shapes', b'_rect_shapes', '_round_shapes', b'_round_shapes', '_round_shapes_only', b'_round_shapes_only', '_target_pth_pads', b'_target_pth_pads', '_target_smd_pads', b'_target_smd_pads', '_target_track_to_track', b'_target_track_to_track', '_target_vias', b'_target_vias', '_track_to_track', b'_track_to_track', 'board', b'board', 'rect_shapes', b'rect_shapes', 'round_shapes', b'round_shapes', 'round_shapes_only', b'round_shapes_only', 'target_pth_pads', b'target_pth_pads', 'target_smd_pads', b'target_smd_pads', 'target_track_to_track', b'target_track_to_track', 'target_vias', b'target_vias', 'track_to_track', b'track_to_track']) -> None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_rect_shapes', b'_rect_shapes']) -> typing.Literal['rect_shapes'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_round_shapes', b'_round_shapes']) -> typing.Literal['round_shapes'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_round_shapes_only', b'_round_shapes_only']) -> typing.Literal['round_shapes_only'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_target_pth_pads', b'_target_pth_pads']) -> typing.Literal['target_pth_pads'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_target_smd_pads', b'_target_smd_pads']) -> typing.Literal['target_smd_pads'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_target_track_to_track', b'_target_track_to_track']) -> typing.Literal['target_track_to_track'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_target_vias', b'_target_vias']) -> typing.Literal['target_vias'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_track_to_track', b'_track_to_track']) -> typing.Literal['track_to_track'] | None:
        ...
global___SetTeardropSettings = SetTeardropSettings

@typing.final
class MeanderPatternSettings(google.protobuf.message.Message):
    """Settings for a single meander pattern type
    All fields are optional to support partial updates in SetLengthTuningPatternSettings
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    MIN_AMPLITUDE_NM_FIELD_NUMBER: builtins.int
    MAX_AMPLITUDE_NM_FIELD_NUMBER: builtins.int
    SPACING_NM_FIELD_NUMBER: builtins.int
    CORNER_STYLE_FIELD_NUMBER: builtins.int
    CORNER_RADIUS_PERCENT_FIELD_NUMBER: builtins.int
    SINGLE_SIDED_FIELD_NUMBER: builtins.int
    min_amplitude_nm: builtins.int
    'Minimum amplitude (A) in nanometers'
    max_amplitude_nm: builtins.int
    'Maximum amplitude (A) in nanometers'
    spacing_nm: builtins.int
    'Spacing (s) in nanometers'
    corner_style: global___MeanderCornerStyle.ValueType
    'Corner style (round/chamfer)'
    corner_radius_percent: builtins.int
    'Radius (r) as percentage (0-100)'
    single_sided: builtins.bool
    'Place meanders on one side only'

    def __init__(self, *, min_amplitude_nm: builtins.int | None=..., max_amplitude_nm: builtins.int | None=..., spacing_nm: builtins.int | None=..., corner_style: global___MeanderCornerStyle.ValueType | None=..., corner_radius_percent: builtins.int | None=..., single_sided: builtins.bool | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['_corner_radius_percent', b'_corner_radius_percent', '_corner_style', b'_corner_style', '_max_amplitude_nm', b'_max_amplitude_nm', '_min_amplitude_nm', b'_min_amplitude_nm', '_single_sided', b'_single_sided', '_spacing_nm', b'_spacing_nm', 'corner_radius_percent', b'corner_radius_percent', 'corner_style', b'corner_style', 'max_amplitude_nm', b'max_amplitude_nm', 'min_amplitude_nm', b'min_amplitude_nm', 'single_sided', b'single_sided', 'spacing_nm', b'spacing_nm']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['_corner_radius_percent', b'_corner_radius_percent', '_corner_style', b'_corner_style', '_max_amplitude_nm', b'_max_amplitude_nm', '_min_amplitude_nm', b'_min_amplitude_nm', '_single_sided', b'_single_sided', '_spacing_nm', b'_spacing_nm', 'corner_radius_percent', b'corner_radius_percent', 'corner_style', b'corner_style', 'max_amplitude_nm', b'max_amplitude_nm', 'min_amplitude_nm', b'min_amplitude_nm', 'single_sided', b'single_sided', 'spacing_nm', b'spacing_nm']) -> None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_corner_radius_percent', b'_corner_radius_percent']) -> typing.Literal['corner_radius_percent'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_corner_style', b'_corner_style']) -> typing.Literal['corner_style'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_max_amplitude_nm', b'_max_amplitude_nm']) -> typing.Literal['max_amplitude_nm'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_min_amplitude_nm', b'_min_amplitude_nm']) -> typing.Literal['min_amplitude_nm'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_single_sided', b'_single_sided']) -> typing.Literal['single_sided'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_spacing_nm', b'_spacing_nm']) -> typing.Literal['spacing_nm'] | None:
        ...
global___MeanderPatternSettings = MeanderPatternSettings

@typing.final
class LengthTuningPatternSettings(google.protobuf.message.Message):
    """All length-tuning pattern settings"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    SINGLE_TRACK_FIELD_NUMBER: builtins.int
    DIFF_PAIR_FIELD_NUMBER: builtins.int
    DIFF_PAIR_SKEW_FIELD_NUMBER: builtins.int

    @property
    def single_track(self) -> global___MeanderPatternSettings:
        """Single track tuning"""

    @property
    def diff_pair(self) -> global___MeanderPatternSettings:
        """Differential pair tuning"""

    @property
    def diff_pair_skew(self) -> global___MeanderPatternSettings:
        """Differential pair skew tuning"""

    def __init__(self, *, single_track: global___MeanderPatternSettings | None=..., diff_pair: global___MeanderPatternSettings | None=..., diff_pair_skew: global___MeanderPatternSettings | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['diff_pair', b'diff_pair', 'diff_pair_skew', b'diff_pair_skew', 'single_track', b'single_track']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['diff_pair', b'diff_pair', 'diff_pair_skew', b'diff_pair_skew', 'single_track', b'single_track']) -> None:
        ...
global___LengthTuningPatternSettings = LengthTuningPatternSettings

@typing.final
class GetLengthTuningPatternSettings(google.protobuf.message.Message):
    """Get length-tuning pattern settings
    Returns LengthTuningPatternSettingsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetLengthTuningPatternSettings = GetLengthTuningPatternSettings

@typing.final
class LengthTuningPatternSettingsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    SETTINGS_FIELD_NUMBER: builtins.int

    @property
    def settings(self) -> global___LengthTuningPatternSettings:
        ...

    def __init__(self, *, settings: global___LengthTuningPatternSettings | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['settings', b'settings']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['settings', b'settings']) -> None:
        ...
global___LengthTuningPatternSettingsResponse = LengthTuningPatternSettingsResponse

@typing.final
class SetLengthTuningPatternSettings(google.protobuf.message.Message):
    """Set length-tuning pattern settings
    Returns LengthTuningPatternSettingsResponse with updated settings
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    SINGLE_TRACK_FIELD_NUMBER: builtins.int
    DIFF_PAIR_FIELD_NUMBER: builtins.int
    DIFF_PAIR_SKEW_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def single_track(self) -> global___MeanderPatternSettings:
        """Per-type settings (optional - only update provided types)"""

    @property
    def diff_pair(self) -> global___MeanderPatternSettings:
        ...

    @property
    def diff_pair_skew(self) -> global___MeanderPatternSettings:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., single_track: global___MeanderPatternSettings | None=..., diff_pair: global___MeanderPatternSettings | None=..., diff_pair_skew: global___MeanderPatternSettings | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['_diff_pair', b'_diff_pair', '_diff_pair_skew', b'_diff_pair_skew', '_single_track', b'_single_track', 'board', b'board', 'diff_pair', b'diff_pair', 'diff_pair_skew', b'diff_pair_skew', 'single_track', b'single_track']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['_diff_pair', b'_diff_pair', '_diff_pair_skew', b'_diff_pair_skew', '_single_track', b'_single_track', 'board', b'board', 'diff_pair', b'diff_pair', 'diff_pair_skew', b'diff_pair_skew', 'single_track', b'single_track']) -> None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_diff_pair', b'_diff_pair']) -> typing.Literal['diff_pair'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_diff_pair_skew', b'_diff_pair_skew']) -> typing.Literal['diff_pair_skew'] | None:
        ...

    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal['_single_track', b'_single_track']) -> typing.Literal['single_track'] | None:
        ...
global___SetLengthTuningPatternSettings = SetLengthTuningPatternSettings

@typing.final
class TrackPropagationEntry(google.protobuf.message.Message):
    """Track propagation delay entry (per-layer settings)"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    SIGNAL_LAYER_FIELD_NUMBER: builtins.int
    TOP_REFERENCE_LAYER_FIELD_NUMBER: builtins.int
    BOTTOM_REFERENCE_LAYER_FIELD_NUMBER: builtins.int
    WIDTH_NM_FIELD_NUMBER: builtins.int
    DIFF_PAIR_GAP_NM_FIELD_NUMBER: builtins.int
    DELAY_PS_PER_MM_FIELD_NUMBER: builtins.int
    ENABLE_TIME_DOMAIN_FIELD_NUMBER: builtins.int
    signal_layer: board.board_types_pb2.BoardLayer.ValueType
    'Signal layer'
    top_reference_layer: board.board_types_pb2.BoardLayer.ValueType
    'Top reference plane'
    bottom_reference_layer: board.board_types_pb2.BoardLayer.ValueType
    'Bottom reference plane'
    width_nm: builtins.int
    'Track width in nanometers'
    diff_pair_gap_nm: builtins.int
    'Differential pair gap in nanometers (0 for single-ended)'
    delay_ps_per_mm: builtins.int
    'Delay in picoseconds per millimeter'
    enable_time_domain: builtins.bool
    'Enable time domain tuning for this entry'

    def __init__(self, *, signal_layer: board.board_types_pb2.BoardLayer.ValueType=..., top_reference_layer: board.board_types_pb2.BoardLayer.ValueType=..., bottom_reference_layer: board.board_types_pb2.BoardLayer.ValueType=..., width_nm: builtins.int=..., diff_pair_gap_nm: builtins.int=..., delay_ps_per_mm: builtins.int=..., enable_time_domain: builtins.bool=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['bottom_reference_layer', b'bottom_reference_layer', 'delay_ps_per_mm', b'delay_ps_per_mm', 'diff_pair_gap_nm', b'diff_pair_gap_nm', 'enable_time_domain', b'enable_time_domain', 'signal_layer', b'signal_layer', 'top_reference_layer', b'top_reference_layer', 'width_nm', b'width_nm']) -> None:
        ...
global___TrackPropagationEntry = TrackPropagationEntry

@typing.final
class ViaPropagationOverride(google.protobuf.message.Message):
    """Via propagation delay override entry"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    SIGNAL_LAYER_FROM_FIELD_NUMBER: builtins.int
    SIGNAL_LAYER_TO_FIELD_NUMBER: builtins.int
    VIA_LAYER_FROM_FIELD_NUMBER: builtins.int
    VIA_LAYER_TO_FIELD_NUMBER: builtins.int
    DELAY_PS_FIELD_NUMBER: builtins.int
    signal_layer_from: board.board_types_pb2.BoardLayer.ValueType
    'Signal start layer'
    signal_layer_to: board.board_types_pb2.BoardLayer.ValueType
    'Signal end layer'
    via_layer_from: board.board_types_pb2.BoardLayer.ValueType
    'Via start layer'
    via_layer_to: board.board_types_pb2.BoardLayer.ValueType
    'Via end layer'
    delay_ps: builtins.int
    'Delay in picoseconds'

    def __init__(self, *, signal_layer_from: board.board_types_pb2.BoardLayer.ValueType=..., signal_layer_to: board.board_types_pb2.BoardLayer.ValueType=..., via_layer_from: board.board_types_pb2.BoardLayer.ValueType=..., via_layer_to: board.board_types_pb2.BoardLayer.ValueType=..., delay_ps: builtins.int=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['delay_ps', b'delay_ps', 'signal_layer_from', b'signal_layer_from', 'signal_layer_to', b'signal_layer_to', 'via_layer_from', b'via_layer_from', 'via_layer_to', b'via_layer_to']) -> None:
        ...
global___ViaPropagationOverride = ViaPropagationOverride

@typing.final
class TuningProfile(google.protobuf.message.Message):
    """A single tuning profile"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    NAME_FIELD_NUMBER: builtins.int
    TYPE_FIELD_NUMBER: builtins.int
    TARGET_IMPEDANCE_OHMS_FIELD_NUMBER: builtins.int
    ENABLE_TIME_DOMAIN_TUNING_FIELD_NUMBER: builtins.int
    VIA_PROPAGATION_DELAY_PS_FIELD_NUMBER: builtins.int
    TRACK_ENTRIES_FIELD_NUMBER: builtins.int
    VIA_OVERRIDES_FIELD_NUMBER: builtins.int
    name: builtins.str
    'Profile name'
    type: global___TuningProfileType.ValueType
    'Single or differential'
    target_impedance_ohms: builtins.float
    'Target impedance in ohms'
    enable_time_domain_tuning: builtins.bool
    'Enable time domain tuning'
    via_propagation_delay_ps: builtins.int
    'Default via propagation delay in picoseconds'

    @property
    def track_entries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TrackPropagationEntry]:
        """Per-layer track settings"""

    @property
    def via_overrides(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ViaPropagationOverride]:
        """Via delay overrides"""

    def __init__(self, *, name: builtins.str=..., type: global___TuningProfileType.ValueType=..., target_impedance_ohms: builtins.float=..., enable_time_domain_tuning: builtins.bool=..., via_propagation_delay_ps: builtins.int=..., track_entries: collections.abc.Iterable[global___TrackPropagationEntry] | None=..., via_overrides: collections.abc.Iterable[global___ViaPropagationOverride] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['enable_time_domain_tuning', b'enable_time_domain_tuning', 'name', b'name', 'target_impedance_ohms', b'target_impedance_ohms', 'track_entries', b'track_entries', 'type', b'type', 'via_overrides', b'via_overrides', 'via_propagation_delay_ps', b'via_propagation_delay_ps']) -> None:
        ...
global___TuningProfile = TuningProfile

@typing.final
class TuningProfiles(google.protobuf.message.Message):
    """Collection of all tuning profiles"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    PROFILES_FIELD_NUMBER: builtins.int

    @property
    def profiles(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TuningProfile]:
        ...

    def __init__(self, *, profiles: collections.abc.Iterable[global___TuningProfile] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['profiles', b'profiles']) -> None:
        ...
global___TuningProfiles = TuningProfiles

@typing.final
class GetTuningProfiles(google.protobuf.message.Message):
    """Get all tuning profiles
    Returns TuningProfilesResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetTuningProfiles = GetTuningProfiles

@typing.final
class TuningProfilesResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    PROFILES_FIELD_NUMBER: builtins.int

    @property
    def profiles(self) -> global___TuningProfiles:
        ...

    def __init__(self, *, profiles: global___TuningProfiles | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['profiles', b'profiles']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['profiles', b'profiles']) -> None:
        ...
global___TuningProfilesResponse = TuningProfilesResponse

@typing.final
class SetTuningProfiles(google.protobuf.message.Message):
    """Set (replace) all tuning profiles
    Returns TuningProfilesResponse with the updated profiles
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    PROFILES_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def profiles(self) -> global___TuningProfiles:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., profiles: global___TuningProfiles | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'profiles', b'profiles']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'profiles', b'profiles']) -> None:
        ...
global___SetTuningProfiles = SetTuningProfiles

@typing.final
class ComponentClassCondition(google.protobuf.message.Message):
    """A single condition in a component class assignment rule"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    TYPE_FIELD_NUMBER: builtins.int
    PRIMARY_DATA_FIELD_NUMBER: builtins.int
    SECONDARY_DATA_FIELD_NUMBER: builtins.int
    type: global___ComponentClassConditionType.ValueType
    primary_data: builtins.str
    'Main match data (e.g., pattern, field name)'
    secondary_data: builtins.str
    'Secondary data (e.g., field value for FOOTPRINT_FIELD)'

    def __init__(self, *, type: global___ComponentClassConditionType.ValueType=..., primary_data: builtins.str=..., secondary_data: builtins.str=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['primary_data', b'primary_data', 'secondary_data', b'secondary_data', 'type', b'type']) -> None:
        ...
global___ComponentClassCondition = ComponentClassCondition

@typing.final
class ComponentClassAssignment(google.protobuf.message.Message):
    """A component class assignment rule"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    COMPONENT_CLASS_FIELD_NUMBER: builtins.int
    CONDITIONS_FIELD_NUMBER: builtins.int
    OPERATOR_FIELD_NUMBER: builtins.int
    component_class: builtins.str
    'Name of the component class to assign'
    operator: global___ComponentClassConditionsOperator.ValueType
    'How conditions are combined (ALL/ANY)'

    @property
    def conditions(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ComponentClassCondition]:
        """Conditions that must match"""

    def __init__(self, *, component_class: builtins.str=..., conditions: collections.abc.Iterable[global___ComponentClassCondition] | None=..., operator: global___ComponentClassConditionsOperator.ValueType=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['component_class', b'component_class', 'conditions', b'conditions', 'operator', b'operator']) -> None:
        ...
global___ComponentClassAssignment = ComponentClassAssignment

@typing.final
class ComponentClassSettings(google.protobuf.message.Message):
    """Component class settings"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    ENABLE_SHEET_COMPONENT_CLASSES_FIELD_NUMBER: builtins.int
    ASSIGNMENTS_FIELD_NUMBER: builtins.int
    enable_sheet_component_classes: builtins.bool
    'Assign component class per sheet'

    @property
    def assignments(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ComponentClassAssignment]:
        """Custom assignment rules"""

    def __init__(self, *, enable_sheet_component_classes: builtins.bool=..., assignments: collections.abc.Iterable[global___ComponentClassAssignment] | None=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['assignments', b'assignments', 'enable_sheet_component_classes', b'enable_sheet_component_classes']) -> None:
        ...
global___ComponentClassSettings = ComponentClassSettings

@typing.final
class GetComponentClassSettings(google.protobuf.message.Message):
    """Get component class settings
    Returns ComponentClassSettingsResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetComponentClassSettings = GetComponentClassSettings

@typing.final
class ComponentClassSettingsResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    SETTINGS_FIELD_NUMBER: builtins.int

    @property
    def settings(self) -> global___ComponentClassSettings:
        ...

    def __init__(self, *, settings: global___ComponentClassSettings | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['settings', b'settings']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['settings', b'settings']) -> None:
        ...
global___ComponentClassSettingsResponse = ComponentClassSettingsResponse

@typing.final
class SetComponentClassSettings(google.protobuf.message.Message):
    """Set component class settings
    Returns ComponentClassSettingsResponse with the updated settings
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    SETTINGS_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    @property
    def settings(self) -> global___ComponentClassSettings:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., settings: global___ComponentClassSettings | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board', 'settings', b'settings']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'settings', b'settings']) -> None:
        ...
global___SetComponentClassSettings = SetComponentClassSettings

@typing.final
class GetCustomRules(google.protobuf.message.Message):
    """============================================================================
    Custom DRC Rules
    ============================================================================

    Get custom DRC rules text
    Returns CustomRulesResponse
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
        ...
global___GetCustomRules = GetCustomRules

@typing.final
class CustomRulesResponse(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    RULES_TEXT_FIELD_NUMBER: builtins.int
    rules_text: builtins.str
    'The full text content of the .kicad_dru file'

    def __init__(self, *, rules_text: builtins.str=...) -> None:
        ...

    def ClearField(self, field_name: typing.Literal['rules_text', b'rules_text']) -> None:
        ...
global___CustomRulesResponse = CustomRulesResponse

@typing.final
class SetCustomRules(google.protobuf.message.Message):
    """Set custom DRC rules text
    Returns CustomRulesResponse with the updated rules
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    BOARD_FIELD_NUMBER: builtins.int
    RULES_TEXT_FIELD_NUMBER: builtins.int
    rules_text: builtins.str
    'The full text content for the .kicad_dru file'

    @property
    def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
        ...

    def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., rules_text: builtins.str=...) -> None:
        ...

    def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing.Literal['board', b'board', 'rules_text', b'rules_text']) -> None:
        ...
global___SetCustomRules = SetCustomRules