@carmaclouds/core 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cache/CacheManager.d.ts.map +1 -0
- package/dist/cache/CacheManager.js +131 -0
- package/dist/cache/CacheManager.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/index.d.ts +11 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +9 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/normalize.d.ts +10 -0
- package/dist/ir/normalize.d.ts.map +1 -0
- package/dist/ir/normalize.js +207 -0
- package/dist/ir/normalize.js.map +1 -0
- package/dist/ir/persistence.d.ts +26 -0
- package/dist/ir/persistence.d.ts.map +1 -0
- package/dist/ir/persistence.js +21 -0
- package/dist/ir/persistence.js.map +1 -0
- package/dist/ir/sync.d.ts +12 -0
- package/dist/ir/sync.d.ts.map +1 -0
- package/dist/ir/sync.js +36 -0
- package/dist/ir/sync.js.map +1 -0
- package/dist/ir/types.d.ts +143 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js +13 -0
- package/dist/ir/types.js.map +1 -0
- package/dist/ir/views/dnd5e.d.ts +40 -0
- package/dist/ir/views/dnd5e.d.ts.map +1 -0
- package/dist/ir/views/dnd5e.js +50 -0
- package/dist/ir/views/dnd5e.js.map +1 -0
- package/dist/render/character.d.ts +19 -0
- package/dist/render/character.d.ts.map +1 -0
- package/dist/render/character.js +156 -0
- package/dist/render/character.js.map +1 -0
- package/dist/render/h.d.ts +27 -0
- package/dist/render/h.d.ts.map +1 -0
- package/dist/render/h.js +64 -0
- package/dist/render/h.js.map +1 -0
- package/dist/render/index.d.ts +11 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +8 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/mount.d.ts +31 -0
- package/dist/render/mount.d.ts.map +1 -0
- package/dist/render/mount.js +63 -0
- package/dist/render/mount.js.map +1 -0
- package/dist/supabase/fields.d.ts.map +1 -0
- package/dist/supabase/fields.js +120 -0
- package/dist/supabase/fields.js.map +1 -0
- package/dist/types/character.d.ts.map +1 -0
- package/dist/types/character.js +5 -0
- package/dist/types/character.js.map +1 -0
- package/package.json +73 -0
- package/src/browser.js +51 -0
- package/src/cache/CacheManager.ts +174 -0
- package/src/common/browser-polyfill.js +319 -0
- package/src/common/debug.js +123 -0
- package/src/common/html-utils.js +134 -0
- package/src/common/theme-manager.js +265 -0
- package/src/index.ts +25 -0
- package/src/ir/__fixtures__/dnd5e-character.json +75962 -0
- package/src/ir/__fixtures__/non-dnd-character.json +14218 -0
- package/src/ir/index.ts +10 -0
- package/src/ir/normalize.ts +245 -0
- package/src/ir/persistence.ts +37 -0
- package/src/ir/sync.ts +49 -0
- package/src/ir/types.ts +161 -0
- package/src/ir/views/dnd5e.ts +94 -0
- package/src/lib/indexeddb-cache.js +320 -0
- package/src/modules/action-announcements.js +102 -0
- package/src/modules/action-display.js +1557 -0
- package/src/modules/action-executor.js +860 -0
- package/src/modules/action-filters.js +167 -0
- package/src/modules/action-options.js +117 -0
- package/src/modules/card-creator.js +142 -0
- package/src/modules/character-portrait.js +169 -0
- package/src/modules/character-trait-popups.js +959 -0
- package/src/modules/character-traits.js +814 -0
- package/src/modules/class-feature-edge-cases.js +1320 -0
- package/src/modules/color-utils.js +69 -0
- package/src/modules/combat-maneuver-edge-cases.js +660 -0
- package/src/modules/companions-manager.js +178 -0
- package/src/modules/concentration-tracker.js +178 -0
- package/src/modules/data-manager.js +514 -0
- package/src/modules/dice-roller.js +719 -0
- package/src/modules/effects-manager.js +743 -0
- package/src/modules/feature-modals.js +1264 -0
- package/src/modules/formula-resolver.js +444 -0
- package/src/modules/gm-mode.js +184 -0
- package/src/modules/health-modals.js +399 -0
- package/src/modules/hp-management.js +752 -0
- package/src/modules/inventory-manager.js +242 -0
- package/src/modules/macro-system.js +825 -0
- package/src/modules/notification-system.js +92 -0
- package/src/modules/racial-feature-edge-cases.js +746 -0
- package/src/modules/resource-manager.js +775 -0
- package/src/modules/sheet-builder.js +654 -0
- package/src/modules/spell-action-modals.js +583 -0
- package/src/modules/spell-cards.js +602 -0
- package/src/modules/spell-casting.js +723 -0
- package/src/modules/spell-display.js +314 -0
- package/src/modules/spell-edge-cases.js +509 -0
- package/src/modules/spell-macros.js +201 -0
- package/src/modules/spell-modals.js +1221 -0
- package/src/modules/spell-slots.js +224 -0
- package/src/modules/status-bar-bridge.js +101 -0
- package/src/modules/ui-utilities.js +284 -0
- package/src/modules/warlock-invocations.js +219 -0
- package/src/modules/window-management.js +211 -0
- package/src/render/character.ts +234 -0
- package/src/render/h.ts +74 -0
- package/src/render/index.ts +10 -0
- package/src/render/mount.ts +94 -0
- package/src/supabase/client.js +1383 -0
- package/src/supabase/config.js +60 -0
- package/src/supabase/fields.ts +129 -0
- package/src/types/character.ts +85 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supabase Configuration
|
|
3
|
+
* Single Supabase instance shared across all CarmaClouds projects
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Shared Supabase instance
|
|
7
|
+
export const SUPABASE_URL = 'https://luiesmfjdcmpywavvfqm.supabase.co';
|
|
8
|
+
export const SUPABASE_ANON_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imx1aWVzbWZqZGNtcHl3YXZ2ZnFtIiwicm9sZSI6ImFub24iLCJpYXQiOjE3Njk4ODYxNDksImV4cCI6MjA4NTQ2MjE0OX0.oqjHFf2HhCLcanh0HVryoQH7iSV7E9dHHZJdYehxZ0U';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Table names for different projects
|
|
12
|
+
*/
|
|
13
|
+
export const TABLES = {
|
|
14
|
+
// Shared tables
|
|
15
|
+
AUTH_TOKENS: 'auth_tokens',
|
|
16
|
+
PAIRINGS: 'clouds_pairings',
|
|
17
|
+
|
|
18
|
+
// Project-specific character tables
|
|
19
|
+
OWLCLOUD_CHARACTERS: 'clouds_characters',
|
|
20
|
+
ROLLCLOUD_CHARACTERS: 'rollcloud_characters',
|
|
21
|
+
FOUNDCLOUD_CHARACTERS: 'foundcloud_characters', // Future
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Project-specific configurations
|
|
26
|
+
*/
|
|
27
|
+
export const PROJECT_CONFIGS = {
|
|
28
|
+
owlcloud: {
|
|
29
|
+
characterTable: TABLES.OWLCLOUD_CHARACTERS,
|
|
30
|
+
pairingTable: TABLES.PAIRINGS,
|
|
31
|
+
cacheStorageKey: 'owlcloud_character_cache',
|
|
32
|
+
},
|
|
33
|
+
rollcloud: {
|
|
34
|
+
characterTable: TABLES.ROLLCLOUD_CHARACTERS,
|
|
35
|
+
pairingTable: TABLES.PAIRINGS,
|
|
36
|
+
cacheStorageKey: 'rollcloud_character_cache',
|
|
37
|
+
},
|
|
38
|
+
foundcloud: {
|
|
39
|
+
characterTable: TABLES.FOUNDCLOUD_CHARACTERS,
|
|
40
|
+
pairingTable: TABLES.PAIRINGS,
|
|
41
|
+
cacheStorageKey: 'foundcloud_character_cache',
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Get configuration for a specific project
|
|
47
|
+
* @param {string} projectName - Project name (owlcloud, rollcloud, foundcloud)
|
|
48
|
+
* @returns {Object} Project configuration
|
|
49
|
+
*/
|
|
50
|
+
export function getProjectConfig(projectName) {
|
|
51
|
+
const config = PROJECT_CONFIGS[projectName];
|
|
52
|
+
if (!config) {
|
|
53
|
+
throw new Error(`Unknown project: ${projectName}`);
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
...config,
|
|
57
|
+
supabaseUrl: SUPABASE_URL,
|
|
58
|
+
supabaseKey: SUPABASE_ANON_KEY,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optimized Supabase Field Selections
|
|
3
|
+
* Reduces egress costs by fetching only needed fields
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Essential character fields for most operations
|
|
7
|
+
export const CHARACTER_ESSENTIAL = [
|
|
8
|
+
'dicecloud_character_id',
|
|
9
|
+
'character_name',
|
|
10
|
+
'class',
|
|
11
|
+
'level',
|
|
12
|
+
'race',
|
|
13
|
+
'alignment',
|
|
14
|
+
'discord_user_id',
|
|
15
|
+
'user_id_dicecloud',
|
|
16
|
+
'is_active'
|
|
17
|
+
].join(',');
|
|
18
|
+
|
|
19
|
+
// Full character data for detailed views
|
|
20
|
+
export const CHARACTER_FULL = [
|
|
21
|
+
'dicecloud_character_id',
|
|
22
|
+
'character_name',
|
|
23
|
+
'class',
|
|
24
|
+
'level',
|
|
25
|
+
'race',
|
|
26
|
+
'alignment',
|
|
27
|
+
'hit_points',
|
|
28
|
+
'hit_dice',
|
|
29
|
+
'temporary_hp',
|
|
30
|
+
'death_saves',
|
|
31
|
+
'armor_class',
|
|
32
|
+
'speed',
|
|
33
|
+
'initiative',
|
|
34
|
+
'proficiency_bonus',
|
|
35
|
+
'attributes',
|
|
36
|
+
'attribute_mods',
|
|
37
|
+
'saves',
|
|
38
|
+
'skills',
|
|
39
|
+
'spell_slots',
|
|
40
|
+
'resources',
|
|
41
|
+
'conditions',
|
|
42
|
+
'discord_user_id',
|
|
43
|
+
'user_id_dicecloud',
|
|
44
|
+
'owlbear_player_id',
|
|
45
|
+
'is_active',
|
|
46
|
+
'updated_at'
|
|
47
|
+
].join(',');
|
|
48
|
+
|
|
49
|
+
// Combat-focused fields
|
|
50
|
+
export const CHARACTER_COMBAT = [
|
|
51
|
+
'dicecloud_character_id',
|
|
52
|
+
'character_name',
|
|
53
|
+
'class',
|
|
54
|
+
'level',
|
|
55
|
+
'hit_points',
|
|
56
|
+
'temporary_hp',
|
|
57
|
+
'armor_class',
|
|
58
|
+
'speed',
|
|
59
|
+
'initiative',
|
|
60
|
+
'proficiency_bonus',
|
|
61
|
+
'attributes',
|
|
62
|
+
'attribute_mods',
|
|
63
|
+
'saves',
|
|
64
|
+
'conditions',
|
|
65
|
+
'discord_user_id'
|
|
66
|
+
].join(',');
|
|
67
|
+
|
|
68
|
+
// Spell-focused fields
|
|
69
|
+
export const CHARACTER_SPELLS = [
|
|
70
|
+
'dicecloud_character_id',
|
|
71
|
+
'character_name',
|
|
72
|
+
'class',
|
|
73
|
+
'level',
|
|
74
|
+
'spell_slots',
|
|
75
|
+
'proficiency_bonus',
|
|
76
|
+
'attributes',
|
|
77
|
+
'attribute_mods',
|
|
78
|
+
'raw_dicecloud_data',
|
|
79
|
+
'discord_user_id'
|
|
80
|
+
].join(',');
|
|
81
|
+
|
|
82
|
+
// Resource management fields
|
|
83
|
+
export const CHARACTER_RESOURCES = [
|
|
84
|
+
'dicecloud_character_id',
|
|
85
|
+
'character_name',
|
|
86
|
+
'class',
|
|
87
|
+
'level',
|
|
88
|
+
'hit_points',
|
|
89
|
+
'hit_dice',
|
|
90
|
+
'spell_slots',
|
|
91
|
+
'resources',
|
|
92
|
+
'discord_user_id'
|
|
93
|
+
].join(',');
|
|
94
|
+
|
|
95
|
+
// Minimal fields for character list
|
|
96
|
+
export const CHARACTER_LIST = [
|
|
97
|
+
'dicecloud_character_id',
|
|
98
|
+
'character_name',
|
|
99
|
+
'class',
|
|
100
|
+
'level',
|
|
101
|
+
'race',
|
|
102
|
+
'hit_points',
|
|
103
|
+
'armor_class',
|
|
104
|
+
'is_active',
|
|
105
|
+
'discord_user_id'
|
|
106
|
+
].join(',');
|
|
107
|
+
|
|
108
|
+
// Pairing fields
|
|
109
|
+
export const PAIRING_FIELDS = [
|
|
110
|
+
'id',
|
|
111
|
+
'pairing_code',
|
|
112
|
+
'discord_user_id',
|
|
113
|
+
'dicecloud_user_id',
|
|
114
|
+
'status',
|
|
115
|
+
'created_at',
|
|
116
|
+
'expires_at'
|
|
117
|
+
].join(',');
|
|
118
|
+
|
|
119
|
+
export const FIELD_SETS = {
|
|
120
|
+
essential: CHARACTER_ESSENTIAL,
|
|
121
|
+
full: CHARACTER_FULL,
|
|
122
|
+
combat: CHARACTER_COMBAT,
|
|
123
|
+
spells: CHARACTER_SPELLS,
|
|
124
|
+
resources: CHARACTER_RESOURCES,
|
|
125
|
+
list: CHARACTER_LIST,
|
|
126
|
+
pairing: PAIRING_FIELDS
|
|
127
|
+
} as const;
|
|
128
|
+
|
|
129
|
+
export type FieldSetName = keyof typeof FIELD_SETS;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Character Types for CarmaClouds
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export interface HitPoints {
|
|
6
|
+
current: number;
|
|
7
|
+
max: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface HitDice {
|
|
11
|
+
current: number;
|
|
12
|
+
max: number;
|
|
13
|
+
type: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface DeathSaves {
|
|
17
|
+
successes: number;
|
|
18
|
+
failures: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface Attributes {
|
|
22
|
+
strength?: number;
|
|
23
|
+
dexterity?: number;
|
|
24
|
+
constitution?: number;
|
|
25
|
+
intelligence?: number;
|
|
26
|
+
wisdom?: number;
|
|
27
|
+
charisma?: number;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface AttributeMods {
|
|
31
|
+
strength?: number;
|
|
32
|
+
dexterity?: number;
|
|
33
|
+
constitution?: number;
|
|
34
|
+
intelligence?: number;
|
|
35
|
+
wisdom?: number;
|
|
36
|
+
charisma?: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface Character {
|
|
40
|
+
dicecloud_character_id: string;
|
|
41
|
+
character_name: string;
|
|
42
|
+
class?: string;
|
|
43
|
+
level?: number;
|
|
44
|
+
race?: string;
|
|
45
|
+
alignment?: string;
|
|
46
|
+
hit_points?: HitPoints;
|
|
47
|
+
hit_dice?: HitDice;
|
|
48
|
+
temporary_hp?: number;
|
|
49
|
+
death_saves?: DeathSaves;
|
|
50
|
+
armor_class?: number;
|
|
51
|
+
speed?: number;
|
|
52
|
+
initiative?: number;
|
|
53
|
+
proficiency_bonus?: number;
|
|
54
|
+
attributes?: Attributes;
|
|
55
|
+
attribute_mods?: AttributeMods;
|
|
56
|
+
saves?: Record<string, any>;
|
|
57
|
+
skills?: Record<string, any>;
|
|
58
|
+
spell_slots?: Record<string, any>;
|
|
59
|
+
resources?: any[];
|
|
60
|
+
conditions?: any[];
|
|
61
|
+
discord_user_id?: string;
|
|
62
|
+
user_id_dicecloud?: string;
|
|
63
|
+
owlbear_player_id?: string;
|
|
64
|
+
is_active?: boolean;
|
|
65
|
+
updated_at?: string;
|
|
66
|
+
raw_dicecloud_data?: any;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface CharacterCache {
|
|
70
|
+
data: Character | Character[];
|
|
71
|
+
timestamp: number;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface CacheStats {
|
|
75
|
+
size: number;
|
|
76
|
+
hits: number;
|
|
77
|
+
misses: number;
|
|
78
|
+
stores: number;
|
|
79
|
+
invalidations: number;
|
|
80
|
+
hitRate: string;
|
|
81
|
+
expiryMinutes?: number;
|
|
82
|
+
memoryExpiryMs?: number;
|
|
83
|
+
persistentExpiryMs?: number;
|
|
84
|
+
entries?: string[];
|
|
85
|
+
}
|