local addonTable = select(2, ...)
local MeetingStoneConstants = addonTable.MeetingStoneConstants or {}
addonTable.MeetingStoneConstants = MeetingStoneConstants
local MythicSeason = addonTable.MythicSeason or {}

local MEETINGSTONE_PLAY_STYLE_OPTIONS = {
    { textKey = "新手上路", enumKey = "Learning", fallback = 1 },
    { textKey = "休闲娱乐", enumKey = "FunRelaxed", fallback = 2 },
    { textKey = "高阶挑战", enumKey = "FunSerious", fallback = 3 },
    { textKey = "老手带队", enumKey = "Expert", fallback = 4 },
}
local MEETINGSTONE_FALLBACK_CHALLENGE_MAP_IDS = type(MythicSeason.GetCurrentSeasonMapIDs) == "function"
    and MythicSeason.GetCurrentSeasonMapIDs()
    or {}
local MEETINGSTONE_FALLBACK_DUNGEON_GROUP_IDS = type(MythicSeason.GetCurrentSeasonLFGGroupIDs) == "function"
    and MythicSeason.GetCurrentSeasonLFGGroupIDs()
    or {}
local MEETINGSTONE_FALLBACK_DUNGEON_ACTIVITY_IDS = type(MythicSeason.GetCurrentSeasonLFGActivityIDs) == "function"
    and MythicSeason.GetCurrentSeasonLFGActivityIDs()
    or {}
local MEETINGSTONE_PANEL_INSET_LEFT = 5
local MEETINGSTONE_PANEL_INSET_TOP = 0
local MEETINGSTONE_PANEL_INSET_RIGHT = 4
local MEETINGSTONE_PANEL_INSET_BOTTOM = 8
local MEETINGSTONE_LEFT_PANEL_WIDTH = 180
local MEETINGSTONE_RIGHT_PANEL_OVERLAP = -4
local MEETINGSTONE_LEFT_PANEL_BACKGROUND_ALPHA = 0.6
local MEETINGSTONE_PANEL_DIVIDER_WIDTH = 3
local MEETINGSTONE_PANEL_DIVIDER_OFFSET_X = -3
local MEETINGSTONE_PANEL_DIVIDER_TOP_OFFSET = 4
local MEETINGSTONE_PANEL_DIVIDER_BOTTOM_OFFSET = 2
local MEETINGSTONE_PANEL_DIVIDER_COLOR = { 0.38, 0.34, 0.24, 0.9 }
local MEETINGSTONE_PANEL_DIVIDER_HIGHLIGHT_COLOR = { 0.62, 0.55, 0.38, 0.3 }
local MEETINGSTONE_PANEL_DIVIDER_SHADOW_COLOR = { 0.08, 0.07, 0.05, 0.9 }
local MEETINGSTONE_HEADER_TOP_OFFSET = -20
local MEETINGSTONE_HEADER_BOTTOM_OFFSET = -46
local MEETINGSTONE_HEADER_CONTENT_INSET_X = 4
local MEETINGSTONE_HEADER_CONTENT_OFFSET_Y = 4
local MEETINGSTONE_HEADER_TEXT_SIZE = 14
local MEETINGSTONE_HEADER_TEXT_INSET_X = 3
local MEETINGSTONE_HEADER_TEXT_COLOR = { 1, 0.82, 0, 1 }
local MEETINGSTONE_HEADER_HOVER_TEXT_COLOR = { 1, 0.96, 0.58, 1 }
local MEETINGSTONE_HEADER_PRESSED_TEXT_COLOR = { 0.95, 0.68, 0.18, 1 }
local MEETINGSTONE_HEADER_DISABLED_TEXT_COLOR = { 0.48, 0.42, 0.25, 1 }
local MEETINGSTONE_HEADER_TEXT_PRESSED_OFFSET_X = 1
local MEETINGSTONE_HEADER_TEXT_PRESSED_OFFSET_Y = -1
local MEETINGSTONE_HEADER_TEXT_PRESSED_ALPHA = 1
local MEETINGSTONE_HEADER_ACCENT_WIDTH = 1.5
local MEETINGSTONE_HEADER_ACCENT_HEIGHT = 22
local MEETINGSTONE_HEADER_ACCENT_COLOR = { 126 / 255, 112 / 255, 82 / 255 }
local MEETINGSTONE_HEADER_ACCENT_ALPHA = 0.6
local MEETINGSTONE_FORM_INSET_X = 15
local MEETINGSTONE_FORM_TOP_OFFSET = -52
local MEETINGSTONE_FORM_LABEL_HEIGHT = 15
local MEETINGSTONE_FORM_LABEL_TO_CONTROL_GAP = 5
local MEETINGSTONE_FORM_CONTROL_WIDTH = 150
local MEETINGSTONE_FORM_CONTROL_HEIGHT = 26
local MEETINGSTONE_FORM_SUMMARY_HEIGHT = 64
local MEETINGSTONE_FORM_ROW_GAP = 10
local MEETINGSTONE_FORM_INLINE_LABEL_WIDTH = 80
local MEETINGSTONE_FORM_INLINE_INPUT_WIDTH = 64
local MEETINGSTONE_FORM_BUTTON_WIDTH = 72
local MEETINGSTONE_FORM_BUTTON_HEIGHT = 26
local MEETINGSTONE_FORM_BUTTON_GAP = 7
local MEETINGSTONE_FORM_BUTTON_BOTTOM_OFFSET = 12
local MEETINGSTONE_ACTION_BUTTON_TEXT_OFFSET_Y = 0
local MEETINGSTONE_SYSTEM_BUTTON_TEMPLATE = "UIPanelButtonTemplate"
local MEETINGSTONE_FORM_LABEL_TEXT_SIZE = 13
local MEETINGSTONE_FORM_LABEL_TEXT_COLOR = { 1, 0.82, 0, 1 }
local MEETINGSTONE_FORM_PLACEHOLDER_TEXT_SIZE = 14
local MEETINGSTONE_FORM_INPUT_BACKGROUND_COLOR = { 0, 0, 0, 0.55 }
local MEETINGSTONE_FORM_INPUT_BORDER_ATLAS = "common-dropdown-textholder"
local MEETINGSTONE_FORM_TITLE_BORDER_ATLAS = "common-dropdown-textholder"
local MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_LEFT = -8
local MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_TOP = 6
local MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_RIGHT = 8
local MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_BOTTOM = -9
local MEETINGSTONE_FORM_TITLE_NATIVE_OFFSET_LEFT = 7
local MEETINGSTONE_FORM_TITLE_NATIVE_OFFSET_RIGHT = -1
local MEETINGSTONE_FORM_TEXTAREA_BACKGROUND_COLOR = { 0.071, 0.071, 0.071, 1 }
local MEETINGSTONE_FORM_TEXTAREA_INNER_BORDER_COLOR = { 0.235, 0.235, 0.235, 1 }
local MEETINGSTONE_FORM_TEXTAREA_MIDDLE_BORDER_COLOR = { 0.369, 0.369, 0.369, 1 }
local MEETINGSTONE_FORM_TEXTAREA_OUTER_GAP = 1
local MEETINGSTONE_FORM_TEXTAREA_BORDER_SIZE = 1
local MEETINGSTONE_FORM_TEXTAREA_ROUND_EDGE_SIZE = 8
local MEETINGSTONE_FORM_TEXTAREA_MIDDLE_ROUND_EDGE_SIZE = 12
local MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_LEFT = 1
local MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_TOP = 1
local MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_RIGHT = 1
local MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_BOTTOM = 1
local MEETINGSTONE_FORM_SUMMARY_NATIVE_OFFSET_LEFT = 0
local MEETINGSTONE_FORM_SUMMARY_NATIVE_OFFSET_RIGHT = 0
local MEETINGSTONE_FORM_BUTTON_TEXT_SIZE = 12
local MEETINGSTONE_SUCCESS_EYE_SIZE = 90
local MEETINGSTONE_ICON_EYE_SIZE = 44
local MEETINGSTONE_ICON_EYE_HOST_SIZE = 68
local MEETINGSTONE_ICON_EYE_BACKGROUND_SIZE = 54
local MEETINGSTONE_ICON_EYE_BACKGROUND_MASK = "Interface\\CharacterFrame\\TempPortraitAlphaMask"
local MEETINGSTONE_EMPTY_EYE_FADE_DURATION = 0.35
local MEETINGSTONE_CREATION_TITLE_MAX_LETTERS = 31
local MEETINGSTONE_CREATION_SUMMARY_MAX_LETTERS = 255
local MEETINGSTONE_PUBLISH_CONFIRM_TIMEOUT = 3
local MEETINGSTONE_APPLICANT_REFRESH_BUTTON_WIDTH = 56
local MEETINGSTONE_APPLICANT_REFRESH_BUTTON_HEIGHT = MEETINGSTONE_FORM_BUTTON_HEIGHT
local MEETINGSTONE_LEFT_BOTTOM_GRADIENT_TOP_OFFSET = 32
local MEETINGSTONE_TOP_RIGHT_FILIGREE_OFFSET_X = 0
local MEETINGSTONE_TOP_RIGHT_FILIGREE_OFFSET_Y = -3
local MEETINGSTONE_BOTTOM_RIGHT_FILIGREE_OFFSET_X = 0
local MEETINGSTONE_BOTTOM_RIGHT_FILIGREE_OFFSET_Y = 0
local MEETINGSTONE_MISSING_ADDON_MESSAGE_KEY = "游戏集合石接口不可用。"

local function GetMeetingStoneHeaderAccentEffectiveScale(frame)
    local current = frame
    while current do
        if current.GetEffectiveScale then
            local ok, scale = pcall(current.GetEffectiveScale, current)
            if ok and type(scale) == "number" and scale > 0 then
                return scale
            end
        end
        current = current.GetParent and current:GetParent() or nil
    end
    if UIParent and UIParent.GetEffectiveScale then
        local ok, scale = pcall(UIParent.GetEffectiveScale, UIParent)
        if ok and type(scale) == "number" and scale > 0 then
            return scale
        end
    end
    return 1
end

local function GetMeetingStoneHeaderAccentPixelWidth(frame)
    local scale = GetMeetingStoneHeaderAccentEffectiveScale(frame)
    local pixelWidth = math.max(1, math.floor((MEETINGSTONE_HEADER_ACCENT_WIDTH * scale) + 0.5))
    return pixelWidth / scale
end

local function SnapMeetingStoneHeaderAccentOffset(parent, offset)
    offset = tonumber(offset) or 0
    local scale = GetMeetingStoneHeaderAccentEffectiveScale(parent)
    local left = parent and parent.GetLeft and parent:GetLeft()
    if type(left) == "number" then
        return (math.floor(((left + offset) * scale) + 0.5) / scale) - left
    end
    return math.floor((offset * scale) + 0.5) / scale
end

local function GetMeetingStoneHeaderTextColor(pressed, hovered, enabled)
    if enabled == false then
        return MEETINGSTONE_HEADER_DISABLED_TEXT_COLOR
    end
    if pressed then
        return MEETINGSTONE_HEADER_PRESSED_TEXT_COLOR
    end
    if hovered then
        return MEETINGSTONE_HEADER_HOVER_TEXT_COLOR
    end
    return MEETINGSTONE_HEADER_TEXT_COLOR
end

local function ApplyMeetingStoneHeaderTextStyle(text, owner, options)
    if not (text and owner) then
        return
    end
    options = options or {}
    local pressed = options.pressed == true
    local hovered = options.hovered == true
    local enabled = options.enabled ~= false
    local offsetX = pressed and MEETINGSTONE_HEADER_TEXT_PRESSED_OFFSET_X or 0
    local offsetY = pressed and MEETINGSTONE_HEADER_TEXT_PRESSED_OFFSET_Y or 0
    local color = GetMeetingStoneHeaderTextColor(pressed, hovered, enabled)

    if options.applyFont then
        options.applyFont(text, MEETINGSTONE_HEADER_TEXT_SIZE, "")
    end
    if text.ClearAllPoints then
        text:ClearAllPoints()
        text:SetPoint("TOPLEFT", owner, "TOPLEFT", MEETINGSTONE_HEADER_TEXT_INSET_X + offsetX, offsetY)
        text:SetPoint("BOTTOMRIGHT", owner, "BOTTOMRIGHT", -MEETINGSTONE_HEADER_TEXT_INSET_X + offsetX, offsetY)
    end
    if text.SetAlpha then
        text:SetAlpha(pressed and MEETINGSTONE_HEADER_TEXT_PRESSED_ALPHA or 1)
    end
    if text.SetTextColor then
        text:SetTextColor(color[1], color[2], color[3], color[4])
    end
    if text.SetJustifyV then
        text:SetJustifyV("MIDDLE")
    end
end

MeetingStoneConstants.MEETINGSTONE_PLAY_STYLE_OPTIONS = MEETINGSTONE_PLAY_STYLE_OPTIONS
MeetingStoneConstants.MEETINGSTONE_FALLBACK_CHALLENGE_MAP_IDS = MEETINGSTONE_FALLBACK_CHALLENGE_MAP_IDS
MeetingStoneConstants.MEETINGSTONE_FALLBACK_DUNGEON_GROUP_IDS = MEETINGSTONE_FALLBACK_DUNGEON_GROUP_IDS
MeetingStoneConstants.MEETINGSTONE_FALLBACK_DUNGEON_ACTIVITY_IDS = MEETINGSTONE_FALLBACK_DUNGEON_ACTIVITY_IDS
MeetingStoneConstants.MEETINGSTONE_PANEL_INSET_LEFT = MEETINGSTONE_PANEL_INSET_LEFT
MeetingStoneConstants.MEETINGSTONE_PANEL_INSET_TOP = MEETINGSTONE_PANEL_INSET_TOP
MeetingStoneConstants.MEETINGSTONE_PANEL_INSET_RIGHT = MEETINGSTONE_PANEL_INSET_RIGHT
MeetingStoneConstants.MEETINGSTONE_PANEL_INSET_BOTTOM = MEETINGSTONE_PANEL_INSET_BOTTOM
MeetingStoneConstants.MEETINGSTONE_LEFT_PANEL_WIDTH = MEETINGSTONE_LEFT_PANEL_WIDTH
MeetingStoneConstants.MEETINGSTONE_RIGHT_PANEL_OVERLAP = MEETINGSTONE_RIGHT_PANEL_OVERLAP
MeetingStoneConstants.MEETINGSTONE_LEFT_PANEL_BACKGROUND_ALPHA = MEETINGSTONE_LEFT_PANEL_BACKGROUND_ALPHA
MeetingStoneConstants.MEETINGSTONE_PANEL_DIVIDER_WIDTH = MEETINGSTONE_PANEL_DIVIDER_WIDTH
MeetingStoneConstants.MEETINGSTONE_PANEL_DIVIDER_OFFSET_X = MEETINGSTONE_PANEL_DIVIDER_OFFSET_X
MeetingStoneConstants.MEETINGSTONE_PANEL_DIVIDER_TOP_OFFSET = MEETINGSTONE_PANEL_DIVIDER_TOP_OFFSET
MeetingStoneConstants.MEETINGSTONE_PANEL_DIVIDER_BOTTOM_OFFSET = MEETINGSTONE_PANEL_DIVIDER_BOTTOM_OFFSET
MeetingStoneConstants.MEETINGSTONE_PANEL_DIVIDER_COLOR = MEETINGSTONE_PANEL_DIVIDER_COLOR
MeetingStoneConstants.MEETINGSTONE_PANEL_DIVIDER_HIGHLIGHT_COLOR = MEETINGSTONE_PANEL_DIVIDER_HIGHLIGHT_COLOR
MeetingStoneConstants.MEETINGSTONE_PANEL_DIVIDER_SHADOW_COLOR = MEETINGSTONE_PANEL_DIVIDER_SHADOW_COLOR
MeetingStoneConstants.MEETINGSTONE_HEADER_TOP_OFFSET = MEETINGSTONE_HEADER_TOP_OFFSET
MeetingStoneConstants.MEETINGSTONE_HEADER_BOTTOM_OFFSET = MEETINGSTONE_HEADER_BOTTOM_OFFSET
MeetingStoneConstants.MEETINGSTONE_HEADER_CONTENT_INSET_X = MEETINGSTONE_HEADER_CONTENT_INSET_X
MeetingStoneConstants.MEETINGSTONE_HEADER_CONTENT_OFFSET_Y = MEETINGSTONE_HEADER_CONTENT_OFFSET_Y
MeetingStoneConstants.MEETINGSTONE_HEADER_TEXT_SIZE = MEETINGSTONE_HEADER_TEXT_SIZE
MeetingStoneConstants.MEETINGSTONE_HEADER_TEXT_INSET_X = MEETINGSTONE_HEADER_TEXT_INSET_X
MeetingStoneConstants.MEETINGSTONE_HEADER_TEXT_COLOR = MEETINGSTONE_HEADER_TEXT_COLOR
MeetingStoneConstants.MEETINGSTONE_HEADER_HOVER_TEXT_COLOR = MEETINGSTONE_HEADER_HOVER_TEXT_COLOR
MeetingStoneConstants.MEETINGSTONE_HEADER_PRESSED_TEXT_COLOR = MEETINGSTONE_HEADER_PRESSED_TEXT_COLOR
MeetingStoneConstants.MEETINGSTONE_HEADER_DISABLED_TEXT_COLOR = MEETINGSTONE_HEADER_DISABLED_TEXT_COLOR
MeetingStoneConstants.MEETINGSTONE_HEADER_TEXT_PRESSED_OFFSET_X = MEETINGSTONE_HEADER_TEXT_PRESSED_OFFSET_X
MeetingStoneConstants.MEETINGSTONE_HEADER_TEXT_PRESSED_OFFSET_Y = MEETINGSTONE_HEADER_TEXT_PRESSED_OFFSET_Y
MeetingStoneConstants.MEETINGSTONE_HEADER_TEXT_PRESSED_ALPHA = MEETINGSTONE_HEADER_TEXT_PRESSED_ALPHA
MeetingStoneConstants.MEETINGSTONE_HEADER_ACCENT_WIDTH = MEETINGSTONE_HEADER_ACCENT_WIDTH
MeetingStoneConstants.MEETINGSTONE_HEADER_ACCENT_HEIGHT = MEETINGSTONE_HEADER_ACCENT_HEIGHT
MeetingStoneConstants.MEETINGSTONE_HEADER_ACCENT_COLOR = MEETINGSTONE_HEADER_ACCENT_COLOR
MeetingStoneConstants.MEETINGSTONE_HEADER_ACCENT_ALPHA = MEETINGSTONE_HEADER_ACCENT_ALPHA
MeetingStoneConstants.GetMeetingStoneHeaderTextColor = GetMeetingStoneHeaderTextColor
MeetingStoneConstants.ApplyMeetingStoneHeaderTextStyle = ApplyMeetingStoneHeaderTextStyle
MeetingStoneConstants.GetMeetingStoneHeaderAccentPixelWidth = GetMeetingStoneHeaderAccentPixelWidth
MeetingStoneConstants.SnapMeetingStoneHeaderAccentOffset = SnapMeetingStoneHeaderAccentOffset
MeetingStoneConstants.MEETINGSTONE_FORM_INSET_X = MEETINGSTONE_FORM_INSET_X
MeetingStoneConstants.MEETINGSTONE_FORM_TOP_OFFSET = MEETINGSTONE_FORM_TOP_OFFSET
MeetingStoneConstants.MEETINGSTONE_FORM_LABEL_HEIGHT = MEETINGSTONE_FORM_LABEL_HEIGHT
MeetingStoneConstants.MEETINGSTONE_FORM_LABEL_TO_CONTROL_GAP = MEETINGSTONE_FORM_LABEL_TO_CONTROL_GAP
MeetingStoneConstants.MEETINGSTONE_FORM_CONTROL_WIDTH = MEETINGSTONE_FORM_CONTROL_WIDTH
MeetingStoneConstants.MEETINGSTONE_FORM_CONTROL_HEIGHT = MEETINGSTONE_FORM_CONTROL_HEIGHT
MeetingStoneConstants.MEETINGSTONE_FORM_SUMMARY_HEIGHT = MEETINGSTONE_FORM_SUMMARY_HEIGHT
MeetingStoneConstants.MEETINGSTONE_FORM_ROW_GAP = MEETINGSTONE_FORM_ROW_GAP
MeetingStoneConstants.MEETINGSTONE_FORM_INLINE_LABEL_WIDTH = MEETINGSTONE_FORM_INLINE_LABEL_WIDTH
MeetingStoneConstants.MEETINGSTONE_FORM_INLINE_INPUT_WIDTH = MEETINGSTONE_FORM_INLINE_INPUT_WIDTH
MeetingStoneConstants.MEETINGSTONE_FORM_BUTTON_WIDTH = MEETINGSTONE_FORM_BUTTON_WIDTH
MeetingStoneConstants.MEETINGSTONE_FORM_BUTTON_HEIGHT = MEETINGSTONE_FORM_BUTTON_HEIGHT
MeetingStoneConstants.MEETINGSTONE_FORM_BUTTON_GAP = MEETINGSTONE_FORM_BUTTON_GAP
MeetingStoneConstants.MEETINGSTONE_FORM_BUTTON_BOTTOM_OFFSET = MEETINGSTONE_FORM_BUTTON_BOTTOM_OFFSET
MeetingStoneConstants.MEETINGSTONE_ACTION_BUTTON_TEXT_OFFSET_Y = MEETINGSTONE_ACTION_BUTTON_TEXT_OFFSET_Y
MeetingStoneConstants.MEETINGSTONE_SYSTEM_BUTTON_TEMPLATE = MEETINGSTONE_SYSTEM_BUTTON_TEMPLATE
MeetingStoneConstants.MEETINGSTONE_FORM_LABEL_TEXT_SIZE = MEETINGSTONE_FORM_LABEL_TEXT_SIZE
MeetingStoneConstants.MEETINGSTONE_FORM_LABEL_TEXT_COLOR = MEETINGSTONE_FORM_LABEL_TEXT_COLOR
MeetingStoneConstants.MEETINGSTONE_FORM_PLACEHOLDER_TEXT_SIZE = MEETINGSTONE_FORM_PLACEHOLDER_TEXT_SIZE
MeetingStoneConstants.MEETINGSTONE_FORM_INPUT_BACKGROUND_COLOR = MEETINGSTONE_FORM_INPUT_BACKGROUND_COLOR
MeetingStoneConstants.MEETINGSTONE_FORM_INPUT_BORDER_ATLAS = MEETINGSTONE_FORM_INPUT_BORDER_ATLAS
MeetingStoneConstants.MEETINGSTONE_FORM_TITLE_BORDER_ATLAS = MEETINGSTONE_FORM_TITLE_BORDER_ATLAS
MeetingStoneConstants.MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_LEFT = MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_LEFT
MeetingStoneConstants.MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_TOP = MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_TOP
MeetingStoneConstants.MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_RIGHT = MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_RIGHT
MeetingStoneConstants.MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_BOTTOM = MEETINGSTONE_FORM_TITLE_BORDER_OFFSET_BOTTOM
MeetingStoneConstants.MEETINGSTONE_FORM_TITLE_NATIVE_OFFSET_LEFT = MEETINGSTONE_FORM_TITLE_NATIVE_OFFSET_LEFT
MeetingStoneConstants.MEETINGSTONE_FORM_TITLE_NATIVE_OFFSET_RIGHT = MEETINGSTONE_FORM_TITLE_NATIVE_OFFSET_RIGHT
MeetingStoneConstants.MEETINGSTONE_FORM_TEXTAREA_BACKGROUND_COLOR = MEETINGSTONE_FORM_TEXTAREA_BACKGROUND_COLOR
MeetingStoneConstants.MEETINGSTONE_FORM_TEXTAREA_INNER_BORDER_COLOR = MEETINGSTONE_FORM_TEXTAREA_INNER_BORDER_COLOR
MeetingStoneConstants.MEETINGSTONE_FORM_TEXTAREA_MIDDLE_BORDER_COLOR = MEETINGSTONE_FORM_TEXTAREA_MIDDLE_BORDER_COLOR
MeetingStoneConstants.MEETINGSTONE_FORM_TEXTAREA_OUTER_GAP = MEETINGSTONE_FORM_TEXTAREA_OUTER_GAP
MeetingStoneConstants.MEETINGSTONE_FORM_TEXTAREA_BORDER_SIZE = MEETINGSTONE_FORM_TEXTAREA_BORDER_SIZE
MeetingStoneConstants.MEETINGSTONE_FORM_TEXTAREA_ROUND_EDGE_SIZE = MEETINGSTONE_FORM_TEXTAREA_ROUND_EDGE_SIZE
MeetingStoneConstants.MEETINGSTONE_FORM_TEXTAREA_MIDDLE_ROUND_EDGE_SIZE = MEETINGSTONE_FORM_TEXTAREA_MIDDLE_ROUND_EDGE_SIZE
MeetingStoneConstants.MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_LEFT = MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_LEFT
MeetingStoneConstants.MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_TOP = MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_TOP
MeetingStoneConstants.MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_RIGHT = MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_RIGHT
MeetingStoneConstants.MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_BOTTOM = MEETINGSTONE_FORM_SUMMARY_TEXT_INSET_BOTTOM
MeetingStoneConstants.MEETINGSTONE_FORM_SUMMARY_NATIVE_OFFSET_LEFT = MEETINGSTONE_FORM_SUMMARY_NATIVE_OFFSET_LEFT
MeetingStoneConstants.MEETINGSTONE_FORM_SUMMARY_NATIVE_OFFSET_RIGHT = MEETINGSTONE_FORM_SUMMARY_NATIVE_OFFSET_RIGHT
MeetingStoneConstants.MEETINGSTONE_FORM_BUTTON_TEXT_SIZE = MEETINGSTONE_FORM_BUTTON_TEXT_SIZE
MeetingStoneConstants.MEETINGSTONE_SUCCESS_EYE_SIZE = MEETINGSTONE_SUCCESS_EYE_SIZE
MeetingStoneConstants.MEETINGSTONE_ICON_EYE_SIZE = MEETINGSTONE_ICON_EYE_SIZE
MeetingStoneConstants.MEETINGSTONE_ICON_EYE_HOST_SIZE = MEETINGSTONE_ICON_EYE_HOST_SIZE
MeetingStoneConstants.MEETINGSTONE_ICON_EYE_BACKGROUND_SIZE = MEETINGSTONE_ICON_EYE_BACKGROUND_SIZE
MeetingStoneConstants.MEETINGSTONE_ICON_EYE_BACKGROUND_MASK = MEETINGSTONE_ICON_EYE_BACKGROUND_MASK
MeetingStoneConstants.MEETINGSTONE_EMPTY_EYE_FADE_DURATION = MEETINGSTONE_EMPTY_EYE_FADE_DURATION
MeetingStoneConstants.MEETINGSTONE_CREATION_TITLE_MAX_LETTERS = MEETINGSTONE_CREATION_TITLE_MAX_LETTERS
MeetingStoneConstants.MEETINGSTONE_CREATION_SUMMARY_MAX_LETTERS = MEETINGSTONE_CREATION_SUMMARY_MAX_LETTERS
MeetingStoneConstants.MEETINGSTONE_PUBLISH_CONFIRM_TIMEOUT = MEETINGSTONE_PUBLISH_CONFIRM_TIMEOUT
MeetingStoneConstants.MEETINGSTONE_APPLICANT_REFRESH_BUTTON_WIDTH = MEETINGSTONE_APPLICANT_REFRESH_BUTTON_WIDTH
MeetingStoneConstants.MEETINGSTONE_APPLICANT_REFRESH_BUTTON_HEIGHT = MEETINGSTONE_APPLICANT_REFRESH_BUTTON_HEIGHT
MeetingStoneConstants.MEETINGSTONE_LEFT_BOTTOM_GRADIENT_TOP_OFFSET = MEETINGSTONE_LEFT_BOTTOM_GRADIENT_TOP_OFFSET
MeetingStoneConstants.MEETINGSTONE_TOP_RIGHT_FILIGREE_OFFSET_X = MEETINGSTONE_TOP_RIGHT_FILIGREE_OFFSET_X
MeetingStoneConstants.MEETINGSTONE_TOP_RIGHT_FILIGREE_OFFSET_Y = MEETINGSTONE_TOP_RIGHT_FILIGREE_OFFSET_Y
MeetingStoneConstants.MEETINGSTONE_BOTTOM_RIGHT_FILIGREE_OFFSET_X = MEETINGSTONE_BOTTOM_RIGHT_FILIGREE_OFFSET_X
MeetingStoneConstants.MEETINGSTONE_BOTTOM_RIGHT_FILIGREE_OFFSET_Y = MEETINGSTONE_BOTTOM_RIGHT_FILIGREE_OFFSET_Y
MeetingStoneConstants.MEETINGSTONE_MISSING_ADDON_MESSAGE_KEY = MEETINGSTONE_MISSING_ADDON_MESSAGE_KEY
