about summary refs log tree commit diff
path: root/src/components/MediaInsetBorder.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/MediaInsetBorder.tsx')
-rw-r--r--src/components/MediaInsetBorder.tsx42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/components/MediaInsetBorder.tsx b/src/components/MediaInsetBorder.tsx
new file mode 100644
index 000000000..839d79cae
--- /dev/null
+++ b/src/components/MediaInsetBorder.tsx
@@ -0,0 +1,42 @@
+import React from 'react'
+
+import {atoms as a, useTheme, ViewStyleProp} from '#/alf'
+import {Fill} from '#/components/Fill'
+
+/**
+ * Applies and thin border within a bounding box. Used to contrast media from
+ * bg of the container.
+ */
+export function MediaInsetBorder({
+  children,
+  style,
+  opaque,
+}: {
+  children?: React.ReactNode
+  /**
+   * Used where this border needs to match adjacent borders, such as in
+   * external link previews
+   */
+  opaque?: boolean
+} & ViewStyleProp) {
+  const t = useTheme()
+  const isLight = t.name === 'light'
+  return (
+    <Fill
+      style={[
+        a.rounded_sm,
+        a.border,
+        opaque
+          ? [t.atoms.border_contrast_low]
+          : [
+              isLight
+                ? t.atoms.border_contrast_low
+                : t.atoms.border_contrast_high,
+              {opacity: 0.6},
+            ],
+        style,
+      ]}>
+      {children}
+    </Fill>
+  )
+}