common: migrate to Android-only
|
@ -1,19 +0,0 @@
|
|||
@file:JvmName("AndroidType")
|
||||
|
||||
package dev.msfjarvis.claw.common.theme
|
||||
|
||||
import androidx.compose.ui.text.font.Font
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import dev.msfjarvis.claw.common.R
|
||||
|
||||
actual fun createFontFamily() =
|
||||
FontFamily(
|
||||
Font(R.font.manrope_bold, FontWeight.Bold),
|
||||
Font(R.font.manrope_extrabold, FontWeight.ExtraBold),
|
||||
Font(R.font.manrope_extralight, FontWeight.ExtraLight),
|
||||
Font(R.font.manrope_light, FontWeight.Light),
|
||||
Font(R.font.manrope_medium, FontWeight.Medium),
|
||||
Font(R.font.manrope_regular, FontWeight.Normal),
|
||||
Font(R.font.manrope_semibold, FontWeight.SemiBold),
|
||||
)
|
|
@ -1,306 +0,0 @@
|
|||
/*
|
||||
* Copyright 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.google.accompanist.flowlayout
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.layout.Layout
|
||||
import androidx.compose.ui.layout.Placeable
|
||||
import androidx.compose.ui.unit.Constraints
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.IntSize
|
||||
import androidx.compose.ui.unit.LayoutDirection
|
||||
import androidx.compose.ui.unit.dp
|
||||
import kotlin.math.max
|
||||
|
||||
/**
|
||||
* A composable that places its children in a horizontal flow. Unlike [Row], if the horizontal space
|
||||
* is too small to put all the children in one row, multiple rows may be used.
|
||||
*
|
||||
* Note that just like [Row], flex values cannot be used with [FlowRow].
|
||||
*
|
||||
* @param modifier The modifier to be applied to the FlowRow.
|
||||
* @param mainAxisSize The size of the layout in the main axis direction.
|
||||
* @param mainAxisAlignment The alignment of each row's children in the main axis direction.
|
||||
* @param mainAxisSpacing The main axis spacing between the children of each row.
|
||||
* @param crossAxisAlignment The alignment of each row's children in the cross axis direction.
|
||||
* @param crossAxisSpacing The cross axis spacing between the rows of the layout.
|
||||
* @param lastLineMainAxisAlignment Overrides the main axis alignment of the last row.
|
||||
*/
|
||||
@Composable
|
||||
fun FlowRow(
|
||||
modifier: Modifier = Modifier,
|
||||
mainAxisSize: SizeMode = SizeMode.Wrap,
|
||||
mainAxisAlignment: FlowMainAxisAlignment = FlowMainAxisAlignment.Start,
|
||||
mainAxisSpacing: Dp = 0.dp,
|
||||
crossAxisAlignment: FlowCrossAxisAlignment = FlowCrossAxisAlignment.Start,
|
||||
crossAxisSpacing: Dp = 0.dp,
|
||||
lastLineMainAxisAlignment: FlowMainAxisAlignment = mainAxisAlignment,
|
||||
content: @Composable () -> Unit
|
||||
) {
|
||||
Flow(
|
||||
modifier = modifier,
|
||||
orientation = LayoutOrientation.Horizontal,
|
||||
mainAxisSize = mainAxisSize,
|
||||
mainAxisAlignment = mainAxisAlignment,
|
||||
mainAxisSpacing = mainAxisSpacing,
|
||||
crossAxisAlignment = crossAxisAlignment,
|
||||
crossAxisSpacing = crossAxisSpacing,
|
||||
lastLineMainAxisAlignment = lastLineMainAxisAlignment,
|
||||
content = content
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* A composable that places its children in a vertical flow. Unlike [Column], if the vertical space
|
||||
* is too small to put all the children in one column, multiple columns may be used.
|
||||
*
|
||||
* Note that just like [Column], flex values cannot be used with [FlowColumn].
|
||||
*
|
||||
* @param modifier The modifier to be applied to the FlowColumn.
|
||||
* @param mainAxisSize The size of the layout in the main axis direction.
|
||||
* @param mainAxisAlignment The alignment of each column's children in the main axis direction.
|
||||
* @param mainAxisSpacing The main axis spacing between the children of each column.
|
||||
* @param crossAxisAlignment The alignment of each column's children in the cross axis direction.
|
||||
* @param crossAxisSpacing The cross axis spacing between the columns of the layout.
|
||||
* @param lastLineMainAxisAlignment Overrides the main axis alignment of the last column.
|
||||
*/
|
||||
@Composable
|
||||
fun FlowColumn(
|
||||
modifier: Modifier = Modifier,
|
||||
mainAxisSize: SizeMode = SizeMode.Wrap,
|
||||
mainAxisAlignment: FlowMainAxisAlignment = FlowMainAxisAlignment.Start,
|
||||
mainAxisSpacing: Dp = 0.dp,
|
||||
crossAxisAlignment: FlowCrossAxisAlignment = FlowCrossAxisAlignment.Start,
|
||||
crossAxisSpacing: Dp = 0.dp,
|
||||
lastLineMainAxisAlignment: FlowMainAxisAlignment = mainAxisAlignment,
|
||||
content: @Composable () -> Unit
|
||||
) {
|
||||
Flow(
|
||||
modifier = modifier,
|
||||
orientation = LayoutOrientation.Vertical,
|
||||
mainAxisSize = mainAxisSize,
|
||||
mainAxisAlignment = mainAxisAlignment,
|
||||
mainAxisSpacing = mainAxisSpacing,
|
||||
crossAxisAlignment = crossAxisAlignment,
|
||||
crossAxisSpacing = crossAxisSpacing,
|
||||
lastLineMainAxisAlignment = lastLineMainAxisAlignment,
|
||||
content = content
|
||||
)
|
||||
}
|
||||
|
||||
/** Used to specify the alignment of a layout's children, in cross axis direction. */
|
||||
enum class FlowCrossAxisAlignment {
|
||||
/** Place children such that their center is in the middle of the cross axis. */
|
||||
Center,
|
||||
/** Place children such that their start edge is aligned to the start edge of the cross axis. */
|
||||
Start,
|
||||
/** Place children such that their end edge is aligned to the end edge of the cross axis. */
|
||||
End,
|
||||
}
|
||||
|
||||
typealias FlowMainAxisAlignment = MainAxisAlignment
|
||||
|
||||
/** Layout model that arranges its children in a horizontal or vertical flow. */
|
||||
@Composable
|
||||
private fun Flow(
|
||||
modifier: Modifier,
|
||||
orientation: LayoutOrientation,
|
||||
mainAxisSize: SizeMode,
|
||||
mainAxisAlignment: FlowMainAxisAlignment,
|
||||
mainAxisSpacing: Dp,
|
||||
crossAxisAlignment: FlowCrossAxisAlignment,
|
||||
crossAxisSpacing: Dp,
|
||||
lastLineMainAxisAlignment: FlowMainAxisAlignment,
|
||||
content: @Composable () -> Unit
|
||||
) {
|
||||
fun Placeable.mainAxisSize() = if (orientation == LayoutOrientation.Horizontal) width else height
|
||||
fun Placeable.crossAxisSize() = if (orientation == LayoutOrientation.Horizontal) height else width
|
||||
|
||||
Layout(content, modifier) { measurables, outerConstraints ->
|
||||
val sequences = mutableListOf<List<Placeable>>()
|
||||
val crossAxisSizes = mutableListOf<Int>()
|
||||
val crossAxisPositions = mutableListOf<Int>()
|
||||
|
||||
var mainAxisSpace = 0
|
||||
var crossAxisSpace = 0
|
||||
|
||||
val currentSequence = mutableListOf<Placeable>()
|
||||
var currentMainAxisSize = 0
|
||||
var currentCrossAxisSize = 0
|
||||
|
||||
val constraints = OrientationIndependentConstraints(outerConstraints, orientation)
|
||||
|
||||
val childConstraints =
|
||||
if (orientation == LayoutOrientation.Horizontal) {
|
||||
Constraints(maxWidth = constraints.mainAxisMax)
|
||||
} else {
|
||||
Constraints(maxHeight = constraints.mainAxisMax)
|
||||
}
|
||||
|
||||
// Return whether the placeable can be added to the current sequence.
|
||||
fun canAddToCurrentSequence(placeable: Placeable) =
|
||||
currentSequence.isEmpty() ||
|
||||
currentMainAxisSize + mainAxisSpacing.roundToPx() + placeable.mainAxisSize() <=
|
||||
constraints.mainAxisMax
|
||||
|
||||
// Store current sequence information and start a new sequence.
|
||||
fun startNewSequence() {
|
||||
if (sequences.isNotEmpty()) {
|
||||
crossAxisSpace += crossAxisSpacing.roundToPx()
|
||||
}
|
||||
sequences += currentSequence.toList()
|
||||
crossAxisSizes += currentCrossAxisSize
|
||||
crossAxisPositions += crossAxisSpace
|
||||
|
||||
crossAxisSpace += currentCrossAxisSize
|
||||
mainAxisSpace = max(mainAxisSpace, currentMainAxisSize)
|
||||
|
||||
currentSequence.clear()
|
||||
currentMainAxisSize = 0
|
||||
currentCrossAxisSize = 0
|
||||
}
|
||||
|
||||
for (measurable in measurables) {
|
||||
// Ask the child for its preferred size.
|
||||
val placeable = measurable.measure(childConstraints)
|
||||
|
||||
// Start a new sequence if there is not enough space.
|
||||
if (!canAddToCurrentSequence(placeable)) startNewSequence()
|
||||
|
||||
// Add the child to the current sequence.
|
||||
if (currentSequence.isNotEmpty()) {
|
||||
currentMainAxisSize += mainAxisSpacing.roundToPx()
|
||||
}
|
||||
currentSequence.add(placeable)
|
||||
currentMainAxisSize += placeable.mainAxisSize()
|
||||
currentCrossAxisSize = max(currentCrossAxisSize, placeable.crossAxisSize())
|
||||
}
|
||||
|
||||
if (currentSequence.isNotEmpty()) startNewSequence()
|
||||
|
||||
val mainAxisLayoutSize =
|
||||
if (constraints.mainAxisMax != Constraints.Infinity && mainAxisSize == SizeMode.Expand) {
|
||||
constraints.mainAxisMax
|
||||
} else {
|
||||
max(mainAxisSpace, constraints.mainAxisMin)
|
||||
}
|
||||
val crossAxisLayoutSize = max(crossAxisSpace, constraints.crossAxisMin)
|
||||
|
||||
val layoutWidth =
|
||||
if (orientation == LayoutOrientation.Horizontal) {
|
||||
mainAxisLayoutSize
|
||||
} else {
|
||||
crossAxisLayoutSize
|
||||
}
|
||||
val layoutHeight =
|
||||
if (orientation == LayoutOrientation.Horizontal) {
|
||||
crossAxisLayoutSize
|
||||
} else {
|
||||
mainAxisLayoutSize
|
||||
}
|
||||
|
||||
layout(layoutWidth, layoutHeight) {
|
||||
sequences.forEachIndexed { i, placeables ->
|
||||
val childrenMainAxisSizes =
|
||||
IntArray(placeables.size) { j ->
|
||||
placeables[j].mainAxisSize() +
|
||||
if (j < placeables.lastIndex) mainAxisSpacing.roundToPx() else 0
|
||||
}
|
||||
val arrangement =
|
||||
if (i < sequences.lastIndex) {
|
||||
mainAxisAlignment.arrangement
|
||||
} else {
|
||||
lastLineMainAxisAlignment.arrangement
|
||||
}
|
||||
// TODO(soboleva): rtl support
|
||||
// Handle vertical direction
|
||||
val mainAxisPositions = IntArray(childrenMainAxisSizes.size) { 0 }
|
||||
with(arrangement) { arrange(mainAxisLayoutSize, childrenMainAxisSizes, mainAxisPositions) }
|
||||
placeables.forEachIndexed { j, placeable ->
|
||||
val crossAxis =
|
||||
when (crossAxisAlignment) {
|
||||
FlowCrossAxisAlignment.Start -> 0
|
||||
FlowCrossAxisAlignment.End -> crossAxisSizes[i] - placeable.crossAxisSize()
|
||||
FlowCrossAxisAlignment.Center ->
|
||||
Alignment.Center.align(
|
||||
IntSize.Zero,
|
||||
IntSize(width = 0, height = crossAxisSizes[i] - placeable.crossAxisSize()),
|
||||
LayoutDirection.Ltr
|
||||
)
|
||||
.y
|
||||
}
|
||||
if (orientation == LayoutOrientation.Horizontal) {
|
||||
placeable.place(x = mainAxisPositions[j], y = crossAxisPositions[i] + crossAxis)
|
||||
} else {
|
||||
placeable.place(x = crossAxisPositions[i] + crossAxis, y = mainAxisPositions[j])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Used to specify how a layout chooses its own size when multiple behaviors are possible. */
|
||||
// TODO(popam): remove this when Flow is reworked
|
||||
enum class SizeMode {
|
||||
/**
|
||||
* Minimize the amount of free space by wrapping the children, subject to the incoming layout
|
||||
* constraints.
|
||||
*/
|
||||
Wrap,
|
||||
/**
|
||||
* Maximize the amount of free space by expanding to fill the available space, subject to the
|
||||
* incoming layout constraints.
|
||||
*/
|
||||
Expand
|
||||
}
|
||||
|
||||
/** Used to specify the alignment of a layout's children, in main axis direction. */
|
||||
enum class MainAxisAlignment(internal val arrangement: Arrangement.Vertical) {
|
||||
// TODO(soboleva) support RTl in Flow
|
||||
// workaround for now - use Arrangement that equals to previous Arrangement
|
||||
/** Place children such that they are as close as possible to the middle of the main axis. */
|
||||
Center(Arrangement.Center),
|
||||
|
||||
/** Place children such that they are as close as possible to the start of the main axis. */
|
||||
Start(Arrangement.Top),
|
||||
|
||||
/** Place children such that they are as close as possible to the end of the main axis. */
|
||||
End(Arrangement.Bottom),
|
||||
|
||||
/**
|
||||
* Place children such that they are spaced evenly across the main axis, including free space
|
||||
* before the first child and after the last child.
|
||||
*/
|
||||
SpaceEvenly(Arrangement.SpaceEvenly),
|
||||
|
||||
/**
|
||||
* Place children such that they are spaced evenly across the main axis, without free space before
|
||||
* the first child or after the last child.
|
||||
*/
|
||||
SpaceBetween(Arrangement.SpaceBetween),
|
||||
|
||||
/**
|
||||
* Place children such that they are spaced evenly across the main axis, including free space
|
||||
* before the first child and after the last child, but half the amount of space existing
|
||||
* otherwise between two consecutive children.
|
||||
*/
|
||||
SpaceAround(Arrangement.SpaceAround)
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
/*
|
||||
* Copyright 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.google.accompanist.flowlayout
|
||||
|
||||
import androidx.compose.ui.unit.Constraints
|
||||
|
||||
internal enum class LayoutOrientation {
|
||||
Horizontal,
|
||||
Vertical
|
||||
}
|
||||
|
||||
internal data class OrientationIndependentConstraints(
|
||||
val mainAxisMin: Int,
|
||||
val mainAxisMax: Int,
|
||||
val crossAxisMin: Int,
|
||||
val crossAxisMax: Int
|
||||
) {
|
||||
constructor(
|
||||
c: Constraints,
|
||||
orientation: LayoutOrientation
|
||||
) : this(
|
||||
if (orientation === LayoutOrientation.Horizontal) c.minWidth else c.minHeight,
|
||||
if (orientation === LayoutOrientation.Horizontal) c.maxWidth else c.maxHeight,
|
||||
if (orientation === LayoutOrientation.Horizontal) c.minHeight else c.minWidth,
|
||||
if (orientation === LayoutOrientation.Horizontal) c.maxHeight else c.maxWidth
|
||||
)
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
package dev.msfjarvis.claw.common.ui
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
|
||||
@Composable
|
||||
expect fun NetworkImage(
|
||||
url: String,
|
||||
contentDescription: String,
|
||||
modifier: Modifier,
|
||||
)
|
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"/></svg>
|
Before Width: | Height: | Size: 217 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M21.99 4c0-1.1-.89-2-1.99-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4-.01-18zM20 4v13.17L18.83 16H4V4h16zM6 12h12v2H6zm0-3h12v2H6zm0-3h12v2H6z"/></svg>
|
Before Width: | Height: | Size: 301 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg>
|
Before Width: | Height: | Size: 333 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.24 3 7.5 3 4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.32C18.6 15.36 22 12.28 22 8.5 22 5.42 19.58 3 16.5 3zm-4.4 15.55l-.1.1-.1-.1C7.14 14.24 4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z"/></svg>
|
Before Width: | Height: | Size: 502 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M23 12l-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68L23 12zm-4.51 2.11l.26 2.79-2.74.62-1.43 2.41L12 18.82l-2.58 1.11-1.43-2.41-2.74-.62.26-2.8L3.66 12l1.85-2.12-.26-2.78 2.74-.61 1.43-2.41L12 5.18l2.58-1.11 1.43 2.41 2.74.62-.26 2.79L20.34 12l-1.85 2.11zM11 15h2v2h-2zm0-8h2v6h-2z"/></svg>
|
Before Width: | Height: | Size: 558 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M23 12l-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68L23 12zm-10 5h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
|
Before Width: | Height: | Size: 365 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-.61.08-1.21.21-1.78L8.99 15v1c0 1.1.9 2 2 2v1.93C7.06 19.43 4 16.07 4 12zm13.89 5.4c-.26-.81-1-1.4-1.9-1.4h-1v-3c0-.55-.45-1-1-1h-6v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41C17.92 5.77 20 8.65 20 12c0 2.08-.81 3.98-2.11 5.4z"/></svg>
|
Before Width: | Height: | Size: 460 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M11.57 13.16c-1.36.28-2.17 1.16-2.17 2.41 0 1.34 1.11 2.42 2.49 2.42 2.05 0 3.71-1.66 3.71-3.71 0-1.07-.15-2.12-.46-3.12-.79 1.07-2.2 1.72-3.57 2zM13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 17.41 3.8 13.5.67zM12 20c-3.31 0-6-2.69-6-6 0-1.53.3-3.04.86-4.43 1.01 1.01 2.41 1.63 3.97 1.63 2.66 0 4.75-1.83 5.28-4.43C17.34 8.97 18 11.44 18 14c0 3.31-2.69 6-6 6z"/></svg>
|
Before Width: | Height: | Size: 619 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 17.41 3.8 13.5.67zM11.71 19c-1.78 0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 4.04 0 2.65-2.15 4.8-4.8 4.8z"/></svg>
|
Before Width: | Height: | Size: 462 B |
|
@ -1,18 +0,0 @@
|
|||
@file:JvmName("DesktopType")
|
||||
|
||||
package dev.msfjarvis.claw.common.theme
|
||||
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.platform.Font
|
||||
|
||||
actual fun createFontFamily() =
|
||||
FontFamily(
|
||||
Font("font/manrope_bold.ttf", FontWeight.Bold),
|
||||
Font("font/manrope_extrabold.ttf", FontWeight.ExtraBold),
|
||||
Font("font/manrope_extralight.ttf", FontWeight.ExtraLight),
|
||||
Font("font/manrope_light.ttf", FontWeight.Light),
|
||||
Font("font/manrope_medium.ttf", FontWeight.Medium),
|
||||
Font("font/manrope_regular.ttf", FontWeight.Normal),
|
||||
Font("font/manrope_semibold.ttf", FontWeight.SemiBold),
|
||||
)
|
|
@ -1,19 +0,0 @@
|
|||
package dev.msfjarvis.claw.common.ui
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import io.kamel.image.KamelImage
|
||||
import io.kamel.image.lazyPainterResource
|
||||
|
||||
@Composable
|
||||
actual fun NetworkImage(
|
||||
url: String,
|
||||
contentDescription: String,
|
||||
modifier: Modifier,
|
||||
) {
|
||||
KamelImage(
|
||||
resource = lazyPainterResource(url),
|
||||
contentDescription = contentDescription,
|
||||
modifier = modifier,
|
||||
)
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
package dev.msfjarvis.claw.common.urllauncher
|
||||
|
||||
import androidx.compose.ui.platform.UriHandler
|
||||
import io.github.aakira.napier.Napier
|
||||
import java.awt.Desktop
|
||||
import java.io.IOException
|
||||
import java.net.URI
|
||||
|
||||
class UrlLauncher : UriHandler {
|
||||
override fun openUri(uri: String) {
|
||||
if (Desktop.isDesktopSupported()) {
|
||||
val desktop = Desktop.getDesktop()
|
||||
if (desktop.isSupported(Desktop.Action.BROWSE)) {
|
||||
try {
|
||||
desktop.browse(URI(uri))
|
||||
} catch (e: IOException) {
|
||||
Napier.d(tag = "UrlLauncher") { "Failed to open URL: $uri" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,13 +2,22 @@ package dev.msfjarvis.claw.common.theme
|
|||
|
||||
import androidx.compose.material3.Typography
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.Font
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.sp
|
||||
import dev.msfjarvis.claw.common.R
|
||||
|
||||
expect fun createFontFamily(): FontFamily
|
||||
|
||||
private val Manrope = createFontFamily()
|
||||
private val Manrope =
|
||||
FontFamily(
|
||||
Font(R.font.manrope_bold, FontWeight.Bold),
|
||||
Font(R.font.manrope_extrabold, FontWeight.ExtraBold),
|
||||
Font(R.font.manrope_extralight, FontWeight.ExtraLight),
|
||||
Font(R.font.manrope_light, FontWeight.Light),
|
||||
Font(R.font.manrope_medium, FontWeight.Medium),
|
||||
Font(R.font.manrope_regular, FontWeight.Normal),
|
||||
Font(R.font.manrope_semibold, FontWeight.SemiBold),
|
||||
)
|
||||
|
||||
val AppTypography =
|
||||
Typography(
|
|
@ -7,7 +7,7 @@ import androidx.compose.ui.draw.clip
|
|||
import coil.compose.AsyncImage
|
||||
|
||||
@Composable
|
||||
actual fun NetworkImage(
|
||||
fun NetworkImage(
|
||||
url: String,
|
||||
contentDescription: String,
|
||||
modifier: Modifier,
|