From bddd2ba7b4e603c3c73e659cadb3321e0832155f Mon Sep 17 00:00:00 2001 From: MJ Date: Sat, 13 Sep 2025 16:05:30 +0900 Subject: [PATCH 1/6] docs: standardize claude pattern keywords and update documentation - Standardize keywords in all claude pattern files for consistency - Update CLAUDE.md pattern list table with new keyword format - Update claude commands and settings configuration - Update package dependencies --- .claude/commands/page-refer.md | 10 +- .claude/commands/page-save.md | 2 +- .claude/commands/pattern-create.md | 21 +- .claude/commands/pattern-use.md | 10 +- .claude/commands/plan-create.md | 60 +- .claude/commands/plan-resolve.md | 2 +- .claude/commands/spec-refer.md | 12 +- .claude/commands/spec.md | 6 +- .../patterns/001-fabric-native-component.md | 2 +- .../patterns/002-codegen-native-commands.md | 2 +- .claude/patterns/003-turbo-module-spec.md | 2 +- .claude/patterns/004-ios-fabric-component.md | 2 +- .claude/patterns/005-ios-command-handling.md | 2 +- .claude/patterns/006-ios-event-emission.md | 2 +- .claude/settings.local.json | 9 +- CLAUDE.md | 44 +- package.json | 3 +- pnpm-lock.yaml | 646 ++++++++++++++++++ 18 files changed, 765 insertions(+), 72 deletions(-) diff --git a/.claude/commands/page-refer.md b/.claude/commands/page-refer.md index b7c91284..3e9b2752 100644 --- a/.claude/commands/page-refer.md +++ b/.claude/commands/page-refer.md @@ -15,9 +15,9 @@ This command retrieves saved session histories to restore context from previous ### CLI Commands Used ```bash -npx -y cc-self-refer page search # Search pages by keyword -npx -y cc-self-refer page list # List all pages -npx -y cc-self-refer page view # View specific page +npx cc-self-refer page search # Search pages by keyword +npx cc-self-refer page list # List all pages +npx cc-self-refer page view # View specific page ``` ### Command Arguments @@ -25,10 +25,10 @@ npx -y cc-self-refer page view # View specific page - `keyword`: Search keyword or phrase (for search command) ### Expected Workflow -1. Search for relevant session pages using `npx -y cc-self-refer page search ` (keyword is generated by claude code from user input) +1. Search for relevant session pages using `npx cc-self-refer page search ` (keyword is generated by claude code from user input) 2. Check search results: - If search result contains sufficient session context, use that information directly - - If search result only shows summary/metadata, use `npx -y cc-self-refer page view ` for complete session content + - If search result only shows summary/metadata, use `npx cc-self-refer page view ` for complete session content 3. **APPLY the session knowledge** to current development work: - Reference previous decisions and architectural choices - **Focus on continuing the development work based on past session context** diff --git a/.claude/commands/page-save.md b/.claude/commands/page-save.md index 6d927327..7487878a 100644 --- a/.claude/commands/page-save.md +++ b/.claude/commands/page-save.md @@ -13,7 +13,7 @@ This commadns run `cc-self-refer page create` commands with title ### CLI Command Used ```bash -npx -y cc-self-refer page create "" +npx cc-self-refer page create "<title>" ``` ### Command Arguments diff --git a/.claude/commands/pattern-create.md b/.claude/commands/pattern-create.md index 81f88d63..b11a35da 100644 --- a/.claude/commands/pattern-create.md +++ b/.claude/commands/pattern-create.md @@ -13,14 +13,29 @@ Extract code snippet or common pattern in project and run cc-self-refer pattern ### CLI Command Used ```bash -npx -y cc-self-refer pattern create "<pattern-name>" "<keyword1>,<keyword2>,<keyword3>" "<language>" "<explanation>" <<'EOF' +npx cc-self-refer pattern create "<pattern-name>" "<keyword1>,<keyword2>,<keyword3>" "<language>" "<explanation>" <<'EOF' <pattern-content> EOF ``` ### Command Arguments - `pattern-name`: Name of the code pattern, Don't include `pattern` in the name -- `keywords`: Comma-separated **specific** keywords for pattern search and CLAUDE.md listing (required). Use only unique, pattern-specific terms. Avoid generic language names (javascript, nodejs, python) or broad categories. Focus on the distinctive aspects of the pattern (e.g., "commander", "subcommands", "cli-options" rather than "javascript, nodejs, cli") +- `keywords`: Comma-separated keywords for pattern search (3-5 keywords recommended) + - **DO**: Use conceptual terms that describe the pattern's purpose and functionality + - **DO**: Include technology-specific terms when they're central to the pattern (e.g., "fabric", "turbo-module", "codegen") + - **DO**: Focus on what the pattern DOES, not implementation details + - **DON'T**: Use generic language names alone (javascript, typescript, python) + - **DON'T**: Use specific class/method names unless they're widely recognized APIs + - **DON'T**: Over-specify with implementation details + + Examples: + - ✅ GOOD: "fabric,component,props,events" (describes pattern purpose) + - ✅ GOOD: "commands,imperative,async" (describes functionality) + - ✅ GOOD: "validation,error-handling,schemas" (describes what it does) + - ❌ BAD: "javascript,nodejs,function" (too generic) + - ❌ BAD: "RCTViewComponentView,updateProps,initWithFrame" (too specific - API names) + - ❌ BAD: "ios,objective-c,native" (only platform/language identifiers) + - `language`: Programming language (e.g., javascript, typescript, python, go, rust) - `explanation`: Brief explanation (1-2 sentences) of what this pattern does and when to use it - `pattern-content`: Complete code snippet or pattern content @@ -143,7 +158,7 @@ Claude will: 2. Generate <formatted content> with the above rules. 3. Execute: ```bash - npx -y cc-self-refer pattern create "api-error-handler" "error,handler,api,utilities" "typescript" "Utility pattern for handling API errors in TypeScript applications with proper error typing." <<'EOF' + npx cc-self-refer pattern create "api-error-handler" "error,handler,api,utilities" "typescript" "Utility pattern for handling API errors in TypeScript applications with proper error typing." <<'EOF' <formatted content> EOF ``` diff --git a/.claude/commands/pattern-use.md b/.claude/commands/pattern-use.md index 84e0eb1d..a5cc2c41 100644 --- a/.claude/commands/pattern-use.md +++ b/.claude/commands/pattern-use.md @@ -14,23 +14,23 @@ Retrieve and apply code patterns with `cc-self-refer pattern search` command ```bash # Search for patterns first -npx -y cc-self-refer pattern search <keyword> +npx cc-self-refer pattern search <keyword> # View specific pattern -npx -y cc-self-refer pattern view <id> +npx cc-self-refer pattern view <id> # List all patterns -npx -y cc-self-refer pattern list +npx cc-self-refer pattern list ``` ### Command Arguments - `id_or_keyword`: Pattern ID number or search keyword ### Expected Workflow -1. Search for relevant patterns using `npx -y cc-self-refer pattern search` +1. Search for relevant patterns using `npx cc-self-refer pattern search` 2. Check search results: - If search result contains full pattern content, use that content directly - - If search result only shows summary/metadata, use `npx -y cc-self-refer pattern view <number>` for complete content + - If search result only shows summary/metadata, use `npx cc-self-refer pattern view <number>` for complete content 3. **IMPLEMENT the actual code** using the printed content: - Apply the pattern's architectural principles and design decisions - **Focus on implementing working code, not just creating examples or documentation** diff --git a/.claude/commands/plan-create.md b/.claude/commands/plan-create.md index e59b0165..d976e341 100644 --- a/.claude/commands/plan-create.md +++ b/.claude/commands/plan-create.md @@ -16,7 +16,7 @@ This command initiates a comprehensive implementation planning process through e ```bash # Create the implementation plan after planning: -npx -y cc-self-refer plan create "<plan-title>" <<'EOF' +npx cc-self-refer plan create "<plan-title>" <<'EOF' <plan-content> EOF ``` @@ -26,13 +26,44 @@ EOF ## Interactive Planning Process **Simple Workflow:** -1. Ask what the user wants to plan -2. Have a conversation to understand details -3. Create the plan with CLI command +1. Load existing patterns for context +2. Ask what the user wants to plan +3. Have a conversation to understand details (avoiding questions about existing patterns) +4. Create the plan with CLI command (referencing patterns when applicable) + +**MANDATORY: Load Patterns Before Planning** + +**First, load all existing patterns into context:** +```bash +# Load pattern list +npx cc-self-refer pattern list + +# Search for relevant patterns based on initial understanding +npx cc-self-refer pattern search "<relevant-keywords>" + +# View specific patterns that might be useful +npx cc-self-refer pattern view <pattern-id> +``` + +**WHY THIS MATTERS:** +- Avoid asking questions already answered in patterns +- Reference existing solutions in the implementation plan +- Use established code templates and architectures +- Maintain consistency with project conventions + +**PATTERN USAGE GUIDELINE:** +- When writing implementation sections, actively consider if existing patterns apply +- If a pattern matches the implementation need → Add "Use Pattern #[N]" inline +- If no pattern exists → Write the implementation details normally +- Don't force pattern usage where it doesn't naturally fit +- Examples of when to reference patterns: + - Component structure matches existing pattern → "Use Pattern #[N] for component template" + - API client implementation exists → "Use Pattern #[N] for API integration" + - Error handling pattern available → "Use Pattern #[N] for error handling" **MANDATORY: Infinite Interactive Dialogue Process** -**Start by asking:** +**Start by asking (AFTER loading patterns):** ``` What would you like to plan? @@ -45,26 +76,29 @@ Please describe: **CRITICAL: After every user response, analyze what implementation details are still missing and ask deeper questions. NEVER stop asking until you know exactly how to implement everything.** **Self-Assessment Questions - Ask yourself after each user response:** +- "Can any existing patterns solve this?" → Check patterns first - "What files exactly need to be created or modified?" - "What specific code changes are required?" - "What dependencies need to be installed?" - "What configuration changes are needed?" - "How will this integrate with existing code?" - "What testing approach should be used?" +- "Which patterns should be referenced in the plan?" -**Continuous Implementation Deep-Dive Pattern:** -- If user says "add authentication" → Ask: Which files handle auth? What database changes? JWT or sessions? Middleware needed? Registration flow? Password reset? -- If user says "improve performance" → Ask: What specific bottlenecks? Which components are slow? Database queries? Frontend rendering? API endpoints? Caching strategy? -- If user says "refactor components" → Ask: Which exact components? What's the new structure? How to maintain backwards compatibility? Migration steps? +**Continuous Implementation Deep-Dive Pattern (Skip if covered by patterns):** +- If user says "add authentication" → First check: Any auth patterns exist? If not, ask: Which files handle auth? What database changes? JWT or sessions? Middleware needed? Registration flow? Password reset? +- If user says "improve performance" → First check: Any performance patterns exist? If not, ask: What specific bottlenecks? Which components are slow? Database queries? Frontend rendering? API endpoints? Caching strategy? +- If user says "refactor components" → First check: Any refactoring patterns exist? If not, ask: Which exact components? What's the new structure? How to maintain backwards compatibility? Migration steps? -**Keep Digging Until You Know:** -- Exact file paths that need changes -- Specific functions/components to create/modify +**Keep Digging Until You Know (Unless Pattern Already Provides):** +- Exact file paths that need changes (or pattern references) +- Specific functions/components to create/modify (or pattern usage) - Complete dependency list with versions - Step-by-step implementation sequence - All configuration changes required - Comprehensive testing strategy - Success criteria with measurable outcomes +- Which patterns to apply and where **Signs You Need More Implementation Details:** - You don't know exact file paths → ASK MORE @@ -79,7 +113,7 @@ Please describe: After complete implementation understanding, create the plan using: ```bash -npx -y cc-self-refer plan create "<plan-title>" <<'EOF' +npx cc-self-refer plan create "<plan-title>" <<'EOF' <plan-content> EOF ``` diff --git a/.claude/commands/plan-resolve.md b/.claude/commands/plan-resolve.md index 98ad3e75..ab9fc856 100644 --- a/.claude/commands/plan-resolve.md +++ b/.claude/commands/plan-resolve.md @@ -38,7 +38,7 @@ This command facilitates comprehensive execution of strategic plans by: ```bash # Step 1: Load the plan for implementation reference -npx -y cc-self-refer plan view <id_or_keyword> +npx cc-self-refer plan view <id_or_keyword> ``` ### Command Arguments diff --git a/.claude/commands/spec-refer.md b/.claude/commands/spec-refer.md index da2a0728..0abfeea8 100644 --- a/.claude/commands/spec-refer.md +++ b/.claude/commands/spec-refer.md @@ -15,9 +15,9 @@ This command retrieves stored project specifications to restore development cont ### CLI Commands Used ```bash -npx -y cc-self-refer spec search <keyword> # Search specs by keyword -npx -y cc-self-refer spec list # List all specs -npx -y cc-self-refer spec view <id> # View specific spec +npx cc-self-refer spec search <keyword> # Search specs by keyword +npx cc-self-refer spec list # List all specs +npx cc-self-refer spec view <id> # View specific spec ``` ### Command Arguments @@ -25,11 +25,11 @@ npx -y cc-self-refer spec view <id> # View specific spec - `keyword`: Search keyword or phrase (for search command) ### Expected Workflow -1. Search for relevant specifications using `npx -y cc-self-refer spec search <keyword>` (keyword is generated by claude code from user input) +1. Search for relevant specifications using `npx cc-self-refer spec search <keyword>` (keyword is generated by claude code from user input) 2. Check search results: - If search result contains sufficient spec context, use that information directly - - If search result only shows summary/metadata, use `npx -y cc-self-refer spec view <id>` for complete spec content + - If search result only shows summary/metadata, use `npx cc-self-refer spec view <id>` for complete spec content 3. **APPLY the specification knowledge** to current development work: - Reference project requirements and constraints - **Focus on implementing features based on spec context** - - Integrate the spec knowledge directly into current task execution \ No newline at end of file + - Integrate the spec knowledge directly into current task execution diff --git a/.claude/commands/spec.md b/.claude/commands/spec.md index 36f3f41e..d9edc550 100644 --- a/.claude/commands/spec.md +++ b/.claude/commands/spec.md @@ -16,7 +16,7 @@ This command initiates a comprehensive specification creation process through ex ```bash # Create each specification file after planning: -npx -y cc-self-refer spec create "<spec-title>" <<'EOF' +npx cc-self-refer spec create "<spec-title>" <<'EOF' <spec-content> EOF ``` @@ -80,7 +80,7 @@ Execute CLI commands to create each specification: ```bash # Example for e-commerce platform specifications -npx -y cc-self-refer spec create "E-commerce Product Vision" <<'EOF' +npx cc-self-refer spec create "E-commerce Product Vision" <<'EOF' # E-commerce Platform Product Vision ## Executive Summary @@ -91,7 +91,7 @@ npx -y cc-self-refer spec create "E-commerce Product Vision" <<'EOF' ... EOF -npx -y cc-self-refer spec create "User Personas and Journeys" <<'EOF' +npx cc-self-refer spec create "User Personas and Journeys" <<'EOF' # User Personas and Customer Journeys ## Primary Personas diff --git a/.claude/patterns/001-fabric-native-component.md b/.claude/patterns/001-fabric-native-component.md index 8a36c649..aea9cae8 100644 --- a/.claude/patterns/001-fabric-native-component.md +++ b/.claude/patterns/001-fabric-native-component.md @@ -1,5 +1,5 @@ --- -keywords: fabric, native, component, react-native, codegen +keywords: fabric,codegenNativeComponent,HostComponent,ViewProps,DirectEventHandler language: typescript explanation: Defines React Native Fabric component using codegenNativeComponent with TypeScript props interface --- diff --git a/.claude/patterns/002-codegen-native-commands.md b/.claude/patterns/002-codegen-native-commands.md index e8b21fb4..b13b614c 100644 --- a/.claude/patterns/002-codegen-native-commands.md +++ b/.claude/patterns/002-codegen-native-commands.md @@ -1,5 +1,5 @@ --- -keywords: codegen, native, commands, react-native, async, sync +keywords: codegenNativeCommands,imperative,async-commands,sync-commands,ElementRef language: typescript explanation: Defines imperative native methods using codegenNativeCommands for async/sync operations --- diff --git a/.claude/patterns/003-turbo-module-spec.md b/.claude/patterns/003-turbo-module-spec.md index 3ca8601f..1da146bc 100644 --- a/.claude/patterns/003-turbo-module-spec.md +++ b/.claude/patterns/003-turbo-module-spec.md @@ -1,5 +1,5 @@ --- -keywords: turbo-module, native, module, react-native, type-safety +keywords: TurboModule,TurboModuleRegistry,getEnforcing,spec-interface language: typescript explanation: Defines TurboModule interface for native module access with type safety --- diff --git a/.claude/patterns/004-ios-fabric-component.md b/.claude/patterns/004-ios-fabric-component.md index dc1bec57..ac39bf6f 100644 --- a/.claude/patterns/004-ios-fabric-component.md +++ b/.claude/patterns/004-ios-fabric-component.md @@ -1,5 +1,5 @@ --- -keywords: ios, fabric, component, objective-c, react-native +keywords: RCTViewComponentView,updateProps,initWithFrame,contentView,emitter language: objc explanation: iOS Fabric component implementation extending RCTViewComponentView with props handling --- diff --git a/.claude/patterns/005-ios-command-handling.md b/.claude/patterns/005-ios-command-handling.md index 804910e6..82690c0d 100644 --- a/.claude/patterns/005-ios-command-handling.md +++ b/.claude/patterns/005-ios-command-handling.md @@ -1,5 +1,5 @@ --- -keywords: ios, command, handling, objective-c, fabric +keywords: handleCommand,RCTRNCNaverMapViewHandleCommand,commandName,screenToCoordinate language: objc explanation: iOS command handling implementation for processing imperative native commands --- diff --git a/.claude/patterns/006-ios-event-emission.md b/.claude/patterns/006-ios-event-emission.md index bf2d9abd..f0307c11 100644 --- a/.claude/patterns/006-ios-event-emission.md +++ b/.claude/patterns/006-ios-event-emission.md @@ -1,5 +1,5 @@ --- -keywords: ios, event, emission, objective-c, fabric +keywords: EventEmitter,onCameraChanged,NMFCameraPosition,emitter-callback language: objc explanation: iOS event emission using generated event emitter for sending events to JavaScript --- diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 70fd215e..22917919 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -2,11 +2,8 @@ "permissions": { "allow": [ "Bash(git add:*)", - "Bash(npx cc-self-refer:*)", - "Bash(npx -y cc-self-refer:*)", - "Bash(npx -y cc-self-refer)", - "Bash(cc-self-refer:*)", - "Bash(npx -y cc-self-refer)", + "Bash(npx cc-self-refer *)", + "Bash(cc-self-refer *)", "Bash(mkdir:*)", "Bash(gh pr view:*)", "Bash(pnpm add:*)", @@ -23,4 +20,4 @@ "deny": [], "ask": [] } -} \ No newline at end of file +} diff --git a/CLAUDE.md b/CLAUDE.md index 5494bfab..0a734e3a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -171,26 +171,26 @@ Claude Code agents should use these CLI commands to access and manage project co [PATTERN LIST] -| ID | Name | Language | Keywords | Explanation | -|----|------|----------|----------|-------------| -| 001 | Fabric Native Component Definition | typescript | fabric, native, component, react-native, codegen | Defines React Native Fabric component using codegenNativeComponent with TypeScript props interface | -| 002 | React Native Codegen Commands | typescript | codegen, native, commands, react-native, async, sync | Defines imperative native methods using codegenNativeCommands for async/sync operations | -| 003 | TurboModule Specification | typescript | turbo-module, native, module, react-native, type-safety | Defines TurboModule interface for native module access with type safety | -| 004 | iOS Fabric Component Implementation | objc | ios, fabric, component, objective-c, react-native | iOS Fabric component implementation extending RCTViewComponentView with props handling | -| 005 | iOS Command Handling | objc | ios, command, handling, objective-c, fabric | iOS command handling implementation for processing imperative native commands | -| 006 | iOS Event Emission | objc | ios, event, emission, objective-c, fabric | iOS event emission using generated event emitter for sending events to JavaScript | -| 007 | iOS TurboModule Implementation | objc | ios, turbo-module, objective-c, bridge, react-native | iOS TurboModule implementation with conditional Bridge/TurboModule support | -| 008 | Android ViewManager with Codegen | kotlin | android, view-manager, kotlin, codegen, react-native | Android ViewManager implementation using codegen delegate pattern | -| 009 | Android Command Handling | kotlin | android, command, handling, kotlin, react-native | Android command handling using receiveCommand method with command ID matching | -| 010 | Android Event Emission | kotlin | android, event, emission, kotlin, react-native | Android event emission using ReactContext and RCTEventEmitter | -| 011 | Android Package Registration | kotlin | android, package, registration, kotlin, react-native | Android ReactPackage registration for native modules and ViewManagers | -| 012 | JSDoc Documentation | typescript | jsdoc, documentation, typescript, comments | JSDoc documentation patterns for TypeScript components and methods | -| 013 | Native Color Parsing and Validation Pattern with TypeScript | typescript | color, parsing, validation, typescript, react-native | TypeScript color prop handling with processColor and native color utilities | -| 014 | Android Native Utilities | kotlin | android, utilities, kotlin, validation, conversion | Android native utility functions for event emission, prop validation, and conversions | -| 015 | iOS Native Utilities | objc | ios, utilities, objective-c, validation, conversion | iOS native utility functions for color conversion, validation, and object creation | -| 016 | iOS Overlay Integration Pattern | objc | ios, overlay, integration, objective-c, naver-maps | iOS overlay integration pattern for Naver Maps SDK | -| 018 | Fumadocs Usage | mdx | fumadocs, mdx, documentation, components | Concise usage patterns for Fumadocs components and features in MDX | -| 019 | Fumadocs I18n File Structure | markdown | fumadocs, i18n, file-structure, meta, mdx, korean | File structure pattern for Fumadocs i18n with default and Korean translation files using dot-style naming. | +| ID | Name | Language | Keywords | Explanation | +|-----|:------------------------------------------------------------|------------|---------------------------------------------------------|------------------------------------------------------------------------------------------------------------| +| 001 | Fabric Native Component Definition | typescript | fabric, native, component, react-native, codegen | Defines React Native Fabric component using codegenNativeComponent with TypeScript props interface | +| 002 | React Native Codegen Commands | typescript | codegen, native, commands, react-native, async, sync | Defines imperative native methods using codegenNativeCommands for async/sync operations | +| 003 | TurboModule Specification | typescript | turbo-module, native, module, react-native, type-safety | Defines TurboModule interface for native module access with type safety | +| 004 | iOS Fabric Component Implementation | objc | ios, fabric, component, objective-c, react-native | iOS Fabric component implementation extending RCTViewComponentView with props handling | +| 005 | iOS Command Handling | objc | ios, command, handling, objective-c, fabric | iOS command handling implementation for processing imperative native commands | +| 006 | iOS Event Emission | objc | ios, event, emission, objective-c, fabric | iOS event emission using generated event emitter for sending events to JavaScript | +| 007 | iOS TurboModule Implementation | objc | ios, turbo-module, objective-c, bridge, react-native | iOS TurboModule implementation with conditional Bridge/TurboModule support | +| 008 | Android ViewManager with Codegen | kotlin | android, view-manager, kotlin, codegen, react-native | Android ViewManager implementation using codegen delegate pattern | +| 009 | Android Command Handling | kotlin | android, command, handling, kotlin, react-native | Android command handling using receiveCommand method with command ID matching | +| 010 | Android Event Emission | kotlin | android, event, emission, kotlin, react-native | Android event emission using ReactContext and RCTEventEmitter | +| 011 | Android Package Registration | kotlin | android, package, registration, kotlin, react-native | Android ReactPackage registration for native modules and ViewManagers | +| 012 | JSDoc Documentation | typescript | jsdoc, documentation, typescript, comments | JSDoc documentation patterns for TypeScript components and methods | +| 013 | Native Color Parsing and Validation Pattern with TypeScript | typescript | color, parsing, validation, typescript, react-native | TypeScript color prop handling with processColor and native color utilities | +| 014 | Android Native Utilities | kotlin | android, utilities, kotlin, validation, conversion | Android native utility functions for event emission, prop validation, and conversions | +| 015 | iOS Native Utilities | objc | ios, utilities, objective-c, validation, conversion | iOS native utility functions for color conversion, validation, and object creation | +| 016 | iOS Overlay Integration Pattern | objc | ios, overlay, integration, objective-c, naver-maps | iOS overlay integration pattern for Naver Maps SDK | +| 018 | Fumadocs Usage | mdx | fumadocs, mdx, documentation, components | Concise usage patterns for Fumadocs components and features in MDX | +| 019 | Fumadocs I18n File Structure | markdown | fumadocs, i18n, file-structure, meta, mdx, korean | File structure pattern for Fumadocs i18n with default and Korean translation files using dot-style naming. | [PATTERN LIST END] @@ -226,12 +226,12 @@ When these keywords appear in user prompts, determine if the user intends to use **Implicit Pattern Matching:** When user requests involve coding tasks that align with existing pattern Names, Keywords, or Explanations: -1. **Identify Match**: Compare user's request against the [PATTERN LIST] +1. **Identify Match**: Compare user's request against the [PATTERN LIST] 2. **Retrieve Pattern**: Use `npx -y cc-self-refer pattern view <id>` for matching patterns 3. **Apply Pattern**: Implement user's request using the pattern's principles and structure 4. **Inform User**: Use this format to indicate pattern usage: ``` - Pattern Refering... ♦️ + Pattern Refering... ♦️ Used Patterns: #002 api-response, #003 error-handling ``` diff --git a/package.json b/package.json index 4e825991..fb463a78 100644 --- a/package.json +++ b/package.json @@ -72,8 +72,8 @@ "registry": "https://registry.npmjs.org/" }, "devDependencies": { - "@babel/runtime": "catalog:", "@babel/core": "catalog:", + "@babel/runtime": "catalog:", "@biomejs/biome": "catalog:", "@commitlint/config-conventional": "17.0.2", "@expo/config-plugins": "10.0.3", @@ -81,6 +81,7 @@ "@types/fs-extra": "^11", "@types/object-hash": "^3", "@types/react": "catalog:", + "cc-self-refer": "^1.0.44", "commitlint": "17.0.2", "fs-extra": "^11.3.1", "lefthook": "^1.12.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63cbcb85..a51264b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,6 +105,9 @@ importers: '@types/react': specifier: 'catalog:' version: 19.1.0 + cc-self-refer: + specifier: ^1.0.44 + version: 1.0.44(socks@2.8.7) commitlint: specifier: 17.0.2 version: 17.0.2 @@ -1005,6 +1008,14 @@ packages: cpu: [x64] os: [win32] + '@clack/core@0.3.5': + resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} + + '@clack/prompts@0.7.0': + resolution: {integrity: sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==} + bundledDependencies: + - is-unicode-supported + '@commitlint/cli@17.8.1': resolution: {integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==} engines: {node: '>=v14'} @@ -1628,6 +1639,9 @@ packages: '@mj-studio/js-util@1.1.22': resolution: {integrity: sha512-mA+r2TeHsTcTLZlWG50qAROcpJm/gq5zryyh05o7nXRTv48ZoajZAMpYdewOjX+Qg6efnZUQT+42VmdFtOKnIg==} + '@mongodb-js/saslprep@1.3.0': + resolution: {integrity: sha512-zlayKCsIjYb7/IdfqxorK5+xUMyi4vOKcFy10wKJYc63NSdKI8mNME+uJqfatkPmOSMMUiojrL58IePKBm3gvQ==} + '@next/env@15.5.2': resolution: {integrity: sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==} @@ -2244,12 +2258,44 @@ packages: '@types/react': optional: true + '@redis/bloom@1.2.0': + resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/client@1.6.1': + resolution: {integrity: sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==} + engines: {node: '>=14'} + + '@redis/graph@1.1.1': + resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/json@1.0.7': + resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/search@1.2.0': + resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/time-series@1.1.0': + resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==} + peerDependencies: + '@redis/client': ^1.0.0 + '@release-it/conventional-changelog@10.0.1': resolution: {integrity: sha512-Qp+eyMGCPyq5xiWoNK91cWVIR/6HD1QAUNeG6pV2G4kxotWl81k/KDQqDNvrNVmr9+zDp53jI7pVVYQp6mi4zA==} engines: {node: ^20.9.0 || >=22.0.0} peerDependencies: release-it: ^18.0.0 || ^19.0.0 + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@shikijs/core@3.12.2': resolution: {integrity: sha512-L1Safnhra3tX/oJK5kYHaWmLEBJi1irASwewzY3taX5ibyXyMkkSDZlq01qigjryOBwrXSdFgTiZ3ryzSNeu7Q==} @@ -2289,6 +2335,10 @@ packages: '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} @@ -2506,6 +2556,12 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/webidl-conversions@7.0.3': + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} + + '@types/whatwg-url@11.0.5': + resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -2525,6 +2581,9 @@ packages: resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} engines: {node: '>=10.0.0'} + '@yarnpkg/lockfile@1.1.0': + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -2554,6 +2613,12 @@ packages: add-stream@1.0.0: resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} + afinn-165-financialmarketnews@3.0.0: + resolution: {integrity: sha512-0g9A1S3ZomFIGDTzZ0t6xmv4AuokBvBmpes8htiyHpH7N4xDmvSQL6UxL/Zcs2ypRb3VwgCscaD8Q3zEawKYhw==} + + afinn-165@1.0.4: + resolution: {integrity: sha512-7+Wlx3BImrK0HiG6y3lU4xX7SpBPSSu8T9iguPMlaueRFxjbYwAQrp9lqZUuFikqKbd/en8lVREILvP2J80uJA==} + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -2607,6 +2672,10 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + apparatus@0.0.10: + resolution: {integrity: sha512-KLy/ugo33KZA7nugtQ7O0E1c8kQ52N3IvD/XgIh4w/Nr28ypfkwDfA67F1ev4N1m5D+BOk1+b2dEJDfpj/VvZg==} + engines: {node: '>=0.2.6'} + appdirsjs@1.2.7: resolution: {integrity: sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==} @@ -2756,6 +2825,10 @@ packages: bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bson@6.10.4: + resolution: {integrity: sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==} + engines: {node: '>=16.20.1'} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2817,6 +2890,11 @@ packages: caniuse-lite@1.0.30001741: resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} + cc-self-refer@1.0.44: + resolution: {integrity: sha512-Tx15TOWlneQpadriz7JnYaac19TPgK4nYcpG+6iB1pNe7UW7DhzPuAdiGOshE516muu073D23oU15X87eHh3ew==} + engines: {node: '>=18.0.0'} + hasBin: true + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2918,6 +2996,10 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + cluster-key-slot@1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + code-block-writer@13.0.3: resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} @@ -3418,6 +3500,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + execa@9.6.0: + resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} + engines: {node: ^18.19.0 || >=20.5.0} + exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} @@ -3462,6 +3548,10 @@ packages: picomatch: optional: true + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -3493,6 +3583,9 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + front-matter@4.0.2: + resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} + fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -3599,6 +3692,10 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + generic-pool@3.9.0: + resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} + engines: {node: '>= 4'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -3639,6 +3736,10 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} @@ -3683,6 +3784,11 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@11.0.3: + resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3797,6 +3903,10 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -3986,6 +4096,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-text-path@1.0.1: resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} engines: {node: '>=0.10.0'} @@ -4040,6 +4154,10 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} + jest-environment-node@29.7.0: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4080,6 +4198,9 @@ packages: resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} @@ -4131,6 +4252,10 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} + kareem@2.6.3: + resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} + engines: {node: '>=12.0.0'} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -4466,9 +4591,16 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + memjs@1.3.2: + resolution: {integrity: sha512-qUEg2g8vxPe+zPn09KidjIStHPtoBO8Cttm8bgJFWWabbsjQ9Av9Ky+6UcvKx6ue0LLb/LEhtcyQpRyKfzeXcg==} + engines: {node: '>=0.10.0'} + memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + meow@13.2.0: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} @@ -4733,6 +4865,48 @@ packages: engines: {node: '>=10'} hasBin: true + mongodb-connection-string-url@3.0.2: + resolution: {integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==} + + mongodb@6.18.0: + resolution: {integrity: sha512-fO5ttN9VC8P0F5fqtQmclAkgXZxbIkYRTUi1j8JO6IYwvamkhtYDilJr35jOPELR49zqCJgXZWwCtW7B+TM8vQ==} + engines: {node: '>=16.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 || ^2.0.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.2.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + + mongoose@8.18.1: + resolution: {integrity: sha512-K0RfrUXXufqNRZZjvAGdyjydB91SnbWxlwFYi5t7zN2DxVWFD3c6puia0/7xfBwZm6RCpYOVdYFlRFpoDWiC+w==} + engines: {node: '>=16.20.1'} + + mpath@0.9.0: + resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} + engines: {node: '>=4.0.0'} + + mquery@5.0.0: + resolution: {integrity: sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==} + engines: {node: '>=14.0.0'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -4748,6 +4922,10 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + natural@6.12.0: + resolution: {integrity: sha512-ZV/cuaxOvJ7CSxQRYHc6nlx7ql6hVPQc20N5ubdqVbotWnnqsNc+0/QG+ACIC3XPQ4rfrQrdC/1k47v1cSszTQ==} + engines: {node: '>=0.4.10'} + negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -4838,6 +5016,10 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + npm-to-yarn@3.0.1: resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4979,6 +5161,10 @@ packages: resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} engines: {node: '>=18'} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse-path@7.1.0: resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} @@ -5016,6 +5202,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -5026,6 +5216,40 @@ packages: perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + pg-cloudflare@1.2.7: + resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==} + + pg-connection-string@2.9.1: + resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==} + + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-pool@3.10.1: + resolution: {integrity: sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==} + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.10.3: + resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + + pg@8.16.3: + resolution: {integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==} + engines: {node: '>= 16.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -5060,6 +5284,22 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + pretty-format@26.6.2: resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} engines: {node: '>= 10'} @@ -5068,6 +5308,10 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} @@ -5091,6 +5335,10 @@ packages: pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -5261,6 +5509,9 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} + redis@4.7.1: + resolution: {integrity: sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==} + regenerate-unicode-properties@10.2.0: resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} @@ -5387,6 +5638,10 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -5470,6 +5725,9 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + sift@17.1.3: + resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -5532,6 +5790,9 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + sparse-bitfield@3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -5547,6 +5808,10 @@ packages: split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -5573,6 +5838,10 @@ packages: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} + stopwords-iso@1.1.0: + resolution: {integrity: sha512-I6GPS/E0zyieHehMRPQcqkiBMJKGgLta+1hREixhoLPqEA0AlVFiC43dl8uPpmkkeRdDMzYRWFWk5/l9x7nmNg==} + engines: {node: '>=0.10.0'} + stream-buffers@2.2.0: resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} engines: {node: '>= 0.10.0'} @@ -5615,6 +5884,10 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -5657,6 +5930,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + sylvester@0.0.12: + resolution: {integrity: sha512-SzRP5LQ6Ts2G5NyAa/jg16s8e3R7rfdFjizy1zeoecYWw+nGL+YA1xZvW/+iJmidBGSdLkuvdwTYEyJEb+EiUw==} + engines: {node: '>=0.2.6'} + tailwind-merge@3.3.1: resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} @@ -5715,6 +5992,10 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} + engines: {node: '>=18'} + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -5832,6 +6113,9 @@ packages: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} + underscore@1.13.7: + resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -5862,6 +6146,10 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -5939,6 +6227,10 @@ packages: resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} hasBin: true + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -5964,9 +6256,17 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} @@ -5982,9 +6282,16 @@ packages: resolution: {integrity: sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==} engines: {node: '>=18'} + wordnet-db@3.1.14: + resolution: {integrity: sha512-zVyFsvE+mq9MCmwXUWHIcpfbrHHClZWZiVOzKSxNJruIcFn2RbY55zkhiAMMxM8zCVSmtNiViq8FsAZSFpMYag==} + engines: {node: '>=0.6.0'} + wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + workspace-tools@0.38.4: + resolution: {integrity: sha512-wCei5WNlhHswuU5tPjTYy4yVd7jnavtRUNbqpiHAmWRPOJtkvUpBQZExrrgFs3h9jdx6Qf6inCDSwjqnXhf+vQ==} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -6043,6 +6350,10 @@ packages: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} @@ -6097,6 +6408,10 @@ packages: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + zod@4.1.5: resolution: {integrity: sha512-rcUUZqlLJgBC33IT3PNMgsCq6TzLQEG/Ei/KTCU0PedSWRMAXoOUN+4t/0H+Q8bdnLPdqUYnvboJT0bn/229qg==} @@ -7014,6 +7329,17 @@ snapshots: '@biomejs/cli-win32-x64@2.2.3': optional: true + '@clack/core@0.3.5': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@clack/prompts@0.7.0': + dependencies: + '@clack/core': 0.3.5 + picocolors: 1.1.1 + sisteransi: 1.0.5 + '@commitlint/cli@17.8.1': dependencies: '@commitlint/format': 17.8.1 @@ -7650,6 +7976,10 @@ snapshots: '@mj-studio/js-util@1.1.22': {} + '@mongodb-js/saslprep@1.3.0': + dependencies: + sparse-bitfield: 3.0.3 + '@next/env@15.5.2': {} '@next/swc-darwin-arm64@15.5.2': @@ -8398,6 +8728,32 @@ snapshots: optionalDependencies: '@types/react': 19.1.0 + '@redis/bloom@1.2.0(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/client@1.6.1': + dependencies: + cluster-key-slot: 1.1.2 + generic-pool: 3.9.0 + yallist: 4.0.0 + + '@redis/graph@1.1.1(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/json@1.0.7(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/search@1.2.0(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + + '@redis/time-series@1.1.0(@redis/client@1.6.1)': + dependencies: + '@redis/client': 1.6.1 + '@release-it/conventional-changelog@10.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.0)(release-it@19.0.3(@types/node@20.5.1))': dependencies: concat-stream: 2.0.0 @@ -8410,6 +8766,8 @@ snapshots: - conventional-commits-filter - conventional-commits-parser + '@sec-ant/readable-stream@0.4.1': {} + '@shikijs/core@3.12.2': dependencies: '@shikijs/types': 3.12.2 @@ -8467,6 +8825,8 @@ snapshots: '@sinclair/typebox@0.27.8': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 @@ -8679,6 +9039,12 @@ snapshots: '@types/unist@3.0.3': {} + '@types/webidl-conversions@7.0.3': {} + + '@types/whatwg-url@11.0.5': + dependencies: + '@types/webidl-conversions': 7.0.3 + '@types/yargs-parser@21.0.3': {} '@types/yargs@15.0.19': @@ -8695,6 +9061,8 @@ snapshots: '@xmldom/xmldom@0.8.11': {} + '@yarnpkg/lockfile@1.1.0': {} + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 @@ -8721,6 +9089,10 @@ snapshots: add-stream@1.0.0: {} + afinn-165-financialmarketnews@3.0.0: {} + + afinn-165@1.0.4: {} + agent-base@7.1.4: {} aggregate-error@3.1.0: @@ -8770,6 +9142,10 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + apparatus@0.0.10: + dependencies: + sylvester: 0.0.12 + appdirsjs@1.2.7: {} arg@4.1.3: {} @@ -8967,6 +9343,8 @@ snapshots: dependencies: node-int64: 0.4.0 + bson@6.10.4: {} + buffer-from@1.1.2: {} buffer@5.7.1: @@ -9029,6 +9407,29 @@ snapshots: caniuse-lite@1.0.30001741: {} + cc-self-refer@1.0.44(socks@2.8.7): + dependencies: + '@clack/prompts': 0.7.0 + commander: 12.1.0 + execa: 9.6.0 + front-matter: 4.0.2 + fs-extra: 11.3.1 + glob: 11.0.3 + minimatch: 10.0.3 + natural: 6.12.0(socks@2.8.7) + picocolors: 1.1.1 + workspace-tools: 0.38.4 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - pg-native + - snappy + - socks + - supports-color + ccount@2.0.1: {} chalk@2.4.2: @@ -9126,6 +9527,8 @@ snapshots: clsx@2.1.1: {} + cluster-key-slot@1.1.2: {} + code-block-writer@13.0.3: {} collapse-white-space@2.1.0: {} @@ -9657,6 +10060,21 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + execa@9.6.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + exponential-backoff@3.1.2: {} exsolve@1.0.7: {} @@ -9695,6 +10113,10 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -9732,6 +10154,10 @@ snapshots: fresh@0.5.2: {} + front-matter@4.0.2: + dependencies: + js-yaml: 3.14.1 + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 @@ -9862,6 +10288,8 @@ snapshots: function-bind@1.1.2: {} + generic-pool@3.9.0: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -9898,6 +10326,11 @@ snapshots: get-stream@8.0.1: {} + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + get-uri@6.0.5: dependencies: basic-ftp: 5.0.5 @@ -9965,6 +10398,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.0.3: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.0.3 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -10135,6 +10577,8 @@ snapshots: human-signals@5.0.0: {} + human-signals@8.0.1: {} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -10280,6 +10724,8 @@ snapshots: is-stream@3.0.0: {} + is-stream@4.0.1: {} + is-text-path@1.0.1: dependencies: text-extensions: 1.9.0 @@ -10334,6 +10780,10 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@4.1.1: + dependencies: + '@isaacs/cliui': 8.0.2 + jest-environment-node@29.7.0: dependencies: '@jest/environment': 29.7.0 @@ -10408,6 +10858,8 @@ snapshots: jiti@2.5.1: {} + jju@1.4.0: {} + joi@17.13.3: dependencies: '@hapi/hoek': 9.3.0 @@ -10453,6 +10905,8 @@ snapshots: jsonparse@1.3.1: {} + kareem@2.6.3: {} + kind-of@6.0.3: {} kleur@3.0.3: {} @@ -10836,8 +11290,12 @@ snapshots: media-typer@0.3.0: {} + memjs@1.3.2: {} + memoize-one@5.2.1: {} + memory-pager@1.5.0: {} + meow@13.2.0: {} meow@8.1.2: @@ -11360,6 +11818,46 @@ snapshots: mkdirp@3.0.1: {} + mongodb-connection-string-url@3.0.2: + dependencies: + '@types/whatwg-url': 11.0.5 + whatwg-url: 14.2.0 + + mongodb@6.18.0(socks@2.8.7): + dependencies: + '@mongodb-js/saslprep': 1.3.0 + bson: 6.10.4 + mongodb-connection-string-url: 3.0.2 + optionalDependencies: + socks: 2.8.7 + + mongoose@8.18.1(socks@2.8.7): + dependencies: + bson: 6.10.4 + kareem: 2.6.3 + mongodb: 6.18.0(socks@2.8.7) + mpath: 0.9.0 + mquery: 5.0.0 + ms: 2.1.3 + sift: 17.1.3 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + - supports-color + + mpath@0.9.0: {} + + mquery@5.0.0: + dependencies: + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + ms@2.0.0: {} ms@2.1.3: {} @@ -11368,6 +11866,33 @@ snapshots: nanoid@3.3.11: {} + natural@6.12.0(socks@2.8.7): + dependencies: + afinn-165: 1.0.4 + afinn-165-financialmarketnews: 3.0.0 + apparatus: 0.0.10 + dotenv: 16.6.1 + memjs: 1.3.2 + mongoose: 8.18.1(socks@2.8.7) + pg: 8.16.3 + redis: 4.7.1 + safe-stable-stringify: 2.5.0 + stopwords-iso: 1.1.0 + sylvester: 0.0.12 + underscore: 1.13.7 + uuid: 9.0.1 + wordnet-db: 3.1.14 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - pg-native + - snappy + - socks + - supports-color + negotiator@0.6.3: {} negotiator@0.6.4: {} @@ -11450,6 +11975,11 @@ snapshots: dependencies: path-key: 4.0.0 + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + npm-to-yarn@3.0.1: {} nullthrows@1.1.1: {} @@ -11627,6 +12157,8 @@ snapshots: index-to-position: 1.1.0 type-fest: 4.41.0 + parse-ms@4.0.0: {} + parse-path@7.1.0: dependencies: protocols: 2.0.2 @@ -11655,12 +12187,52 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.0: + dependencies: + lru-cache: 11.2.1 + minipass: 7.1.2 + path-type@4.0.0: {} pathe@2.0.3: {} perfect-debounce@1.0.0: {} + pg-cloudflare@1.2.7: + optional: true + + pg-connection-string@2.9.1: {} + + pg-int8@1.0.1: {} + + pg-pool@3.10.1(pg@8.16.3): + dependencies: + pg: 8.16.3 + + pg-protocol@1.10.3: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg@8.16.3: + dependencies: + pg-connection-string: 2.9.1 + pg-pool: 3.10.1(pg@8.16.3) + pg-protocol: 1.10.3 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.2.7 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -11698,6 +12270,16 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postgres-array@2.0.0: {} + + postgres-bytea@1.0.0: {} + + postgres-date@1.0.7: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + pretty-format@26.6.2: dependencies: '@jest/types': 26.6.2 @@ -11711,6 +12293,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + promise@8.3.0: dependencies: asap: 2.0.6 @@ -11744,6 +12330,8 @@ snapshots: end-of-stream: 1.4.5 once: 1.4.0 + punycode@2.3.1: {} + q@1.5.1: {} qs@6.13.0: @@ -11986,6 +12574,15 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 + redis@4.7.1: + dependencies: + '@redis/bloom': 1.2.0(@redis/client@1.6.1) + '@redis/client': 1.6.1 + '@redis/graph': 1.1.1(@redis/client@1.6.1) + '@redis/json': 1.0.7(@redis/client@1.6.1) + '@redis/search': 1.2.0(@redis/client@1.6.1) + '@redis/time-series': 1.1.0(@redis/client@1.6.1) + regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 @@ -12162,6 +12759,8 @@ snapshots: safe-buffer@5.2.1: {} + safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} sax@1.4.1: {} @@ -12291,6 +12890,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + sift@17.1.3: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -12347,6 +12948,10 @@ snapshots: space-separated-tokens@2.0.2: {} + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -12365,6 +12970,8 @@ snapshots: dependencies: readable-stream: 3.6.2 + split2@4.2.0: {} + sprintf-js@1.0.3: {} stack-utils@2.0.6: @@ -12383,6 +12990,8 @@ snapshots: stdin-discarder@0.2.2: {} + stopwords-iso@1.1.0: {} + stream-buffers@2.2.0: {} string-width@4.2.3: @@ -12428,6 +13037,8 @@ snapshots: strip-final-newline@3.0.0: {} + strip-final-newline@4.0.0: {} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -12463,6 +13074,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + sylvester@0.0.12: {} + tailwind-merge@3.3.1: {} tailwindcss@4.1.13: {} @@ -12521,6 +13134,10 @@ snapshots: toidentifier@1.0.1: {} + tr46@5.1.1: + dependencies: + punycode: 2.3.1 + trim-lines@3.0.1: {} trim-newlines@3.0.1: {} @@ -12609,6 +13226,8 @@ snapshots: unc-path-regex@0.1.2: {} + underscore@1.13.7: {} + undici-types@6.21.0: {} undici-types@7.10.0: {} @@ -12628,6 +13247,8 @@ snapshots: unicorn-magic@0.1.0: {} + unicorn-magic@0.3.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -12702,6 +13323,8 @@ snapshots: uuid@7.0.3: {} + uuid@9.0.1: {} + v8-compile-cache-lib@3.0.1: {} validate-npm-package-license@3.0.4: @@ -12731,8 +13354,15 @@ snapshots: dependencies: defaults: 1.0.4 + webidl-conversions@7.0.0: {} + whatwg-fetch@3.6.20: {} + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.1 + webidl-conversions: 7.0.0 + which-module@2.0.1: {} which@2.0.2: @@ -12745,8 +13375,20 @@ snapshots: dependencies: execa: 8.0.1 + wordnet-db@3.1.14: {} + wordwrap@1.0.0: {} + workspace-tools@0.38.4: + dependencies: + '@yarnpkg/lockfile': 1.1.0 + fast-glob: 3.3.3 + git-url-parse: 16.1.0 + globby: 11.1.0 + jju: 1.4.0 + js-yaml: 4.1.0 + micromatch: 4.0.8 + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -12792,6 +13434,8 @@ snapshots: xmlbuilder@15.1.1: {} + xtend@4.0.2: {} + y18n@4.0.3: {} y18n@5.0.8: {} @@ -12843,6 +13487,8 @@ snapshots: yoctocolors-cjs@2.1.3: {} + yoctocolors@2.1.2: {} + zod@4.1.5: {} zwitch@2.0.4: {} From 80981133f85e48c28b04da1a689706770964bb72 Mon Sep 17 00:00:00 2001 From: MJ <mym0404@gmail.com> Date: Sat, 13 Sep 2025 16:05:31 +0900 Subject: [PATCH 2/6] docs: complete pattern keyword standardization - Finalize keyword updates for remaining pattern files - Ensure consistent hyphenated keyword format across all patterns - Update CLAUDE.md with final pattern list table --- .../patterns/001-fabric-native-component.md | 2 +- .../patterns/002-codegen-native-commands.md | 2 +- .claude/patterns/003-turbo-module-spec.md | 2 +- .claude/patterns/004-ios-fabric-component.md | 2 +- .claude/patterns/005-ios-command-handling.md | 2 +- .claude/patterns/006-ios-event-emission.md | 2 +- .claude/patterns/007-ios-turbo-module.md | 2 +- .../patterns/008-android-view-manager-spec.md | 2 +- .../patterns/009-android-command-handling.md | 2 +- .../patterns/010-android-event-emission.md | 2 +- .../011-android-package-registration.md | 2 +- .claude/patterns/012-jsdoc.md | 2 +- ...ive-color-parsing-validation-typescript.md | 2 +- .../patterns/014-android-native-utilities.md | 2 +- .claude/patterns/015-ios-native-utilities.md | 2 +- .../patterns/016-ios-overlay-integration.md | 2 +- .claude/patterns/018-fumadocs-usage.md | 2 +- .../019-fumadocs-i18n-file-structure.md | 2 +- CLAUDE.md | 40 +++++++++---------- 19 files changed, 38 insertions(+), 38 deletions(-) diff --git a/.claude/patterns/001-fabric-native-component.md b/.claude/patterns/001-fabric-native-component.md index aea9cae8..2bc9b0b8 100644 --- a/.claude/patterns/001-fabric-native-component.md +++ b/.claude/patterns/001-fabric-native-component.md @@ -1,5 +1,5 @@ --- -keywords: fabric,codegenNativeComponent,HostComponent,ViewProps,DirectEventHandler +keywords: fabric,component,props,events,codegen language: typescript explanation: Defines React Native Fabric component using codegenNativeComponent with TypeScript props interface --- diff --git a/.claude/patterns/002-codegen-native-commands.md b/.claude/patterns/002-codegen-native-commands.md index b13b614c..251f3800 100644 --- a/.claude/patterns/002-codegen-native-commands.md +++ b/.claude/patterns/002-codegen-native-commands.md @@ -1,5 +1,5 @@ --- -keywords: codegenNativeCommands,imperative,async-commands,sync-commands,ElementRef +keywords: commands,imperative,async,native-methods,codegen language: typescript explanation: Defines imperative native methods using codegenNativeCommands for async/sync operations --- diff --git a/.claude/patterns/003-turbo-module-spec.md b/.claude/patterns/003-turbo-module-spec.md index 1da146bc..98cf8b06 100644 --- a/.claude/patterns/003-turbo-module-spec.md +++ b/.claude/patterns/003-turbo-module-spec.md @@ -1,5 +1,5 @@ --- -keywords: TurboModule,TurboModuleRegistry,getEnforcing,spec-interface +keywords: turbo-module,native-module,spec,type-safety language: typescript explanation: Defines TurboModule interface for native module access with type safety --- diff --git a/.claude/patterns/004-ios-fabric-component.md b/.claude/patterns/004-ios-fabric-component.md index ac39bf6f..77c799f9 100644 --- a/.claude/patterns/004-ios-fabric-component.md +++ b/.claude/patterns/004-ios-fabric-component.md @@ -1,5 +1,5 @@ --- -keywords: RCTViewComponentView,updateProps,initWithFrame,contentView,emitter +keywords: ios-fabric,component,props-handling,view-lifecycle language: objc explanation: iOS Fabric component implementation extending RCTViewComponentView with props handling --- diff --git a/.claude/patterns/005-ios-command-handling.md b/.claude/patterns/005-ios-command-handling.md index 82690c0d..3adf2cc5 100644 --- a/.claude/patterns/005-ios-command-handling.md +++ b/.claude/patterns/005-ios-command-handling.md @@ -1,5 +1,5 @@ --- -keywords: handleCommand,RCTRNCNaverMapViewHandleCommand,commandName,screenToCoordinate +keywords: ios-commands,imperative,command-dispatch,native-calls language: objc explanation: iOS command handling implementation for processing imperative native commands --- diff --git a/.claude/patterns/006-ios-event-emission.md b/.claude/patterns/006-ios-event-emission.md index f0307c11..eeac9e04 100644 --- a/.claude/patterns/006-ios-event-emission.md +++ b/.claude/patterns/006-ios-event-emission.md @@ -1,5 +1,5 @@ --- -keywords: EventEmitter,onCameraChanged,NMFCameraPosition,emitter-callback +keywords: ios-events,event-emission,callbacks,native-to-js language: objc explanation: iOS event emission using generated event emitter for sending events to JavaScript --- diff --git a/.claude/patterns/007-ios-turbo-module.md b/.claude/patterns/007-ios-turbo-module.md index d15c30d1..1220a39b 100644 --- a/.claude/patterns/007-ios-turbo-module.md +++ b/.claude/patterns/007-ios-turbo-module.md @@ -1,5 +1,5 @@ --- -keywords: ios, turbo-module, objective-c, bridge, react-native +keywords: ios-turbo-module,bridge-compatibility,new-arch,module-implementation language: objc explanation: iOS TurboModule implementation with conditional Bridge/TurboModule support --- diff --git a/.claude/patterns/008-android-view-manager-spec.md b/.claude/patterns/008-android-view-manager-spec.md index d9a2d8e9..16d895fb 100644 --- a/.claude/patterns/008-android-view-manager-spec.md +++ b/.claude/patterns/008-android-view-manager-spec.md @@ -1,5 +1,5 @@ --- -keywords: android, view-manager, kotlin, codegen, react-native +keywords: android-viewmanager,codegen-delegate,props-handling,view-lifecycle language: kotlin explanation: Android ViewManager implementation using codegen delegate pattern --- diff --git a/.claude/patterns/009-android-command-handling.md b/.claude/patterns/009-android-command-handling.md index 35943044..f65c7fc7 100644 --- a/.claude/patterns/009-android-command-handling.md +++ b/.claude/patterns/009-android-command-handling.md @@ -1,5 +1,5 @@ --- -keywords: android, command, handling, kotlin, react-native +keywords: android-commands,receiveCommand,imperative,command-dispatch language: kotlin explanation: Android command handling using receiveCommand method with command ID matching --- diff --git a/.claude/patterns/010-android-event-emission.md b/.claude/patterns/010-android-event-emission.md index 3e3a03df..5c6e20ea 100644 --- a/.claude/patterns/010-android-event-emission.md +++ b/.claude/patterns/010-android-event-emission.md @@ -1,5 +1,5 @@ --- -keywords: android, event, emission, kotlin, react-native +keywords: android-events,event-emission,RCTEventEmitter,native-to-js language: kotlin explanation: Android event emission using ReactContext and RCTEventEmitter --- diff --git a/.claude/patterns/011-android-package-registration.md b/.claude/patterns/011-android-package-registration.md index f059ce9c..c1ad323d 100644 --- a/.claude/patterns/011-android-package-registration.md +++ b/.claude/patterns/011-android-package-registration.md @@ -1,5 +1,5 @@ --- -keywords: android, package, registration, kotlin, react-native +keywords: android-package,ReactPackage,module-registration,native-modules language: kotlin explanation: Android ReactPackage registration for native modules and ViewManagers --- diff --git a/.claude/patterns/012-jsdoc.md b/.claude/patterns/012-jsdoc.md index 22c527c1..7703d4a8 100644 --- a/.claude/patterns/012-jsdoc.md +++ b/.claude/patterns/012-jsdoc.md @@ -1,5 +1,5 @@ --- -keywords: jsdoc, documentation, typescript, comments +keywords: jsdoc,documentation,api-docs,comments language: typescript explanation: JSDoc documentation patterns for TypeScript components and methods --- diff --git a/.claude/patterns/013-native-color-parsing-validation-typescript.md b/.claude/patterns/013-native-color-parsing-validation-typescript.md index df2411e1..74589403 100644 --- a/.claude/patterns/013-native-color-parsing-validation-typescript.md +++ b/.claude/patterns/013-native-color-parsing-validation-typescript.md @@ -1,5 +1,5 @@ --- -keywords: color, parsing, validation, typescript, react-native +keywords: color,processColor,ColorValue,validation,props language: typescript explanation: TypeScript color prop handling with processColor and native color utilities --- diff --git a/.claude/patterns/014-android-native-utilities.md b/.claude/patterns/014-android-native-utilities.md index 8818aa47..1e91851c 100644 --- a/.claude/patterns/014-android-native-utilities.md +++ b/.claude/patterns/014-android-native-utilities.md @@ -1,5 +1,5 @@ --- -keywords: android, utilities, kotlin, validation, conversion +keywords: android-utils,event-emission,prop-validation,coordinate-conversion language: kotlin explanation: Android native utility functions for event emission, prop validation, and conversions --- diff --git a/.claude/patterns/015-ios-native-utilities.md b/.claude/patterns/015-ios-native-utilities.md index a7b41f44..1b522432 100644 --- a/.claude/patterns/015-ios-native-utilities.md +++ b/.claude/patterns/015-ios-native-utilities.md @@ -1,5 +1,5 @@ --- -keywords: ios, utilities, objective-c, validation, conversion +keywords: ios-utils,color-conversion,validation,object-creation language: objc explanation: iOS native utility functions for color conversion, validation, and object creation --- diff --git a/.claude/patterns/016-ios-overlay-integration.md b/.claude/patterns/016-ios-overlay-integration.md index 9184b36d..4e768bb7 100644 --- a/.claude/patterns/016-ios-overlay-integration.md +++ b/.claude/patterns/016-ios-overlay-integration.md @@ -1,5 +1,5 @@ --- -keywords: ios, overlay, integration, objective-c, naver-maps +keywords: ios-overlay,integration,mapview-subview,native-overlays language: objc explanation: iOS overlay integration pattern for Naver Maps SDK --- diff --git a/.claude/patterns/018-fumadocs-usage.md b/.claude/patterns/018-fumadocs-usage.md index 356b9296..55c94bb3 100644 --- a/.claude/patterns/018-fumadocs-usage.md +++ b/.claude/patterns/018-fumadocs-usage.md @@ -1,5 +1,5 @@ --- -keywords: fumadocs, mdx, documentation, components +keywords: fumadocs,mdx,documentation,components,ui-patterns language: mdx explanation: Concise usage patterns for Fumadocs components and features in MDX --- diff --git a/.claude/patterns/019-fumadocs-i18n-file-structure.md b/.claude/patterns/019-fumadocs-i18n-file-structure.md index dcf3e499..f68bf2da 100644 --- a/.claude/patterns/019-fumadocs-i18n-file-structure.md +++ b/.claude/patterns/019-fumadocs-i18n-file-structure.md @@ -1,5 +1,5 @@ --- -keywords: fumadocs, i18n, file-structure, meta, mdx, korean +keywords: fumadocs-i18n,file-structure,translation,meta-files,localization language: markdown explanation: File structure pattern for Fumadocs i18n with default and Korean translation files using dot-style naming. --- diff --git a/CLAUDE.md b/CLAUDE.md index 0a734e3a..46ea6268 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -171,26 +171,26 @@ Claude Code agents should use these CLI commands to access and manage project co [PATTERN LIST] -| ID | Name | Language | Keywords | Explanation | -|-----|:------------------------------------------------------------|------------|---------------------------------------------------------|------------------------------------------------------------------------------------------------------------| -| 001 | Fabric Native Component Definition | typescript | fabric, native, component, react-native, codegen | Defines React Native Fabric component using codegenNativeComponent with TypeScript props interface | -| 002 | React Native Codegen Commands | typescript | codegen, native, commands, react-native, async, sync | Defines imperative native methods using codegenNativeCommands for async/sync operations | -| 003 | TurboModule Specification | typescript | turbo-module, native, module, react-native, type-safety | Defines TurboModule interface for native module access with type safety | -| 004 | iOS Fabric Component Implementation | objc | ios, fabric, component, objective-c, react-native | iOS Fabric component implementation extending RCTViewComponentView with props handling | -| 005 | iOS Command Handling | objc | ios, command, handling, objective-c, fabric | iOS command handling implementation for processing imperative native commands | -| 006 | iOS Event Emission | objc | ios, event, emission, objective-c, fabric | iOS event emission using generated event emitter for sending events to JavaScript | -| 007 | iOS TurboModule Implementation | objc | ios, turbo-module, objective-c, bridge, react-native | iOS TurboModule implementation with conditional Bridge/TurboModule support | -| 008 | Android ViewManager with Codegen | kotlin | android, view-manager, kotlin, codegen, react-native | Android ViewManager implementation using codegen delegate pattern | -| 009 | Android Command Handling | kotlin | android, command, handling, kotlin, react-native | Android command handling using receiveCommand method with command ID matching | -| 010 | Android Event Emission | kotlin | android, event, emission, kotlin, react-native | Android event emission using ReactContext and RCTEventEmitter | -| 011 | Android Package Registration | kotlin | android, package, registration, kotlin, react-native | Android ReactPackage registration for native modules and ViewManagers | -| 012 | JSDoc Documentation | typescript | jsdoc, documentation, typescript, comments | JSDoc documentation patterns for TypeScript components and methods | -| 013 | Native Color Parsing and Validation Pattern with TypeScript | typescript | color, parsing, validation, typescript, react-native | TypeScript color prop handling with processColor and native color utilities | -| 014 | Android Native Utilities | kotlin | android, utilities, kotlin, validation, conversion | Android native utility functions for event emission, prop validation, and conversions | -| 015 | iOS Native Utilities | objc | ios, utilities, objective-c, validation, conversion | iOS native utility functions for color conversion, validation, and object creation | -| 016 | iOS Overlay Integration Pattern | objc | ios, overlay, integration, objective-c, naver-maps | iOS overlay integration pattern for Naver Maps SDK | -| 018 | Fumadocs Usage | mdx | fumadocs, mdx, documentation, components | Concise usage patterns for Fumadocs components and features in MDX | -| 019 | Fumadocs I18n File Structure | markdown | fumadocs, i18n, file-structure, meta, mdx, korean | File structure pattern for Fumadocs i18n with default and Korean translation files using dot-style naming. | +| ID | Name | Language | Keywords | Explanation | +|----|------|----------|----------|-------------| +| 001 | Fabric Native Component Definition | typescript | fabric, component, props, events, codegen | Defines React Native Fabric component using codegenNativeComponent with TypeScript props interface | +| 002 | React Native Codegen Commands | typescript | commands, imperative, async, native-methods, codegen | Defines imperative native methods using codegenNativeCommands for async/sync operations | +| 003 | TurboModule Specification | typescript | turbo-module, native-module, spec, type-safety | Defines TurboModule interface for native module access with type safety | +| 004 | iOS Fabric Component Implementation | objc | ios-fabric, component, props-handling, view-lifecycle | iOS Fabric component implementation extending RCTViewComponentView with props handling | +| 005 | iOS Command Handling | objc | ios-commands, imperative, command-dispatch, native-calls | iOS command handling implementation for processing imperative native commands | +| 006 | iOS Event Emission | objc | ios-events, event-emission, callbacks, native-to-js | iOS event emission using generated event emitter for sending events to JavaScript | +| 007 | iOS TurboModule Implementation | objc | ios-turbo-module, bridge-compatibility, new-arch, module-implementation | iOS TurboModule implementation with conditional Bridge/TurboModule support | +| 008 | Android ViewManager with Codegen | kotlin | android-viewmanager, codegen-delegate, props-handling, view-lifecycle | Android ViewManager implementation using codegen delegate pattern | +| 009 | Android Command Handling | kotlin | android-commands, receiveCommand, imperative, command-dispatch | Android command handling using receiveCommand method with command ID matching | +| 010 | Android Event Emission | kotlin | android-events, event-emission, RCTEventEmitter, native-to-js | Android event emission using ReactContext and RCTEventEmitter | +| 011 | Android Package Registration | kotlin | android-package, ReactPackage, module-registration, native-modules | Android ReactPackage registration for native modules and ViewManagers | +| 012 | JSDoc Documentation | typescript | jsdoc, documentation, api-docs, comments | JSDoc documentation patterns for TypeScript components and methods | +| 013 | Native Color Parsing and Validation Pattern with TypeScript | typescript | color, processColor, ColorValue, validation, props | TypeScript color prop handling with processColor and native color utilities | +| 014 | Android Native Utilities | kotlin | android-utils, event-emission, prop-validation, coordinate-conversion | Android native utility functions for event emission, prop validation, and conversions | +| 015 | iOS Native Utilities | objc | ios-utils, color-conversion, validation, object-creation | iOS native utility functions for color conversion, validation, and object creation | +| 016 | iOS Overlay Integration Pattern | objc | ios-overlay, integration, mapview-subview, native-overlays | iOS overlay integration pattern for Naver Maps SDK | +| 018 | Fumadocs Usage | mdx | fumadocs, mdx, documentation, components, ui-patterns | Concise usage patterns for Fumadocs components and features in MDX | +| 019 | Fumadocs I18n File Structure | markdown | fumadocs-i18n, file-structure, translation, meta-files, localization | File structure pattern for Fumadocs i18n with default and Korean translation files using dot-style naming. | [PATTERN LIST END] From 2ea3c505aaebcb25dd544aba1fc244ede236facb Mon Sep 17 00:00:00 2001 From: MJ <mym0404@gmail.com> Date: Sat, 13 Sep 2025 16:25:39 +0900 Subject: [PATCH 3/6] feat: add expo example as submodule - Add mym0404/naver-map-expo-example as git submodule - Located at expoexample/ directory for easy access - Provides Expo SDK 54 integration example with full map features --- .gitmodules | 3 +++ expoexample | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 expoexample diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..0a999cf4 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "expoexample"] + path = expoexample + url = https://github.com/mym0404/naver-map-expo-example.git diff --git a/expoexample b/expoexample new file mode 160000 index 00000000..e4e37185 --- /dev/null +++ b/expoexample @@ -0,0 +1 @@ +Subproject commit e4e37185c88a8e4136aee0eff70671136436cc73 From 7959bc87ab6c151171528a54be03415aa1a5e07f Mon Sep 17 00:00:00 2001 From: MJ <mym0404@gmail.com> Date: Sat, 13 Sep 2025 16:37:37 +0900 Subject: [PATCH 4/6] feat: implement custom style editor support for NaverMapView MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Features - Add customStyleId prop to apply Naver Style Editor styles - Add onCustomStyleLoaded callback for successful style loading - Add onCustomStyleLoadFailed callback with error message - Support both iOS and Android platforms with native implementations ## Implementation Details - TypeScript: Added new props to NaverMapViewProps interface - Native Spec: Updated codegen specification with new props and events - iOS: Implemented setCustomStyleId with load/fail handlers using NMFMapView - Android: Implemented setCustomStyleId with OnCustomStyleLoadCallback - Example: Added toggle button and test with style ID bf462d9f-fa82-413d-ab7c-df9c5e3c9f7f - Docs: Added custom style guide in English and Korean ## Testing - Android build: ✅ Successful (gradlew assembleDebug) - Example app: Added "Custom Style" toggle for testing - Error handling: Proper error message parsing for both platforms ## Breaking Changes None - all new props are optional ## References - Style Editor: https://style-editor.map.naver.com --- ...-editor-implementation-for-navermapview.md | 141 +++++++++++++++++ ...sitory-setup-with-submodule-integration.md | 143 ++++++++++++++++++ .claude/settings.local.json | 5 +- CLAUDE.md | 16 +- .../NaverMapCustomStyleLoadFailedEvent.kt | 22 +++ .../event/NaverMapCustomStyleLoadedEvent.kt | 18 +++ .../mapview/RNCNaverMapViewManager.kt | 35 +++++ docs/content/docs/custom-style.ko.mdx | 28 ++++ docs/content/docs/custom-style.mdx | 28 ++++ docs/content/docs/meta.json | 1 + example/src/App.tsx | 15 ++ ios/RNCNaverMapView.mm | 26 ++++ src/component/NaverMapView.tsx | 51 +++++++ src/spec/RNCNaverMapViewNativeComponent.ts | 5 + 14 files changed, 531 insertions(+), 3 deletions(-) create mode 100644 .claude/plans/001-custom-style-editor-implementation-for-navermapview.md create mode 100644 .claude/plans/002-expo-sdk-54-example-repository-setup-with-submodule-integration.md create mode 100644 android/src/main/java/com/mjstudio/reactnativenavermap/event/NaverMapCustomStyleLoadFailedEvent.kt create mode 100644 android/src/main/java/com/mjstudio/reactnativenavermap/event/NaverMapCustomStyleLoadedEvent.kt create mode 100644 docs/content/docs/custom-style.ko.mdx create mode 100644 docs/content/docs/custom-style.mdx diff --git a/.claude/plans/001-custom-style-editor-implementation-for-navermapview.md b/.claude/plans/001-custom-style-editor-implementation-for-navermapview.md new file mode 100644 index 00000000..ae29172d --- /dev/null +++ b/.claude/plans/001-custom-style-editor-implementation-for-navermapview.md @@ -0,0 +1,141 @@ +# Custom Style Editor Implementation for NaverMapView + +## Overview +Implement support for Naver Map's custom styling feature using Style Editor in the React Native NaverMapView component. This will allow developers to apply custom styles created with Naver Style Editor to their maps through declarative props. + +## Implementation + +### Technical Stack & Dependencies +- Framework: React Native with New Architecture (Fabric) +- Language & Version: TypeScript 5.x, Objective-C++ (iOS), Kotlin (Android) +- Package Manager: pnpm +- No new dependencies required - using existing React Native codegen infrastructure +- Build system: React Native Builder Bob with codegen + +### Architecture & File Structure +**Modified Files:** +- `src/component/NaverMapView.tsx` - Add new props to interface and component +- `src/spec/RNCNaverMapViewNativeComponent.ts` - Add codegen props and events +- `ios/RNCNaverMapView/RNCNaverMapView.mm` - iOS native implementation +- `android/src/main/java/com/reactnativerncnavermap/` - Android native implementation + +**New Props Design:** +```typescript +interface NaverMapViewProps { + // ... existing props + + /** + * Custom style ID from Naver Style Editor + * @see https://style-editor.map.naver.com + */ + customStyleId?: string; + + /** + * Called when custom style is successfully loaded + */ + onCustomStyleLoaded?: () => void; + + /** + * Called when custom style loading fails + * @param params Error information with message + */ + onCustomStyleLoadFailed?: (params: {message: string}) => void; +} +``` + +### Implementation Steps + +1. **TypeScript Interface Updates** + - Add customStyleId, onCustomStyleLoaded, onCustomStyleLoadFailed to NaverMapViewProps + - Update component prop handling in NaverMapView.tsx + +2. **Native Component Spec Updates** + - Add customStyleId as optional string prop in RNCNaverMapViewNativeComponent.ts + - Add onCustomStyleLoaded and onCustomStyleLoadFailed as DirectEventHandler events + - Use Pattern #001 (Fabric Native Component Definition) + +3. **iOS Native Implementation** + - Extend RNCNaverMapView.mm to handle customStyleId prop changes + - Implement setCustomStyleId with load/fail handlers using NMFMapView native SDK + - Use Pattern #004 (iOS Fabric Component Implementation) for props handling + - Use Pattern #006 (iOS Event Emission) for callback events + +4. **Android Native Implementation** + - Extend Android ViewManager to handle customStyleId prop + - Implement setCustomStyleId with OnCustomStyleLoadCallback + - Use Pattern #008 (Android ViewManager with Codegen) for props handling + - Use Pattern #010 (Android Event Emission) for callback events + +5. **Component Integration** + - Update NaverMapView component to pass customStyleId to native component + - Handle onCustomStyleLoaded and onCustomStyleLoadFailed events with useStableCallback + - Follow existing event handling patterns (similar to onCameraChanged, onInitialized) + +### Configuration Details + +**iOS Native SDK Integration:** +```objective-c +// Set custom style with callbacks +[self.mapView setCustomStyleId:customStyleId + loadHandler:^{ + // Emit onCustomStyleLoaded event + } + failHandler:^(NSError *error) { + // Emit onCustomStyleLoadFailed event with error.localizedDescription + }]; +``` + +**Android Native SDK Integration:** +```kotlin +// Set custom style with callback +naverMap.setCustomStyleId(customStyleId, object : NaverMap.OnCustomStyleLoadCallback { + override fun onCustomStyleLoaded() { + // Emit onCustomStyleLoaded event + } + + override fun onCustomStyleLoadFailed(exception: Exception) { + // Emit onCustomStyleLoadFailed event with exception.message + } +}) +``` + +**Error Handling & Edge Cases** +- Handle null/empty customStyleId by clearing custom style +- Handle network failures during style loading +- Parse error messages appropriately for each platform +- iOS: Use NSError.localizedDescription +- Android: Use Exception.message or fallback to generic message + +**Performance Considerations** +- Style loading is asynchronous - no blocking operations +- Custom styles may lock certain map options (layers, night mode, etc.) +- Style changes trigger re-rendering but are optimized by native SDK + +## Todo List +- [x] Find and analyze native component spec files +- [ ] Add customStyleId props to NaverMapView TypeScript interface +- [ ] Update native component spec with custom style properties +- [ ] Implement iOS native custom style functionality +- [ ] Implement Android native custom style functionality +- [ ] Update NaverMapView component to handle custom style props +- [ ] Test with provided style ID bf462d9f-fa82-413d-ab7c-df9c5e3c9f7f + +## Success Criteria +- [ ] NaverMapView accepts customStyleId prop and applies style successfully +- [ ] onCustomStyleLoaded callback fires when style loads successfully +- [ ] onCustomStyleLoadFailed callback fires with error message on failures +- [ ] iOS and Android implementations work consistently +- [ ] Test style ID bf462d9f-fa82-413d-ab7c-df9c5e3c9f7f loads properly in example app +- [ ] TypeScript types are properly generated and no compile errors +- [ ] Example app demonstrates custom styling functionality + +## References +- Pattern #001: Fabric Native Component Definition +- Pattern #004: iOS Fabric Component Implementation +- Pattern #006: iOS Event Emission +- Pattern #008: Android ViewManager with Codegen +- Pattern #010: Android Event Emission +- iOS SDK: https://navermaps.github.io/ios-map-sdk/guide-ko/2-4.html +- Android SDK: https://navermaps.github.io/android-map-sdk/guide-ko/2-4.html +- Style Editor: https://style-editor.map.naver.com +- Test Style ID: bf462d9f-fa82-413d-ab7c-df9c5e3c9f7f \ No newline at end of file diff --git a/.claude/plans/002-expo-sdk-54-example-repository-setup-with-submodule-integration.md b/.claude/plans/002-expo-sdk-54-example-repository-setup-with-submodule-integration.md new file mode 100644 index 00000000..988add1b --- /dev/null +++ b/.claude/plans/002-expo-sdk-54-example-repository-setup-with-submodule-integration.md @@ -0,0 +1,143 @@ +# Expo SDK 54 Example Repository Setup with Submodule Integration + +## Overview +GitHub에 mym0404/naver-map-expo-example 저장소를 생성하고, Expo SDK 54를 사용한 React Native Naver Map 예제 앱을 구축합니다. 이 저장소는 현재 프로젝트의 서브모듈로 expoexample 디렉토리에 추가되어 관리됩니다. + +## Implementation + +### Required Content + +**Technical Stack & Dependencies** +- Framework: Expo SDK 54 +- Language & Version: TypeScript 5.x, Node 18+ +- Package Manager: pnpm +- Required Dependencies: + - expo@~54.0.0 + - @mj-studio/react-native-naver-map@^2.6.0 + - expo-build-properties (latest) + - expo-router (default with Expo) +- Expo Template: Default template with TypeScript and Expo Router + +**Architecture & File Structure** +- Repository Structure: + ``` + naver-map-expo-example/ + ├── app.json (Expo config with plugins) + ├── package.json (pnpm workspace) + ├── .env (environment variables) + ├── src/ + │ └── App.tsx (copied from existing example) + └── expo-env.d.ts + ``` +- Submodule Integration: Current project root → expoexample/ directory +- Environment Variables: EXPO_PUBLIC_NAVER_MAP_CLIENT_ID in .env file + +**Implementation Steps** + +1. **GitHub Repository Setup** + - Create GitHub repository: mym0404/naver-map-expo-example + - Initialize with minimal structure (no README, LICENSE needed) + - Set repository to public for easy access + +2. **Expo Project Creation** + - Execute: `pnpm create expo-app expo-rn-example` + - Configure app.json with plugins: + ```json + { + "expo": { + "name": "expo-rn-example", + "plugins": [ + [ + "@mj-studio/react-native-naver-map", + { + "client_id": "YOUR_CLIENT_ID_HERE" + } + ], + [ + "expo-build-properties", + { + "android": { + "extraMavenRepos": ["https://repository.map.naver.com/archive/maven"] + } + } + ] + ] + } + } + ``` + +3. **Dependencies Installation** + - Install Naver Map library: `pnpm add @mj-studio/react-native-naver-map@^2.6.0` + - Install build properties: `pnpm add expo-build-properties` + - Install additional dependencies from existing example + +4. **Environment Configuration** + - Create .env file with: `EXPO_PUBLIC_NAVER_MAP_CLIENT_ID=your_client_id_here` + - Update app.json to use environment variable + - Configure .gitignore to exclude .env file + +5. **App Integration** + - Copy existing App.tsx from example/src/App.tsx + - Adapt imports for Expo environment + - Ensure all dependencies are properly installed + +6. **Submodule Integration** + - Add as git submodule: `git submodule add https://github.com/mym0404/naver-map-expo-example.git expoexample` + - Update .gitmodules configuration + - Test submodule functionality + +**Configuration Details** +- Environment Variables: + - EXPO_PUBLIC_NAVER_MAP_CLIENT_ID (used in app.json) +- Package.json Scripts: + ```json + { + "scripts": { + "start": "expo start", + "android": "expo run:android", + "ios": "expo run:ios", + "prebuild": "expo prebuild" + } + } + ``` +- App.json Configuration: Include both Naver Map plugin and expo-build-properties + +**External References** +- Expo SDK 54 Documentation: https://docs.expo.dev/ +- Expo Create App Guide: https://docs.expo.dev/more/create-expo/ +- Current Project Expo Setup: docs/content/docs/installation/expo/index.mdx +- Existing App.tsx: example/src/App.tsx + +**Error Handling & Edge Cases** +- Prebuild Failures: Ensure all native dependencies are properly configured +- Development Build Issues: Verify expo-dev-client installation and configuration +- Environment Variable Loading: Test EXPO_PUBLIC variables are accessible in app +- Submodule Sync Issues: Document proper submodule update procedures + +**Performance Considerations** +- Development Builds: Local builds for faster iteration +- Dependency Management: Use pnpm for efficient package management +- Hot Reload: Ensure Expo development server works with native modules + +## Todo List +- [ ] Create GitHub repository mym0404/naver-map-expo-example +- [ ] Initialize Expo SDK 54 project with default template +- [ ] Install and configure @mj-studio/react-native-naver-map dependencies +- [ ] Set up environment variables and app.json configuration +- [ ] Copy and adapt existing App.tsx for Expo environment +- [ ] Add repository as git submodule to current project +- [ ] Test prebuild and development build functionality +- [ ] Verify both iOS and Android development builds work + +## Success Criteria +- [ ] Repository successfully created and accessible at https://github.com/mym0404/naver-map-expo-example +- [ ] Expo app runs successfully on both iOS and Android with development builds +- [ ] Naver Map displays correctly with proper API key configuration +- [ ] Submodule integration works correctly in main project +- [ ] All existing App.tsx functionality preserved in Expo environment + +## References +- Pattern #018: Fumadocs Usage (for documentation) +- Current Project: /Users/mj/projects/NaverMap +- Existing Example: example/src/App.tsx +- Expo Setup Guide: docs/content/docs/installation/expo/index.mdx \ No newline at end of file diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 22917919..f9e52013 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -15,7 +15,10 @@ "mcp__playwright__get-screenshot", "mcp__playwright__execute-code", "Bash(sed:*)", - "Bash(grep:*)" + "Bash(grep:*)", + "Bash(pnpm format:*)", + "Bash(pnpm turbo:android:*)", + "Bash(git init:*)" ], "deny": [], "ask": [] diff --git a/CLAUDE.md b/CLAUDE.md index 46ea6268..e7582073 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -162,6 +162,18 @@ To test the library, you need to configure API keys: - `pnpm pod` - Install iOS dependencies via CocoaPods - `pnpm pod:update` - Update iOS dependencies via CocoaPods +## CI/CD & Turbo Scripts +- `pnpm ci:ios` - Build iOS project for CI (xcodebuild with optimized settings) +- `pnpm ci:android` - Build Android project for CI (gradlew assembleDebug) +- `pnpm turbo:ios` - Run iOS CI build with Turbo cache (cached in .turbo/ios) +- `pnpm turbo:android` - Run Android CI build with Turbo cache (cached in .turbo/android) + +**Turbo Scripts Usage:** +- Turbo scripts provide cached builds for faster development iteration +- `turbo:ios` and `turbo:android` use single-package mode with platform-specific cache directories +- Cache helps avoid repeated builds when no source changes occur +- Useful for CI/CD pipelines and local development optimization + # Self Reference Context Management System (cc-self-refer cli and context storage project sturcture) This project uses `cc-self-refer` for intelligent self-reference capabilities. @@ -227,7 +239,7 @@ When these keywords appear in user prompts, determine if the user intends to use When user requests involve coding tasks that align with existing pattern Names, Keywords, or Explanations: 1. **Identify Match**: Compare user's request against the [PATTERN LIST] -2. **Retrieve Pattern**: Use `npx -y cc-self-refer pattern view <id>` for matching patterns +2. **Retrieve Pattern**: Use `npx cc-self-refer pattern view <id>` for matching patterns 3. **Apply Pattern**: Implement user's request using the pattern's principles and structure 4. **Inform User**: Use this format to indicate pattern usage: ``` @@ -246,6 +258,6 @@ When user requests involve coding tasks that align with existing pattern Names, **IMPORTANT Agent Behavior:** 1. **Scan** [PATTERN LIST] for relevant matches during any coding request -2. **Retrieve** matching patterns using `npx -y cc-self-refer pattern view <id>` +2. **Retrieve** matching patterns using `npx cc-self-refer pattern view <id>` 3. **Apply** pattern principles to implement user's actual requirements diff --git a/android/src/main/java/com/mjstudio/reactnativenavermap/event/NaverMapCustomStyleLoadFailedEvent.kt b/android/src/main/java/com/mjstudio/reactnativenavermap/event/NaverMapCustomStyleLoadFailedEvent.kt new file mode 100644 index 00000000..f70e496b --- /dev/null +++ b/android/src/main/java/com/mjstudio/reactnativenavermap/event/NaverMapCustomStyleLoadFailedEvent.kt @@ -0,0 +1,22 @@ +package com.mjstudio.reactnativenavermap.event + +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.WritableMap +import com.facebook.react.uimanager.events.Event + +class NaverMapCustomStyleLoadFailedEvent( + surfaceId: Int, + viewTag: Int, + private val message: String, +) : Event<NaverMapCustomStyleLoadFailedEvent>(surfaceId, viewTag) { + companion object { + const val EVENT_NAME = "onCustomStyleLoadFailed" + } + + override fun getEventName(): String = EVENT_NAME + + override fun getEventData(): WritableMap = + Arguments.createMap().apply { + putString("message", message) + } +} diff --git a/android/src/main/java/com/mjstudio/reactnativenavermap/event/NaverMapCustomStyleLoadedEvent.kt b/android/src/main/java/com/mjstudio/reactnativenavermap/event/NaverMapCustomStyleLoadedEvent.kt new file mode 100644 index 00000000..db4d4e27 --- /dev/null +++ b/android/src/main/java/com/mjstudio/reactnativenavermap/event/NaverMapCustomStyleLoadedEvent.kt @@ -0,0 +1,18 @@ +package com.mjstudio.reactnativenavermap.event + +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.WritableMap +import com.facebook.react.uimanager.events.Event + +class NaverMapCustomStyleLoadedEvent( + surfaceId: Int, + viewTag: Int, +) : Event<NaverMapCustomStyleLoadedEvent>(surfaceId, viewTag) { + companion object { + const val EVENT_NAME = "onCustomStyleLoaded" + } + + override fun getEventName(): String = EVENT_NAME + + override fun getEventData(): WritableMap = Arguments.createMap() +} diff --git a/android/src/main/java/com/mjstudio/reactnativenavermap/mapview/RNCNaverMapViewManager.kt b/android/src/main/java/com/mjstudio/reactnativenavermap/mapview/RNCNaverMapViewManager.kt index 3459fe2e..c9ef4d84 100644 --- a/android/src/main/java/com/mjstudio/reactnativenavermap/mapview/RNCNaverMapViewManager.kt +++ b/android/src/main/java/com/mjstudio/reactnativenavermap/mapview/RNCNaverMapViewManager.kt @@ -15,6 +15,8 @@ import com.mjstudio.reactnativenavermap.event.NaverMapCameraChangeEvent import com.mjstudio.reactnativenavermap.event.NaverMapCameraIdleEvent import com.mjstudio.reactnativenavermap.event.NaverMapClusterLeafTapEvent import com.mjstudio.reactnativenavermap.event.NaverMapCoordinateToScreenEvent +import com.mjstudio.reactnativenavermap.event.NaverMapCustomStyleLoadFailedEvent +import com.mjstudio.reactnativenavermap.event.NaverMapCustomStyleLoadedEvent import com.mjstudio.reactnativenavermap.event.NaverMapInitializeEvent import com.mjstudio.reactnativenavermap.event.NaverMapOptionChangeEvent import com.mjstudio.reactnativenavermap.event.NaverMapScreenToCoordinateEvent @@ -124,6 +126,8 @@ class RNCNaverMapViewManager : RNCNaverMapViewManagerSpec<RNCNaverMapViewWrapper registerDirectEvent(this, NaverMapScreenToCoordinateEvent.EVENT_NAME) registerDirectEvent(this, NaverMapCoordinateToScreenEvent.EVENT_NAME) registerDirectEvent(this, NaverMapClusterLeafTapEvent.EVENT_NAME) + registerDirectEvent(this, NaverMapCustomStyleLoadedEvent.EVENT_NAME) + registerDirectEvent(this, NaverMapCustomStyleLoadFailedEvent.EVENT_NAME) } private fun RNCNaverMapViewWrapper?.withMapView(callback: (mapView: RNCNaverMapView) -> Unit) { @@ -666,6 +670,37 @@ class RNCNaverMapViewManager : RNCNaverMapViewManagerSpec<RNCNaverMapViewWrapper } } + @ReactProp(name = "customStyleId") + override fun setCustomStyleId( + view: RNCNaverMapViewWrapper?, + value: String?, + ) = view.withMap { map -> + view?.let { wrapper -> + if (!value.isNullOrEmpty()) { + map.setCustomStyleId( + value, + object : NaverMap.OnCustomStyleLoadCallback { + override fun onCustomStyleLoaded() { + wrapper.reactContext.emitEvent(wrapper.id) { surfaceId, reactTag -> + NaverMapCustomStyleLoadedEvent(surfaceId, reactTag) + } + } + + override fun onCustomStyleLoadFailed(exception: Exception) { + val message = exception.message ?: "Unknown error occurred while loading custom style" + wrapper.reactContext.emitEvent(wrapper.id) { surfaceId, reactTag -> + NaverMapCustomStyleLoadFailedEvent(surfaceId, reactTag, message) + } + } + }, + ) + } else { + // Clear custom style when value is null or empty + map.setCustomStyleId(null, null) + } + } + } + // endregion // region COMMANDS diff --git a/docs/content/docs/custom-style.ko.mdx b/docs/content/docs/custom-style.ko.mdx new file mode 100644 index 00000000..7c04dcf5 --- /dev/null +++ b/docs/content/docs/custom-style.ko.mdx @@ -0,0 +1,28 @@ +--- +title: "커스텀 스타일" +description: "네이버 스타일 에디터로 생성한 커스텀 지도 스타일 적용" +--- + +## 커스텀 스타일 + +[네이버 스타일 에디터](https://style-editor.map.naver.com)로 생성한 커스텀 지도 스타일을 적용합니다. + +### 기본 사용법 + +```tsx +<NaverMapView + customStyleId="your-style-id-here" + onCustomStyleLoaded={() => { + console.log('스타일 로드 완료'); + }} + onCustomStyleLoadFailed={({ message }) => { + console.log('스타일 로드 실패:', message); + }} +/> +``` + +### Props + +- `customStyleId?: string` - 네이버 스타일 에디터에서 생성한 스타일 ID +- `onCustomStyleLoaded?: () => void` - 스타일 로드 성공 시 호출 +- `onCustomStyleLoadFailed?: (params: {message: string}) => void` - 스타일 로드 실패 시 호출 \ No newline at end of file diff --git a/docs/content/docs/custom-style.mdx b/docs/content/docs/custom-style.mdx new file mode 100644 index 00000000..be3a339f --- /dev/null +++ b/docs/content/docs/custom-style.mdx @@ -0,0 +1,28 @@ +--- +title: "Custom Style" +description: "Apply custom map styles created with Naver Style Editor" +--- + +## Custom Style + +Apply custom map styles created with [Naver Style Editor](https://style-editor.map.naver.com). + +### Basic Usage + +```tsx +<NaverMapView + customStyleId="your-style-id-here" + onCustomStyleLoaded={() => { + console.log('Style loaded'); + }} + onCustomStyleLoadFailed={({ message }) => { + console.log('Style failed:', message); + }} +/> +``` + +### Props + +- `customStyleId?: string` - Style ID from Naver Style Editor +- `onCustomStyleLoaded?: () => void` - Called when style loads successfully +- `onCustomStyleLoadFailed?: (params: {message: string}) => void` - Called when style loading fails \ No newline at end of file diff --git a/docs/content/docs/meta.json b/docs/content/docs/meta.json index b990aebb..849a14ed 100644 --- a/docs/content/docs/meta.json +++ b/docs/content/docs/meta.json @@ -10,6 +10,7 @@ "---Guides---", "marker-clustering", "camera-control", + "custom-style", "optimization", "---More---", "[NotepadText][Changelog](https://github.com/mym0404/react-native-naver-map/releases)", diff --git a/example/src/App.tsx b/example/src/App.tsx index ea36b954..b5a871d5 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -105,6 +105,7 @@ export default function App() { const [zoomControls, setZoomControls] = useState(true); const [indoorLevelPicker, setIndoorLevelPicker] = useState(true); const [myLocation, setMyLocation] = useState(true); + const [customStyle, setCustomStyle] = useState(false); useEffect(() => { if (Platform.OS === 'ios') { @@ -417,6 +418,15 @@ export default function App() { onTapClusterLeaf={({ markerIdentifier }) => { console.log('onTapClusterLeaf', markerIdentifier); }} + customStyleId={ + customStyle ? 'bf462d9f-fa82-413d-ab7c-df9c5e3c9f7f' : undefined + } + onCustomStyleLoaded={() => { + console.log('Custom style loaded successfully!'); + }} + onCustomStyleLoadFailed={({ message }) => { + console.log('Custom style load failed:', message); + }} > {renderOverlays()} {cities.map((city, i) => ( @@ -589,6 +599,11 @@ export default function App() { onChange={() => setRerenderKey((k) => k + 1)} text={'show'} /> + <Toggle + value={customStyle} + onChange={setCustomStyle} + text={'Custom Style'} + /> </View> </View> ); diff --git a/ios/RNCNaverMapView.mm b/ios/RNCNaverMapView.mm index a90790f5..d3970269 100644 --- a/ios/RNCNaverMapView.mm +++ b/ios/RNCNaverMapView.mm @@ -266,6 +266,32 @@ - (void)updateProps:(Props::Shared const&)props oldProps:(Props::Shared const&)o } } + if (prev.customStyleId != next.customStyleId) { + NSString* customStyleId = getNsStr(next.customStyleId); + if (customStyleId && customStyleId.length > 0) { + __weak __typeof__(self) weakSelf = self; + [self.map setCustomStyleId:customStyleId + loadHandler:^{ + __strong __typeof__(self) strongSelf = weakSelf; + if (strongSelf && [strongSelf emitter]) { + [strongSelf emitter]->onCustomStyleLoaded({}); + } + } + failHandler:^(NSError* _Nonnull error) { + __strong __typeof__(self) strongSelf = weakSelf; + if (strongSelf && [strongSelf emitter]) { + std::string message = error.localizedDescription + ? std::string([error.localizedDescription UTF8String]) + : "Unknown error occurred while loading custom style"; + [strongSelf emitter]->onCustomStyleLoadFailed({.message = message}); + } + }]; + } else { + // Clear custom style when customStyleId is nil or empty + [self.map setCustomStyleId:nil loadHandler:nil failHandler:nil]; + } + } + [super updateProps:props oldProps:oldProps]; _isRecycled = NO; } diff --git a/src/component/NaverMapView.tsx b/src/component/NaverMapView.tsx index f0f49b1c..2b8b911c 100644 --- a/src/component/NaverMapView.tsx +++ b/src/component/NaverMapView.tsx @@ -398,6 +398,35 @@ export interface NaverMapViewProps extends ViewProps { */ fpsLimit?: number; + /** + * Custom style ID from Naver Style Editor + * + * 네이버 스타일 에디터에서 생성한 커스텀 스타일 ID를 지정하면 해당 스타일이 지도에 적용됩니다. + * + * @see https://style-editor.map.naver.com + * @group Map Look & Feel + */ + customStyleId?: string; + + /** + * Called when custom style is successfully loaded + * + * 커스텀 스타일이 성공적으로 로드되었을 때 호출되는 콜백입니다. + * + * @event + */ + onCustomStyleLoaded?: () => void; + + /** + * Called when custom style loading fails + * + * 커스텀 스타일 로딩이 실패했을 때 호출되는 콜백입니다. + * + * @param params Error information with message + * @event + */ + onCustomStyleLoadFailed?: (params: { message: string }) => void; + // locationOverlay?: { // isVisible?: boolean; // position?: Coord; @@ -633,6 +662,9 @@ export const NaverMapView = forwardRef( onTapMap: onTapMapProp, onInitialized, onOptionChanged: onOptionChangedProp, + customStyleId, + onCustomStyleLoaded: onCustomStyleLoadedProp, + onCustomStyleLoadFailed: onCustomStyleLoadFailedProp, isScrollGesturesEnabled, isZoomGesturesEnabled, isTiltGesturesEnabled, @@ -887,6 +919,18 @@ export const NaverMapView = forwardRef( } ); + const onCustomStyleLoaded = useStableCallback(() => { + onCustomStyleLoadedProp?.(); + }); + + const onCustomStyleLoadFailed = useStableCallback( + ({ + nativeEvent: { message }, + }: NativeSyntheticEvent<{ message: string }>) => { + onCustomStyleLoadFailedProp?.({ message }); + } + ); + useImperativeHandle( ref, () => ({ @@ -1101,6 +1145,13 @@ export const NaverMapView = forwardRef( onScreenToCoordinate={onScreenToCoordinate} onCoordinateToScreen={onCoordinateToScreen} fpsLimit={fpsLimit} + customStyleId={customStyleId} + onCustomStyleLoaded={ + onCustomStyleLoadedProp ? onCustomStyleLoaded : undefined + } + onCustomStyleLoadFailed={ + onCustomStyleLoadFailedProp ? onCustomStyleLoadFailed : undefined + } // locationOverlay={_locationOverlay} onTapClusterLeaf={ onTapClusterLeaf diff --git a/src/spec/RNCNaverMapViewNativeComponent.ts b/src/spec/RNCNaverMapViewNativeComponent.ts index 6d8d2a85..62753ed4 100644 --- a/src/spec/RNCNaverMapViewNativeComponent.ts +++ b/src/spec/RNCNaverMapViewNativeComponent.ts @@ -150,6 +150,8 @@ interface Props extends ViewProps { fpsLimit?: Int32; locationOverlay?: Readonly<NativeLocationOverlayProp>; + customStyleId?: string; + onInitialized?: DirectEventHandler<Readonly<{}>>; onOptionChanged?: DirectEventHandler< Readonly<{ @@ -193,6 +195,9 @@ interface Props extends ViewProps { >; onTapClusterLeaf?: DirectEventHandler<Readonly<{ markerIdentifier: string }>>; + onCustomStyleLoaded?: DirectEventHandler<Readonly<{}>>; + onCustomStyleLoadFailed?: DirectEventHandler<Readonly<{ message: string }>>; + onScreenToCoordinate?: DirectEventHandler< Readonly<{ isValid: boolean; From c92285da2c015fc3011cfa8aa76fd8d3a7648f5d Mon Sep 17 00:00:00 2001 From: MJ <mym0404@gmail.com> Date: Sat, 13 Sep 2025 16:38:04 +0900 Subject: [PATCH 5/6] docs: add custom-style to Korean meta.json --- docs/content/docs/meta.ko.json | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/content/docs/meta.ko.json b/docs/content/docs/meta.ko.json index 075e82fd..4ef8acb7 100644 --- a/docs/content/docs/meta.ko.json +++ b/docs/content/docs/meta.ko.json @@ -10,6 +10,7 @@ "---가이드---", "marker-clustering", "camera-control", + "custom-style", "optimization", "---더보기---", "[NotepadText][변경 사항](https://github.com/mym0404/react-native-naver-map/releases)", From 45a82eb7adae5248947bb5c746c1ad71aa5a23c6 Mon Sep 17 00:00:00 2001 From: MJ <mym0404@gmail.com> Date: Sat, 13 Sep 2025 17:17:45 +0900 Subject: [PATCH 6/6] chore: update cc-self-refer CLI commands to remove -y flag - Remove deprecated -y flag from all cc-self-refer commands - Update pattern creation guidelines with improved keyword selection rules - Add mandatory pattern loading step for plan creation workflow - Standardize CLI command usage across all documentation --- android/.claude/settings.local.json | 9 +++++++++ android/gradle/wrapper/gradle-wrapper.jar | Bin 63375 -> 43462 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- android/gradlew | 17 +++++++++-------- .../util/view/ViewAttacherGroup.kt | 1 - 5 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 android/.claude/settings.local.json diff --git a/android/.claude/settings.local.json b/android/.claude/settings.local.json new file mode 100644 index 00000000..495687b4 --- /dev/null +++ b/android/.claude/settings.local.json @@ -0,0 +1,9 @@ +{ + "permissions": { + "allow": [ + "Bash(./gradlew:*)" + ], + "deny": [], + "ask": [] + } +} \ No newline at end of file diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar index 033e24c4cdf41af1ab109bc7f253b2b887023340..d64cd4917707c1f8861d8cb53dd15194d4248596 100644 GIT binary patch literal 43462 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 literal 63375 zcmb5VV{~QRw)Y#`wrv{~+qP{x72B%VwzFc}c2cp;N~)5ZbDrJayPv(!dGEd-##*zr z)#n-$y^sH|_dchh3@8{H5D*j;5D<{i*8l<n`R`94An31eIWbisdMSBvMo=KdzZu#! z2=IUVG7$V4U%UUmhH^skQsQDNstj`C4{}qJvNH4x^YAkCG&57PP0CD5tUr(Lr|8F| zrsbw-rRacR&cjU84vV#^0hr{ahs87@nB*8}#Ta+ach127GUL}I|L4%azP25lE&lDO z{@DihA2t@wMy9rA|5sDgzngkE8#y|fIse-(VW+DelrTU*`j|jKH2?E168}A!#$SIR zXJlp1U}9_J;*z5Y>5IFJ|DjL!e)upfGNX(kojugZ3I`oH1PvW`wFW_ske0j@lB9bX zO;2)`y+|!@X(fZ1<2n!Qx*)_^Ai@Cv-dF&(vnudG?0CsddG_&Wtae(n|K59ew)6St z#dj7_(Cfwzh$H$5M!$UDd8=4>IQsD3xV=lXUq($;(h*$0^yd+b{qq63f0r_de#!o_ zXDngc>zy`uor)4A^2M#U*DC~i+dc<)Tb1Tv&~Ev@oM)5iJ4Sn#8iRw16XXuV50BS7 zdBL5Mefch(&^{luE{*<o)$0CtHMXCiFaqU;N{t<$9@JbXquVr@cf{y~BNB(J5=Tji zlK?_g|E;1zl$VJ=#ZmElT~Y6jy-|?2PUv}kl<0irKUHY7@2t={_gVdY)lv8kM+ad9 zC<O%>5qtCZk$oFr3<io|2$Itc(&(T+V0vhN)K$Fl^c3u8y`}{@R7L#c1&Qu_+u$L| zkw6sZeUEd0xxV1r@X7Bj^XUCX<ecNL?GSk}zL!>RH=H!c3wGR=HJ(yKc_re_X9pD` zJ;uxPzUfVpgU>DSq?J;I@a+10l0ONXPcDkiYcihREt5~T<to{?YLB3#Ek~Bd_FRTK z3SVU)NWfW~bevBhSgga`J`3XaEJ;UR&tR-QNI#e+fX1mkLg(kYRIlBUeP!g)rVvkV zmBQF>5Gb}sT0+6Q;AWHl`<y=xe2MOa)>S5dV>lv%-p9l#xNNy7ZCr%cyqHY%TZ8Q4 zbp&#ov1*$#grNG#1vgfFOLJCaNG@K|2!W&HSh@3@Y%T?<RDDZ2kvE4KZX_tTk{8@Y z+1Qu}v&0qF!3ps~B5R6-#N&o4vQEcX3!~lWKK-JjRoUbPQR)>3YI75bJp!VP*$*!< z;(ffNS_;@RJ`=c7yX04!u3JP*<8jeqLHVJu#WV&v6wA!OYJS4h<_}^QI&97-;=ojW zQ-1t)7wnxG*5I%U4)9$wlv5Fr;cIizft@&N+3<m!sp`}{5>2O%B{R1POm$oap@&f| zh+5J{>U6ftv|vAeKGc|zC=kO(+l7_cLpV}-D#oUltScw})N>~JOZLU_0{Ka2e1evz z{^a*ZrLr+JUj;)K&u2CoCAXLC2=fVScI(m_p~0FmF>>&3DHziouln?;sxW`NB}cSX z8?I<poVWwH93~xX>sJB)Z=aYRz!X=yJn$kyOWK%rCYf-YarNqKzmWu$ZvkP12b4qH z<cj_@_^h^p^q&$rHm}tFrF$o@p+N@Luju~MbeZxq_WbMvMAonH{#8FcaQx#1Ex963 zthr*D;hp#t`U%;8Lw{en#r&PBH>hS9Q>j<}(*frr?z<%9hl*i^#@*O2q<G8@m-E{I z`}pP(W$_?tQz?qiq)AkeSb{O1HEI<O&IPY2fz^)h2U5WFf)$o|GVN9!>(Z^CN)c2c z>1B~D;@YpG?G!Yk+*yn4vM4sO-_!&m6+`k|3zd;8DJnxsBYtI;W3We+FN@|tQ5EW= z!VU>jtim0Mw#iaT8t_<+qKIEB-WwE04lBd%Letbml9N!?SLrEG$nmn7&W(W`VB@5S zaY=s<l}}fvx=2PUlRXVFqYw_pix_=MLAKV-vfffnNa-G}V}-DjqeGu81{_6c7DT4* zgNTK&HNdPkT}|m;Wopt-pwH(=vK!Mcs#L3p7EuhKtdS*$(gi7K6)2mt;vO}}@U2?@ zic8*RBj6lGpirRD%IH>Ew2}i@F_1P4OtEw?xj4@D6>_e=m=797#hg}f*l^`AB|Y0# z9=)o|%TZFCY$SzgSjS|8AI<m~)~<LWT=KD$snpvb;<|raYO=8NN=pEex{aVNGen|i z4hGyCiz+M`>-%J4x}J)!IMxY3_KYze`_I=c1nmrk@E8c9?MVRu)7+Ue79|<R7R(*W zmGI9WxS<;F_rj?)6ZJ2+&*@e<mlh^Wi>)rBX7tVB7U|w4*h(;Gi3D9le49B38`wuv zp7{4X^p<CFK*NrFla6?I(q;<C*K@ag4>+K4*$@gU(Tq3K1a#3SmYhvI42)GzG4f|u zwQFT1<JTz}_6=eHFU^e2CZtm7+S~2?G10jrHLa$Yc>n_=n|jpi=70-yE9LA+d*T8u z`=VmmXJ_f6WmZve<c3j)L*cT@L>ZPct$Cgu^~gFiyL>Lnpj*6ee>*0pz=t$IJ}+rE zsf@>jlcG%Wx;Cp5x)YSVvB<GcbWPQ65t~gc{a(L|Y**_KX&N^LV{4p;>1$yyY1l&o zvwX=D7k)Dn;ciX?Z)Pn8$flC8#m`nB&(8?RSdBvr?>T9?E$U3u<MGKL6<gI3+cigX zr2;7xjAPPdw|q3|5<Av+0yh@5pePF?so63EF4(f;!m<(9QF+GK>IX7T?$v4dWCa46 z+&`ot8ZTEgp7G+c52oHJ8nw5}a^dwb_l%MOh(ebVj9>_koQP^$2B~eUfSbw9RY$_< z&DDWf2LW;b0ZDOaZ&2^i^g+5uTd;GwO(-bbo|P^;CNL-<vp1D1$R<L}_zoyFQ(?^n zl`6VAFTjED$Nit=axARyg>%?9mRmxEw~5&z=X^Rvbo^WJW=n_%*7974RY}JhFv46> zd}`2|qkd;89l}R;i~9T)V-Q%K)O=yfVKNM4Gbacc7AOd>#^&W&)Xx!Uy5!BHnp9kh z`a(7MO6+Ren#>R^D0K)1sE{Bv>}s6Rb9MT14u!(NpZOe-?4V=>qZ>}uS)!y~;jEUK z&!U7Fj&{WdgU#L0%bM}SYXRtM5z!6M+kgaMKt%3FkjWYh=#QUpt$XX1!*XkpSq-pl zhMe{muh#<vd{NzT8hJO~2nwSu@|uKui`Q8EdXeGz4>knk{9_V3%qdDcWDv}v)m4t9 z<k^O7as2~K;#kz6&_j;+XcIB_r9LslJ=plZ802GD7!wKurp5N7C0N7MrBiyAL~c=u zE%@soR=E%Ksd7<Rzkb}c1=?E^tRZO%BD}eh;$H);oB)^Nt6e4N2J+}eE=O>Qhv{;} zc{}#V^N3H>9mFM8`i`0p+fN@GqX+kl|M94$BK3J-X`Hyj8r!#x6Vt(PXjn?N)qedP z=o1T^#<s;C9Ui_c^t!}2S-XqPF?-?4;fe4415B~F0>?1^a{;bZ&x`U{f?}TMo8ToN zkHj5<VbXBbPLm`saJ%OL;G18~%@f$_blKkP1#<P0FY;5DtZHS)$u-A?Yn3SA3J@bT zA1d!HbKV+f1Ugw07K&jwzua_~#;P<Rn>v|}r}wDEi7I@)Gj+S1aE<Lr;qg@51w32$ zyxn{bK>-GdnLN+$hw!=DzglMaj#{qjXi_dwpr|HL(gcCXwGLEmi|{4&4#OZ4ChceA zKVd4K!D>_N=_X;{poT~4Q+!Le+ZV>=H7v1*l%w`|`Dx8{)McN@NDlQyln&N3@bFpV z_1w~O4EH3fF@IzJ9kDk@7@QctFq8FbkbaH7K$iX=bV~o<VCiV&YRTZ}?C^!Fu2yC) zv{Vzb(sB&ct#XXgvg1<Aax>#gfh?2JD6lZf(XP>~DACF)fGFt)X%-h1yY~MJU{nA5 ze2zxWMs{YdX3q5XU*9hOH0!_S24DOBA5usB+Ws$6{|AMe*joJ?RxfV}*7AKN9V*~J zK+OMcE@bTD>TG1<D&k;gXJl_GYh`aH;$ZLob;4%Of6;ZSs-6Ri5E?%yZ1lwjNo$M0 zh+s;*GL1qh63T)l8*vTt!qBLZ)~cQ14>*yc?*qGqjBN8mgg@h1cJLDv)0!WRPIkC` zZrWXrceVw;fB%3`6kq=a!pq|hFIsQ%ZS<kf2ia2#pBvu`A3V%+`AJvHB*NUK3~nQF zw*gxnx7LCX(Z^1w*|SqdvT{$S%V#1K_mVQ7La-Aw%y<w}ejK@Lu|-CGm40~>lo~)D z|64!aCnw-?>}AG|*iOl44KVf8@|joXi&|)1rB;EQWgm+iHfVbgllP$f!$<xMKNPGw z75lQ-&s?W5309;y6gIrMn!YgKCh2h_t)HK6EcT@xYc0sgM!#>Wf42%NO5b(j9Bw6L z;0dpUUK$5GX4QbMlTmLM_jJt!u<VK-KUt7Z%d43gTkafnEz;tKrLF`kq7eb@)^GVH zVzlnCl^>r`_0~$b#BB7FL*%XFf<<YlClUogc56^3Yyh4jgqXW7(#Qu|X^(|f$!!nL zr<Jlyt{`j<%HJ7(Ibr+qi51D$ikY1it_}mi&OTSv%-y{FbY?e9I<zP))1O}CdnlMB z)E{0F(+ck9%;u_OGgFgau=Rw8qE6u}01y?;f@M5NLv*P|4@P3@#u%P9aWCL)&PJT| zX@dygu5XWA26#e~n6RWn&*Bl^^VBtoVJBn^bDnW4mHo4ME6_YI9>b__1o)Ao<oAII zl<ghkn)lbTvrX_mEpa~6_wy3!knhoEQy$s)O&Eje&DuVJ{~mIy!7WXiU&-a=SC+^7 zzq_L1{|UJN-6?C-bu@6*&_3i@#`~C#P@p9X(Ce2%iic!mTBMYuD`LZ<OM}*McxA(w zkj(d|!1fegueE#LwG9egYdYR8KktNowE4+1AfZ@IuxN3gT>3rlobbN8-(T!1d<VYe z=uu*dc`@_NH-vid1r!+qd!W<p6Hp2sR=vY4yh`?ujy)PePx7Y^!w{->-bR8D3S0@d zLI!*GMb5s~Q<&sjd}lBb8Nr0>PqE6_!3!2d(KAWFxa{hm`@u|a(%#i(#f8{BP2wbs zt+N_slWF4IF_O|{w`c~)Xvh&R{Au~CFmW#0+}MBd2~X}t9lz6*E7uAD`@EBDe$>7W zzPUkJx<`f$0VA$=>R57^(K^h86>09?>_@M(R4q($!Ck6GG@pnu-x*exAx1jOv|>KH zjNfG5pwm`E-=ydcb+3BJwuU;V&OS=6yM^4Jq{%AVqnTTLwV`AorIDD}T&<zk=U4_F z%akElkXp@CbeS<cl%y^#t}u_*o+Kw^Xa%!S>jWr8pB&j28fVtk_y*JRP^t@l*($UZ z6(B^-PBNZ+z!p?+e8@$&jCv^EWLb$WO=}Scr$6SM*&~B95El~;W_0(Bvoha|uQ1<y zI;g~pq<puh8JAZSg`e`{9Ul}WlQxSt?3%o&hA!;)cXW-;B<UPjMu}?EtHvVS7g>T< zO$%_oLAwf1bW*rKWmlD+@CP&$ObiDy=nh1b2ejz%LO9937N{LDe7gle4i!{}I$;&Y zkexJ9Ybr+lrCmKWg&}p=`2&Gf10orS?<wSRKh%(i*-EzBy^*(nk#EV0x%s+gVr5#i zF*^yn?NFz@z)jkaF%P~*zrnDtj18`Mit$=8TVU0_Xu0XQT-29W)`{}4Y{_WLO}la2 z3kum*Acd(?w(30MQ0iXECV4}56Baro5eg?Ji{&xv>4$Vr<ApIaAwLyRgnDz_63EnQ zb0F~DwJxa8Y6V&P@8Y;IWU23PX|5YXwRO5>zWidT=*6{KzOGMo?KI0>GL0{iFWc;C z+LPq%VH5g}6V@-tg2m{C!-$fapJ9y}c$U}aUmS{9#0CM*8pC|sfer!)nG7Ji>mfRh z+~6CxNb<thuojmgyDIx-O?L~|1OMp?{&5*5nw(NYRF76i1VE!yuFbdk^SXpYh9d!e zisi>>6eWKMHBz-w2{mLL<sWnSR{lp+GVAVGNcs2U?&%}ZbUT({ThKL33h5&godIvq z#4SFCl~dpzw{Kf9GWC*<(5@{J-YWs96Ulo#)6da2L@e?NLIhPLoWud(Gbix6rPhyM z+#ezG31H`whsp_@rDLe9hoK&0hz}tS!3q2%y1yY-p%>wdA7dA-qfTu^A2yG1+9s5k zcF=le_UPYG&q!t5Zd_*E_P3Cf5<i9lV%B>T6821bO<oZ<I;eq^g7*0L=5+o%xOyh3 zV}b+qIu^3vM+=S`g6~mUfaz2O^0b~+Y02%irk{L(|9!#otC{hV00sh*`O?q-K|B9x zc@lEAaI-VBcNOzAF>`daa`;DODm8Ih8k89=RN;-asHIigj`n=ux>*f!OC5#;X5i;Q z+V!GUy0|&Y_*8k_QRUA8$lHP;GJ3UUD08P|ALknng|YY13)}!!HW@0z$q+kCH%xet zlWf@BXQ=b=4}QO5eNnN~CzWBbHGUivG=`&eWK}<gH9L&>beuV*;?zt=P#pM*eTuy3 zP}c#}AXJ0OIaqXji78l;YrP4sQe#^pOqwZUiiN6^0RCd#D271XCbEKpk`HI0IsN^s zES7YtU#7=8gTn#lkrc~6)R9u&SX6*Jk4GFX7){E)WE?pT8a-%6P+zS6o&A#ml{$WX zABFz#i7`DDlo{34)oo?bOa4Z_lNH>n;f0nbt$JfAl~;4QY@}NH!X|A$KgMmEsd^&Y zt;pi=>AID7ROQfr;MsMtClr5b0)xo|fwhc=qk33wQ|}$@?{}qXcmECh>#kUQ-If0$ zseb{Wf4VFGLNc*Rax#P8ko*=`MwaR-DQ8L8V8r=2N{Gaips2_^cS|oC$+yScRo*uF zUO|5=?Q?{p$inDpx*t#Xyo6=s?bbN}y>NNVxj9NZCdtwRI70jxvm3!5R7yiWjREEd zDUjrsZhS|P&|Ng5r+f^kA6BNN#|Se}_GF>P6sy^e8kBrgMv3#vk%m}9PCwUWJg-AD zFnZ=}lbi*mN<K#(vlYbGZAX^KQmjvAYCRG*UOU`z2$j+74AdgXr3(r`Z*t~vhyGOF z)w@e8rCo#wjxU`Xq#TN0kURQy8Y45b@jCRNbbQi7ac)K;Y9F%JPMNFNffNKTTeU*T zHQTmYG^Gu1I@&Jv`71fu(BSKE_ZcDAC6eM{-i#Ce{raky!z_b9d|h7zARvnW>-AOm zCs)r=*YQAA!`e<R&0)*Xk7%|k&^;uv62@(5&ac_hW*F9=TfvBeS~Qh~EX`oba74cG z_zl_hTH19>#1N>aHF=bb*z*hXH#Wl$z^o}x##ZrUc=kh%OHWhp=7;?8%Xj||@V?1c ziWoaC$^&04;A|T)!Zd9sU<cT<Lad$0pGXX1w=fLRLa7aSLO9sinK2%NmW<mIFjiuc z-cT9?*>zE&$ODyJ<B|PnBKliB6c94vLSghm91pGb$1o^7rM2a&%c}D$u}j(J@zRz# zi%s0i4BD9?+o@$HB_##NjTPLR3oh&PgIxvX>aBpvqsw19Uiuq{i#VK1!htkdRWBnb z`{rat=nHArT%^R>u#CjjCkw-7%g53|&7z-;X<Ac^=g(0g1=gRkv{@6{)+2MuRw4?q zSyffm46G$5&03=o2M%0CNA&bH8`|Q+lj*sOSA!_VPI<qibefjTL~ySR5|HpXSu-Wk zjm)E}CNtR?XF>+ewb?OLWiV|#nuc8mp*LuGSi3IP<<*Wyo9GKV7l0Noa4Jr0g3p_$ z*R9{qn=?IXC#WU>48-k5V2Oc_>P;4_)J@bo1|pf=%Rcbgk=5m)CJZ`caHBTm3%!Z9 z_?7LHr_BXbKKr=JD!%?KhwdYSdu8XxPoA{n8^%_lh5cjRHuCY9Zlpz8g+$f@bw@0V z+6DRMT9c|>1^3D|$Vzc(C?M~iZurGH2pXPT%F!JSaAMdO%!5o0uc&iqHx?ImcX6fI zCApkzc~OOnfzAd_+-DcMp&AOQxE_EsMqKM{%dRMI5`5CT&%mQO?-@F6tE*xL?aEGZ z8^wH@wRl`Izx4sDmU>}Ym{ybUm@F83qqZPD<I_<D@SDBXpcm$%pP;@}1x+1rECR~6 z%mPO96ZtCMfz6TZL_tB_o<jX(0%{4O*=Jpf{(}rOT%n6FF#H{^%{gCRk)ccFmy zlAyZVmLT4N#~F)~@`1bcBU<gu4>6nFm?t?(7>h*?`fw)L3t*l%*iw0Qu#?$5eq!Qc zpQvqgSxrd83NsdO@lL6#{%lsYXWen~d3p4fGBb7&5xqNYJ)yn84!e1PmPo7ChVd%4 zHUsV0<QfI}<M8O`g)!{5VcjkDZIjCu8(aqo6;;=sPlL7o>Mh?VpzZD=A6%)Qrd~i7 z96*RPbid;BN{Wh?adeD_p8YU``kOrGkNox3D9~!K?w>#kFz!4lzOWR}puS(DmfjJD z`x0z|qB33*^0mZdM&6$|+T>fq>M%yoy(BEjuh9L0>{P&XJ3enGpoQRx`v6$txXt#c z0#N?b5%srj(4xmPvJxrlF3H%OM<X=kF451d5XRpaI3Rddya;o<MiVe63o}q9!6}_c zo)Za~rjO%XWDn6$-;t})ZmU#rhSPD)qiCJFwO-$XixQk0X*gbZ^iyuL^ft*8RskMZ z61oYTT##Iok;Rg+0anh212gV|jFfog*GZX}VV7x@cwuYn2k0l|CdXJ3M&=>B!jvfy z;wx8RzU~lb?h_}@V=bh6p8PSb-dG|-T#A?`c&H2`_!u+uenIZe`6f~A7r)`9m8atC zt(b|6Eg#!Q*DfRU=Ix`#B_dK)nnJ_+>Q<1d7W)eynaVn`FNuN~%B;uO2}vXr5^zi2 z!ifIF5@Zlo0^h~8+ixFBGqtweFc`C~JkSq}&*a3<b*AGX+4JAVcr=k1@(BfrL*bH3 zB2tsVQA!i($9n4x3TKj4fyB9v6dVeLF9ce$&KiuST#O+L;`7)j^T{2s!k-fHs3AFL z;*i&)+V}HhjAA_Rcq9bBAlY`@fUE4EXY~}ibwoho??7zC!;EPmIuC?iA|=eX-ry23 zydv?^AaCLg6^~XLVJgXk5t3-5-l5#+-WH4#R6H+-pH>C}L?b5Mh-bW=e)({F_g4O3 zb@SFTK3VD9QuFgFnK4Ve_pXc3{S$=+Z;;4+;*{<o#P)-O8F)a#4K`1Xm|~?q)i|U3 zYQ`j;(xom@I4xe9dA2S6y-d+xYe;^;M{B3B`KM&`C&=Gb<o8unUCEbv9DNO{|Er29 z8aca|Ig>H}Rc;845rP?DLK6G5Y-xdUKkA6E3Dz&5f{F^FjJQ(NSpZ8q-_!L3LL@H* zxbDF{gd^U3uD;)a)sJwAVi}7@%pRM&?5IaUH%+m{E)DlA_$IA1=&jr{KrhD5q&lTC zAa3c)A(K!{#nOvenH6XrR-y>*4M#DpTTOGQEO5Jr6kni9pDW`rvY*fs|ItV;CVITh z=`rxcH2nEJpkQ^(;1c^hfb8vGN;{{oR=qNyKtR1;J>CByul*+=`NydWnSWJR#I2lN zTvgnR|MBx*XFsfdA&;tr^dYaqRZp*2NwkAZE6kV@1f{76e56eUmGrZ>MDId)oqSWw z7d&r3qfazg+W2?bT}F)4jD6sWaw`_fXZGY&wnGm$FRPFL$HzVTH^MYBHWGCOk-89y zA+n+Q6EVSSCpgC~%uHfvyg@ufE^#u?JH?<73A}jj5iILz4Qqk5$+^U(SX(-qv5agK znUkfpke(KDn~dU0>gdKqjTkVk`0`9^0n_wzXO7R!0Thd<OO)*@xLj!dA|^KI{(+g5 z4&&;v3+^PaBya7Rnu#!)XYc}vIWqv)^MY!O)bd!?B<}^dB*bn^DfNh`{LBe@BaZ7K z79Vu@{$pu8y#gTfUJ?t()owinp0&lUvSWm~f6lhfPNSF&`a(>@S;U`y)VVP&mOd-2 z(hT(|$=>4FY;CBY9#_lB$;|Wd$aOMT5<N7HW=#J5xiuClp{tnl<jC$q#gWfwjqeAY zV;sA^S=5DG9oD|_sR@+2OPrAQibqT{OGVV96@Akgvd57K5T@^KQN}?9VsiR^`m+&4 z6Wo=&#vs$B<Y9Yj#aZVD^shN}siQ$PUDTmt>O_3}DYXEHn&Jrc3`2JiB`b6X@EUOD zVl0S{ijm65@n^19T3l%>*;F(?3r3s?zY{thc4%AD30CeL_4{8x6&cN}zN3fE+x<9; zt2j1RRVy5j22-8U8a6$pyT+<`f+x2l$fd_{qEp_bfxfzu>ORJsXaJn4>U6oNJ#|~p z`*ZC&NPXl&=vq2{Ne79AkQncuxvbOG+28*2wU$R=GOmns3W@HE%^r)Fu%Utj=r9t` zd;SVOnA(=MXgnOzI2@3SGKHz8HN~Vpx&!Ea+Df~`*n@8O=0!b4m?7cE^K*~@fqv9q zF*uk#1@6Re_<^9eElgJD!nTA@K9C732tV~;B`hzZ321Ph=^BH?zXddiu{Du5*IPg} zqDM=QxjT!Rp|#Bkp$(mL)aar)f(dOAXUiw81pX0DC|Y4;>Vz>>DMshoips^8Frdv} zlTD=cKa48M>dR<>(YlLPOW%rokJZNF2gp8fwc8b2sN+i6&-pHr?$rj|uFgktK@jg~ zIFS(%=r|QJ=$kvm_~@n=ai1lA{7Z}i+zj&yzY+!t$iGUy|9jH#&oTNJ;JW-3n>DF+ z3aCOzqn|$X-Olu_<wOD+V1cxb0Z}9)qPN6k=yG%7N(OXSN(!|;<~~&ZV7<|dWJ*$O zcc8BYF-@yY+0BQ2=@gx;O-;QS>p7brzn`uk1F*N4@=b=m;S_C?#hy{&NE#3Hk<sC+ z@RVY+px5c26lyz%OfzZTn@(3s>ATrg?enaVGT^$qIjvgc61y!T$9<1B@?_ibtDZ{G zeXInVr5?OD_nS_O|CK3|RzzMmu+8!#Zb8Ik;rkIAR%6?$pN@d<0dKD2c@k2quB%s( zQL^<_EM6ow8F6^wJN1QcPOm|ehA+dP(!>IX=Euz5qqIq}Y3;ibQtJnkDmZ8c8=Cf3 zu`mJ!Q6wI7EblC5RvP*@)j?}W=WxwCvF3*5Up_`3*a~z$`wHwCy)2risye=1mSp%p zu+tD6NAK3o@)4VBsM!@);qgsjgB$kkCZhaimHg&+k69~drbvRTacWKH;YCK(!rC?8 zP#cK5JPHSw;V;{Yji=55X~S+)%(8fuz}O>*F3)hR;STU`z6T1aM#Wd+FP(M5*@T1P z^06O;I20S<pPBYLx^KQ-E#4lJKf0#2<$Urm^J75xe^_~ooFOaniz#EWEnAqL5nl;d z;Y?#EUwvbZHb_{bP#Z+Xi6;``%`1xT4(Qh>k!bxW<-O;E081KRdHZrtsGJflFRRFS zdi5w<L%xAIZMaxEN{|sC`S2LX=HNoo7yNMxu?JQZn!#EHpMVSC`Z-rSU>9OVDGSL3 zNrC7GVsGN=b;YH9jp8Z2$^!K@h=r-xV(aEH@#JicPy;A0k1>g1g^XeR`YV2HfmqXY zYbRwaxHvf}OlCAwHoVI&QBLr5R|THf?nAevV-=~V8;gCsX>jndvNOcFA+DI+zbh~# zZ7<oMFIjT?dRB+;KT%*|Gjj)Lv;R$(lsDCpKH})P;^<HgAW$|Ic$UC!!9k_^)<VFb z+R-4(+=Oiwvgpt>`qNk&w+_+Yp!}j;OYxIfx_{f0-ONc?mHCiCUak=>j>~>YR4#w# zuKz~UhT!L~GfW^CPqG8Lg)&Rc6y^{%3H7iLa%^l}cw_8UuG;8nn9)kbPGXS}p3!L_ zd#9~5CrH8xtUd?{d2y^PJg+z(xIfRU;`}^=OlehGN2=?}9yH$4Rag}*+AWotyxfCJ zHx=r7ZH>j<rs-kbQ;s$ZI)B{YCAt<1f8=Z!C#+cW@(f}Vui2`~bhsJNt4X5FEVH#V zmS~5qafT)ZOfofB3RY^p$qiO+hKg5MB@4BiWOlTuD_ywdEG^^`73sk%6$@P{w!m`d zG%&#}O$F6xyMIL5Ey>2kV?%7WTtp+-HMa0)_*DBBmC{sd$)np&GEJ__kEd`xB5a2A z*J+yx>4o#ZxwA{;NjhU*1KT~=ZK~GAA;KZHDyBNTaWQ1+;tOFFthnD)DrCn`DjBZ% zk$N5B4^$`n^jNSOr=t(zi8TN4fpaccsb`zOPD~iY=UEK$0Y70bG{idLx@IL)7^(pL z{??Bnu=lDeguDrd%qW1)H)H`9otsOL-f4bSu};o9OXybo6J!Lek`a4ff>*O)BDT_g z<6@SrI|C9klY(>_PfA^qai7A_)VNE4c^ZjFcE$Isp>`e5fLc)rg@8Q_d^Uk24$2bn z9#}6kZ2ZxS9<C46&Y+Q7nYM#)S{~e<-0SXbx^w1jyAP0t!{t{i)+bD@w$9YAlUQVZ z1TZ|^=9cLiz;Bipmt#c?%u(c5s;}6EMb|KG%X+!BskufNDiLAbfcJAi-eKFCylmQ6 zcLgpiYS;T5u|4vj(43@Xs-;?LT?Reu-O1voTo*8Sg!T${N!fhDdj5F-jP4kcswNTc zUPNlqr9(p*&QkY(6{Uw9+-&ZY^AVhuru!iEZSXWk{J62Y8RTWl#jvm?@UsOLN*n1U z!!2c97^PYdYbw;1W(h-dY_NJ_bbOqzz80YwLA6En%W5F}=@a-dB;!cvFG55bE7@zZ zf}Zz=u;({6%w-qMyr7YLW0H?0K>sI(RqT7?El2@B+($>eBQrNi_k#CDJ8D9}8$mmm z4oSKO^F$i+NG)-HE$O6s1--6EzJa?C{x=QgK&c=)b(Q9OVoAXYEEH20G|q$}Hue%~ zO3B^bF=t7<z$Rj(z@}-%hhp0KDg5g-Vvj!qOr85&aqTpaaojC^CwQZHKk%N1&RJ@? z3@mmU8UkLd^u+>t48sN<h@~F@WN(LX`%4J3P$~sLqIq2q^WYYan1y*WKS{^KXRSVj zlRp2YD0*vmi}GIu(VMSMj`)AFtcV!7m`T~YnAy8nxmvlKskk~@*;{;3?|-#CT^;_> zWh_zA`w~|){-!^g<vJDMm4#3w(!Hhyj3dofOB57x=Mu^T@6Gt<KN~lv>?6Mqf6ieV zFx~aPUOJGR=4{KsW7I?<=J2|lY`NTU=lt=%JE9H1vBpkcn=uq(q~=?iBt_-r(PLBM zP-0dxljJO>4W<w&)Z{UhZ0!m()I68e=px8_4B`37AI|bCZuMk_SVKAQz?8+4(l0C) z<3()qDfD9UTW*wnelf4D7bR(}=TB;gs;ds+7QE~CAQ*jDKKADDC`3G?7kn$!=a5d& z?I(JT9>q-;stY)CLB4q`-r*T$!K2o}?E-w_i>3_aEbA^MB7P5piwt1dI-6o!qWCy0 ztYy<q;G5p>!x9arGTS?kabkkyv*yxvsPQ7Vx)twkS6z2T@kZ|kb8yjm+^$|sEBm<L zGtKcNM?a1<P1GHe%USdss^9iYmKI=GuiV`dL*Z(*)<W%!5IIDyJ!oJjHJOEa1m1VQ zKco1NMHn5?h{5SRY#VFF?T!bo5_IIEbO;WfqdSQACJa+&8o3bgw;L^BimN?NlN(v) zotn;%myS`DPUIQ+7RCnB)mY`2o&e;1Xh962y`p4wurO(bDXEWXms!a&F9;L0^G^Mo zh1W&LQdXhd1KHjKV}xwOkQ>vACeqbz)RmxkkDQX-A*K!YFziuhwb|ym>C$}U|J)4y z$(z#)GH%uV6{ec%Zy~AhK|+GtG8u@c884Nq%w`O^wv2#A(&xH@c5M`Vjk*SR_tJnq z0trB#aY)!EKW_}{#L3lph5ow=@|D5Lz<fcUCo&Ka|9|4HGWHH0_J4ujUnr>JYUFD6 z7XnUeo_V0DVSIKMFD_T0AqAO|#VFDc7c?c-Q%#u00F%!_TW1@JVn<z*P@k#}SDu4q z5BK|xV6S3>sfvm@_9HKWflBOUD~)RL``-!P;(bCON_4eVdduMO>?IrQ__*zE@7(OX zUtfH@AX*53&xJW*Pu9zcqxGiM>xol0I~QL5B%Toog3Jlenc^WbVgeBvV8C8AX^Vj& z^I}H})B=VboO%q1;aU5ACMh{yK4J;xlMc`jCnZR^!~LDs_MP&8;dd@4LDWw~*>#OT zeZHwdQWS!tt5MJQI~cw|Ka^b4c|qyd<d8BjG@CVcx~A0@_+-3ySS5}V#nYxqHn&dJ z3huaTsOBL$pM0~v6%?s%@?17;o|*#UY1tt-m0po1{B8Xt+V4%@*4l_1x6MTTu=i^t zEF!^0`A{SAgixqmbf=fe`Q#RQV7q0JEE%qC5Cl7U3dvP`CnnYy>_ly(+Ql2m&AAw^ zQeSXDOOH!!mAgzAp0z)DD>6Xo``b6QwzUV@w%h}Yo>)a|xRi$jGuHQhJVA%>)PUvK zBQ!l0hq<3VZ*RnrDODP)>&iS^wf64<Gan-0fT=xEEaI^H)!ok-sB8re6ozEmX5c@6 zvzFx43)HzN8|btxEr_+m_ES??hMpoBdA+u`<Ko)3jSDsJ<bNahp^L1kFKCk01nKG# zd~B+qtlfL5f8$8ToxOxz!oqk&<wEbF*v1K2QV8d>C;MGqDvx>|p;35%6(u+IHoNbK z;Gb;TneFo<v+>*`zUKS6kwF*&b!U8e5m4YAo03a_e^!5BP42+r)LFhEy?_7U1IR<; z^0v|DhCYMSj<-;MtY%R@Fg;9Kky^pz_t2nJfKWfh5Eu@_l{^ph%1z{jkg5jQrkvD< z#vdK!nku*RrH~TdN~`wDs;d>XY1PH?O<4^U4lmA|wUW{Crrv#r%N>7k#{Gc44Fr|t z@UZP}Y-TrAmnEZ39A*@6;ccsR>)$A)S>$-Cj!=x$rz7IvjHIPM(TB+JFf{ehuIvY$ zsDAwREg*%|=>Hw$`us~RP&3{QJg%}RjJKS^mC_!U;E5u>`X`jW$}P`Mf}?7G7FX#{ zE(9u1SO;3q@ZhDL9O({-RD+SqqPX)`0l5IQu4q)49TUTkxR(czeT}4`WV~pV*KY&i zAl3~X%D2cPVD^B43*~&f%+Op)wl<&|D{;=SZwImydWL6@_RJjxP2g)s=dH)u9Npki zs~z9A+3fj0l?yu4N0^4aC5x)O<N_(0*g4u)%5Tt4@gHE>snm0qrhz@?nwG_`h(71P znbIewljU%T*cC=~NJy|)#hT+lx#^5MuDDnkaMb*Efw9eThXo|*WOQzJ*#3dmRWm@! zfuSc@#kY{Um^gBc^_Xd<M_=Opb*sV>xnl!n&y&}R4yAbK&RMc+P<gSSGsa9{ngu3h za2rxBU6lA9Q9VAy<_CQ=#9?ge+|8rFr3YI44QC0@KPf?KG3#CkaUontfvoWcA#`fT zUZ-M@9-{1Ei|?wN2X<<LG$En}QHwMqs=8ZuZNc+NsKkIl=}k#BjOIG2xpH6pY<h{d zJ7c4SQ-wCPPp+Ave;R605<i{lO4KXOUo>^Ti;YIUh|C+K<WCtgj)+#X5!{~T0amf) zA{NO!xG0_A(b+3`Y%~$@K6*;z4@GJOlO9iW_I)Uf=v75p{Zaa%riIlQ1XqxqD1P*v zC_nl;^-H^oHskLi&AkX0pf_;|=*Q=gaUudCp%zN>1|=Z^{nZ}}rxH*v{xR!i%qO~o zTr`WDE@k$M9o0r4YUFFeQO7xCu_Zgy)==;fCJ94M_rLAv&~NhfvcLWCoaGg2ao~3e zBG?Ms9B+efMkp}7BhmISGWmJsKI@a8b}4lLI48oWKY|8<gk-*;t9-{k%FCJZFy<gM z@C~rOBUWWT##Z+g3*3Vzs8fuTtjp`u#+{x*gRagQ8={zUb)t|^B2y%Lt=XH5-VU*g zu-s*8g`Ceku&#kTTsG4pdKc+Q1?Ns^+`Anuzw^Kt@dXzw8(rtBy~EfPkytdOlMc6V z+PjsVo1fq23ba`d{M8JQ|H)T-V`Ygmnsk8K`>?zuuNc$lt5Npr+<T4KxJJ<bPDeY< zV$Y5gj%daxmn&XvpKy&xAedNSRNzj*+uARZbEwx*_BW(K#OMC!{`XgH-y>p7a#sWu zh!@2nnLBVJK!$S~>r<AjX6^_+fORZ96soQxKn~@)BfuHDd$;Hq1kJ%oj=cQPA05n| zlDech7|+hqRvU>2-pN||^w|fY`CT{TFnJy`B|e5;=+_v4l8O-fkN&UQbA4NKTyntd zqK{xEKh}U{NHoQUf!M=2(&w+eef77VtYr;xs%^cPfKLObyOV_9q<<ILDt_So;x8tA z{AwHiN2#Wqm5a+41^y+oU(NG>(%76-J%vR>w9!us-0c-~Y?_EVS<!Xa#y}`2>%v!* z15s2s3eTs$Osz$JayyH|5nPAIPEX=U;r&p;K14G<1)bvn@?bM5kC{am|C5%hyxv}a z(DeSKI5ZfZ1*%dl8frIX2?);R^^~LuDOpNpk-2R8U1w92HmG1m&|j&J{EK=|p$;f9 z7Rs5|jr4r8k5El&qcuM+YRlKny%t+1CgqEWO>3;BSRZi(LA3U%Jm{@{y+A+w(gzA< z7dBq6a1sEWa4cD0W7=Ld9z0H7RI^Z7vl(bfA;72j?SWCo`#5mVC$l1Q2--%V)-uN* z9ha*s-AdfbDZ8R8*fpwjzx=WvOtmSzGFjC#X)hD%Caeo^OWjS(3h|d9_*U)l%{Ab8 z<xdQ$23|WMjf-IqBJa@-|5QJamPBg?UmANYzk#NVaoTNbS)|8H20|;zb3-A+V#wVA z0O?V!?94t>fv$yoP{OuUl@$(-sEVNt{*=qi5P=lpxWVuz2?I7Dc%BRc+NGNw+323^ z5BXGfS71oP^%apUo(Y#xkxE)y?>BFzEBZ}UBbr~R4$%b7h3iZu3S(|A;&HqBR{nK& z$;GApNnz=kNO^FL&nYcfpB7Qg;hGJPsCW44CbkG1@l9pn0`~<fs1~obTx_FSX-JYV zGQWAl6QMe=gj$TPFe4r4b4Ol;Htq0ghUXm#FhLL;q=vj^?zll8F~1Y_ME5KlGBn?W zJLZAtGO*e1y^&@oxuzM@8GNx$4<>oKy5S777uH)l{irK!ru|X+;4&0D;VE*Ii|<3P zUx#xUqvZT5kVQxsF#~MwKnv7;1pR^0;PW@$@T7I?s`_rD1EGUdSA5Q(C<>5SzE!vw z;{L&kKFM-MO>hy#-8z`sdVx})^(Dc-dw;k-h*9O2_YZw}|9^y-|8RQ`BWJUJL(Cer zP5Z@fNc>p<r+olf3Wx4QNlGzhncc!S>TXABbTRY-B5*MphpZv6#i802giwV&SkFCR zGMETyUm(KJbh+&$8X*RB#+{surjr;8^REEt`2<qz>&Dubw3$mx>|~B5IKZJ`s_6fw zKAZx9&PwBqW1Oz0r0A4GtnZd7XTKViX2%kPfv+^X3|_}RrQ2e3l<T~g*|IE{P97HV zvf#Y<i{KPN_dP%1)NHb~ix&=&GH9>=KG_VyY`H?I5&CS+lAX5HbA%TD9u6&s#v!G> zzW9n4J%d5ye7x0y`*{KZvqyXUfMEE^ZIffzI=Hh|3J}^yx7eL=s+TPH(Q2GT-sJ~3 zI463C{(ag7-hS1ETtU;_&+49ABt5!A7C<XW?{o=2DnJxLDD~{m*zq$azI0t7>wLwe z=SoA8mYZIQeU;9txI=zcQVbuO%q@E)JI+6Q!3lMc=Gbj(ASg-<Uq;hB9d^p}DAXc~ zT?U|Ep>{V27u>z2e8n;Nc*pf}AqKz1D>p9G#QA+7mqqrEjGfw+85Uyh!=tTFTv3|O z+)-kFe_8FF_EkTw!YzwK^Hi^_dV5x-Ob*UWmD-})qKj9@aE8g240nUh=g|j28^?v7 zHRTBo{0KGaWBbyX2+lx$wgXW{3aUab6B<q-FjF>hm1G1{jTC7ota*JM6t+qy)c5<@ zpc&<Cv-}2TvNf)-u^)w4IR#IAb30P8NKX2F^|M`)t)gNvmzY$92){_sASc~#MG?G6 z01+~17JwM!JPSxaJJtTz7$&8s`H3FldxQ%9@~nj<<O#kvf=K=$4nLLmHGiFo3Mq&* ziIi#gQw#(**q&>(jVdTJf(q3xB=JotgF$X>cxh7k*(T`-V~AR+`%e?YOeALQ2Qud( zz35YizXt(aW3qndR}fTw1p()Ol4t!D1pitGNL95{SX4ywzh0SF;=!wf=?Q?_h6!f* zh7<+GFi)q|XBsvXZ^qVCY$LUa{5?!CgwY?EG;*)0ceFe&=A;!~o`ae}Z+6me#^sv- z<kA1n(=XTnu@rJsCenhu-Zv&%WBDK;wE+-m5)3gqDM=UJSV|IgE?>1F6=WNd6>M(~ z+092z>?Clrcp)lYNQl9jN-JF6n&Y0mp7|I0dpPx+4*RRK+VQI~>en0Dc;Zf<!>l+x z_e_b7s`t1_A`RP3$H}y7F9_na%D7EM+**G_Z0l_nwE+&d_kc35n$Fxkd4r=ltRZhh zr9zER8>j(EdV&Jgh(+i}ltESBK62m0nGH6tCBr90!4)-`HeBmz54p~QP#dsu%nb~W z7sS|(Iydi>C@6ZM(Us!jyIiszMkd)^u<1D+R@~O>HqZIW&kearPWmT>63%_t2B{_G zX{&a(gOYJx!Hq=!T$RZ&<8LDnxsmx9+TBL0gTk$|vz9O5GkK_Yx+55^R=2g!K}NJ3 zW?C;XQCHZl7H`K5^BF!Q5X2^Mj93&0l_O3Ea3!Ave|ixx+~bS@Iv18v2ctpSt4zO{ zp#7pj!AtDmti$T`e9{s^jf(ku&E|83JIJO5Qo9weT6g?@vX!{7)cNwymo1+u(YQ94 zopuz-L@|5=h8A!(g-<F;G9^=CwUG2BBM&6@esQFH4>MXgLJC0MA|CgQF8qlonnu#j z;uCeq9ny9QSD|p)9sp3ebgY3rk#y<wu$Scub#>0DA(SHdh$DUm^?GI<>%e1?&}w(b zd<n{_{wZL^#}W>ip1;P2Z=1wM+$q=TgLP$}svd!vk+BZ@h<^4R=GS2+sri7Z*2f`9 z5_?i)xj?m#pSVchk-SR!2&uNhzEi+#5t1Z$o0PoLGz*pT64%+|Wa+rd5Z}60(j?X= z{NLjtgRb|W?CUADqOS@(*MA-l|E342NxRaxLTDqsO<GMIr8u8#%dIQrz(r`Q(hkza zil8N-`Js{wU0Gy<JdGKt>yfWWe%N(jjBh}G<qND?0TH2WotV2BO}oGFXR`nNIoZPu zAYBqht4AIf6%UvOQWL(@v@#P!g?Z{m=yxdflhU-MrdJ3Lu4OwZ%yKkuPkk0$Ko)O* z;5yrsNkvYZsjZQILNsEr+ECa0P<^XyVVf2;%`lxDRkz-!;wa1;EB{emo`C=%{Gykq zq<4i~ETk#P9zK#gq4PdG1l$Vspzwyb@<LIRCp@UiYQvSVfg*oiL+eCZD0<3etyAQ> zm7WPel6jXijaTiNita+z(5GCO0NM=Melxud57P<u@R2P46Q9-DyjXBHUN>P^d_U## zbA;9iVi<@wr0DGB8<n8`yw;2Kv**CeqAs$L&plPhIa#v7(dTNoPt@&}ED@M*lxC!x z`6s~+J|uy;3o7Lq<uMmSEF9Dw$gP)!=7bwIZF}v$SuOexM&6SRtdGcL+`+Tm+leuz zpp$tX{Sz|>=T9Ab#2K_#zi=<XArhO6r_`n&7XSM212-MzWyRNG*!uO-#ecnE^8eXw z{A)4%t2FvosVP<UQ~s;l`0?z0m3m-lgN!65Mz=sfFM<3$$g-N5nIt_Q>$igy<I%16 z>K48@;V|W`fg~7;+!q8)aCOo{HA@vpSy-4`^!ze6-~8|QE||hC{ICKllG9fbg_Y7v z$jn{00!ob3!@~-Z%!rSZ0JO#@>|3k10mLK0JR<I1S>KP-Cc8UYFu>z93=Ab-r^oL2 zl`-&VBh#=-?{l1TatC;VweM^=M7-DUE>m+xO7Xi6vTEsReyLs8KJ+2GZ&rxw$d4IT zPXy6pu^4#e;;ZTsgmG+ZPx>piodegkx2n0}SM77+Y*j^~ICvp#2wj^BuqRY*&cjmL zcKp78aZt>e{3YBb4!J_2|K~A`lN=u&5j!byw`1itV(+Q_?RvV7&Z5XS1HF)L2v6ji z&kOEPmv+k_lSXb{$)of~(BkO^py&7oOzpjdG>vI1kcm_oPFHy38%D4&A4h_CSo#lX z2#oqMCTEP7UvUR3mwkPxbl8AMW(e{ARi@HCYLPSHE^L<1I}OgZD{I#YH#GKnpRmW3 z2jkz~Sa(D)f?V?$gNi?<F$5NpPo_(+mLu%j0uVGhEpW~}8A-6p@(iN<J78jy&84)} zW71~;kMKbRG+MZ(!>6)Y;Sm{&?~2p=0&BUl_(@hYeX8YjaRO=IqO7neK0RsSNdYjD zaw$g2sG(>JR=8Iz1<iqC50Fc?zkwnhu-?J#4v?gbo)h!toq+!EipMj&Dd=4)`^!2@ zL(!GW5QxLJO&{?1u~Q}Au)moY@9Q-~Yr01D0la`rUI3jK%5PxGU7;z+IlI=Bb;^2b zL|Kc&B2+#W3&e}l>SK4`*kqd_3-?;_BIcaaMd^}<@MYbYisWZm2C2<aQM85hCqTrH z{L!?Z_;my2c?%RMej)yS*$eqpa!UR3e9te>|Np_l|8r9yM|JkUngSo@?wci(7&O9a z%|V(4C1c9pps0xxzPbXH=}QTxc2rr7fXk$9`a6TbWKPCz&p=VsB8^W96W=BsB|7bc zf(QR8&Ktj*iz)wK&mW`#V%4XTM&jWNnDF56O+2bo<3|NyUhQ%#OZE8$Uv2a@J>D%t zMVMiHh?es!Ex19q&6eC&L=XDU_BA&uR^^w>fpz2_`U87q_?N2y;!Z!bjoeKrzfC)} z?m^PM=(z{%n9K`p|7Bz$LuC7!>tFOuN74MFELm}OD9?%jpT>38J;=1Y-VWtZAscaI z_8jUZ#GwWz{JqvGEUmL?G#l5E=*m>`cY?m*XOc*yOCNtpuIGD+Z|kn4Xww=BLrNYS zGO=wQh}Gtr|7DGXLF%|`G>J~l{k^*{;S-Zhq|&HO7rC_r;o`gTB7)uMZ|WWIn@e0( zX$MccUMv3ABg^$%_lNrgU{EVi8O^UyGHPNRt%R!1#MQJn41aD|_93NsBQhP80yP<9 zG4(&0u7AtJJXLPcqzjv`S~5;Q|5TVGccN=Uzm}K{v)?f7W!230C<``9(64}D2raRU zAW5bp%}VEo{4Rko`bD%Ehf=0voW?-4Mk#d3_pXTF!-TyIt6U+({6OXWVAa;s-`Ta5 zTqx&8msH3+DLrVmQOTBOAj=uoxKYT3DS1^zBXM?1W+7gI!aQNPYfUl{3;PzS9*F7g zWJN8x?KjBDx^V&6iCY8o_gslO16=kh(|Gp)kz8qlQ`dzxQv;)V&t+B}wwdi~uBs4? zu~G|}y!`3;8#vIMUdyC7YEx6bb^1o}G!Jky4cN?BV9ejBfN<&!4M)L&lRKiuMS#3} z_B}Nkv+zzxhy{dYCW$oGC&J(Ty&7%=5B$sD0bkuPmj7g>|962`(Q{ZZMDv%YMuT<n z1<0L@A~^*&C~fETTawHVh1kk4b*^p0vQ^7?+3dKBe<pM8Snh`k_7R%#IZRUEl1U~% z`#y5ddd+xk?tVQb4dNJ(7Ry%2!BTF1HzW?PK!2%Oj>^Kwe<oH3RpEUQV(1=JAftKZ zy};jv^`iGA^yoK}($W9zl~UM?CzovcbP5)_-K0QR<B0^>iRDvYTEop3IgFv#)(w>1 zSzH><Zx#DBcM*ETggCrIL|G$?#sL+^<gVn#xwx<>J`q!LK)c(AK>&Ib)A{g`<Y-)} z(@A>Fdykxqd`Yq@yB}E{gnQV$K!}RsgMGWqC3DKE(=!{}ekB3+(1?g}xF>^icEJbc z5bdxAPkW90atZT+&*7qoLqL#p=>t-(-lsnl2XMpZcYeW|o|a322&)yO_8p(&Sw{|b zn(tY$xn5yS$DD)UYS%sP?c|z>1dp!QUD)l;aW#`%qMtQJjE!s2z`+bTSZmLK7SvCR z=@I4|U^sCwZLQSfd*ACw9B@`1c1|&i^W_OD(570SDLK`MD0wTiR8|$7+%{cF&){$G zU~|$^Ed?TIxyw{1$e|D$050n8AjJvvOWhLtLHbSB|HIfhMpqVf>AF&}ZQHhOJ14Bz zww+XL+qP}nww+W`F>b!by|=&a(cM4JIDhsTXY8@|ntQG}-}jm0&Bcj|LV(#sc=BNS zRjh<Mlkf>;k9l>EdAFdd)=H!U`~$WP*}~^3HZ_?H>gKw>NB<D?df$IC%55Zl`EPwc zRF>a;tA8M1{>St|)yDF_=~{KEPAGkg3VB`QCHol!AQ0|?e^W?81f{@()Wy!vQ$bY; z0ctx)l<l3Egk{Ob>7VK83d6;dp!s{Nu=SwXZ8lHQHC*J2g@P0a={B8qHd<!Rx=U=y zZhU*Z!GA%uunxv9&4$#mX+|}S)urtQN=7La7qnsxu>v(+O3wV=4-t4HK1+smO#=S; z3cSI#Nh+N@AqM#6wPqjDmQM|x95<n5VlzgWRH&oDW?c}DT^%?B8C0l+B0<BSKyNf1 z@50z}-d3zrSn&7`r1tBSp<zb3^nhH#XuDC?R<KtB*VsyKR`dRh)&DkLIrq4o!?;Lk zondptVSwpbOiowRa-P*4A7o%#IYH#y*MPqzE9G%OcE;(l=a5Gbdc^<iHA{4$gMK2y zrcQ~;DrQl(Xod1}HF3{_dN{dd)Iq**zG_<1@e+8Q8+Oq;jgidKOGIuhBe_rBN^N(^ zH&yrkQqs47d>JG|l1<sF7&JuwXR&1!7b?5$CbRqF7%}I8mpCr(sj;K7IQl+Ud)#bZ zp7IC+SbpjPV~m#KY)1CSNeLmt63WJp#VvwlYf+=uB{p=aUnI`+`Y>#sAU|>I6<Rxv z+8ksxQP-bXJt|;JqZ0=Syg@fkr7?v9z=bM6Vn&}>NdF*G@bD?1t|ytHlkKD+z9}#j zbU+x_cR-j9yX4s{_y>@zk*ElG1yS({BInGJcIT>l4N-DUs6fufF#GlF2lVUNOAhJT zGZThq54GhwCG(h4?yWR&Ax8hU<*U)<g>?g+HY5-@{#ls5CVV(Wc>Bavs|l<}U|hZn z_%m+5i_gaakS*Pk7!v&w3&?R5Xb|AkCdytTY;r+Z7f#Id=q+W8cn)*9tEet=OG+Y} z58U&!%t9gYMx2N=8F?gZhIjtkH!`E*XrVJ?$2rRxLhV1z82QX~PZi8^N5z6~f-MUE zLKxnNoPc-SGl7{|Oh?ZM$jq67sSa)Wr&3)0YxlJt(vKf!-^L)a|HaPv*IYXb;QmWx zsqM>qY;tpK3RH-omtta+Xf2Qeu^$VKRq7`e$N-UCe1_2|1F{L3&}M0XbJ@^xRe&>P zRdKTgD6601x#fkDWkoYzRkxbn#*>${dX+UQ;FbGnTE-+kBJ9KPn)501#_L4O_k`P3 zm+$jI{|EC?8BXJY{P~^f-{**E53k%kVO$%p+=H5DiIdwMmUo>2euq0UzU90FWL!>; z{5@sd0ecqo5j!6AH@g6Mf3keTP$PFztq}@)^ZjK;H6Go$#SV2|2bAFI0%?aXgVH$t zb4Kl`$Xh8q<G488u@$4lX!B=3?g=wlC?}MC;F?H%YQrVNOwB#z7-f_|Wz?O!b4I~2 z^Qw&0hykWBc$}5NngS)c1*7`tH73!7vUHgRMs>LrMbZUS<2*7^F0^?lrOE=$DHW+O zvLdczsu0^TlA6RhDy3=@s!k^1D~Awulk!Iyo#}W$xq8{yTAK!CLl={H0@YGhg-g~+ z(u>pss4k#%8{J%~%8=H5!T`rqK6w^es-cNVE}=*lP^`i&K4R=peg1tdmT~UAbDKc& zg%Y*1E<jNK6bVo^5$q7Be!g@_B}<2f!MazAse=SHXka44U?M8cg8{iRQqX625kGny zEx>{hBf<)xO>HDWV7BaMWX6FW4ou1T2m^6{Jb!Su1UaCCYY8RR8hAV$7ho|FyEyP~ zEgK`<ybDN}WQ7ppf~i48Sp+j=w6UI16W6MuJXhL6VlQ|!lSyz6m|Gs@>@%a$-C2`p zV*~G>GOAs*3KN;~IY_UR$ISJxB(N~K>=2C2V6>xTmuX4<wHTgMVWGBYU0G4B(`;}2 zw_J6Ct{nL}*%nG0uk<t$To_fcVQEvXjtQYeWv?v&5m9S(NJkQnc)rvU7`Je&48A!8 z_->klRXdrJd&UPAw7&|KEwF8Zcy2j-*({gSNR1^p02Oj88GN9a_Hq;Skdp}kO0;<y ztR-y<(h)MzSR8PG`MEz?T1Lf{zq~R3i)I#s$y{Wn^A`t(9>FLbje%2ZvPiltDZgv^ z#pb4&m^!79;O8F+Wr9X71laPY!CdNXG?J6C9KvdAE2xWW1>U~3;0v≫L+crb^Bz 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 E0aA=+Q2+n{ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 62f495df..1af9e093 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/android/gradlew b/android/gradlew index fcb6fca1..1aa94a42 100755 --- a/android/gradlew +++ b/android/gradlew @@ -83,7 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -201,11 +202,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/android/src/main/java/com/mjstudio/reactnativenavermap/util/view/ViewAttacherGroup.kt b/android/src/main/java/com/mjstudio/reactnativenavermap/util/view/ViewAttacherGroup.kt index 2a86eb6b..71a43bd6 100644 --- a/android/src/main/java/com/mjstudio/reactnativenavermap/util/view/ViewAttacherGroup.kt +++ b/android/src/main/java/com/mjstudio/reactnativenavermap/util/view/ViewAttacherGroup.kt @@ -13,7 +13,6 @@ class ViewAttacherGroup( alpha = 0.0f removeClippedSubviews = false clipBounds = Rect(0, 0, 0, 0) - setOverflow("hidden") // Change to ViewProps.HIDDEN until RN 0.57 is base } // This should make it more performant, avoid trying to hard to overlap layers